凝聚力和解耦,它们代表什么?

时间:2010-05-21 11:26:05

标签: oop decoupling coupling cohesion

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

5 个答案:

答案 0 :(得分:71)

Aaron的那篇文章非常有助于理解,我也建议你阅读manning出版物Spring in Action一书,他们就弹簧如何解决这个问题给出了非常好的例子,它肯定会提高你对这个问题的理解

编辑:

我在这本名为“以测试为导向的面向对象的软件”这本伟大的书中提到了这一点:

耦合:

  

如果改变,则元素耦合   一方迫使另一方改变。对于   例如,如果两个类继承自a   共同的父母,然后改变一个   class可能需要更改   其他。想想一个组合音频系统:   它是紧密耦合的,因为如果我们   想要从模拟变为数字   收音机,我们必须重建整体   系统。如果我们组装一个系统   分开,它会有低耦合   我们可以换掉   接收器。 “松散”耦合功能   (即,具有低耦合的那些)是   更容易维护。

凝聚:

  

元素的内聚是一种衡量标准   它的职责是否构成一个   有意义的单位例如,一个班级   解析日期和URL都不是   连贯,因为他们是无关的   概念。想想一台机器   洗衣服和洗碗 - 就是这样   不太可能做得很好.2   另一个极端,一个解析的类   只有URL中的标点符号   不太可能是连贯的,因为它   并不代表一个完整的概念。至   得到任何东西,程序员会   必须找到其他解析器   协议,主机,资源等。   具有“高”连贯性的特征是   更容易维护。

答案 1 :(得分:13)

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

耦合 - 系统的不同部分是如何相互依赖的。例如,存在依赖关系的方式和位置。如果两个类调用彼此的方法,则它们紧密耦合,因为改变一个意味着必须改变另一个。解耦是制造紧密耦合的东西的过程,或者完全没有。

灵活的系统具有高内聚力和松散耦合。

答案 2 :(得分:2)

对于耦合,this Wikipedia article应回答您的所有问题。 This article涉及凝聚力。

“去耦”只是“小/低耦合”的另一个名称。

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

  • 您项目的每个部分取决于另一部分多少钱?
  • 如果您只想使用项目的一部分(比如解决特定问题),您需要了解项目的其他部分需要多少?
  • 您的项目的每个部分是专注于针对特定问题的单一解决方案,还是将解决方案“泄漏”到其他部分?

答案 3 :(得分:0)

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

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

但是,如果我们对外部模块有很多依赖关系,那么我们就会有高耦合和低内聚。得到它?

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

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

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

答案 4 :(得分:-2)

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