對高內聚,低耦合的理解

2022-04-01 12:49:30 字數 2042 閱讀 1878

內聚:乙個模組內各個元素彼此結合的緊密程度

耦合:乙個軟體結構內不同模組之間互連程度的度量

最近編碼的時候,總是在猶豫是把某個方法封裝在乙個類裡,還是單獨的封裝成乙個類。這讓我突然想起內聚耦合這兩個名詞。

我們一直追求著,高內聚,低耦合。

對於低耦合,我粗淺的理解是:

乙個完整的系統,模組與模組之間,盡可能的使其獨立存在。

也就是說,讓每個模組,盡可能的獨立完成某個特定的子功能。

模組與模組之間的介面,盡量的少而簡單。

如果某兩個模組間的關係比較複雜的話,最好首先考慮進一步的模組劃分。

這樣有利於修改和組合。

起因:模組獨立性指每個模組只完成系統要求的獨立子功能,並且與其他模組的聯絡最少且介面簡單,兩個定性的度量標準――耦合性和內聚性。

耦合性也稱塊間聯絡。指軟體系統結構中各模組間相互聯絡緊密程度的一種度量。模組之間聯絡越緊密,其耦合性就越強,模組的獨立性則越差。模組間耦合高低取決於模組間介面的複雜性、呼叫的方式及傳遞的資訊。

耦合性分類(低――高): 無直接耦合;資料耦合;標記耦合;控制耦合;公共耦合;內容耦合;

1 無直接耦合:

2 資料耦合: 指兩個模組之間有呼叫關係,傳遞的是簡單的資料值,相當於高階語言的值傳遞;

3 標記耦合: 指兩個模組之間傳遞的是資料結構,如高階語言中的陣列名、記錄名、檔名等這些名字即標記,其實傳遞的是這個資料結構的位址;

4 控制耦合: 指乙個模組呼叫另乙個模組時,傳遞的是控制變數(如開關、標誌等),被調模組通過該控制變數的值有選擇地執行塊內某一功能;

5 公共耦合: 指通過乙個公共資料環境相互作用的那些模組間的耦合。公共耦合的複雜程式隨耦合模組的個數增加而增加。

6 內容耦合: 這是最高程度的耦合,也是最差的耦合。當乙個模組直接使用另乙個模組的內部資料,或通過非正常入口而轉入另乙個模組內部。

內聚性又稱塊內聯絡。指模組的功能強度的度量,即乙個模組內部各個元素彼此結合的緊密程度的度量。若乙個模組內各元素(語名之間、程式段之間)聯絡的越緊密,則它的內聚性就越高。

內聚性匪類(低――高): 偶然內聚;邏輯內聚;時間內聚;通訊內聚;順序內聚;功能內聚;

1 偶然內聚: 指乙個模組內的各處理元素之間沒有任何聯絡。

2 邏輯內聚: 指模組內執行幾個邏輯上相似的功能,通過引數確定該模組完成哪乙個功能。

3 時間內聚: 把需要同時執行的動作組合在一起形成的模組為時間內聚模組。

4 通訊內聚: 指模組內所有處理元素都在同乙個資料結構上操作(有時稱之為資訊內聚),或者指各處理使用相同的輸入資料或者產生相同的輸出資料。

6 功能內聚: 這是最強的內聚,指模組內所有元素共同完成乙個功能,缺一不可。與其他模組的耦合是最弱的。

耦合性與內聚性是模組獨立性的兩個定性標準,將軟體系統劃分模組時,盡量做到高內聚低耦合,提高模組的獨立性,為設計高質量的軟體結構奠定基礎。

有個例子很容易明白:乙個程式有50個函式,這個程式執行得非常好;然而一旦你修改其中乙個函式,其他49個函式都需要做修改,這就是高耦合的後果。

一旦你理解了它,你編寫概要設計的時候設計類或者模組自然會考慮到「高內聚,低耦合」。

對於高內聚,我粗淺的理解是:

在乙個模組內,讓每個元素之間都盡可能的緊密相連。

也就是充分利用每乙個元素的功能,各施所能,以最終實現某個功能。

如果某個元素與該模組的關係比較疏鬆的話,可能該模組的結構還不夠完善,或者是該元素是多餘的。

內聚和耦合,包含了橫向和縱向的關係。功能內聚和資料耦合,是我們需要達成的目標。橫向的內聚和耦合,通常體現在系統的各個模組、類之間的關係,而縱向的耦合,體現在系統的各個層次之間的關係。 

對於我在編碼中的困惑,我是這樣想的,用物件導向的思想去考慮乙個類的封裝。

乙個方法,如何封裝,拿到現實生活中來看,看這種能力(方法)是否是屬於這類事物(類)的本能。

如果是,就封裝在這個類裡。

如果不是,則考慮封裝在其它類裡。

如果這種能力,很多事物都具有,則一定要封裝在這類事物的總類裡。

如果這種能力,很多事物都會經常用到,則可以封裝成乙個總類的靜態方法。

高內聚低耦合的理解

應屆程式設計師,幾年的辯證唯物主義哲學愛好者談談對高內聚 低耦合的理解。理解乙個事物,需要從兩個方面去理解。乙個是 世界觀 乙個是 價值觀 世界觀,即某個事物包含了什麼客觀規律 價值觀,即事物對人有什麼價值。先談價值觀,對於萬事萬物,它們有一些普通而又特殊的屬性。普通在於從科學的角度,它們是必然 的...

如何理解高內聚低耦合

高內聚就是說相關度比較高的部分盡可能的集中,不要分散 例如內聚性要求強的話就像windows32中系統提供的api,裡面的函式太多了,都放在乙個dll中,那麼每個函式完成乙個功能。這樣強大的功能,會比較複雜,所以並不是完全的高內聚越高越好,還是要看實際的需要。當然維護起來也不是特別的方便。低耦合就是...

如何理解「高內聚低耦合」

起因 模組獨立性指每個模組只完成系統要求的獨立子功能,並且與其他模組的聯絡最少且介面簡單,兩個定性的度量標準 耦合性和內聚性。耦合性也稱塊間聯絡。指軟體系統結構中各模組間相互聯絡緊密程度的一種度量。模組之間聯絡越緊密,其耦合性就越強,模組的獨立性則越差。模組間耦合高低取決於模組間介面的複雜性 呼叫的...