第5章軟件設計-課件(PPT 128頁)_第1頁
第5章軟件設計-課件(PPT 128頁)_第2頁
第5章軟件設計-課件(PPT 128頁)_第3頁
第5章軟件設計-課件(PPT 128頁)_第4頁
第5章軟件設計-課件(PPT 128頁)_第5頁
已閱讀5頁,還剩123頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第5章 軟件設計 5.1 軟件設計中的基本概念和原理 5.2 體系結構設計概述 5.3 面向數(shù)據流的體系結構設計方法 5.4 詳細設計概述 5.5 面向數(shù)據流的詳細設計方法5.6 面向數(shù)據結構的設計方法5.7 小結 第1頁,共128頁。5.1 軟件設計中的基本概念和原理 1. 模塊化 所謂模塊,是指具有相對獨立性的,由數(shù)據說明、執(zhí)行語句等程序對象構成的集合。程序中的每個模塊都需要單獨命名,通過名字可實現(xiàn)對指定模塊的訪問。在高級語言中,模塊具體表現(xiàn)為函數(shù)、子程序、過程等。一個模塊具有輸入/輸出(接口)、功能、內部數(shù)據和程序代碼四個特征。輸入/輸出用于實現(xiàn)模塊與其他模塊間的數(shù)據傳送,即向模塊傳入所

2、需的原始數(shù)據及從模塊傳出得到的結果數(shù)據。功能指模塊所完成的工作。模塊的輸入/輸出和功能構成了模塊的外部特征。內部數(shù)據是指僅能在模塊內部使用的局部量。程序代碼用于描述實現(xiàn)模塊功能的具體方法和步驟。模塊的內部數(shù)據和程序代碼反映的是模塊的內部特征。第2頁,共128頁。 模塊化是指將整個程序劃分為若干個模塊,每個模塊用于實現(xiàn)一個特定的功能。劃分模塊對于解決大型復雜的問題是非常必要的,可以大大降低解決問題的難度。為了說明這一點,我們可對問題復雜性、開發(fā)工作量和模塊數(shù)之間的關系進行以下推理。 首先,我們設C(x)為問題x所對應的復雜度函數(shù),E(x)為解決問題x所需要的工作量函數(shù)。對于兩個問題P1和P2,如

3、果: C(P1) C(P2) 即問題P1的復雜度比P2高,則顯然有: E(P1) E(P2) 即解決問題P1比P2所需的工作量大。第3頁,共128頁。 在人們解決問題的過程中,發(fā)現(xiàn)存在有另一個有趣的規(guī)律:C(P1+P2) C(P1)+C(P2)即解決由多個問題復合而成的大問題的復雜度大于單獨解決各個問題的復雜度之和。也就是說,對于一個復雜問題,將其分解成多個小問題分別解決比較容易。由此我們可以推出:E(P1+P2) E(P1)+E(P2)即將復雜問題分解成若干個小問題,各個擊破,所需要的工作量小于直接解決復雜問題所需的工作量。第4頁,共128頁。 根據上面的推理,我們可以得到這樣一個結論,模塊

4、化可以降低解決問題的復雜度,從而降低軟件開發(fā)的工作量。但是不是模塊劃分得越多越好呢?雖然增加程序中的模塊數(shù)可以降低開發(fā)每個模塊的工作量,但同時卻增加了設計模塊接口的工作量。通過圖5.1所示的模塊數(shù)與軟件開發(fā)成本的關系圖中可以看出,當劃分的模塊數(shù)處于最小成本區(qū)時,開發(fā)軟件的總成本最低。雖然目前還不能得到模塊數(shù)M的精確取值,但總成本曲線對我們進行模塊劃分具有重要的指導意義。 模塊化不但可以降低軟件開發(fā)的難度,而且可以使程序結構清晰,增加易讀性和易修改性。此外,模塊化還有利于提高代碼的可重用性及團隊合作開發(fā)大型軟件的可行性。第5頁,共128頁。圖5.1 模塊數(shù)與軟件開發(fā)成本第6頁,共128頁。 2.

5、 模塊獨立性 1) 耦合性 耦合性是對一個軟件結構內部不同模塊間聯(lián)系緊密程度的度量指標。模塊間的聯(lián)系越緊密,耦合性就越高,模塊的獨立性也就越低。由于模塊間的聯(lián)系是通過模塊接口實現(xiàn)的,因此,模塊耦合性的高低主要取決于模塊接口的復雜程度、調用模塊的方式以及通過模塊接口的數(shù)據。模塊間的耦合性主要可劃分為如下幾種類型。第7頁,共128頁。 (1) 數(shù)據耦合。若兩個模塊之間僅通過模塊參數(shù)交換信息,且交換的信息全部為簡單數(shù)據,則稱這種耦合為數(shù)據耦合。數(shù)據耦合的耦合性最低,通常軟件中都包含有數(shù)據耦合。數(shù)據耦合的例子如下所示:第8頁,共128頁。sum(int a,int b)int c; c=a+b; re

6、turn(c); main()int x,y; printf(x+y= %d,sum(x,y);/*主函數(shù)與sum函數(shù)之間即為數(shù)據耦合關系*/第9頁,共128頁。 (2) 公共耦合。若兩個或多個模塊通過引用公共數(shù)據相互聯(lián)系,則稱這種耦合為公共耦合。例如,在程序中定義了全局變量,并在多個模塊中對全局變量進行了引用,則引用全局變量的多個模塊間就具有了公共耦合關系。 FORTRAN語言中使用的common語句也會在多個模塊間建立公共耦合關系。公共耦合的復雜度隨著耦合的模塊個數(shù)的增加而顯著增加。在程序設計中,若兩個模塊間需要交換的數(shù)據較多,僅通過參數(shù)傳遞難以實現(xiàn)時,可以考慮采用公共耦合完成,但一定注意

7、盡量降低公共耦合的程度。第10頁,共128頁。 (3) 控制耦合。若模塊之間交換的信息中包含有控制信息(盡管有時控制信息是以數(shù)據的形式出現(xiàn)的),則稱這種耦合為控制耦合??刂岂詈鲜侵械瘸潭鹊鸟詈?,它會增加程序的復雜性??刂岂詈系睦尤缦滤荆簐oid output(flag)if (flag) printf(OK! ); else printf(NO! );main() int flag;output(flag); /*主函數(shù)與output函數(shù)之間即為控制耦合關系*/第11頁,共128頁。 (4) 內容耦合。若一個模塊對另一模塊中的內容(包括數(shù)據和程序段)進行了直接的引用甚至修改,或通過非正常入

8、口進入到另一模塊內部,或一個模塊具有多個入口,或兩個模塊共享一部分代碼,則稱模塊間的這種耦合為內容耦合。內容耦合是所有耦合關系中程度最高的,會使因模塊間的聯(lián)系過于緊密而對后期的開發(fā)和維護工作帶來很大的麻煩,因此,應堅決避免任何形式的內容耦合。實際上,許多高級程序設計語言在設計時就充分考慮到了內容耦合的危害,因而在規(guī)定語法時就已經杜絕了任何形式的內容耦合。 耦合是影響軟件復雜度的一個重要因素,設計過程中應力求降低程序的耦合性。在以上所介紹的耦合中,數(shù)據耦合的程度最低,其次是公共耦合,再其次是控制耦合,程度最高的是內容耦合。第12頁,共128頁。 2) 內聚性 內聚性是對一個模塊內部各個組成元素之

