耦合性什么意思
耦(ou)合(he)性(xing),也(ye)叫耦(ou)合(he)度(du)(du),是(shi)對(dui)模塊間關聯程度(du)(du)的(de)(de)度(du)(du)量(liang)。耦(ou)合(he)的(de)(de)強(qiang)弱(ruo)取決于(yu)模塊間接口(kou)的(de)(de)復雜性(xing)、調用模塊的(de)(de)方式以及通過界面傳送數據的(de)(de)多(duo)少。
模塊間的耦合度是指模塊之間的依賴關系,包括控制關系、調用關系、數據傳遞關系。模塊間聯系越多,其耦合性越強,同時表明其獨立性越差(降低耦合性,可以提高其獨立性)。軟件設計中通常用耦(ou)合(he)度(du)和內聚(ju)度(du)作為(wei)衡量模(mo)塊(kuai)獨立程度(du)的標準(zhun)。劃分模(mo)塊(kuai)的一個準(zhun)則就(jiu)是高內聚(ju)低(di)耦(ou)合(he)。
形象(xiang)的(de)(de)(de)(de)說,就(jiu)是(shi)要將(jiang)代(dai)碼寫的(de)(de)(de)(de)和主(zhu)機(ji)的(de)(de)(de)(de)排(pai)線(xian)(xian)一樣(yang),低(di)耦(ou)合(he)的(de)(de)(de)(de)模塊(kuai)好(hao)(hao)像(xiang)你(ni)(ni)看你(ni)(ni)主(zhu)機(ji)排(pai)線(xian)(xian)中的(de)(de)(de)(de)隨便一條就(jiu)知道(dao)這條線(xian)(xian)是(shi)干啥(sha)一樣(yang)拔掉(diao)(diao)會(hui)不會(hui)影(ying)響(xiang)其(qi)(qi)他排(pai)線(xian)(xian)的(de)(de)(de)(de)功(gong)能(neng)(neng)一樣(yang),低(di)耦(ou)合(he)的(de)(de)(de)(de)模塊(kuai)就(jiu)好(hao)(hao)比鼠標(biao)線(xian)(xian)一樣(yang)拔掉(diao)(diao)它只影(ying)響(xiang)它自身(shen)的(de)(de)(de)(de)鼠標(biao)功(gong)能(neng)(neng),高(gao)耦(ou)合(he)的(de)(de)(de)(de)模塊(kuai)就(jiu)好(hao)(hao)比主(zhu)機(ji)電(dian)源線(xian)(xian)一拔掉(diao)(diao)不只影(ying)響(xiang)它自身(shen)的(de)(de)(de)(de)功(gong)能(neng)(neng)其(qi)(qi)他功(gong)能(neng)(neng)也被(bei)影(ying)響(xiang)了。
耦合性和內聚性是什么意思
1、耦合性(塊間聯系(xi))
指軟件系統結構中各模(mo)塊(kuai)(kuai)間相互聯系緊密程度(du)的(de)一種度(du)量。模(mo)塊(kuai)(kuai)之(zhi)間聯系越緊密,其(qi)耦合(he)性就越強,模(mo)塊(kuai)(kuai)的(de)獨(du)立性則(ze)越差。模(mo)塊(kuai)(kuai)間耦合(he)高(gao)低取決于模(mo)塊(kuai)(kuai)間接口的(de)復雜性、調用的(de)方式及(ji)傳遞的(de)信息(xi)。
2、內聚(ju)性(塊內聯系(xi))
指模(mo)塊(kuai)的(de)功能強度的(de)度量,即一個模(mo)塊(kuai)內部(bu)各(ge)(ge)個元(yuan)素彼(bi)此結合的(de)緊密(mi)程(cheng)度的(de)度量。若一個模(mo)塊(kuai)內各(ge)(ge)元(yuan)素(語名之間、程(cheng)序(xu)段之間)聯系的(de)越緊密(mi),則(ze)它的(de)內聚(ju)性就(jiu)越高。
因此,現代程序(xu)講究高內(nei)聚(ju)低(di)耦合,即將功能內(nei)聚(ju)在同(tong)一模(mo)塊,模(mo)塊與模(mo)塊間(jian)盡可能獨(du)立,互相依賴低(di)。沒有絕對沒有耦合的模(mo)塊組,只有盡量降低(di)互相之間(jian)的影響,使模(mo)塊越獨(du)立越好。
耦合性的七種類型
1、非直接耦合
如果(guo)兩(liang)個模(mo)(mo)塊之(zhi)間(jian)沒有直接關(guan)系,它們之(zhi)間(jian)的聯系完全(quan)是通(tong)過主(zhu)模(mo)(mo)塊的控制和調(diao)用(yong)來實(shi)現的,這就是非直接耦(ou)合。這種(zhong)耦(ou)合的模(mo)(mo)塊獨立(li)性(xing)最強。
2、數據耦合
如(ru)果一個(ge)模塊(kuai)訪問另一個(ge)模塊(kuai)時,彼(bi)此之間(jian)是(shi)通過(guo)數(shu)據參(can)數(shu)(不是(shi)控制(zhi)參(can)數(shu)、公共數(shu)據結構(gou)或外部變量)來交換輸入、輸出信(xin)息的(de),則稱這種耦合(he)為數(shu)據耦合(he)。由于限(xian)制(zhi)了(le)只通過(guo)參(can)數(shu)表傳遞數(shu)據,按數(shu)據耦合(he)開發的(de)程序(xu)界面簡單、安全可靠。因(yin)此,數(shu)據耦合(he)是(shi)松散(san)的(de)耦合(he),模塊(kuai)之間(jian)的(de)獨(du)立性比較(jiao)強。在軟件程序(xu)結構(gou)中至少必(bi)須有(you)這類耦合(he)。
3、標記耦合
如果(guo)一(yi)(yi)組模塊通(tong)過參數表傳遞(di)記(ji)錄(lu)(lu)(lu)信(xin)息,就(jiu)是標記(ji)耦(ou)(ou)合。事實(shi)上,這(zhe)(zhe)組模塊共享了(le)這(zhe)(zhe)個記(ji)錄(lu)(lu)(lu),它是某(mou)一(yi)(yi)數據(ju)結(jie)構的子結(jie)構,而不是簡(jian)單變量。這(zhe)(zhe)要(yao)(yao)求(qiu)這(zhe)(zhe)些模塊都(dou)必(bi)須清楚該記(ji)錄(lu)(lu)(lu)的結(jie)構,并按結(jie)構要(yao)(yao)求(qiu)對此(ci)記(ji)錄(lu)(lu)(lu)進(jin)行操(cao)作(zuo)。在設計中(zhong)應(ying)盡量避(bi)免這(zhe)(zhe)種(zhong)耦(ou)(ou)合,它使在數據(ju)結(jie)構上的操(cao)作(zuo)復(fu)雜(za)化了(le)。如果(guo)采(cai)取“信(xin)息隱蔽”的方法,把(ba)在數據(ju)結(jie)構上的操(cao)作(zuo)全部集(ji)中(zhong)在一(yi)(yi)個模塊中(zhong),就(jiu)可以消除(chu)這(zhe)(zhe)種(zhong)耦(ou)(ou)合。
4、控制耦合
如果一(yi)個(ge)模(mo)(mo)塊(kuai)(kuai)(kuai)通過傳送開關(guan)、標志、名字等控(kong)制(zhi)(zhi)(zhi)信息,明顯(xian)地控(kong)制(zhi)(zhi)(zhi)選擇另一(yi)模(mo)(mo)塊(kuai)(kuai)(kuai)的(de)(de)功能,就是控(kong)制(zhi)(zhi)(zhi)耦合。這種耦合的(de)(de)實質是在單一(yi)接口上(shang)選擇多功能模(mo)(mo)塊(kuai)(kuai)(kuai)中(zhong)的(de)(de)某項功能。因此,對所控(kong)制(zhi)(zhi)(zhi)模(mo)(mo)塊(kuai)(kuai)(kuai)的(de)(de)任何(he)修(xiu)改(gai),都會(hui)影響控(kong)制(zhi)(zhi)(zhi)模(mo)(mo)塊(kuai)(kuai)(kuai)。另外(wai),控(kong)制(zhi)(zhi)(zhi)耦合也意味(wei)著控(kong)制(zhi)(zhi)(zhi)模(mo)(mo)塊(kuai)(kuai)(kuai)必須知道(dao)所控(kong)制(zhi)(zhi)(zhi)模(mo)(mo)塊(kuai)(kuai)(kuai)內部(bu)的(de)(de)一(yi)些邏輯(ji)關(guan)系,這些都會(hui)降低模(mo)(mo)塊(kuai)(kuai)(kuai)的(de)(de)獨立性。
5、外部耦合
一(yi)(yi)組模(mo)塊都(dou)訪問同(tong)一(yi)(yi)全局(ju)簡單變量而(er)不是同(tong)一(yi)(yi)全局(ju)數據結(jie)構,而(er)且(qie)不是通過參數表傳遞該全局(ju)變量的信息(xi),則(ze)稱之為外部耦合。
6、公共耦合
若一組模塊都訪問同一個公共數據環境,則它們之間的耦合就稱為公共耦合。公共的互聯網數據環(huan)境可以是全局數據結構、共(gong)享的通信區(qu)、內存(cun)的公共(gong)覆蓋區(qu)等。
7、內容耦合
如果發(fa)生下列情形,兩個模塊(kuai)之間就發(fa)生了內容耦合。
(1)一個模塊(kuai)(kuai)直接訪問(wen)另一個模塊(kuai)(kuai)的內部數據。
(2)一(yi)個模塊不(bu)通過正(zheng)常(chang)入口轉到另一(yi)模塊內部。
(3)兩個模塊有一(yi)部分程序代(dai)碼重疊(只(zhi)可能出(chu)現在匯(hui)編語言中)。
(4)一個模塊有多個入口。