3.3 結(jié)構(gòu)化設(shè)計(jì)方法
一、軟件設(shè)計(jì)的基本概念
1、 軟件設(shè)計(jì)的基礎(chǔ)
軟件設(shè)計(jì)是軟件工程的重要階段,是一個(gè)把軟件需求轉(zhuǎn)換為軟件表示的過程。軟件設(shè)計(jì)的基本目標(biāo)是用比較抽象概括的方式確定目標(biāo)系統(tǒng)如何完成預(yù)定的任務(wù),即軟件設(shè)計(jì)是確定系統(tǒng)的物理模型。
軟件設(shè)計(jì)的重要性和地位概括為以下幾點(diǎn):
① 軟件開發(fā)階段(設(shè)計(jì)、編碼、測(cè)試)占據(jù)軟件項(xiàng)目開發(fā)總成本絕大部分,是在軟件開發(fā)中形成質(zhì)量的關(guān)鍵五一節(jié);
② 軟件設(shè)計(jì)是開發(fā)階段最重要的步驟,是將需求準(zhǔn)確地轉(zhuǎn)化為完整的軟件產(chǎn)品或系統(tǒng)的惟一途徑;
③ 軟件設(shè)計(jì)作出的決策,最終影響軟件實(shí)現(xiàn)的成??;
④ 設(shè)計(jì)是軟件工程和軟件維護(hù)的基礎(chǔ)。
從技術(shù)觀點(diǎn)來看,軟件設(shè)計(jì)包括軟件結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)、過程設(shè)計(jì)。其中,結(jié)構(gòu)設(shè)計(jì)是定義軟件系統(tǒng)各主要部件之間的關(guān)系;數(shù)據(jù)設(shè)計(jì)是將分析時(shí)創(chuàng)建的模型轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的定義;接口設(shè)計(jì)是描述軟件內(nèi)部、軟件和協(xié)作系統(tǒng)之間以及軟件與人之間如何通信;過程設(shè)計(jì)則是把系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過程性描述。
從工程管理角度來看,軟件設(shè)計(jì)分兩步完成:概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。概要設(shè)計(jì)(又稱結(jié)構(gòu)設(shè)計(jì))將軟件需求轉(zhuǎn)化為軟件體系結(jié)構(gòu)、確定系統(tǒng)級(jí)接口、全局?jǐn)?shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫模式;詳細(xì)設(shè)計(jì)確立每個(gè)模塊的實(shí)現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu),用適當(dāng)方法表示算法和數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié)。
軟件設(shè)計(jì)的一般過程是:軟件設(shè)計(jì)是一個(gè)迭代的過程;先進(jìn)行高層次的結(jié)構(gòu)設(shè)計(jì);后進(jìn)行低層次的過程設(shè)計(jì);穿插進(jìn)行數(shù)據(jù)設(shè)計(jì)和接口設(shè)計(jì)。
2、 軟件設(shè)計(jì)的基本原理
軟件設(shè)計(jì)遵循軟件工程的基本目標(biāo)和原則,建立了適用于在軟件設(shè)計(jì)中應(yīng)該遵循的基本原理和與軟件設(shè)計(jì)有關(guān)的概念。
(1)抽象
抽象是一種思維工具,就是把事物本質(zhì)的共同特性提取出來而不考慮其他細(xì)節(jié)。軟件設(shè)計(jì)中考慮模塊化解決方案時(shí),可以定出多個(gè)抽象級(jí)別。抽象的層次從概要設(shè)計(jì)到詳細(xì)設(shè)計(jì)逐步聊低。在軟件概要設(shè)計(jì)中的模塊分層也是由抽象到具體逐步分析和構(gòu)造出來的。
(2)模塊化
模塊化是指把一個(gè)待開發(fā)的軟件分解成若干個(gè)小的簡(jiǎn)單的部分。如高級(jí)語言中的過程、函數(shù)、子程序等。每個(gè)模塊可以完成一個(gè)特定的子功能,各個(gè)模塊可以按一定的方法組裝起來成為一個(gè)整體,從而實(shí)現(xiàn)整個(gè)系統(tǒng)的功能 .模塊化是指解決一個(gè)復(fù)雜問題時(shí)自頂向下逐層把軟件系統(tǒng)劃分成若干模塊的過程。
為了解決復(fù)雜的問題,在軟件設(shè)計(jì)中必須把整個(gè)問題進(jìn)行分解來降低復(fù)雜性,這樣就可以減少開發(fā)工作量并降低開發(fā)成本和提高軟件生產(chǎn)率。但是劃分模塊并不是越多越好,因?yàn)檫@會(huì)增加模塊之間接口的工作量,所以劃分模塊層次和數(shù)量應(yīng)該避免過多或過少。
(3)信息隱蔽
信息隱蔽是指,在一個(gè)模塊內(nèi)包含的信息(過程或數(shù)據(jù)),對(duì)于不需要這些信息的其他模塊來說是不能訪問的。
(4)模塊獨(dú)立性
模塊獨(dú)立性是指,每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡(jiǎn)單。是評(píng)價(jià)設(shè)計(jì)好壞的重要度量標(biāo)準(zhǔn)。衡量軟件的模塊獨(dú)立性作用耦合性和內(nèi)聚性兩個(gè)定性的度量標(biāo)準(zhǔn)
○1內(nèi)聚性:內(nèi)聚性是一個(gè)模塊內(nèi)部各個(gè)元素間彼此結(jié)合的緊密程度的度量。內(nèi)聚是從功能角度來度量模塊內(nèi)的聯(lián)系。
內(nèi)聚有如下的種類,它們之間的內(nèi)聚性由弱到強(qiáng)排列為:
偶然內(nèi)聚 邏輯內(nèi)聚 時(shí)間內(nèi)聚 過程 通信內(nèi)聚 順序內(nèi)聚 功能內(nèi)聚
內(nèi)聚性是信息隱蔽和局部化概念的自然擴(kuò)展。一個(gè)模塊的內(nèi)聚性越強(qiáng)則該模塊的模塊獨(dú)立性越強(qiáng)。作為軟件結(jié)構(gòu)設(shè)計(jì)的設(shè)計(jì)原則,要求生一個(gè)模塊的內(nèi)部都具有很強(qiáng)的內(nèi)聚性,它的各個(gè)組成部分彼此都密切相關(guān)。
○2耦合性:耦合性是模塊間互相連接的緊密程度的度量。
耦合性取決于各個(gè)模塊之間接口的復(fù)雜度、調(diào)用方式以及哪些信息通過接口。耦合可以分為下列幾種,它們之間的耦合度由高到低排列為:
內(nèi)容耦合:如一個(gè)模塊直接訪問另一模塊的內(nèi)容,則這兩個(gè)模塊稱為內(nèi)容耦合。
公共耦合:若一組模塊都有訪問同一全局?jǐn)?shù)據(jù)結(jié)構(gòu),則它之間的耦合稱之為公共耦合。
外部耦合:一組模塊都訪問同一全局簡(jiǎn)單變量(而不是同一全局?jǐn)?shù)據(jù)結(jié)構(gòu)),且不通過參數(shù)表傳遞該全局變量的信息,則稱為外部耦合。
控制耦合:若一模塊明顯地把開頭量、名字等信息送入另一模塊,控制另一模塊的功能,則為控制耦合。
標(biāo)記耦合:若兩個(gè)以上的模塊都需要其余某一數(shù)據(jù)結(jié)構(gòu)子結(jié)構(gòu)時(shí),不使用其余全局變量的方式而是用記錄傳遞的方式,即兩模塊間通過數(shù)據(jù)結(jié)構(gòu)變換信息,這樣的耦合稱為標(biāo)記耦合。
數(shù)據(jù)耦合:若一個(gè)模塊訪問另一個(gè)模塊,被訪問模塊的輸入和輸出都數(shù)據(jù)項(xiàng)參數(shù),即兩模塊間通過數(shù)據(jù)參數(shù)交換信息,則這兩個(gè)模塊為數(shù)據(jù)耦合。
非直接耦合:若兩個(gè)模塊沒有直接關(guān)系,它們之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實(shí)現(xiàn)的,則稱這兩個(gè)模塊為非直接耦合。非直接耦合獨(dú)立性。
一、軟件設(shè)計(jì)的基本概念
1、 軟件設(shè)計(jì)的基礎(chǔ)
軟件設(shè)計(jì)是軟件工程的重要階段,是一個(gè)把軟件需求轉(zhuǎn)換為軟件表示的過程。軟件設(shè)計(jì)的基本目標(biāo)是用比較抽象概括的方式確定目標(biāo)系統(tǒng)如何完成預(yù)定的任務(wù),即軟件設(shè)計(jì)是確定系統(tǒng)的物理模型。
軟件設(shè)計(jì)的重要性和地位概括為以下幾點(diǎn):
① 軟件開發(fā)階段(設(shè)計(jì)、編碼、測(cè)試)占據(jù)軟件項(xiàng)目開發(fā)總成本絕大部分,是在軟件開發(fā)中形成質(zhì)量的關(guān)鍵五一節(jié);
② 軟件設(shè)計(jì)是開發(fā)階段最重要的步驟,是將需求準(zhǔn)確地轉(zhuǎn)化為完整的軟件產(chǎn)品或系統(tǒng)的惟一途徑;
③ 軟件設(shè)計(jì)作出的決策,最終影響軟件實(shí)現(xiàn)的成??;
④ 設(shè)計(jì)是軟件工程和軟件維護(hù)的基礎(chǔ)。
從技術(shù)觀點(diǎn)來看,軟件設(shè)計(jì)包括軟件結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)、過程設(shè)計(jì)。其中,結(jié)構(gòu)設(shè)計(jì)是定義軟件系統(tǒng)各主要部件之間的關(guān)系;數(shù)據(jù)設(shè)計(jì)是將分析時(shí)創(chuàng)建的模型轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的定義;接口設(shè)計(jì)是描述軟件內(nèi)部、軟件和協(xié)作系統(tǒng)之間以及軟件與人之間如何通信;過程設(shè)計(jì)則是把系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過程性描述。
從工程管理角度來看,軟件設(shè)計(jì)分兩步完成:概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。概要設(shè)計(jì)(又稱結(jié)構(gòu)設(shè)計(jì))將軟件需求轉(zhuǎn)化為軟件體系結(jié)構(gòu)、確定系統(tǒng)級(jí)接口、全局?jǐn)?shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫模式;詳細(xì)設(shè)計(jì)確立每個(gè)模塊的實(shí)現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu),用適當(dāng)方法表示算法和數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié)。
軟件設(shè)計(jì)的一般過程是:軟件設(shè)計(jì)是一個(gè)迭代的過程;先進(jìn)行高層次的結(jié)構(gòu)設(shè)計(jì);后進(jìn)行低層次的過程設(shè)計(jì);穿插進(jìn)行數(shù)據(jù)設(shè)計(jì)和接口設(shè)計(jì)。
2、 軟件設(shè)計(jì)的基本原理
軟件設(shè)計(jì)遵循軟件工程的基本目標(biāo)和原則,建立了適用于在軟件設(shè)計(jì)中應(yīng)該遵循的基本原理和與軟件設(shè)計(jì)有關(guān)的概念。
(1)抽象
抽象是一種思維工具,就是把事物本質(zhì)的共同特性提取出來而不考慮其他細(xì)節(jié)。軟件設(shè)計(jì)中考慮模塊化解決方案時(shí),可以定出多個(gè)抽象級(jí)別。抽象的層次從概要設(shè)計(jì)到詳細(xì)設(shè)計(jì)逐步聊低。在軟件概要設(shè)計(jì)中的模塊分層也是由抽象到具體逐步分析和構(gòu)造出來的。
(2)模塊化
模塊化是指把一個(gè)待開發(fā)的軟件分解成若干個(gè)小的簡(jiǎn)單的部分。如高級(jí)語言中的過程、函數(shù)、子程序等。每個(gè)模塊可以完成一個(gè)特定的子功能,各個(gè)模塊可以按一定的方法組裝起來成為一個(gè)整體,從而實(shí)現(xiàn)整個(gè)系統(tǒng)的功能 .模塊化是指解決一個(gè)復(fù)雜問題時(shí)自頂向下逐層把軟件系統(tǒng)劃分成若干模塊的過程。
為了解決復(fù)雜的問題,在軟件設(shè)計(jì)中必須把整個(gè)問題進(jìn)行分解來降低復(fù)雜性,這樣就可以減少開發(fā)工作量并降低開發(fā)成本和提高軟件生產(chǎn)率。但是劃分模塊并不是越多越好,因?yàn)檫@會(huì)增加模塊之間接口的工作量,所以劃分模塊層次和數(shù)量應(yīng)該避免過多或過少。
(3)信息隱蔽
信息隱蔽是指,在一個(gè)模塊內(nèi)包含的信息(過程或數(shù)據(jù)),對(duì)于不需要這些信息的其他模塊來說是不能訪問的。
(4)模塊獨(dú)立性
模塊獨(dú)立性是指,每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡(jiǎn)單。是評(píng)價(jià)設(shè)計(jì)好壞的重要度量標(biāo)準(zhǔn)。衡量軟件的模塊獨(dú)立性作用耦合性和內(nèi)聚性兩個(gè)定性的度量標(biāo)準(zhǔn)
○1內(nèi)聚性:內(nèi)聚性是一個(gè)模塊內(nèi)部各個(gè)元素間彼此結(jié)合的緊密程度的度量。內(nèi)聚是從功能角度來度量模塊內(nèi)的聯(lián)系。
內(nèi)聚有如下的種類,它們之間的內(nèi)聚性由弱到強(qiáng)排列為:
偶然內(nèi)聚 邏輯內(nèi)聚 時(shí)間內(nèi)聚 過程 通信內(nèi)聚 順序內(nèi)聚 功能內(nèi)聚
內(nèi)聚性是信息隱蔽和局部化概念的自然擴(kuò)展。一個(gè)模塊的內(nèi)聚性越強(qiáng)則該模塊的模塊獨(dú)立性越強(qiáng)。作為軟件結(jié)構(gòu)設(shè)計(jì)的設(shè)計(jì)原則,要求生一個(gè)模塊的內(nèi)部都具有很強(qiáng)的內(nèi)聚性,它的各個(gè)組成部分彼此都密切相關(guān)。
○2耦合性:耦合性是模塊間互相連接的緊密程度的度量。
耦合性取決于各個(gè)模塊之間接口的復(fù)雜度、調(diào)用方式以及哪些信息通過接口。耦合可以分為下列幾種,它們之間的耦合度由高到低排列為:
內(nèi)容耦合:如一個(gè)模塊直接訪問另一模塊的內(nèi)容,則這兩個(gè)模塊稱為內(nèi)容耦合。
公共耦合:若一組模塊都有訪問同一全局?jǐn)?shù)據(jù)結(jié)構(gòu),則它之間的耦合稱之為公共耦合。
外部耦合:一組模塊都訪問同一全局簡(jiǎn)單變量(而不是同一全局?jǐn)?shù)據(jù)結(jié)構(gòu)),且不通過參數(shù)表傳遞該全局變量的信息,則稱為外部耦合。
控制耦合:若一模塊明顯地把開頭量、名字等信息送入另一模塊,控制另一模塊的功能,則為控制耦合。
標(biāo)記耦合:若兩個(gè)以上的模塊都需要其余某一數(shù)據(jù)結(jié)構(gòu)子結(jié)構(gòu)時(shí),不使用其余全局變量的方式而是用記錄傳遞的方式,即兩模塊間通過數(shù)據(jù)結(jié)構(gòu)變換信息,這樣的耦合稱為標(biāo)記耦合。
數(shù)據(jù)耦合:若一個(gè)模塊訪問另一個(gè)模塊,被訪問模塊的輸入和輸出都數(shù)據(jù)項(xiàng)參數(shù),即兩模塊間通過數(shù)據(jù)參數(shù)交換信息,則這兩個(gè)模塊為數(shù)據(jù)耦合。
非直接耦合:若兩個(gè)模塊沒有直接關(guān)系,它們之間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實(shí)現(xiàn)的,則稱這兩個(gè)模塊為非直接耦合。非直接耦合獨(dú)立性。