0

承担方法M1M2 具有密切相关的职责

第一个例子:

如果

M1M2在类中定义A(因此类A是高度内聚的)

• 类B用途A.M1和类C用途A.M2

然后

ABC类耦合

• 更改 will 的签名 M1只需要更改 in B,而不需要更改C

第二个例子:

如果

M1在类中定义A1(因此B与 耦合A1

•与M2类一起定义A2(因此C与 耦合A2

然后

• 更改 will 的签名M1只需要更改 in B,而不需要更改C

a)据我了解,上一个示例中的类并不比第一个示例中的类更耦合!还是我错过了什么?

b)据我所知,第一个示例中的类比第二个示例中的类更松散耦合,前提是:

  • 我们假设更改 的签名M1也需要我们更改 的签名M2,但我不认为这种情况经常发生?!

  • 或者如果两者都M1M2相同类型的数据 T1 进行操作,那么将 T1 替换为 T2 将需要同时更改M1M2?!

  • 或者,如果我们假设由于M1并且具有密切相关的责任,那么改变通常需要M2改变的机会要大得多(即使不直接或间接调用)?!M1M2M1M2

  • 或者,如果我们假设由于M1并且具有密切相关的职责,那么某些类需要两者的M2可能性要大得多(因此在单个类中具有and会减少耦合)?!M1M2M1M2

M1c) 定义and M2within A(而不是定义M1withinA1M2within )是否有任何其他原因A2会减少耦合?

注意 - 我知道我们应该拥有高度内聚的模块,因为它更易于维护和可重用

谢谢

4

1 回答 1

2

是的,它确实。您缺少的是,如果 ClassA 具有内聚性,则更改 M1 将导致 ClassB 访问 ClassA 中的某些其他方法。它增加了维护,因为您不必修改 ClassA 本身中的其他模块(方法和变量)。

当我们将一个类称为内聚类(比如 ClassA)时,我们的意思是我们可以轻松地使用该类的目的,而不必根据 ClassA 的要求创建我们的调用者类(ClassB)。因此,ClassB 不依赖于 ClassA,从而降低了内聚性。

不要从方法的角度考虑凝聚力。方法不称为内聚,类是。

于 2012-06-27T09:14:10.250 回答