第4章-結(jié)構(gòu)化設(shè)計方法_第1頁
第4章-結(jié)構(gòu)化設(shè)計方法_第2頁
第4章-結(jié)構(gòu)化設(shè)計方法_第3頁
第4章-結(jié)構(gòu)化設(shè)計方法_第4頁
第4章-結(jié)構(gòu)化設(shè)計方法_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上第4章 結(jié)構(gòu)化設(shè)計方法4.1 當(dāng)你“編寫”程序時你設(shè)計軟件嗎?軟件設(shè)計和編碼有什么不同嗎?在“編寫”程序時并沒有設(shè)計軟件。軟件設(shè)計包括概要設(shè)計和詳細設(shè)計,編碼是將詳細設(shè)計中的過程描述轉(zhuǎn)換成用程序設(shè)計語言來描述。4.2 舉出3個數(shù)據(jù)抽象的例子和可以用來操作這些數(shù)據(jù)抽象的過程抽象的一個例子。抽象是忽略事物的細節(jié),獲取其本質(zhì)特征的過程。抽象是一種重要的機制,使人們能夠?qū)?fù)雜系統(tǒng)能夠很好地理解、交流和推理。在軟件領(lǐng)域,可以將抽象分為兩類,即數(shù)據(jù)抽象和過程抽象。在傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計語言中,就提供了這兩種抽象機制。(1) 數(shù)據(jù)抽象:在所有的結(jié)構(gòu)化程序設(shè)計語言中,用戶都可以自定義

2、抽象數(shù)據(jù)類型。如定義抽象數(shù)據(jù)類型Student(學(xué)生)、Course(課程)、ClassScoreList(班級成績單)。(2) 過程抽象:過程抽象也稱為是基于方法的抽象。過程抽象使我們關(guān)心處理過程的名字和它能做什么,而無需知道如何完成所有實現(xiàn)細節(jié)。如求班級總平均分average(ClassScoreList)就是一個過程抽象。在面向?qū)ο蟮某绦蛟O(shè)計語言中,抽象與封裝的概念密切相關(guān),數(shù)據(jù)抽象和相關(guān)的過程抽象被封裝在類中,不同類中相似的過程抽象(方法)又可以進一步抽象,放在接口中。封裝是保證事物有明確內(nèi)外界限的機制。內(nèi)部是受保護的,與外部事物相隔離。4.3 應(yīng)在什么時候把模塊設(shè)計實現(xiàn)為單塊集成軟件

3、?如何實現(xiàn)?性能是實現(xiàn)單塊集成軟件的唯一理由嗎?由于模塊之間的調(diào)用降低了系統(tǒng)的運行速度,可能會導(dǎo)致滿足不了用戶的性能要求,這時就需要將軟件設(shè)計為單塊集成軟件。但是在設(shè)計時,最好按照模塊化的原則進行設(shè)計,只是沒有顯式的模塊定義而已。這樣的程序也具有模塊化的優(yōu)點。性能是實現(xiàn)單塊集成軟件的唯一理由。4.4 是否存在一種情況:復(fù)雜問題需要較少的工作去解決?這樣的情況對模塊化觀點有什么影響?通過對復(fù)雜的問題進行合理分解,分解為若干個相對簡單及獨立的子問題,就可以用較少的工作去解決。這種情況能夠較好地支持模塊化的觀點,每個子問題用單獨的模塊去解決,模塊之間應(yīng)該是高內(nèi)聚、低耦合的,這樣才能減少工作量,否則,

4、雖然每個模塊的工作簡單了,但模塊之間的聯(lián)系很復(fù)雜,也增加了問題解決的難度和工作量。4.5 使用數(shù)據(jù)流程圖和處理敘述,描述一個具有明顯事務(wù)流特性的計算機系統(tǒng)。使用本章所介紹的技術(shù)定義數(shù)據(jù)流的邊界,并將DFD映射成軟件結(jié)構(gòu)。略。4.6 一些設(shè)計人員認(rèn)為所有的數(shù)據(jù)流都可以當(dāng)做是變換流。試討論當(dāng)事務(wù)流被當(dāng)成變換流時,會對導(dǎo)出的軟件體系結(jié)構(gòu)有什么影響。請使用例子來說明要點。當(dāng)事務(wù)流被當(dāng)成變換流時,首先按變換流導(dǎo)出軟件結(jié)構(gòu),之后再將位于中間的“變換模塊”替換成事物中心。所不同的是,其輸入數(shù)據(jù)不是來自下屬的輸入模塊,而是從最頂層的主控模塊傳入的,輸出數(shù)據(jù)也是傳給主控模塊,之后再由主控模塊傳給輸出模塊。這樣會

5、增加模塊層次及數(shù)據(jù)的傳送次數(shù)。例如,對于下面的事務(wù)型數(shù)據(jù)流,如果按照事務(wù)型數(shù)據(jù)流進行處理,得到的初始模塊結(jié)構(gòu)如右圖所示。 事務(wù)型數(shù)據(jù)流 按事務(wù)型得到的軟件結(jié)構(gòu)如果按變換型處理,得到的初始結(jié)構(gòu)圖如下圖所示。主模塊輸出模塊輸入模塊變換模塊 初始結(jié)構(gòu)圖再對中間部分進一步分解,得到下面的結(jié)構(gòu)圖。如果想縮短數(shù)據(jù)傳遞的路徑,就需要對上圖進行改進,可以將“調(diào)度”模塊合到“事務(wù)中心”模塊中。 4.7 什么是持久的數(shù)據(jù)源?對于應(yīng)用系統(tǒng)來說,持久的數(shù)據(jù)源是指應(yīng)用系統(tǒng)關(guān)閉再重新啟動后,關(guān)閉之前的數(shù)據(jù)依然存在。這些數(shù)據(jù)一般要存儲在文件或數(shù)據(jù)庫中。4.8 用面向數(shù)據(jù)流的方法設(shè)計第3章習(xí)題3.4所描述的銀行存款業(yè)務(wù)的軟件

6、結(jié)構(gòu),并使用改進方法對模塊結(jié)構(gòu)進行精化。(1) 對第3章習(xí)題3.4給出的數(shù)據(jù)流圖進行精化,確定其邊界,如下圖所示。(2) 對上圖按事務(wù)型數(shù)據(jù)流進行處理,完成第一級分解,得到頂層和一層模塊結(jié)構(gòu)圖。存款業(yè)務(wù)輸入數(shù)據(jù)調(diào)度輸出數(shù)據(jù)第一級分解后的結(jié)構(gòu)圖(3) 完成第二級分解。對上圖所示的“輸入數(shù)據(jù)”、“輸出數(shù)據(jù)”和“調(diào)度”模塊進行分解,得到未經(jīng)精化的輸入結(jié)構(gòu)、輸出結(jié)構(gòu)和事務(wù)結(jié)構(gòu)。輸入數(shù)據(jù)輸入事務(wù)輸入密碼未經(jīng)精化的輸入結(jié)構(gòu)輸出數(shù)據(jù)打印存款單打印開戶單 未經(jīng)精化的輸出結(jié)構(gòu)調(diào)度處理存款處理開戶記錄存款信息記錄開戶信息記錄密碼未經(jīng)精化的事務(wù)結(jié)構(gòu)將上面的三部分合在一起,得到初始的軟件結(jié)構(gòu),如下圖所示。存款業(yè)務(wù)輸入

7、數(shù)據(jù)調(diào)度輸出數(shù)據(jù)輸入事務(wù)輸入密碼打印存款單打印開戶單處理存款處理開戶記錄存款信息記錄開戶信息記錄密碼初始軟件結(jié)構(gòu)圖(4) 對軟件結(jié)構(gòu)進行精化。1) 由于調(diào)度模塊下只有兩種事務(wù),因此,可以將調(diào)度模塊合并到上級模塊中,如圖所示。存款業(yè)務(wù)輸入數(shù)據(jù)輸出數(shù)據(jù)輸入事務(wù)輸入密碼打印存款單打印開戶單處理存款處理開戶記錄存款信息記錄開戶信息記錄密碼將調(diào)度模塊合并到上級模塊后的軟件結(jié)構(gòu)2) “記錄密碼”模塊的作用范圍不在其控制范圍之內(nèi)(即“輸入密碼”模塊不在“記錄密碼”模塊的控制范圍之內(nèi)),需對其進行調(diào)整,如圖所示。存款業(yè)務(wù)輸入事務(wù)輸出數(shù)據(jù)輸入密碼打印存款單打印開戶單處理存款處理開戶記錄存款信息記錄開戶信息記錄密

8、碼 3) 提高模塊獨立性,對模塊結(jié)構(gòu)進行調(diào)整,如下圖所示。存款業(yè)務(wù)輸入事務(wù)輸入密碼打印存款單打印開戶單處理存款處理開戶記錄存款信息記錄開戶信息記錄密碼調(diào)整后的模塊結(jié)構(gòu)圖4.9 將大的軟件劃分成模塊有什么好處?是不是模塊劃分得越小越好?劃分模塊的依據(jù)是什么?將大的軟件劃分成獨立命名且可獨立訪問的模塊,不同的模塊通常具有不同的功能或職責(zé)。這種方法有利于將復(fù)雜的問題簡單化,是分而治之策略的具體表現(xiàn)。盡管模塊分解可以簡化要解決的問題,但模塊分解并不是越小越好。當(dāng)模塊數(shù)目增加時,每個模塊的規(guī)模將減小,開發(fā)單個模塊的成本確實減少了;但是,隨著模塊數(shù)目增加,模塊之間關(guān)系的復(fù)雜程度也會增加,設(shè)計模塊間接口所需

9、要的工作量也將增加。 劃分模塊的依據(jù)是,模塊只具有單一的功能且與其他模塊沒有太多的聯(lián)系。4.10 什么叫“自頂向下、逐步細化”?自頂向下、逐步細化的設(shè)計過程,主要包括兩個方面:一是將復(fù)雜問題的解法分解和細化成由若干個模塊組成的層次結(jié)構(gòu);二是將每個模塊的功能逐步分解細化為一系列的處理。在處理較大的復(fù)雜任務(wù)時,常采取“模塊化”的方法,即在程序設(shè)計時不是將全部內(nèi)容都放在同一個模塊中,而是分成若干個模塊,每個模塊實現(xiàn)一個功能。劃分模塊的過程可以使用自頂向下的方法實現(xiàn)。模塊分解完成后,下一步的任務(wù)就是將每個模塊的功能逐步分解細化為一系列的處理。這個過程是對問題求解,并由抽象逐步具體化的過程。使用這種方法

10、便于檢查程序的正確性。在每一步細化之前,應(yīng)仔細檢查當(dāng)前的設(shè)計是否正確。如果每一步細化、設(shè)計都沒有問題,則整個程序的算法是正確的。由于每一次向下細化都不太復(fù)雜,因此容易保證整個算法的正確性。4.11 結(jié)構(gòu)化程序設(shè)計禁止使用goto語句嗎?如果程序中使用了goto語句,是否就可以斷定它是非結(jié)構(gòu)化的? 結(jié)構(gòu)化程序設(shè)計并不禁止使用goto語句。如果程序中使用了goto語句,并不能斷定它是非結(jié)構(gòu)化的。4.12 對于給定的算法,如何判斷它是否是結(jié)構(gòu)化的? 對于給定的算法,如果符合以下三條原則,就可以判斷它是結(jié)構(gòu)化的。 (1) 使用語言中的順序、選擇、重復(fù)等有限的基本控制結(jié)構(gòu)表示程序邏輯。 (2) 選用的控

11、制結(jié)構(gòu)只準(zhǔn)許有一個入口和一個出口。 (3) 程序語句組成容易識別的塊(Block),每塊只有一個入口和一個出口。4.13 對于圖4-49所示的流程圖,試分別用N-S圖和PAD表示之。 FSTARTABQENDTFTP 圖4-49 流程圖對應(yīng)的N-S圖如下: 對應(yīng)的PAD如下:while PAuntil !QBwhile PABuntil !Q4.14 圖4-50所示的流程圖完成的功能是使用二分查找方法在table數(shù)組中找出值為item的數(shù)是否存在。(1) 判斷此算法是否是結(jié)構(gòu)化的,說明理由。(2) 若算法是非結(jié)構(gòu)化的,設(shè)計一個等價的結(jié)構(gòu)化算法,并用N-S圖表示。FFFTFFtable(i)&g

12、t;item(finish-start)>1table(start)=itemtable(finish)=itemflag=0flag=1i(startfinish)/2table(i)=itemtable(I)<itemfinish=i-1start=i+1TTTFTT開始結(jié)束圖4-50 二分查找算法的流程圖(1) 不是結(jié)構(gòu)化的,最上面的循環(huán)有兩個出口,最下面的分支有三個入口。(2) 等價的結(jié)構(gòu)化算法如下:(FINISH-START)>1 && TABLE(I)!=ITEMI(STARTFINISH)/2TABLE(I)<ITEMI(STARTFINI

13、SH)/2TFSTART=I+1FINISH=I-1TABLE(START)=ITEM | TABLE(FINISH) =ITEM | TABLE(I)=ITEMTFFLAG=1FLAG=0或者(FINISH-START)>1 && FLAG=0I(STARTFINISH)/2TABLE(I)=ITEMFLAG0TFFLAG=1TABLE(I)<ITEMT FTABLE(START)=ITEM | TABLE(FINISH) =ITEMTFFLAG=1START=I+1FINISH=I-1或者FLAG0(FINISH-START)>=0 &&

14、FLAG=0I(STARTFINISH)/2FTTABLE(I)=ITEMTABLE(I)<ITEMT FFLAG=1FINISH=I-1START=I+14.15 使用自頂向下、逐步細化方法設(shè)計算法,完成下列任務(wù):產(chǎn)生一個10´10的二維隨機整數(shù)方陣,先求出每一行的最大值和每一列的最小值;然后求10個最大值中的最小者,10個最小值中的最大者;最后求這兩個數(shù)之差的平方。(1) 首先寫出下面的程序框架: main () 定義10´10的二維整數(shù)數(shù)組A,長度為10的一維數(shù)組B, C;建立10´10的二維隨機整數(shù)數(shù)組A;- - - - - - - - - - -

15、- - - - - - - - 1 求A中每一行的最大值è數(shù)組B; - - - - - - - - - - - - - - - - - - - - 2求A中每一列的最小值è數(shù)組C; - - - - - - - - - - - - - - - - - - - - 3求數(shù)組B中的最小值èminOfB; - - - - - - - - - - - - - - - - - - - - 4求數(shù)組C中的最大值èmaxOfC; - - - - - - - - - - - - - - - - - - - - 5(minOfB- maxOfC)2 èresult

16、; (2) 對后面加標(biāo)記的部分進行細化main () 定義10´10的二維整數(shù)數(shù)組A,長度為10的一維數(shù)組B, C;/*建立10´10的二維隨機整數(shù)數(shù)組A*/ - - - - - - - - - - - - - - - - - - 1for (i=0; i<=9; i+)for (j=0; j<=9; j+)產(chǎn)生隨機整數(shù)è Ai,j; /*求A中每一行的最大值è數(shù)組B*/ - - - - - - - - - - - - - - - - - - - - 2for (i=0; i<=9; i+) 求數(shù)組A第i行的最大值èBi; -

17、2.1/*求A中每一列的最小值è數(shù)組C*/ - - - - - - - - - - - - - - - - - - - - 3for (j=0; j<=9; j+) 求數(shù)組A第j列的最小值èCj; -3.1/*求數(shù)組B中的最小值èminOfB*/ - - - - - - - - - - - - - - - - - - - - 4minOfB = B0;for (i=1; i<=9; i+) if (minOfB < Bi) minOfB = Bi; /*求數(shù)組C中的最大值èmaxOfC*/ - - - - - - - - - - - - - - - - - - - - 5maxOfC = C0;for ( i=1; i<=9; i+) if (maxOfC>Ci) maxOfC = Ci; (minOfB- maxOfC)2 èresult; (3) 下一步可以繼續(xù)對2.1和3.1進行細化。具體略。4.16 設(shè)計算法完成下列任務(wù):輸入一段英文后,無論輸入的文字都是大寫,還是小寫,或大小寫任意混合,都能將其整理成除每個句子開頭字母是大寫外,其他都是小寫的文字。假設(shè)在輸入的文字中,兩個單詞間只允許是空格、,、.、?、!,則在輸出的文字中,大寫的情況有以下幾種:(1) 整段文字的第一個字母是大寫;(2)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論