9、間相互結合的緊密程度的度量指標。模塊中組成元素結合的越緊密,模塊的內聚性就越高,模塊的獨立性也就越高。理想的內聚性要求模塊的功能應明確、單一,即一個模塊只做一件事情。模塊的內聚性和耦合性是兩個相互對立且又密切相關的概念。事實上,它們是同一事物的兩個方面,模塊的高內聚性往往就意味著模塊間的低耦合性。因為程序中的各個部分必定是有聯(lián)系的,若將其中密切相關的部分放在同一個模塊中,模塊間的聯(lián)系就會降低;反之,若將密切相關的部分分散放在不同的模塊之中,模塊間的聯(lián)系必然會加強。在進行模塊化設計時,耦合性和內聚性都是必須考慮的重要指標。但經實踐證明,保證模塊的高內聚性比低耦合性更為重要,在軟件設計時應將更多的

10、注意力集中在提高模塊的內聚性上。模塊的內聚性主要可劃分為如下幾種不同的類型。第13頁,共128頁。 (1) 偶然內聚。若一個模塊由多個完成不同任務的語句段組成,各語句段之間的聯(lián)系十分松散或根本沒有任何聯(lián)系,則稱此模塊的內聚為偶然內聚。例如,程序中多處出現(xiàn)一些無聯(lián)系的語句段序列,為了節(jié)省內存空間將其組合成為一個模塊,這個模塊就屬于偶然內聚。偶然內聚的模塊由于組成部分之間沒有實質的聯(lián)系,因此難于理解和修改,會給軟件開發(fā)帶來很大的困擾。事實上,偶然內聚的模塊出錯的機率要比其他類型的模塊大得多。偶然內聚是內聚程度最低的一種,在軟件設計時應盡量避免。第14頁,共128頁。 (2) 邏輯內聚。若一個模塊可

11、實現(xiàn)多個邏輯上相同或相似的一類功能,則稱該模塊的內聚為邏輯內聚。例如,將程序中多種不同類型數(shù)據的輸出放在同一個模塊中實現(xiàn),這個模塊就屬于邏輯聚合。邏輯內聚比偶然內聚的內聚程度高一些。雖然邏輯聚合模塊的組成部分之間有一定的關系,但不同功能混在一起并公用模塊中的部分代碼,給修改帶來了一定的麻煩。另外,為了在調用模塊時能選擇執(zhí)行其中的某個功能,需要傳遞相應的控制參數(shù),因而會造成模塊間的控制耦合,降低模塊的獨立性。第15頁,共128頁。 (3) 時間內聚。若一個模塊包含了需要在同一時間段中執(zhí)行的多個任務,則稱該模塊的內聚為時間內聚。例如,將多個變量的初始化放在同一個模塊中實現(xiàn),或將需要同時使用的多個庫

12、文件的打開操作放在同一個模塊中,都會產生時間內聚的模塊。由于時間內聚模塊中的各個部分在時間上的聯(lián)系,其內聚程度比邏輯內聚高一些。但這樣的模塊往往會和其他相關模塊有著緊密的聯(lián)系,因而會造成耦合性的增加。第16頁,共128頁。 (4) 過程內聚。若一個模塊中的各個部分相關,并且必須按特定的次序執(zhí)行,則稱該模塊的內聚為過程內聚。在結構化程序中,通常采用程序流程圖作為設計軟件和確定模塊劃分的工具,因此,這樣得到的模塊往往具有過程內聚的特性。 (5) 通信內聚。若一個模塊中的各個部分使用同一個輸入數(shù)據或產生同一個輸出數(shù)據,則稱該模塊的內聚為通信內聚。由于通信內聚模塊中的各個部分都與某個共同的數(shù)據密切相關

13、,因此內聚性高于前幾種內聚。第17頁,共128頁。 (6) 順序內聚。若一個模塊中的各個部分都與同一個功能密切相關,并且必須按照先后順序執(zhí)行(通常前一個部分的輸出數(shù)據就是后一個部分的輸入數(shù)據),則稱該模塊的內聚為順序內聚。例如,在一個處理學生成績的模塊中,前一個部分根據成績統(tǒng)計出及格的學生人數(shù),后一個部分根據及格人數(shù)計算出學生的及格率。根據數(shù)據流圖劃分出的模塊通常都是順序內聚的模塊。由于順序內聚模塊中的各個部分在功能和執(zhí)行順序上都密切相關,因此內聚程度很高且易于理解。第18頁,共128頁。 (7) 功能內聚。若一個模塊中各個組成部分構成一個整體并共同完成一個單一的功能,則稱該模塊的內聚為功能內

14、聚。由于功能內聚模塊中的各個部分關系非常密切,構成一個不可分割的整體,因此功能內聚是所有內聚中內聚程度最高的一種。 在以上所介紹的七種內聚中,按照內聚性從低到高進行排列的結果如圖5.2所示。 第19頁,共128頁。圖5.2 內聚性的排列 第20頁,共128頁。 3. 抽象 抽象是人類在解決復雜問題時經常采用的一種思維方式,它是指將現(xiàn)實世界中具有共性的一類事物的相似的、本質的方面集中概括起來,而暫時忽略它們之間的細節(jié)差異。在軟件開發(fā)中運用抽象的概念,可以將復雜問題的求解過程分層,在不同的抽象層上實現(xiàn)難度的分解。在抽象級別較高的層次上,可以將瑣碎的細節(jié)的信息暫時隱藏起來,以利于解決系統(tǒng)中的全局性的

15、問題。軟件開發(fā)過程中從問題定義到最終的軟件生成,每一階段都是在前一階段基礎上對軟件解法的抽象層上的一次求精和細化。第21頁,共128頁。 結構化程序中自頂向下、逐步求精的模塊劃分思想正是人類思維中運用抽象方法解決復雜問題的體現(xiàn)。軟件結構中頂層的模塊抽象級別最高,控制并協(xié)調軟件的主要功能且影響全局;軟件結構中位于底層的模塊抽象級別最低,具體實現(xiàn)數(shù)據的處理過程。采用自頂向下、由抽象到具體的思維方式,不但降低了軟件開發(fā)中每個階段的工作難度,簡化了軟件的設計和實現(xiàn)過程,還有助于提高軟件的可讀性、可測試性和可維護性。此外,在程序設計中運用抽象的方法還能夠提高代碼的可重用性。第22頁,共128頁。 4.

