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