第4章結構化設計_第1頁
第4章結構化設計_第2頁
第4章結構化設計_第3頁
第4章結構化設計_第4頁
第4章結構化設計_第5頁
已閱讀5頁,還剩197頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

4.1結構化設計與結構化分析的關系

4.2軟件設計的概念和原理

4.3模塊獨立

4.4啟發(fā)規(guī)則

4.5表示軟件結構的圖形工具

4.6面向數(shù)據(jù)流的設計方法

4.7人機界面設計

4.8過程設計

4.9過程設計的工具

4.10面向數(shù)據(jù)結構的設計方法第4章結構化設計軟件設計宣言:MitchKapor“什么是設計?設計是你站在兩個世界——技術世界和人類的目標世界——而你嘗試將這兩個世界結合在一起……”羅馬建筑批評家Vitruvius提出的觀念:“設計良好的建筑應該展示出堅固、適用和令人賞心悅目”。堅固是指程序應該不含任何對其功能有障礙的缺陷適用是要程序符合開發(fā)的目標賞心悅目是要求使用程序的體驗應是愉快的軟件設計的組成4.1結構化設計和分析的關系4.2.1模塊化4.2.2抽象4.2.3逐步求精4.2.4信息隱藏4.2軟件設計的概念和原理4.2.1模塊化模塊:是由邊界元素限定的相鄰程序元素的序列,而且有一個總體標識符代表它。模塊化:就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構成一個整體,可以完成指定的功能滿足用戶的需求。模塊化的根據(jù):如果C(P1)>C(P2),顯然E(P1)>E(P2)根據(jù)人類解決一般問題的經(jīng)驗,C(P1+P2)>C(P1)+C(P2)綜上所述,得到下面的不等式E(P1+P2)>E(P1)+E(P2)每個程序都相應地有一個最適當?shù)哪K數(shù)目M,使得系統(tǒng)的開發(fā)成本最小。模塊化和軟件成本評價一種設計方法定義模塊能力的五條標準:模塊可分解性模塊可組裝性模塊可理解性模塊連續(xù)性模塊保護性模塊化的作用:使軟件結構清晰使軟件容易測試和調(diào)試能夠提高軟件的可修改性有助于軟件開發(fā)工程的組織管理4.2.2抽象抽象:現(xiàn)實世界中一定事物、狀態(tài)或過程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來,暫時忽略它們之間的差異,這就是抽象。抽象就是抽出事物本質(zhì)特性而暫時不考慮細節(jié)?!俺橄笫侨祟愄幚韽碗s問題的基本方法之一?!薄狦radyBoach一般抽象過程:處理復雜系統(tǒng)的惟一有效的方法是用層次的方式構造和分析它。一個復雜的動態(tài)系統(tǒng)首先可以用一些高級的抽象概念構造和理解,這些高級概念又可以用一些較低級的概念構造和理解,如此進行下去,直至最低層次的具體元素。例:過程抽象、數(shù)據(jù)抽象軟件工程抽象過程:軟件工程過程的每一步都是對軟件解法的抽象層次的一次精化。在可行性研究階段,軟件作為系統(tǒng)的一個完整部件;在需求分析期間,軟件解法是使用在問題環(huán)境內(nèi)熟悉的方式描述的;當由總體設計向詳細設計過渡時,抽象的程度也就隨之減少了;最后,當源程序寫出來以后,也就達到了抽象的最低層。4.2.3逐步求精逐步求精:為了能集中精力解決主要問題而盡量推遲對問題細節(jié)的考慮。逐步求精是人類解決復雜問題時采用的基本方法,也是許多軟件工程技術的基礎。Miller法則:一個人在任何時候都只能把注意力集中在(7±2)個知識塊上。例:用篩選法求100以內(nèi)的素數(shù)。所謂的篩選法,就是從2到100中去掉2,3,5,7的倍數(shù),剩下的就是100以內(nèi)的素數(shù)。首先按程序功能寫出一個框架main(){

建立2到100的數(shù)組A[],其中A[i]=i;........................1

建立2到10的素數(shù)表B[],存放2到10以內(nèi)的素數(shù);....2

若A[i]=i是B[]中任一數(shù)的倍數(shù),則剔除A[i];.........3

輸出A[]中所有沒有被剔除的數(shù);...............................4}上述框架中每一個加工語句都可進一步細化main(){

/*建立2到100的數(shù)組A[],其中A[i]=i*/……….……1for(i=2;i<=100;i++)A[i]=i;

/*建立2到10的素數(shù)表B[],存放2到10以內(nèi)的素數(shù)*/..2B[1]=2;B[2]=3;B[3]=5;B[4]=7;

/*若A[i]=i是B[]中任一數(shù)的倍數(shù),則剔除A[i]*/.…..3for(j=1;j<=4;j++)檢查A[]所有數(shù)能否被B[j]整除并將其從A[]剔除;..3.1/*輸出A[]中所有沒有被剔除的數(shù)*/………………...4for(i=2;i<=100;i++)若A[i]沒有被剔除,則輸出之………………..….....4.1}繼續(xù)對3.1和4.1細化,直到每個語句都能用程序設計語言來表示4.2.4信息隱藏信息隱藏:應該這樣設計和確定模塊,使得一個模塊內(nèi)包含的信息(過程和數(shù)據(jù))對于不需要這些信息的模塊來說,是不能訪問的?!安灰湍吧苏f話?!弊饔茫骸半[藏”意味著有效的模塊化可以通過定義一組獨立的模塊而實現(xiàn)。絕大多數(shù)數(shù)據(jù)和過程對于軟件的其他部分而言是隱藏的。4.3.1耦合4.3.2內(nèi)聚4.3模塊獨立模塊獨立:希望這樣設計軟件結構,使得每個模塊完成一個相對獨立的特定子功能,并且和其他模塊之間的關系很簡單。模塊獨立的重要性:有效的模塊化(即具有獨立的模塊)的軟件比較容易開發(fā)出來。獨立的模塊比較容易測試和維護。模塊獨立程度的兩個定性標準度量:耦合,衡量不同模塊彼此間互相依賴(連接)的緊密程度。耦合要低,即每個模塊和其他模塊之間的關系要簡單;內(nèi)聚,衡量一個模塊內(nèi)部各個元素彼此結合的緊密程度。內(nèi)聚要高,每個模塊完成一個相對獨立的特定子功能。4.3.1耦合耦合是對一個軟件結構內(nèi)不同模塊之間互連程度的度量。耦合強弱取決于模塊間接口的復雜程度,進入或訪問一個模塊的點,以及通過接口的數(shù)據(jù)。在軟件設計中應該追求盡可能松散耦合的系統(tǒng)。(1)非直接耦合/完全獨立如果兩個模塊中的每一個都能獨立地工作而不需要另一個模塊的存在,那么它們完全獨立。在一個軟件系統(tǒng)中不可能所有模塊之間都沒有任何連接。(2)數(shù)據(jù)耦合如果兩個模塊彼此間通過參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù),那么這種耦合稱為數(shù)據(jù)耦合。評價:系統(tǒng)中至少必須存在這種耦合。數(shù)據(jù)耦合是理想的目標。維護更容易。(3)控制耦合如果兩個模塊彼此間傳遞的信息中有控制信息,這種耦合稱為控制耦合。評價:控制耦合往往是多余的。被調(diào)用的模塊需知道調(diào)用模塊的內(nèi)部結構和邏輯,降低了重用的可能性。(4)特征耦合當把整個數(shù)據(jù)結構作為參數(shù)傳遞而被調(diào)用的模塊只需要使用其中一部分數(shù)據(jù)元素時,就出現(xiàn)了特征耦合。評價:被調(diào)用的模塊可使用的數(shù)據(jù)多于它確實需要的數(shù)據(jù),這將導致對數(shù)據(jù)的訪問失去控制,從而給計算機犯罪提供了機會。無論何時把指針作為參數(shù)進行傳遞,都應該仔細檢查該耦合。(5)公共環(huán)境耦合當兩個或多個模塊通過一個公共數(shù)據(jù)環(huán)境相互作用時,它們之間的耦合稱為公共環(huán)境耦合。公共環(huán)境可以是全程變量、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)、任何存儲介質(zhì)上的文件、物理設備等等。公共環(huán)境耦合的類型:一個模塊往公共環(huán)境送數(shù)據(jù),另一個模塊從公共環(huán)境取數(shù)據(jù)。屬于數(shù)據(jù)耦合的一種形式,是比較松散的耦合。兩個模塊都既往公共環(huán)境送數(shù)據(jù)又從里面取數(shù)據(jù),這種耦合比較緊密,介于數(shù)據(jù)耦合和控制耦合之間。例:while(global_bariable==0){if(argument_xyz>25)module_3();elsemodule_4();}評價:與結構化編程矛盾,生成的代碼完全不可讀。如果在一個模塊中對一個全局變量的聲明進行修改,必須修改能夠訪問該全局變量的每一個模塊。公共環(huán)境耦合的模塊難于重用,必須提供一個全局變量的清單。即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共環(huán)境耦合的實例數(shù)也會變化非常大。潛在危險很大。模塊暴露出必需要更多的數(shù)據(jù),難以控制數(shù)據(jù)存取,而且會導致計算機犯罪。有些情況下公共環(huán)境耦合更好。(6)內(nèi)容耦合如果出現(xiàn)下列情況之一,兩個模塊間就發(fā)生了內(nèi)容耦合:一個模塊訪問另一個模塊的內(nèi)部數(shù)據(jù);一個模塊不通過正常入口轉到另一個模塊的內(nèi)部;兩個模塊有一部分程序代碼重疊;一個模塊有多個入口。耦合的設計原則:盡量使用數(shù)據(jù)耦合少用控制耦合和特征耦合限制公共環(huán)境耦合的范圍完全不用內(nèi)容耦合4.3.2內(nèi)聚內(nèi)聚標志一個模塊內(nèi)各個元素彼此結合的緊密程度,它是信息隱藏和局部化概念的自然擴展。簡單地說,理想內(nèi)聚的模塊只做一件事情。設計時應該力求做到高內(nèi)聚,通常中等程度的內(nèi)聚也是可以采用的,而且效果和高內(nèi)聚相差不多;但是,低內(nèi)聚不要使用。內(nèi)聚和耦合是密切相關的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。實踐表明內(nèi)聚更重要,應該把更多注意力集中到提高模塊的內(nèi)聚程度上。(1)偶然內(nèi)聚如果一個模塊完成一組任務,這些任務彼此間即使有關系,關系也是很松散的,就叫做偶然內(nèi)聚。MA=B+CGETCHERIFR=5THENS=1評價:模塊內(nèi)各元素之間沒有實質(zhì)性聯(lián)系,很可能在一種應用場合需要修改這個模塊,在另一種應用場合又不允許這種修改,從而陷入困境;可理解性差,可維護性產(chǎn)生退化;模塊是不可重用的。解決方案:將模塊分成更小的模塊,每個小模塊執(zhí)行一個操作。(2)邏輯內(nèi)聚如果一個模塊完成的任務在邏輯上屬于相同或相似的一類,則稱為邏輯內(nèi)聚。new_operationfunction_code=7;new_operation(function_code,dummy1,dummy2,dummy3);//dummy1、dummy2和dummy3是偽變量,//如果function_code=7則不使用它們評價:接口難以理解,造成整體上不易理解;完成多個操作的代碼互相糾纏在一起,即使局部功能的修改有時也會影響全局,導致嚴重的維護問題;難以重用。解決方案:模塊分解。(3)時間內(nèi)聚如果一個模塊包含的任務必須在同一段時間內(nèi)執(zhí)行,就叫時間內(nèi)聚。執(zhí)行初始化打開舊主文件、新主文件、事務文件和打印文件;初始化銷售地區(qū)表;讀第一條事務記錄和第一條舊主文件記錄;評價:時間關系在一定程度上反映了程序某些實質(zhì),所以時間內(nèi)聚比邏輯內(nèi)聚好一些。模塊內(nèi)操作之間的關系很弱,與其他模塊的操作卻有很強的關聯(lián)。時間內(nèi)聚的模塊不太可能重用。(4)過程內(nèi)聚如果一個模塊內(nèi)的處理元素是相關的,而且必須以特定次序執(zhí)行,則稱為過程內(nèi)聚。使用程序流程圖作為工具設計軟件時,常常通過研究流程圖確定模塊的劃分,這樣得到的往往是過程內(nèi)聚的模塊。評價:比時間內(nèi)聚好,至少操作之間是過程關聯(lián)的。仍是弱連接,不太可能重用模塊。解決方案:分割為單獨的模塊,每個模塊執(zhí)行一個操作。(5)通信內(nèi)聚如果模塊中所有元素都使用同一個輸入數(shù)據(jù)和(或)產(chǎn)生同一個輸出數(shù)據(jù),則稱為通信內(nèi)聚。即在同一個數(shù)據(jù)結構上操作。評價:模塊中各操作緊密相連,比過程內(nèi)聚更好。不能重用。解決方案:分成多個模塊,每個模塊執(zhí)行一個操作。(6)順序內(nèi)聚如果一個模塊內(nèi)的處理元素和同一個功能密切相關,而且這些處理必須順序執(zhí)行,則稱為順序內(nèi)聚。評價:根據(jù)數(shù)據(jù)流圖劃分模塊時,通常得到順序內(nèi)聚的模塊,這種模塊彼此間的連接往往比較簡單。(7)功能內(nèi)聚如果模塊內(nèi)所有處理元素屬于一個整體,完成一個單一的功能,則稱為功能內(nèi)聚。功能內(nèi)聚是最高程度的內(nèi)聚。評價:模塊可重用,應盡可能重用;可隔離錯誤,維護更容易;擴充產(chǎn)品功能時更容易。七種內(nèi)聚的優(yōu)劣評分結果:程度內(nèi)聚類型分數(shù)高內(nèi)聚功能內(nèi)聚10分順序內(nèi)聚9分中內(nèi)聚通信內(nèi)聚7分過程內(nèi)聚5分低內(nèi)聚時間內(nèi)聚3分邏輯內(nèi)聚1分偶然內(nèi)聚0分內(nèi)聚的設計原則:設計時力爭做到高內(nèi)聚并且能夠辨認出低內(nèi)聚的模塊有能力通過修改設計提高模塊的內(nèi)聚程度降低模塊間的耦合程度,從而獲得較高的模塊獨立性4.4啟發(fā)規(guī)則1.改進軟件結構提高模塊獨立性通過模塊分解或合并,降低耦合提高內(nèi)聚。兩個方面:

