《軟件工程》課件-第5章 詳細(xì)設(shè)計(jì)_第1頁(yè)
《軟件工程》課件-第5章 詳細(xì)設(shè)計(jì)_第2頁(yè)
《軟件工程》課件-第5章 詳細(xì)設(shè)計(jì)_第3頁(yè)
《軟件工程》課件-第5章 詳細(xì)設(shè)計(jì)_第4頁(yè)
《軟件工程》課件-第5章 詳細(xì)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩155頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第5章

詳細(xì)設(shè)計(jì)XX大學(xué)XX系XXX軟件工程教程電子科技大學(xué)出版社學(xué)習(xí)目標(biāo)l

理解詳細(xì)設(shè)計(jì)的目標(biāo);l

理解常用的幾種詳細(xì)設(shè)計(jì)的工具;l

掌握系統(tǒng)詳細(xì)設(shè)計(jì)的任務(wù)、原則和過程;l

掌握程序流程圖的畫法;l

掌握并熟悉N-S圖、PAD圖、判定表、判定樹和PDL圖等常用的幾種詳細(xì)設(shè)計(jì)的工具;l

掌握典型面向數(shù)據(jù)結(jié)構(gòu)的分析設(shè)計(jì)方法Jackson方法;l

掌握人-機(jī)界面設(shè)計(jì)和實(shí)現(xiàn)原則;l

了解程序結(jié)構(gòu)復(fù)雜性的定量度量方法;l

了解詳細(xì)設(shè)計(jì)說明書的編寫。目錄010203詳細(xì)設(shè)計(jì)的目標(biāo)和任務(wù)詳細(xì)設(shè)計(jì)的原則用戶界面的設(shè)計(jì)04050607詳細(xì)設(shè)計(jì)的工具面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法程序結(jié)構(gòu)復(fù)雜性的定量度量本章小結(jié)詳細(xì)設(shè)計(jì)的目標(biāo)和任務(wù)01詳細(xì)設(shè)計(jì)的目標(biāo)和任務(wù)詳細(xì)設(shè)計(jì)要回答的關(guān)鍵問題是怎樣具體地實(shí)現(xiàn)這個(gè)系統(tǒng)。詳細(xì)設(shè)計(jì)的主要任務(wù)不是具體地編寫程序,而是設(shè)計(jì)出程序的藍(lán)圖,程序員根據(jù)這個(gè)藍(lán)圖編寫出實(shí)際的程序代碼。因此,詳細(xì)設(shè)計(jì)的結(jié)果基本上決定了最終程序代碼的質(zhì)量。詳細(xì)設(shè)計(jì)不只是在邏輯上正確地實(shí)現(xiàn)每個(gè)模塊的功能,更重要的是處理過程應(yīng)該盡可能簡(jiǎn)明易懂。詳細(xì)設(shè)計(jì)的目標(biāo)詳細(xì)設(shè)計(jì)的根本目標(biāo)是確定應(yīng)該怎樣具體地實(shí)現(xiàn)所要求的系統(tǒng),即經(jīng)過這個(gè)階段的設(shè)計(jì)工作,應(yīng)該得出對(duì)系統(tǒng)的精確描述,從而在編碼階段可以把這個(gè)描述直接翻譯成用某種程序設(shè)計(jì)語(yǔ)言書寫的程序。詳細(xì)設(shè)計(jì)的目標(biāo)詳細(xì)設(shè)計(jì)以概要設(shè)計(jì)階段的工作為基礎(chǔ),概要設(shè)計(jì)階段,以比較抽象的方式描述數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu),而詳細(xì)設(shè)計(jì)則應(yīng)在此基礎(chǔ)上給出足夠詳細(xì)的描述,詳細(xì)設(shè)計(jì)要提供關(guān)于算法的更多細(xì)節(jié)。概要設(shè)計(jì)可以聲明一個(gè)模塊的作用是對(duì)一個(gè)表進(jìn)行排序,詳細(xì)設(shè)計(jì)的模塊包含實(shí)現(xiàn)對(duì)應(yīng)的概要設(shè)計(jì)模塊所需要的處理邏輯,主要有詳細(xì)的算法、數(shù)據(jù)表示和數(shù)據(jù)結(jié)構(gòu),以及實(shí)現(xiàn)的功能和使用數(shù)據(jù)之間的關(guān)系。詳細(xì)設(shè)計(jì)的任務(wù)詳細(xì)設(shè)計(jì)主要確定每個(gè)模塊的具體執(zhí)行過程,其主要任務(wù)有以下六個(gè)方面。(1)為每個(gè)模塊進(jìn)行詳細(xì)的算法設(shè)計(jì),確定算法,選擇適當(dāng)?shù)墓ぞ弑磉_(dá)算法的過程,例如圖形、表格、語(yǔ)言等工具將每個(gè)模塊處理過程的詳細(xì)算法描述出來,寫出模塊的詳細(xì)過程描述。詳細(xì)設(shè)計(jì)的任務(wù)(2)對(duì)模塊內(nèi)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行設(shè)計(jì),對(duì)需求分析、概要設(shè)計(jì)確定的概念性的數(shù)據(jù)類型進(jìn)行確切的定義,為以后編寫程序做好充分的準(zhǔn)備。(3)對(duì)數(shù)據(jù)庫(kù)進(jìn)行物理設(shè)計(jì),即確定數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)。物理結(jié)構(gòu)主要指數(shù)據(jù)庫(kù)的存儲(chǔ)記錄格式、存儲(chǔ)記錄安排和存儲(chǔ)方法,這都依賴于具體使用的數(shù)據(jù)庫(kù)系統(tǒng)。詳細(xì)設(shè)計(jì)的任務(wù)(4)根據(jù)軟件系統(tǒng)的類型,還可能要進(jìn)行代碼設(shè)計(jì)、網(wǎng)絡(luò)系統(tǒng)設(shè)計(jì)、輸入/輸出格式設(shè)計(jì)、系統(tǒng)配置的設(shè)計(jì)和人機(jī)對(duì)話設(shè)計(jì)等其他設(shè)計(jì)。(5)編寫詳細(xì)設(shè)計(jì)說明書。(6)評(píng)審,對(duì)處理過程的算法和數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)都要評(píng)審。詳細(xì)設(shè)計(jì)的原則02詳細(xì)設(shè)計(jì)的原則在詳細(xì)設(shè)計(jì)過程中應(yīng)遵循以下原則:(1)由于詳細(xì)設(shè)計(jì)的藍(lán)圖是給其他人看的,所以模塊的邏輯描述要清晰易讀、正確可靠?!痹敿?xì)設(shè)計(jì)的原則(2)采用結(jié)構(gòu)化設(shè)計(jì)方法,改善控制結(jié)構(gòu),降低程序的復(fù)雜程度,從而提高程序的可讀性、可測(cè)試性、可維護(hù)性,基本內(nèi)容歸納如下。①

在程序中,應(yīng)盡量少使用GOTO語(yǔ)句,以確?!背绦蚪Y(jié)構(gòu)的獨(dú)立性。②

使用單入口單出口的控制結(jié)構(gòu),確保程序的靜態(tài)結(jié)構(gòu)與動(dòng)態(tài)執(zhí)行情況相一致,保證程序易理解。詳細(xì)設(shè)計(jì)的原則③

程序的控制結(jié)構(gòu)一般采用順序、選擇、循環(huán)三種結(jié)構(gòu),確保結(jié)構(gòu)簡(jiǎn)單。④