16、信息隱蔽 信息隱蔽是指一個模塊將自身的內部信息向其他模塊隱藏起來,以避免其他模塊不恰當?shù)脑L問和修改,只有對那些為了完成系統(tǒng)功能所必須的數(shù)據交換才被允許在模塊間進行。信息隱蔽的目的主要是為了提高模塊的獨立性,減少將一個模塊中的錯誤擴散到其他模塊的機會。但是需要強調一點,信息隱蔽并不意味著某個模塊中的內部信息對其他模塊來說是完全不可見或不能使用的,而是說模塊之間的信息傳遞只能通過合法的調用接口來實現(xiàn)。顯然,信息隱蔽對提高軟件的可讀性和可維護性都是非常重要的。第23頁,共128頁。5.2 體系結構設計概述5.2.1 體系結構設計的任務 在體系結構設計過程中,首先要根據需求分析階段產生的成果尋求實現(xiàn)目

17、標系統(tǒng)的各種可能的方案,然后由系統(tǒng)分析員對所有可能的方案進行綜合分析比較,從中選擇出一個最佳方案向用戶推薦。在與用戶達成共識之后,系統(tǒng)分析員就可以著手對選擇出的最佳方案進行體系結構的設計,并為軟件確定數(shù)據結構及設計數(shù)據庫。體系結構設計階段結束時,系統(tǒng)分析員需要提交軟件的體系結構說明書并參加該階段的評審。體系結構設計的主要任務有如下四點。第24頁,共128頁。 1. 軟件體系結構設計 設計軟件的體系結構需要在對需求分析階段生成的數(shù)據流圖進一步分析和精化的基礎上,首先將系統(tǒng)按照功能劃分為模塊,接著需要確定模塊之間的調用關系及其接口,最后還應該對劃分的結果進行優(yōu)化和調整。良好的軟件結構設計對詳細設計

18、及編碼階段的工作都是至關重要的。第25頁,共128頁。 2. 數(shù)據結構和數(shù)據庫設計 體系結構設計中應對需求分析階段所生成的數(shù)據字典加以細化,從計算機技術實現(xiàn)的角度出發(fā),確定軟件涉及的文件系統(tǒng)及各種數(shù)據的結構。主要包括確定輸入、輸出文件的數(shù)據結構及確定算法所需的邏輯數(shù)據結構等。在需求分析階段僅為系統(tǒng)所需的數(shù)據庫建立了概念數(shù)據模型(最常采用的是E-R模型)。體系結構設計階段需要將原本獨立于數(shù)據庫實現(xiàn)的概念模型與具體的數(shù)據庫管理系統(tǒng)的特征結合起來,建立數(shù)據庫的邏輯結構,主要包括確定數(shù)據庫的模式、子模式及對數(shù)據庫進行規(guī)范和優(yōu)化等。第26頁,共128頁。 3. 系統(tǒng)可靠性、安全性設計 可靠性設計也稱為質

19、量設計,目的是為了保證程序及其文檔具有較高的正確性和容錯性,并對可能出現(xiàn)的錯誤易于修改和維護。安全性設計的主要目的是為了增強系統(tǒng)的自我防護能力和運行的穩(wěn)定性,防止系統(tǒng)遭受到有意或無意地入侵和破壞,保證系統(tǒng)在安全的環(huán)境下正常地工作。第27頁,共128頁。 4. 編寫文檔,參加復審 體系結構設計階段應交付的文檔通常包括:體系結構設計說明書、用戶手冊、數(shù)據庫設計說明書及系統(tǒng)初步測試計劃。 (1) 體系結構設計說明書: 給出系統(tǒng)總體結構設計的結果,為系統(tǒng)的詳細設計提供基礎。 (2) 用戶手冊:根據體系結構設計成果,對需求分析階段編寫的用戶手冊進行補充和修改。 (3) 測試計劃:明確測試中應采用的策略、

20、方案、預期的測試結果及測試的進度安排。第28頁,共128頁。 (4) 數(shù)據庫設計說明書:主要用于給出目標系統(tǒng)中數(shù)據庫管理系統(tǒng)的選擇及邏輯結構等的設計結果。 體系結構設計階段復審的重點主要是系統(tǒng)的總體結構、模塊劃分和內/外接口等方面,復審的對象就是該階段的設計文檔。由于體系結構設計中的微小失誤可能會導致軟件開發(fā)中的重大問題,因此復審一定要按嚴格的步驟,通過正式會議的方式進行,爭取盡可能地及早發(fā)現(xiàn)設計中的缺陷和錯誤。除軟件開發(fā)人員以外,體系結構設計復審必須有用戶參加,必要時還可以邀請相關領域的專家參加會議。第29頁,共128頁。5.2.2 體系結構設計中可采用的工具 1. HIPO圖 HIPO(H

21、ierarchy Plus Input/Processing/Output)圖是IBM公司在20世紀70年代發(fā)展起來的用于描述軟件結構的圖形工具。它實質上是在描述軟件總體模塊結構的層次圖(H圖)的基礎上,加入了用于描述每個模塊輸入/輸出數(shù)據和處理功能的IPO圖,因此它的中文全名為層次圖加輸入/處理/輸出圖。第30頁,共128頁。 1) HIPO圖中的H圖 H圖用于在體系結構設計過程中描繪軟件的層次結構。在H圖中,每一個矩形框代表一個模塊,圖中最頂層的矩形框表示系統(tǒng)中的主控模塊,矩形框之間的連線用于表示模塊之間的調用關系。為了使H圖更具有可追蹤性,可以為除頂層矩形框以外的其他矩形框加上能反映層次

22、關系的編號。H圖比較適用于自頂向下進行分解的軟件結構設計方法。工資計算系統(tǒng)的H圖如圖5.3所示。第31頁,共128頁。圖5.3 工資計算系統(tǒng)的H圖第32頁,共128頁。 2) IPO圖 IPO圖能夠方便、清晰地描繪出模塊的輸入數(shù)據、加工和輸出數(shù)據之間的關系。與層次圖中每個矩形框相對應,應該有一張IPO圖描述該矩形框所代表的模塊的具體處理過程,作為對層次圖中內容的補充說明。IPO圖的基本形式為:在圖中左邊的框中列出模塊涉及的所有輸入數(shù)據,在中間的框中列出主要的加工,在右邊的框中列出處理后產生的輸出數(shù)據;圖中的箭頭用于指明輸入數(shù)據、加工和輸出結果之間的關系。工資計算系統(tǒng)中的計算工資模塊的IPO圖如

