1. 程式人生 > >模組之間的耦合問題

模組之間的耦合問題

簡介

一般模組之間可能的連線方式有七種,構成耦合性的七種型別。它們之間的關係為(獨立性由強到弱)

非直接耦合(Nondirect Coupling)

如果兩個模組之間沒有直接關係,它們之間的聯絡完全是通過主模組的控制和呼叫來實現的,這就是非直接耦合。這種耦合的模組獨立性最強。

資料耦合(Data Coupling)

如果一個模組訪問另一個模組時,彼此之間是通過資料引數(不是控制引數、公共資料結構或外部變數)來交換輸入、輸出資訊的,則稱這種耦合為資料耦合。由於限制了只通過引數表傳遞資料,按資料耦合開發的程式介面簡單、安全可靠。因此,資料耦合是鬆散的耦合,模組之間的獨立性比較強。在軟體程式結構中至少必須有這類耦合。

印記耦合(Stamp Coupling)

如果一組模組通過引數表傳遞記錄資訊,就是標記耦合。事實上,這組模組共享了這個記錄,它是某一資料結構的子結構,而不是簡單變數。這要求這些模組都必須清楚該記錄的結構,並按結構要求對此記錄進行操作。在設計中應儘量避免這種耦合,它使在資料結構上的操作複雜化了。如果採取“資訊隱蔽”的方法,把在資料結構上的操作全部集中。

控制耦合(Control Coupling)

如果一個模組通過傳送開關、標誌、名字等控制資訊,明顯地控制選擇另一模組的功能,就是控制耦合。這種耦合的實質是在單一介面上選擇多功能模組中的某項功能。因此,對所控制模組的任何修改,都會影響控制模組。另外,控制耦合也意味著控制模組必須知道所控制模組內部的一些邏輯關係,這些都會降低模組的獨立性。

外部耦合(External Coupling)

一組模組都訪問同一全域性簡單變數而不是同一全域性資料結構,而且不是通過引數表傳遞該全域性變數的資訊,則稱之為外部耦合。例如C語言程式中各個模組都訪問被說明為extern型別的外部變數。外部耦合引起的問題類似於公共耦合,區別在於在外部耦合中不存在依賴於一個數據結構內部各項的物理安排。

公共耦合(Common Coupling)

若一組模組都訪問同一個公共資料環境,則它們之間的耦合就稱為公共耦合。公共的資料環境可以是全域性資料結構、共享的通訊區、記憶體的公共覆蓋區等。 這種耦合會引起下列問題: 所有公共耦合模組都與某一個公共資料環境內部各項的物理安排有關,若修改某個資料的大小,將會影響到所有的模組。 無法控制各個模組對公共資料的存取,嚴重影響軟體模組的可靠性和適應性。 公共資料名的使用,明顯降低了程式的可讀性。 公共耦合的複雜程度隨耦合模組的個數增加而顯著增加。若只是兩個模組之間有公共資料環境,則公共耦合有兩種情況。 若一個模組只是往公共資料環境裡傳送資料,而另一個模組只是從公共資料環境中取資料,則這種公共耦合叫做鬆散公共耦合。若兩個模組都從公共資料環境中取資料,又都向公共資料環境裡送資料,則這種公共耦合叫做緊密公共耦合。只有在模組之間共享的資料很多,且通過引數表傳遞不方便時,才使用公共耦合。否則,還是使用模組獨立性比較高的資料耦合好些。

內容耦合(Content Coupling)

如果發生下列情形,兩個模組之間就發生了內容耦合。 一個模組直接訪問另一個模組的內部資料; 一個模組不通過正常入口轉到另一模組內部; 兩個模組有一部分程式程式碼重疊(只可能出現在組合語言中); 一個模組有多個入口。 在內容耦合的情形,所訪問模組的任何變更,或者用不同的編譯器對它再編譯, 都會造成程式出錯。好在大多數高階程式設計語言已經設計成不允許出現內容 耦合。它一般出現在組合語言程式中。這種耦合是模組獨立性最弱的耦合。