結(jié)構(gòu)化設(shè)計(jì)方法參考答案_第1頁
結(jié)構(gòu)化設(shè)計(jì)方法參考答案_第2頁
結(jié)構(gòu)化設(shè)計(jì)方法參考答案_第3頁
結(jié)構(gòu)化設(shè)計(jì)方法參考答案_第4頁
結(jié)構(gòu)化設(shè)計(jì)方法參考答案_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

第4章結(jié)構(gòu)化設(shè)計(jì)方法在'編寫"程序時(shí)并沒有設(shè)計(jì)軟件。軟件設(shè)計(jì)包括槪要設(shè)計(jì)和詳細(xì)設(shè)計(jì),編碼是將詳細(xì)設(shè)計(jì)中的過程描述轉(zhuǎn)換成用程序設(shè)訃語言來描述。4.2舉出3個(gè)數(shù)據(jù)抽象的例子和可以用來操作這些數(shù)據(jù)抽象的過程抽象的一個(gè)例子。抽儀是忽略事物的細(xì)節(jié)?獲取其木質(zhì)特征的過程°抽彖是一種重要的機(jī)制.使人們能夠?qū)?fù)朵系統(tǒng)能夠很好地理解、交流和推理C在軟件領(lǐng)域,可以將抽象分為兩類.即數(shù)據(jù)抽象和過程抽歓。在傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)語言中.就提供了這兩種抽象機(jī)制C(1)數(shù)據(jù)抽歓:在所有的結(jié)構(gòu)化程序設(shè)計(jì)語言中?用戶都可以自定義抽彖數(shù)據(jù)類型。如定義抽象數(shù)據(jù)類型(2)過程抽象:過程抽象也稱為是基干方法的抽象。過程抽彖使我們關(guān)心處理過程的名字和它能做什么.而在血向?qū)δ畹某绦蛟O(shè)計(jì)語言中.抽鐵與封裝的概念密切相關(guān),數(shù)據(jù)抽歛和相關(guān)的過程抽空被封裝在類中.不同類中相似的過程抽彖(方法)又可以進(jìn)一步抽軌放在接口中。封裝是保證爭物有明確內(nèi)外界限的機(jī)制。內(nèi)部是受保護(hù)的.與外部事物相隔離。4.3應(yīng)在什么時(shí)候把模塊設(shè)計(jì)實(shí)現(xiàn)為單塊集成軟件?如何實(shí)現(xiàn)?性能是實(shí)現(xiàn)單塊集成軟件的唯一理由嗎?由于模塊之間的調(diào)用降低了系統(tǒng)的運(yùn)行速度,可能會導(dǎo)致滿足不了用戶的性能要求,這時(shí)就需要將軟件設(shè)計(jì)為m塊集成軟件。但是在設(shè)計(jì)時(shí).最好按照模塊化的原則進(jìn)行設(shè)訃.只是沒有賦式的模塊定義而已。這樣的程序也具有模塊化的優(yōu)點(diǎn)。性能是實(shí)現(xiàn)做塊集成軟件的唯一理由。4.4是否存在一種情況:復(fù)雜問題霸要較少的工作去解決?這樣的情況對模塊化觀點(diǎn)有什么影響?通過對復(fù)雜的問題進(jìn)行合理分解,分解為若T?個(gè)相對簡單及獨(dú)立的子問題,就可以用較少的工作去解決。這種悄況能夠較好地支持模塊化的觀點(diǎn).每個(gè)子問題用單獨(dú)的模塊去解決?模塊之間應(yīng)該是島內(nèi)聚.低輜合的.這樣才能減少匸作址,否則.雖然每個(gè)模塊的工作簡魏了,但模塊之間的聯(lián)系很復(fù)雜,也増加了問題解決的難度和工作址。4.5使用數(shù)據(jù)流程圖和處理敘述,描述一個(gè)具有明顯事務(wù)流特性的計(jì)算機(jī)系統(tǒng)。使用本章所介紹的技術(shù)定義數(shù)據(jù)流的邊界,并將DFD映射成軟件結(jié)構(gòu)。4.6一些設(shè)計(jì)人員認(rèn)為所有的數(shù)據(jù)流都可以當(dāng)做是變換流。試討論當(dāng)事務(wù)流被當(dāng)成變換流時(shí),會對導(dǎo)出的軟件體系結(jié)構(gòu)有什么影響。請使用例子來說明要點(diǎn)。十爭務(wù)流被X成變換流時(shí).首先按變換流導(dǎo)出軟件結(jié)構(gòu),之后再將位于中間的??變換模塊”替換成爭物中心。所不同的是,其輸入數(shù)據(jù)不是來自下屬的輸入模塊.而是從最頂層的主控模塊傳入的.輸出數(shù)據(jù)也是傳給主控模塊.之后再由主控模塊傳給輸出模塊。這樣會増加模塊層次及數(shù)據(jù)的傳送次數(shù)C例如.對于下面的爭務(wù)型數(shù)據(jù)流.如果按照事務(wù)型數(shù)據(jù)流進(jìn)行處理,得到的初始模塊結(jié)構(gòu)如右圖所示。如果按變換型處理,得到的初始結(jié)構(gòu)圖如下圖所示。爭務(wù)型數(shù)據(jù)流按事務(wù)型得到的軟件結(jié)構(gòu)初始結(jié)構(gòu)圖再對中間部分進(jìn)一步分解,得到下而的結(jié)構(gòu)圖。協(xié)入模塊協(xié)入模塊協(xié)出模塊事務(wù)中心如果想縮短數(shù)據(jù)傳遞的路徑?就需要對上圖進(jìn)行改進(jìn).可以將'調(diào)度、'模塊合到??爭務(wù)中心"模塊中。對干應(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è)計(jì)第3章習(xí)題3.4所描述的銀行存款業(yè)務(wù)的軟件結(jié)構(gòu),并使用改進(jìn)方法對模塊(1)對第3總習(xí)題3.4給出的數(shù)據(jù)流圖進(jìn)行將化?確定其邊界.如下圖所示。(2)對上圖按事務(wù)型數(shù)據(jù)流進(jìn)行處理,完成第一級分解,得到頂層和一層模塊結(jié)構(gòu)圖。第一級分解后的結(jié)構(gòu)圖(3)完成第二級分解。對上圖所示的??輸入數(shù)據(jù)S“輸出數(shù)據(jù)'和?調(diào)度曝塊進(jìn)行分解,得到未經(jīng)精化的輸入結(jié)構(gòu)、輸出結(jié)構(gòu)和爭務(wù)結(jié)構(gòu)c未經(jīng)精化的輸入結(jié)構(gòu)未經(jīng)精化的輸出結(jié)構(gòu)未經(jīng)精化的爭務(wù)結(jié)構(gòu)將上面的三部分合在一起.得到初始的軟件結(jié)構(gòu).如下圖所示。初始軟件結(jié)構(gòu)圖(4)對軟件結(jié)構(gòu)進(jìn)行精化。1)由于涮度模塊下只有兩種爭務(wù)?因此.可以將調(diào)度模塊合并到上級模塊中.如圖所示。將調(diào)度模塊合并到上級模塊后的軟件結(jié)構(gòu)2)錄密碼“模塊的作用范困不在其控制范圉之內(nèi)(即??輸入密碼“模塊不在??記錄密碼腋塊的控制范困之內(nèi)).需對其進(jìn)行調(diào)整.如圖所示。調(diào)整后的模塊結(jié)構(gòu)圖4.9將大的軟件劃分成模塊有什么好處?是不是模塊劃分得越小越好?劃分模塊的依據(jù)是什么?將大的軟件劃分成獨(dú)立命名且可獨(dú)立訪問的模塊.不同的模塊通常具有不同的功能或職責(zé)。這種方法有利于將復(fù)朵的問題簡單化,是分而治之策略的具體表現(xiàn)C盡管模塊分解可以簡化要解決的問題.但模塊分解并不是越小越好。、”I模塊數(shù)目増加時(shí),每個(gè)模塊的規(guī)模將減小.開發(fā)單個(gè)模塊的成木確實(shí)減少G但是,隨肴模塊數(shù)目増加?模塊之間關(guān)系的復(fù)雜程度也會増加?設(shè)計(jì)模塊間接口所需要的工作fit也將增加。劃分模塊的依據(jù)是,模塊只具有取一的功能且與其他模塊沒有太女的聯(lián)系。自頂向下、逐步細(xì)化的設(shè)計(jì)過程,主要包括兩個(gè)方面:一是將復(fù)雜問題的解法分解和細(xì)化成由若干個(gè)模塊組成的層次結(jié)構(gòu):二是將每個(gè)模塊的功能逐步分解細(xì)化為一系列的處理。在處理較大的復(fù)雜任務(wù)時(shí),常采取'‘模塊化“的方法?即在程序設(shè)計(jì)時(shí)不是將全部內(nèi)容都放在同一個(gè)模塊中.而是分成若干個(gè)模塊?每個(gè)模塊實(shí)現(xiàn)一個(gè)功能。劃分模塊的過程可以使用自頂向下的方法實(shí)現(xiàn)。模塊分解完成后,下一步的任務(wù)就是將每個(gè)模塊的功能逐步分解細(xì)化為一系列的處理。這個(gè)過程是對問題求解.并由抽彖逐步具體化的過程。使用這種方法便干檢査程序的正確性。在每一步細(xì)化之前,應(yīng)仔細(xì)檢査十前的設(shè)il?是否正確。如果每一步細(xì)化、設(shè)計(jì)都沒有問題.則整個(gè)程序的算法是正確的.由于每一次向下細(xì)化都不太復(fù)雜?因此容易保證整個(gè)算法的正確性°4.11結(jié)構(gòu)化程序設(shè)計(jì)禁止使用妙⑺語句嗎?如果程序中使用了go?語句,是否就可以斷定它是非結(jié)構(gòu)化結(jié)構(gòu)化程序設(shè)計(jì)并不禁止使用gog語句。如果程序中使用rgoto語句?并不能斷定它是非結(jié)構(gòu)化的。對于給定的算法.如果符合以下三條原則.(1)使用語言中的順序、選擇.選用的控制結(jié)構(gòu)只(3)程序語句組成容易識別的塊(Block)就可以判斷它是結(jié)構(gòu)化的。重復(fù)等有限的基木控制結(jié)構(gòu)表示程序邏輯。準(zhǔn)許有一個(gè)入口和一個(gè)出口。每塊只有一個(gè)入口和一個(gè)出口。4.14圖4?5所示的流程圖完成的功能是使用二分査找方法在hibh數(shù)組中找出值為item的數(shù)是否存在?(1)判斷此算法是否杲結(jié)構(gòu)化的,說明理由.圖4-50r分査找算法的流程圖(1)不是結(jié)構(gòu)化的.最上面的循環(huán)有兩個(gè)出口.最下面的分支有三個(gè)入口。(FINISH-START)>1&&TABLE(I)!=ITEMTABLE(I)<ITEM—卡*一—START=I+1FINISH=I-1"\<TABLE(START)==ITEMIITABL玖FINISH)=ITEMIITABLE(I)==ITEM丁或者(FINISH-START)>1&&FLAG==0-----TABLE⑴=ITEMTABLE(I)<ITEMTSTART=I+1FINISH=I-1或者(FINISH-START)>=0&&FLAG==0TABLE⑴=ITEMTABLE(I)<ITEMTSTART=I+1FINISH=I-14.15使用自頂向下、逐步細(xì)化方法設(shè)計(jì)算法,完成下列任務(wù):產(chǎn)生一個(gè)10x10的二維隨機(jī)整數(shù)方陣,先求出每一行的最大值和每一列的最小值;然后求10個(gè)最大值中的最小者,10個(gè)最小值中的最大者:最后求這兩個(gè)數(shù)之差的平方.(1)首先寫出下面的程序框架: 1求A中每一行的最大值今數(shù)組B: 2求A中每一列的最小值數(shù)組C: 3求數(shù)組B中的最小值今minOfB; 4 5/11)⑵對后而加標(biāo)記的部分進(jìn)行細(xì)化嚴(yán)建立10x10的二維隨機(jī)整數(shù)數(shù)組A*/ for(i=0:iv=9:i++)tor(j=0:jv=9:j++)產(chǎn)生隨機(jī)整數(shù)9A[i.j]; 2求數(shù)組A第i行的最大值今B[i]; 2.1}八求A中每一列的最小值夕數(shù)組C*/ 3for(j=0:jv=9:j++){求數(shù)組A第j列的最小值9C[j]; }廠求數(shù)組B中的最小值->minOfB*/ 4for(i=l:iv=9:i++){minOffi=B[i];}嚴(yán)求數(shù)組C中的最大值->maxOfC*/ 5for(i=l:iv=9;i++){if(maxOfC>C[i]){}}}4.16設(shè)計(jì)算

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論