75

我试图将耦合和内聚的概念归结为一个简洁的定义。有人可以给我一个简短易懂的解释(比维基百科上的定义短这里这里)?他们如何互动?

谢谢。

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

4

6 回答 6

227

耦合

  • 松:你和便利店的那个人。您通过明确定义的协议进行通信以实现各自的目标 - 您付钱,他让您带着奇多袋子走出去。可以在不中断系统的情况下更换你们中的任何一个。

  • 紧:你和你的妻子。

凝聚

  • 低:便利店。你去那里买从汽油到牛奶再到 ATM 银行的所有东西。产品和服务几乎没有共同点,将它们全部放在一个地方的便利可能不足以抵消由此产生的成本增加和质量下降。

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

于 2008-09-02T16:37:49.307 回答
69

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

内聚 - 衡量一个模块的成员(类、方法、方法中的功能)与同一模块的其他成员之间的紧密程度。增加凝聚力是可取的,因为这表明一个模块有一个非常具体的任务并且只做那个任务。

于 2008-09-02T16:27:02.093 回答
26

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

于 2010-02-19T08:03:06.603 回答
25

与 OO(包括这些)相关的软件设计概念的最佳综合讨论之一是 Bertrand Meyer 的Object Oriented Software Construction

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

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

Meyer 与凝聚力相关的材料从来没有被归结为一个简洁的陈述,但我认为 Steve McConnell 的Code Complete中的这句话总结得很好:

内聚性是指一个类中的所有例程或例程中的所有代码支持一个中心目的的紧密程度

于 2008-09-02T16:46:29.003 回答
4

衡量耦合的一种快速而简单的方法是衡量您的import(或类似的)陈述。

于 2008-09-02T16:34:32.810 回答
2

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

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

于 2008-09-02T16:31:10.337 回答