用自頂向下、逐步求精的方法完成程序設(shè)”計(jì)。結(jié)構(gòu)化程序設(shè)計(jì)的缺點(diǎn)是存儲(chǔ)容量和運(yùn)行時(shí)間要會(huì)有相應(yīng)的增加,但易讀,易維護(hù)。詳細(xì)設(shè)計(jì)的原則(3)選擇用恰當(dāng)?shù)墓ぞ邅砻枋龈髂K的算法?!庇脩艚缑娴脑O(shè)計(jì)03設(shè)計(jì)驅(qū)動(dòng)開發(fā)當(dāng)新用戶開始使用一個(gè)應(yīng)用程序時(shí),他們通常是對(duì)其有所期待的,而這種期待往往來自他們以往使用類似的應(yīng)用程序及操作系統(tǒng)的經(jīng)驗(yàn)。用戶會(huì)在潛意識(shí)中對(duì)應(yīng)用程序每個(gè)按鈕的作用、使用方式、工作邏輯及快捷鍵等做出一系列的猜測(cè),并期待他們所使用的應(yīng)用程序滿足這些預(yù)期。一旦用戶的期待得不到滿足,就會(huì)大大影響用戶的使用體驗(yàn)。設(shè)計(jì)驅(qū)動(dòng)開發(fā)軟件界面設(shè)計(jì)的好壞通常不僅僅是美觀與否的問題,一個(gè)精良的設(shè)計(jì)往往能讓應(yīng)用程序本身變得更加高效和易于使用,相反,一個(gè)糟糕的設(shè)計(jì)完全可能讓開發(fā)者在應(yīng)用上的其它努力付諸東流。因此,在現(xiàn)代應(yīng)用程序的開發(fā)過程中,用戶界面設(shè)計(jì)的地位越來越重要。對(duì)于開發(fā)者來說,用戶界面設(shè)計(jì)并不僅僅是“圖像”或“美學(xué)”設(shè)計(jì),而是應(yīng)用一系列簡(jiǎn)單而實(shí)用的準(zhǔn)則或策略來改善軟件易用性的一個(gè)步驟。目標(biāo)用戶群體在對(duì)一個(gè)新的軟件產(chǎn)品做需求分析和功能設(shè)計(jì)之前,必須要明確軟件所針對(duì)的用戶群體以及用戶群的具體特征,只有這樣才能設(shè)計(jì)并開發(fā)出對(duì)用戶有價(jià)值的功能。其實(shí),在用戶界面的設(shè)計(jì)中,“明確目標(biāo)用戶”同樣也是非常重要的一個(gè)環(huán)節(jié)。目標(biāo)用戶群體用戶本身的技能、個(gè)性、性別、年齡、所受教育及文化背景上的差異,用戶的基礎(chǔ)計(jì)算機(jī)操作水平,用戶在相關(guān)領(lǐng)域的專業(yè)知識(shí),都可能導(dǎo)致用戶對(duì)界面的需求的不同。例如,一個(gè)專業(yè)的軟件工程師和對(duì)計(jì)算機(jī)只有有限了解的普通用戶,所能夠接受的界面可能就完全不同。來自不同國(guó)家如中國(guó)和法國(guó)的用戶,對(duì)于同一種配色或圖案的理解也可能大相徑庭。目標(biāo)用戶群體用戶界面作為應(yīng)用程序和用戶交互的核心途徑,必須將不同用戶對(duì)界面的不同需求考慮在其中,這樣才能給用戶提供最好的使用體驗(yàn)。否則,即使軟件內(nèi)部的功能十分強(qiáng)大,如果界面使用起來體驗(yàn)非常糟糕,用戶也不會(huì)選擇使用它。簡(jiǎn)潔與清晰早期的軟件界面往往只是一系列功能和按鈕的堆砌,功能復(fù)雜的軟件往往伴隨著無數(shù)的菜單項(xiàng)和按鈕,讓人望而生畏;而如今,越來越多的軟件都在強(qiáng)調(diào)其“設(shè)計(jì)感”,軟件的功能層次感越來越清晰,功能分區(qū)越來越合理,而這其中最直觀的一點(diǎn)就是整體界面的設(shè)計(jì)越發(fā)顯得簡(jiǎn)潔、清晰、美觀。在不影響功能的前提下,很多不常用的按鈕和菜單項(xiàng)被隱藏,用戶的實(shí)際內(nèi)容得到強(qiáng)調(diào)。簡(jiǎn)潔與清晰在界面設(shè)計(jì)中,應(yīng)當(dāng)仔細(xì)斟酌每個(gè)界面元素的作用、重要性和交互方式,將重要的界面元素放置在顯著位置,不太重要的界面元素則降級(jí)到相對(duì)次要的位置,凸顯界面元素之間的層次感和邏輯感,避免對(duì)空間進(jìn)行羅列和堆疊。簡(jiǎn)潔與清晰此外,對(duì)于展示實(shí)際用戶內(nèi)容的界面(如圖片瀏覽應(yīng)用、文檔編輯應(yīng)用等),不應(yīng)使得軟件工具欄和其他輔助控件過多地占用用戶實(shí)際內(nèi)容的屏幕空間,或干擾用戶正常瀏覽應(yīng)用所展示的內(nèi)容。實(shí)現(xiàn)模型與心智模型從程序開發(fā)人員的角度出發(fā),把開發(fā)一個(gè)應(yīng)用程序所需要用到的技術(shù)解決方案,稱為這個(gè)程序的“實(shí)現(xiàn)模型”。例如,開發(fā)一個(gè)在線的物品交易平臺(tái),使用Python作為后端語(yǔ)言,HTML、CSS和JavaScript等作為前端語(yǔ)言,MySQL作為數(shù)據(jù)庫(kù)引擎,這些都屬于實(shí)現(xiàn)模型。實(shí)現(xiàn)模型與心智模型實(shí)現(xiàn)模型往往包含了復(fù)雜艱深的理論、技術(shù)和算法等內(nèi)容,這些內(nèi)容在開發(fā)過程中對(duì)開發(fā)者來說是至關(guān)重要的,但是卻不會(huì)被大多數(shù)用戶所了解。實(shí)現(xiàn)模型與心智模型與實(shí)現(xiàn)模型不同,軟件的真實(shí)用戶對(duì)該軟件用法和運(yùn)作方式的個(gè)人理解(或期望),則稱為“心智模型”。這類心智模型有助于用戶理解自己使用軟件的過程,預(yù)測(cè)某個(gè)操作的結(jié)果,并應(yīng)對(duì)出乎意料的情況。換句話說,心智模型能夠幫助用戶“自然地”使用一個(gè)程序。用戶擁有什么樣的心智模型取決于用戶個(gè)人的生活經(jīng)歷和知識(shí)結(jié)構(gòu)(如對(duì)計(jì)算機(jī)軟件技術(shù)的理解)。實(shí)現(xiàn)模型與心智模型心智模型可能是精巧的,也可能是簡(jiǎn)陋的;可能是真實(shí)的,也可能是想象中的。不過通常來說,大部分用戶的心智模型都是由一系列零碎的事實(shí)所構(gòu)建起來的,因此心智模型所反映的通常是一種膚淺的、不完善的理解,但這并不會(huì)妨礙用戶對(duì)軟件的學(xué)習(xí)和掌握。實(shí)現(xiàn)模型與心智模型例如,用戶敲擊鍵盤,屏幕上就會(huì)出現(xiàn)對(duì)應(yīng)的文字。用戶只需要明白“敲擊鍵盤”和“輸入字符”之間的對(duì)應(yīng)關(guān)系即可正常打字,完全無須理解這一操作背后的原理。設(shè)計(jì)的規(guī)范性在設(shè)計(jì)和開發(fā)中,“可用性”是衡量一個(gè)應(yīng)用程序用戶體驗(yàn)好壞的重要標(biāo)準(zhǔn)之一。具有良好的可用性,要求應(yīng)用具有以下三個(gè)特性。設(shè)計(jì)的規(guī)范性(1)容易學(xué)習(xí)和掌握。第一次使用該應(yīng)用程序時(shí),用戶是否可以輕易學(xué)會(huì)使用應(yīng)用程序的基本功能?如果一個(gè)程序的界面看起來十分復(fù)雜,或用戶需要花費(fèi)很長(zhǎng)時(shí)間才能掌握一個(gè)應(yīng)用程序的主要用法,他們很可能會(huì)放棄使用該應(yīng)用程序。設(shè)計(jì)的規(guī)范性(2)高效。用戶掌握了應(yīng)用程序的使用方式后,能否快速地利用該應(yīng)用程序完成相應(yīng)的任務(wù)?如果用戶使用一個(gè)應(yīng)用程序需要花費(fèi)相當(dāng)長(zhǎng)的時(shí)間,他們很可能會(huì)放棄使用該應(yīng)用程序。設(shè)計(jì)的規(guī)范性(3)令人愉悅。總體來說,使用一個(gè)應(yīng)用程序的體驗(yàn)是否愉快?如果用戶在使用一個(gè)應(yīng)用程序的過程中的體驗(yàn)不佳(例如,過小的文字、復(fù)雜的操作流程、不合理的交互方式或難看的用戶界面或圖標(biāo),都可能是用戶抱怨的原因),他們很可能會(huì)放棄使用該應(yīng)用程序。設(shè)計(jì)的規(guī)范性沒人喜歡使用復(fù)雜、難以掌握的應(yīng)用程序。為獲得良好的可用性,在設(shè)計(jì)和開發(fā)的每個(gè)步驟和每一輪迭代中,開發(fā)人員都應(yīng)該將軟件的目標(biāo)用戶作為核心,在實(shí)際使用環(huán)境中,以真實(shí)用戶的需求、偏好和習(xí)慣為導(dǎo)向,對(duì)產(chǎn)品的設(shè)計(jì)進(jìn)行不斷優(yōu)化。在這一過程中,應(yīng)該重點(diǎn)關(guān)注以下七個(gè)問題。設(shè)計(jì)的規(guī)范性①軟件的目標(biāo)用戶是怎樣一個(gè)群體?②用戶的實(shí)際需求有哪些?③用戶希望軟件具有哪些功能?④用戶在相關(guān)領(lǐng)域有哪些背景知識(shí)?設(shè)計(jì)的規(guī)范性⑤

為了使用軟件完成某項(xiàng)任務(wù),用戶需要得到哪些信息?這些信息應(yīng)該用什么方式呈現(xiàn)給用戶?⑥

根據(jù)現(xiàn)有設(shè)計(jì),用戶認(rèn)為的軟件使用方式和其真實(shí)使用方式是否一致?⑦

是否有特殊的用戶群體、需求、運(yùn)行環(huán)境需要額外考慮?設(shè)計(jì)的一致性在界面及交互設(shè)計(jì)中,追求一致性是非常重要的。它允許用戶將先前已經(jīng)建立的使用習(xí)慣和知識(shí)帶入到一個(gè)全新的應(yīng)用程序中。如果應(yīng)用程序的界面和交互設(shè)計(jì)不滿足一致性要求,用戶可能會(huì)感到困感,從而增加應(yīng)用程序的學(xué)習(xí)成本,增加誤操作的機(jī)會(huì),最終影響用戶的使用體驗(yàn)。根據(jù)一致性的范圍,可將其大致分為兩類:外部一致性和內(nèi)部一致性。設(shè)計(jì)的一致性每個(gè)操作系統(tǒng)都有其固有的操作模式及標(biāo)準(zhǔn)的用戶界面元素,一個(gè)設(shè)計(jì)良好的應(yīng)用程序應(yīng)當(dāng)遵循這些慣例,這就是“外部一致性”;一個(gè)軟件應(yīng)當(dāng)和其他軟件,乃至其所運(yùn)行的操作系統(tǒng)保持一致。有時(shí),某些設(shè)計(jì)決策在操作系統(tǒng)層面沒有固定的規(guī)范或慣例可供遵循,但在一個(gè)應(yīng)用程序內(nèi)部卻應(yīng)該保持統(tǒng)一,不應(yīng)產(chǎn)生歧義或自相矛盾,這就是“內(nèi)部一致性”。設(shè)計(jì)的一致性此外,在界面的樣式設(shè)計(jì)上,一個(gè)應(yīng)用程序也應(yīng)當(dāng)具有一個(gè)統(tǒng)一的風(fēng)格,包括顏色搭配和使用、控件樣式,字體、動(dòng)畫、陰影等各種設(shè)計(jì)元素的運(yùn)用。例如,如果軟件的一部分使用紅色表達(dá)“錯(cuò)誤”或“警告”的含義,那么一般來說就不應(yīng)當(dāng)同時(shí)在其他地方使用紅色來表達(dá)“正確”或“成功”的含義。設(shè)計(jì)的容錯(cuò)性良好的“容錯(cuò)性”允許用戶大膽地探索一個(gè)應(yīng)用程序的所有功能,因?yàn)榻^大部分操作都是可逆的、非破壞性的。如果用戶確信他們可以大膽的嘗試每個(gè)按鈕的用途而不用擔(dān)心他們的操作系統(tǒng)或數(shù)據(jù)被破壞,應(yīng)用程序的用戶體驗(yàn)會(huì)大大提高。設(shè)計(jì)的容錯(cuò)性此外,良好的“容錯(cuò)性”也會(huì)讓應(yīng)用程序顯得更加穩(wěn)定、可靠。如果用戶發(fā)現(xiàn)在一個(gè)應(yīng)用程序中并不會(huì)因?yàn)闊o意中的操作就產(chǎn)生嚴(yán)重錯(cuò)誤(如數(shù)據(jù)丟失或損毀),他們自然會(huì)更加信任這一應(yīng)用程序。詳細(xì)設(shè)計(jì)的工具04詳細(xì)設(shè)計(jì)的工具算法過程描述應(yīng)采用自然語(yǔ)言來表達(dá),這樣不熟悉軟件的人比較容易理解,但自然語(yǔ)言在方法和語(yǔ)義上往往具有多義性,因此,需要使用一些詳細(xì)設(shè)計(jì)的工具來進(jìn)行算法描述。詳細(xì)設(shè)計(jì)的工具詳細(xì)設(shè)計(jì)描述工具可以分為以下三類。(1)圖形工具。把過程的細(xì)節(jié)表示成一個(gè)圖的組成部分,邏輯構(gòu)造用具體的圖形來表示。包括程序流程圖、N-S圖和PAD圖;(2)列表工具。用一個(gè)表來表示過程的細(xì)節(jié),其中列出了各種操作及相應(yīng)的條件。包括判定表和判定樹;詳細(xì)設(shè)計(jì)的工具(3)語(yǔ)言工具。用類語(yǔ)言來表示過程的細(xì)節(jié),這種類語(yǔ)言很接近于編程語(yǔ)言。包括PDL語(yǔ)言。一種設(shè)計(jì)工具應(yīng)當(dāng)表現(xiàn)出控制的流程、處理功能、數(shù)據(jù)的組織以及其他方面的實(shí)現(xiàn)細(xì)節(jié),從而在編碼階段能把對(duì)設(shè)計(jì)的描述直接翻譯成程序代碼。程序流程圖程序流程圖又稱為程序框圖,它是軟件開發(fā)者最熟悉的一種算法表達(dá)工具,它獨(dú)立于任何一種程序設(shè)計(jì)語(yǔ)言,比較直觀和清晰地描述過程的控制流程,易于學(xué)習(xí)掌握,因此,程序流程圖至今仍是軟件開發(fā)者最普遍采用的一種工具。程序流程圖中使用的基本符號(hào)如圖5.1所示。(a)選擇(分支);(b)

注釋;(c)

預(yù)先定義的處理;(d)

多分支;(e)

開始或停止;(f

)

準(zhǔn)備;(g)循

環(huán)上界限;(h)循環(huán)下界限;(i)

虛線;(

j)

省略符;(k)并行方式;(l)

處理;(m)輸入輸出;(n)連接;(o)換頁(yè)連接;(p)控制流程序流程圖使用三種基本控制結(jié)構(gòu)如圖5.2所示。圖5.2程序的三種基本控制結(jié)構(gòu)例5.1:

將下列用PDL偽代碼表示的某種模塊的過程性描述改用程序流程圖表示。execute

process

aENDREPREPEAT

UNTILconditionX6execute

process

bIF

conditionX1THENBEGINELSE

BEGINexecute

process

hexecute

process

gENDexecute

process

fIF

conditionX4THENENDIFELSE

CASE

OF

X2WHENcondition

2

SELECTDOWHILEconditionX3execute

process

cREPEAT

UNTILconditionX5execute

process

i程序流程圖ENDDOWHENcondition

3

SELECT

processdWHENcondition

4

SELECT

processeENDCASEENDIFENDREPexecute

process

jEND程序流程圖解:圖5.3例5.1中PDL偽代碼對(duì)應(yīng)的程序流程圖程序流程圖程序流程圖的主要優(yōu)點(diǎn)是對(duì)控制流程的描繪很直觀,便于初學(xué)者掌握。程序流程圖流程圖也存在一些嚴(yán)重的不足,主要表現(xiàn)在利用流程圖使用的符號(hào)不夠規(guī)范,人們常常使用一些習(xí)慣性用法。特別是表示程序控制流程的箭頭,使用的靈活性極大,程序員可以不受任何約束,隨意轉(zhuǎn)移控制,這些問題常常很大程度地影響了程序質(zhì)量。程序流程圖為了消除這些不足,應(yīng)嚴(yán)格地定義流程圖所使用的符號(hào),不允許隨心所欲地畫出各種不規(guī)范的流程圖。盒圖Nassi和Shneiderman提出了一種符合結(jié)構(gòu)化程序設(shè)計(jì)原則的圖形描述工具,稱為盒圖,又稱為N-S圖(以兩個(gè)人的名字的第一個(gè)字母組成)。在N-S圖中,全部算法寫在一個(gè)大框圖內(nèi),這個(gè)大框圖由若干個(gè)小的基本框圖構(gòu)成,可以表示順序、選擇和循環(huán)三種基本控制結(jié)構(gòu),如圖5.4所示三種圖形結(jié)構(gòu)。(a)順序;(b)選擇;(c)CASE多分支;(d)循環(huán);(e)調(diào)用子程序A圖5.4盒圖的基本符號(hào)盒圖(1)順序型:在順序型結(jié)構(gòu)中先執(zhí)行A,后執(zhí)行B。(2)選擇型:在選擇型結(jié)構(gòu)中,如果條件P成立,可執(zhí)行T下面的內(nèi)容,當(dāng)條件P不成立時(shí),則執(zhí)行F下面的內(nèi)容;另一種選擇型結(jié)構(gòu)中,給出了多出口的判斷圖形表示,P為控制條件,根據(jù)P的取值相應(yīng)地執(zhí)行其值下面的各框內(nèi)容。盒圖(3)WHILE重復(fù)型:在WHILE重復(fù)型循環(huán)結(jié)構(gòu)中先判斷P的值,再執(zhí)行S,其中,P是循環(huán)條件,S是循環(huán)體;UNTIL重復(fù)型循環(huán)結(jié)構(gòu)中,先執(zhí)行S,然后判斷P的值。盒圖盒圖沒有箭頭,因此不允許隨意轉(zhuǎn)移控制。堅(jiān)持使用盒圖作為詳細(xì)設(shè)計(jì)的工具,可以使程序員逐步養(yǎng)成用結(jié)構(gòu)化的方式思考問題和解決問題的習(xí)慣。例5.2:將例5.1中用PDL偽代碼表示的某種模塊的過程性描述改用N-S圖表示。解:圖5.5例5.1中PDL偽代碼對(duì)應(yīng)的盒圖(N-S圖)PAD圖PAD圖(Problem

Analysis

Diagram),由日本日立公司1973年發(fā)明以后,已得到一定程度的推廣。它用二維樹形結(jié)構(gòu)的圖來表示程序的控制流,將這種圖翻譯成程序代碼比較容易。它既克服了傳統(tǒng)的流程圖不能清晰表現(xiàn)程序結(jié)構(gòu)的缺點(diǎn),又不像N-S圖那樣受到把全部程序約束在一個(gè)方框內(nèi)的限制,這就是其優(yōu)勢(shì)所在。PAD圖的基本符號(hào)如圖5.6所示。PAD圖(a)

順序;(b)選擇;(c)CASE多分支;(d)WHILE型循環(huán);(e)

UNTIL型循環(huán);(f

)

語(yǔ)句標(biāo)號(hào);(g)定義圖5.6盒圖(N-S圖)PAD圖PAD圖的優(yōu)點(diǎn)表現(xiàn)在如下六個(gè)方面。(1)使用PAD符號(hào)所設(shè)計(jì)出來的程序必然是結(jié)構(gòu)化程序。(2)PAD圖所描繪的程序結(jié)構(gòu)十分清晰。圖5.6中最左面的豎線是程序的主線,即第一層結(jié)構(gòu)。PAD圖(3)隨著程序?qū)哟蔚脑黾樱琍AD圖逐漸向右延伸,每增加一個(gè)層次,圖形向右擴(kuò)展一條豎線。PAD圖中豎線的總條數(shù)就是程序的層次數(shù)。PAD圖(4)用PAD圖表現(xiàn)程序邏輯,易讀、易懂、易記。PAD圖是二維樹形結(jié)構(gòu)的圖形,程序從圖中最左豎線上端的結(jié)點(diǎn)開始執(zhí)行,自上而下,從左向右順序執(zhí)行,遍歷所有結(jié)點(diǎn)。容易將PAD圖轉(zhuǎn)換成高級(jí)語(yǔ)言源程序,這種轉(zhuǎn)換可用軟件工具自動(dòng)完成,從而可省去人工編碼的工作,有利于提高軟件可靠性和軟件生產(chǎn)率。PAD圖(5)既可用于表示程序邏輯,也可用于描繪數(shù)據(jù)結(jié)構(gòu)。PAD圖(6)PAD圖的符號(hào)支持自頂向下、逐步求精方法的使用。開始時(shí)設(shè)計(jì)者可以定義一個(gè)抽象的程序,隨著設(shè)計(jì)工作的深入而使用def符號(hào)逐步增加細(xì)節(jié),直至完成詳細(xì)設(shè)計(jì)。如圖5.7所示是一個(gè)使用def符號(hào)逐步細(xì)化的示例。PAD圖(a)初始的PAD圖;(b)

使用def符號(hào)細(xì)化處理框P2圖5.7使用def符號(hào)逐步細(xì)化PAD圖PAD圖是面向高級(jí)程序設(shè)計(jì)語(yǔ)言的,為常用的高級(jí)程序設(shè)計(jì)語(yǔ)言提供了整套相應(yīng)的圖形符號(hào)。由于每種控制語(yǔ)句都有一個(gè)圖形符號(hào)與之對(duì)應(yīng),顯然將PAD圖轉(zhuǎn)換成與之對(duì)應(yīng)的高級(jí)語(yǔ)言程序比較容易。PAD圖PAD圖的執(zhí)行順序從最左主干線的上端的結(jié)點(diǎn)開始,自上而下依次執(zhí)行。每遇到判斷或循環(huán),就自左向右進(jìn)入下一層,從表示下一層的豎線上端開始執(zhí)行,直到該豎線下端,再返回上一層的豎線的轉(zhuǎn)入處。如此繼續(xù),直到執(zhí)行到主干線的下端為止。PAD圖例5.3:將例5.1中用PDL偽代碼表示的某種模塊的過程性描述改用PAD圖表示。解:圖5.8例5.1中PDL偽代碼對(duì)應(yīng)的PAD圖判定表與判定樹判定表與判定樹是一種列表設(shè)計(jì)工具,常用于條件嵌套的復(fù)雜判定情況的分析與設(shè)計(jì),以及多分支結(jié)構(gòu)代碼的設(shè)計(jì)與實(shí)現(xiàn)。判定表與判定樹(1)判定表判定用來描述一些不易用語(yǔ)言表達(dá)清楚或需要很大篇幅才能用語(yǔ)言表達(dá)清楚的加工邏輯。在某些數(shù)據(jù)處理問題中,其數(shù)據(jù)流程圖的處理需要依賴于多個(gè)邏輯條件的取值,這些取值的組合可能構(gòu)成多種不同情況,相應(yīng)地需要執(zhí)行不同的動(dòng)作。這種問題用結(jié)構(gòu)化語(yǔ)言來敘述很不方便,使用判定表或判定樹作為表示加工說明的工具是最合適的。一個(gè)判定表由四個(gè)部分組成,如表5.1所示。表5.1判定表的組成條件所指對(duì)象各種條件的組合所有的操作

在對(duì)應(yīng)的條件組合下,某個(gè)操作是否要執(zhí)行當(dāng)某個(gè)判定結(jié)構(gòu)依賴于較多的條件且有較多的取值時(shí),用判定表能夠把所有的條件組合一個(gè)不漏地表達(dá)出來,相應(yīng)地可以分析不同的條件組合應(yīng)該采取什么操作??梢员苊獬霈F(xiàn)在某種條件和取值下可能無相應(yīng)的操作,或有動(dòng)作卻不依賴某個(gè)條件和取值而存在的現(xiàn)象,從而幫助分析人員澄清問題,甚至可以發(fā)現(xiàn)用戶可能遺漏的、尚未提出的邏輯要求。判定表與判定樹例5.4:細(xì)化學(xué)生成績(jī)的獎(jiǎng)勵(lì)條件:學(xué)生每學(xué)期已修課程成績(jī)的比率。優(yōu)秀比率占70%以上,并且中以下所占比率小于15%,而且表現(xiàn)優(yōu)良的學(xué)生可以獲得一等獎(jiǎng)學(xué)金,表現(xiàn)一般的學(xué)生可以獲得二等獎(jiǎng)學(xué)金;優(yōu)秀比率占70%以上,中以下所占比率小于20%,表現(xiàn)優(yōu)良的學(xué)生可以獲得二等獎(jiǎng)學(xué)金,表現(xiàn)一般的學(xué)生可以獲得三等獎(jiǎng)學(xué)金;中以下所占比率小于20%,表現(xiàn)優(yōu)良的學(xué)生可以獲得三等獎(jiǎng)學(xué)金,表現(xiàn)一般的學(xué)生可以獲得四等獎(jiǎng)學(xué)金。解:表5.2用判定表給出學(xué)生成績(jī)的獎(jiǎng)勵(lì)的加工邏輯成績(jī)比率優(yōu)≥70%

Y

Y

Y

Y

N

N

N

N成績(jī)比率優(yōu)≥50%

Y

Y

Y

Y條

成績(jī)比率中≤15%

Y

Y

N

N

Y

Y

N

N件

成績(jī)比率中≤20%

Y

Y

Y

Y表現(xiàn)

優(yōu)良表現(xiàn)

一般一等獎(jiǎng)學(xué)金Y

N

Y

N

Y

N

Y

NN

Y

N

Y

N

Y

N

Y√操

二等獎(jiǎng)學(xué)金作

三等獎(jiǎng)學(xué)金四等獎(jiǎng)學(xué)金√

√√√√

√√判定表與判定樹例5.5:某校的課酬計(jì)算方案如下:(l)基本課酬為每節(jié)課10元;(2)如果班級(jí)人數(shù)超過40人,課酬增加:基本課酬×0.1;(3)如果班級(jí)人數(shù)超過60人,課酬增加:基本課酬×0.2;(4)如果教師是副教授,課酬增加:基本課酬×0.1;(5)如果教師是教授,課酬增加:基本課酬×0.2;(6)講師,課酬不增加;(7)助教,課酬減少:基本課酬×0.1。請(qǐng)用判定樹表達(dá)上述計(jì)算方案。解:表5.3用判定表給出課酬的加工邏輯1

2

3

4

5

6

7

8

9

10

11

12人數(shù)≤40

T

T

T

T40<人數(shù)≤60人數(shù)>60T

T

T

TT

T

T

T助教TTTTTTTTT講師T副教授教授TT表5.3用判定表給出課酬的加工邏輯課酬:9元/節(jié)

√課酬:10元/節(jié)

√課酬:11元/節(jié)課酬:12元/節(jié)課酬:13元/節(jié)課酬:14元/節(jié)√√√√√√√√√√判定表與判定樹綜合上述例子給出判定表的構(gòu)造步驟如下。①

列出所有基本條件,填寫判定表的左上限。在本例中,獎(jiǎng)學(xué)金的發(fā)放依據(jù)三個(gè)條件,分別是成績(jī)優(yōu)秀比率、成績(jī)中下比率、表現(xiàn)情況。②

列出所有的基本操作,填寫判定表的左下限。在本例中,獎(jiǎng)學(xué)金的發(fā)放分為4個(gè)等級(jí),分別為一、二、三、四等獎(jiǎng)學(xué)金。③

計(jì)算所有可能的、有意義條件組合,確定組合規(guī)則個(gè)數(shù),填寫判定表的右上限。在本例中3個(gè)條件均有2種取值,但因條件1與條件2只有其中一個(gè)條件的取值為Y時(shí),條件組合才有意義,所以規(guī)則個(gè)數(shù)應(yīng)該是2+2=4。判定表與判定樹綜合上述例子給出判定表的構(gòu)造步驟如下。①

列出所有基本條件,填寫判定表的左上限。在本例中,獎(jiǎng)學(xué)金的發(fā)放依據(jù)三個(gè)條件,分別是成績(jī)優(yōu)秀比率、成績(jī)中下比率、表現(xiàn)情況。②

列出所有的基本操作,填寫判定表的左下限。在本例中,獎(jiǎng)學(xué)金的發(fā)放分為4個(gè)等級(jí),分別為一、二、三、四等獎(jiǎng)學(xué)金。判定表與判定樹③

計(jì)算所有可能的、有意義條件組合,確定組合規(guī)則個(gè)數(shù),填寫判定表的右上限。在本例中3個(gè)條件均有2種取值,但因條件1與條件2只有其中一個(gè)條件的取值為Y時(shí),條件組合才有意義,所以規(guī)則個(gè)數(shù)應(yīng)該是2+2=4。判定表與判定樹④

將每一種組合指定的操作添加到右下限相應(yīng)的位置。⑤

簡(jiǎn)化規(guī)則,合并及刪除等價(jià)的操作。合并原則是:找出操作在同一行的,檢查上面的每一個(gè)條件是否影響該操作的執(zhí)行,如果條件不起作用,則可以合并等價(jià)操作,否則不能簡(jiǎn)化。判定表與判定樹例如,在本例中,獲得二等獎(jiǎng)學(xué)金的組合有3個(gè),經(jīng)過分析,我們發(fā)現(xiàn)優(yōu)秀率70%以上,中下比率小于15%,表現(xiàn)一般的獲得二等獎(jiǎng)學(xué)金;優(yōu)秀率70%以上,中下比率小于20%,表現(xiàn)優(yōu)良的獲得二等獎(jiǎng)學(xué)金;優(yōu)秀率50%以上,中下比率小于15%,表現(xiàn)優(yōu)良的獲得二等獎(jiǎng)學(xué)金。3個(gè)組合中每個(gè)條件都起作用所以不能化簡(jiǎn)。判定表與判定樹⑥

如果對(duì)判定表進(jìn)行了化簡(jiǎn),就需要將化簡(jiǎn)后的結(jié)果重新排列。判定表的優(yōu)點(diǎn)在于它能把復(fù)雜的情況按各種可能的情況逐一列舉出來,簡(jiǎn)明而且易于理解,也可以避免遺漏。它的不足在于無法表達(dá)重復(fù)執(zhí)行的動(dòng)作,如循環(huán)結(jié)構(gòu)等。判定表與判定樹(2)判定樹判定樹是用一種樹圖形方式來表示多個(gè)條件、多個(gè)取值所應(yīng)采取的動(dòng)作。判定樹分支表示各種不同的條件,隨著分支層次結(jié)構(gòu)的擴(kuò)充,各條件完成自身的取值。判定樹的葉子給出應(yīng)完成的動(dòng)作。例5.6:將例5.4的學(xué)生成績(jī)的獎(jiǎng)勵(lì)用判定樹表示出來。解:學(xué)生成績(jī)的獎(jiǎng)勵(lì)的判定樹如圖5.9所示。判定表與判定樹判定樹是判定表的變種,本質(zhì)完全一樣,所有用判定表能表達(dá)的問題都能用判定樹來表達(dá)。判定樹比判定表更直觀,用判定樹來描述具有多個(gè)條件的數(shù)據(jù)處理,更容易被用戶接受。過程設(shè)計(jì)語(yǔ)言過程設(shè)計(jì)語(yǔ)言(

Program

Design

Language,PDL)

也稱為偽碼,是一個(gè)籠統(tǒng)的名稱,現(xiàn)在有許多種不同的過程設(shè)計(jì)語(yǔ)言在使用。它是用正文形式表示數(shù)據(jù)和處理過程的設(shè)計(jì)工具。是一種結(jié)構(gòu)化的語(yǔ)言,是非形式化比較靈活的語(yǔ)言,用于描述模塊內(nèi)部過程的具體算法,以便在開發(fā)人員之間比較精確的進(jìn)行交流。過程設(shè)計(jì)語(yǔ)言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ǔ)言(通常是某種自然語(yǔ)言)的詞匯,同時(shí)卻使用另-種語(yǔ)言(某種結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言)的語(yǔ)法。過程設(shè)計(jì)語(yǔ)言PDL應(yīng)該具有下述特點(diǎn)。(1)關(guān)鍵字的固定語(yǔ)法,它提供了結(jié)構(gòu)化控制結(jié)構(gòu)、數(shù)據(jù)說明和模塊化的特點(diǎn)。為了使結(jié)構(gòu)清晰和可讀性好,通常在所有可能嵌套使用的控制結(jié)構(gòu)的頭和尾都有關(guān)鍵字,如if(或endif)等。(2)自然語(yǔ)言的自由語(yǔ)法,它描述處理特點(diǎn)。過程設(shè)計(jì)語(yǔ)言(3)數(shù)據(jù)說明的手段。應(yīng)該既包括簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)(例如變量和數(shù)組),又包括復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表或?qū)哟蔚臄?shù)據(jù)結(jié)構(gòu))。(4)模塊定義和調(diào)用的技術(shù),應(yīng)該提供各種接口描述模式。過程設(shè)計(jì)語(yǔ)言PDL作為一種設(shè)計(jì)工具有如下優(yōu)點(diǎn)。(1)可以作為注釋直接插在源程序中間。這樣做能促使維護(hù)人員在修改程序代碼的同時(shí)也相應(yīng)地修改PDL注釋,因此,有助于保持文檔和程序的致性,提高了文檔的質(zhì)量。過程設(shè)計(jì)語(yǔ)言(2)可以使用普通的正文編輯程序或文字處理系統(tǒng),很方便地完成PDL的書寫和編輯工作。(3)已經(jīng)有自動(dòng)處理程序存在,而且可以自動(dòng)由PDL生成程序代碼。過程設(shè)計(jì)語(yǔ)言PDL的缺點(diǎn)是不如圖形工具形象直觀,描述復(fù)雜的條件組合與動(dòng)作間的對(duì)應(yīng)關(guān)系時(shí),不如判定表清晰簡(jiǎn)單。過程設(shè)計(jì)語(yǔ)言過程描述語(yǔ)言是介于自然語(yǔ)言和形式語(yǔ)言之間的一種半形式化的語(yǔ)言,它在自然語(yǔ)言基礎(chǔ)上加了一些限定,使用有限的詞匯和語(yǔ)句來描述加工邏輯,其結(jié)構(gòu)可分成外層和內(nèi)層兩層。外層用來描述控制結(jié)構(gòu),采用順序、選擇、重復(fù)三種基本結(jié)構(gòu)。過程設(shè)計(jì)語(yǔ)言PDL的語(yǔ)法是開放式的,其外層語(yǔ)法是確定的,而內(nèi)層語(yǔ)法則不確定。外層語(yǔ)法描述控制結(jié)構(gòu),它用類似于一般程序設(shè)計(jì)語(yǔ)言控制結(jié)構(gòu)的關(guān)鍵字:例如:IF-THEN-ELSE

WHILE-

DO

REPEAT-UNTILDOCASE

DOWHILE

等表示。下面是PDL語(yǔ)言的三種形式。(2)選擇結(jié)構(gòu)過程設(shè)計(jì)語(yǔ)言

A

select

cond1Block1(1)順序結(jié)構(gòu)A

seqA

or

cond2B1ock2Block1A

or

cond3B1ock2Block3A

end其中,seq和end是關(guān)鍵字。Block3A

end其中,select、or和end是關(guān)鍵字,cond1、cond2和cood3是分別執(zhí)行Block1、Block2和Block3的條件。過程設(shè)計(jì)語(yǔ)言(3)重復(fù)結(jié)構(gòu)A

iter

until

condBlock1A

endA

iter

while

condBlock1A

end其中,iter、until、while和end是關(guān)鍵字,cond是條件。過程設(shè)計(jì)語(yǔ)言例5.7:下面是一個(gè)用PDL語(yǔ)言描述的統(tǒng)計(jì)單詞數(shù)目的例子。解:統(tǒng)計(jì)空格seq打開文件程序體end打印總數(shù)seq打印出空格總數(shù)打印總數(shù)end關(guān)閉文件讀入字符串Totalsum=0程序體iter

