假设方法M1
和M2
具有强烈相关的责任
第一个例子:
如果
•M1
和M2
在班级A
中定义(因此班级A
具有高度凝聚力)
•班级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的数据进行操作,则将T1替换为T2将需要同时更改M1
和M2
?!
或者如果我们认为由于M1
和M2
责任密切相关,那么改变M1
通常需要M2
的可能性要大得多还要更改(即使M1
没有直接或间接调用M2
)?!
或者如果我们认为由于M1
和M2
的责任密切相关,某些课程需要M1
和{{1}的机会要大得多(因此在单个类中M2
和M1
会减少耦合)?!
c)在M2
中定义M1
和M2
是否有任何其他原因(而不是在A
和M1
中定义A1
M2
内)会减少耦合吗?
注意 - 我知道由于维护和可重用性更容易,我们应该拥有高度紧密的模块
谢谢
答案 0 :(得分:2)
是的。你缺少的是,如果ClassA具有凝聚力,更改M1将导致ClassB访问ClassA中的其他方法。它增加了维护,因为您不必修改ClassA本身的其他模块(方法和变量)。
当我们称一个类有凝聚力(比如ClassA)时,我们的意思是我们可以很容易地使用类的目的,而不必根据ClassA的要求创建我们的调用者类(ClassB)。因此,ClassB不依赖于ClassA,从而降低了凝聚力。
不要想到在方法方面考虑凝聚力。方法不称为衔接,类是。