23、圖5.4所示。第33頁,共128頁。圖5.4 計算工資模塊的IPO圖第34頁,共128頁。 2. 結構圖 在軟件工程中,軟件結構經常采用20世紀70年代中期由Yourdon等人提出的結構圖(SC,Structure Chart)這種圖形工具來表示。結構圖能夠描述出軟件系統(tǒng)的模塊層次結構,清楚地反映出程序中各模塊之間的調用關系和聯(lián)系。結構圖中的基本符號及其含義見表5.1。第35頁,共128頁。表5.1 結構圖中的基本符號ABCABC符 號含 義用于表示模塊,方框中標明模塊的名稱用于描述模塊之間的調用關系用于表示模塊調用過程中傳遞的信息,箭頭上標明信息的名稱;箭頭尾部為空心圓表示傳遞的信息是數(shù)據,

24、若為實心圓則表示傳遞的是控制信息表示模塊A選擇調用模塊B或模塊C表示模塊A循環(huán)調用模塊B和模塊C第36頁,共128頁。5.2.3 體系結構設計的原則 體系結構設計的原則有如下6點。 (1) 降低模塊的耦合性,提高模塊的內聚性。 為了提高軟件中各個模塊的獨立性,提高程序的可讀性、可測試性和可維護性,在軟件體系結構設計時應盡可能采用內聚性高的模塊,如最好實現(xiàn)功能內聚;盡量只使用數(shù)據耦合,限制公共耦合的使用,避免控制耦合的使用,杜絕內容耦合的出現(xiàn)。第37頁,共128頁。 (2) 保持適中的模塊規(guī)模。 程序中模塊的規(guī)模過大,會降低程序的可讀性;而模塊規(guī)模過小,勢必會導致程序中的模塊數(shù)目過多,增加接口的

25、復雜性。對于模塊的適當規(guī)模并沒有嚴格的規(guī)定,但普遍的觀點是模塊中的語句數(shù)最好保持在10100之間。為了使模塊的規(guī)模適中,在保證模塊獨立性的前提下,可對程序中規(guī)模過小的模塊進行合并或對規(guī)模過大的模塊進行分解。第38頁,共128頁。 (3) 模塊應具有高扇入和適當?shù)纳瘸觥?在模塊調用中,某個模塊的上級模塊數(shù)被稱為該模塊的扇入(如圖5.5(a)所示,模塊M的扇入數(shù)為n);而某個模塊可以調用的下級模塊數(shù)被稱為該模塊的扇出(如圖5.5(b)所示,模塊M的扇出數(shù)為k)。顯然,一個模塊的扇入表明了共有多少個模塊需要調用該模塊,而其扇出表明了該模塊可以控制的下級模塊的數(shù)目。第39頁,共128頁。圖5.5 模塊

26、的扇入和扇出(a) 扇入;(b) 扇出第40頁,共128頁。 模塊的扇入越大,則說明共享該模塊的上級模塊數(shù)越多,或者說該模塊在程序中的重用性越高,這正是程序設計所追求的目標之一。當多個模塊具有一部分相同功能時,應將這部分相同的功能分離出來,編寫成獨立的模塊供需要的模塊調用。通過消除不同模塊中的重復內容,提高代碼的可重用性,可以減少程序的總代碼量,便于程序的測試和維護。第41頁,共128頁。 模塊的扇出若過大,如在一個模塊中要調用八個下級模塊,則會使該模塊的調用控制過于復雜。這種現(xiàn)象發(fā)生的原因通常都是由于設計階段,模塊細化的過程中,分解速度過快造成的。最常見的解決辦法是通過在此模塊和下級模塊間增

27、加一個中間層來控制模塊分解的速度。模塊的扇出過小,如扇出為1(下級模塊層中只有一個模塊),在系統(tǒng)設計中通常是不可取的。常見的解決方法是考慮將其合并到上級模塊中。但若合并會影響模塊的獨立性,則將其保留下來也未嘗不可。根據實踐經驗,設計良好的典型系統(tǒng)中,模塊的平均扇出通常為3或4。第42頁,共128頁。 可以看出:在一個好的軟件結構中,模塊應具有較高的扇入和適當?shù)纳瘸觥5^不能為了單純追求高扇入或合適的扇出而破壞了模塊的獨立性。此外,經過對大量軟件系統(tǒng)的研究后發(fā)現(xiàn),在設計良好的軟件結構中,通常頂層的扇出數(shù)較大,中間層的扇出數(shù)較小,底層的扇入數(shù)較大,如圖5.6所示。第43頁,共128頁。圖5.6 軟

28、件結構圖示例 第44頁,共128頁。 (4) 軟件結構中的深度和寬度不宜過大。 所謂深度,是指軟件體系結構中控制的層數(shù),它能夠粗略地反映出軟件系統(tǒng)的規(guī)模和復雜程度;所謂寬度,是指軟件體系結構內同一層次上模塊個數(shù)的最大值,通常寬度越大的系統(tǒng)越復雜。如圖5.6所示的軟件結構圖中,深度為5,寬度為8。深度在程序中表現(xiàn)為模塊的嵌套調用,嵌套的層數(shù)越多,程序就越復雜,程序的可理解性也就隨之下降。對寬度影響最大的因素是模塊的扇出,即模塊可以調用的下級模塊數(shù)越多,軟件結構的寬度就越大。深度過大可通過將結構中過于簡單的模塊分層與上一級模塊合并來解決;而寬度過大則可通過增加中間層來解決。顯然,軟件結構中的深度和

29、寬度是相互對立的兩個方面,降低深度會引起寬度的增加,而降低寬度又會帶來深度的增加。第45頁,共128頁。 (5) 模塊的作用域應處于其控制域范圍之內。 模塊的作用域是指受該模塊內一個判定條件影響的所有模塊范圍。模塊的控制域是指該模塊本身以及所有該模塊的下屬模塊(包括該模塊可以直接調用的下級模塊和可以間接調用的更下層的模塊)。例如,在圖5.7中,模塊C的控制域為模塊C、E和F;若在模塊C中存在一個對模塊D、E和F均有影響的判定條件,即模塊C的作用域為模塊C、D、E和F(圖中帶陰影的模塊),則顯然模塊C的作用域超出了其作用域。由于模塊D在模塊C的作用域中,因此模塊C對模塊D的控制信息必然要通過上級

30、模塊B進行傳遞,這樣不但會增加模塊間的耦合性,而且會給模塊的維護和修改帶來麻煩(若要修改模塊C,可能會對不在它控制域中的模塊D造成影響)。因此,軟件設計時應使各個模塊的作用域處于其控制域范圍之內。若發(fā)現(xiàn)不符合此設計原則的模塊,可通過下面的方法進行改進:第46頁,共128頁。 將判定位置上移。如將圖5.7中的模塊C中的判定條件上移到上級模塊B中或將模塊C整個合并到模塊B中。 將超出作用域的模塊下移。如將圖5.7中的模塊D移至模塊C的下一層上,使模塊D處于模塊C的控制域中。第47頁,共128頁。圖5.7 模塊的作用域和控制域 第48頁,共128頁。 (6) 盡量降低模塊的接口復雜度。 由于復雜的模

