內聚和耦合

內聚(Cohesion)是一個模塊內部各成分之間相關聯程度的度量。耦合(Coupling)是模塊之間依賴程度的度量。內聚和耦合是密切相關的,與其它模塊存在強耦合的模塊通常意味着弱內聚,而強內聚的模塊通常意味着與其它模塊之間存在弱耦合。模塊設計追求強內聚,弱耦合。

 

一、內聚強度
內聚按強度從低到高有以下幾種類型:
(1) 偶然內聚。如果一個模塊的各成分之間毫無關係,則稱爲偶然內聚。
(2) 邏輯內聚。幾個邏輯上相關的功能被放在同一模塊中,則稱爲邏輯內聚。如一個模塊讀取各種不同類型外設的輸入。儘管邏輯內聚比偶然內聚合理一些,但邏輯內聚的模塊各成分在功能上並無關係,即使局部功能的修改有時也會影響全局,因此這類模塊的修改也比較困難。
(3) 時間內聚。如果一個模塊完成的功能必須在同一時間內執行(如系統初始化),但這些功能只是因爲時間因素關聯在一起,則稱爲時間內聚。
(4) 過程內聚。如果一個模塊內部的處理成分是相關的,而且這些處理必須以特定的次序執行,則稱爲過程內聚。
(5) 通信內聚。如果一個模塊的所有成分都操作同一數據集或生成同一數據集,則稱爲通信內聚。
(6) 順序內聚。如果一個模塊的各個成分和同一個功能密切相關,而且一個成分的輸出作爲另一個成分的輸入,則稱爲順序內聚。
(7) 功能內聚。模塊的所有成分對於完成單一的功能都是必須的,則稱爲功能內聚。

 

二、耦合強度
耦合的強度依賴於以下幾個因素:(1)一個模塊對另一個模塊的調用;(2)一個模塊向另一個模塊傳遞的數據量;(3)一個模塊施加到另一個模塊的控制的多少;(4)模塊之間接口的複雜程度。
耦合按從強到弱的順序可分爲以下幾種類型:
(1)內容耦合。當一個模塊直接修改或操作另一個模塊的數據,或者直接轉入另一個模塊時,就發生了內容耦合。此時,被修改的模塊完全依賴於修改它的模塊。
(2)公共耦合。兩個以上的模塊共同引用一個全局數據項就稱爲公共耦合。
(3)控制耦合。一個模塊在界面上傳遞一個信號(如開關值、標誌量等)控制另一個模塊,接收信號的模塊的動作根據信號值進行調整,稱爲控制耦合。
(4)標記耦合。模塊間通過參數傳遞複雜的內部數據結構,稱爲標記耦合。此數據結構的變化將使相關的模塊發生變化。
(5)數據耦合。模塊間通過參數傳遞基本類型的數據,稱爲數據耦合。
(6)非直接耦合。模塊間沒有信息傳遞時,屬於非直接耦合。
如果模塊間必須存在耦合,就儘量使用數據耦合,少用控制耦合,限制公共耦合的範圍,堅決避免使用內容耦合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章