2012-06-26 48 views
0

假设方法M1M2强烈相关的职责高凝聚力如何帮助我们减少耦合?

第一个例子:

如果

M1M2A类中定义(因此A类是高粘性)

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

然后

A被加上两BC

•改变M1签名将只需要在B的变化,而不是在C

第二个例子:

如果

M1A1类(因此B耦接A1)内限定

M2定义withing类A2(因此C耦接A2

然后

•改变M1签名将只需要在B的变化,而不是在C

一)据我了解,在最后一个例子类没有更多的耦合比在第一个例子中的类!或者我错过了什么?

B)据我所知,在第一个例子中的类更加松散耦合比在第二个例子中,仅当:

  • 我们假设改变M1签名也需要我们改变M2的签名,但我没有经常看到这种情况?!

  • ,或者如果两者M1M2上相同类型T1的数据进行操作,然后用T2代替T1将需要在两个M1M2变化?!

  • ,或者如果我们假设,由于M1M2有密切的相关责任,该机会是远远大于改变M1往往需要M2也被改变(即使M1不直接或间接调用M2 )?

  • ,或者如果我们假设,由于M1M2有密切相关的责任,机会是远远大于一些类既需要M1M2(这样编在一个班里降低耦合为M1M2)?

c)是否有任何其他原因定义内AM1M2(而不是定义内A2A1M1M2)会降低耦合?

注 - 我知道,我们应该有higly凝聚力模块由于易于维护和可重用性

谢谢

回答

2

是它。如果ClassA具有凝聚力,那么您错过的是,更改M1将导致ClassB访问ClassA中的其他方法。它增加了维护,因为您不必修改ClassA中的其他模块(方法和变量)。

当我们调用类内聚(比如ClassA)时,我们的意思是我们可以很容易地使用类的目的,而不必根据ClassA的要求来调用我们的调用者类(ClassB)。因此,ClassB不依赖于ClassA,从而降低了凝聚力。

不要想到用方法来思考凝聚力。方法不叫内聚,类是。

+0

“...更改M1将导致ClassB访问ClassA中的其他方法”我没有关注你。为什么改变M1会导致B类访问A类中的其他方法? – user1483278

+0

这是因为A高度凝聚力(相反,如果A高度凝聚力,所有这一切都将成真 – vedant1811

+0

“......所有这一切都将是真实的”您是指如果A具有高度凝聚力,我在b)下所做的所有假设都是真实的? – user1483278