模塊功能完善化。一個完整的模塊包含:執(zhí)行規(guī)定的功能的部分出錯處理的部分返回一個“結束標志”消除重復功能,改善軟件結構。完全相似局部相似2.模塊規(guī)模應該適中一個模塊的規(guī)模不應過大,最好能寫在一頁紙內(nèi)。通常規(guī)定50~100行語句,最多不超過500行。數(shù)字只能作為參考,根本問題是要保證模塊的獨立性。過大的模塊往往是由于分解不充分,但是進一步分解必須符合問題結構,一般說來,分解后不應該降低模塊獨立性。過小的模塊開銷大于有效操作,而且模塊數(shù)目過多將使系統(tǒng)接口復雜。3.深度、寬度、扇出和扇入都應適當深度:軟件結構中控制的層數(shù),它往往能粗略地標志一個系統(tǒng)的大小和復雜程度。寬度:軟件結構內(nèi)同一個層次上的模塊總數(shù)的最大值。扇出:一個模塊直接控制(調(diào)用)的模塊數(shù)目。扇入:有多少個上級模塊直接調(diào)用它。4.模塊的作用域應該在控制域之內(nèi)模塊的作用域:定義為受該模塊內(nèi)一個判定影響的所有模塊的集合。模塊的控制域:是這個模塊本身以及所有直接或間接從屬于它的模塊的集合。在一個設計得很好的系統(tǒng)中,所有受判定影響的模塊應該都從屬于做出判定的那個模塊,最好局限于做出判定的那個模塊本身及它的直屬下級模塊。解決方案:把模塊A中的判定移到模塊M中;把模塊G移到模塊A下面,作為他的下級模塊。5.力爭降低模塊接口的復雜程度模塊接口復雜是軟件發(fā)生錯誤的一個主要原因。應該仔細設計模塊接口,使得信息傳遞簡單并且和模塊的功能一致。例:解一元二次方程的函數(shù)QUAD_ROOT(TBL,X)其中數(shù)組TBL傳送方程的系數(shù)數(shù)組X送回求得的根QUAD_ROOT(A,B,C,ROOT1,ROOT2)6.設計單入口單出口的模塊警告軟件工程師不要使模塊間出現(xiàn)內(nèi)容耦合。當從頂部進入模塊并且從底部退出來時,軟件是比較容易理解的,因此也是比較容易維護的。7.模塊功能應該可以預測模塊的功能應該能夠預測,但也要防止模塊功能過分局限。功能可預測:如果一個模塊可以當做一個黑盒子,只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,這個模塊的功能就是可以預測的。4.5.1層次圖和HIPO圖4.5.2結構圖4.5表示軟件結構的圖形工具4.5.1層次圖和HIPO圖層次圖(H圖)層次圖用來描繪軟件的層次結構。很適于在自頂向下設計軟件的過程中使用。HIPO圖美國IBM公司發(fā)明的“層次圖+輸入/處理/輸出圖”的英文縮寫。和H圖中每個方框相對應,應該有一張IPO圖描繪這個方框代表的模塊的處理過程。正文加工系統(tǒng)的層次圖加編號的層次圖主文件更新處理的IPO圖改進的IPO圖IPO表系統(tǒng):定貨系統(tǒng)作者:模塊:處理事務日期:編號:1.0被調(diào)用:定貨系統(tǒng)調(diào)用:接受事務更新庫存清單處理定貨輸入:事務輸出:定貨信息

