1. 程式人生 > >耦合與內聚

耦合與內聚

耦合

耦合性(Coupling),也叫耦合度,是對模組間關聯程度的度量。耦合的強弱取決於模組間介面的複雜性、呼叫模組的方式以及通過介面傳送資料的多少。


資料耦合

資料耦合指兩個模組之間有呼叫關係,傳遞的是簡單的資料值,相當於高階語言的值傳遞.資料耦合聯絡簡單,耦合度低,模組獨立性好,模組間的影響最小,是最理想的一種耦合形式。


控制耦合

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

這種耦合對系統的影響較大,它影響接收控制流模組的內部執行。這種模組嚴格說不是“黑箱”模組,不利於模組的修改與維護。
雖然控制聯結的耦合度高於資料耦合,但這種聯結有時是必要的。特別對某些反映狀態標誌的控制資訊傳遞是必須的。
控制資訊不同於資料資訊,是控制處理過程的一些引數。


標記耦合

標記耦合指兩個模組之間傳遞的是資料結構,如高階語言的陣列名、記錄名、檔名等這些名字即為標記,其實傳遞的是這個資料結構的地址。
被呼叫的模組只需要使用其中一部分資料元素,可以使用的元素多於它確實需要的元素,這導致對資料的訪問失去了控制


公共耦合

公共耦合指通過一個公共資料環境相互作用的那些模組間的耦合.公共資料環境可以是全程變數或資料結構共享的通訊,記憶體的公共覆蓋區及任何儲存介質上的檔案,物理裝置等(也有將共享外部裝置分類為外部耦合).
由於兩個模組都要引用同一個公共資料域,因此有較高的耦合度。一旦公共資料有變化,與之有關的模組都應隨之而修改,增加了維護的工作量及難度。

  1. 一個模組往公共環境送資料,另一個模組從公共環境裡讀資料,這是資料耦合的一種形式,是比較鬆散的耦合
  2. 兩個模組都既往公共模組送資料又從裡面取資料,這種耦合比較緊密,介於資料耦合和控制耦合之間

內容耦合

當一個模組直接修改或操作另一個模組的資料,或者直接轉入另一個模組時,就發生了內容耦合。此時,被修改的模組完全依賴於修改它的模組。如果發生下列情形,兩個模組之間就發生了內容耦合

  1. 一個模組直接訪問另一個模組的內部資料;
  2.  一個模組不通過正常入口轉到另一模組內部;
  3.  兩個模組有一部分程式程式碼重疊(只可能出現在組合語言中);
  4. 一個模組有多個入口。

儘量使用資料耦合,少用控制耦合與標記耦合,限制公共耦合的範圍,完全不是用內容耦合


內聚

是一個模組內部各成分之間相關聯程度的度量。


偶然內聚:如果一個模組完成一組任務,這些任務彼此之間即使有關係,關係也是很鬆散的,就叫做偶然內聚。
有時寫完一個程式後,發現了一組語句在兩處或多處出現,於是把這些語句作為一個模組以節省記憶體,這樣就出現了偶然內聚的模組
邏輯內聚:如果一個模組包含的任務在邏輯上屬於相同或相似的一類(例如一個模組產生各種型別的全部輸出),叫做邏輯內聚
時間內聚:如果一個模組包含的任務必須在同一時間內執行(例如,模組完成各種初始化工作),就叫時間內聚
過程內聚;如果一個模組內的處理元素是相關的,而且必須以特定次序執行,則稱為過程內聚
通訊內聚:如果模組中所有元素都使用同一個輸入資料或產生同一個輸出資料,則稱為通訊內聚
順序內聚:如果一個模組的各個成分和同一個功能密切相關,而且一個成分的輸出作為另一個成分的輸入,則稱為順序內聚。
功能內聚:模組的所有成分對於完成單一的功能都是必須的,則稱為功能內聚。