耦合与内聚

时间:2020-03-05 18:46:34  来源:igfitidea点击:

我试图将耦合和内聚的概念简化为一个简洁的定义。有人可以给我一个简短易懂的解释(比此处和此处的Wikipedia定义短)吗?他们如何互动?

谢谢。

有人有一个很好的简短例子吗?

解决方案

回答

耦合衡量一个模块(包,类,方法)在多大程度上依赖于其他模块的度量。希望减少耦合,或者减少给定模块依赖于系统的其他模块的数量。

内聚性度量模块的成员(类,方法,方法中的功能)与同一模块的其他成员之间的密切关系的度量。期望增加内聚力,因为这表明模块具有非常具体的任务并且仅执行该任务。

回答

"耦合是模块之间相互依存的一种度量,
应该最小化"
"凝聚力是一种最大化的品质,着眼于人际关系
在每个模块执行的活动之间。"

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

回答

一种快速而简单的度量耦合的方法是度量" import"(或者类似)语句。

回答

耦合

  • 宽松:我们和便利店里的人。我们通过定义明确的协议进行交流以实现各自的目标-我们付钱,他让我们带着Cheetos包出去走走。无需更换系统即可更换其中任何一个。
  • 紧:我们和妻子。

凝聚

  • 低:便利店。我们可以在那里找到从天然气到牛奶再到ATM银行业务的一切服务。产品和服务几乎没有共同点,将它们全部集中在一个地方的便利可能不足以抵消由此导致的成本增加和质量下降。
  • 高:奶酪店。他们卖奶酪。没有其他的。但是,在奶酪方面无法战胜他们。

回答

Bertrand Meyer的"面向对象的软件构造"是与OO相关的软件设计概念的最佳综合讨论之一。

关于"耦合",他给出了弱耦合/小接口规则,如下所示:

If two modules communicate, they should exchange as little information as possible.

迈耶关于凝聚力的材料从来没有被归结为一个简单的声明,但是我认为史蒂夫·麦康奈尔的《代码完成》中的这句话可以很好地总结出来:

Cohesion refers to how closely all the routines in a class or all the code in a routine support a central purpose

回答

耦合意味着对他人的依赖;凝聚意味着对自己的完整性。