31、塊接口是導致軟件出現(xiàn)錯誤的主要原因之一,因此在軟件設計中應盡量使模塊接口簡單清晰,如減少接口傳送的信息個數(shù)以及確保實參和形參的一致性和對應性等。降低模塊的接口復雜度,可以提高軟件的可讀性,減少出現(xiàn)錯誤的可能性,并有利于軟件的測試和維護。第49頁,共128頁。5.2.4 體系結構設計說明書 體系結構設計說明書是體系結構設計階段中最重要的技術文檔,其主要內容應包括: (1) 引言:用于說明編寫本說明書的目的、背景,定義所用到的術語和縮略語,以及列出文檔中所引用的參考資料等。 (2) 總體設計:用于說明軟件的需求規(guī)定、運行環(huán)境要求、處理流程及軟件體系結構等。 (3) 運行設計:用于說明軟件的運行模塊

32、組合、運行控制方式及運行時間等。第50頁,共128頁。 (4) 模塊設計:用于說明軟件中各模塊的功能、性能及接口等。 (5) 數(shù)據設計:用于說明軟件系統(tǒng)所涉及的數(shù)據對象的邏輯數(shù)據結構的設計。 (6) 出錯處理設計:用于說明軟件系統(tǒng)可能出現(xiàn)的各種錯誤及可采取的處理措施。第51頁,共128頁。5.3 面向數(shù)據流的體系結構設計方法5.3.1 數(shù)據流圖的類型 面向數(shù)據流的體系設計方法能夠方便地將需求分析階段生成的數(shù)據流圖轉換成設計階段所需的軟件結構。但對于不同類型的數(shù)據流圖,轉換得到的軟件結構也不同,因此有必要首先研究一下數(shù)據流圖的典型形式。根據數(shù)據流圖的結構特點通??蓪?shù)據流圖劃分為如下兩個基本類型

33、。第52頁,共128頁。 1. 變換型數(shù)據流圖 變換型數(shù)據流圖呈現(xiàn)出的結構特點為:由(邏輯)輸入、變換中心和(邏輯)輸出三部分組成,如圖5.8所示。該類型數(shù)據流圖所描述的加工過程為:首先,外部數(shù)據沿邏輯輸入路徑進入系統(tǒng),同時數(shù)據的形式由外部形式轉化為內部形式;接著,數(shù)據被送往變換中心進行加工處理;最后,經過加工得到的結果數(shù)據的內部形式被轉換為外部形式并沿邏輯輸出路徑離開系統(tǒng)??梢钥闯?,變換型數(shù)據流圖反映的是一個順序結構的加工過程。第53頁,共128頁。圖5.8 變換型數(shù)據流圖的基本模型 第54頁,共128頁。 2. 事務型數(shù)據流圖 原則上,所有基本系統(tǒng)模型都屬于變換型,但其中有一類具有特殊形態(tài)

34、的數(shù)據流圖又被單獨劃分為事務型。事務型數(shù)據流圖呈現(xiàn)出的結構特點為:輸入流在經過某個被稱為“事務中心”的加工時被分離為多個發(fā)散的輸出流,形成多個平行的加工處理路徑,如圖5.9所示。該類型數(shù)據流圖所描述的加工過程為:外部數(shù)據沿輸入通路進入系統(tǒng)后,被送往事務中心;事務中心接收輸入數(shù)據并分析確定其類型;最后根據所確定的類型為數(shù)據選擇其中的一條加工路徑。第55頁,共128頁。圖5.9 事務型數(shù)據流圖的基本模型第56頁,共128頁。5.3.2 面向數(shù)據流的體系結構設計過程 運用面向數(shù)據流的方法進行軟件體系結構的設計時,應該首先對需求分析階段得到的數(shù)據流圖進行復查,必要時進行修改和精化;接著在仔細分析系統(tǒng)數(shù)

35、據流圖的基礎上,確定數(shù)據流圖的類型,并按照相應的設計步驟將數(shù)據流圖轉化為軟件結構;最后還要根據體系結構設計的原則對得到的軟件結構進行優(yōu)化和改進。面向數(shù)據流的體系結構設計過程如圖5.10所示。第57頁,共128頁。圖5.10 面向數(shù)據流的體系結構設計過程第58頁,共128頁。 一般來說,大多數(shù)系統(tǒng)的加工問題被表示為變換型,可采用變換分析設計方法建立系統(tǒng)的軟件結構,但當數(shù)據流圖具有明顯的事務特點時,則應采用事務分析技術進行處理。變換分析設計方法與事務分析設計方法類似,都遵循圖5.10所示的設計過程,主要差別僅在于由數(shù)據流圖向軟件結構的映射方法不同。對于一個復雜的系統(tǒng),數(shù)據流圖中可能既存在變換流又存

36、在事務流,這時應當根據數(shù)據流圖的主要處理功能,選擇一個面向全局的、涉及整個軟件系統(tǒng)的總體類型,映射得到系統(tǒng)的整體軟件結構。此外,再對局部范圍內的數(shù)據流圖進行具體研究,確定它們各自的類型并分別處理,得到系統(tǒng)的局部軟件結構。第59頁,共128頁。 1. 變換分析設計 對于變換型的數(shù)據流圖,應按照變換分析設計的方法建立系統(tǒng)的結構圖。下面以圖5.11所示的工資計算系統(tǒng)數(shù)據流圖為例來介紹變換分析建立軟件結構的具體步驟。第60頁,共128頁。 (1) 劃分邊界,區(qū)分系統(tǒng)的輸入、變換中心和輸出部分。 變換中心在圖中往往是多股數(shù)據流匯集的地方,經驗豐富的設計人員通??筛鶕涮卣髦苯哟_定系統(tǒng)的變換中心。另外,下

37、述方法可幫助設計人員確定系統(tǒng)的輸入和輸出:從數(shù)據流圖的物理輸入端出發(fā),沿著數(shù)據流方向逐步向系統(tǒng)內部移動,直至遇到不能被看作是系統(tǒng)輸入的數(shù)據流為止,則此數(shù)據流之前的部分即為系統(tǒng)的輸入;同理,從數(shù)據流圖的物理輸出端出發(fā),逆著數(shù)據流方向逐步向系統(tǒng)內部移動,直至遇到不能被看作是系統(tǒng)輸出的數(shù)據流為止,則該數(shù)據流之后的部分即為系統(tǒng)的輸出;夾在輸入和輸出之間的部分就是系統(tǒng)的變換中心。工資計算系統(tǒng)的數(shù)據流圖的劃分如圖5.11所示。第61頁,共128頁。圖5.11 進行了邊界劃分的工資計算系統(tǒng)數(shù)據流圖第62頁,共128頁。 (2) 完成第一級分解,設計系統(tǒng)的上層模塊。 這一步主要是確定軟件結構的頂層和第一層。任

