版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第六章,詳細設計,詳細設計要提供關于算法的更多的細節(jié),例如:總體設計可以聲明一個模塊的作用是對一個表進行排序,詳細設計則要確定使用哪種排序算法。在詳細設計階段為每個模塊增加了足夠的細節(jié)后,程序員才能夠以相當直接的方式進行下一階段的編碼工作。,詳細設計以總體設計階段的工作為基礎的,但又不同于總體設計,主要表現(xiàn)為:,詳細設計階段的目的與任務,詳細設計的目的: 為軟件結構圖 (SC) 中的每一個模塊確定采用的算法和模塊內 數(shù)據(jù)結構
2、,用某種選定的表達工具給出清 晰的描述,從而在編碼階段可把這個描述直接翻譯成用某種程序設計語言書寫的程序。,詳細設計階段的主要任務:設計出程序的“藍圖”,以后程序員將根據(jù)這個藍圖寫出實際的程序代碼。因此詳細設計的結果基本上決定了最終的程序代碼的質量。,詳細設計階段的主要任務,詳細設計的的原則(1)模塊的邏輯描述正確可靠、清晰易讀。(2)采用結構化程序設計方法,改善控制結構,降低程序復雜度,提高程序的可讀性、可測試性和
3、可維護性。,6.1 結構化程序設計,結構化程序設計技術是一種設計程序的技術,它采用自頂向下、逐步求精的設計方法和單入口單出口的控制結構,并且只包含順序、選擇和循環(huán)三種控制結構。,用順序和循環(huán)結構完全可以實現(xiàn)選擇結構,,1、順序型,幾個連續(xù)的加工依次序排列,2、選擇型,由某個判斷式的取值決定選擇兩個加工中的一個。,3、當型循環(huán)型 DO_WHILE,當循環(huán)控制條件成立時,重復執(zhí)行特定的加工。,4、直到型循環(huán)型 DO_UNTIL,重復
4、執(zhí)行特定的加工,直到循環(huán)控制條件成立時。,5、多分支結構 DO_CASE,經(jīng)典的結構程序設計:順序,選擇,當型循環(huán)擴展的結構程序設計:順序,選擇+多分支,當型循環(huán)+直到型循環(huán)修正的結構程序設計:順序,選擇+多分支,當型循環(huán)+直到型循環(huán),break結構,結構程序設計,使用結構程序設計技術的好處:,(1)自頂向下逐步求精的方法符合人類解決復雜問題的普遍規(guī)律,可顯著提高軟件開發(fā)的成功率和生產(chǎn)率 (2)先全局后局部、先整體后細節(jié)、先抽象后
5、具體的逐步求精過程開發(fā)出的程序有清晰的層次結構。(3)使用單入口單出口的控制結構而不使用GOTO語句,使得程序的靜態(tài)結構和其動態(tài)執(zhí)行情況比較一致(4)控制結構有確定的邏輯模式,編寫程序代碼只限于使用很少幾種直截了當?shù)姆绞?。?)程序清晰和模塊化使得在修改和重新設計一個軟件時可以重用的代碼量最大。(6)程序的邏輯結構清晰,有利于程序正確性證明。,人機界面設計是接口設計的一個重要的組成部分。近年來,人機界面在系統(tǒng)中所占的比例越來越大
6、,在個別系統(tǒng)中人機界面的設計工作量甚至占總設計量的一半以上。 人機界面的設計質量,直接影響用戶對軟件產(chǎn)品的評價,從而影響軟件產(chǎn)品的競爭力和壽命,因此,必須對人機界面設計給予足夠重視。,6.2 人機界面設計,6.2.1 設計問題,在設計人機界面的過程中,會遇到下述4個問題:系統(tǒng)響應時間、用戶幫助設施、出錯信息處理和命令交互。 最好在設計初期就把這些問題作為重要的設計問題來考慮,這時修改比較容易,代價也低。,1.
7、 系統(tǒng)響應時間,指從用戶完成某個控制動作(例如,按回車鍵或點擊鼠標),到軟件給出預期的響應(輸出信息或做動作)之間的這段時間。兩個重要屬性:長度和易變性。長度:系統(tǒng)響應時間不能過長。當用戶工作速度是由人機界面決定的時候,系統(tǒng)響應時間過短也不好,這會迫使用戶加快操作節(jié)奏,從而可能會犯錯誤。,易變性:指系統(tǒng)響應時間相對于平均響應時間的偏差,在許多情況下,這是系統(tǒng)響應時間的更重要的屬性。響應時間易變性低也有助于用戶建立起穩(wěn)定的工作節(jié)
8、奏。例如,穩(wěn)定在1秒的響應時間比從0.1秒到2.5秒變化的響應時間要好。響應時間變化過大用戶往往擔心這暗示系統(tǒng)工作出現(xiàn)了異常。,2. 用戶幫助設施,大多數(shù)現(xiàn)代軟件都提供聯(lián)機幫助設施,這使得用戶無須離開用戶界面就能解決自己的問題。常見的幫助設施可分為兩類。集成的:一開始就設計在軟件里面,通常它對用戶工作內容是敏感的,因此用戶可以從與剛剛完成的操作有關的主題中選擇一個請求幫助。顯然,這可以縮短用戶獲得幫助的時間,增加界面的友好性。附加
9、的:在系統(tǒng)建成后再添加到軟件中的,在多數(shù)情況下它實際上是一種查詢能力有限的聯(lián)機用戶手冊。,(1) 在用戶與系統(tǒng)交互期間,是否在任何時候都能獲得關于系統(tǒng)任何功能的幫助信息:提供部分功能的幫助信息和提供全部功能的幫助信息。(2) 用戶怎樣請求幫助:幫助菜單,特殊功能鍵F1和HELP命令。(3) 怎樣顯示幫助信息:在獨立的窗口中,指出參考某個文檔(不理想)和在屏幕固定位置顯示簡短提示。(4) 用戶怎樣返回到正常的交互方式中:屏幕上的返回
10、按鈕和功能鍵(大型網(wǎng)絡游戲)。(5) 怎樣組織幫助信息:平面結構,信息的層次結構和超文本結構。,設計時應考慮的問題:,3. 出錯信息處理,出錯或警告信息應該具有下述屬性:(1) 信息應該用用戶可以理解的術語描述問題。(2) 信息應該提供有助于從錯誤中恢復的建設性意見。如:不要用“選課失敗”,給出失敗的原因。(3) 信息應該指出錯誤可能導致哪些負面后果(例如,破壞數(shù)據(jù)文件),以便用戶檢查是否出現(xiàn)了這些問題,并在確實出現(xiàn)問題時及時解
11、決。(4) 信息應伴隨著聽覺或視覺上的提示:如發(fā)出警告鈴聲、用閃爍方式或表示出錯的顏色顯示信息。如:網(wǎng)絡防火墻,網(wǎng)絡連接圖標等(5) 信息不能帶有指責色彩,即不能責怪用戶。當確實出現(xiàn)了問題的時候,有效的出錯信息能提高交互式系統(tǒng)的質量,減輕用戶的挫折感。,4. 命令交互,現(xiàn)在用戶既可以從菜單中選擇軟件功能,也可通過鍵盤命令序列調用軟件功能。在提供命令交互方式時,必須考慮下列設計問題。(1) 是否每個菜單選項都有對應的命令(2)
12、 采用何種命令形式:控制序列(例如,Ctrl+P),功能鍵和鍵入命令。(3) 學習和記憶命令的難度有多大,忘記了命令怎么辦?(4) 用戶是否可以定制或縮寫命令?命令宏機制:用戶可以用自己定義的名字代表一個常用的命令序列。用戶只需輸入命令宏的名字就可以順序執(zhí)行它所代表的全部命令。,6.2.2 設計過程,用戶界面設計是一個迭代的過程:通常先創(chuàng)建設計模型,再用原型實現(xiàn)這個設計模型,并由用戶試用和評估,然后根據(jù)用戶意見進行修改。用戶界
13、面工具箱或用戶界面開發(fā)系統(tǒng):用于界面設計和原型開發(fā),為簡化窗口、菜單、設備交互、出錯信息、命令及交互環(huán)境的許多其他元素的創(chuàng)建,提供了各種例程或對象。,用戶界面的評估周期:完成初步設計之后就創(chuàng)建第一級原型;用戶試用并評估該原型即確定其是否滿足需求,直接向設計者表述對界面的評價;設計者根據(jù)用戶意見修改設計并實現(xiàn)下一級原型。上述評估過程持續(xù)進行下去,直到用戶感到滿意,不需要再修改界面設計時為止。,6.2.3 人機界面設計指南,設計指
14、南:眾多設計者的經(jīng)驗得出,有助于設計出友好、高效的人機界面。下面介紹3類設計指南:1. 一般交互指南涉及信息顯示、數(shù)據(jù)輸入和系統(tǒng)整體控制,因此,這類指南是全局性的,忽略它們將承擔較大風險。(1) 保持一致性:應為人機界面中的菜單選擇、命令輸入、數(shù)據(jù)顯示及眾多的其他功能,使用一致的格式。(2) 提供有意義的反饋:應向用戶提供視覺的和聽覺的反饋,以保證在用戶和系統(tǒng)之間建立雙向通信。,(3) 在執(zhí)行有較大破壞性的動作之前要求用戶確認:
15、如果用戶要刪除一個文件,或覆蓋一些重要信息,或終止一個程序的運行。(4) 允許取消絕大多數(shù)操作:UNDO或REVERSE功能曾經(jīng)使眾多終端用戶避免了大量時間浪費。(5) 減少在兩次操作之間必須記憶的信息量。(6) 提高對話、移動和思考的效率:減少用戶擊鍵的次數(shù),設計屏幕布局時應考慮減少鼠標移動的距離,(7) 允許犯錯誤:系統(tǒng)應該能保護自己不受嚴重錯誤的破壞。不允許刪除重要系統(tǒng)文件(8) 按功能對動作分類,并據(jù)此設計屏幕布局:盡力
16、提高命令和動作組織的“內聚性”,下拉菜單的就是按動作類型組織命令。 (9) 提供對用戶工作內容敏感的幫助設施(參見6.2.1節(jié))。(10) 用簡單動詞或動詞短語作為命令名。過長的命令名難于識別和記憶,也會占用過多的菜單空間。,下面是關于信息顯示的設計指南。(1) 只顯示與當前工作內容有關的信息:用戶在獲得有關系統(tǒng)的特定功能的信息時,不必看到與之無關的數(shù)據(jù)、菜單和圖形。如windows提供多種顯示方式。(2) 應該用便于用戶迅速吸
17、取信息的方式來表示數(shù)據(jù):例如,可以用圖形或圖表來取代龐大的表格。(3) 使用一致的標記、標準的縮寫和可預知的顏色:顯示的含義應該非常明確,用戶無須參照其他信息源就能理解。如點擊過的鏈接用紅色顯示。,2. 信息顯示指南,(4) 允許用戶保持可視化的語境:如果對所顯示的圖形進行縮放,原始的圖像應該一直顯示著(以縮小的形式放在顯示屏的一角),以使用戶知道當前看到的圖像部分在原圖中所處的相對位置。(5) 產(chǎn)生有意義的出錯信息(參見6.2.1
18、節(jié))。(6) 使用大小寫、縮進和文本分組以幫助理解:人機界面顯示的信息大部分是文字,文字的布局和形式對用戶從中提取信息的難易程度有很大影響。,(7) 使用窗口分隔不同類型的信息:利用窗口用戶能夠方便地“保存”多種不同類型的信息。(8) 使用“模擬”顯示方式表示信息,以使信息更容易被用戶提?。豪?,顯示煉油廠儲油罐的壓力時,用類似溫度計的形式來表示壓力,用垂直移動和顏色變化來指示危險的壓力狀況,就容易引起用戶的警覺。如任務管理器。(
19、9) 高效率地使用顯示屏:當使用多窗口時,應該有足夠的空間使得每個窗口至少都能顯示出一部分。,3. 數(shù)據(jù)輸入指南,下面是關于數(shù)據(jù)輸入的設計指南。(1) 盡量減少用戶的輸入動作:用鼠標從預定義的一組輸入中選一個; (2) 保持信息顯示和數(shù)據(jù)輸入之間的一致性。顯示的視覺特征(顏色、文字大小)應該與輸入域一致。(3) 允許用戶自定義輸入:專家級用戶可能希望定義自己專用的命令或略去某些警告信息和動作確認。(4) 交互應該是靈活的,并且可
20、調整成用戶最喜歡的輸入方式:例如,秘書可能非常喜歡鍵盤輸入,而經(jīng)理可能更喜歡使用鼠標之類的點擊設備。,(5) 使在當前動作語境中不適用的命令不起作用:這可使得用戶不去做那些肯定會導致錯誤的動作。(6) 讓用戶控制交互流:用戶應能夠跳過不必要的動作,在不退出程序的情況下從錯誤狀態(tài)中恢復正常。(7) 對所有輸入動作都提供幫助(參見6.2.1節(jié))。(8) 消除冗余的輸入:除非可能發(fā)生誤解,否則不要要求用戶指定輸入數(shù)據(jù)的單位;盡可能提供默
21、認值;絕對不要要求用戶提供程序可以自動獲得或計算出來的信息。,6.3 過程設計的工具,6.3.1 程序流程圖,6.3.2 盒圖,6.3.3 PAD圖,6.3.6 過程設計語言,6.3.4 判定表,6.3.5 判定樹,過程設計,從軟件開發(fā)的工程化觀點來看,在使用程序設計語言編制程序以前,需要對所采用算法的邏輯關系進行分析,設計出全部必要的過程細節(jié),并給予清晰的表達。這就是過程設計的任務。在過程設計階段,要決定各
22、個模塊的實現(xiàn)算法,并精確地表達這些算法。表達過程規(guī)格說明的工具叫做過程設計工具,它可以分為以下三類: 圖形工具 表格工具 語言工具,6.3.1 程序流程圖,程序流程圖中常用的符號,程序流程圖也稱為程序框圖,是歷史最悠久、使用最廣泛的一種描述工具,它獨立于任何一種程序設計語言,主要優(yōu)點是對控制流程的描繪比較直觀,便于掌握。,流程符號的使用規(guī)則,1、循環(huán)符號的使用,循環(huán)體,----- 循環(huán)流程符號的使用,2、判斷有一個入口,但也允
23、許有多個可選出口,----- 多出口判斷流程符號的使用,請利用程序流程圖描述下列問題的程序結構,某汽車修配廠,有一個存有汽車零件的倉庫,其中存有若干種零件,請編寫一個查詢程序,用于查詢該庫中某零件的庫存量為多少。,,程序流程圖的隨意性和靈活性使它存在一些缺點:,(1)由于程序流程圖誘使程序員容易過早地考慮程序的具體控制流程,而忽略了程序的全局結構,它本身并不是逐步求精的好工具;,(2)程序流程圖中用箭頭代表控制流,這樣使得程序員不
24、受任何約束,可以完全不顧結構程序設計的精神,隨意轉移控制;,(3)程序流程圖在表示數(shù)據(jù)結構方面存在不足。,練習 131頁4,6.3.2 盒圖(N-S圖),N-S圖的基本符號,N-S圖有以下一些特點:,(1)功能域(即某一個特定控制結構的作用域)有明確的規(guī)定,并且可以很直觀地從N-S圖上看出來;,(2)它的控制轉移不能任意規(guī)定,必須遵守結構化程序設計的要求;,(3)很容易確定局部數(shù)據(jù)和全局數(shù)據(jù)的作用域;,(4)很容易表現(xiàn)嵌套關系,也
25、可以表示模塊的層次結構。,N-S圖的嵌套定義形式,請利用程序流程圖描述下列問題的程序結構,某汽車修配廠,有一個存有汽車零件的倉庫,其中存有若干種零件,請編寫一個查詢程序,用于查詢該庫中某零件的庫存量為多少。,,131頁3,131頁4,解法2,解法1,問題分析圖(Problem Analysis Diagram)采用二維樹形結構圖表示程序的控制流。將這種圖翻譯成程序代碼比較容易。用PAD 圖表達的軟件過程將呈樹形結構,它即克服了
26、傳統(tǒng)的流程圖不能清晰表現(xiàn)程序結構的缺點,又不像N-S圖那樣受到把全部程序約束在一個方框內的限制。,6.3.3 PAD圖,PAD圖的基本符號,PAD圖的主要優(yōu)點如下:,(1) 使用表示結構化控制結構的PAD符號所設計出來的程序必然是結構化程序。(2) PAD圖所描繪的程序結構十分清晰。圖中最左面的豎線是程序的主線,即第一層結構。隨著程序層次的增加,PAD圖逐漸向右延伸,每增加一個層次,圖形向右擴展一條豎線。PAD圖中豎線的總條數(shù)就是
27、程序的層次數(shù)。(3) 用PAD圖表現(xiàn)程序邏輯,易讀、易懂、易記。PAD圖是二維樹形結構的圖形,程序從圖中最左豎線上端的結點開始執(zhí)行,自上而下,從左向右順序執(zhí)行,遍歷所有結點。,(4) 容易將PAD圖轉換成高級語言源程序,這種轉換可用軟件工具自動完成,從而可省去人工編碼的工作,有利于提高軟件可靠性和軟件生產(chǎn)率。(5) 既可用于表示程序邏輯,也可用于描繪數(shù)據(jù)結構。(6) PAD圖的符號支持自頂向下、逐步求精方法的使用。開始時設計者可以
28、定義一個抽象的程序,隨著設計工作的深入而使用def符號逐步增加細節(jié),直至完成詳細設計,如圖6.6所示。,圖6.6 使用PAD圖提供的定義功能來逐步求精的例子,,當算法中包含多重嵌套的條件選擇時,用判定表可以清晰地表示復雜的條件組合與應做的動作之間的對應關系。在判定表中的條件部分給出所有的兩分支判斷的列表,動作部分給出所有可能的處理判定表用于表示程序的靜態(tài)邏輯,判定表不適于作為一種通用的設計工具,沒有一種簡單的方法使它能同時清晰地表
29、示順序和重復等處理特性。要求將程序流程圖中的多分支判斷都改成兩分支判斷,6.3.4 判定表,建立判定表的步驟,左上部列出過程執(zhí)行期間的所有條件(或所有判斷)。左下部列出與一個具體過程(或模塊)有關的所有處理。右上部為各種可能組合條件,其中每一列表示一種可能組合:將特定條件取值組合與特定的處理相匹配,消去不可能發(fā)生的條件取值組合。右下部的每一列是和每一種條件組合所對應的應做的動作。,假設某航空公司規(guī)定,乘客可以免費托運重量不超過
30、30kg的行李。當行李重量超過30kg時,對頭等艙的國內乘客超重部分每公斤收費4元,對其他艙的國內乘客超重部分每公斤收費6元,對外國乘客超重部分每公斤收費比國內乘客多一倍,對殘疾乘客超重部分每公斤收費比正常乘客少一半。用判定表可以清楚地表示與上述每種條件組合相對應的計算行李費的算法,如表6.1所示。,下面以行李托運費的算法為例:,用判定表表示計算行李費的算法,,,所有條件,所有可能做的動作,表示做它左邊那項動作,表示左邊那個條件成立,表
31、示條件成立與否不影響對動作的選擇,是判定表的變種,也能清晰地表示復雜的條件組合與應做的動作之間的對應關系。形式簡單,易于掌握和使用。同一元素可能重復出現(xiàn),分支的次序可能對最終的判定樹的簡潔程度有較大的影響。,6.3.5 判定樹,用判定樹計算行李費的算法,某校制定了教師的講課課時津貼標準。對于各種性質的講座,無論教師是什么職稱,每課時津貼費一律是50元;而對于一般的授課,則根據(jù)教師的職稱來決定每課時津貼費:教授30元,副教授25元
32、,講師20元,助教15元。用判定表和判定樹表示課時費的計算方法。,作業(yè):,教師課時津貼判定樹,,PDL 是一種用于描述功能模塊的算法設計和加工細節(jié)的語言,使用自然語言的詞匯,同時使用程序設計語言的語法,稱為設計程序用語言。它是一種偽代碼(Pseudo code),PDL,-----關鍵詞+自然語言,偽代碼----文字形式的表達工具,不能在計算機上執(zhí)行,但形式上與代碼相似。用它來描述程序的結構,工作量要比畫圖小,又比較容易轉換真正的代碼
33、。,6.3.6 過程設計語言,PDL具有嚴格的關鍵字外部語法,用于定義控制結構和數(shù)據(jù)結構,同時它的表示實際操作和條件的內部語法可使用自然語言的詞匯。,(1)、數(shù)據(jù)說明:,格式: TYPE AS ,其功能是定義數(shù)據(jù)的類型和作用域,說明: 1. 變量名:是一個模塊內部使用的變量或模塊間共用 的全局變量名。,2. 限定詞1 :標明數(shù)據(jù)類型,3. 限定詞2 :標明該變量的作用域,TYPE number AS S
34、TRING LENGTH (12),(2)、程序塊:,PDL的過程成分是由塊結構構成的,而塊將作為一個單個的實體來執(zhí)行。,BEGIN END,(3)、子程序結構:,把 PDL 中的過程稱為子程序。,PROCEDURE INTERFACE END,PROCEDURE spellcheck IS split document into sing
35、le words look up words in dictionary display words which are not in dictionary create a new dictionary END,示例: 拼詞檢查程序,(4)、基本控制結構:,IF THEN ; ELSE ; ENDIF,--- 選擇型結構,DO WHILE ; ENDDO,R
36、EPEAT UNTIL ; ENDREP,--- 重復型結構,DO LOOP ; EXIT WHEN ENDLOOP,DO FOR ; ENDFOR,--- 重復型結構,----- 多路選擇結構,CASE OF ; WHEN SELECT ; WHEN SELECT ; … … DEFA
37、ULT: ; ENDCASE,READ/WRITE TO ,--- 輸入/輸出結構,,Enter a vector Set Maximum to the value of the first element in the vector DO for each second one to the last IF value of THEN element is greater
38、 than the Maximum value Set Maximum to value of the element ENDDO Print the Maximum value,,,… … execute process a REPEAT UNTIL condition X8 execute process b IF condition X1
39、 THEN BEGIN execute process f IF condition X6 THEN REPEAT UNTIL condition X7 execute proc
40、ess i ENDREP ELSE BEGIN execute process g execute proces
41、s h END ENDIF END,請將下列的 PDL 表示的某模塊的過程性描述,改為用:1、N-S 圖 2、PAD 圖表示,,ELSE CASE OF Xi WHEN condition X2
42、 SELECT DO WHILE condition X5 execute process C ENDDO WHEN condition X3 SELECT process d
43、 WHEN condition X4 SELECT process e ENDCASE ENDIF ENDREP execute process jEND,PDL語言具有下述優(yōu)點:(1) PDL描述可以直接作為注釋插在源程序中,這樣做能促使維護人員在修改程序代碼的同時也相應地修改PDL注釋,因此有助于保持文檔
44、和程序的一致性,提高了文檔的質量。(2)用PDL寫出的程序,既可以很抽象,又可以很具體,易實現(xiàn)自頂向下逐步求精的設計原則。(3)PDL描述同自然語言很接近,易于理解??梢允褂闷胀ǖ恼木庉嫵绦蚧蛭淖痔幚硐到y(tǒng),很方便地完成PDL的書寫和編輯工作。(4) PDL描述與程序結構相似,而且已經(jīng)有自動處理程序存在,可以自動由PDL生成程序代碼PDL的缺點是不如圖形描述形象直觀,因此人們常常將PDL描述與一種圖形描述結合起來使用。,,6.4
45、 面向數(shù)據(jù)結構的設計方法,6.4.1 Jackson圖,6.4.2 Jackson程序設計方法,退出,Jackson程序設計方法,數(shù)據(jù)結構既影響程序的結構又影響程序的處理過程。面向數(shù)據(jù)結構設計方法的最終目標是得出對程序處理過程的描述。適合于在詳細設計階段設計每個模塊的處理過程。首先需要分析確定數(shù)據(jù)結構,并用適當?shù)墓ぞ咔逦孛枥L數(shù)據(jù)結構。,6.4.1 Jackson圖,Jackson圖表示方法,順序結構:數(shù)據(jù)由一個和多個數(shù)
46、據(jù)元素組成,每個元素按確定次序出現(xiàn)一次。選擇結構:數(shù)據(jù)包含兩個和多個數(shù)據(jù)元素,每次使用這個數(shù)據(jù)時按一定條件從這些數(shù)據(jù)元素中選擇一個。重復結構:重復結構的數(shù)據(jù),根據(jù)使用時的條件,由一個數(shù)據(jù)元素出現(xiàn)零次或多次構成。,Jackson圖的優(yōu)點:,(1)Jackson圖不僅便于表示層次結構,而且也有利于對結構自頂向下分解; (2)Jackson圖形象直觀,可讀性好;(3)Jackson圖不僅能表示數(shù)據(jù)結構,也能表示程序結構(因為程序結構也
47、可以由上述3種基本結構組成)。,Jackson圖的缺點:,,,在選擇結構和重復結構中,選擇條件或循環(huán)結束條件不能直接在Jackson圖中表示出來。這樣就影響了圖形的表達能力,也不利于直接把圖翻譯成程序。,改進的Jackson圖,標識循環(huán)條件和分支條件框間連線改為直線,i是分支條件的編號,i是循環(huán)結束條件的編號,6.4.2 改進的Jackson圖,Jackson圖實質上是對第3.7節(jié)中介紹的層次方框圖的一種精化。 與層次圖的區(qū)
48、別: 層次圖中的一個方框通常代表一個模塊;而Jackson圖即使在描繪程序結構時,一個方框也并不代表一個模塊,通常一個方框只代表幾個語句。 層次圖表現(xiàn)的是調用關系,通常一個模塊除了調用下級模塊外,還完成其他操作;而Jackson圖表現(xiàn)的是組成關系,也就是說,一個方框中包括的操作僅僅由它下層框中的那些操作組成。,6.4.3 Jackson方法,Jackson結構程序設計方法基本上由下述5個步驟組成:(1) 分析并確定輸入數(shù)
49、據(jù)和輸出數(shù)據(jù)的邏輯結構,并用Jackson圖描繪這些數(shù)據(jù)結構。(2) 找出輸入數(shù)據(jù)結構和輸出數(shù)據(jù)結構中有對應關系的數(shù)據(jù)單元。所謂有對應關系是指有直接的因果關系,在程序中可以同時處理的數(shù)據(jù)單元(對于重復出現(xiàn)的數(shù)據(jù)單元必須重復的次序和次數(shù)都相同才可能有對應關系)。(3) 用下述3條規(guī)則從描繪數(shù)據(jù)結構的Jackson圖導出描繪程序結構的Jackson圖:,第一,為每對有對應關系的數(shù)據(jù)單元,按照它們在數(shù)據(jù)結構圖中的層次在程序結構圖的相應層次
50、畫一個處理框(注意,如果這對數(shù)據(jù)單元在輸入數(shù)據(jù)結構和輸出數(shù)據(jù)結構中所處的層次不同,則和它們對應的處理框在程序結構圖中所處的層次與它們之中在數(shù)據(jù)結構圖中層次低的那個對應);第二,根據(jù)輸入數(shù)據(jù)結構中剩余的每個數(shù)據(jù)單元所處的層次,在程序結構圖的相應層次分別為它們畫上對應的處理框;第三,根據(jù)輸出數(shù)據(jù)結構中剩余的每個數(shù)據(jù)單元所處的層次,在程序結構圖的相應層次分別為它們畫上對應的處理框。,總之,描繪程序結構的Jackson圖應該綜合輸入數(shù)據(jù)結構
51、和輸出數(shù)據(jù)結構的層次關系而導出來。在導出程序結構圖的過程中,由于改進的Jackson圖規(guī)定在構成順序結構的元素中不能有重復出現(xiàn)或選擇出現(xiàn)的元素,因此可能需要增加中間層次的處理框。(4) 列出所有操作和條件(包括分支條件和循環(huán)結束條件),并且把它們分配到程序結構圖的適當位置。(5) 用偽碼表示程序。Jackson方法中使用的偽碼和Jackson圖是完全對應的,下面是和3種基本結構對應的偽碼。,(1)順序結構,A seqBCD
52、A end,(2)選擇結構,(3)重復結構,A select condition1BA or condition2CA or condition3DA end,A iter until(或while) conditionBA end,[例]一個正文文件由若干個記錄組成,每個記錄是一個字符串。要求統(tǒng)計每個記錄中空格字符的個數(shù),以及文件中空格字符的總個數(shù)。要求的輸出數(shù)據(jù)格式是,每復制一行輸入字符串之
53、后,另起一行印出這個字符串中的空格數(shù),最后印出文件中空格的總個數(shù)。對于這個簡單例子而言,輸入和輸出數(shù)據(jù)的結構很容易確定。圖6.12是用Jackson圖描繪的輸入輸出數(shù)據(jù)結構。,圖6.12 表示輸入輸出數(shù)據(jù)結構的Jackson圖,第二步是分析確定在輸入數(shù)據(jù)結構和輸出數(shù)據(jù)結構中有對應關系的數(shù)據(jù)單元: 輸出數(shù)據(jù)總是通過對輸入數(shù)據(jù)的處理而得到的,因此在輸入輸出數(shù)據(jù)結構最高層次的兩個單元總是有對應關系的。這一對單元將和程序結構圖中最頂層的方
54、框(代表程序)相對應,也就是說經(jīng)過程序的處理由正文文件得到輸出表格。 因為每處理輸入數(shù)據(jù)中一個“字符串”之后,就可以得到輸出數(shù)據(jù)中一個“串信息”,它們都是重復出現(xiàn)的數(shù)據(jù)單元,而且出現(xiàn)次序和重復次數(shù)都完全相同,因此,“字符串”和“串信息”也是一對有對應關系的單元。,依次考察輸入數(shù)據(jù)結構中余下的數(shù)據(jù)單元:“字符”不可能和多個字符組成的“字符串”對應,和輸出數(shù)據(jù)結構中其他數(shù)據(jù)單元也不能對應。 “空格”能和“空格數(shù)”對應嗎?顯然,單個空
55、格并不能決定一個記錄中包含的空格個數(shù),因此沒有對應關系。 通過類似的考察發(fā)現(xiàn),輸入數(shù)據(jù)結構中余下的任何一個單元在輸出數(shù)據(jù)結構中都找不到對應的單元,也就是說,在這個例子中輸入輸出數(shù)據(jù)結構中只有上述兩對有對應關系的單元。在圖6.12中用一對虛線箭頭把有對應關系的數(shù)據(jù)單元連接起來,以突出表明這種對應關系。,第三步是從數(shù)據(jù)結構圖導出程序結構圖。首先,在描繪程序結構的Jackson圖的最頂層畫一個處理框“統(tǒng)計空格”,它與“正文文件”和“輸出
56、表格”這對最頂層的數(shù)據(jù)單元相對應。第二層:因為在輸出數(shù)據(jù)結構中“串信息”的上層還有“表格體”和“空格總數(shù)”兩個數(shù)據(jù)單元,在程序結構圖的第二層應該有與這兩個單元對應的處理框——“程序體”和“印總數(shù)”。,第三層:與“字符串”和“串信息”相對應的處理框——“處理字符串”。第四層:和“字符串”、“字符”及“空格數(shù)”等數(shù)據(jù)單元對應的處理框“印字符串”、“分析字符”及“印空格數(shù)”,這3個處理是順序執(zhí)行的。但是,“字符”是重復出現(xiàn)的數(shù)據(jù)單元,因此
57、“分析字符”也應該是重復執(zhí)行的處理。改進的Jackson圖規(guī)定順序執(zhí)行的處理中不允許混有重復執(zhí)行或選擇執(zhí)行的處理,所以在“分析字符”這個處理框上面又增加了一個處理框“分析字符串”。最后得到的程序結構圖為圖6.13。,圖6.13 描繪統(tǒng)計空格程序結構的Jackson圖,第四步是列出所有操作和條件,并且把它們分配到程序結構圖的適當位置。首先,列出統(tǒng)計空格個數(shù)需要的全部操作和條件。經(jīng)過簡單分析不難把這些操作和條件分配到程序結構圖的適當位置
58、,結果為圖6.14。最后一步是用偽碼表示程序處理過程。因為Jackson使用的偽碼和Jackson圖之間存在簡單的對應關系,所以從圖6.14很容易得出下面的偽碼:,圖6.14 把操作和條件分配到程序結構圖的適當位置,統(tǒng)計空格seq打開文件讀入字符串totalsum∶=0程序體iter until文件結束 處理字符串seq印字符串seq 印出字符串印字符串end
59、sum∶=0pointer∶=1 分析字符串iter until字符串結束 分析字符select字符是空格,處理空格seq sum∶=sum+1 pointer∶=pointer+1處理空格end 分析字符or字符不是空格處理非空格seq pointer∶=pointer+1處理非空格end
60、 分析字符end分析字符串end印空格數(shù)seq印出空格數(shù)目印空格數(shù)end,totalsum∶=totalsum+sum讀入字符串 處理字符串end程序體end印總數(shù)seq 印出空格總數(shù)印總數(shù)end關閉文件停止統(tǒng)計空格end,作業(yè):高考后將考生的基本情況文件(簡稱考生基本情況文件)和考生高考成績文件(簡稱考分文件)合并成一個新文件(簡稱
61、考生新文件)。考生基本情況文件和考分文件都是由考生記錄組成的。為簡便起見,考生基本情況文件中的考生記錄的內容包括:準考證號、姓名、通訊地址。考分文件中的考生記錄的內容包括:準考證號和各門考分。合并后的考生新文件自然也是由考生記錄組成,內容包括:準考證號、姓名、通訊地址和各門考分。Jackson程序設計方法由五個步驟組成:,第一步 數(shù)據(jù)結構表示,對要求解的問題進行分析,確定輸入數(shù)據(jù)和輸出數(shù)據(jù)的邏輯結構,并用Jackson圖描述這些數(shù)據(jù)
62、結構。,第二步 找出輸入數(shù)據(jù)結構和輸出數(shù)據(jù)結構的對應關系,找出輸入數(shù)據(jù)結構和輸出數(shù)據(jù)結構中有對應關系的數(shù)據(jù)單元,即有直接因果關系、在程序中可以同時處理的數(shù)據(jù)單元。需要注意的是,對于重復的數(shù)據(jù)單元,必須是重復的次序、次數(shù)都相同才有可能有對應關系。,第三步 確定程序結構圖,根據(jù)下述三規(guī)則,由Jackson圖導出相應的程序結構圖:,(1)為每對有對應關系的數(shù)據(jù)單元,按照它們在數(shù)據(jù)結構圖中所處的層次,在程序結構圖中的相應層次畫一個處理框
63、。如果這對數(shù)據(jù)單元在輸入數(shù)據(jù)結構圖和輸出數(shù)據(jù)結構圖中所處的層次不同,那么應以它們在輸入數(shù)據(jù)結構圖和輸出數(shù)據(jù)結構圖中層次較低的那個層次作為它們在程序結構圖中的處理框所處的層次;,(2)對于輸入數(shù)據(jù)結構中剩余的數(shù)據(jù)單元,根據(jù)它們所處的層次,在程序結構圖的相應層次為每個數(shù)據(jù)單元畫上相應的處理框;,(3)對于輸出數(shù)據(jù)結構中剩余的數(shù)據(jù)單元,根據(jù)它們所處的層次,在程序結構圖的相應層次為每個數(shù)據(jù)單元畫上相應的處理框。,實際上,這一步是一個綜合的過程:
64、每對有對應關系的數(shù)據(jù)單元合畫一個處理框,沒有對應關系的數(shù)據(jù)單元則各畫一個處理框。,第四步 列出并分配所有操作和條件,列出所有操作和條件(包括分支條件和循環(huán)結束條件),并把它們分配到程序結構圖的適當位置。,操作:(1)停止 (2)打開兩個輸入文件; (3)建立輸出文件。(4)從輸入文件中各讀一條記錄(5)生成一條新記錄。(6)將新記錄寫入輸出文件。(7)關閉全部文件。 條件:I(1)文
65、件結束。,把操作和條件分配到程序結構圖的適當位置,用Jackson偽碼描述的程序:,產(chǎn)生新文件 seq打開兩個輸入文件從輸入文件中各讀一條記錄分析考生記錄iter until文件結束處理考生記錄 seq產(chǎn)生準考證號產(chǎn)生姓名產(chǎn)生通訊地址,產(chǎn)生考分生成一條新記錄將新記錄寫入輸出文件從輸入文件中各讀一條記錄處理考生記錄 end關閉全部文件停止產(chǎn)生新文件 end,第五步 用偽碼表示程序,程序復雜性主
66、要是指模塊內部程序的復雜性。它 直接關系到軟件開發(fā)費用的多少,開發(fā)周期的長短和 軟件和軟件內部潛伏錯誤的多少。同時它也是軟件可 理解性的另一種度量。,6.5 程序復雜程度的定量度量,程序復雜程度定量度量意義:程序的復雜程度乘以適當常數(shù)即可估算出軟件中故障的數(shù)量以及軟件開發(fā)需要的工作量??梢员容^兩個不同的設計和算法的優(yōu)劣。定量的復雜程度可作為模塊規(guī)模的精確限度。,原理:程序的復雜性很大程度上取決于程序控制流的復雜程度。單一的順
67、序結構最簡單,循環(huán)和選擇構成的環(huán)路越多,程序就越復雜。,6.5.1、McCabe 度量法,該方法是利用程序模塊的程序圖中環(huán)路的個數(shù),來計算程序的復雜性的。為此,該方法也稱為環(huán)路復雜度計算法。,它是一種退化了的程序流程圖。把程序流程圖中每個處理符號都退化成一個結點,而原來流程圖中的流程線,則變成連接不同結點的有向弧。,1. 流圖(程序圖),(1)程序圖符號,(2)從流程圖導出程序圖,程序圖僅描述程序內部的控制流程,完全不表現(xiàn)對數(shù)據(jù)的
68、具體操作,以及分支和循環(huán)的具體條件。通常稱程序圖中開始點后面的那個節(jié)點為入口點,稱停止點前面的那個節(jié)點為出口點。,圖6.16 由PDL翻譯成的流圖,用任何方法表示的過程設計結果,都可以翻譯成流圖:,圖6.17 由包含復合條件的PDL映射成的流圖,把復合條件分解為若干個簡單條件,每個簡單條件對應流圖中一個結點。包含條件的結點稱為判定節(jié)點,從每個判定結點引出兩條或多條邊。,當過程設計中包含復合條件,即在條件中包含了一個或多個布爾運算符(邏
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論