什么是凝聚力和解耦?我找到了关于耦合的信息,但没有找到关于解耦的信息。
答案 0 :(得分:71)
Aaron的那篇文章非常有助于理解,我也建议你阅读manning出版物Spring in Action一书,他们就弹簧如何解决这个问题给出了非常好的例子,它肯定会提高你对这个问题的理解
编辑:
我在这本名为“以测试为导向的面向对象的软件”这本伟大的书中提到了这一点:
耦合:
如果改变,则元素耦合 一方迫使另一方改变。对于 例如,如果两个类继承自a 共同的父母,然后改变一个 class可能需要更改 其他。想想一个组合音频系统: 它是紧密耦合的,因为如果我们 想要从模拟变为数字 收音机,我们必须重建整体 系统。如果我们组装一个系统 分开,它会有低耦合 我们可以换掉 接收器。 “松散”耦合功能 (即,具有低耦合的那些)是 更容易维护。
凝聚:
元素的内聚是一种衡量标准 它的职责是否构成一个 有意义的单位例如,一个班级 解析日期和URL都不是 连贯,因为他们是无关的 概念。想想一台机器 洗衣服和洗碗 - 就是这样 不太可能做得很好.2 另一个极端,一个解析的类 只有URL中的标点符号 不太可能是连贯的,因为它 并不代表一个完整的概念。至 得到任何东西,程序员会 必须找到其他解析器 协议,主机,资源等。 具有“高”连贯性的特征是 更容易维护。
答案 1 :(得分:13)
凝聚力 - 与一个类/方法应该只对一件事负责的原则有关,即没有不属于封装的杂散方法;一种方法只做一件事。高/低凝聚力是指其持有的程度。
耦合 - 系统的不同部分是如何相互依赖的。例如,存在依赖关系的方式和位置。如果两个类调用彼此的方法,则它们紧密耦合,因为改变一个意味着必须改变另一个。解耦是制造紧密耦合的东西的过程,或者完全没有。
灵活的系统具有高内聚力和松散耦合。
答案 2 :(得分:2)
对于耦合,this Wikipedia article应回答您的所有问题。 This article涉及凝聚力。
“去耦”只是“小/低耦合”的另一个名称。
所以这些术语回答了这些问题:
答案 3 :(得分:0)
以下是我对凝聚力的看法。想象一下有一个模块。在该模块中,我们有一些任务。当这些任务彼此高度相关时,我们说它具有很高的凝聚力。当这些任务无关时,我们说它具有低凝聚力。我解释解耦的最佳尝试是解耦是消除耦合的行为。
低耦合有助于我们获得高凝聚力!请记住,我们希望我们的模块具有相关任务和单一责任。但什么是耦合?耦合是对其他模块的依赖程度,以实现我们对该模块的单一责任。因此,通过低耦合,我们说我们不是非常依赖外部模块,因此我们具有高内聚性。
但是,如果我们对外部模块有很多依赖关系,那么我们就会有高耦合和低内聚。得到它?
凝聚力是单个模块执行的任务在功能上相关的程度。“IEEE,1983”Cohesion是将模块组合在一起的“粘合剂”。它可以被认为是模块的组成元素之间的关联类型。一般来说,人们希望最高水平的凝聚力可能。“Bergland,1981
如果该单元中的元件表现出高度的功能相关性,则称软件组件表现出高度的内聚力。这意味着程序单元中的每个元素对于该单元实现其目的必不可少。 Sommerville,1989
答案 4 :(得分:-2)
解耦允许将对象交互与类和继承分离成不同的抽象层,用于多态地解耦封装,这是使用可重用代码来防止离散代码模块相互交互的实践。