38、何系統(tǒng)的頂層都只含一個用于控制的主模塊。變換型數(shù)據流圖對應的軟件結構的第一層一般由輸入、變換和輸出三種模塊組成。系統(tǒng)中的每個邏輯輸入對應一個輸入模塊,完成為主模塊提供數(shù)據的功能;每一個邏輯輸出對應一個輸出模塊,完成為主模塊輸出數(shù)據的功能;變換中心對應一個變換模塊,完成將系統(tǒng)的邏輯輸入轉換為邏輯輸出的功能。工資計算系統(tǒng)的一級分解結果如圖5.12所示。第63頁,共128頁。圖5.12 工資計算系統(tǒng)的一級分解 第64頁,共128頁。 (3) 完成第二級分解,設計輸入、變換中心和輸出部分的中、下層模塊。 這一步主要是對上一步確定的軟件結構進行逐層細化,為每一個輸入、輸出模塊及變換模塊設計下屬模塊。通常

39、,一個輸入模塊應包括用于接收數(shù)據和轉換數(shù)據(將接收的數(shù)據轉換成下級模塊所需的形式)的兩個下屬模塊;一個輸出模塊應包括用于轉換數(shù)據(將上級模塊的處理結果轉換成輸出所需的形式)和傳出數(shù)據的兩個下屬模塊;變換模塊的分解沒有固定的方法,一般應根據變換中心的組成情況及模塊分解的原則來確定下屬模塊。完成二級分解后,工資計算系統(tǒng)的軟件結構如圖5.13所示(圖中省略了模塊調用傳遞的信息)。第65頁,共128頁。圖5.13 完成二級分解后的工資計算系統(tǒng)軟件結構第66頁,共128頁。2. 事務分析設計圖5.14 進行了邊界劃分的事務型數(shù)據流圖 第67頁,共128頁。 (1) 劃分邊界,明確數(shù)據流圖中的接收路徑、事

40、務中心和加工路徑。 事務中心在數(shù)據流圖中位于多條加工路徑的起點,經過事務中心的數(shù)據流被分解為多個發(fā)散的數(shù)據流,根據這個特征很容易在圖中找到系統(tǒng)的事務中心。向事務中心提供數(shù)據的路徑是系統(tǒng)的接收路徑,而從事務中心引出的所有路徑都是系統(tǒng)的加工路徑,如圖5.14中對數(shù)據流圖的劃分。每條加工路徑都具有自己的結構特征,可能為變換型,也可能為事務型。如圖5.14中,路徑1為變換型,路徑2為事務型。第68頁,共128頁。 (2) 建立事務型結構的上層模塊。 事務型流圖對應的軟件結構的頂層只有一個由事務中心映射得到的總控模塊;總控模塊有兩個下級模塊,分別是由接收路徑映射得到的接收模塊和由全部加工路徑映射得到的調

41、度模塊。接收模塊負責接收系統(tǒng)處理所需的數(shù)據,調度模塊負責控制下層的所有加工模塊。兩個模塊共同構成了事務型軟件結構的第一層。圖5.14中,事務型數(shù)據流圖映射得到的上層軟件結構如圖5.15所示。第69頁,共128頁。圖5.15第70頁,共128頁。 (3) 分解、細化接收路徑和加工路徑,得到事務型結構的下層模塊。 由于接收路徑通常都具有變換型的特性,因此對事務型結構接收模塊的分解方法與對變換型結構輸入模塊的分解方法相同。對加工路徑的分解應按照每一條路徑本身的結構特征,分別采用變換分析或事務分析方法進行分解。經過分解后得到的完整的事務型軟件結構如圖5.16所示。第71頁,共128頁。圖5.16 完整

42、的事務型軟件結構第72頁,共128頁。 3. 軟件結構的改進和優(yōu)化 為了使最終生成的軟件系統(tǒng)具有良好的風格及較高的效率,應在軟件的早期設計階段盡量地對軟件結構進行優(yōu)化。因此在建立軟件結構后,軟件設計人員需要按照體系結構設計的基本原則對其進行必要的改進和調整。軟件結構的優(yōu)化應該力求在保證模塊劃分合理的前提下,減少模塊的數(shù)量、提高模塊的內聚性及降低模塊的耦合性,設計出具有良好特性的軟件結構。第73頁,共128頁。5.4 詳細設計概述5.4.1 詳細設計的任務 詳細設計的任務主要有如下五點。 (1) 確定每個模塊的具體算法。根據體系結構設計所建立的系統(tǒng)軟件結構,為劃分的每個模塊確定具體的算法,并選擇

43、某種表達工具將算法的詳細處理過程描述出來。 第74頁,共128頁。 (2) 確定每個模塊的內部數(shù)據結構及數(shù)據庫的物理結構。 為系統(tǒng)中的所有模塊確定并構造算法實現(xiàn)所需的內部數(shù)據結構;根據前一階段確定的數(shù)據庫的邏輯結構,對數(shù)據庫的存儲結構、存取方法等物理結構進行設計。 (3) 確定模塊接口的具體細節(jié)。 按照模塊的功能要求,確定模塊接口的詳細信息,包括模塊之間的接口信息、模塊與系統(tǒng)外部的接口信息及用戶界面等。第75頁,共128頁。 (4) 為每個模塊設計一組測試用例。 由于負責詳細設計的軟件人員對模塊的實現(xiàn)細節(jié)十分清楚,因此由他們在完成詳細設計后提出模塊的測試要求是非常恰當和有效的。 (5) 編寫文

44、檔,參加復審。 詳細設計階段的成果主要以詳細設計說明書的形式保留下來,在通過復審對其進行改進和完善后作為編碼階段進行程序設計的主要依據。第76頁,共128頁。5.4.2 詳細設計可采用的工具 1. 程序流程圖 程序流程圖是最早出現(xiàn)且使用較為廣泛的算法表達工具之一,能夠有效地描述問題求解過程中的程序邏輯結構。程序流程圖中經常使用的基本符號如圖5.17所示。圖5.17 程序流程圖中的基本符號(a) 一般處理框;(b) 輸入/輸出框;(c) 判斷框;(d) 流程線;(e) 起止框第77頁,共128頁。 程序流程圖的主要優(yōu)點在于對程序的控制流程描述直觀、清晰,使用靈活,便于閱讀和掌握,因此在20世紀4

