假设方法M1
和M2
的责任密切相关
第一个例子:
如果
•M1
和M2
在classA
中定义(因此classA
具有高度的内聚性)
•类别B
使用A.M1
和类别C
使用A.M2
然后
•A
与B
和C
类耦合
•更改M1
的签名只需要更改B
,而不需要更改C
第二个例子:
如果
•M1
在类A1
中定义(因此B
与A1
耦合)
•M2
用A2
类定义(因此C
与A2
耦合)
然后
•更改M1
的签名只需要更改B
,而不需要更改C
a) 据我所知,上一个例子中的类与第一个例子中的类并不耦合!还是我错过了什么?
b) 据我所知,第一个示例中的类比第二个示例中的类更松散耦合,前提是:
>
我们假设更改M1的签名也需要更改M2的签名,但我不认为这种情况经常发生?!
或者,如果M1
和M2
都对相同类型的T1数据进行操作,那么用T2替换T1将需要对M1
和M2
进行更改?!
或者,如果我们假设由于M1
和M2
具有密切相关的责任,那么改变M1
通常需要改变M2
(即使M1
没有直接或间接地调用M2
)的可能性要大得多?!
或者,如果我们假设由于M1
和M2
具有密切相关的职责,那么某些类将需要M1
和M2
(例如在单个类中具有M1
和M2
会减少耦合)的可能性要大得多?!
c) 在A
中定义M1
和M2
(而不是在A1
中定义M1
和M2
中定义A2
)会减少耦合,还有其他原因吗?
注意——我知道我们应该有高度内聚的模块,因为更容易维护和重用
谢谢你
是的。您缺少的是,如果ClassA是内聚的,那么更改M1将导致ClassB访问ClassA中的其他方法。它增加了维护,因为您不必修改ClassA本身的其他模块(方法和变量)。
当我们称一个类为内聚的(比如ClassA)时,我们的意思是我们可以很容易地使用这个类的目的,而不必根据ClassA的要求使我们的调用者类(ClassB)。因此,ClassB不依赖于ClassA,因此内聚减少了。
不要把凝聚力想成方法,方法不叫凝聚力,类才叫凝聚力。
在一次技术采访中,我被问及项目的凝聚力和耦合性。我详细解释了它们的定义,尽管我没有像他说的那样正确回答问题的第二部分。 “我们如何在一个项目中同时实现高度内聚和松散耦合的设计,请解释这种方法应该如何在一个整体项目中实现?” 我回答说这两个目标是矛盾的,所以我们需要找出每个项目或模块的最佳选择,但我无法提供全面的答案。 如果有人能帮我,我将不胜感激。
我在理解语句。我已经在谷歌上搜索并阅读了很多关于这方面的内容,但仍然觉得很难理解。 据我所知,高内聚意味着我们应该有专门的类来执行特定的功能。希望这是正确的?就像信用卡验证类一样,它专门用于验证信用卡。 还不明白低耦合是什么意思?
本文向大家介绍什么是耦合和凝聚力?相关面试题,主要包含被问及什么是耦合和凝聚力?时的应答技巧和注意事项,需要的朋友参考一下 组件之间依赖关系强度的度量被认为是耦合。一个好的设计总是被认为具有高内聚力和低耦合性。 面试官经常会问起凝聚力。它也是另一个测量单位。更像是一个模块内部的元素保持结合的程度。 必须记住,设计微服务的一个重要关键是低耦合和高内聚的组合。当低耦合时,服务对其他服务的依赖很少。这样
目前,我将进一步介绍java类,这是该类如何简要定义的: 内聚:以高内聚为目标,在这种情况下,内聚意味着单个模块紧紧关注其任务。 耦合:以低耦合为目标,在这种情况下,耦合意味着两个或多个模块相互交织的程度。 如何确定凝聚力和耦合度的水平? 例如,我的一些方法调用了同一类中的其他方法。这意味着调用其他方法的方法依赖于其他方法,以便“调用”方法完成其代码块。这是否意味着我对同一类的方法具有低内聚和高耦
在我的应用程序中,我有几个模块不适合“is-a”或“has-a”关系,但仍然需要相互通信和传递数据。为了尝试松散地耦合这些模块,我实现了一个事件总线类,用于处理从“事件海报”到“事件侦听器”的消息传递。 如果类希望注册接收某些事件,它们可以实现< code>IEventListener。同样,如果需要将事件推到总线上,类可以调用< code > event bus::postEvent()。当调用
我应该写两个版本的相同代码。一个具有低耦合和高内聚,另一个仍然具有低耦合,但这次具有低内聚。我真的不明白有什么区别?我怎么可能有低耦合和低内聚?它们似乎如此相关,以至于这是不可能做到的。 有人能解释一下吗?也许用一个例子?谢谢。