版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、軟件工程導(dǎo)論(第5版)第第6 6章章 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)目標(biāo)目標(biāo)v設(shè)計(jì)人機(jī)交互界面v利用結(jié)構(gòu)化程序設(shè)計(jì)工具設(shè)計(jì)程序藍(lán)圖v計(jì)算程序藍(lán)圖復(fù)雜程度軟件生存周期軟件生存周期問題定義 軟件定義 可行性研究需求分析 總體設(shè)計(jì)系統(tǒng)設(shè)計(jì)詳細(xì)設(shè)計(jì)軟件生命周期 軟件開發(fā)編碼和單元測試系統(tǒng)實(shí)現(xiàn)綜合測試 運(yùn)行維護(hù)第第6 6章章 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)v詳細(xì)設(shè)計(jì)階段的根本目標(biāo)是確定應(yīng)該怎樣具體地實(shí)現(xiàn)所要求的系統(tǒng)。v詳細(xì)設(shè)計(jì)階段的任務(wù)還不是具體地編寫程序,而是要設(shè)計(jì)出程序的“藍(lán)圖”,以后程序員將根據(jù)這個(gè)藍(lán)圖寫出實(shí)際的程序代碼。v詳細(xì)設(shè)計(jì)的結(jié)果基本上決定了最終的程序代碼的質(zhì)量。v衡量程序的質(zhì)量的因素有: 邏輯是否正確 性能是否滿足
2、要求 是否容易閱讀和理解6.1 6.1 結(jié)構(gòu)程序設(shè)計(jì)結(jié)構(gòu)程序設(shè)計(jì)v3種基本的控制結(jié)構(gòu)是“順序”、“選擇”和“循環(huán)”。6.1 3種基本的控制結(jié)構(gòu)6.1 6.1 結(jié)構(gòu)程序設(shè)計(jì)結(jié)構(gòu)程序設(shè)計(jì)v結(jié)構(gòu)程序設(shè)計(jì)的經(jīng)典定義如下所述:“如果一個(gè)程序的代碼塊僅僅通過順序、選擇和循環(huán)這3種基本控制結(jié)構(gòu)進(jìn)行連接,并且每個(gè)代碼塊只有一個(gè)入口和一個(gè)出口,則稱這個(gè)程序是結(jié)構(gòu)化的。”v上述經(jīng)典定義過于狹隘了,結(jié)構(gòu)程序設(shè)計(jì)本質(zhì)上并不是無GO TO語句的編程方法,而是一種使程序代碼容易閱讀、容易理解的編程方法。v更全面的結(jié)構(gòu)程序設(shè)計(jì)的定義是:“結(jié)構(gòu)程序設(shè)計(jì)是盡可能少用GO TO語句的程序設(shè)計(jì)方法。最好僅在檢測出錯(cuò)誤時(shí)才使用GO
3、TO語句,而且應(yīng)該總是使用前向GO TO語句。”6.1 6.1 結(jié)構(gòu)程序設(shè)計(jì)結(jié)構(gòu)程序設(shè)計(jì)v為了實(shí)際使用方便起見,常常還允許使用DO-UNTIL和DO-CASE兩種控制結(jié)構(gòu)。v有時(shí)需要立即從循環(huán)(甚至嵌套的循環(huán))中轉(zhuǎn)移出來,如果允許使用LEAVE(或BREAK)結(jié)構(gòu),則不僅方便而且會使效率提高很多。圖6.2 其他常用的控制結(jié)構(gòu)6.1 6.1 結(jié)構(gòu)程序設(shè)計(jì)結(jié)構(gòu)程序設(shè)計(jì)v如需要立即跳出當(dāng)前循環(huán),可使用LEAVE或BREAK結(jié)構(gòu)。v經(jīng)典的結(jié)構(gòu)程序設(shè)計(jì): 只允許使用順序、IF_THEN_ELSE型分支和DO_WHILE型循環(huán)這三種基本控制結(jié)構(gòu)。v擴(kuò)展的結(jié)構(gòu)程序設(shè)計(jì): 還允許使用DO_CASE型多分支結(jié)構(gòu)
4、和DO_UNTIL型循環(huán)結(jié)構(gòu)。v修正的結(jié)構(gòu)程序設(shè)計(jì): 再加上允許使用LEAVE(或BREAK)結(jié)構(gòu)。6.2 6.2 人機(jī)界面設(shè)計(jì)人機(jī)界面設(shè)計(jì)v人機(jī)界面設(shè)計(jì)是接口設(shè)計(jì)的一個(gè)重要的組成部分。v對于交互式系統(tǒng)來說,人機(jī)界面設(shè)計(jì)和數(shù)據(jù)設(shè)計(jì)、體系結(jié)構(gòu)設(shè)計(jì)及過程設(shè)計(jì)一樣重要。近年來,人機(jī)界面在系統(tǒng)中所占的比例越來越大,在個(gè)別系統(tǒng)中人機(jī)界面的設(shè)計(jì)工作量甚至占總設(shè)計(jì)量的一半以上。v人機(jī)界面的設(shè)計(jì)質(zhì)量,直接影響用戶對軟件產(chǎn)品的評價(jià),從而影響軟件產(chǎn)品的競爭力和壽命,因此,必須對人機(jī)界面設(shè)計(jì)給予足夠重視。6.2.1 6.2.1 設(shè)計(jì)問題設(shè)計(jì)問題v在設(shè)計(jì)人機(jī)界面的過程中,幾乎總會遇到下述4個(gè)設(shè)計(jì)問題: 系統(tǒng)響應(yīng)時(shí)間
5、用戶幫助設(shè)施 出錯(cuò)信息處理 命令交互v許多設(shè)計(jì)者直到設(shè)計(jì)過程后期才開始考慮這些問題,這樣做往往導(dǎo)致出現(xiàn)不必要的設(shè)計(jì)反復(fù)、項(xiàng)目延期和用戶產(chǎn)生挫折感。最好在設(shè)計(jì)初期給予重視,此時(shí)修改容易、代價(jià)也低。6.2.1 6.2.1 設(shè)計(jì)問題設(shè)計(jì)問題1. 系統(tǒng)響應(yīng)時(shí)間v系統(tǒng)響應(yīng)時(shí)間指從用戶完成某個(gè)控制動(dòng)作(如點(diǎn)擊鼠標(biāo)),到軟件給出預(yù)期的響應(yīng)之間的這段時(shí)間。v系統(tǒng)響應(yīng)時(shí)間有兩個(gè)重要屬性,分別是長度和易變性。系統(tǒng)響應(yīng)時(shí)間過長或過短都不好。v易變性指系統(tǒng)響應(yīng)時(shí)間相對于平均響應(yīng)時(shí)間的偏差。即使系統(tǒng)響應(yīng)時(shí)間較長,響應(yīng)時(shí)間易變性低也有助于用戶建立起穩(wěn)定的工作節(jié)奏。6.2.1 6.2.1 設(shè)計(jì)問題設(shè)計(jì)問題2. 用戶幫助設(shè)施
6、 幾乎交互式系統(tǒng)的每個(gè)用戶都需要幫助,當(dāng)遇到復(fù)雜問題時(shí)甚至需要查看用戶手冊以尋找答案。v常見的幫助設(shè)施可分為集成的和附加的兩類。 集成的幫助設(shè)施從一開始就設(shè)計(jì)在軟件里面,可以縮短用戶獲得幫助的時(shí)間,增加界面的友好性。 附加的幫助設(shè)施是在系統(tǒng)建成后再添加到軟件中的,在多數(shù)情況下它實(shí)際上是一種查詢能力有限的聯(lián)機(jī)用戶手冊。v普遍認(rèn)為,集成的幫助設(shè)施優(yōu)于附加的幫助設(shè)施。6.2.1 6.2.1 設(shè)計(jì)問題設(shè)計(jì)問題v 具體設(shè)計(jì)幫助設(shè)施時(shí),必須解決下述的一系列問題:(1) 在用戶與系統(tǒng)交互期間,是否在任何時(shí)候都能獲得關(guān)于系統(tǒng)任何功能的幫助信息?有兩種選擇:提供部分功能的幫助信息和提供全部功能的幫助信息。(2)
7、 用戶怎樣請求幫助?有3種選擇:幫助菜單,特殊功能鍵和HELP命令。(3) 怎樣顯示幫助信息?有3種選擇:在獨(dú)立的窗口中,指出參考某個(gè)文檔(不理想)和在屏幕固定位置顯示簡短提示。(4) 用戶怎樣返回到正常的交互方式中?有兩種選擇:屏幕上的返回按鈕和功能鍵。(5) 怎樣組織幫助信息?有3種選擇:平面結(jié)構(gòu),信息的層次結(jié)構(gòu)和超文本結(jié)構(gòu)。6.2.1 6.2.1 設(shè)計(jì)問題設(shè)計(jì)問題3. 出錯(cuò)信息處理v出錯(cuò)信息和警告信息,是出現(xiàn)問題時(shí)交互式系統(tǒng)給出的“壞消息”。v出錯(cuò)信息設(shè)計(jì)得不好,將向用戶提供無用的甚至誤導(dǎo)的信息,反而會加重用戶的挫折感。v一般說來,交互式系統(tǒng)給出的出錯(cuò)信息或警告信息,應(yīng)該具有下述屬性。
8、(1) 信息應(yīng)該用用戶可以理解的術(shù)語描述問題。 (2) 信息應(yīng)該提供有助于從錯(cuò)誤中恢復(fù)的建設(shè)性意見。6.2.1 6.2.1 設(shè)計(jì)問題設(shè)計(jì)問題 (3) 信息應(yīng)該指出錯(cuò)誤可能導(dǎo)致哪些負(fù)面后果(例如,破壞數(shù)據(jù)文件),以便用戶檢查是否出現(xiàn)了這些問題,并在確實(shí)出現(xiàn)問題時(shí)及時(shí)解決。 (4) 信息應(yīng)該伴隨著聽覺上或視覺上的提示,例如,在顯示信息時(shí)同時(shí)發(fā)出警告鈴聲,或者信息用閃爍方式顯示,或者信息用明顯表示出錯(cuò)的顏色顯示。 (5) 信息不能帶有指責(zé)色彩,也就是說,不能責(zé)怪用戶。當(dāng)確實(shí)出現(xiàn)了問題的時(shí)候,有效的出錯(cuò)信息能提高交互式系統(tǒng)的質(zhì)量,減輕用戶的挫折感。6.2.1 6.2.1 設(shè)計(jì)問題設(shè)計(jì)問題4. 命令交互
9、v命令行曾經(jīng)是用戶和系統(tǒng)軟件交互的最常用的方式,并且也曾經(jīng)廣泛地用于各種應(yīng)用軟件中。v現(xiàn)在,面向窗口的、點(diǎn)擊和拾取方式的界面已經(jīng)減少了用戶對命令行的依賴,但是,許多高級用戶仍然偏愛面向命令行的交互方式。在多數(shù)情況下,用戶既可以從菜單中選擇軟件功能,也可以通過鍵盤命令序列調(diào)用軟件功能。6.2.1 6.2.1 設(shè)計(jì)問題設(shè)計(jì)問題在提供命令交互方式時(shí),必須考慮下列設(shè)計(jì)問題。 (1) 是否每個(gè)菜單選項(xiàng)都有對應(yīng)的命令? (2) 采用何種命令形式?有3種選擇:控制序列(例如,Ctrl+P),功能鍵和鍵入命令。 (3) 學(xué)習(xí)和記憶命令的難度有多大?忘記了命令怎么辦? (4) 用戶是否可以定制或縮寫命令?6.2
10、.2 6.2.2 設(shè)計(jì)過程設(shè)計(jì)過程v用戶界面設(shè)計(jì)是一個(gè)迭代的過程。 通常先利用用戶界面工具或用戶界面開發(fā)系統(tǒng)建立起用戶界面的原型 由用戶試用和評估,以確定其是否滿足用戶的需求 然后根據(jù)用戶意見進(jìn)行修改,直到用戶感到滿意,不需要再修改界面設(shè)計(jì)時(shí)為止6.2.3 6.2.3 人機(jī)界面設(shè)計(jì)指南人機(jī)界面設(shè)計(jì)指南v用戶界面設(shè)計(jì)主要依靠設(shè)計(jì)者的經(jīng)驗(yàn)。v總結(jié)眾多設(shè)計(jì)者的經(jīng)驗(yàn)得出的設(shè)計(jì)指南,有助于設(shè)計(jì)者設(shè)計(jì)出友好、高效的人機(jī)界面。 1.一般交互指南 2.信息顯示指南 3.數(shù)據(jù)輸入指南6.2.3 6.2.3 人機(jī)界面設(shè)計(jì)指南人機(jī)界面設(shè)計(jì)指南1.一般交互指南 (1) 保持一致性。 (2) 提供有意義的反饋。 (3)
11、 在執(zhí)行有較大破壞性的動(dòng)作之前要求用戶確認(rèn)。 (4)允許取消絕大多數(shù)操作。 (5) 減少在兩次操作之間必須記憶的信息量。6.2.3 6.2.3 人機(jī)界面設(shè)計(jì)指南人機(jī)界面設(shè)計(jì)指南2.信息顯示指南 (1)只顯示與當(dāng)前內(nèi)容有關(guān)的信息。 (2)窗口顯示的一致性。 (3)產(chǎn)生有意義的出錯(cuò)信息。 (4)必要時(shí),用圖形化的方式顯示信息。6.2.3 6.2.3 人機(jī)界面設(shè)計(jì)指南人機(jī)界面設(shè)計(jì)指南3.數(shù)據(jù)輸入指南 (1)盡量減少用戶的輸入動(dòng)作,下拉框就是一個(gè)很好的選擇。 (2)允許編輯。 (3)重要操作提示確認(rèn)。 (4)交互的方式應(yīng)該靈活,允許用戶選擇喜歡的輸入方式。 (5)提示輸入的格式和范圍。6.3 6.3
12、過程設(shè)計(jì)的工具過程設(shè)計(jì)的工具v描述程序處理過程的工具稱為過程設(shè)計(jì)的工具,有三種:圖形、表格和語言。 圖形工具:如程序流程圖、盒圖(N-S圖)和PAD圖 表格工具:如判定表 過程設(shè)計(jì)語言:是一種用于描述模塊算法設(shè)計(jì)和處理細(xì)節(jié)的語言工具。v任何一種過程設(shè)計(jì)工具都必須提供對設(shè)計(jì)的無歧義的描述,即應(yīng)該能指明控制流程、處理功能、數(shù)據(jù)組織以及其它方面的實(shí)現(xiàn)細(xì)節(jié),從而在編碼階段能把對設(shè)計(jì)的描述直接翻譯成程序代碼。6.3.1 6.3.1 程序流程圖程序流程圖( (程序框圖程序框圖) )v程序流程圖是歷史最悠久、使用最廣泛的描述過程設(shè)計(jì)的方法,也是用得最混亂的一種方法。v程序流程圖中使用的各種符號:6.3.1
13、6.3.1 程序流程圖程序流程圖例如:計(jì)算1-100的和.#include stdio.h void main() int i,Sum; Sum=0; for(i=1;i=100;i+) Sum+=i; printf(總和為%dn,Sum); 6.3.1 6.3.1 程序流程圖程序流程圖v程序流程圖的主要缺點(diǎn)如下:(1) 程序流程圖本質(zhì)上不是逐步求精的好工具,它誘使程序員過早地考慮程序的控制流程,而不去考慮程序的全局結(jié)構(gòu)。(2) 程序流程圖中用箭頭代表控制流,因此程序員不受任何約束,可以完全不顧結(jié)構(gòu)程序設(shè)計(jì)的精神,隨意轉(zhuǎn)移控制。(3) 程序流程圖不易表示數(shù)據(jù)結(jié)構(gòu)。6.3.1 6.3.1 程序流
14、程圖程序流程圖v 例:畫出下列偽程序的程序流程圖。 START IF p THEN WHILE q DO f END DO ELSE g n END IF STOP6.3.1 6.3.1 盒圖盒圖(N-S(N-S圖圖) )vN-S圖特點(diǎn): (1) 功能域(即,一個(gè)特定控制結(jié)構(gòu)的作用域)明確,可以從盒圖上一眼就看出來。 (2) 沒有箭頭,不可能任意轉(zhuǎn)移控制。 (3) 很容易確定局部和全程數(shù)據(jù)的作用域。 (4) 很容易表現(xiàn)嵌套關(guān)系,也可以表示模塊的層次結(jié)構(gòu)。6.3.1 6.3.1 盒圖盒圖(N-S(N-S圖圖) )圖6.4 盒圖的基本符號6.3.1 6.3.1 程序流程圖程序流程圖v 例:畫出下列
15、偽程序的盒圖。 START IF p THEN WHILE q DO f END DO ELSE g n END IF STOP6.3.1 6.3.1 程序流程圖程序流程圖v 例:畫出下列偽程序的盒圖。 g n While p do if q then a1 a2 else while r do b1 b2 enddo endifenddo6.3.3 PAD6.3.3 PAD圖圖( (問題分析圖問題分析圖) )vPAD圖用二維樹形結(jié)構(gòu)的圖來表示程序的控制流,將這種圖翻譯成程序代碼比較容易。 圖中最左邊的豎線是程序的主線,即第一層結(jié)構(gòu) 隨著程序?qū)哟蔚脑黾?,PAD圖逐漸向右延伸,每增加一個(gè)層次,圖
16、形向右擴(kuò)展一條豎線 PAD圖中豎線的總條數(shù)就是程序的層次數(shù)6.3.3 PAD6.3.3 PAD圖圖( (問題分析圖問題分析圖) )vPAD圖的基本符號有:6.3.3 PAD6.3.3 PAD圖圖( (問題分析圖問題分析圖) )vPAD圖的主要優(yōu)點(diǎn): 使用PAD符號設(shè)計(jì)出來的程序必然是結(jié)構(gòu)化程序。 PAD圖所描繪的程序結(jié)構(gòu)十分清晰。 用PAD圖表現(xiàn)程序邏輯,易讀、易懂、易記。 程序從圖中最左邊豎線上端的結(jié)點(diǎn)開始執(zhí)行,自上而下,從左向右順序執(zhí)行,遍歷所有結(jié)點(diǎn) PAD圖易于向高級語言轉(zhuǎn)換。 PAD圖的符號支持自頂向下、逐步求精方法的使用。 開始設(shè)計(jì)者可以定義一個(gè)抽象的程序,隨著設(shè)計(jì)工作的深入而使用d
17、ef符號逐步增加細(xì)節(jié),直至完成詳細(xì)設(shè)計(jì)。 6.3.3 PAD6.3.3 PAD圖圖( (問題分析圖問題分析圖) )圖6.6 使用PAD圖提供的定義功能來逐步求精的例子6.3.3 PAD6.3.3 PAD圖圖( (問題分析圖問題分析圖) )v 例:畫出下列偽程序的PAD圖。 START IF p THEN WHILE q DO f END DO ELSE g n END IF STOP6.3.3 PAD6.3.3 PAD圖圖( (問題分析圖問題分析圖) )v 例:畫出下列偽程序的PAD圖。 g n While p do if q then a1 a2 else while r do b1 b2
18、enddo endifenddo6.3.4 6.3.4 判定表判定表v當(dāng)算法中包含多重嵌套的條件選擇時(shí),用程序流程圖、盒圖、PAD圖、PDL都不易清楚地描述。然而判定表卻能夠清晰地表示復(fù)雜的條件組合與應(yīng)做的動(dòng)作之間的對應(yīng)關(guān)系。v一張判定表由4部分組成: 左上部列出所有條件 左下部是所有可能做的動(dòng)作 右上部是表示各種條件組合的一個(gè)矩陣 右下部是和每種條件組合相對應(yīng)的動(dòng)作6.3.4 6.3.4 判定表判定表v假設(shè)某航空公司規(guī)定,乘客可以免費(fèi)托運(yùn)重量不超過30公斤的行李。v當(dāng)行李重量超過30公斤時(shí): 對頭等艙的國內(nèi)乘客超重部分每公斤收費(fèi)4元; 對其他艙的國內(nèi)乘客超重部分每公斤收費(fèi)6元; 對外國乘客超
19、重部分每公斤收費(fèi)比國內(nèi)乘客多一倍; 對殘疾乘客超重部分每公斤收費(fèi)比正常乘客少一半。6.3.4 6.3.4 判定表判定表6.3.4 6.3.4 判定表判定表v優(yōu)點(diǎn):判定表能夠簡潔而又無歧義地描述處理規(guī)則。v缺點(diǎn):判定表并不適于作為一種通用的設(shè)計(jì)工具,沒有一種簡單的方法使它能同時(shí)清晰地表示順序和重復(fù)等處理特性。6.3.5 6.3.5 判定樹判定樹v判定表雖然能清晰地表示復(fù)雜的條件組合與應(yīng)做的動(dòng)作之間的對應(yīng)關(guān)系,但其含義卻不是一眼就能看出來的,初次接觸這種工具的人理解它需要有一個(gè)簡短的學(xué)習(xí)過程。v判定樹是判定表的變種,它能清晰地表示復(fù)雜的條件組合與應(yīng)做的動(dòng)作之間的對應(yīng)關(guān)系。v優(yōu)點(diǎn):它的形式簡單到不需
20、任何說明,一眼就可以看出其含義,因此易于掌握和使用。6.3.5 6.3.5 判定樹判定樹6.3.6 6.3.6 過程設(shè)計(jì)語言過程設(shè)計(jì)語言( (偽碼偽碼) )v過程設(shè)計(jì)語言(PDL)是用正文形式表示數(shù)據(jù)和處理過程的設(shè)計(jì)工具。vPDL具有嚴(yán)格的關(guān)鍵字外部語法,用于定義控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)vPDL表示實(shí)際操作和條件的內(nèi)部語法通常又是靈活自由的,可以適應(yīng)各種工程項(xiàng)目的需要。v一般說來,PDL是一種“混雜”語言,它使用一種語言的詞匯,同時(shí)卻使用另一種語言(某種結(jié)構(gòu)化的程序設(shè)計(jì)語言)的語法。6.3.6 6.3.6 過程設(shè)計(jì)語言過程設(shè)計(jì)語言( (偽碼偽碼) )PROCEDURE SumBegin Let th
21、e value of Sum be 0 Let the value of i be 1 REPEATE while i=100 s=s+i i=i+1 ENDREPEND Sum6.3.6 6.3.6 過程設(shè)計(jì)語言過程設(shè)計(jì)語言( (偽碼偽碼) )vPDL作為一種設(shè)計(jì)工具有如下一些優(yōu)點(diǎn): (1) 可以作為注釋直接插在源程序中間。這樣做能促使維護(hù)人員在修改程序代碼的同時(shí)也相應(yīng)地修改PDL注釋,因此有助于保持文檔和程序的一致性,提高了文檔的質(zhì)量。 (2) 可以使用普通的正文編輯程序或文字處理系統(tǒng),很方便地完成PDL的書寫和編輯工作。 (3) 已經(jīng)有自動(dòng)處理程序存在,而且可以自動(dòng)由PDL生成程序代碼。
22、vPDL的缺點(diǎn)是不如圖形工具形象直觀,描述復(fù)雜的條件組合與動(dòng)作間的對應(yīng)關(guān)系時(shí),不如判定表清晰簡單。6.4 6.4 面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法v面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法,根據(jù)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)程序處理過程的方法。v數(shù)據(jù)結(jié)構(gòu)既影響程序的結(jié)構(gòu)又影響程序的處理過程,重復(fù)出現(xiàn)的數(shù)據(jù)通常由具有循環(huán)控制結(jié)構(gòu)的程序來處理,選擇數(shù)據(jù)要用帶有分支控制結(jié)構(gòu)的程序來處理。6.4 6.4 面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法v面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法的最終目標(biāo)是得出對程序處理過程的描述。此方法最適合于詳細(xì)設(shè)計(jì)階段使用。在完成了軟件結(jié)構(gòu)設(shè)計(jì)之后,可以使用面向數(shù)據(jù)結(jié)構(gòu)的方法來設(shè)計(jì)每個(gè)模塊的處理過程。vJac
23、kson方法是最著名的面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法。v使用面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法,首先需要分析確定數(shù)據(jù)結(jié)構(gòu),并且用適當(dāng)?shù)墓ぞ撸↗ackson圖)清晰地描繪數(shù)據(jù)結(jié)構(gòu)。6.4 6.4 面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法v6.4.1 Jackson圖v程序中數(shù)據(jù)元素彼此間的邏輯關(guān)系卻只有順序、選擇和重復(fù)3類,對應(yīng)的邏輯數(shù)據(jù)結(jié)構(gòu)也有3類。1.順序結(jié)構(gòu) 順序結(jié)構(gòu)的數(shù)據(jù)由一個(gè)或多個(gè)數(shù)據(jù)元素組成,每個(gè)元素按確定次序出現(xiàn)一次。圖6.8 A由B、C、D 3個(gè)元素順序組成6.4.1 Jackson6.4.1 Jackson圖圖2.選擇結(jié)構(gòu) 選擇結(jié)構(gòu)的數(shù)據(jù)包含兩個(gè)或多個(gè)數(shù)據(jù)元素,每次使用這個(gè)數(shù)據(jù)時(shí)按一定條件從這
24、些數(shù)據(jù)元素中選擇一個(gè)。圖6.9 根據(jù)條件A是B或C或D中的某一個(gè)6.4.1 Jackson6.4.1 Jackson圖圖3.重復(fù)結(jié)構(gòu) 重復(fù)結(jié)構(gòu)的數(shù)據(jù),根據(jù)使用時(shí)的條件由一個(gè)數(shù)據(jù)元素出現(xiàn)零次或多次構(gòu)成。圖6.10 A由B出現(xiàn)N次(N0)組成注意:B的右上角有星號標(biāo)記6.4.1 Jackson6.4.1 Jackson圖圖vJackson圖有下述優(yōu)點(diǎn): 便于表示層次結(jié)構(gòu),而且是對結(jié)構(gòu)進(jìn)行自頂向下分解的有力工具; 形象直觀可讀性好; 既能表示數(shù)據(jù)結(jié)構(gòu)也能表示程序結(jié)構(gòu)(因?yàn)榻Y(jié)構(gòu)程序設(shè)計(jì)也只使用上述3種基本控制結(jié)構(gòu))。vJackson圖的缺點(diǎn): 選擇/循環(huán)條件不能直接在圖上表示出來,影響圖的表達(dá)能力 不
25、易直接把圖翻譯成程序 不易在打印機(jī)上輸出6.4.2 6.4.2 改進(jìn)的改進(jìn)的JacksonJackson圖圖順序結(jié)構(gòu)選擇結(jié)構(gòu),i為分支條件編號可選結(jié)構(gòu)重復(fù)結(jié)構(gòu),結(jié)束條件編號為i6.4.2 6.4.2 改進(jìn)的改進(jìn)的JacksonJackson圖圖vJackson圖實(shí)質(zhì)上是對層次方框圖(是描繪數(shù)據(jù)結(jié)構(gòu)的形式化工具)的一種精化。vJackson圖和描繪軟件結(jié)構(gòu)的層次圖形式相當(dāng)類似,但是含義卻很不相同。 層次圖中一個(gè)方框代表一個(gè)模塊;而Jackson圖中一個(gè)方框只代表幾個(gè)語句; 層次圖表現(xiàn)的是調(diào)用關(guān)系;而Jackson圖表現(xiàn)的是組成關(guān)系。6.4.3 Jackson6.4.3 Jackson方法方法v
26、Jackson方法是面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法。vJackson方法定義了一組以數(shù)據(jù)結(jié)構(gòu)為指導(dǎo)的映射過程,它根據(jù)輸入、輸出的數(shù)據(jù)結(jié)構(gòu),按一定的規(guī)則映射成軟件的過程描述,即程序結(jié)構(gòu)。vJackson結(jié)構(gòu)程序設(shè)計(jì)方法基本上由下述5個(gè)步驟組成:v第一步 分析并確定輸入數(shù)據(jù)和輸出數(shù)據(jù)的邏輯結(jié)構(gòu),并用Jackson圖描繪這兩組數(shù)據(jù)結(jié)構(gòu)。v第二步 找出輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對應(yīng)關(guān)系的數(shù)據(jù)單元。6.4.3 Jackson6.4.3 Jackson方法方法v所謂有對應(yīng)關(guān)系是指有直接的因果關(guān)系,在程序中可以同時(shí)處理的數(shù)據(jù)單元(對于重復(fù)出現(xiàn)的數(shù)據(jù)單元必須重復(fù)的次序和次數(shù)都相同才可能有對應(yīng)關(guān)系)。v輸出數(shù)據(jù)總是
27、通過對輸入數(shù)據(jù)的處理而得到的,因此在輸入輸出數(shù)據(jù)結(jié)構(gòu)最高層次的兩個(gè)單元總是有對應(yīng)關(guān)系的。6.4.3 Jackson6.4.3 Jackson方法方法v第三步 用下述3條規(guī)則從描繪數(shù)據(jù)結(jié)構(gòu)的Jackson圖導(dǎo)出描繪程序結(jié)構(gòu)的Jackson圖: 第一,為每對有對應(yīng)關(guān)系的數(shù)據(jù)單元,按照它們在數(shù)據(jù)結(jié)構(gòu)圖中的層次在程序結(jié)構(gòu)圖的相應(yīng)層次畫一個(gè)處理框(注意,如果這對數(shù)據(jù)單元在輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中所處的層次不同,則和它們對應(yīng)的處理框在程序結(jié)構(gòu)圖中所處的層次與它們之中在數(shù)據(jù)結(jié)構(gòu)圖中層次低的那個(gè)對應(yīng)); 第二,根據(jù)輸入數(shù)據(jù)結(jié)構(gòu)中剩余的每個(gè)數(shù)據(jù)單元所處的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次分別為它們畫上對應(yīng)的處理框
28、;6.4.3 Jackson6.4.3 Jackson方法方法 第三,根據(jù)輸出數(shù)據(jù)結(jié)構(gòu)中剩余的每個(gè)數(shù)據(jù)單元所處的層次,在程序結(jié)構(gòu)圖的相應(yīng)層次分別為它們畫上對應(yīng)的處理框。 在導(dǎo)出程序結(jié)構(gòu)圖的過程中,由于改進(jìn)的Jackson圖規(guī)定在構(gòu)成順序結(jié)構(gòu)的元素中不能有重復(fù)出現(xiàn)或選擇出現(xiàn)的元素,因此可能需要增加中間層次的處理框。v第四步 列出所有操作和條件(包括分支條件和循環(huán)結(jié)束條件),并且把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置。v第五步 用偽碼表示程序。6.4.3 Jackson6.4.3 Jackson方法方法vJackson方法中使用的偽碼和Jackson圖是完全對應(yīng)的,下面是和3種基本結(jié)構(gòu)對應(yīng)的偽碼。 和圖
29、6.11(a)所示的順序結(jié)構(gòu)對應(yīng)的偽碼,其中seq和end是關(guān)鍵字:A seqBCDAend6.4.3 Jackson6.4.3 Jackson方法方法 和圖6.11(b)所示的選擇結(jié)構(gòu)對應(yīng)的偽碼,其中select、or和end是關(guān)鍵字,cond1、cond2和cond3分別是執(zhí)行B、C或D的條件:A select cond1BA or cond2CA or cond3DA end6.4.3 Jackson6.4.3 Jackson方法方法 和圖6.11(d)所示重復(fù)結(jié)構(gòu)對應(yīng)的偽碼,其中iter、until、while和end是關(guān)鍵字,cond是條件:A iter until(或while)
30、condBA end6.4.3 Jackson6.4.3 Jackson方法方法v下面結(jié)合一個(gè)例子說明Jackson結(jié)構(gòu)程序設(shè)計(jì)方法v一個(gè)正文文件由若干個(gè)記錄組成,每個(gè)記錄是一個(gè)字符串。 要求統(tǒng)計(jì)每個(gè)記錄中空格字符的個(gè)數(shù),以及文件中空格字符的總個(gè)數(shù)。 要求的輸出數(shù)據(jù)格式是,每復(fù)制一行輸入字符串之后,另起一行印出這個(gè)字符串中的空格數(shù),最后印出文件中空格的總個(gè)數(shù)。6.4.3 Jackson6.4.3 Jackson方法方法v第一步 分析并確定輸入數(shù)據(jù)和輸出數(shù)據(jù)的邏輯結(jié)構(gòu),并用Jackson圖描繪這兩組數(shù)據(jù)結(jié)構(gòu)。 對于統(tǒng)計(jì)空格這個(gè)簡單例子而言,其輸入和輸出數(shù)據(jù)的結(jié)構(gòu)分別為:6.4.3 Jackson
31、6.4.3 Jackson方法方法6.4.3 Jackson6.4.3 Jackson方法方法v第二步 找出輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中有對應(yīng)關(guān)系的數(shù)據(jù)單元。上圖中用一對虛線箭頭把有對應(yīng)關(guān)系的數(shù)據(jù)單元連接起來6.4.3 Jackson6.4.3 Jackson方法方法v第三步 用3條規(guī)則從描繪數(shù)據(jù)結(jié)構(gòu)的Jackson圖導(dǎo)出描繪程序結(jié)構(gòu)的Jackson圖 對于統(tǒng)計(jì)空格的例子,得到的程序結(jié)構(gòu)圖如下:6.4.3 Jackson6.4.3 Jackson方法方法v第四步 列出所有操作和條件(包括分支條件和循環(huán)結(jié)束條件),并且把它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置。 對于統(tǒng)計(jì)空格的例子,需要的全部操作和條件如
32、下:(1)停止 (2)打開文件 (3)關(guān)閉文件 (4)印出字符串(5)印出空格數(shù)目 (6)印空格總數(shù) (7)sum:=sum+1 (8)totalsum:=totalsum+sum(9)讀入字符串 (10)sum:=0(11)totalsum:=0 (12)pointer:=1(13)pointer:=pointer+1 I(1)文件結(jié)束I(2)字符串結(jié)束 S(3)字符是空格6.4.3 Jackson6.4.3 Jackson方法方法 把這些操作和條件分配到程序結(jié)構(gòu)圖的適當(dāng)位置,結(jié)果如下圖:6.4.3 Jackson6.4.3 Jackson方法方法v第五步 用偽碼表示程序。 因?yàn)镴ackso
33、n使用的偽碼和Jackson圖之間存在簡單的對應(yīng)關(guān)系,所以從圖6.14很容易得出下面的偽碼:6.4.3 Jackson6.4.3 Jackson方法方法統(tǒng)計(jì)空格統(tǒng)計(jì)空格seq打開文件打開文件讀入字符串讀入字符串totalsum =0程序體程序體iter until文件結(jié)束文件結(jié)束 處理字符串處理字符串seq印字符串印字符串seq印出字符串印出字符串印字符串印字符串endsum =0pointer =1分析字符串分析字符串iter until字符串結(jié)束字符串結(jié)束 分析字符分析字符select字符是空格字符是空格6.4.3 Jackson6.4.3 Jackson方法方法處理空格處理空格seq s
34、um =sum+1 pointer =pointer+1處理空格處理空格end 分析字符分析字符or字符不是空格字符不是空格 處理非空格處理非空格seq pointer =pointer+1處理非空格處理非空格end 分析字符分析字符end分析字符串分析字符串end印空格數(shù)印空格數(shù)seq印出空格數(shù)目印出空格數(shù)目印空格數(shù)印空格數(shù)end6.4.3 Jackson6.4.3 Jackson方法方法totalsum =totalsum+sum讀入字符串讀入字符串處理字符串處理字符串end 程序體程序體end 印總數(shù)印總數(shù)seq 印出空格總數(shù)印出空格總數(shù) 印總數(shù)印總數(shù)end 關(guān)閉文件關(guān)閉文件 停止停止統(tǒng)
35、計(jì)空格統(tǒng)計(jì)空格end6.5 6.5 程序復(fù)雜程度的定量度量程序復(fù)雜程度的定量度量v定量度量程序復(fù)雜程度的方法很有價(jià)值 把程序的復(fù)雜程度乘以適當(dāng)常數(shù)即可估算出軟件中錯(cuò)誤的數(shù)量以及軟件開發(fā)需要用的工作量,定量度量的結(jié)果可以用來比較兩個(gè)不同的設(shè)計(jì)或兩個(gè)不同算法的優(yōu)劣 程序的定量的復(fù)雜程度可以作為模塊規(guī)模的精確限度。6.5.1 McCabe6.5.1 McCabe方法方法vMcCabe方法根據(jù)程序控制流的復(fù)雜程度定量度量程序的復(fù)雜程度,這樣度量出的結(jié)果稱為程序的環(huán)形復(fù)雜度。1.流圖v所謂流圖實(shí)質(zhì)上是“退化了的”程序流程圖,它僅僅描繪程序的控制流程,完全不表現(xiàn)對數(shù)據(jù)的具體操作以及分支或循環(huán)的具體條件。 流圖中用圓表示結(jié)點(diǎn),一個(gè)圓代表一條或多條語句。程序流程圖中的一個(gè)順序的處理框序列和一個(gè)菱形判定框,可以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鐵路壓漿施工方案
- 龍扣式模板支撐施工方案
- 水磨鉆挖樁基施工方案
- 二零二五年個(gè)人資產(chǎn)管理委托合同范本4篇
- 二零二五年度健身行業(yè)會員卡印刷與文印合同3篇
- 路緣石劃線施工方案
- 個(gè)人傭金收益合作協(xié)議(二零二五版)2篇
- 二零二五年度全新車型購買協(xié)議范本3篇
- 員工流失原因與留住策略
- 二零二五年度老舊小區(qū)電力設(shè)施改造合同3篇
- 駱駝祥子讀書筆記一至二十四章
- 2025年方大萍安鋼鐵招聘筆試參考題庫含答案解析
- 2024年醫(yī)師定期考核臨床類考試題庫及答案(共500題)
- 2025年電力工程施工企業(yè)發(fā)展戰(zhàn)略和經(jīng)營計(jì)劃
- 2024東莞市勞動(dòng)局制定的勞動(dòng)合同范本
- 2022年公務(wù)員多省聯(lián)考《申論》真題(安徽C卷)及答案解析
- 大型活動(dòng)保安培訓(xùn)
- 2024年大學(xué)本科課程教育心理學(xué)教案(全冊完整版)
- 信息系統(tǒng)運(yùn)維服務(wù)類合同6篇
- 江蘇省七市2025屆高三最后一卷物理試卷含解析
- 醫(yī)學(xué)課件疼痛的護(hù)理
評論
0/150
提交評論