耦合和凝聚力

我试图简化耦合和凝聚力的概念,以一个简洁的定义。 有人能给我一个简短的和可以理解的解释(比维基百科的定义在这里和这里更短)吗? 他们如何互动?

谢谢。

任何人都有一个很好的例子吗?

耦合

  • 松散:你和便利店的家伙。 你通过一个明确的协议进行沟通,以实现你的目标 – 你付钱,他让你走出去,带着一包Cheetos。 你们中的任何一个都可以在不中断系统的情况下进行更换。

  • 紧:你和你的妻子。

凝聚

  • 低:便利店。 你去那里的一切从天然气到牛奶到ATM银行。 产品和服务几乎没有什么共同之处,把它们集中到一个地方的便利可能不足以抵消成本增加和质量下降。

  • 高:奶酪店。 他们卖奶酪。 没有其他的。 当涉及到奶酪,但不能打败他们。

耦合 – 衡量一个模块(包,类,方法)依赖于其他模块的程度。 希望减less耦合,或减less给定模块依赖于系统的其他模块的量。

凝聚力 – 衡量一个模块的成员(一个方法中的类,方法,function)与同一个模块的其他成员有多密切相关的度量。 增加凝聚力是可取的,因为这表明一个模块有一个非常具体的任务,只做这个任务。

Bertrand Meyer的面向对象软件构build是与OO(包括这些)相关的软件devise概念的最佳综合讨论之一。

关于“耦合”,他给出了他的弱耦合/小接口规则如下:

如果两个模块通信,他们应该尽可能less地交换信息。

迈耶与凝聚力有关的材料从来没有被简化成一个简单的陈述,但是我认为史蒂夫·麦康奈尔的“代码完成”这个句子总结得非常好:

凝聚力指一个class级中的所有例程或例程中的所有代码如何支持一个中心目的

耦合意味着依赖于他人。凝聚意味着自身的完整性。

“耦合是模块间相互依赖关系的度量,应该尽量减less”“凝聚力,要最大化的质量,关注每个模块执行的活动之间的关系”。

引自本文: http : //steve.vinoski.net/pdf/IEEE-Old_Measures_for_New_Services.pdf

测量耦合的快捷方法是测量您的import (或类似)报表。

请参阅原始文件中介绍的术语: http : //www.research.ibm.com/journal/sj/132/ibmsj1302C.pdf

模块之间的高内聚和模块之间的低耦合通常被认为与OO编程语言的高质量有关。

例如,每个Java类中的代码必须具有较高的内部凝聚力,但是尽可能与其他Java类中的代码松散耦合。

耦合是指两个类/模块之间的相关程度,以及它们彼此之间的依赖程度。 低耦合意味着改变一个类别的主要内容不应该影响另一个类别。 高级的耦合会使你的代码很难做出修改和维护,因为类是紧密结合在一起的,所以修改可能意味着整个系统的改进。

内聚指的是类(或模块)将会做什么。 低凝聚力意味着class级做了很多种行动,而不是集中于应该做什么。 那么高凝聚力就意味着这个阶级专注于应该做什么,也就是说只有与阶级意图有关的方法。

所有优秀的软件devise都将具有较高的内聚性和较低的耦合度。