內(nèi)聚是從功能角度來(lái)度量模塊內(nèi)的聯(lián)系,一個(gè)好的內(nèi)聚模塊應(yīng)當(dāng)恰好做一件事。它描述
的是模塊內(nèi)的功能聯(lián)系; 耦合是軟件結(jié)構(gòu)中各模塊之間相互連接的一種度量,耦合強(qiáng)弱取決
于模塊間接口的復(fù)雜程度、進(jìn)入或訪問(wèn)一個(gè)模塊的點(diǎn)以及通過(guò)接口的數(shù)據(jù)。
耦合性也稱塊間聯(lián)系。指軟件系統(tǒng)結(jié)構(gòu)中各模塊間相互聯(lián)系緊密程度的一種度量。模塊之間聯(lián)系越緊密,其耦合性就越強(qiáng),模塊的獨(dú)立性則越差。模塊間耦合高低取決于模塊間接口的復(fù)雜性、調(diào)用的方式及傳遞的信息。
2. 內(nèi)聚分為哪幾類?耦合分為哪幾類?
內(nèi)聚有如下的種類,它們之間的內(nèi)聚度由弱到強(qiáng)排列如下:
(1) 偶然內(nèi)聚。模塊中的代碼無(wú)法定義其不同功能的調(diào)用。但它使該模塊能執(zhí)行不同
的功能,這種模塊稱為巧合強(qiáng)度模塊。
(2) 邏輯內(nèi)聚。這種模塊把幾種相關(guān)的功能組合在一起, 每次被調(diào)用時(shí),由傳送給模
塊參數(shù)來(lái)確定該模塊應(yīng)完成哪一種功能
(3) 時(shí)間內(nèi)聚:把需要同時(shí)執(zhí)行的動(dòng)作組合在一起形成的模塊為時(shí)間內(nèi)聚模塊。
(4) 過(guò)程內(nèi)聚:構(gòu)件或者操作的組合方式是,允許在調(diào)用前面的構(gòu)件或操作之后,馬上調(diào)用后面的構(gòu)件或操作,即使兩者之間沒(méi)有數(shù)據(jù)進(jìn)行傳遞。
(5) 通信內(nèi)聚:指模塊內(nèi)所有處理元素都在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上操作(有時(shí)稱之為信息內(nèi)聚),或者指各處理使用相同的輸入數(shù)據(jù)或者產(chǎn)生相同的輸出數(shù)據(jù)。
(6) 順序內(nèi)聚:指一個(gè)模塊中各個(gè)處理元素都密切相關(guān)于同一功能且必須順序執(zhí)行,前一功能元素輸出就是下一功能元素的輸入。
(7) 功能內(nèi)聚:這是最強(qiáng)的內(nèi)聚,指模塊內(nèi)所有元素共同完成一個(gè)功能,缺一不可。
耦合可以分為以下幾種,它們之間的耦合度由高到低排列如下:
(1) 內(nèi)容耦合:如果發(fā)生下列情形,兩個(gè)模塊之間就發(fā)生了內(nèi)容耦合
一個(gè)模塊直接訪問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù)
一個(gè)模塊不通過(guò)正常入口轉(zhuǎn)到另一模塊內(nèi)部;
兩個(gè)模塊有一部分程序代碼重疊(只可能出現(xiàn)在匯編語(yǔ)言中);
一個(gè)模塊有多個(gè)入口。
(2) 公共耦合:若一組模塊都訪問(wèn)同一個(gè)公共數(shù)據(jù)環(huán)境,則它們之間的耦合就稱為公共耦合。公共的數(shù)據(jù)環(huán)境可以是全局?jǐn)?shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)等。
(3) 外部耦合:一組模塊都訪問(wèn)同一全局簡(jiǎn)單變量而不是同一全局?jǐn)?shù)據(jù)結(jié)構(gòu),而且不是通過(guò)參數(shù)表傳遞該全局變量的信息,則稱之為外部耦合。
(4) 控制耦合:如果一個(gè)模塊通過(guò)傳送開(kāi)關(guān)、標(biāo)志、名字等控制信息,明顯地控制選擇另一模塊的功能,就是控制耦合
(5) 標(biāo)記耦合:一組模塊通過(guò)參數(shù)表傳遞記錄信息,就是標(biāo)記耦合。這個(gè)記錄是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡(jiǎn)單變量。其實(shí)傳遞的是這個(gè)數(shù)據(jù)結(jié)構(gòu)的地址;也就是地址傳遞。
(6) 數(shù)據(jù)耦合:指兩個(gè)模塊之間有調(diào)用關(guān)系,傳遞的是簡(jiǎn)單的數(shù)據(jù)值,一個(gè)模塊訪問(wèn)另一個(gè)模塊時(shí),彼此之間是通過(guò)簡(jiǎn)單數(shù)據(jù)參數(shù) (不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量) 來(lái)交換輸入、輸出信息的,相當(dāng)于高級(jí)語(yǔ)言的值傳遞。
(7) 非直接耦合:兩個(gè)模塊之間沒(méi)有直接關(guān)系,它們之間的聯(lián)系完全是通過(guò)主模塊的控制和調(diào)用來(lái)實(shí)現(xiàn)的。
耦合強(qiáng)度,依賴于以下幾個(gè)因素:
(1)一個(gè)模塊對(duì)另一個(gè)模塊的調(diào)用;
(2)一個(gè)模塊向另一個(gè)模塊傳遞的數(shù)據(jù)量;
(3)一個(gè)模塊施加到另一個(gè)模塊的控制的多少;
(4)模塊之間接口的復(fù)雜程度。
參考資料:
http://baike.baidu.com/view/156245.html