45、0年代末到70年代初被普遍采用。但隨著程序設計方法的發(fā)展,程序流程圖的許多缺點逐漸暴露出來。這些缺點主要體現(xiàn)在以下方面: (1) 程序流程圖中可以隨心所欲地使用流程線,容易造成程序控制結構的混亂,與結構化程序設計的思想相違背。第78頁,共128頁。 (2) 程序流程圖難以描述逐步求精的過程,容易導致程序員過早考慮程序的控制流程,而忽略程序全局結構的設計。 (3) 程序流程圖難以表示系統(tǒng)中的數(shù)據結構。 正是由于程序流程圖存在的這些缺點,越來越多的軟件設計人員放棄了對它的使用,而去選擇其他一些更有利于結構化設計的表達工具,下面所介紹的NS圖和PAD圖就是其中的兩種圖形工具。第79頁,共128頁。

46、2. NS圖 NS圖又稱為盒圖,它是為了保證結構化程序設計而由Nassi和Shneiderman共同提出的一種圖形工具。在NS圖中,所有的程序結構均使用矩形框表示,它可以清晰地表達結構中的嵌套及模塊的層次關系。NS圖中,基本控制結構的表示符號如圖5.18所示。由于NS圖中沒有流程線,不可能隨意轉移控制,因而表達出的程序結構必然符合結構化程序設計的思想,有利于培養(yǎng)軟件設計人員的良好設計風格。但當所描述的程序嵌套層次較多時,NS圖的內層方框會越畫越小,不僅影響可讀性而且不易修改。第80頁,共128頁。圖5.18 NS圖中基本控制結構的表示符號順序結構;(b) 分支結構;(c) 多分支CASE結構;

47、(d) while-do結構;(e) do-until結構;(f) 調用模塊A第81頁,共128頁。 3. PAD圖 PAD(Problem Analysis Diagram,問題分析圖)是繼程序流程圖和NS圖后,由日立公司在20世紀70年代提出的又一種用于詳細設計的圖形表達工具。它只能用于結構化程序的描述。PAD圖采用了易于使用的樹型結構圖形符號,既利于清晰地表達程序結構,又利于修改。PAD圖中所經常使用的基本符號如圖5.19所示。第82頁,共128頁。圖5.19 PAD中基本符號順序結構;(b) 分支結構;(c) 多分支CASE結構;(d) 當型循環(huán);(e);直到型循環(huán);(f) 對s的細化

48、第83頁,共128頁。 PAD圖具有的主要優(yōu)點如下: (1) 使用PAD圖描述的程序結構層次清晰,邏輯結構關系直觀、易讀、易記、易修改。 (2) PAD圖為多種常用高級語言提供了相應的圖形符號, 每種控制語句都與一個專門的圖形符號相對應,易于PAD圖向高級語言源程序轉換。 (3) 支持自頂向下、逐步求精的設計過程。 (4) 既能夠描述程序的邏輯結構,又能夠描述系統(tǒng)中的數(shù)據結構。第84頁,共128頁。圖5.20 三種詳細設計中使用的圖形工具示例采用程序流程圖描述計算應發(fā)工資模塊;(b) 采用NS圖描述計算應發(fā)工資模塊;(c) 采用PAD圖描述計算應發(fā)工資模塊第85頁,共128頁。 4. PDL語

49、言 PDL (Process Design Language)語言即過程設計語言,是一種用于描述程序算法和定義數(shù)據結構的偽代碼。PDL語言的構成與用于描述加工的結構化語言相似,是一種兼有自然語言和結構化程序設計語言語法的“混合型”語言。自然語言的采用使算法的描述靈活自由、清晰易懂,結構化程序設計語言的采用使控制結構的表達具有固定的形式且符合結構化設計的思想。PDL語言與結構化語言的主要區(qū)別在于:由于PDL語言表達的算法是編碼的直接依據,因此其語法結構更加嚴格并且處理過程描述更加具體詳細。第86頁,共128頁。 PDL語言的主要特點如下: (1) 各種定義語句及控制結構的表達都具有嚴格的語法形式

50、,使程序結構、數(shù)據說明等更加清晰。 (2) 提供了數(shù)據說明機制,可用于定義簡單及復雜的數(shù)據結構。 (3) 提供了模塊的定義和調用機制,方便了程序模塊化的表達。第87頁,共128頁。 PDL語言的主要定義語句及基本控制結構的表達如下所示:定義語句 (1) 數(shù)據定義: DECLARE 屬性 變量名, 屬性包括:整型、實型、雙精度型、字符型、指針、數(shù)組及結構等類型。第88頁,共128頁。(2) 模塊定義:PROCEDURE模塊名(參數(shù))RETURNEND第89頁,共128頁。基本控制結構(1) 順序結構:順序結構的語句序列采用自然語言進行描述。語句序列S1語句序列S2語句序列Sn第90頁,共128頁

51、。(2) 選擇結構: IF-ELSE結構IF條件IF條件語句序列S1 或語句序列SELSEENDIF語句序列S2ENDIF第91頁,共128頁。 多分支IF結構IF條件1 語句序列S1ELSEIF條件2 語句序列S2ELSE 語句序列SnENDIF第92頁,共128頁。 CASE結構CASE 表達式 OFCASE 取值1 語句序列S1CASE取值2 語句序列S2ELSE 語句序列SnENDCASE第93頁,共128頁。(3) 循環(huán)結構: FOR結構FOR循環(huán)變量=初值 TO 終值循環(huán)體SEND FOR WHILE結構WHILE 條件循環(huán)體SENDWHILE第94頁,共128頁。 UNTIL結構

52、REPEAT循環(huán)體S UNTIL 條件輸入/輸出語句 輸入語句: GET(輸入變量表) 輸出語句: PUT(輸出變量表)模塊調用語句 CALL 模塊名(參數(shù))第95頁,共128頁。5.4.3 詳細設計的原則 為了能夠使模塊的邏輯描述清晰準確,在詳細設計階段應遵循下列原則。 (1) 將保證程序的清晰度放在首位。 由于結構清晰的程序易于理解和修改,并且會大大減少錯誤發(fā)生的機率,因此除了對執(zhí)行效率有嚴格要求的實時系統(tǒng)外,通常在詳細設計過程中應優(yōu)先考慮程序的清晰度,而將程序的效率放在第二位。第96頁,共128頁。 (2) 設計過程中應采用逐步細化的實現(xiàn)方法。 從體系結構設計到詳細設計,本身就是一個細化

