三、軟件設(shè)計(jì)的基本原理
1、模塊化
模塊就是指在程序中的數(shù)據(jù)說(shuō)明、可執(zhí)行語(yǔ)句等程序?qū)ο蟮募?或者是單獨(dú)命名和編址的元素。如高級(jí)語(yǔ)言中的過(guò)程,函數(shù)、子程序等。每個(gè)模塊可以完成一個(gè)特定的子功能,各個(gè)模塊可以按一定方法組裝起來(lái)成為一個(gè)整體。從而實(shí)現(xiàn)整個(gè)系統(tǒng)的功能。
模塊化就是指解決一個(gè)復(fù)雜問(wèn)題時(shí)自頂向下逐層把軟件系統(tǒng)劃分成若干模塊的過(guò)程。
為了解決復(fù)雜的問(wèn)題,在軟件設(shè)計(jì)中就必須把整個(gè)問(wèn)題進(jìn)行分解來(lái)降低復(fù)雜性,這樣就可以減少開發(fā)工作量并降低開發(fā)成本和提高軟件生產(chǎn)率。但是劃分模塊并不是越多越好,因?yàn)檫@會(huì)增加模塊之間接口的工作量。所以劃分模塊的層次和數(shù)量應(yīng)該避免過(guò)多或過(guò)少。
2、抽象
抽象這個(gè)詞本身也比較抽象,(老師要小明用抽象和具體造一個(gè)句子,可是他不懂,就問(wèn)媽媽,什么是抽象,什么是具體? 媽媽告訴他:抽象就是看不見(jiàn)摸不著的,具體就是看得見(jiàn)摸得著的。小明懂了,很快造好了一個(gè)句子,是這樣的:今天我很早起床,看見(jiàn)具體的媽媽在炒具體的菜,我打開窗戶,抽象的新鮮空氣呼地一下跑進(jìn)來(lái),真舒服啊。)呵呵,事實(shí)上,抽象并不是這么簡(jiǎn)單的意思,它是一種思維工具,就是把事物本質(zhì)的共同特性抽出來(lái)而不考慮其他細(xì)節(jié),比如說(shuō)我們可以把把男人女人老人小孩的共同本質(zhì)特性抽出來(lái)之后形成一個(gè)概念"人",這個(gè)概念就是抽象的結(jié)果。在軟件工程中就是這樣,在每個(gè)階段中,抽象的層次逐步降低,在軟件結(jié)構(gòu)設(shè)計(jì)中的模塊分層也是由抽象到具體的分析和構(gòu)造出來(lái)的。比如上一層的模塊所進(jìn)行的加工是一個(gè)抽象的操作"銷售統(tǒng)計(jì)",分解到最后一層,就可能是具體"打印報(bào)表"的操作了。
3、信息隱蔽
信息隱蔽的意思就是指,在設(shè)計(jì)和確定模塊時(shí),使得一個(gè)模塊內(nèi)包含的信息(過(guò)程或數(shù)據(jù)),對(duì)于不需要這些信息的其他模塊來(lái)說(shuō)是不能訪問(wèn)的。舉個(gè)例子吧,假設(shè)我是程序中的一個(gè)模塊,電話機(jī)是另一個(gè)模塊,我在使用電話機(jī)時(shí),對(duì)電話機(jī)的控制是通過(guò)幾個(gè)按鍵來(lái)確定的,輸入的數(shù)據(jù)是我的語(yǔ)音,輸出的數(shù)據(jù)是對(duì)方的語(yǔ)音,而這些輸入、輸出的數(shù)據(jù)變換以及控制在電話機(jī)內(nèi)部是怎么實(shí)現(xiàn)的我不需要知道,同時(shí)也不能加以直接控制,這樣,如果電話機(jī)壞了,修復(fù)或更換后對(duì)我的使用是沒(méi)有任何影響的。所以說(shuō),電話機(jī)這個(gè)模塊的信息隱蔽是十分完善的。在軟件設(shè)計(jì)中,模塊的劃分也要采取措施使它實(shí)現(xiàn)信息隱蔽。
4、模塊獨(dú)立性
模塊獨(dú)立性是指每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡(jiǎn)單。這個(gè)概念就是上面說(shuō)的三個(gè)基本原理的直接產(chǎn)物,在概要設(shè)計(jì)過(guò)程中,就是要求設(shè)計(jì)出具有良好模塊獨(dú)立性的軟件結(jié)構(gòu)。
那么如何來(lái)衡量軟件的模塊獨(dú)立性呢?這里有兩個(gè)定性的度量標(biāo)準(zhǔn)。
(1)耦合性:就是指模塊之間的聯(lián)系緊密程度。模塊之間聯(lián)系越緊密,其耦合性越強(qiáng),獨(dú)立性就越差。
模塊的耦合性從低到高可分為以下幾種類型:(假設(shè)某人為一模塊)
無(wú)直接耦合 (比如陌生人之間的聯(lián)系)
數(shù)據(jù)耦合 (比如去售貨員與顧客之間的聯(lián)系)
標(biāo)記耦合 (比如兩個(gè)人下棋)
控制耦合 (領(lǐng)導(dǎo)和下屬之間的聯(lián)系)
公共耦合 (比如圖書館的所有借書者之間的聯(lián)系)
內(nèi)容耦合 (比如小兩口之間的聯(lián)系)
在軟件設(shè)計(jì)中,提高模塊的獨(dú)立性,建立模塊間盡可能松散的系統(tǒng),是模塊化設(shè)計(jì)的目標(biāo)。為了降低模塊間的耦合度,可以采取以下措施:
(1)在耦合方式上降低模塊間接口的復(fù)雜性。
(2)在傳遞信息類型上盡量采用數(shù)據(jù)耦合,避免使用控制耦合,慎用或有控制地使用公共耦合。在實(shí)踐中要根據(jù)實(shí)際情況綜合考慮。
2、內(nèi)聚性
內(nèi)聚性是指模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度。根據(jù)內(nèi)聚性的從低到高可分為以下六種類型:
偶然內(nèi)聚:指一個(gè)模塊內(nèi)的各處理元素之間沒(méi)有任何聯(lián)系。(公共汽車內(nèi)的人群)
邏輯內(nèi)聚:指模塊內(nèi)執(zhí)行幾個(gè)邏輯上相似的功能,通過(guò)參數(shù)確定該模塊完成哪一個(gè)功能。(警察局里的警察)
時(shí)間內(nèi)聚:把需要同時(shí)執(zhí)行的動(dòng)作組合在一起形成的模塊為時(shí)間內(nèi)聚模塊。(交響樂(lè)團(tuán)的演奏員)
通信內(nèi)聚:指模塊內(nèi)所有處理元素都在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上的操作。或者指各處理使用相同的輸入數(shù)據(jù)或者產(chǎn)生相同的輸出數(shù)據(jù)。(建筑工地上的工人)
順序內(nèi)聚:指一個(gè)模塊中各個(gè)處理元素都密切相關(guān)于同一功能且必須順序執(zhí)行,前一功能的元素的輸出就是下一功能元素的輸入。(我們可以想像紡織廠中從紡紗到織布的各個(gè)操作形成的一個(gè)模塊,就是一種順序內(nèi)聚)
功能內(nèi)聚:這是最強(qiáng)的內(nèi)聚,指模塊內(nèi)所有元素共同完成一個(gè)功能,缺一不可,模塊已不可再分。(就如兩個(gè)人演獅子舞,要完成獅子形象的再現(xiàn),兩個(gè)人缺一不可.)
耦合性與內(nèi)聚性是模塊獨(dú)立性的兩個(gè)定性標(biāo)準(zhǔn),將軟件系統(tǒng)劃分模塊時(shí),盡量做到高內(nèi)聚,低耦合,提高模塊的獨(dú)立性。在內(nèi)聚性與耦合性發(fā)生矛盾的時(shí)候,最好優(yōu)先考慮耦合性,也就是先保證耦合性低一些。
相關(guān)推薦:2010年下半年軟考試題及答案解析匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |