軟件工程基礎(chǔ):第6章 詳細(xì)設(shè)計(jì)_第1頁(yè)
軟件工程基礎(chǔ):第6章 詳細(xì)設(shè)計(jì)_第2頁(yè)
軟件工程基礎(chǔ):第6章 詳細(xì)設(shè)計(jì)_第3頁(yè)
軟件工程基礎(chǔ):第6章 詳細(xì)設(shè)計(jì)_第4頁(yè)
軟件工程基礎(chǔ):第6章 詳細(xì)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第6章詳細(xì)設(shè)計(jì)6.1詳細(xì)設(shè)計(jì)的目標(biāo)與任務(wù)

概要設(shè)計(jì)確定了軟件系統(tǒng)的總體結(jié)構(gòu),詳細(xì)設(shè)計(jì)則對(duì)概要設(shè)計(jì)結(jié)果進(jìn)一步細(xì)化,給出目標(biāo)系統(tǒng)的精確描述,以便在編碼階段直接翻譯成計(jì)算機(jī)上能夠運(yùn)行的程序代碼。

在詳細(xì)設(shè)計(jì)階段,結(jié)構(gòu)化設(shè)計(jì)和面向?qū)ο笤O(shè)計(jì)沒(méi)有本質(zhì)區(qū)別,都是確定算法和數(shù)據(jù)結(jié)構(gòu)。

詳細(xì)設(shè)計(jì)的結(jié)果“軟件詳細(xì)規(guī)格”(相當(dāng)于工程施工圖紙),與編程思想、方法和風(fēng)格等密切相關(guān)。6.1.1詳細(xì)設(shè)計(jì)的目標(biāo)

詳細(xì)設(shè)計(jì)階段具體地設(shè)計(jì)所要求的系統(tǒng),得出新系統(tǒng)的軟件詳細(xì)規(guī)格。同時(shí),要求設(shè)計(jì)出的規(guī)格簡(jiǎn)明易懂,便于下一階段用某種程序設(shè)計(jì)語(yǔ)言在計(jì)算機(jī)上實(shí)現(xiàn)。

如何高質(zhì)量地完成詳細(xì)設(shè)計(jì)是提高軟件質(zhì)量的關(guān)鍵。6.1.2詳細(xì)設(shè)計(jì)的任務(wù)

算法過(guò)程的設(shè)計(jì);數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì);數(shù)據(jù)庫(kù)物理設(shè)計(jì);信息編碼設(shè)計(jì);測(cè)試用例的設(shè)計(jì);編寫(xiě)“詳細(xì)設(shè)計(jì)說(shuō)明書(shū)”。6.2詳細(xì)設(shè)計(jì)圖形描述工具

詳細(xì)設(shè)計(jì)中用于過(guò)程設(shè)計(jì)的圖形工具,包括程序流程圖、盒圖、問(wèn)題分析圖和協(xié)作圖。實(shí)際上,除此之外的其它工具,如IPO圖、判定表/判定樹(shù)以及偽代碼語(yǔ)言等均可用于對(duì)過(guò)程設(shè)計(jì)的描述。每種工具都有它自己的優(yōu)缺點(diǎn),在設(shè)計(jì)時(shí)可以針對(duì)不同的情況選用,甚至可以同時(shí)采用多種工具來(lái)描述詳細(xì)設(shè)計(jì)的結(jié)果。

6.2.1程序流程圖

開(kāi)始統(tǒng)計(jì)時(shí)間輸入統(tǒng)計(jì)收發(fā)文情況顯示結(jié)果打印否?打印輸出返回上層菜單結(jié)束FT優(yōu)缺點(diǎn)主要優(yōu)點(diǎn):直觀、靈活、易使用,便于初學(xué)者掌握。缺點(diǎn):程序流程圖本質(zhì)上并不是逐步求精的好工具,它誘使程序設(shè)計(jì)人員過(guò)早考慮程序的控制流程,而不去考慮程序的全局結(jié)構(gòu);另一方面,用箭頭表示控制流方向,可以實(shí)現(xiàn)控制流的任意轉(zhuǎn)移,如果使用得當(dāng)則簡(jiǎn)單易懂且靈活,否則非結(jié)構(gòu)化的程序流程圖可能非常難理解,無(wú)法進(jìn)行修改和維護(hù)。同時(shí),程序流程圖也不便于表示數(shù)據(jù)結(jié)構(gòu)。

6.2.2盒圖

數(shù)組A的第一個(gè)元素A(1)MAXFORi=2TONTMAX<A(i)F

MAX=A(i)優(yōu)缺點(diǎn)主要優(yōu)點(diǎn):它強(qiáng)制設(shè)計(jì)人員使用結(jié)構(gòu)化技術(shù),從而可以保證設(shè)計(jì)的質(zhì)量。同時(shí),從盒圖上可以直觀地看出某一特定控制結(jié)構(gòu)的作用范圍,為理解設(shè)計(jì)意圖、編程實(shí)現(xiàn)、選擇測(cè)試用例等帶來(lái)了方便。在使用時(shí)還可附上一個(gè)描述數(shù)據(jù)結(jié)構(gòu)的盒子,使得盒圖更加適用于詳細(xì)設(shè)計(jì)。缺點(diǎn):盒圖的修改比較麻煩,且結(jié)構(gòu)嵌套層次較多時(shí)不太容易繪制,以致盒圖的使用至今仍不流行。

6.2.3問(wèn)題分析圖

def冒泡排序輸入n個(gè)數(shù)至數(shù)組Ai=1whilei<=n-1進(jìn)行第i趟排序輸出數(shù)組A中的n個(gè)數(shù)max=A(i),且j=i+1A(i)=max,且i=i+1進(jìn)行第i趟排序whilej<=n交換A(j)與max的值j=j+1TFdef特點(diǎn)問(wèn)題分析圖強(qiáng)制設(shè)計(jì)人員采用結(jié)構(gòu)化技術(shù)。采用樹(shù)形結(jié)構(gòu),既克服了程序流程圖不能清晰表現(xiàn)程序?qū)哟谓Y(jié)構(gòu)的缺點(diǎn),又不同于盒圖將處理約束在一個(gè)盒子里而使修改麻煩,并且這種結(jié)構(gòu)為軟件的自動(dòng)生成提供了有力的幫助(樹(shù)遍歷)。

6.2.4協(xié)作圖

publicvoidenterItem(int

upc,intqty){if(isNewSale()){sale=newSale;}ProductSpecificationspec=productCatalog.specification(upc);sale.makeLineItem(spec,qty);}:POST1[isNewSale()]sale:=newSale():Sale3makeLineItem(spec,qty)sale:SaleenterItem(upc,qty)productCatalog:ProductCatalog2:spec:=specification(upc)特點(diǎn)協(xié)作圖和順序圖都可用來(lái)表示對(duì)象之間的交互關(guān)系,兩種形式之間可以相互轉(zhuǎn)換。順序圖突出執(zhí)行的時(shí)序,能更方便地看出事情發(fā)生的次序。而協(xié)作圖的布局方法能更清楚地表示出對(duì)象之間的靜態(tài)的連接關(guān)系。與順序圖相比,協(xié)作圖的繪圖空間也要節(jié)省一些。

6.3Jackson程序設(shè)計(jì)方法

Jackson結(jié)構(gòu)程序設(shè)計(jì)方法(JacksonStructuredProgramming,JSP)是英國(guó)人M.A.Jackson首先提出來(lái)的,是一種面向數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)化程序設(shè)計(jì)方法。該方法通過(guò)分析問(wèn)題的輸入、輸出數(shù)據(jù)結(jié)構(gòu)(用Jackson圖表示)的對(duì)應(yīng)關(guān)系,按一定的映射規(guī)則將其映射成軟件的過(guò)程描述,用Jackson偽代碼表示。

6.3.1Jackson圖

ABCDABoCoDoAB*順序選擇循環(huán)S(j)I(j)6.3.2Jackson偽代碼

AseqBCDend

AA

selectconditionS(j)B

or

condition1C

or

condition2D

endAAiter

until(orwhile)conditionI(j)B

end

A順序選擇循環(huán)6.3.3Jackson程序設(shè)計(jì)方法的步驟

分析并確定問(wèn)題的輸入和輸出數(shù)據(jù)結(jié)構(gòu),并用Jackson圖表示。

找出輸入和輸出數(shù)據(jù)結(jié)構(gòu)中有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元。

將數(shù)據(jù)結(jié)構(gòu)映射為程序結(jié)構(gòu)。列出完成程序結(jié)構(gòu)圖中各處理框功能的全部操作,以及有關(guān)條件,并將它們分配到程序結(jié)構(gòu)圖的適當(dāng)位置。

用Jackson偽代碼寫(xiě)出與程序結(jié)構(gòu)圖相對(duì)應(yīng)的過(guò)程性表示。

例子編號(hào)名稱數(shù)量操作類型0130內(nèi)角線50入0131九夾板20出0130內(nèi)角線40出×××裝修公司構(gòu)件周報(bào)表編號(hào)變化量0130+100131-20......

某裝修公司的倉(cāng)庫(kù)存放有多種裝修構(gòu)件,每種構(gòu)件的每次進(jìn)貨、出貨都有相應(yīng)的記錄(包括構(gòu)件編號(hào)、名稱、數(shù)量、入/出庫(kù)操作類型)存于構(gòu)件記錄表中。裝修公司每周根據(jù)構(gòu)件記錄表打印一張周報(bào)表,報(bào)表的每行列出某種構(gòu)件本周變化的數(shù)量,以便根據(jù)報(bào)表及時(shí)訂貨,有關(guān)表格如:分析并確定輸入輸出數(shù)據(jù)結(jié)構(gòu)構(gòu)件記錄表構(gòu)件記錄*編號(hào)操作類型出庫(kù)o入庫(kù)o數(shù)量I(1)S(2)裝修構(gòu)件周報(bào)表表頭表體行*編號(hào)變化量I(3)I(1)表示“while構(gòu)件記錄表未空”;S(2)表示“是出庫(kù)還是入庫(kù)”;I(3)表示“while所有構(gòu)件類型”。

找出輸入輸出數(shù)據(jù)結(jié)構(gòu)中的對(duì)應(yīng)單元

所謂有對(duì)應(yīng)關(guān)系是指有直接的因果關(guān)系,在程序中可以或需要同時(shí)處理的單元。對(duì)于重復(fù)出現(xiàn)的數(shù)據(jù)單元必須是重復(fù)的次序和次數(shù)在輸入與輸出數(shù)據(jù)結(jié)構(gòu)中都相同才可能有對(duì)應(yīng)關(guān)系。

操作類型出庫(kù)o入庫(kù)o構(gòu)件記錄表構(gòu)件記錄*編號(hào)數(shù)量構(gòu)件組記錄*裝修構(gòu)件周報(bào)表表頭表體行*編號(hào)變化量I(1)I(2)I(1)S(3)I(1)表示“while所有構(gòu)件類型”;I(2)表示“while某一構(gòu)件類型(組)的所有構(gòu)件”;S(3)表示“是出庫(kù)還是入庫(kù)”。

利用映射規(guī)則導(dǎo)出程序結(jié)構(gòu)

對(duì)每對(duì)有對(duì)應(yīng)關(guān)系的數(shù)據(jù)單元,按其在數(shù)據(jù)結(jié)構(gòu)圖中的層次在程序結(jié)構(gòu)圖相應(yīng)層次畫(huà)一個(gè)處理框。如果這對(duì)數(shù)據(jù)單元在輸入數(shù)據(jù)結(jié)構(gòu)和輸出數(shù)據(jù)結(jié)構(gòu)中處于不同的層次,則與它們對(duì)應(yīng)的處理框在程序結(jié)構(gòu)圖中的層次同它們?cè)跀?shù)據(jù)結(jié)構(gòu)圖中層次低的對(duì)應(yīng)(高層在上,低層在下)。對(duì)輸入數(shù)據(jù)結(jié)構(gòu)中剩余的數(shù)據(jù)單元,根據(jù)其所在的層次在程序結(jié)構(gòu)圖相應(yīng)層次分別畫(huà)上處理框。對(duì)輸出數(shù)據(jù)結(jié)構(gòu)中剩余的數(shù)據(jù)單元,根據(jù)其所在的層次在程序結(jié)構(gòu)圖相應(yīng)層次分別畫(huà)上處理框。

列出并分配操作與條件

(1)輸入構(gòu)件記錄庫(kù)文件名

(2)打開(kāi)構(gòu)件記錄庫(kù)文件名(3)對(duì)構(gòu)件記錄庫(kù)文件按編號(hào)索引(4)創(chuàng)建報(bào)表文件(5)生成表頭字符串至報(bào)表文件

(6)送換行符至報(bào)表文件(7)變化量change=0(8)ID置為當(dāng)前構(gòu)件記錄的編號(hào)(9)讀構(gòu)件記錄庫(kù)文件的編號(hào)至ID(10)讀構(gòu)件記錄庫(kù)文件的數(shù)量至data(11)change=change-data(12)change=change+data(13)指向構(gòu)件記錄庫(kù)文件的下一條記錄

(14)生成編號(hào)ID字符串至報(bào)表文件

(15)生成變化量change串至報(bào)表文件(16)關(guān)閉構(gòu)件記錄庫(kù)文件(17)關(guān)閉報(bào)表文件

I(1):構(gòu)件記錄庫(kù)文件未到文件尾

I(2):當(dāng)前構(gòu)件記錄的編號(hào)不等于IDS(3):當(dāng)前構(gòu)件記錄的操作類型是出庫(kù)

用Jackson偽代碼表示程序處理過(guò)程生成裝修構(gòu)件周報(bào)表

seq輸入構(gòu)件記錄庫(kù)文件名打開(kāi)構(gòu)件記錄庫(kù)文件對(duì)構(gòu)件記錄庫(kù)文件按編號(hào)索引創(chuàng)建報(bào)表文件生成表頭seq生成表頭字符串至報(bào)表文件end

生成表頭生成表體iter

while

構(gòu)件記錄庫(kù)文件未到文件尾由構(gòu)件組記錄生成表行seq

送換行符至報(bào)表文件

………6.4Warnier程序設(shè)計(jì)方法

Warnier程序設(shè)計(jì)方法由法國(guó)人J.D.Warnier提出的一種LCP(LogicalConstructionofPrograms,邏輯構(gòu)造程序)程序設(shè)計(jì)方法。在Warnier程序設(shè)計(jì)方法中,首先要分析輸入和輸出數(shù)據(jù)結(jié)構(gòu),用Warnier圖表示;然后,從數(shù)據(jù)結(jié)構(gòu)(主要是根據(jù)輸入數(shù)據(jù)結(jié)構(gòu),輸出數(shù)據(jù)結(jié)構(gòu)可用來(lái)完善輸入數(shù)據(jù)結(jié)構(gòu))導(dǎo)出程序結(jié)構(gòu),同樣用Warnier圖表示;再將程序結(jié)構(gòu)改用程序流程圖來(lái)表示;最后,根據(jù)程序流程圖寫(xiě)出程序的詳細(xì)過(guò)程性描述。

6.4.1Wariner圖

6.4.2Warnier程序設(shè)計(jì)步驟

分析和確定問(wèn)題的輸入和輸出數(shù)據(jù)結(jié)構(gòu),并用Warnier圖來(lái)表示;從數(shù)據(jù)結(jié)構(gòu)(特別是輸入數(shù)據(jù)結(jié)構(gòu))導(dǎo)出程序的處理結(jié)構(gòu),用Warnier圖表示;將程序結(jié)構(gòu)改用程序流程圖表示;根據(jù)上一步得出的程序流程圖,寫(xiě)出程序的詳細(xì)過(guò)程性描述:

例子-----報(bào)表生成系統(tǒng)

