WAGO模塊的工作依據(jù)或獨(dú)立性之間有什么區(qū)別
WAGO模塊的根據(jù)是,如果一個(gè)問(wèn)題有多個(gè)問(wèn)題組合而成,那么這個(gè)組合問(wèn)題的復(fù)雜程度將大于分別考慮這個(gè)問(wèn)題時(shí)的復(fù)雜程度之和。這個(gè)結(jié)論使得人們樂(lè)于利用功能模塊化方法將復(fù)雜的問(wèn)題分解成許多容易解決的局部問(wèn)題
WAGO模塊化方法并不等于無(wú)限制地分割軟件,因?yàn)殡S著功能模塊的增多,雖然開(kāi)發(fā)單個(gè)功能模塊的工作量減少了,但是設(shè)計(jì)功能模塊間接口所需的工作量也將增加,而且會(huì)出現(xiàn)意想不到的軟件缺陷。因此,只有選擇合適的功能模塊數(shù)目才會(huì)使整個(gè)系統(tǒng)的開(kāi)發(fā)成本小。
WAGO模塊獨(dú)立的概念是功能模塊化、抽象、信息隱蔽和局部化概念的直接結(jié)果。
抽象是指對(duì)事物、狀態(tài)或過(guò)程之間所存在的某些相似的方面集中和概括起來(lái),而暫時(shí)忽略他們之間的差異,即考慮抽象事物的本質(zhì)特征而暫時(shí)不考慮他們的細(xì)節(jié)。信息隱蔽是指再設(shè)計(jì)功能模塊時(shí)使得一個(gè)功能模塊內(nèi)所包含的信息(過(guò)程或數(shù)據(jù)),對(duì)于不需要這些信息的功能模塊來(lái)說(shuō)是不能訪問(wèn)的。信息隱蔽原則對(duì)于以后在軟件維護(hù)期間修改軟件時(shí)會(huì)帶來(lái)大的好處,因?yàn)閿?shù)據(jù)和過(guò)程是軟件的其他部分所不能覺(jué)察的,因而再對(duì)某個(gè)功能模塊修改時(shí)就不大會(huì)影響到軟件的其他部分,所謂局部化是指把一些關(guān)系密切的軟件元素在物理位置上彼此靠近。
功能模塊獨(dú)立性是通過(guò)制定具有單一功能并且和其他功能模塊沒(méi)有過(guò)多的功能模塊來(lái)實(shí)現(xiàn)的。每個(gè)功能模塊只涉及該軟件要求的一個(gè)具體子功能,而且與軟件結(jié)構(gòu)的其他部分的接口是簡(jiǎn)單的。
功能模塊獨(dú)立性好的軟件接口簡(jiǎn)單,易于編制,獨(dú)立的功能模塊也比較容易測(cè)試和維護(hù),限制了功能模塊之間由于緊密而引起的修改副作用。獨(dú)立性是軟件的重要因素。
WAGO模塊是由內(nèi)聚性和耦合性兩個(gè)定性指標(biāo)來(lái)度量的。內(nèi)聚性是度量一個(gè)功能模塊內(nèi)功能強(qiáng)度的一個(gè)相對(duì)指標(biāo)。耦合性則用來(lái)度量功能模塊之間的相互的程度。
WAGO模塊系統(tǒng)中的各功能模塊在納入時(shí)間、激活機(jī)制和控制方式等方面可以不相同。
1)WAGO模塊是指一個(gè)功能模塊被歸并到軟件的源語(yǔ)言描述之中的時(shí)間。比如宏功能模塊是由編譯器把它作為程序的一部分直接插入到引用位置上去的。而普通的子程序則是通過(guò)產(chǎn)生目標(biāo)代碼與連接代碼而納入到軟件中的。
2)激活機(jī)制
功能模塊的激活機(jī)制通常有兩種:一個(gè)是通過(guò)引用來(lái)調(diào)用功能模塊,另一個(gè)是通過(guò)中斷來(lái)調(diào)用一個(gè)功能模塊。在實(shí)時(shí)系統(tǒng)中,通常使用后者。比如,使用一個(gè)外部時(shí)間來(lái)引起處理過(guò)程的中斷,然后使控制轉(zhuǎn)到另一個(gè)功能模塊。
3)控制方式
一般功能模塊具有單一入口和單一出口,并作為程序的一部分順序地執(zhí)行,有時(shí),也需要更為復(fù)雜的控制方式,如可重入功能模塊。這種功能模塊不以任何方式修改它自己或它所訪問(wèn)的局部地址,從而這樣的功能模塊就可以同時(shí)被幾個(gè)任務(wù)使用。
4)結(jié)構(gòu)分類
在軟件結(jié)構(gòu)中,功能模塊可以分為以下幾類:
順序功能模塊:它在沒(méi)有中斷情況下被應(yīng)用軟件調(diào)用和執(zhí)行。
增量功能模塊:它在調(diào)用結(jié)束之前可以被應(yīng)用程序中斷,然后在中斷點(diǎn)重新啟動(dòng)。
并行功能模塊:它在并行多處理機(jī)環(huán)境中與別的功能模塊同時(shí)執(zhí)行。 [2]
1.提高功能模塊獨(dú)立性
WAGO模塊考驗(yàn)是否應(yīng)該把一些功能模塊提取或合并,力求降低耦合提高內(nèi)聚。例如,多個(gè)功能模塊共有的一個(gè)子功能可以獨(dú)立成一個(gè)功能模塊,由這些功能模塊調(diào)用,有時(shí)可以通過(guò)分解或合并功能模塊以減少控制信息的傳遞及對(duì)全局?jǐn)?shù)據(jù)的引用,并且降低接口的復(fù)雜度。
2.WAGO模塊規(guī)模適度
經(jīng)驗(yàn)表明,當(dāng)功能模塊過(guò)大時(shí),功能模塊的可理解性就會(huì)迅速下降。但是對(duì)過(guò)大的功能模塊分解時(shí),也不應(yīng)降低功能模塊的獨(dú)立性。因?yàn)楫?dāng)對(duì)一個(gè)大的功能模塊分解時(shí),有可能增加功能模塊之間的依賴。
3.深度、寬度、扇出和扇入要適當(dāng)
如果深度過(guò)大則說(shuō)明有的控制模塊可能簡(jiǎn)單了。如果寬度過(guò)大則說(shuō)明系統(tǒng)的控制過(guò)于集中。而扇出過(guò)大則意味著功能模塊過(guò)于復(fù)雜,需要控制和協(xié)調(diào)過(guò)多的下模塊,這時(shí)應(yīng)適當(dāng)?shù)卦黾又虚g層次,扇出太小則可以把下模塊進(jìn)一步分解成若干個(gè)子功能模塊,或者合并到上功能模塊中去。一個(gè)功能模塊的扇入是表明有多少個(gè)上功能模塊直接調(diào)用它,扇入越大則該模塊的上模塊數(shù)目越多,這是有好處的。
4.要使WAGO模塊的作用范圍保持在該模塊的控制范圍內(nèi)
WAGO模塊的作用范圍是指受該功能模塊內(nèi)一個(gè)判定影響的所有功能模塊的集合。功能模塊的控制范圍是指這個(gè)功能模塊本身以及所有直接或間接從屬于它的功能模塊的集合。在一個(gè)設(shè)計(jì)得很好的系統(tǒng)中,所有受判定影響的功能模塊應(yīng)該都從屬于作出判定的那個(gè)功能模塊,好局限于做出判定的那個(gè)功能模塊本身及它的直接下模塊。對(duì)于那些不滿足這一條件的軟件結(jié)構(gòu)修改的辦法是:將判定點(diǎn)上移或者將那些在作用范圍內(nèi)但是不在控制范圍內(nèi)的功能模塊移植到控制范圍內(nèi)。