【发布时间】:2010-09-07 14:02:12
【问题描述】:
【问题讨论】:
-
一开始我忽略了一个区别:
coupling是在类之间,而cohesion是在一个类中。 -
这能回答你的问题吗? Difference Between Cohesion and Coupling
标签: oop architecture theory software-design ooad
【问题讨论】:
coupling 是在类之间,而cohesion是在一个类中。
标签: oop architecture theory software-design ooad
耦合
Loose:你和便利店的那个人。您通过定义明确的协议进行通信以实现各自的目标 - 您付钱,他让您带着奇多袋子走出去。可以在不中断系统的情况下更换你们中的任何一个。
紧:你和你的妻子。
凝聚力
低:便利店。你去那里买从汽油到牛奶再到 ATM 银行的所有东西。产品和服务几乎没有共同点,将它们全部集中在一个地方的便利性可能不足以抵消由此带来的成本增加和质量下降。
High:奶酪店。他们卖奶酪。没有其他的。不过,在奶酪方面无法击败他们。
【讨论】:
耦合 - 衡量一个模块(包、类、方法)对其他模块的依赖程度。希望减少耦合,或减少给定模块对系统其他模块的依赖量。
内聚度 - 衡量一个模块的成员(类、方法、方法中的功能)与同一模块的其他成员之间的密切程度。增加凝聚力是可取的,因为这表明一个模块有一个非常具体的任务并且只执行该任务。
【讨论】:
耦合意味着依赖他人。
凝聚力意味着自身的完整性。
【讨论】:
Bertrand Meyer 的Object Oriented Software Construction 是对与 OO(包括这些)相关的软件设计概念的最佳综合讨论之一。
关于“耦合”,他给出了他的弱耦合/小接口规则如下:
如果两个模块进行通信,它们应该交换尽可能少的信息。
Meyer 与凝聚力相关的材料从未被归结为一个简洁的陈述,但我认为 Steve McConnell 的 Code Complete 的这句话总结得很好:
内聚度是指类中的所有例程或例程中的所有代码支持中心目的的紧密程度
【讨论】:
衡量耦合的一种快速而简单的方法是衡量您的import(或类似的)语句。
【讨论】:
“耦合是模块之间相互依赖的度量, 应该最小化” “凝聚力,一种被最大化的品质,专注于关系 在每个模块执行的活动之间。”
引自本文:http://steve.vinoski.net/pdf/IEEE-Old_Measures_for_New_Services.pdf
【讨论】: