複製鏈接
請複製以下鏈接發送給好友

控制耦合

鎖定
耦合性(英語:Coupling,dependency,或稱耦合力耦合度)是一種軟件度量,是指一程序中,模塊及模塊之間信息或參數依賴的程度。
控制耦合(control coupling)指一個模塊調用另一個模塊時,傳遞的是控制變量(如開關、標誌等),被調模塊通過該控制變量的值有選擇地執行塊內某一功能。這種耦合對系統的影響較大,它影響接收控制流模塊的內部運行。這種模塊嚴格説不是“黑箱”模塊,不利於模塊的修改與維護。雖然控制聯結的耦合度高於數據耦合,但這種聯結有時是必要的。特別對某些反映狀態標誌的控制信息傳遞是必須的。控制信息不同於數據信息,是控制處理過程的一些參數。 [1] 
中文名
控制耦合
外文名
control coupling
釋    義
模塊間傳遞的信息不但有數據
例    如
一個模塊通過傳遞開關等

控制耦合簡介

耦合性(英語:Coupling,dependency,或稱耦合力耦合度)是一種軟件度量,是指一程序中,模塊及模塊之間信息或參數依賴的程度。
內聚性是一個和耦合性相對的概念,一般而言低耦合性代表高內聚性,反之亦然。耦合性和內聚性都是由提出結構化設計概念的賴瑞·康斯坦丁所提出。低耦合性是結構良好程序的特性,低耦合性程序的可讀性及可維護性會比較好。 [2] 

控制耦合分類

耦合性可以是低耦合性(或稱為鬆散耦合),也可以是高耦合性(或稱為緊密耦合)。以下列出一些耦合性的分類,從高到低依序排列:
  • 內容耦合(content coupling,耦合度最高):也稱為病態耦合(pathological coupling)當一個模塊直接使用另一個模塊的內部數據,或通過非正常入口而轉入另一個模塊內部。
  • 共用耦合/公共耦合(common coupling):也稱為全局耦合(global coupling.)指通過一個公共數據環境相互作用的那些模塊間的耦合。公共耦合的複雜程序隨耦合模塊的個數增加而增加。
  • 外部耦合(external coupling):發生在二個模塊共用一個外加的數據格式、通信協議或是設備界面,基本上和模塊和外部工具及設備的溝通有關。
  • 控制耦合(control coupling):指一個模塊調用另一個模塊時,傳遞的是控制變量(如開關、標誌等),被調模塊通過該控制變量的值有選擇地執行塊內某一功能;
  • 特徵耦合/標記耦合(stamp coupling):也稱為數據結構耦合,是指幾個模塊共享一個複雜的數據結構,如高級語言中的數組名、記錄名、文件名等這些名字即標記,其實傳遞的是這個數據結構的地址;
  • 數據耦合/數據耦合(data coupling):是指模塊藉由傳入值共享數據,每一個數據都是最基本的數據,而且只分享這些數據(例如傳遞一個整數給計算平方根的函數)。
  • 消息耦合(message coupling,是無耦合之外,耦合度最低的耦合):可以藉由以下二個方式達成:狀態的去中心化(例如在對象中),組件間利用傳入值或消息傳遞 (計算機科學)來通信。
  • 無耦合:模塊完全不和其他模塊交換信息。
面向對象程序設計
  • 子類耦合(subclass coupling):描述子類和父類別之間的關係,子類鏈接到父類別,但父類別沒有鏈接到子類。
  • 時空耦合(temporal coupling):二個動作只因為同時間發生,就被包裝在一個模塊中。
後來的研究提出了許多不同層面的耦合性,並且用來評估實務上各種的模塊化法則的實施程度。 [2] 

控制耦合缺點

緊密耦合的系統在開發階段有以下的缺點:
  1. 一個模塊的修改會產生漣漪效應,其他模塊也需隨之修改。
  2. 由於模塊之間的相依性,模塊的組合會需要更多的精力及時間。
  3. 由於一個模塊有許多的相依模塊,模塊的可複用性低。 [2] 

控制耦合改善方法

機能設計是一種可以降低耦合性的方法,此方法以機能性的角度設法限制各模塊需負責的事務。在類別AB之間,若有以下任何一種情形,會提高二者的耦合性:
  • A有一個屬性是參考類別B(此屬性的形態為類別B
  • A調用對象B提供的服務
  • A有一個方法會參考類別B(此方式會傳回一形態為類別B的物性)
  • A是類別B的子類。
鬆散耦合是指二個彼此相關的模塊,其中的接口是一個簡單而穩定的接口,且其接口和任一模塊內部的實現方式無關。
像CORBA或組件對象模型等系統,允許一對象在不知道另一對象實現方式的情形下和另一對象交互。這類系統甚至允許一對象和用其他語言撰寫的對象進行交互。 [3]  [2] 

控制耦合特點

耦合性和內聚性二個名詞常一起出現,用來表示一個理想模塊需要有的特點,也就是低耦合性及高內聚性。耦合性着重於不同模塊之間的相依性,而內聚性着重於一模塊中不同功能之間的關係性。低內聚性表示一個模塊中的各機能之間沒什麼關係,當模塊擴充時常常會出現問題。 [3] 

控制耦合計算方法

以下是一種計算模塊耦合性的方法:
對於數據和控制流的耦合:
  • di:輸入數據參數的個數
  • ci:輸入控制參數的個數
  • do:輸出數據參數的個數
  • co:輸出控制參數的個數
全域耦合:
  • gd:用來存儲數據的全域變量
  • gc:用來控制的全域變量
環境耦合:
  • w:此模塊調用的模塊個數(扇出
  • r:調用此模塊的模塊個數(扇入
若Coupling(C)數值越大,表示模塊耦合的情形越嚴重,數值一般會界於0.67(低度耦合)到1.0(高度耦合)之間。
舉例,若一模塊只有一個輸入數據參數,一個輸出數據參數:
若一模塊的輸入數據參數、輸入控制參數、輸出數據參數及輸出控制參數都是5個,訪問10個全域變量,扇出和扇入的模塊個數別是3個及4個:

控制耦合相關條目

參考資料
  • 1.    蘇選良 .管理信息系統 :電子工業出版社 ,2003年
  • 2.    Pressman, Roger S. Ph.D (1982). Software Engineering - A Practitioner's Approach - Fourth Edition. ISBN 0-07-052182-4
  • 3.    F. Beck, S. Diehl. On the Congruence of Modularity and Code Coupling. In Proceedings of the 19th ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software Engineering (SIGSOFT/FSE '11), Szeged, Hungary, September 2011. doi:10.1145/2025113.2025162