unti1文件結(jié)束……停止統(tǒng)計(jì)空格end過程設(shè)計(jì)語(yǔ)言程序首先是順序結(jié)構(gòu),共7條語(yǔ)句,其中程序體是循環(huán)結(jié)構(gòu)。PDL可以很好地表示嵌套結(jié)構(gòu)。過程設(shè)計(jì)語(yǔ)言結(jié)構(gòu)化語(yǔ)言、判定樹、判定表3種工具的適用范圍可概括如下。判定樹適用于10~15種行動(dòng)的一般復(fù)雜的決策,有時(shí)可將判定表轉(zhuǎn)換成判定樹,便于用戶檢查。判定表適合于多個(gè)條件的復(fù)雜組合。雖然判定表也適用于很多數(shù)目的行動(dòng)或條件組合,但數(shù)目龐大時(shí)使用也不方便。如果一個(gè)判定包含了一般順序執(zhí)行的動(dòng)作或循環(huán)執(zhí)行的動(dòng)作,則最好用結(jié)構(gòu)化語(yǔ)言表達(dá)。面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法05面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法Jackson開發(fā)方法是一種典型的面向數(shù)據(jù)結(jié)構(gòu)的分析與設(shè)計(jì)方法。由英國(guó)的Jackson提出,該方法特別適合于數(shù)據(jù)處理類的問題,如信息管理一類的軟件系統(tǒng)。面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法由于程序加工的是數(shù)據(jù)結(jié)構(gòu),程序表述的算法在很大程度上也依賴于作為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)。例如記錄、表等類型的數(shù)據(jù),分量之間是一種順序結(jié)構(gòu),程序處理必然是順序控制結(jié)構(gòu);數(shù)組、文件每個(gè)分量占據(jù)內(nèi)存相同且連續(xù)存放,程序處理必然是循環(huán)結(jié)構(gòu)。所以數(shù)據(jù)構(gòu)分層次,程序結(jié)構(gòu)也必然分層,數(shù)據(jù)結(jié)構(gòu)既影響程序結(jié)構(gòu)又影響程序的處理過程,面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法最終目標(biāo)是得出對(duì)程序處理過程的描述。Jackson方法簡(jiǎn)介Jackson開發(fā)方法是一種典型的面向數(shù)據(jù)結(jié)構(gòu)的分析與設(shè)計(jì)方法。由英國(guó)的Jackson提出,該方法特別適合于數(shù)據(jù)處理類的問題,如信息管理一類的軟件系統(tǒng)。由于程序加工的是數(shù)據(jù)結(jié)構(gòu),程序表述的算法在很大程度上也依賴于作為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)。例如記錄、表等類型的數(shù)據(jù),分量之間是一種順序結(jié)構(gòu),程序處理必然是順序控制結(jié)構(gòu);數(shù)組、文件每個(gè)分量占據(jù)內(nèi)存相同且連續(xù)存放,程序處理必然是循環(huán)結(jié)構(gòu)。所以數(shù)據(jù)構(gòu)分層次,程序結(jié)構(gòu)也必然分層,數(shù)據(jù)結(jié)構(gòu)既影響程序結(jié)構(gòu)又影響程序的處理過程,面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法最終目標(biāo)是得出對(duì)程序處理過程的描述。Jackson方法簡(jiǎn)介(1)Jackson圖Jackson方法面向數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),提供了自己的描述工具,這種用圖形描述數(shù)據(jù)結(jié)構(gòu)和程序結(jié)構(gòu)的圖形,稱為Jackson圖。Jackson圖既可以用來描述問題的數(shù)據(jù)結(jié)構(gòu),也可以描述每個(gè)實(shí)體執(zhí)行的動(dòng)作及其時(shí)序,產(chǎn)生一組描述實(shí)體進(jìn)程的Jackson結(jié)構(gòu)圖。數(shù)據(jù)結(jié)構(gòu)圖中的方框表示數(shù)據(jù),程序結(jié)構(gòu)圖中的方框表示模塊(過程或函數(shù)等)。圖5.10為Jackson結(jié)構(gòu)圖的三種基本結(jié)構(gòu)表示。Jackson方法簡(jiǎn)介(a)順序結(jié)構(gòu)(b)選擇結(jié)構(gòu)

(c)循環(huán)結(jié)構(gòu)Jackson方法簡(jiǎn)介①

順序結(jié)構(gòu)順序結(jié)構(gòu)的數(shù)據(jù)是由一個(gè)或多個(gè)數(shù)據(jù)元素組成,每個(gè)元素按確定次序出現(xiàn)一次,圖5.10(a)所示為順序結(jié)構(gòu)Jackson圖的一個(gè)例子,圖中,A由基本成分B、C、D這3個(gè)元素順序組成(每個(gè)元素只出現(xiàn)一次,出現(xiàn)的次序是B、C和D)。Jackson方法簡(jiǎn)介②

選擇結(jié)構(gòu)選擇結(jié)構(gòu)的數(shù)據(jù)包含兩個(gè)或多個(gè)數(shù)據(jù)元素,每次使用這個(gè)數(shù)據(jù)時(shí)按一定條件從這些數(shù)據(jù)元素中選擇一個(gè),圖5.10(b

)所示為3個(gè)條件中選擇一個(gè)結(jié)構(gòu)的Jackson圖。圖中,根據(jù)條件A是由B或C或D中的某一個(gè)。Jackson方法簡(jiǎn)介③

重復(fù)結(jié)構(gòu)重復(fù)結(jié)構(gòu)的數(shù)據(jù),根據(jù)使用時(shí)的條件由一個(gè)元素出現(xiàn)零次或多次構(gòu)成。圖5.10(c)所示為重復(fù)結(jié)構(gòu)的Jackson圖。圖中,A是由B出現(xiàn)N次(N≥0)組成(注意在B的右上角有星號(hào)做標(biāo)記)。Jackson方法簡(jiǎn)介Jackson圖的優(yōu)點(diǎn)如下。①

便于表示層次結(jié)構(gòu),而且是對(duì)結(jié)構(gòu)進(jìn)行自頂向下分解的有力工具;②形象直觀可讀性好;③

既能表示數(shù)據(jù)結(jié)構(gòu)也能表示程序結(jié)構(gòu)(因?yàn)榻Y(jié)構(gòu)程序設(shè)計(jì)也只使用上述三種基本結(jié)構(gòu))。Jackson方法簡(jiǎn)介(2)改進(jìn)的Jackson圖前面介紹的Jackson

圖存在一定的缺點(diǎn):用這種圖形工具表示選擇或重復(fù)結(jié)構(gòu)時(shí),選擇條件或循環(huán)結(jié)束條件不能直接在圖上表示出來,影響了圖的表達(dá)能力,也不易直接把圖翻譯成程序。此外,框之間連線為斜線,不易在行式打印機(jī)上輸出。為了解決上述問題,建議使用如圖5.11中給出的改進(jìn)的Jackson圖。Jackson方法簡(jiǎn)介圖5.11

改進(jìn)的Jackson圖Jackson方法簡(jiǎn)介圖5.11(a)所示為順序結(jié)構(gòu),B、C、D中任一個(gè)都不能是選擇出現(xiàn)或重復(fù)出現(xiàn)的數(shù)據(jù)元素(即不能是右上角有小圓或星號(hào)標(biāo)記的)。圖5.11(b)所示為選擇結(jié)構(gòu),S右面括號(hào)中的數(shù)字i是分支條件的編號(hào)。圖5.11(c)所示為可選結(jié)構(gòu),A或者是元素B或者不出現(xiàn)(可選結(jié)構(gòu)是選擇結(jié)構(gòu)的一種常見的特殊形式)。圖5.11(d)所示為重復(fù)結(jié)構(gòu),循環(huán)結(jié)束條件的編號(hào)為i。Jackson方法簡(jiǎn)介請(qǐng)注意,雖然Jackson圖和描繪軟件結(jié)構(gòu)的層次圖形式相當(dāng)類似,但是含義卻不相同:層次圖中的一個(gè)方框通常代表一個(gè)模塊;Jackson

圖即使在描繪程序結(jié)構(gòu)時(shí),一個(gè)方框也并不代表個(gè)模塊,通常一個(gè)方框只代表幾個(gè)語(yǔ)句。層次圖表現(xiàn)的是調(diào)用關(guān)系,通常一個(gè)模塊除了調(diào)用下級(jí)模塊外,還完成其他操作;Jackson圖表現(xiàn)的是組成關(guān)系,即一個(gè)方框中包括的操作僅僅由它下層框中的那些操作組成。Jackson方法Jackson結(jié)構(gòu)程序設(shè)計(jì)方法基本上由下述五個(gè)步驟組成。(1)分析并確定輸入數(shù)據(jù)和輸出數(shù)據(jù)的邏輯結(jié)構(gòu),并用Jackson圖描繪這些數(shù)據(jù)結(jié)構(gòu)。Jackson方法(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)系)。Jackson方法(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è)處理框(注意,如果這對(duì)數(shù)據(jù)單元在輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中所處的層次不同則和它們對(duì)應(yīng)的處理框在程序結(jié)構(gòu)圖中所處的層次與它們之中在數(shù)據(jù)結(jié)構(gòu)圖中層次低的那個(gè)對(duì)應(yīng))。Jackson方法②

根據(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)的處理框。總之,描繪程序結(jié)構(gòu)的Jackson圖應(yīng)該綜合輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)的層次關(guān)系而導(dǎo)出來。Jackson方法④

