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