庫存清單處理:(用過程描述工具描述本模塊的算法,如PAD圖、N-S圖、偽代碼等)局部數(shù)據(jù)元素:注釋:4.5.2結構圖Yourdon提出的結構圖是進行軟件結構設計的另一個有力工具。結構圖和層次圖類似,也是描繪軟件結構的圖形工具?;痉枺悍娇虼硪粋€模塊;方框之間的直線表示模塊的調(diào)用關系;尾部是空心圓箭頭表示傳遞的是數(shù)據(jù);尾部實心圓箭頭表示傳遞的是控制信息。附加符號:選擇調(diào)用:判定為真時調(diào)用A,為假時調(diào)用B。循環(huán)調(diào)用:模塊M循環(huán)調(diào)用模塊A、B、C。層次圖和結構圖并不嚴格表示模塊的調(diào)用次序,多數(shù)人習慣按調(diào)用次序從左到右畫模塊;層次圖和結構圖并不指明何時調(diào)用下層模塊;層次圖和結構圖只表明一個模塊調(diào)用那些模塊,沒有表示模塊內(nèi)還有沒有其他成分;通常用層次圖作為描繪軟件結構的文檔;由層次圖導出結構圖的過程,可以作為檢查設計正確性和評價模塊獨立性的好方法。4.6.1概念4.6.2變換分析4.6.3事務分析4.6.4設計優(yōu)化4.6面向數(shù)據(jù)流的設計方法4.6.1概念面向數(shù)據(jù)流的設計方法把信息流映射成軟件結構,信息流的類型決定了映射的方法。信息流有兩種類型:變換流事務流1.變換流信息沿輸入通路進入系統(tǒng),由外部形式變換成內(nèi)部形式,進入系統(tǒng)的信息通過變換中心,經(jīng)加工處理以后再沿輸出通路變換成外部形式離開軟件系統(tǒng)。2.事務流數(shù)據(jù)沿輸入通路到達一個處理T,T根據(jù)輸入數(shù)據(jù)類型在若干個動作序列中選出一個來執(zhí)行。處理T稱為事務中心,它完成下述任務:接收輸入數(shù)據(jù);分析每個事務以確定它的類型;根據(jù)事務類型選取一條活動通路。3.設計過程4.6.2變換分析(1)復查基本系統(tǒng)模型確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實際。(2)復查并精化數(shù)據(jù)流圖對需求分析階段得出的數(shù)據(jù)流圖認真復查,并且在必要時進行精化。不僅要確保數(shù)據(jù)流圖給出了目標系統(tǒng)的正確的邏輯模型,而且應該使數(shù)據(jù)流圖中每個處理都代表一個規(guī)模適中相對獨立的子功能。(3)確定數(shù)據(jù)流圖具有變換特性還是事務特性系統(tǒng)中的所有信息流都可以認為是變換流,但是,當遇到有明顯事務特性的信息流時,建議采用事務分析方法進行設計。確定數(shù)據(jù)流的全局特性和局部特性。(4)確定輸入流和輸出流的邊界,從而孤立出變換中心輸入流和輸出流的邊界和對它們的解釋有關,不同設計人員可能會在流內(nèi)選取稍微不同的點作為邊界的位置。(5)完成“第一級分解”位于軟件結構最頂層的控制模塊Cm協(xié)調(diào)下述從屬的控制功能:輸入信息處理控制模塊Ca,協(xié)調(diào)對所有輸入數(shù)據(jù)的接收;變換中心控制模塊Ct,管理對內(nèi)部形式的數(shù)據(jù)的所有操作;輸出信息處理控制模塊Ce,協(xié)調(diào)輸出信息的產(chǎn)生過程。第一級分解方法(6)完成“第二級分解”處理映射成軟件結構中一個適當?shù)哪K。完成第二級分解的方法是:從變換中心的邊界開始沿著輸入通路向外移動,把輸入通路中每個處理映射成軟件結構中Ca控制下的一個低層模塊;沿輸出通路向外移動,把輸出通路中每個處理映射成直接或間接受模塊Ce控制的一個低層模塊;把變換中心內(nèi)每個處理映射成受Ct控制的模塊。第二級分解方法(7)使用設計度量和啟發(fā)式規(guī)則對第一次分割得到的軟件結構進一步精化為了產(chǎn)生合理的分解,得到盡可能高的內(nèi)聚、盡可能松散的耦合,為了得到一個易于實現(xiàn)、易于測試和易于維護的軟件結構,應該對初步分割得到的模塊進行再分解或合并。4.6.3事務分析雖然在任何情況下都可以使用變換分析方法設計軟件結構,但是在數(shù)據(jù)流具有明顯的事務特點時,也就是有一個明顯的“發(fā)射中心”(事務中心)時,還是以采用事務分析方法為宜。事務分析的設計步驟和變換分析的設計步驟大部分相同或類似,主要差別僅在于由數(shù)據(jù)流圖到軟件結構的映射方法不同:由事務流映射成的軟件結構包括一個接收分支和一個發(fā)送分支;映射出接收分支結構的方法和變換分析映射出輸入結構的方法很相像,即從事務中心的邊界開始,把沿著接收流通路的處理映射成模塊;發(fā)送分支的結構包含一個調(diào)度模塊,它控制下層的所有活動模塊;然后把數(shù)據(jù)流圖中的每個活動流通路映射成與它的流特征相對應的結構。例1:設計一個產(chǎn)品,它將一個文件名作為輸入,并返回文件中的字數(shù)。第一級分解第二級分解精化例2:汽車數(shù)字儀表板通過模數(shù)轉換實現(xiàn)傳感器和微處理機接口;在發(fā)光二極管面板上顯示數(shù)據(jù);指示每小時英里數(shù)(mph),行駛的里程,每加侖油行駛的英里數(shù)(mpg)等等;指示加速或減速;超速警告:如果車速超過55英里/小時,則發(fā)出超速警告鈴聲。第一級分解第二級分解精化例3:自動柜員機顧客插入磁卡,輸入密碼,然后執(zhí)行相應動作,包括向支票、存折或信用卡賬戶存款、提款或查詢余額等。設計上分成兩部分:分析器和調(diào)度器。分析器確定事務類型并將信息送到分配器,由調(diào)度器進行事務處理。例4:一個公司的銷售管理系統(tǒng)總結:一般說來,如果數(shù)據(jù)流不具有顯著的事務特點,最好使用變換分析;反之,如具有明顯的事務中心,則應該采用事務分析技術。機械地遵循變換分析或事務分析的映射規(guī)則,可能會得到一些不必要的控制模塊,如果它們確實用處不大,那么可以而且應該把它們合并。如果一個控制模塊功能過分復雜,則應該分解為兩個或多個控制模塊,或者增加中間層次控制模塊。4.6.4設計優(yōu)化設計優(yōu)化應該力求做到在有效的模塊化的前提下使用最少量的模塊,以及在能夠滿足信息要求的前提下使用最簡單的數(shù)據(jù)結構。對于時間是決定性因素的應用場合,可能有必要在詳細設計階段,也可能在編寫程序的過程中進行優(yōu)化。程序中相對說比較小的部分,通常占用全部處理時間的大部分。“先使它能工作,然后再使它快起來。”4.7.1人機界面設計問題4.7.2人機界面設計過程4.7.3人機界面設計指南4.7人機界面設計人機界面設計是接口設計的重要組成部分。人機界面的設計質(zhì)量直接影響用戶對軟件產(chǎn)品的評價,從而影響軟件產(chǎn)品的競爭力和壽命,必須對人機界面設計給予足夠重視。三條“黃金規(guī)則”:置用戶于控制之下減少用戶記憶負擔保持界面一致4.7.1人機界面設計問題系統(tǒng)響應時間用戶幫助設施出錯信息處理命令交互1.系統(tǒng)響應時間系統(tǒng)響應時間指從用戶完成某個控制動作,到軟件給出預期的響應之間的這段時間。系統(tǒng)響應時間有兩個重要屬性:長度:如果系統(tǒng)響應時間過長,用戶就會感到緊張和沮喪;系統(tǒng)響應時間過短會迫使用戶加快操作節(jié)奏,從而可能會犯錯誤。易變性:指系統(tǒng)響應時間相對于平均響應時間的偏差,即使系統(tǒng)響應時間較長,響應時間易變性低也有助于用戶建立起穩(wěn)定的工作節(jié)奏。2.用戶幫助設施大多數(shù)現(xiàn)代軟件都提供聯(lián)機幫助設施,用戶無須離開用戶界面就能解決自己的問題。常見的幫助設施:集成的幫助設施,設計在軟件里面,它對用戶工作內(nèi)容是敏感的,用戶可以從與剛剛完成的操作有關的主題中選擇一個請求幫助。附加的幫助設施,是在系統(tǒng)建成后再添加到軟件中的,實際上是一種查詢能力有限的聯(lián)機用戶手冊。集成的幫助設施優(yōu)于附加的幫助設施。3.出錯信息處理出錯信息和警告信息,是出現(xiàn)問題時交互式系統(tǒng)給出的“壞消息”。出錯信息應該具有的屬性:信息應該用用戶可以理解的術語描述問題。信息應該提供有助于從錯誤中恢復的建設性意見。信息應該指出錯誤可能導致哪些負面后果。信息應該伴隨著聽覺上或視覺上的提示。信息不能帶有指責色彩。4.命令交互多數(shù)情況下,用戶既可以從菜單中選擇軟件功能,也可以通過鍵盤命令序列調(diào)用軟件功能。在理想的情況下,所有應用軟件都有一致的命令使用方法。4.7.2人機界面設計過程用戶界面設計是一個迭代的過程,也就是說,通常先創(chuàng)建設計模型,再用原型實現(xiàn)這個設計模型,并由用戶試用和評估,然后根據(jù)用戶意見進行修改。為了支持上述迭代過程,各種用于界面設計和原型開發(fā)的軟件工具應運而生。這些工具被稱為用戶界面工具箱或用戶界面開發(fā)系統(tǒng)。4.7.3人機界面設計指南一般交互指南信息顯示指南數(shù)據(jù)輸入指南顏色使用指南:一個窗口中不應該出現(xiàn)5種以上不同色系的顏色。如果一個圖表中僅包含幾種顏色,背景應該選用其中一種顏色的補色:如果一幅圖中包含許多顏色,背景應該選用一種中性的顏色,如灰色。如果兩個相鄰的顏色不是特別和諧,可以用細的黑色邊框將它們分開。背景和字體顏色應選用對比度強的顏色。顏色裝飾性的使用服從功能性的使用。區(qū)域的顏色實際上能夠影響他的觀察尺寸。使用高飽和度(亮)顏色的大區(qū)域是不明智的。紅色和藍色具有最強的深度不一致的效果,紅色看起來近,藍色看起來遠。黃月亮和藍月亮懷特效應藍寶石之光斯特魯普效應4.8過程設計過程設計應該在數(shù)據(jù)設計、體系結構設計和接口設計完成之后進行,它是詳細設計階段應該完成的主要任務。過程設計的任務還不是具體地編寫程序,而是要設計出程序的“藍圖”,以后程序員將根據(jù)這個藍圖寫出實際的程序代碼。結構程序設計是實現(xiàn)上述目標的關鍵技術,因此是過程設計的邏輯基礎。結構程序設計的經(jīng)典定義:如果一個程序的代碼塊僅通過順序、選擇和循環(huán)這三種基本控制結構進行連接,并且每個代碼塊只有一個入口和一個出口,則稱這個程序是結構化的。補充:結構程序設計是盡可能少用GOTO語句的程序設計方法。最好僅在檢測出錯誤時才使用GOTO語句。而且應該總是使用前向GOTO語句。三種基本控制結構其他常用的控制結構經(jīng)典的結構程序設計:只允許使用順序、IF-THEN-ELSE型分支和DO-WHILE型循環(huán)這3種基本控制結構。擴展的結構程序設計:如果除了上述三種基本控制結構之外,還允許使用DO-CASE多分支結構和DO-UNTIL循環(huán)結構。修正的結構程序設計:再加上允許使用LEAVE(或BREAK)結構。4.9.1程序流程圖4.9.2盒圖(N-S圖)4.9.3PAD圖4.9.4判定表4.9.5判定樹4.9.6過程設計語言4.9過程設計的工具4.9.1程序流程圖程序流程圖又稱為程序框圖,是歷史最悠久、使用最廣泛的描述過程設計的方法。它的主要優(yōu)點是對控制流程的描繪很直觀,便于初學者掌握。程序流程圖歷史悠久,至今仍在廣泛使用著。程序流程圖中使用的符號程序流程圖的主要缺點:程序流程圖本質(zhì)上不是逐步求精的好工具,它誘使程序員過早地考慮程序的控制流程,而不去考慮程序的全局結構。程序流程圖中用箭頭代表控制流,因此程序員不受任何約束,可以完全不顧結構程序設計的精神,隨意轉移控制。程序流程圖不易表示數(shù)據(jù)結構。4.9.2盒圖(N-S圖)Nassi和Shneiderman提出了盒圖,又稱N-S圖。N-S圖的特點:功能域明確。不可能任意轉移控制。容易確定局部和全程數(shù)據(jù)的作用域。容易表現(xiàn)嵌套關系,也可以表示模塊的層次結構。盒圖的基本符號4.9.3PAD圖PAD是問題分析圖(problemanalysisdiagram)的英文縮寫,1973年由日本日立公司發(fā)明以后,已得到一定程度的推廣。它用二維樹形結構來表示程序的控制流,將這種圖翻譯成程序代碼比較容易。PAD圖的基本符號PAD圖的優(yōu)點:使用表示結構化控制結構的PAD符號設計出來的程序必然是結構化程序。PAD圖所描繪的程序結構十分清晰。PAD圖表現(xiàn)程序邏輯易讀、易懂、易記。容易將PAD圖轉換成高級語言源程序,這種轉換可用軟件工具自動完成。即可表示程序邏輯,也可描繪數(shù)據(jù)結構。PAD圖符號支持自頂向下、逐步求精方法的使用。例:某程序流程圖如右圖所示,請分別用N-S圖和PAD圖表示。aUNTILx8jbiceWHILEx5dx1x2x3x4fghUNTILx7x6xi=PAD圖x8ajx1bTFfx6TFx7ighCASExix2x4x3x5cdeN-S圖4.9.4判定表當算法中包含多重嵌套的條件選擇時,用判定表能夠清晰地表示復雜的條件組合與應做的動作之間的對應關系。一張判定表由4部分組成:所有條件條件組合矩陣所有動作條件組合對應的動作例:假設某航空公司規(guī)定,乘客可以免費托運重量不超過30kg的行李。當行李重量超過30kg時,對頭等艙的國內(nèi)乘客超重部分每公斤收費4元,對其他艙的國內(nèi)乘客超重部分每公斤收費6元。外國乘客超重部分每公斤收費比國內(nèi)乘客多一倍,殘疾乘客超重部分每公斤收費比正常乘客少一半。用判定表表示計算行李費的算法123456789國內(nèi)乘客TTTTFFFF頭等艙TFTFTFTF殘疾乘客FFTTFFTT行李重量W≤30TFFFFFFFF免費√(W-30)×2√(W-30)×3√(W-30)×4√√√(W-30)×6√(W-30)×8√(W-30)×12√---判定表的優(yōu)點:能清晰地表示復雜的條件組合與應做的動作之間的對應關系。判定表的缺點:判定表的含義不是一眼就能看出來的,初次接觸這種工具的人理解它需要有一個簡短的學習過程。當數(shù)據(jù)元素的值多于兩個時,判定表的簡潔程度也將下降。4.9.5判定樹判定樹是判定表的變種,也能清晰地表示復雜的條件組合與應做的動作之間的對應關系。多年來判定樹一直受到人們的重視,是一種比較常用的系統(tǒng)分析和設計的工具。用判定樹表示計算行李費的算法判定樹的優(yōu)點:它的形式簡單,一眼就可以看出其含義,因此易于掌握和使用。判定樹的缺點:簡潔性不如判定表,數(shù)據(jù)元素的同一個值往往要重復寫多遍,而且越接近樹的葉端重復次數(shù)越多。畫判定樹時分枝的次序可能對最終畫出的判定樹的簡潔程度有較大影響。例:某校制定了教師的講課課時津貼標準。對于各種性質(zhì)的講座,無論教師是什么職稱,每課時津貼費一律是50元;對于一般的授課,則根據(jù)教師的職稱來決定每課時津貼費:教授30元,副教授25元,講師20元,助教15元。請分別用判定表和判定樹表示津貼標準?!?5√20√25√30√50FFFFT講座TFFF助教FTFF講師FFTF副教授FFFT教授54321----判定表課時津貼一般授課講座教授副教授講師助教3025201550判定樹4.9.6過程設計語言過程設計語言(PDL)也稱為偽碼,它是用正文形式表示數(shù)據(jù)和處理過程的設計工具。PDL具有嚴格的關鍵字外部語法,用于定義控制結構和數(shù)據(jù)結構;另一方面,PDL表示實際操作和條件的內(nèi)部語法通常又是靈活自由的,可以適應各種工程項目的需要。PDL是一種“混雜”語言,它使用一種語言的詞匯,同時卻使用另一種語言的語法。偽碼的基本控制結構:簡單陳述句:避免復合語句。判定:IF_THEN_ELSE或CASE_OF結構。選擇:WHILE_DO或REPEAT_UNTIL結構。例:檢查訂貨單IF

