耦合性的分類
耦合性可以是低耦合性(或稱為鬆散耦合),也可以是高耦合性(或稱為緊密耦合)。以下列出一些耦合性的分類,從高到低依序排列:
內容耦合(content coupling,耦合度最高)
也稱為病態耦合(pathological coupling)當一個模組直接使用另一個模組的內部數據,或通過非正常入口而轉入另一個模組內部。
共用耦合/公共耦合(common coupling)
也稱為全局耦合(global coupling.)指通過一個公共數據環境相互作用的那些模組間的耦合。公共耦合的複雜程式隨耦合模組的個數增加而增加。
外部耦合(external coupling)
發生在二個模組共用一個外加的數據格式、通信協定或是設備界面,基本上和模組和外部工具及設備的溝通有關。
控制耦合(control coupling)
指一個模組調用另一個模組時,傳遞的是控制變數(如開關、標誌等),被調模組通過該控制變數的值有選擇地執行塊內某一功能;
特徵耦合/標記耦合(stamp coupling)
也稱為數據結構耦合,是指幾個模組共享一個複雜的數據結構,如高級語言中的數組名、記錄名、檔案名稱等這些名字即標記,其實傳遞的是這個數據結構的地址;
數據耦合/數據耦合(data coupling)
是指模組藉由傳入值共享數據,每一個數據都是最基本的數據,而且只分享這些數據(例如傳遞一個整數給計算平方根的函式)。
訊息耦合(message coupling,是無耦合之外,耦合度最低的耦合)
可以藉由以下二個方式達成:狀態的去中心化(例如在對象中),組件間利用傳入值或訊息傳遞 (計算機科學)來通信。
無耦合:模組完全不和其他模組交換信息。
面向對象程式設計
後來的研究提出了許多不同層面的耦合性,並且用來評估實務上各種的模組化法則的實施程度。
缺點
緊密耦合的系統在開發階段有以下的缺點:
一個模組的修改會產生
漣漪效應,其他模組也需隨之修改。
由於模組之間的相依性,模組的組合會需要更多的精力及時間。
改善方法
機能設計是一種可以降低耦合性的方法,此方法以機能性的角度設法限制各模組需負責的事務。在類別A及B之間,若有以下任何一種情形,會提高二者的耦合性:
鬆散耦合是指二個彼此相關的模組,其中的接口是一個簡單而穩定的接口,且其接口和任一模組內部的實現方式無關(參考
信息隱藏)。
像
CORBA或
組件對象模型等系統,允許一對象在不知道另一對象實現方式的情形下和另一對象互動。這類系統甚至允許一對象和用其他語言撰寫的對象進行互動。
耦合性和內聚性
耦合性和
內聚性二個名詞常一起出現,用來表示一個理想模組需要有的特點,也就是低耦合性及高內聚性。耦合性著重於不同模組之間的相依性,而內聚性著重於一模組中不同功能之間的關係性。低內聚性表示一個模組中的各機能之間沒什麼關係,當模組擴充時常常會出現問題。
模組的耦合性
以下是一種計算模組耦合性的方法:
對於數據和控制流的耦合:
di:輸入數據參數的個數
ci:輸入控制參數的個數
do:輸出數據參數的個數
co:輸出控制參數的個數
全域耦合:
gd:用來存儲數據的全域變數
gc:用來控制的全域變數
環境耦合:
若Coupling(C)數值越大,表示模組耦合的情形越嚴重,數值一般會界於0.67(低度耦合)到1.0(高度耦合)之間。
相關條目
傳出耦合
內聚力 (計算機科學)
面向對象程式設計用語列表
鬆散耦合