2012-06-26 50 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