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