【问题标题】:Coupling and cohesion耦合和内聚
【发布时间】:2010-09-07 14:02:12
【问题描述】:

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

谢谢。

谁有一个简短的好例子?

【问题讨论】:

标签: oop architecture theory software-design ooad


【解决方案1】:

耦合

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

  • 紧:你和你的妻子。

凝聚力

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

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

【讨论】:

  • 嗯,我期待一个高凝聚力的妻子榜样,我不得不说,我有点失望:)
  • 高:可以购买妻子周年纪念礼物的珠宝店——他们只经营珠宝主题的物品,并且专门从事珠宝,所以他们的物品质量更高,而且都整齐地聚集在一起,维护良好的商店,风格漂亮;这些物品特征帮助特别想要珠宝的购物者以可预测/高效的体验完成他们的珠宝任务(可能还包括清洁珠宝)。百货公司的珠宝柜台有许多不相关的部门,因为它不那么专业,而且很难找到经过的其他部门
  • 顺便说一句 - 我想这个答案也可能假设一夫一妻制。也许也没有离婚或再婚(即使在丧偶之后)。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-06
            • 1970-01-01
            相关资源
            最近更新 更多