53、模塊描述的過程,由粗到細、分步進行的細化有助于保證所生成程序的可靠性,因此在詳細設計中特別適合采用逐步細化的方法。在對程序進行細化的過程中,還應同時對數(shù)據描述進行細化。第97頁,共128頁。 (3) 選擇適當?shù)谋磉_工具。 在模塊算法確定之后,如何將其精確明了地表達出來,對詳細設計的實現(xiàn)同樣十分重要。上一節(jié)中介紹了幾種較為常用的表達工具,這些工具各有特色。如圖形工具便于設計人員與用戶的交流,而PDL語言便于將詳細設計的結果轉換為源程序。設計人員應根據具體情況選擇適當?shù)谋磉_工具。第98頁,共128頁。5.4.4 詳細設計說明書 詳細設計說明書是詳細設計階段最重要的技術文檔。與體系結構設計說明書相比

54、,前者側重于軟件結構的規(guī)定,后者則側重于對模塊實現(xiàn)具體細節(jié)的描述。詳細設計說明書可以看作是在體系結構設計說明書所確定的系統(tǒng)總體結構的基礎上,對其中各個模塊實現(xiàn)過程的進一步描述和細化。通常,詳細設計說明書中應主要包括以下幾方面的內容:第99頁,共128頁。 (1) 引言:用于說明編寫本說明書的目的、背景,定義所用到的術語和縮略語,以及列出文檔中所引用的參考資料等。 (2) 總體設計:用于給出軟件系統(tǒng)的體系結構圖。 (3) 模塊描述:依次對各個模塊進行詳細的描述,主要包括模塊的功能和性能,實現(xiàn)模塊功能的算法,模塊的輸入及輸出,模塊接口的詳細信息等。第100頁,共128頁。5.5 面向數(shù)據流的詳細設

55、計方法 面向數(shù)據流的詳細設計方法中所采用的關鍵技術主要包括以下兩個方面: (1) 設計過程中采用了自頂向下,逐步細分的方法。面向數(shù)據流的設計,無論是在進行體系結構設計或是進行詳細設計時都采用了自頂向下、逐步細分的方法。在體系結構設計中,通過采用這種方法可以將需要處理的問題分解細化為一個由多個模塊組成的層次結構的軟件系統(tǒng)。第101頁,共128頁。 在詳細設計中,通過采用這種方法可以將系統(tǒng)中的每個模塊逐步分解細化為一系列的具體處理步驟。自頂向下、逐步細分的方法符合人類思維的一般方式,可將一個原本復雜的大問題逐漸分解為若干個易于解決的、簡單的問題,然后各個擊破。由于這種方法在解決問題時有效地控制住了

56、復雜度和難度,因此大大減少了設計過程中出現(xiàn)錯誤的可能,能夠顯著提高軟件開發(fā)的可靠性及縮短軟件開發(fā)的周期。第102頁,共128頁。 所有模塊的實現(xiàn)都只采用單入口、單出口的三種基本控制結構。在面向數(shù)據流的詳細設計中,為了保證程序結構的清晰度,通常限制只能采用三種基本控制結構來構造程序。這三種基本的控制結構分別為順序結構、選擇結構(IF-THEN-ELSE型)和DO-WHILE循環(huán)結構。它們的共同特點是均只有一個入口和一個出口。這三種基本控制結構的流程圖如圖5.21所示。單入口、單出口控制結構的采用,使面向數(shù)據流的詳細設計中的每個程序模塊都能保持清晰的邏輯結構。在實際的軟件開發(fā)工作中,為了方便使用或

57、提高程序效率,有時在面向數(shù)據流的詳細設計中還允許使用直到型循環(huán)結構。第103頁,共128頁。圖5.21 三種基本控制結構的流程圖(a) 順序結構;(b) 選擇結構;(c) DO-WHILE循環(huán)結構第104頁,共128頁。 (2) 采用DO-UNTIL循環(huán)結構和多分支選擇結構(DO-CASE)兩種補充結構。 這兩種補充結構的流程圖如圖5.22所示。只允許使用三種基本控制結構的詳細設計通常被稱為經典的結構程序設計,而加入了兩種補充結構的詳細設計則被稱為擴展的結構程序設計。面向數(shù)據流的詳細設計中并非完全禁止GOTO語句的使用,例如限制在同一控制結構內部的GOTO語句并不會破壞程序的結構化特點。此外,

58、當程序中需要立即從循環(huán)中轉移出來時,在一些結構化語言中提供了相應的實現(xiàn)語句,如C語言中的break語句,這類語句實質上是局限的GOTO語句。允許使用這類語句的程序設計被稱為修正的結構程序設計。第105頁,共128頁。圖5.22 兩種補充結構的流程圖(a) DO-UNTIL循環(huán)結構;(b) 多分支選擇結構第106頁,共128頁。 綜上所述,在面向數(shù)據流的詳細設計方法中,自頂向下、逐步細分保證了程序的可靠性,而基本控制結構的使用則保證了程序的清晰易懂。采用這種詳細設計方法的缺點是,程序結構的清晰往往要以存儲容量的增加和運行效率的降低為代價,不過由于硬件技術的飛速發(fā)展,存儲容量和運行時間已不再是軟件

59、開發(fā)人員需要首要考慮的問題了。第107頁,共128頁。5.6 面向數(shù)據結構的設計方法 面向數(shù)據流的設計方法是以系統(tǒng)中的數(shù)據流作為設計的出發(fā)點,而面向數(shù)據結構的設計方法則是以系統(tǒng)中的數(shù)據結構作為設計的出發(fā)點。由于大多數(shù)目標軟件都是為了解決信息處理問題,并且算法和數(shù)據結構是程序設計中兩個不可分割的側面,算法的結構往往在很大程度上依賴于它要處理的數(shù)據結構,因此可以根據軟件所要處理的信息的數(shù)據結構來設計軟件。例如,通常對重復出現(xiàn)的數(shù)據結構要采用循環(huán)結構來處理,對選擇性的數(shù)據結構采用選擇結構來處理,而對分層的數(shù)據結構往往要采用相對應的分層程序結構來處理。第108頁,共128頁。 面向數(shù)據結構的設計方法和

60、面向數(shù)據流的設計方法雖然出發(fā)點不同,但同樣都遵循結構程序設計和自頂向下、逐步細分的設計原則。面向數(shù)據流的設計分為體系結構設計和詳細設計,體系結構設計的目標是導出系統(tǒng)的軟件結構,詳細設計完成模塊具體實現(xiàn)過程的設計;而面向數(shù)據結構的設計方法并不明確地使用軟件結構的概念,它的目標是得到系統(tǒng)的程序結構,最適合在詳細設計階段使用,只在少數(shù)情況下被獨立地用于小規(guī)模加工系統(tǒng)開發(fā)的系統(tǒng)設計。通??稍谶M行了面向數(shù)據流的體系結構設計后,采用面向數(shù)據結構的設計方法確定軟件結構中部分或全部模塊的邏輯處理過程。正是由于以上原因,本書在介紹面向數(shù)據結構的設計方法時,并未將其分為體系結構設計和詳細設計兩個階段。第109頁,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論