什么是凝聚力和脱钩?我找到了有关耦合的信息,但没有关于解耦。

有帮助吗?

解决方案

亚伦的这篇文章非常适合理解,我也建议您阅读Manning出版物 弹簧行动 书,他们提供了很好的例子,说明了春季如何解决这个问题,它肯定会改善您对此的理解。

编辑 :

我在这本名为“成长为对象的软件”的伟大书中提到了这一点:以测试为指导:

耦合:

元素如果一个力的变化另一方面变化,则元素是耦合的。例如,如果两个类从共同的父母继承,则一个类的更改可能需要另一个类别的更改。想想组合音频系统:它是紧密耦合的,因为如果我们想从模拟广播更改为数字广播,我们必须重建整个系统。如果我们从分离中组装一个系统,它将具有低耦合,我们可以换掉接收器。 “松散”耦合功能(即,耦合低的功能)更容易维护。

凝聚:

一个元素 凝聚 是衡量其职责是否形成有意义的单位的衡量标准。例如,解析日期和URL的类并不连贯,因为它们是无关的概念。想想一台可以洗衣服和菜肴的机器,这不太可能同时做得很好。2在另一个极端情况下,仅解析URL中标点符号的课程不太可能是连贯的,因为它并不代表整个概念。为了完成任何操作,程序员将不得不为协议,主机,资源等找到其他解析器。具有“高”连贯性的功能更易于维护。

其他提示

凝聚力 - 与一个阶级/方法应对一件事负责的原则相关,即只有不属于封装的流浪方法;一种方法只做一件事。高/低凝聚力是其保持的程度。

耦合 - 系统的不同部分相互依存。例如如何和依赖性。如果两个类互相调用彼此的方法,那么它们会紧密耦合,因为更改将意味着必须更改另一个。解耦是使某些事情紧密耦合或根本不是完全耦合的过程。

柔性系统具有较高的内聚和松散的耦合。

对于耦合, 这篇Wikipedia文章 应该回答您的所有问题。 本文 处理凝聚力。

“解耦”只是“小/低耦合”的另一个名称。

因此,这些术语回答以下问题:

  • 项目的每个部分取决于另一部分?
  • 如果您只想使用项目的一部分(喜欢解决特定问题),您需要了解该项目的其余部分?
  • 您项目的每个部分都集中在针对特定问题的单一解决方案上,还是将解决方案“泄漏”到其他部件上?

这是我对凝聚力的想法。想象一下有一个模块。在该模块内部,我们有一些任务。当这些任务彼此高度相关时,我们说它具有很高的凝聚力。当这些任务无关时,我们说它的凝聚力较低。我最好解释解耦的最佳尝试是,解耦是去除耦合的行为。

低耦合有助于我们获得高度的凝聚力!请记住,我们希望我们的模块具有相关的任务和一个责任。但是什么是耦合?耦合是对其他模块的依赖程度,以实现我们对该模块的一项责任。因此,通过低耦合,我们说我们不太依赖外部模块,因此我们具有很高的内聚力。

但是,如果我们对外部模块有很多依赖性,我们将具有较高的耦合和低内聚力。得到它?

其他更具装饰的思想家和团体说:

凝聚力是单个模块执行的任务在功能上相关的程度。“ IEEE,1983”内聚会是将模块凝聚在一起的“胶”。可以将其视为模块组件元素之间的关联类型。通常,人们希望能够最高水平的凝聚力。”伯格兰,1981年

如果该单元中的元素表现出高度的功能相关性,则据说软件组件会表现出高度的内聚力。这意味着程序单元中的每个元素对于该单元实现其目的都至关重要。 Sommerville,1989年

脱钩允许将对象相互作用从类和继承分离为用于多态性的不同抽象层,用于将封装解除封装,这是使用可重复使用的代码来防止离散代码模块相互交互的实践。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top