版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
4.1結(jié)構(gòu)化設(shè)計(jì)與結(jié)構(gòu)化分析的關(guān)系
4.2軟件設(shè)計(jì)的概念和原理
4.3模塊獨(dú)立
4.4啟發(fā)規(guī)則
4.5表示軟件結(jié)構(gòu)的圖形工具
4.6面向數(shù)據(jù)流的設(shè)計(jì)方法
4.7人機(jī)界面設(shè)計(jì)
4.8過(guò)程設(shè)計(jì)
4.9過(guò)程設(shè)計(jì)的工具
4.10面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法第4章結(jié)構(gòu)化設(shè)計(jì)軟件設(shè)計(jì)宣言:MitchKapor“什么是設(shè)計(jì)?設(shè)計(jì)是你站在兩個(gè)世界——技術(shù)世界和人類的目標(biāo)世界——而你嘗試將這兩個(gè)世界結(jié)合在一起……”羅馬建筑批評(píng)家Vitruvius提出的觀念:“設(shè)計(jì)良好的建筑應(yīng)該展示出堅(jiān)固、適用和令人賞心悅目”。堅(jiān)固是指程序應(yīng)該不含任何對(duì)其功能有障礙的缺陷適用是要程序符合開發(fā)的目標(biāo)賞心悅目是要求使用程序的體驗(yàn)應(yīng)是愉快的軟件設(shè)計(jì)的組成4.1結(jié)構(gòu)化設(shè)計(jì)和分析的關(guān)系4.2.1模塊化4.2.2抽象4.2.3逐步求精4.2.4信息隱藏4.2軟件設(shè)計(jì)的概念和原理4.2.1模塊化模塊:是由邊界元素限定的相鄰程序元素的序列,而且有一個(gè)總體標(biāo)識(shí)符代表它。模塊化:就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問(wèn)的模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集成起來(lái)構(gòu)成一個(gè)整體,可以完成指定的功能滿足用戶的需求。模塊化的根據(jù):如果C(P1)>C(P2),顯然E(P1)>E(P2)根據(jù)人類解決一般問(wèn)題的經(jīng)驗(yàn),C(P1+P2)>C(P1)+C(P2)綜上所述,得到下面的不等式E(P1+P2)>E(P1)+E(P2)每個(gè)程序都相應(yīng)地有一個(gè)最適當(dāng)?shù)哪K數(shù)目M,使得系統(tǒng)的開發(fā)成本最小。模塊化和軟件成本評(píng)價(jià)一種設(shè)計(jì)方法定義模塊能力的五條標(biāo)準(zhǔn):模塊可分解性模塊可組裝性模塊可理解性模塊連續(xù)性模塊保護(hù)性模塊化的作用:使軟件結(jié)構(gòu)清晰使軟件容易測(cè)試和調(diào)試能夠提高軟件的可修改性有助于軟件開發(fā)工程的組織管理4.2.2抽象抽象:現(xiàn)實(shí)世界中一定事物、狀態(tài)或過(guò)程之間總存在著某些相似的方面(共性)。把這些相似的方面集中和概括起來(lái),暫時(shí)忽略它們之間的差異,這就是抽象。抽象就是抽出事物本質(zhì)特性而暫時(shí)不考慮細(xì)節(jié)。“抽象是人類處理復(fù)雜問(wèn)題的基本方法之一。”——GradyBoach一般抽象過(guò)程:處理復(fù)雜系統(tǒng)的惟一有效的方法是用層次的方式構(gòu)造和分析它。一個(gè)復(fù)雜的動(dòng)態(tài)系統(tǒng)首先可以用一些高級(jí)的抽象概念構(gòu)造和理解,這些高級(jí)概念又可以用一些較低級(jí)的概念構(gòu)造和理解,如此進(jìn)行下去,直至最低層次的具體元素。例:過(guò)程抽象、數(shù)據(jù)抽象軟件工程抽象過(guò)程:軟件工程過(guò)程的每一步都是對(duì)軟件解法的抽象層次的一次精化。在可行性研究階段,軟件作為系統(tǒng)的一個(gè)完整部件;在需求分析期間,軟件解法是使用在問(wèn)題環(huán)境內(nèi)熟悉的方式描述的;當(dāng)由總體設(shè)計(jì)向詳細(xì)設(shè)計(jì)過(guò)渡時(shí),抽象的程度也就隨之減少了;最后,當(dāng)源程序?qū)懗鰜?lái)以后,也就達(dá)到了抽象的最低層。4.2.3逐步求精逐步求精:為了能集中精力解決主要問(wèn)題而盡量推遲對(duì)問(wèn)題細(xì)節(jié)的考慮。逐步求精是人類解決復(fù)雜問(wèn)題時(shí)采用的基本方法,也是許多軟件工程技術(shù)的基礎(chǔ)。Miller法則:一個(gè)人在任何時(shí)候都只能把注意力集中在(7±2)個(gè)知識(shí)塊上。例:用篩選法求100以內(nèi)的素?cái)?shù)。所謂的篩選法,就是從2到100中去掉2,3,5,7的倍數(shù),剩下的就是100以內(nèi)的素?cái)?shù)。首先按程序功能寫出一個(gè)框架main(){
建立2到100的數(shù)組A[],其中A[i]=i;........................1
建立2到10的素?cái)?shù)表B[],存放2到10以內(nèi)的素?cái)?shù);....2
若A[i]=i是B[]中任一數(shù)的倍數(shù),則剔除A[i];.........3
輸出A[]中所有沒(méi)有被剔除的數(shù);...............................4}上述框架中每一個(gè)加工語(yǔ)句都可進(jìn)一步細(xì)化main(){
/*建立2到100的數(shù)組A[],其中A[i]=i*/……….……1for(i=2;i<=100;i++)A[i]=i;
/*建立2到10的素?cái)?shù)表B[],存放2到10以內(nèi)的素?cá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[]中所有沒(méi)有被剔除的數(shù)*/………………...4for(i=2;i<=100;i++)若A[i]沒(méi)有被剔除,則輸出之………………..….....4.1}繼續(xù)對(duì)3.1和4.1細(xì)化,直到每個(gè)語(yǔ)句都能用程序設(shè)計(jì)語(yǔ)言來(lái)表示4.2.4信息隱藏信息隱藏:應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個(gè)模塊內(nèi)包含的信息(過(guò)程和數(shù)據(jù))對(duì)于不需要這些信息的模塊來(lái)說(shuō),是不能訪問(wèn)的?!安灰湍吧苏f(shuō)話?!弊饔茫骸半[藏”意味著有效的模塊化可以通過(guò)定義一組獨(dú)立的模塊而實(shí)現(xiàn)。絕大多數(shù)數(shù)據(jù)和過(guò)程對(duì)于軟件的其他部分而言是隱藏的。4.3.1耦合4.3.2內(nèi)聚4.3模塊獨(dú)立模塊獨(dú)立:希望這樣設(shè)計(jì)軟件結(jié)構(gòu),使得每個(gè)模塊完成一個(gè)相對(duì)獨(dú)立的特定子功能,并且和其他模塊之間的關(guān)系很簡(jiǎn)單。模塊獨(dú)立的重要性:有效的模塊化(即具有獨(dú)立的模塊)的軟件比較容易開發(fā)出來(lái)。獨(dú)立的模塊比較容易測(cè)試和維護(hù)。模塊獨(dú)立程度的兩個(gè)定性標(biāo)準(zhǔn)度量:耦合,衡量不同模塊彼此間互相依賴(連接)的緊密程度。耦合要低,即每個(gè)模塊和其他模塊之間的關(guān)系要簡(jiǎn)單;內(nèi)聚,衡量一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度。內(nèi)聚要高,每個(gè)模塊完成一個(gè)相對(duì)獨(dú)立的特定子功能。4.3.1耦合耦合是對(duì)一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量。耦合強(qiáng)弱取決于模塊間接口的復(fù)雜程度,進(jìn)入或訪問(wèn)一個(gè)模塊的點(diǎn),以及通過(guò)接口的數(shù)據(jù)。在軟件設(shè)計(jì)中應(yīng)該追求盡可能松散耦合的系統(tǒng)。(1)非直接耦合/完全獨(dú)立如果兩個(gè)模塊中的每一個(gè)都能獨(dú)立地工作而不需要另一個(gè)模塊的存在,那么它們完全獨(dú)立。在一個(gè)軟件系統(tǒng)中不可能所有模塊之間都沒(méi)有任何連接。(2)數(shù)據(jù)耦合如果兩個(gè)模塊彼此間通過(guò)參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù),那么這種耦合稱為數(shù)據(jù)耦合。評(píng)價(jià):系統(tǒng)中至少必須存在這種耦合。數(shù)據(jù)耦合是理想的目標(biāo)。維護(hù)更容易。(3)控制耦合如果兩個(gè)模塊彼此間傳遞的信息中有控制信息,這種耦合稱為控制耦合。評(píng)價(jià):控制耦合往往是多余的。被調(diào)用的模塊需知道調(diào)用模塊的內(nèi)部結(jié)構(gòu)和邏輯,降低了重用的可能性。(4)特征耦合當(dāng)把整個(gè)數(shù)據(jù)結(jié)構(gòu)作為參數(shù)傳遞而被調(diào)用的模塊只需要使用其中一部分?jǐn)?shù)據(jù)元素時(shí),就出現(xiàn)了特征耦合。評(píng)價(jià):被調(diào)用的模塊可使用的數(shù)據(jù)多于它確實(shí)需要的數(shù)據(jù),這將導(dǎo)致對(duì)數(shù)據(jù)的訪問(wèn)失去控制,從而給計(jì)算機(jī)犯罪提供了機(jī)會(huì)。無(wú)論何時(shí)把指針作為參數(shù)進(jìn)行傳遞,都應(yīng)該仔細(xì)檢查該耦合。(5)公共環(huán)境耦合當(dāng)兩個(gè)或多個(gè)模塊通過(guò)一個(gè)公共數(shù)據(jù)環(huán)境相互作用時(shí),它們之間的耦合稱為公共環(huán)境耦合。公共環(huán)境可以是全程變量、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)、任何存儲(chǔ)介質(zhì)上的文件、物理設(shè)備等等。公共環(huán)境耦合的類型:一個(gè)模塊往公共環(huán)境送數(shù)據(jù),另一個(gè)模塊從公共環(huán)境取數(shù)據(jù)。屬于數(shù)據(jù)耦合的一種形式,是比較松散的耦合。兩個(gè)模塊都既往公共環(huán)境送數(shù)據(jù)又從里面取數(shù)據(jù),這種耦合比較緊密,介于數(shù)據(jù)耦合和控制耦合之間。例:while(global_bariable==0){if(argument_xyz>25)module_3();elsemodule_4();}評(píng)價(jià):與結(jié)構(gòu)化編程矛盾,生成的代碼完全不可讀。如果在一個(gè)模塊中對(duì)一個(gè)全局變量的聲明進(jìn)行修改,必須修改能夠訪問(wèn)該全局變量的每一個(gè)模塊。公共環(huán)境耦合的模塊難于重用,必須提供一個(gè)全局變量的清單。即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共環(huán)境耦合的實(shí)例數(shù)也會(huì)變化非常大。潛在危險(xiǎn)很大。模塊暴露出必需要更多的數(shù)據(jù),難以控制數(shù)據(jù)存取,而且會(huì)導(dǎo)致計(jì)算機(jī)犯罪。有些情況下公共環(huán)境耦合更好。(6)內(nèi)容耦合如果出現(xiàn)下列情況之一,兩個(gè)模塊間就發(fā)生了內(nèi)容耦合:一個(gè)模塊訪問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù);一個(gè)模塊不通過(guò)正常入口轉(zhuǎn)到另一個(gè)模塊的內(nèi)部;兩個(gè)模塊有一部分程序代碼重疊;一個(gè)模塊有多個(gè)入口。耦合的設(shè)計(jì)原則:盡量使用數(shù)據(jù)耦合少用控制耦合和特征耦合限制公共環(huán)境耦合的范圍完全不用內(nèi)容耦合4.3.2內(nèi)聚內(nèi)聚標(biāo)志一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度,它是信息隱藏和局部化概念的自然擴(kuò)展。簡(jiǎn)單地說(shuō),理想內(nèi)聚的模塊只做一件事情。設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚,通常中等程度的內(nèi)聚也是可以采用的,而且效果和高內(nèi)聚相差不多;但是,低內(nèi)聚不要使用。內(nèi)聚和耦合是密切相關(guān)的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。實(shí)踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上。(1)偶然內(nèi)聚如果一個(gè)模塊完成一組任務(wù),這些任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的,就叫做偶然內(nèi)聚。MA=B+CGETCHERIFR=5THENS=1評(píng)價(jià):模塊內(nèi)各元素之間沒(méi)有實(shí)質(zhì)性聯(lián)系,很可能在一種應(yīng)用場(chǎng)合需要修改這個(gè)模塊,在另一種應(yīng)用場(chǎng)合又不允許這種修改,從而陷入困境;可理解性差,可維護(hù)性產(chǎn)生退化;模塊是不可重用的。解決方案:將模塊分成更小的模塊,每個(gè)小模塊執(zhí)行一個(gè)操作。(2)邏輯內(nèi)聚如果一個(gè)模塊完成的任務(wù)在邏輯上屬于相同或相似的一類,則稱為邏輯內(nèi)聚。new_operationfunction_code=7;new_operation(function_code,dummy1,dummy2,dummy3);//dummy1、dummy2和dummy3是偽變量,//如果function_code=7則不使用它們?cè)u(píng)價(jià):接口難以理解,造成整體上不易理解;完成多個(gè)操作的代碼互相糾纏在一起,即使局部功能的修改有時(shí)也會(huì)影響全局,導(dǎo)致嚴(yán)重的維護(hù)問(wèn)題;難以重用。解決方案:模塊分解。(3)時(shí)間內(nèi)聚如果一個(gè)模塊包含的任務(wù)必須在同一段時(shí)間內(nèi)執(zhí)行,就叫時(shí)間內(nèi)聚。執(zhí)行初始化打開舊主文件、新主文件、事務(wù)文件和打印文件;初始化銷售地區(qū)表;讀第一條事務(wù)記錄和第一條舊主文件記錄;評(píng)價(jià):時(shí)間關(guān)系在一定程度上反映了程序某些實(shí)質(zhì),所以時(shí)間內(nèi)聚比邏輯內(nèi)聚好一些。模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操作卻有很強(qiáng)的關(guān)聯(lián)。時(shí)間內(nèi)聚的模塊不太可能重用。(4)過(guò)程內(nèi)聚如果一個(gè)模塊內(nèi)的處理元素是相關(guān)的,而且必須以特定次序執(zhí)行,則稱為過(guò)程內(nèi)聚。使用程序流程圖作為工具設(shè)計(jì)軟件時(shí),常常通過(guò)研究流程圖確定模塊的劃分,這樣得到的往往是過(guò)程內(nèi)聚的模塊。評(píng)價(jià):比時(shí)間內(nèi)聚好,至少操作之間是過(guò)程關(guān)聯(lián)的。仍是弱連接,不太可能重用模塊。解決方案:分割為單獨(dú)的模塊,每個(gè)模塊執(zhí)行一個(gè)操作。(5)通信內(nèi)聚如果模塊中所有元素都使用同一個(gè)輸入數(shù)據(jù)和(或)產(chǎn)生同一個(gè)輸出數(shù)據(jù),則稱為通信內(nèi)聚。即在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上操作。評(píng)價(jià):模塊中各操作緊密相連,比過(guò)程內(nèi)聚更好。不能重用。解決方案:分成多個(gè)模塊,每個(gè)模塊執(zhí)行一個(gè)操作。(6)順序內(nèi)聚如果一個(gè)模塊內(nèi)的處理元素和同一個(gè)功能密切相關(guān),而且這些處理必須順序執(zhí)行,則稱為順序內(nèi)聚。評(píng)價(jià):根據(jù)數(shù)據(jù)流圖劃分模塊時(shí),通常得到順序內(nèi)聚的模塊,這種模塊彼此間的連接往往比較簡(jiǎn)單。(7)功能內(nèi)聚如果模塊內(nèi)所有處理元素屬于一個(gè)整體,完成一個(gè)單一的功能,則稱為功能內(nèi)聚。功能內(nèi)聚是最高程度的內(nèi)聚。評(píng)價(jià):模塊可重用,應(yīng)盡可能重用;可隔離錯(cuò)誤,維護(hù)更容易;擴(kuò)充產(chǎn)品功能時(shí)更容易。七種內(nèi)聚的優(yōu)劣評(píng)分結(jié)果:程度內(nèi)聚類型分?jǐn)?shù)高內(nèi)聚功能內(nèi)聚10分順序內(nèi)聚9分中內(nèi)聚通信內(nèi)聚7分過(guò)程內(nèi)聚5分低內(nèi)聚時(shí)間內(nèi)聚3分邏輯內(nèi)聚1分偶然內(nèi)聚0分內(nèi)聚的設(shè)計(jì)原則:設(shè)計(jì)時(shí)力爭(zhēng)做到高內(nèi)聚并且能夠辨認(rèn)出低內(nèi)聚的模塊有能力通過(guò)修改設(shè)計(jì)提高模塊的內(nèi)聚程度降低模塊間的耦合程度,從而獲得較高的模塊獨(dú)立性4.4啟發(fā)規(guī)則1.改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性通過(guò)模塊分解或合并,降低耦合提高內(nèi)聚。兩個(gè)方面:
模塊功能完善化。一個(gè)完整的模塊包含:執(zhí)行規(guī)定的功能的部分出錯(cuò)處理的部分返回一個(gè)“結(jié)束標(biāo)志”消除重復(fù)功能,改善軟件結(jié)構(gòu)。完全相似局部相似2.模塊規(guī)模應(yīng)該適中一個(gè)模塊的規(guī)模不應(yīng)過(guò)大,最好能寫在一頁(yè)紙內(nèi)。通常規(guī)定50~100行語(yǔ)句,最多不超過(guò)500行。數(shù)字只能作為參考,根本問(wèn)題是要保證模塊的獨(dú)立性。過(guò)大的模塊往往是由于分解不充分,但是進(jìn)一步分解必須符合問(wèn)題結(jié)構(gòu),一般說(shuō)來(lái),分解后不應(yīng)該降低模塊獨(dú)立性。過(guò)小的模塊開銷大于有效操作,而且模塊數(shù)目過(guò)多將使系統(tǒng)接口復(fù)雜。3.深度、寬度、扇出和扇入都應(yīng)適當(dāng)深度:軟件結(jié)構(gòu)中控制的層數(shù),它往往能粗略地標(biāo)志一個(gè)系統(tǒng)的大小和復(fù)雜程度。寬度:軟件結(jié)構(gòu)內(nèi)同一個(gè)層次上的模塊總數(shù)的最大值。扇出:一個(gè)模塊直接控制(調(diào)用)的模塊數(shù)目。扇入:有多少個(gè)上級(jí)模塊直接調(diào)用它。4.模塊的作用域應(yīng)該在控制域之內(nèi)模塊的作用域:定義為受該模塊內(nèi)一個(gè)判定影響的所有模塊的集合。模塊的控制域:是這個(gè)模塊本身以及所有直接或間接從屬于它的模塊的集合。在一個(gè)設(shè)計(jì)得很好的系統(tǒng)中,所有受判定影響的模塊應(yīng)該都從屬于做出判定的那個(gè)模塊,最好局限于做出判定的那個(gè)模塊本身及它的直屬下級(jí)模塊。解決方案:把模塊A中的判定移到模塊M中;把模塊G移到模塊A下面,作為他的下級(jí)模塊。5.力爭(zhēng)降低模塊接口的復(fù)雜程度模塊接口復(fù)雜是軟件發(fā)生錯(cuò)誤的一個(gè)主要原因。應(yīng)該仔細(xì)設(shè)計(jì)模塊接口,使得信息傳遞簡(jiǎn)單并且和模塊的功能一致。例:解一元二次方程的函數(shù)QUAD_ROOT(TBL,X)其中數(shù)組TBL傳送方程的系數(shù)數(shù)組X送回求得的根QUAD_ROOT(A,B,C,ROOT1,ROOT2)6.設(shè)計(jì)單入口單出口的模塊警告軟件工程師不要使模塊間出現(xiàn)內(nèi)容耦合。當(dāng)從頂部進(jìn)入模塊并且從底部退出來(lái)時(shí),軟件是比較容易理解的,因此也是比較容易維護(hù)的。7.模塊功能應(yīng)該可以預(yù)測(cè)模塊的功能應(yīng)該能夠預(yù)測(cè),但也要防止模塊功能過(guò)分局限。功能可預(yù)測(cè):如果一個(gè)模塊可以當(dāng)做一個(gè)黑盒子,只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,這個(gè)模塊的功能就是可以預(yù)測(cè)的。4.5.1層次圖和HIPO圖4.5.2結(jié)構(gòu)圖4.5表示軟件結(jié)構(gòu)的圖形工具4.5.1層次圖和HIPO圖層次圖(H圖)層次圖用來(lái)描繪軟件的層次結(jié)構(gòu)。很適于在自頂向下設(shè)計(jì)軟件的過(guò)程中使用。HIPO圖美國(guó)IBM公司發(fā)明的“層次圖+輸入/處理/輸出圖”的英文縮寫。和H圖中每個(gè)方框相對(duì)應(yīng),應(yīng)該有一張IPO圖描繪這個(gè)方框代表的模塊的處理過(guò)程。正文加工系統(tǒng)的層次圖加編號(hào)的層次圖主文件更新處理的IPO圖改進(jìn)的IPO圖IPO表系統(tǒng):定貨系統(tǒng)作者:模塊:處理事務(wù)日期:編號(hào):1.0被調(diào)用:定貨系統(tǒng)調(diào)用:接受事務(wù)更新庫(kù)存清單處理定貨輸入:事務(wù)輸出:定貨信息
庫(kù)存清單處理:(用過(guò)程描述工具描述本模塊的算法,如PAD圖、N-S圖、偽代碼等)局部數(shù)據(jù)元素:注釋:4.5.2結(jié)構(gòu)圖Yourdon提出的結(jié)構(gòu)圖是進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)的另一個(gè)有力工具。結(jié)構(gòu)圖和層次圖類似,也是描繪軟件結(jié)構(gòu)的圖形工具?;痉?hào):方框代表一個(gè)模塊;方框之間的直線表示模塊的調(diào)用關(guān)系;尾部是空心圓箭頭表示傳遞的是數(shù)據(jù);尾部實(shí)心圓箭頭表示傳遞的是控制信息。附加符號(hào):選擇調(diào)用:判定為真時(shí)調(diào)用A,為假時(shí)調(diào)用B。循環(huán)調(diào)用:模塊M循環(huán)調(diào)用模塊A、B、C。層次圖和結(jié)構(gòu)圖并不嚴(yán)格表示模塊的調(diào)用次序,多數(shù)人習(xí)慣按調(diào)用次序從左到右畫模塊;層次圖和結(jié)構(gòu)圖并不指明何時(shí)調(diào)用下層模塊;層次圖和結(jié)構(gòu)圖只表明一個(gè)模塊調(diào)用那些模塊,沒(méi)有表示模塊內(nèi)還有沒(méi)有其他成分;通常用層次圖作為描繪軟件結(jié)構(gòu)的文檔;由層次圖導(dǎo)出結(jié)構(gòu)圖的過(guò)程,可以作為檢查設(shè)計(jì)正確性和評(píng)價(jià)模塊獨(dú)立性的好方法。4.6.1概念4.6.2變換分析4.6.3事務(wù)分析4.6.4設(shè)計(jì)優(yōu)化4.6面向數(shù)據(jù)流的設(shè)計(jì)方法4.6.1概念面向數(shù)據(jù)流的設(shè)計(jì)方法把信息流映射成軟件結(jié)構(gòu),信息流的類型決定了映射的方法。信息流有兩種類型:變換流事務(wù)流1.變換流信息沿輸入通路進(jìn)入系統(tǒng),由外部形式變換成內(nèi)部形式,進(jìn)入系統(tǒng)的信息通過(guò)變換中心,經(jīng)加工處理以后再沿輸出通路變換成外部形式離開軟件系統(tǒng)。2.事務(wù)流數(shù)據(jù)沿輸入通路到達(dá)一個(gè)處理T,T根據(jù)輸入數(shù)據(jù)類型在若干個(gè)動(dòng)作序列中選出一個(gè)來(lái)執(zhí)行。處理T稱為事務(wù)中心,它完成下述任務(wù):接收輸入數(shù)據(jù);分析每個(gè)事務(wù)以確定它的類型;根據(jù)事務(wù)類型選取一條活動(dòng)通路。3.設(shè)計(jì)過(guò)程4.6.2變換分析(1)復(fù)查基本系統(tǒng)模型確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實(shí)際。(2)復(fù)查并精化數(shù)據(jù)流圖對(duì)需求分析階段得出的數(shù)據(jù)流圖認(rèn)真復(fù)查,并且在必要時(shí)進(jìn)行精化。不僅要確保數(shù)據(jù)流圖給出了目標(biāo)系統(tǒng)的正確的邏輯模型,而且應(yīng)該使數(shù)據(jù)流圖中每個(gè)處理都代表一個(gè)規(guī)模適中相對(duì)獨(dú)立的子功能。(3)確定數(shù)據(jù)流圖具有變換特性還是事務(wù)特性系統(tǒng)中的所有信息流都可以認(rèn)為是變換流,但是,當(dāng)遇到有明顯事務(wù)特性的信息流時(shí),建議采用事務(wù)分析方法進(jìn)行設(shè)計(jì)。確定數(shù)據(jù)流的全局特性和局部特性。(4)確定輸入流和輸出流的邊界,從而孤立出變換中心輸入流和輸出流的邊界和對(duì)它們的解釋有關(guān),不同設(shè)計(jì)人員可能會(huì)在流內(nèi)選取稍微不同的點(diǎn)作為邊界的位置。(5)完成“第一級(jí)分解”位于軟件結(jié)構(gòu)最頂層的控制模塊Cm協(xié)調(diào)下述從屬的控制功能:輸入信息處理控制模塊Ca,協(xié)調(diào)對(duì)所有輸入數(shù)據(jù)的接收;變換中心控制模塊Ct,管理對(duì)內(nèi)部形式的數(shù)據(jù)的所有操作;輸出信息處理控制模塊Ce,協(xié)調(diào)輸出信息的產(chǎn)生過(guò)程。第一級(jí)分解方法(6)完成“第二級(jí)分解”處理映射成軟件結(jié)構(gòu)中一個(gè)適當(dāng)?shù)哪K。完成第二級(jí)分解的方法是:從變換中心的邊界開始沿著輸入通路向外移動(dòng),把輸入通路中每個(gè)處理映射成軟件結(jié)構(gòu)中Ca控制下的一個(gè)低層模塊;沿輸出通路向外移動(dòng),把輸出通路中每個(gè)處理映射成直接或間接受模塊Ce控制的一個(gè)低層模塊;把變換中心內(nèi)每個(gè)處理映射成受Ct控制的模塊。第二級(jí)分解方法(7)使用設(shè)計(jì)度量和啟發(fā)式規(guī)則對(duì)第一次分割得到的軟件結(jié)構(gòu)進(jìn)一步精化為了產(chǎn)生合理的分解,得到盡可能高的內(nèi)聚、盡可能松散的耦合,為了得到一個(gè)易于實(shí)現(xiàn)、易于測(cè)試和易于維護(hù)的軟件結(jié)構(gòu),應(yīng)該對(duì)初步分割得到的模塊進(jìn)行再分解或合并。4.6.3事務(wù)分析雖然在任何情況下都可以使用變換分析方法設(shè)計(jì)軟件結(jié)構(gòu),但是在數(shù)據(jù)流具有明顯的事務(wù)特點(diǎn)時(shí),也就是有一個(gè)明顯的“發(fā)射中心”(事務(wù)中心)時(shí),還是以采用事務(wù)分析方法為宜。事務(wù)分析的設(shè)計(jì)步驟和變換分析的設(shè)計(jì)步驟大部分相同或類似,主要差別僅在于由數(shù)據(jù)流圖到軟件結(jié)構(gòu)的映射方法不同:由事務(wù)流映射成的軟件結(jié)構(gòu)包括一個(gè)接收分支和一個(gè)發(fā)送分支;映射出接收分支結(jié)構(gòu)的方法和變換分析映射出輸入結(jié)構(gòu)的方法很相像,即從事務(wù)中心的邊界開始,把沿著接收流通路的處理映射成模塊;發(fā)送分支的結(jié)構(gòu)包含一個(gè)調(diào)度模塊,它控制下層的所有活動(dòng)模塊;然后把數(shù)據(jù)流圖中的每個(gè)活動(dòng)流通路映射成與它的流特征相對(duì)應(yīng)的結(jié)構(gòu)。例1:設(shè)計(jì)一個(gè)產(chǎn)品,它將一個(gè)文件名作為輸入,并返回文件中的字?jǐn)?shù)。第一級(jí)分解第二級(jí)分解精化例2:汽車數(shù)字儀表板通過(guò)模數(shù)轉(zhuǎn)換實(shí)現(xiàn)傳感器和微處理機(jī)接口;在發(fā)光二極管面板上顯示數(shù)據(jù);指示每小時(shí)英里數(shù)(mph),行駛的里程,每加侖油行駛的英里數(shù)(mpg)等等;指示加速或減速;超速警告:如果車速超過(guò)55英里/小時(shí),則發(fā)出超速警告鈴聲。第一級(jí)分解第二級(jí)分解精化例3:自動(dòng)柜員機(jī)顧客插入磁卡,輸入密碼,然后執(zhí)行相應(yīng)動(dòng)作,包括向支票、存折或信用卡賬戶存款、提款或查詢余額等。設(shè)計(jì)上分成兩部分:分析器和調(diào)度器。分析器確定事務(wù)類型并將信息送到分配器,由調(diào)度器進(jìn)行事務(wù)處理。例4:一個(gè)公司的銷售管理系統(tǒng)總結(jié):一般說(shuō)來(lái),如果數(shù)據(jù)流不具有顯著的事務(wù)特點(diǎn),最好使用變換分析;反之,如具有明顯的事務(wù)中心,則應(yīng)該采用事務(wù)分析技術(shù)。機(jī)械地遵循變換分析或事務(wù)分析的映射規(guī)則,可能會(huì)得到一些不必要的控制模塊,如果它們確實(shí)用處不大,那么可以而且應(yīng)該把它們合并。如果一個(gè)控制模塊功能過(guò)分復(fù)雜,則應(yīng)該分解為兩個(gè)或多個(gè)控制模塊,或者增加中間層次控制模塊。4.6.4設(shè)計(jì)優(yōu)化設(shè)計(jì)優(yōu)化應(yīng)該力求做到在有效的模塊化的前提下使用最少量的模塊,以及在能夠滿足信息要求的前提下使用最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。對(duì)于時(shí)間是決定性因素的應(yīng)用場(chǎng)合,可能有必要在詳細(xì)設(shè)計(jì)階段,也可能在編寫程序的過(guò)程中進(jìn)行優(yōu)化。程序中相對(duì)說(shuō)比較小的部分,通常占用全部處理時(shí)間的大部分?!跋仁顾芄ぷ?,然后再使它快起來(lái)?!?.7.1人機(jī)界面設(shè)計(jì)問(wèn)題4.7.2人機(jī)界面設(shè)計(jì)過(guò)程4.7.3人機(jī)界面設(shè)計(jì)指南4.7人機(jī)界面設(shè)計(jì)人機(jī)界面設(shè)計(jì)是接口設(shè)計(jì)的重要組成部分。人機(jī)界面的設(shè)計(jì)質(zhì)量直接影響用戶對(duì)軟件產(chǎn)品的評(píng)價(jià),從而影響軟件產(chǎn)品的競(jìng)爭(zhēng)力和壽命,必須對(duì)人機(jī)界面設(shè)計(jì)給予足夠重視。三條“黃金規(guī)則”:置用戶于控制之下減少用戶記憶負(fù)擔(dān)保持界面一致4.7.1人機(jī)界面設(shè)計(jì)問(wèn)題系統(tǒng)響應(yīng)時(shí)間用戶幫助設(shè)施出錯(cuò)信息處理命令交互1.系統(tǒng)響應(yīng)時(shí)間系統(tǒng)響應(yīng)時(shí)間指從用戶完成某個(gè)控制動(dòng)作,到軟件給出預(yù)期的響應(yīng)之間的這段時(shí)間。系統(tǒng)響應(yīng)時(shí)間有兩個(gè)重要屬性:長(zhǎng)度:如果系統(tǒng)響應(yīng)時(shí)間過(guò)長(zhǎng),用戶就會(huì)感到緊張和沮喪;系統(tǒng)響應(yīng)時(shí)間過(guò)短會(huì)迫使用戶加快操作節(jié)奏,從而可能會(huì)犯錯(cuò)誤。易變性:指系統(tǒng)響應(yīng)時(shí)間相對(duì)于平均響應(yīng)時(shí)間的偏差,即使系統(tǒng)響應(yīng)時(shí)間較長(zhǎng),響應(yīng)時(shí)間易變性低也有助于用戶建立起穩(wěn)定的工作節(jié)奏。2.用戶幫助設(shè)施大多數(shù)現(xiàn)代軟件都提供聯(lián)機(jī)幫助設(shè)施,用戶無(wú)須離開用戶界面就能解決自己的問(wèn)題。常見的幫助設(shè)施:集成的幫助設(shè)施,設(shè)計(jì)在軟件里面,它對(duì)用戶工作內(nèi)容是敏感的,用戶可以從與剛剛完成的操作有關(guān)的主題中選擇一個(gè)請(qǐng)求幫助。附加的幫助設(shè)施,是在系統(tǒng)建成后再添加到軟件中的,實(shí)際上是一種查詢能力有限的聯(lián)機(jī)用戶手冊(cè)。集成的幫助設(shè)施優(yōu)于附加的幫助設(shè)施。3.出錯(cuò)信息處理出錯(cuò)信息和警告信息,是出現(xiàn)問(wèn)題時(shí)交互式系統(tǒng)給出的“壞消息”。出錯(cuò)信息應(yīng)該具有的屬性:信息應(yīng)該用用戶可以理解的術(shù)語(yǔ)描述問(wèn)題。信息應(yīng)該提供有助于從錯(cuò)誤中恢復(fù)的建設(shè)性意見。信息應(yīng)該指出錯(cuò)誤可能導(dǎo)致哪些負(fù)面后果。信息應(yīng)該伴隨著聽覺(jué)上或視覺(jué)上的提示。信息不能帶有指責(zé)色彩。4.命令交互多數(shù)情況下,用戶既可以從菜單中選擇軟件功能,也可以通過(guò)鍵盤命令序列調(diào)用軟件功能。在理想的情況下,所有應(yīng)用軟件都有一致的命令使用方法。4.7.2人機(jī)界面設(shè)計(jì)過(guò)程用戶界面設(shè)計(jì)是一個(gè)迭代的過(guò)程,也就是說(shuō),通常先創(chuàng)建設(shè)計(jì)模型,再用原型實(shí)現(xiàn)這個(gè)設(shè)計(jì)模型,并由用戶試用和評(píng)估,然后根據(jù)用戶意見進(jìn)行修改。為了支持上述迭代過(guò)程,各種用于界面設(shè)計(jì)和原型開發(fā)的軟件工具應(yīng)運(yùn)而生。這些工具被稱為用戶界面工具箱或用戶界面開發(fā)系統(tǒng)。4.7.3人機(jī)界面設(shè)計(jì)指南一般交互指南信息顯示指南數(shù)據(jù)輸入指南顏色使用指南:一個(gè)窗口中不應(yīng)該出現(xiàn)5種以上不同色系的顏色。如果一個(gè)圖表中僅包含幾種顏色,背景應(yīng)該選用其中一種顏色的補(bǔ)色:如果一幅圖中包含許多顏色,背景應(yīng)該選用一種中性的顏色,如灰色。如果兩個(gè)相鄰的顏色不是特別和諧,可以用細(xì)的黑色邊框?qū)⑺鼈兎珠_。背景和字體顏色應(yīng)選用對(duì)比度強(qiáng)的顏色。顏色裝飾性的使用服從功能性的使用。區(qū)域的顏色實(shí)際上能夠影響他的觀察尺寸。使用高飽和度(亮)顏色的大區(qū)域是不明智的。紅色和藍(lán)色具有最強(qiáng)的深度不一致的效果,紅色看起來(lái)近,藍(lán)色看起來(lái)遠(yuǎn)。黃月亮和藍(lán)月亮懷特效應(yīng)藍(lán)寶石之光斯特魯普效應(yīng)4.8過(guò)程設(shè)計(jì)過(guò)程設(shè)計(jì)應(yīng)該在數(shù)據(jù)設(shè)計(jì)、體系結(jié)構(gòu)設(shè)計(jì)和接口設(shè)計(jì)完成之后進(jìn)行,它是詳細(xì)設(shè)計(jì)階段應(yīng)該完成的主要任務(wù)。過(guò)程設(shè)計(jì)的任務(wù)還不是具體地編寫程序,而是要設(shè)計(jì)出程序的“藍(lán)圖”,以后程序員將根據(jù)這個(gè)藍(lán)圖寫出實(shí)際的程序代碼。結(jié)構(gòu)程序設(shè)計(jì)是實(shí)現(xiàn)上述目標(biāo)的關(guān)鍵技術(shù),因此是過(guò)程設(shè)計(jì)的邏輯基礎(chǔ)。結(jié)構(gòu)程序設(shè)計(jì)的經(jīng)典定義:如果一個(gè)程序的代碼塊僅通過(guò)順序、選擇和循環(huán)這三種基本控制結(jié)構(gòu)進(jìn)行連接,并且每個(gè)代碼塊只有一個(gè)入口和一個(gè)出口,則稱這個(gè)程序是結(jié)構(gòu)化的。補(bǔ)充:結(jié)構(gòu)程序設(shè)計(jì)是盡可能少用GOTO語(yǔ)句的程序設(shè)計(jì)方法。最好僅在檢測(cè)出錯(cuò)誤時(shí)才使用GOTO語(yǔ)句。而且應(yīng)該總是使用前向GOTO語(yǔ)句。三種基本控制結(jié)構(gòu)其他常用的控制結(jié)構(gòu)經(jīng)典的結(jié)構(gòu)程序設(shè)計(jì):只允許使用順序、IF-THEN-ELSE型分支和DO-WHILE型循環(huán)這3種基本控制結(jié)構(gòu)。擴(kuò)展的結(jié)構(gòu)程序設(shè)計(jì):如果除了上述三種基本控制結(jié)構(gòu)之外,還允許使用DO-CASE多分支結(jié)構(gòu)和DO-UNTIL循環(huán)結(jié)構(gòu)。修正的結(jié)構(gòu)程序設(shè)計(jì):再加上允許使用LEAVE(或BREAK)結(jié)構(gòu)。4.9.1程序流程圖4.9.2盒圖(N-S圖)4.9.3PAD圖4.9.4判定表4.9.5判定樹4.9.6過(guò)程設(shè)計(jì)語(yǔ)言4.9過(guò)程設(shè)計(jì)的工具4.9.1程序流程圖程序流程圖又稱為程序框圖,是歷史最悠久、使用最廣泛的描述過(guò)程設(shè)計(jì)的方法。它的主要優(yōu)點(diǎn)是對(duì)控制流程的描繪很直觀,便于初學(xué)者掌握。程序流程圖歷史悠久,至今仍在廣泛使用著。程序流程圖中使用的符號(hào)程序流程圖的主要缺點(diǎn):程序流程圖本質(zhì)上不是逐步求精的好工具,它誘使程序員過(guò)早地考慮程序的控制流程,而不去考慮程序的全局結(jié)構(gòu)。程序流程圖中用箭頭代表控制流,因此程序員不受任何約束,可以完全不顧結(jié)構(gòu)程序設(shè)計(jì)的精神,隨意轉(zhuǎn)移控制。程序流程圖不易表示數(shù)據(jù)結(jié)構(gòu)。4.9.2盒圖(N-S圖)Nassi和Shneiderman提出了盒圖,又稱N-S圖。N-S圖的特點(diǎn):功能域明確。不可能任意轉(zhuǎn)移控制。容易確定局部和全程數(shù)據(jù)的作用域。容易表現(xiàn)嵌套關(guān)系,也可以表示模塊的層次結(jié)構(gòu)。盒圖的基本符號(hào)4.9.3PAD圖PAD是問(wèn)題分析圖(problemanalysisdiagram)的英文縮寫,1973年由日本日立公司發(fā)明以后,已得到一定程度的推廣。它用二維樹形結(jié)構(gòu)來(lái)表示程序的控制流,將這種圖翻譯成程序代碼比較容易。PAD圖的基本符號(hào)PAD圖的優(yōu)點(diǎn):使用表示結(jié)構(gòu)化控制結(jié)構(gòu)的PAD符號(hào)設(shè)計(jì)出來(lái)的程序必然是結(jié)構(gòu)化程序。PAD圖所描繪的程序結(jié)構(gòu)十分清晰。PAD圖表現(xiàn)程序邏輯易讀、易懂、易記。容易將PAD圖轉(zhuǎn)換成高級(jí)語(yǔ)言源程序,這種轉(zhuǎn)換可用軟件工具自動(dòng)完成。即可表示程序邏輯,也可描繪數(shù)據(jù)結(jié)構(gòu)。PAD圖符號(hào)支持自頂向下、逐步求精方法的使用。例:某程序流程圖如右圖所示,請(qǐng)分別用N-S圖和PAD圖表示。aUNTILx8jbiceWHILEx5dx1x2x3x4fghUNTILx7x6xi=PAD圖x8ajx1bTFfx6TFx7ighCASExix2x4x3x5cdeN-S圖4.9.4判定表當(dāng)算法中包含多重嵌套的條件選擇時(shí),用判定表能夠清晰地表示復(fù)雜的條件組合與應(yīng)做的動(dòng)作之間的對(duì)應(yīng)關(guān)系。一張判定表由4部分組成:所有條件條件組合矩陣所有動(dòng)作條件組合對(duì)應(yīng)的動(dòng)作例:假設(shè)某航空公司規(guī)定,乘客可以免費(fèi)托運(yùn)重量不超過(guò)30kg的行李。當(dāng)行李重量超過(guò)30kg時(shí),對(duì)頭等艙的國(guó)內(nèi)乘客超重部分每公斤收費(fèi)4元,對(duì)其他艙的國(guó)內(nèi)乘客超重部分每公斤收費(fèi)6元。外國(guó)乘客超重部分每公斤收費(fèi)比國(guó)內(nèi)乘客多一倍,殘疾乘客超重部分每公斤收費(fèi)比正常乘客少一半。用判定表表示計(jì)算行李費(fèi)的算法123456789國(guó)內(nèi)乘客TTTTFFFF頭等艙TFTFTFTF殘疾乘客FFTTFFTT行李重量W≤30TFFFFFFFF免費(fèi)√(W-30)×2√(W-30)×3√(W-30)×4√√√(W-30)×6√(W-30)×8√(W-30)×12√---判定表的優(yōu)點(diǎn):能清晰地表示復(fù)雜的條件組合與應(yīng)做的動(dòng)作之間的對(duì)應(yīng)關(guān)系。判定表的缺點(diǎn):判定表的含義不是一眼就能看出來(lái)的,初次接觸這種工具的人理解它需要有一個(gè)簡(jiǎn)短的學(xué)習(xí)過(guò)程。當(dāng)數(shù)據(jù)元素的值多于兩個(gè)時(shí),判定表的簡(jiǎn)潔程度也將下降。4.9.5判定樹判定樹是判定表的變種,也能清晰地表示復(fù)雜的條件組合與應(yīng)做的動(dòng)作之間的對(duì)應(yīng)關(guān)系。多年來(lái)判定樹一直受到人們的重視,是一種比較常用的系統(tǒng)分析和設(shè)計(jì)的工具。用判定樹表示計(jì)算行李費(fèi)的算法判定樹的優(yōu)點(diǎn):它的形式簡(jiǎn)單,一眼就可以看出其含義,因此易于掌握和使用。判定樹的缺點(diǎn):簡(jiǎn)潔性不如判定表,數(shù)據(jù)元素的同一個(gè)值往往要重復(fù)寫多遍,而且越接近樹的葉端重復(fù)次數(shù)越多。畫判定樹時(shí)分枝的次序可能對(duì)最終畫出的判定樹的簡(jiǎn)潔程度有較大影響。例:某校制定了教師的講課課時(shí)津貼標(biāo)準(zhǔn)。對(duì)于各種性質(zhì)的講座,無(wú)論教師是什么職稱,每課時(shí)津貼費(fèi)一律是50元;對(duì)于一般的授課,則根據(jù)教師的職稱來(lái)決定每課時(shí)津貼費(fèi):教授30元,副教授25元,講師20元,助教15元。請(qǐng)分別用判定表和判定樹表示津貼標(biāo)準(zhǔn)?!?5√20√25√30√50FFFFT講座TFFF助教FTFF講師FFTF副教授FFFT教授54321----判定表課時(shí)津貼一般授課講座教授副教授講師助教3025201550判定樹4.9.6過(guò)程設(shè)計(jì)語(yǔ)言過(guò)程設(shè)計(jì)語(yǔ)言(PDL)也稱為偽碼,它是用正文形式表示數(shù)據(jù)和處理過(guò)程的設(shè)計(jì)工具。PDL具有嚴(yán)格的關(guān)鍵字外部語(yǔ)法,用于定義控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);另一方面,PDL表示實(shí)際操作和條件的內(nèi)部語(yǔ)法通常又是靈活自由的,可以適應(yīng)各種工程項(xiàng)目的需要。PDL是一種“混雜”語(yǔ)言,它使用一種語(yǔ)言的詞匯,同時(shí)卻使用另一種語(yǔ)言的語(yǔ)法。偽碼的基本控制結(jié)構(gòu):簡(jiǎn)單陳述句:避免復(fù)合語(yǔ)句。判定:IF_THEN_ELSE或CASE_OF結(jié)構(gòu)。選擇:WHILE_DO或REPEAT_UNTIL結(jié)構(gòu)。例:檢查訂貨單IF
客戶訂貨金額超過(guò)5000元THEN
IF
客戶拖延未還賒欠錢款超過(guò)60天THEN
在償還欠款前不予批準(zhǔn)
ELSE(拖延未還賒欠錢款不超過(guò)60天)
發(fā)批準(zhǔn)書,發(fā)貨單
ENDIFELSE(客戶訂貨金額未超過(guò)5000元)
IF
客戶拖延未還賒欠錢款超過(guò)60天THEN
發(fā)批準(zhǔn)書,發(fā)貨單,并發(fā)催款通知書
ELSE(拖延未還賒欠錢款不超過(guò)60天)
發(fā)批準(zhǔn)書,發(fā)貨單
ENDIFENDIFPDL的特點(diǎn):關(guān)鍵字的固定語(yǔ)法,它提供了結(jié)構(gòu)化控制結(jié)構(gòu)、數(shù)據(jù)說(shuō)明和模塊化的特點(diǎn)。自然語(yǔ)言的自由語(yǔ)法,它描述處理特點(diǎn)。數(shù)據(jù)說(shuō)明的手段。應(yīng)該既包括簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),又包括復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。模塊定義和調(diào)用的技術(shù),應(yīng)該提供各種接口描述模式。PDL的優(yōu)點(diǎn):可以作為注釋直接插在源程序中間。有助于保持文檔和程序的一致性,提高了文檔的質(zhì)量??梢允褂闷胀ǖ恼木庉嫵绦蚧蛭淖痔幚硐到y(tǒng),很方便地完成PDL的書寫和編輯工作。已經(jīng)有自動(dòng)處理程序存在,而且可以自動(dòng)由PDL生成程序代碼。PDL的缺點(diǎn):不如圖形工具形象直觀,描述復(fù)雜的條件組合與動(dòng)作間的對(duì)應(yīng)關(guān)系時(shí),不如判定表清晰簡(jiǎn)單。4.10.1Jackson圖4.10.2改進(jìn)的Jackson圖4.10.3Jackson方法4.10面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法數(shù)據(jù)結(jié)構(gòu)既影響程序的結(jié)構(gòu)又影響程序的處理過(guò)程重復(fù)出現(xiàn)的數(shù)據(jù)通常由具有循環(huán)控制結(jié)構(gòu)的程序來(lái)處理選擇數(shù)據(jù)要用帶有分支控制結(jié)構(gòu)的程序來(lái)處理層次的數(shù)據(jù)組織通常和使用這些數(shù)據(jù)的程序的層次結(jié)構(gòu)十分相似。面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法的最終目標(biāo)是得出對(duì)程序處理過(guò)程的描述。4.10.1Jackson圖數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)元素彼此間的邏輯關(guān)系:順序結(jié)構(gòu),順序結(jié)構(gòu)的數(shù)據(jù)由一個(gè)或多個(gè)數(shù)據(jù)元素組成,每個(gè)元素按確定次序出現(xiàn)一次。選擇結(jié)構(gòu),選擇結(jié)構(gòu)的數(shù)據(jù)包含兩個(gè)或多個(gè)數(shù)據(jù)元素,每次使用這個(gè)數(shù)據(jù)時(shí)按一定條件從這些數(shù)據(jù)元素中選擇一個(gè)。重復(fù)結(jié)構(gòu),重復(fù)結(jié)構(gòu)的數(shù)據(jù),根據(jù)使用時(shí)的條件由一個(gè)數(shù)據(jù)元素出現(xiàn)零次或多次構(gòu)成。A由B、C、D3個(gè)元素順序組成根據(jù)條件A是B或C或D中的某一個(gè)A由B出現(xiàn)N次(N≥0)組成Jackson圖的優(yōu)點(diǎn):便于表示層次結(jié)構(gòu),而且是對(duì)結(jié)構(gòu)進(jìn)行自頂向下分解的有力工具;形象直觀可讀性好;既能表示數(shù)據(jù)結(jié)構(gòu)也能表示程序結(jié)構(gòu)。Jackson圖的缺點(diǎn):表示選擇或重復(fù)結(jié)構(gòu)時(shí),選擇條件或循環(huán)結(jié)束條件不能直接在圖上表示出來(lái),影響了圖的表達(dá)能力,也不易直接把圖翻譯成程序;框間連線為斜線,不易在行式打印機(jī)上輸出。4.10.2改進(jìn)的Jackson圖Jackson圖和層次圖的區(qū)別:Jackson圖層次圖作用①描繪數(shù)據(jù)結(jié)構(gòu)②描繪程序結(jié)構(gòu)描繪軟件結(jié)構(gòu)矩形框①數(shù)據(jù)元素②幾個(gè)語(yǔ)句模塊連線組成關(guān)系調(diào)用關(guān)系4.10.3Jackson方法Jackson結(jié)構(gòu)程序設(shè)計(jì)方法由5個(gè)步驟組成:(1)分析并確定輸入數(shù)據(jù)和輸出數(shù)據(jù)的邏輯結(jié)構(gòu),用Jackson圖描繪數(shù)據(jù)結(jié)構(gòu)。(2)找出輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元。所謂有對(duì)應(yīng)關(guān)系是指有直接的因果關(guān)系,在程序中可以同時(shí)處理的數(shù)據(jù)單元(對(duì)于重復(fù)出現(xiàn)的數(shù)據(jù)單元必須重復(fù)的次序和次數(shù)都相同才可能有對(duì)應(yīng)關(guān)系)。(3)用下述規(guī)則從描繪數(shù)據(jù)結(jié)構(gòu)的Jackson圖導(dǎo)出描繪程序結(jié)構(gòu)的Jackson圖:第一,為每對(duì)有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元,按照它們?cè)跀?shù)據(jù)結(jié)構(gòu)圖中的層次在程序結(jié)構(gòu)圖的相應(yīng)層次畫一個(gè)處理框(層次不同時(shí)與圖中層次低的那個(gè)對(duì)應(yīng));第二,根據(jù)輸入數(shù)據(jù)結(jié)構(gòu)中剩余的每個(gè)數(shù)據(jù)單元所處的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次分別為它們畫上對(duì)應(yīng)的處理框;第三,根據(jù)輸出數(shù)據(jù)結(jié)構(gòu)中剩余的每個(gè)數(shù)據(jù)單元所處的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次分別為它們畫上對(duì)應(yīng)的處理框。改進(jìn)的Jackson圖規(guī)定在構(gòu)成順序結(jié)構(gòu)的元素中不能有重復(fù)出現(xiàn)或選擇出現(xiàn)的元素,因此可能需要增加中間層次的處理框。(4)列出所有操作和條件(包括分支條件和循環(huán)結(jié)束條件),并把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置。(5)用偽碼表示程序。順序結(jié)構(gòu):AseqBCDAend選擇結(jié)構(gòu):Aselectcond1BAorcond2CAorcond3DAend循環(huán)結(jié)構(gòu):Aiteruntil(或while)condBAend例1:一個(gè)正文文件由若干個(gè)記錄組成,每個(gè)記錄是一個(gè)字符串。要求統(tǒng)計(jì)每個(gè)記錄中空格字符的個(gè)數(shù),以及文件中空格字符的總個(gè)數(shù)。要求的輸出數(shù)據(jù)格式是,每復(fù)制一行輸入字符串之后,另起一行印出這個(gè)字符串中的空格數(shù),最后印出文件中空格的總個(gè)數(shù)。設(shè)計(jì)步驟如下:(1)用Jackson圖描繪的輸入輸出數(shù)據(jù)結(jié)構(gòu)。(2)分析確定在輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元。(3)從數(shù)據(jù)結(jié)構(gòu)圖導(dǎo)出程序結(jié)構(gòu)圖。(4)列出所有操作和條件,并且把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置。(5)用偽碼表示程序處理過(guò)程。例2:高考后將考生的基本情況文件(簡(jiǎn)稱考生情況文件)和考生高考成績(jī)文件(簡(jiǎn)稱考分文件)合并成一個(gè)新文件(簡(jiǎn)稱考生新文件)??忌厩闆r文件中的考生記錄的內(nèi)容包括:準(zhǔn)考證號(hào)、姓名、通信地址。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版離婚后子女教育經(jīng)費(fèi)支持及共同監(jiān)護(hù)協(xié)議3篇
- 美容美發(fā)行業(yè)安全管理工作總結(jié)
- 泌尿外科護(hù)理工作總結(jié)
- 2024年設(shè)備租賃協(xié)作合同3篇
- 咨詢行業(yè)促銷計(jì)劃總結(jié)
- 2024年許昌市快速協(xié)議離婚所需手續(xù)及證件清單合同3篇
- 2024年物業(yè)服務(wù)費(fèi)用構(gòu)成協(xié)議9篇
- 2024年版挖掘機(jī)作業(yè)服務(wù)費(fèi)用標(biāo)準(zhǔn)協(xié)議版B版
- 節(jié)慶活動(dòng)的多樣化設(shè)計(jì)計(jì)劃
- 水務(wù)行業(yè)保安服務(wù)總結(jié)
- 酒店裝修工程預(yù)算表EXCEL模板(推薦)
- NY 5052-2001無(wú)公害食品海水養(yǎng)殖用水水質(zhì)
- 【講座】2020年福建省高職分類考試招生指導(dǎo)講座
- 性格決定命運(yùn)課件
- 球磨機(jī)安全檢查表分析(SCL)+評(píng)價(jià)記錄
- 學(xué)習(xí)會(huì)計(jì)基礎(chǔ)工作規(guī)范課件
- 雙面埋弧焊螺旋鋼管公稱外公壁厚和每米理論重量
- 富士施樂(lè)VC2265打印機(jī)使用說(shuō)明SPO
- 服務(wù)態(tài)度決定客戶滿意度試題含答案
- 教科版四年級(jí)科學(xué)上冊(cè)全冊(cè)復(fù)習(xí)教學(xué)設(shè)計(jì)及知識(shí)點(diǎn)整理
- 重慶萬(wàn)科渠道制度管理辦法2022
評(píng)論
0/150
提交評(píng)論