分析并確定問(wèn)題的輸入和輸出數(shù)據(jù)結(jié)構(gòu)

導(dǎo)出程序處理的層次結(jié)構(gòu)

畫(huà)出和程序處理的層次結(jié)構(gòu)相對(duì)應(yīng)的程序流程圖

根據(jù)程序流程圖寫(xiě)出程序的詳細(xì)過(guò)程性描述

①自上而下給流程圖每個(gè)處理框統(tǒng)一編號(hào);②列出每個(gè)處理框所需要的指令,冠以處理框的序號(hào),并對(duì)指令分成如下幾類:

A、輸入和輸入準(zhǔn)備指令;

B、分支和分支準(zhǔn)備指令;

C、計(jì)算指令;

D、子程序調(diào)用指令;

E、輸出和輸出準(zhǔn)備指令。

③將上述“分類指令表”中的指令全部按處理框序號(hào)重新排序,序號(hào)相同則基本按“輸入/處理/輸出”的順序排列,從而得到了程序的詳細(xì)過(guò)程性描述。

6.5面向?qū)ο蟪绦虻脑敿?xì)設(shè)計(jì)

面向?qū)ο笤O(shè)計(jì)在詳細(xì)設(shè)計(jì)階段主要完成對(duì)象的屬性和方法的設(shè)計(jì),稱之為面向?qū)ο蟪绦虻脑敿?xì)設(shè)計(jì)。

面向?qū)ο蟪绦虻脑敿?xì)設(shè)計(jì)與結(jié)構(gòu)化程序的詳細(xì)設(shè)計(jì)相似,但也有特殊之處,在設(shè)計(jì)時(shí)要認(rèn)真考慮才能體現(xiàn)面向?qū)ο蟮膬?yōu)越性。6.5.1面向?qū)ο蟪绦虻奶匦?/p>

封裝性:類的封裝性使得數(shù)據(jù)和操縱數(shù)據(jù)的算法(函數(shù)或過(guò)程)緊密地捆綁在一起,這樣就可以使得操縱數(shù)據(jù)的函數(shù)或過(guò)程的作用域和可視性限制在軟件系統(tǒng)的局部區(qū)域內(nèi)。

//定義日期字符串類型string80typedefcharString80[80];//定義日期類CDateclassCDate{//類的實(shí)現(xiàn)private:intyear,month,day;//類的接口public:CDate(intmonth,intday,intyear);CDateoperator+(intdays);voidGetDateString(String80&DateString);//…};//部分成員函數(shù)的實(shí)現(xiàn)voidCDate::GetDateString(String80&DateString){sprintf(DateString,"%d-%d-%d",month,day,year%100);}繼承性

在面向?qū)ο蟪绦蛟O(shè)計(jì)中,允許某個(gè)類繼承其它類的成員函數(shù)或數(shù)據(jù)成員。被繼承的類稱為基類、父類或超類,繼承的類稱為派生類或子類。

classCBaseClass{…

…};若要從CBaseClass派生一個(gè)新的類,其語(yǔ)法是:classCDerivedClass:存取權(quán)限標(biāo)識(shí)

CBaseClass{…

…};

多態(tài)性

多態(tài)性使得相關(guān)的類可有同名的函數(shù),這個(gè)同名的函數(shù)根據(jù)不同類產(chǎn)生不同的結(jié)果。換言之,不同類的對(duì)象可以具有相同的接口,這些相同的接口自然會(huì)呈現(xiàn)出不同的行為。通過(guò)多態(tài)性程序設(shè)計(jì),可以編寫(xiě)并編譯代碼以處理未知類型的對(duì)象。

在C++中,多態(tài)性是通過(guò)虛擬函數(shù)實(shí)現(xiàn)的。

//定義日期字符串類型string80typedefcharString80[80];

//定義日期類CDateclassCDate{protected:intyear,month,day;public:CDate(intmonth,intday,intyear);CDateoperator+(intdays);

virtualvoidGetDateString(String80&DateString);voidDisplayDateString(void);//將調(diào)用GetDateString

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論