耦合与内聚


71

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

谢谢。

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


2
逃脱我的第一个区别:coupling类,而cohesion一个单独的类。
罗勒·布尔克

这回答了你的问题了吗?内聚和耦合之间的区别
毛里求斯

Answers:


216

耦合

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

  • 紧:你和你的妻子。

凝聚

  • 低:便利店。您可以在那里找到从天然气到牛奶再到ATM银行业务的一切服务。产品和服务的共同点很少,将它们全部集中在一个地方的便利可能不足以抵消由此导致的成本增加和质量下降。

  • 高:奶酪店。他们卖奶酪。没有其他的。不过,在奶酪方面无法战胜他们。


25
汉姆,我正在预料到妻子的凝聚力会很高,我不得不说,我有点失望:)
ubiquibacon 2011年

高:一家珠宝店可能会在以下位置购买妻子的周年纪念礼物-他们只处理与珠宝相关的商品,并且专门从事此类商品,因此它们的商品质量较高,并且都聚集在一个整洁,维护良好的商店中,风格漂亮; 这些物品特性可帮助希望珠宝的购物者以可预测/有效的体验来完成珠宝任务(可能还包括清洁珠宝)。所有的优点都较少,因此百货商店中的珠宝柜台有许多不相关的部门,因为它们的专业性较差,并且很难找到其他部门经过
cellepo

顺便说一句-我猜这个答案也可能是一夫一妻制。而且也许也没有离婚或再婚(即使在丧偶之后)。
cellepo

67

耦合-衡量一个模块(包,类,方法)对其他模块的依赖程度的度量。期望减少耦合或减少给定模块依赖于系统的其他模块的数量。

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



24

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

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

如果两个模块通信,则它们应交换尽可能少的信息。

迈耶关于凝聚力的材料从来没有被归结为一个简单的声明,但是我认为史蒂夫·麦康奈尔(Steve McConnell)的《密码大全》Code Complete)中的这一句话可以很好地总结一下:

内聚性是指类中的所有例程或例程中的所有代码在多大程度上支持中心目的



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.