耦合性

耦合性

耦合性(Coupling),也叫耦合度,是對模塊間關聯程度的度量。耦合的強弱取決於模塊間介面的複雜性、調用模塊的方式以及通過界面傳送數據的多少。模塊間的耦合度是指模塊之間的依賴關係,包括控制關係、調用關係、數據傳遞關係。模塊間聯繫越多,其耦合性越強,同時表明其獨立性越差( 降低耦合性,可以提高其獨立性)。軟體設計中通常用耦合度和內聚度作為衡量模塊獨立程度的標準。劃分模塊的一個準則就是高內聚低耦合。

簡介


耦合性(英語:Coupling,dependency,或稱耦合力或耦合度)是一種軟體度量,是指一程序中,模塊及模塊之間信息或參數依賴的程度。
內聚性是一個和耦合性相對的概念,一般而言低耦合性代表高內聚性,反之亦然。耦合性和內聚性都是由提出結構化設計概念的賴瑞·康斯坦丁所提出。低耦合性是結構良好程序的特性,低耦合性程序的可讀性及可維護性會比較好。
耦合性(或稱“耦合度”)
英文: coupling
耦合性也叫塊間聯繫。指軟體系統結構中各模塊間相互聯繫緊密程度的一種度量。模塊之間聯繫越緊密,其耦合性就越強,模塊之間越獨立則越差,模塊間耦合的高低取決於模塊間介面的複雜性,調用的方式以及傳遞的信息。
形象的說,就是要將代碼寫的和電腦一樣,主類就是電腦的主機箱,當程序需要實現什麼功能的時候只需要在其他的類引入介面,就像電腦上的usb介面。

構成


簡介
一般模塊之間可能的連接方式有七種,構成耦合性的七種類型。它們之間的關係為(獨立性由強到弱)
非直接耦合(Nondirect Coupling)
如果兩個模塊之間沒有直接關係,它們之間的聯繫完全是通過主模塊的控制和調用來實現的,這就是非直接耦合。這種耦合的模塊獨立性最強。
數據耦合(Data Coupling)
如果一個模塊訪問另一個模塊時,彼此之間是通過數據參數(不是控制參數、公共數據結構或外部變數)來交換輸入、輸出信息的,則稱這種耦合為數據耦合。由於限制了只通過參數表傳遞數據,按數據耦合開發的程序界面簡單、安全可靠。因此,數據耦合是鬆散的耦合,模塊之間的獨立性比較強。在軟體程序結構中至少必須有這類耦合。
印記耦合(Stamp Coupling)
如果一組模塊通過參數表傳遞記錄信息,就是標記耦合。事實上,這組模塊共享了這個記錄,它是某一數據結構的子結構,而不是簡單變數。這要求這些模塊都必須清楚該記錄的結構,並按結構要求對此記錄進行操作。在設計中應盡量避免這種耦合,它使在數據結構上的操作複雜化了。如果採取“信息隱蔽”的方法,把在數據結構上的操作全部集中。
控制耦合(Control Coupling)
如果一個模塊通過傳送開關、標誌、名字等控制信息,明顯地控制選擇另一模塊的功能,就是控制耦合。這種耦合的實質是在單一介面上選擇多功能模塊中的某項功能。因此,對所控制模塊的任何修改,都會影響控制模塊。另外,控制耦合也意味著控制模塊必須知道所控制模塊內部的一些邏輯關係,這些都會降低模塊的獨立性。
外部耦合(External Coupling)
一組模塊都訪問同一全局簡單變數而不是同一全局數據結構,而且不是通過參數表傳遞該全局變數的信息,則稱之為外部耦合。例如C語言程序中各個模塊都訪問被說明為extern類型的外部變數。外部耦合引起的問題類似於公共耦合,區別在於在外部耦合中不存在依賴於一個數據結構內部各項的物理安排。
公共耦合(Common Coupling)
若一組模塊都訪問同一個公共數據環境,則它們之間的耦合就稱為公共耦合。公共的數據環境可以是全局數據結構、共享的通信區、內存的公共覆蓋區等。這種耦合會引起下列問題:
所有公共耦合模塊都與某一個公共數據環境內部各項的物理安排有關,若修改某個數據的大小,將會影響到所有的模塊。
無法控制各個模塊對公共數據的存取,嚴重影響軟體模塊的可靠性和適應性。
公共數據名的使用,明顯降低了程序的可讀性。
公共耦合的複雜程度隨耦合模塊的個數增加而顯著增加。若只是兩個模塊之間有公共數據環境,則公共耦合有兩種情況。
若一個模塊只是往公共數據環境里傳送數據,而另一個模塊只是從公共數據環境中取數據,則這種公共耦合叫做鬆散公共耦合。若兩個模塊都從公共數據環境中取數據,又都向公共數據環境里送數據,則這種公共耦合叫做緊密公共耦合。只有在模塊之間共享的數據很多,且通過參數表傳遞不方便時,才使用公共耦合。否則,還是使用模塊獨立性比較高的數據耦合好些。
內容耦合(Content Coupling)
如果發生下列情形,兩個模塊之間就發生了內容耦合。
一個模塊直接訪問另一個模塊的內部數據;
一個模塊不通過正常入口轉到另一模塊內部;
兩個模塊有一部分程序代碼重疊(只可能出現在彙編語言中);
一個模塊有多個入口。
在內容耦合的情形,所訪問模塊的任何變更,或者用不同的編譯器對它再編譯,
都會造成程序出錯。好在大多數高級程序設計語言已經設計成不允許出現內容
耦合。它一般出現在彙編語言程序中。這種耦合是模塊獨立性最弱的耦合。

缺點


● ● 一個模塊的修改會產生漣漪效應,其他模塊也需隨之修改。
● ● 由於模塊之間的相依性,模塊的組合會需要更多的精力及時間。
● ● 由於一個模塊有許多的相依模塊,模塊的可復用性低。

改善方法


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

條目


相依性地獄
傳出耦合
內聚力 (計算器科學)
面向對象編程用語列表
make
靜態程序分析
控制反轉
鬆散耦合