客戶訂貨金額超過5000元THEN

IF

客戶拖延未還賒欠錢款超過60天THEN

在償還欠款前不予批準

ELSE(拖延未還賒欠錢款不超過60天)

發(fā)批準書,發(fā)貨單

ENDIFELSE(客戶訂貨金額未超過5000元)

IF

客戶拖延未還賒欠錢款超過60天THEN

發(fā)批準書,發(fā)貨單,并發(fā)催款通知書

ELSE(拖延未還賒欠錢款不超過60天)

發(fā)批準書,發(fā)貨單

ENDIFENDIFPDL的特點:關鍵字的固定語法,它提供了結構化控制結構、數(shù)據(jù)說明和模塊化的特點。自然語言的自由語法,它描述處理特點。數(shù)據(jù)說明的手段。應該既包括簡單的數(shù)據(jù)結構,又包括復雜的數(shù)據(jù)結構。模塊定義和調(diào)用的技術,應該提供各種接口描述模式。PDL的優(yōu)點:可以作為注釋直接插在源程序中間。有助于保持文檔和程序的一致性,提高了文檔的質(zhì)量。可以使用普通的正文編輯程序或文字處理系統(tǒng),很方便地完成PDL的書寫和編輯工作。已經(jīng)有自動處理程序存在,而且可以自動由PDL生成程序代碼。PDL的缺點:不如圖形工具形象直觀,描述復雜的條件組合與動作間的對應關系時,不如判定表清晰簡單。4.10.1Jackson圖4.10.2改進的Jackson圖4.10.3Jackson方法4.10面向數(shù)據(jù)結構的設計方法數(shù)據(jù)結構既影響程序的結構又影響程序的處理過程重復出現(xiàn)的數(shù)據(jù)通常由具有循環(huán)控制結構的程序來處理選擇數(shù)據(jù)要用帶有分支控制結構的程序來處理層次的數(shù)據(jù)組織通常和使用這些數(shù)據(jù)的程序的層次結構十分相似。面向數(shù)據(jù)結構的設計方法的最終目標是得出對程序處理過程的描述。4.10.1Jackson圖數(shù)據(jù)結構中數(shù)據(jù)元素彼此間的邏輯關系:順序結構,順序結構的數(shù)據(jù)由一個或多個數(shù)據(jù)元素組成,每個元素按確定次序出現(xiàn)一次。選擇結構,選擇結構的數(shù)據(jù)包含兩個或多個數(shù)據(jù)元素,每次使用這個數(shù)據(jù)時按一定條件從這些數(shù)據(jù)元素中選擇一個。重復結構,重復結構的數(shù)據(jù),根據(jù)使用時的條件由一個數(shù)據(jù)元素出現(xiàn)零次或多次構成。A由B、C、D3個元素順序組成根據(jù)條件A是B或C或D中的某一個A由B出現(xiàn)N次(N≥0)組成Jackson圖的優(yōu)點:便于表示層次結構,而且是對結構進行自頂向下分解的有力工具;形象直觀可讀性好;既能表示數(shù)據(jù)結構也能表示程序結構。Jackson圖的缺點:表示選擇或重復結構時,選擇條件或循環(huán)結束條件不能直接在圖上表示出來,影響了圖的表達能力,也不易直接把圖翻譯成程序;框間連線為斜線,不易在行式打印機上輸出。4.10.2改進的Jackson圖Jackson圖和層次圖的區(qū)別:Jackson圖層次圖作用①描繪數(shù)據(jù)結構②描繪程序結構描繪軟件結構矩形框①數(shù)據(jù)元素②幾個語句模塊連線組成關系調(diào)用關系4.10.3Jackson方法Jackson結構程序設計方法由5個步驟組成:(1)分析并確定輸入數(shù)據(jù)和輸出數(shù)據(jù)的邏輯結構,用Jackson圖描繪數(shù)據(jù)結構。(2)找出輸入數(shù)據(jù)結構和輸出數(shù)據(jù)結構中有對應關系的數(shù)據(jù)單元。所謂有對應關系是指有直接的因果關系,在程序中可以同時處理的數(shù)據(jù)單元(對于重復出現(xiàn)的數(shù)據(jù)單元必須重復的次序和次數(shù)都相同才可能有對應關系)。(3)用下述規(guī)則從描繪數(shù)據(jù)結構的Jackson圖導出描繪程序結構的Jackson圖:第一,為每對有對應關系的數(shù)據(jù)單元,按照它們在數(shù)據(jù)結構圖中的層次在程序結構圖的相應層次畫一個處理框(層次不同時與圖中層次低的那個對應);第二,根據(jù)輸入數(shù)據(jù)結構中剩余的每個數(shù)據(jù)單元所處的層次,在程序結構圖的相應層次分別為它們畫上對應的處理框;第三,根據(jù)輸出數(shù)據(jù)結構中剩余的每個數(shù)據(jù)單元所處的層次,在程序結構圖的相應層次分別為它們畫上對應的處理框。改進的Jackson圖規(guī)定在構成順序結構的元素中不能有重復出現(xiàn)或選擇出現(xiàn)的元素,因此可能需要增加中間層次的處理框。(4)列出所有操作和條件(包括分支條件和循環(huán)結束條件),并把它們分配到程序結構圖的適當位置。(5)用偽碼表示程序。順序結構:AseqBCDAend選擇結構:Aselectcond1BAorcond2CAorcond3DAend循環(huán)結構:Aiteruntil(或while)condBAend例1:一個正文文件由若干個記錄組成,每個記錄是一個字符串。要求統(tǒng)計每個記錄中空格字符的個數(shù),以及文件中空格字符的總個數(shù)。要求的輸出數(shù)據(jù)格式是,每復制一行輸入字符串之后,另起一行印出這個字符串中的空格數(shù),最后印出文件中空格的總個數(shù)。設計步驟如下:(1)用Jackson圖描繪的輸入輸出數(shù)據(jù)結構。(2)分析確定在輸入數(shù)據(jù)結構和輸出數(shù)據(jù)結構中有對應關系的數(shù)據(jù)單元。(3)從數(shù)據(jù)結構圖導出程序結構圖。(4)列出所有操作和條件,并且把它們分配到程序結構圖的適當位置。(5)用偽碼表示程序處理過程。例2:高考后將考生的基本情況文件(簡稱考生情況文件)和考生高考成績文件(簡稱考分文件)合并成一個新文件(簡稱考生新文件)??忌厩闆r文件中的考生記錄的內(nèi)容包括:準考證號、姓名、通信地址。

溫馨提示

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

評論

0/150

提交評論