【问题标题】:Cohesion and Decoupling, what do they represent?内聚和解耦,它们代表什么?
【发布时间】:2011-02-22 07:41:36
【问题描述】:

什么是内聚和解耦?我找到了关于耦合的信息,但没有找到关于解耦的信息。

【问题讨论】:

    标签: oop decoupling coupling cohesion


    【解决方案1】:

    Aaron 的那篇文章很好理解,我也建议你阅读 manning 的出版物Spring in Action 的书,他们给出了很好的例子来说明 spring 如何解决这个问题,它肯定会提高你对这个的理解。

    编辑:

    我在这本名为“以测试为导向的面向对象的软件发展”的好书中遇到了这一点:

    耦合:

    如果发生变化,则元素是耦合的 一个迫使另一个改变。为了 例如,如果两个类继承自 共同的父母,然后改变一个 类可能需要改变 其他。考虑一个组合音频系统: 它是紧密耦合的,因为如果我们 想从模拟变为数字 电台,我们必须重建整个 系统。如果我们组装一个系统 分离,它将具有低耦合 我们可以换掉 接收者。 “松散”耦合的特征 (即低耦合的)是 更容易维护。

    凝聚力:

    元素的凝聚力是衡量标准 其职责是否形成 有意义的单位。例如,一个类 解析日期和 URL 的不是 连贯的,因为它们不相关 概念。想想一台机器 洗衣服和盘子——这是 不太可能两者都做好。 2 在 另一个极端,一个解析的类 只有 URL 中的标点符号是 不太可能是连贯的,因为它 不代表一个完整的概念。到 做任何事情,程序员都会 必须找到其他解析器 协议、主机、资源等。 具有“高”一致性的特征是 更容易维护。

    【讨论】:

      【解决方案2】:

      内聚 - 与类/方法应该只负责一件事的原则有关,即没有不属于封装的杂散方法;一个方法只做一件事。高/低内聚度是其保持的程度。

      耦合 - 系统不同部分的相互依赖程度。例如,如何以及在哪里存在依赖关系。如果两个类调用彼此的方法,那么它们是紧密耦合的,因为改变一个就意味着必须改变另一个。解耦是使紧密耦合的事物减少或根本不耦合的过程。

      柔性系统具有高内聚和松耦合。

      【讨论】:

        【解决方案3】:

        对于耦合,this Wikipedia article 应该回答你所有的问题。 This article 处理凝聚力。

        “去耦”只是“小/低耦合”的别称。

        所以这些术语回答了这些问题:

        • 项目的每个部分对另一个部分的依赖程度如何?
        • 如果您只想使用项目的一部分(例如解决特定问题),您需要对项目的所有其余部分了解多少?
        • 您项目的每个部分是专注于针对特定问题的单一解决方案,还是将解决方案“泄露”到其他部分?

        【讨论】:

        • 解耦是指制作一个紧密耦合的部分,更松散耦合 - 或根本不耦合。耦合/内聚当然不是同一个原则,但它们的共同目标是使系统更加灵活。
        • 您所说的“所有这些术语都意味着同一件事”是什么意思?我不确定我是否关注你。正如罗伯特所指出的,它们确实意味着不同的东西
        • 谢谢,我已经改进了答案。
        【解决方案4】:

        以下是我对凝聚力的看法。想象有一个模块。在该模块中,我们有一些任务。当这些任务彼此高度相关时,我们说它具有高凝聚力。当这些任务不相关时,我们说它具有低凝聚力。我解释解耦的最佳尝试是解耦是消除耦合的行为。

        低耦合帮助我们获得高内聚!请记住,我们希望我们的模块具有相关的任务和一个单一的职责。但什么是耦合?耦合是对其他模块的依赖程度,以实现我们对该模块的单一职责。因此,通过低耦合,我们说我们不太依赖外部模块,因此我们具有高内聚性。

        但是,如果我们对外部模块有很多依赖,我们就会有高耦合和低内聚。明白了吗?

        其他更多装饰的思想家和团体说:

        内聚力是单个模块执行的任务在功能上相关的程度。” IEEE,1983 “内聚力是将模块粘合在一起的“粘合剂”。它可以被认为是模块的组成元素之间的关联类型。一般来说,人们想要尽可能高的凝聚力。”Bergland,1981

        如果该单元中的元素表现出高度的功能相关性,则称该软件组件表现出高度的内聚性。这意味着程序单元中的每个元素对于该单元实现其目的都应该是必不可少的。萨默维尔,1989

        【讨论】:

          【解决方案5】:

          解耦允许将对象交互与类和继承分离到不同的抽象层中,用于多态性解耦封装,这是使用可重用代码来防止离散代码模块相互交互的做法。

          【讨论】:

          • 您的定义相互冲突...尝试简化您的解释...
          猜你喜欢
          • 2010-09-07
          • 2012-12-09
          • 1970-01-01
          • 1970-01-01
          • 2017-09-24
          • 1970-01-01
          • 2019-02-14
          • 1970-01-01
          相关资源
          最近更新 更多