列出所有操作和條件(包括分支條件和循環(huán)結(jié)束條件),并且把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置。⑤

用偽碼表示程序。Jackson方法使用的偽碼和Jackson圖是完全對(duì)應(yīng)的,是和三種基本結(jié)構(gòu)對(duì)應(yīng)的偽碼。如表5.4所示為偽碼和Jackson圖的對(duì)應(yīng)關(guān)系。Jackson方法在導(dǎo)出程序結(jié)構(gòu)圖的過程中,由于改進(jìn)的Jackson圖規(guī)定在構(gòu)成順序結(jié)構(gòu)的元素中不能有重復(fù)出現(xiàn)或選擇出現(xiàn)的元素,因此可能需要增加中間層次的處理框。表5.4Jackson方法使用的偽碼和Jackson圖對(duì)應(yīng)關(guān)系和圖5.11(a)

所示的順序

A

seqB結(jié)構(gòu)對(duì)應(yīng)的偽碼,其中seq和end是關(guān)鍵字CDA

end和圖5.11(b)所示的選擇

A

select

cond1B結(jié)構(gòu)對(duì)應(yīng)的偽碼,其中select、or和end是關(guān)鍵字,condl、cond2和cond3分別是執(zhí)行B、C或D的條件A

or

cond2CA

or

cond3DA

end和圖5.11(c)

所示的重

A

iteruntil(或while)復(fù)結(jié)構(gòu)對(duì)應(yīng)的偽碼,其

cond中iter、until、while

B和end是關(guān)鍵字(重復(fù)

A

end結(jié)構(gòu)有until和whil兩種形式),cond是條件Jackson實(shí)例例5.8:在高考管理系統(tǒng)中,將考生的基本情況文件(簡(jiǎn)稱考生情況文件)和考生高考成績(jī)文件(簡(jiǎn)稱考分文件)合并成一個(gè)新文件。解:第1步:分析并確定輸入數(shù)據(jù)和輸出數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),并用Jackson圖描述這些數(shù)據(jù)結(jié)構(gòu),如圖5.12所示。Jackson實(shí)例(a)輸入數(shù)據(jù)結(jié)構(gòu)的Jackson圖(b)輸出數(shù)據(jù)結(jié)構(gòu)的Jackson圖圖5.12高考管理系統(tǒng)中輸入、輸出數(shù)據(jù)結(jié)構(gòu)的Jackson圖Jackson實(shí)例第2步:找出輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元。Jackson實(shí)例對(duì)地區(qū)考生進(jìn)行統(tǒng)計(jì),考生情況文件中的考生記錄與考分文件中的考生記錄的個(gè)數(shù)、排列次序是相同的??忌挛募械目忌涗浀膬?nèi)容來自于考生情況文件和考分文件的相應(yīng)記錄。因此,可以說輸入數(shù)據(jù)結(jié)構(gòu)中的“考生記錄”這個(gè)數(shù)據(jù)單元與輸出數(shù)據(jù)結(jié)構(gòu)中的“考生記錄”這個(gè)數(shù)據(jù)單元有對(duì)應(yīng)關(guān)系。在圖中用雙箭頭線標(biāo)出,如圖5.13所示。Jackson實(shí)例圖5.13找出輸入、輸出數(shù)據(jù)結(jié)構(gòu)中有對(duì)應(yīng)關(guān)系數(shù)據(jù)單元的Jackson圖Jackson實(shí)例第3步:把數(shù)據(jù)結(jié)構(gòu)圖轉(zhuǎn)換成程序結(jié)構(gòu)圖。把描述數(shù)據(jù)結(jié)構(gòu)的Jackson

圖(簡(jiǎn)稱數(shù)據(jù)結(jié)構(gòu)圖)轉(zhuǎn)換成描述程序結(jié)構(gòu)的Jackson

圖(簡(jiǎn)稱程序結(jié)構(gòu)圖)需要遵從以下3條規(guī)則。(1)按照在數(shù)據(jù)結(jié)構(gòu)圖中的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次,為每對(duì)有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元畫一個(gè)處理框。Jackson實(shí)例第3步:把數(shù)據(jù)結(jié)構(gòu)圖轉(zhuǎn)換成程序結(jié)構(gòu)圖。把描述數(shù)據(jù)結(jié)構(gòu)的Jackson

圖(簡(jiǎn)稱數(shù)據(jù)結(jié)構(gòu)圖)轉(zhuǎn)換成描述程序結(jié)構(gòu)的Jackson

圖(簡(jiǎn)稱程序結(jié)構(gòu)圖)需要遵從以下3條規(guī)則。(1)按照在數(shù)據(jù)結(jié)構(gòu)圖中的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次,為每對(duì)有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元畫一個(gè)處理框。(2)根據(jù)輸入數(shù)據(jù)結(jié)構(gòu)圖中剩余的每個(gè)數(shù)據(jù)單元所處的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次,分別為它們畫上對(duì)應(yīng)的處理框。Jackson實(shí)例(3)根據(jù)輸出數(shù)據(jù)結(jié)構(gòu)圖中剩余的每個(gè)數(shù)據(jù)單元所處的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次,分別為它們畫上對(duì)應(yīng)的處理框。根據(jù)以上規(guī)則,由圖5.13的數(shù)據(jù)結(jié)構(gòu)圖,畫出如圖5.14所示的程序結(jié)構(gòu)圖。Jackson實(shí)例圖5.14程序結(jié)構(gòu)圖。Jackson實(shí)例第4步:列出所有操作和條件,并且把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位值。列出操作和條件:(1)停止

(2)打開兩個(gè)輸入文件(3)建立輸出文件

(4)從輸入文件中各讀“一條記錄”(5)生成一條新記錄

(6)將新記錄寫入輸出文件(7)關(guān)閉全部文件

(8)文件結(jié)束Jackson實(shí)例把上述操作和條件分配到程序結(jié)構(gòu)圖的適當(dāng)位置。在改進(jìn)的Jackson圖中規(guī)定順序執(zhí)行的處理中,不允許混有重復(fù)執(zhí)行或選擇執(zhí)行的處理。因此,在“處理考生記錄”這個(gè)處理框上面,又增加了一個(gè)處理框“分析考生記錄”。最后得到如圖5.15所示的程序結(jié)構(gòu)圖。Jackson實(shí)例圖5.15把操作和條件分配到程序結(jié)構(gòu)圖的適當(dāng)位置Jackson實(shí)例第5步:用偽碼表示程序。下面是使用Jackson分析方法所使用的偽碼寫出的與圖5.14對(duì)應(yīng)的程序。產(chǎn)生新文件seq打開兩個(gè)輸入文件建立輸出文件從輸入文件中各讀一條記錄分析考生記錄iter

unil文件結(jié)束處理考生記錄seq產(chǎn)生準(zhǔn)考證號(hào)Jackson實(shí)例產(chǎn)生姓名產(chǎn)生通信地址產(chǎn)生考分生成一條新記錄將新記錄寫入輸出文件從輸入文件中各讀一條記錄處理考生記錄end關(guān)閉全部文件停止產(chǎn)生新文件end程序結(jié)構(gòu)復(fù)雜性的定量度量06McCabe方法McCabe方法是一種軟件質(zhì)量度量方法,它是基于對(duì)程序拓?fù)浣Y(jié)構(gòu)復(fù)雜度的分析。McCabe于1976年指出:一個(gè)程序的環(huán)形復(fù)雜程度取決于它的程序圖(流圖)

包含的判定結(jié)構(gòu)的數(shù)量。定義中所謂的環(huán)形復(fù)雜度是指根據(jù)程序控制流的復(fù)雜程度度量程序的復(fù)雜程度。程序圖是指退化的程序流程圖,僅僅描述程序的控制流程,完全不表現(xiàn)對(duì)數(shù)據(jù)的具體操作以及分支或循環(huán)的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論