G第七章 面向?qū)ο蠓治雠c設(shè)計(jì)_第1頁
G第七章 面向?qū)ο蠓治雠c設(shè)計(jì)_第2頁
G第七章 面向?qū)ο蠓治雠c設(shè)計(jì)_第3頁
G第七章 面向?qū)ο蠓治雠c設(shè)計(jì)_第4頁
G第七章 面向?qū)ο蠓治雠c設(shè)計(jì)_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

面向?qū)ο蠓椒嫦驅(qū)ο蟮母拍蠲嫦驅(qū)ο筌浖拈_發(fā)過程面向?qū)ο蠓治鯫OA面向?qū)ο笤O(shè)計(jì)OOD面向?qū)ο缶幊堂嫦驅(qū)ο鬁y試OO軟件的測試用例設(shè)計(jì)intmain(){doubleA,B;intC;doubleD;cout<<“請(qǐng)輸入數(shù)據(jù)A:”;cin>>A;cout<<“請(qǐng)輸入數(shù)據(jù)B:”;cin>>B;cout<<“請(qǐng)輸入運(yùn)算符:”;cin>>C;switch(C){case‘+’:D=A+B;break;case‘-’:D=A-B;break;case‘*’:D=A*B;break;case‘/’:D=A/B;break;}cout<<A<<C<<B<<“=”<<D<<endl;return1;}#include<exception>#include<iostream>usingnamespacestd;classCOperation//"calculator.h"{public: doublem_dFirst; doublem_dSecond; virtualdoubleGetResult()=0 { doubledResult=0; returndResult; }};classAddOperation:publicCOperation//加法{public: virtualdoubleGetResult() { returnm_dFirst+m_dSecond; }};classSubOperation:publicCOperation//減法{public: virtualdoubleGetResult() { returnm_dFirst-m_dSecond; }};classMulOperation:publicCOperation//乘法{public: virtualdoubleGetResult() { returnm_dFirst*m_dSecond; }};classDivOperation:publicCOperation//除法{public: virtualdoubleGetResult() { if(m_dSecond==0)throwexception("除數(shù)不能為0!"); returnm_dFirst/m_dSecond; }};#include"calculator.h"classCCalculatorFactory{public:staticCOperation*Create(charcOperator){COperation*oper; switch(cOperator){ case'+': oper=newAddOperation(); break; case'-': oper=newSubOperation(); break; case'*': oper=newMulOperation(); break; case'/':oper=newDivOperation(); break; default: oper=newAddOperation(); break; } returnoper;}};#include"calculator.h"intmain(){doublea,b;cin>>a>>b;COperation*op=CCalculatorFactory::Create('/');op->m_dFirst=a;op->m_dSecond=b;cout<<op->GetResult()<<endl;return0;}面向?qū)ο筌浖こ毯蛡鹘y(tǒng)的軟件工程的原理在本質(zhì)上沒有什么不同,只是在傳統(tǒng)軟件工程方法中增加了面向?qū)ο罂紤]和研究問題的思想方法。傳統(tǒng)軟件工程方法側(cè)重于解決具體問題,而面向?qū)ο蠊こ谭椒▌t是從解決一類問題的思想方法和手段來解決一個(gè)具體問題,從長遠(yuǎn)來看會(huì)有較高的效率。傳統(tǒng)的軟件工程原則中增加面向?qū)ο蟮闹笇?dǎo)原則,更豐富了軟件工程的原理和方法。應(yīng)注意不要將傳統(tǒng)軟件工程的思想方法和面向?qū)ο筌浖こ谭椒ǜ盍验_來。面向?qū)ο蠓椒ǎ∣bject-Oriented)是一種把面向?qū)ο笏枷霊?yīng)用于軟件開發(fā)過程,從而指導(dǎo)軟件開發(fā)活動(dòng)的系統(tǒng)方法,它建立在對(duì)象概念基礎(chǔ)上,是一種運(yùn)用對(duì)象、類、繼承、封裝、聚合、消息發(fā)送及多態(tài)性等概念來構(gòu)造系統(tǒng)的軟件開發(fā)方法。面向?qū)ο蠓椒嫦驅(qū)ο蠹夹g(shù)的提出(類和對(duì)象的概念),最早是在編程語言Simula中提出的。其作者是Ole-JohanDahl

和KristenNygaard。Simula語言是兩個(gè)語言的統(tǒng)稱:SimulaI

和Simula67(Simula67是在1967年發(fā)布的)。Simula語言是公認(rèn)的最早的面向?qū)ο笳Z言,雖然他的實(shí)現(xiàn)并不是很完整。但這是語言發(fā)展史上的一個(gè)重要的里程碑。

20世紀(jì)70年代推出的Smalltalk是一個(gè)支持面向?qū)ο蟆?dòng)態(tài)類型、類型反射的程序語言,奠定了面向?qū)ο蟪绦蛟O(shè)計(jì)的基礎(chǔ)。是AlanKay

設(shè)計(jì)的系統(tǒng),DanIngalls實(shí)現(xiàn)的系統(tǒng)。AlanKay在設(shè)計(jì)的時(shí)候,借用了Simula的messagepassing思想。80年代出現(xiàn)的Smalltak-80中增加了meteclasses。這實(shí)現(xiàn)了一個(gè)思想:一切皆對(duì)象,標(biāo)志著面向?qū)ο蟪绦蛟O(shè)計(jì)進(jìn)入了實(shí)用階段。

//Javainttries=0;while(tries<=5){TryAgain();tries++;}//Smalltalk|tries|tries:=0;[tries<=5]whileTrue:[selfTryAgain.tries:=tries+1]alternatively:5timeRepeat:[selfTryAgain]自80年代中期起,人們注重于面向?qū)ο蠓治龊驮O(shè)計(jì)的研究,逐步形成了面向?qū)ο蠓椒▽W(xué)。P.Coad和E.Yourdon的面向?qū)ο蠓治觯∣bject-OrientedAnalysis,OOA)和面向?qū)ο笤O(shè)計(jì)(Object-OrientedDesign,OOD)GradyBooch的面向?qū)ο箝_發(fā)方法James

Rambough等人提出的對(duì)象建模技術(shù)(ObjectModelingTechnique,OMT)IvarJacobson的面向?qū)ο筌浖こ蹋∣bject-OrientedSoftwareEngineering,OOSE)面向?qū)ο蠓椒ㄅc結(jié)構(gòu)化方法區(qū)別OO方法對(duì)現(xiàn)實(shí)世界中的實(shí)體或者概念對(duì)象進(jìn)行建模對(duì)象各負(fù)其責(zé)對(duì)象通過消息進(jìn)行協(xié)同,完成復(fù)雜的任務(wù)結(jié)構(gòu)化方法研究功能分解的方法通過復(fù)雜的功能組合實(shí)現(xiàn)系統(tǒng)功能面向?qū)ο蠓椒ǔ蔀橹髁鏖_發(fā)方法,其原因主要有:直觀、自然和簡單。面向?qū)ο蠓椒ǚ先藗儗?duì)客觀世界的認(rèn)識(shí)規(guī)律,當(dāng)用戶的需求有所改變時(shí),由于客觀實(shí)體不變,實(shí)體之間的聯(lián)系基本不變,面向?qū)ο蟮目傮w結(jié)構(gòu)就相對(duì)比較穩(wěn)定。增加遞增性開發(fā)。面向?qū)ο蠓椒ㄩ_發(fā)的軟件系統(tǒng)其體系結(jié)構(gòu)易于理解、擴(kuò)充和維護(hù),對(duì)象的具體實(shí)現(xiàn)細(xì)節(jié)對(duì)外部可見,當(dāng)對(duì)象接口確定后,實(shí)現(xiàn)細(xì)節(jié)的修改不會(huì)影響其他對(duì)象,此外,還能依據(jù)規(guī)定的接口方便地組裝成系統(tǒng)。支持軟件重用。面向?qū)ο蠓椒ㄖ械睦^承機(jī)制有力地支持軟件復(fù)用,通過繼承服用公共的屬性和操作,補(bǔ)充形成新系統(tǒng)的類。結(jié)構(gòu)更科學(xué),更能適應(yīng)未來變化。軟件體系結(jié)構(gòu)、軟件復(fù)用、分布計(jì)算、分布對(duì)象技術(shù)和面向agent的軟件工程敏捷方法是網(wǎng)絡(luò)時(shí)代軟件工程技術(shù)發(fā)展的趨勢。面向?qū)ο蠓椒ǖ奶攸c(diǎn)包括如下:從問題領(lǐng)域的客觀事物出發(fā)構(gòu)造軟件系統(tǒng)。用對(duì)象抽象表示這些事物,并作為系統(tǒng)的基本構(gòu)成。事物的靜態(tài)特征(數(shù)據(jù)的表達(dá)特征)用對(duì)象的屬性表示,事物的動(dòng)態(tài)特征(即事物的行為)用對(duì)象服務(wù)表示(即方法)。對(duì)象的屬性與服務(wù)結(jié)合成一個(gè)獨(dú)立的實(shí)體,對(duì)外屏蔽其內(nèi)部細(xì)節(jié)(封裝)。對(duì)事物進(jìn)行分類,具有相同屬性和服務(wù)的對(duì)象歸成一類,類是這些對(duì)象的抽象描述,每個(gè)對(duì)象是它的類的一個(gè)實(shí)例。在不同程度上運(yùn)用抽象的原則,可以得到較一般和特殊的類,特殊的類繼承一般的類的屬性與服務(wù),從而簡化系統(tǒng)的構(gòu)造過程及文檔(繼承)。復(fù)雜的對(duì)象可以用簡單對(duì)象作為其構(gòu)成部分(聚合)。對(duì)象之間通過消息進(jìn)行通信以實(shí)現(xiàn)對(duì)象之間的動(dòng)態(tài)聯(lián)系。通過關(guān)聯(lián)表達(dá)對(duì)象之間的靜態(tài)聯(lián)系。在面向?qū)ο蠓椒ㄩ_發(fā)的系統(tǒng)中,以類的形式進(jìn)行描述,通過對(duì)類的引用而創(chuàng)建的對(duì)象是系統(tǒng)的基本構(gòu)成單位。這些對(duì)象對(duì)應(yīng)著問題論域中的各個(gè)事物,它們的屬性與服務(wù)刻畫了事物的靜態(tài)特征和動(dòng)態(tài)特征。對(duì)象類之間的繼承關(guān)系、聚合關(guān)系、消息和關(guān)聯(lián)表達(dá)了問題論域中事物之間實(shí)際存在的各種關(guān)系。無論是系統(tǒng)的構(gòu)成成分,還是通過這些成分之間的關(guān)系而體現(xiàn)的系統(tǒng)結(jié)構(gòu),都可以直接地影射成問題論域。面向?qū)ο筌浖こ?OOSE)方法是面向?qū)ο蠓椒ㄔ谲浖こ填I(lǐng)域的全面應(yīng)用,包括:面向?qū)ο蠓治?OOA):針對(duì)問題論域中客觀存在的各項(xiàng)事物建立OOA模型中的對(duì)象,用對(duì)象的屬性和服務(wù)分別描述事物的靜態(tài)特征和行為。面向?qū)ο笤O(shè)計(jì)(OOD):針對(duì)系統(tǒng)的某個(gè)具體實(shí)現(xiàn)來運(yùn)用OO方法(1)將OOA模型作為OOD的一部分;(2)針對(duì)具體實(shí)現(xiàn)中的人機(jī)界面、數(shù)據(jù)存儲(chǔ)和任務(wù)管理等因素補(bǔ)充實(shí)現(xiàn)相關(guān)操作。面向?qū)ο缶幊?OOP):用一種面向?qū)ο蟮木幊陶Z言將OOD模型中的每個(gè)成分書寫出來。面向?qū)ο鬁y試(OOT):在測試中運(yùn)用OO技術(shù),以對(duì)象的類作為基本測試對(duì)象,查錯(cuò)范圍主要是類定義之內(nèi)的屬性及服務(wù),以及繼承中類之間關(guān)系。面向?qū)ο筌浖S護(hù)(OOM):程序與問題論域保持一致,降低理解難度;對(duì)象的封裝減小對(duì)象的修改對(duì)系統(tǒng)的影響。面向?qū)ο蟮能浖到y(tǒng):面向?qū)ο螅∣O)=對(duì)象(Object)+類(Classfication)+繼承(Inheritance)+通過消息的通信(CommunicationWithMessage)。面向?qū)ο罂梢远x為:一種使用對(duì)象(屬性與操作封裝)、消息傳遞、類、繼承和多態(tài)等來開發(fā)問題論域的解的范型。一種基于對(duì)象、類、實(shí)例和繼承等概念的技術(shù)。用對(duì)象作為建模的單位。面向?qū)ο蟾拍?、類的實(shí)例化過程是一種實(shí)例的合成過程,而不僅僅是根據(jù)單個(gè)類型進(jìn)行的空間分配、初始化和綁定。指導(dǎo)編譯程序進(jìn)行這種合成的是________。

A.類層次結(jié)構(gòu) B.實(shí)例的個(gè)數(shù)C.多態(tài)的種類 D.每個(gè)實(shí)例的初始狀態(tài)2、重置的基本思想是通過_______機(jī)制的支持,使得子類在繼承父類界面定義的前提下,用適合于自己要求的實(shí)現(xiàn)去置換父類中的相應(yīng)實(shí)現(xiàn)。A.靜態(tài)綁定B.對(duì)象引用C.類型匹配D.動(dòng)態(tài)綁定3、_____反映了類間的一種層次關(guān)系,而______反映了一種整體與部分的關(guān)系。A.繼承 B.組合C.封裝 D.多態(tài)A.繼承B.組合C.封裝D.多態(tài)ADBA1、類的實(shí)例化過程是一種實(shí)例的合成過程,而不僅僅是根據(jù)單個(gè)類型進(jìn)行的空間分配、初始化和綁定。指導(dǎo)編譯程序進(jìn)行這種合成的是________。

A.類層次結(jié)構(gòu) B.實(shí)例的個(gè)數(shù)C.多態(tài)的種類 D.每個(gè)實(shí)例的初始狀態(tài)2、重置的基本思想是通過_______機(jī)制的支持,使得子類在繼承父類界面定義的前提下,用適合于自己要求的實(shí)現(xiàn)去置換父類中的相應(yīng)實(shí)現(xiàn)。A.靜態(tài)綁定B.對(duì)象引用C.類型匹配D.動(dòng)態(tài)綁定3、_____反映了類間的一種層次關(guān)系,而______反映了一種整體與部分的關(guān)系。A.繼承 B.組合C.封裝 D.多態(tài)A.繼承B.組合C.封裝D.多態(tài)ADBA面向?qū)ο蠓椒ㄔ谏嬷芷诟鱾€(gè)階段所開發(fā)出來的“部件”是類,并且各個(gè)類的信息需要進(jìn)行細(xì)化,因此,類成為軟件分析、設(shè)計(jì)和實(shí)現(xiàn)的基本單位。面向?qū)ο蟮拈_發(fā)模型有:應(yīng)用生存期:對(duì)整個(gè)應(yīng)用的開發(fā)過程進(jìn)行了模型化,廣泛應(yīng)用于結(jié)構(gòu)化軟件開發(fā)項(xiàng)目。類生存期:生存期步驟獨(dú)立于任何一個(gè)特殊應(yīng)用的開發(fā),引導(dǎo)開發(fā)工作逐個(gè)階段循序漸進(jìn)。面向?qū)ο筌浖l(fā)展過程實(shí)例建立論域分析應(yīng)用分析高層設(shè)計(jì)類開發(fā)信息系統(tǒng)描述組裝測試維護(hù)客戶輸入求精和維護(hù)從廢棄型開始既存類的復(fù)用從既存類演變漸增式的測試類的規(guī)格說明測試用例和測試開發(fā)實(shí)現(xiàn)漸增式的實(shí)現(xiàn)類的定義:一旦標(biāo)識(shí)了一個(gè)類,就給出了它的規(guī)格說明,其中包括類的實(shí)例可執(zhí)行的操作及其數(shù)據(jù)結(jié)構(gòu)。類的設(shè)計(jì)與實(shí)現(xiàn):類的規(guī)格說明可指導(dǎo)對(duì)存放既存類的軟件庫進(jìn)行查找,這些既存類可用來提供為當(dāng)前應(yīng)用所需要的功能。既存類的復(fù)用從既存類進(jìn)行演變從廢棄型進(jìn)行開發(fā)求精和維護(hù):傳統(tǒng)的維護(hù)活動(dòng)是針對(duì)應(yīng)用的,二求精過程則是針對(duì)類,以及把類鏈接在一起的系統(tǒng)結(jié)構(gòu)的。概念的封裝和實(shí)現(xiàn)的隱藏,使得類具有更大的獨(dú)立性;為便于類的調(diào)整,應(yīng)盡量做到定義與實(shí)現(xiàn)的分離。將應(yīng)用生存期放在一起,給出面向?qū)ο蟮膽?yīng)用開發(fā)過程。分析階段包括論域分析和應(yīng)用分析,要標(biāo)識(shí)問題論域中的抽象。高層設(shè)計(jì)應(yīng)當(dāng)把系統(tǒng)與類的設(shè)計(jì)分開。在高層設(shè)計(jì)階段,設(shè)計(jì)應(yīng)用的頂層視圖相當(dāng)于開發(fā)一個(gè)標(biāo)識(shí)系統(tǒng)的類的界面。類的開發(fā)。應(yīng)用設(shè)計(jì)階段基本上上類的開發(fā),類的開發(fā)獨(dú)立于待開發(fā)的應(yīng)用,但可以支持這個(gè)應(yīng)用。實(shí)例的建立是對(duì)問題的最后解決,建立實(shí)例之間的通信通道,通道可以把引用從一個(gè)對(duì)象傳遞到另一個(gè)對(duì)象來建立。組裝測試把系統(tǒng)組裝成一個(gè)完整的應(yīng)用來進(jìn)行測試。維護(hù)包括在系統(tǒng)的操作中定位故障、在現(xiàn)有的系統(tǒng)加入新的行為等。多數(shù)維護(hù)活動(dòng)發(fā)生在類的這一級(jí),把類的實(shí)現(xiàn)與其規(guī)格說明分離可局部化修改的影響。然而,為了在系統(tǒng)中增加新的行為,偶爾改變界面的需求還是會(huì)有的。面向?qū)ο蠓治龅囊话悴襟E是:在客戶和軟件工程師之間溝通基本的用戶要求,獲取客戶對(duì)系統(tǒng)的需求,包括標(biāo)識(shí)場景(Scenario)和用例(UseCase),以及建造需求模型;以基本的需求為指南來選擇和標(biāo)識(shí)類與對(duì)象(包括定義屬性和基本操作);定義類的結(jié)構(gòu)和層次;表示類(對(duì)象)之間的關(guān)系,建立對(duì)象-關(guān)系模型;建立對(duì)象-行為模型;利用用例/場景來復(fù)審模型,遞進(jìn)地重復(fù)任務(wù)1~5,直至完成建模。面向?qū)ο蠓治雒嫦驅(qū)ο蠓治龅哪康氖情_發(fā)一系列模型,這些分析模型用來描述滿足客戶需求的計(jì)算機(jī)軟件,描述信息、功能和行為。OOA的基本內(nèi)容包括:產(chǎn)生一種描述系統(tǒng)功能和問題論域基本特征的綜合文檔,在分析過程中識(shí)別的概念是高層的抽象,這些抽象成為一個(gè)靈活的可擴(kuò)充軟件的基本構(gòu)件塊。把問題看作一組相互作用的實(shí)體,并確定這些實(shí)體之間的關(guān)系,把系統(tǒng)看成一個(gè)能夠以有控制的方式執(zhí)行的模型。從分析客戶需求的文件開始,抽象出目標(biāo)系統(tǒng)的本質(zhì)屬性,并用分析模型準(zhǔn)確地表示出來。通過建立分析模型,能糾正早期開發(fā)期對(duì)問題域的誤解。面向?qū)ο蠹夹g(shù)的流行衍生出許多OOA方法,每個(gè)方法都引入一個(gè)產(chǎn)品或系統(tǒng)分析過程,一組隨過程演化的模型,以及以一致的方法創(chuàng)建模型的符號(hào)體系。Booch方法Coad和Yourdon方法Jocobson方法Rambaugh方法Wirfs-Brock方法Booch方法包含“微開發(fā)”和“宏開發(fā)”兩個(gè)過程,微開發(fā)定義了一組在宏開發(fā)過程中的每一步反復(fù)應(yīng)用的分析任務(wù)。宏開發(fā)過程概述如下:標(biāo)識(shí)類和對(duì)象標(biāo)識(shí)類和對(duì)象的語義標(biāo)識(shí)類和對(duì)象之間的關(guān)系進(jìn)行一系列精化實(shí)現(xiàn)類和對(duì)象Coad和Yourdon方法建模符號(hào)簡單,開發(fā)分析模型的指引直接明了,其OOA過程概述如下:使用“尋找什么”的標(biāo)準(zhǔn)來標(biāo)識(shí)對(duì)象。定義對(duì)象之間的一般/特殊結(jié)構(gòu)。定義對(duì)象之間的整體/部分結(jié)構(gòu)。標(biāo)識(shí)主題(子系統(tǒng)的構(gòu)件標(biāo)識(shí))。定義屬性及對(duì)象之間的實(shí)例連接。定義服務(wù)及對(duì)象Jocobson方法即OOSE(面向?qū)ο筌浖こ蹋?,特別強(qiáng)調(diào)使用用例來描述用戶和產(chǎn)品或系統(tǒng)間如何交互的場景,OOA過程概述如下:標(biāo)識(shí)系統(tǒng)的用戶和他們的整體責(zé)任。建造需求模型。建造分析模型。Rambaugh方法是分析、系統(tǒng)設(shè)計(jì)和對(duì)象級(jí)設(shè)計(jì)的對(duì)象建模技術(shù)(Object-ModelingTechnique),分析活動(dòng)創(chuàng)建對(duì)象模型、動(dòng)態(tài)模型以及功能模型。OOA過程概述如下:開發(fā)對(duì)問題的范圍陳述。建造對(duì)象模型。開發(fā)動(dòng)態(tài)模型。構(gòu)造系統(tǒng)的功能模型。Wirfs-Brock方法沒有明確區(qū)分分析和設(shè)計(jì)任務(wù),而是從對(duì)客戶規(guī)約的估計(jì)到設(shè)計(jì)完成一個(gè)連續(xù)過程,與分析相關(guān)的任務(wù)概述如下:評(píng)價(jià)客戶規(guī)約。使用語法分析從規(guī)約中抽取候選集。組合類以試圖標(biāo)識(shí)超類。為每個(gè)類定義責(zé)任。為每個(gè)類賦予責(zé)任。標(biāo)識(shí)類之間的關(guān)系。定一類之間基于責(zé)任的協(xié)作。構(gòu)造類的層次表示以顯示繼承關(guān)系。構(gòu)造系統(tǒng)的協(xié)作圖。面向?qū)ο蠓治觯∣OA)過程分為論域分析和應(yīng)用分析。論域分析建立大致的系統(tǒng)實(shí)現(xiàn)環(huán)境,而應(yīng)用分析則根據(jù)特定應(yīng)用的需求進(jìn)行分析。論域分析是基于特定應(yīng)用領(lǐng)域,標(biāo)識(shí)、分析和定義可復(fù)用于應(yīng)用論域內(nèi)多個(gè)項(xiàng)目的公共需求的技術(shù),它的目標(biāo)是發(fā)現(xiàn)和創(chuàng)建一組應(yīng)用廣泛的類,可以復(fù)用于其他系統(tǒng)的開發(fā)。論域分析是與任何軟件項(xiàng)目都沒有牽連的軟件工程活動(dòng)論域知識(shí)源論域分析論域分析模型技術(shù)文件已有應(yīng)用客戶考察目前/未來的需求專家審議類的分類復(fù)用標(biāo)準(zhǔn)論域語言功能模型應(yīng)用分析的依據(jù)是在論域分析時(shí)建立起來的論域分析模型,并把它用于當(dāng)前正在建立的應(yīng)用中。客戶對(duì)系統(tǒng)的需求可以當(dāng)作限制來使用,用它們縮減論域的信息量。相應(yīng)時(shí)間需求、用戶界面需求和某些特殊的需求,如數(shù)據(jù)安全等,都在應(yīng)用分析這一層分解抽出。語義數(shù)據(jù)模型(SemanticDataModels)是建立問題論域模型的一種技術(shù),論域分析的輸出和對(duì)應(yīng)用分析和高層設(shè)計(jì)的輸入構(gòu)成了問題論域模型。語義數(shù)據(jù)模型源于關(guān)系數(shù)據(jù)模型和實(shí)體-聯(lián)系模型,并對(duì)這類模型進(jìn)行和擴(kuò)充和一般化。語義數(shù)據(jù)模型可以表達(dá)問題論域的內(nèi)涵,也可以表示復(fù)雜對(duì)象和對(duì)象之間的聯(lián)系。語義數(shù)據(jù)模型由外部模型、概念模型和內(nèi)部模型等3層模型構(gòu)成,這三層模型可以映射到面向?qū)ο笤O(shè)計(jì)的3個(gè)層次。語義數(shù)據(jù)模型主要特征面向?qū)ο笤O(shè)計(jì)外部模型用戶的數(shù)據(jù)視圖類的定義(規(guī)格說明)概念模型實(shí)體及其聯(lián)系之間的內(nèi)涵類之間的應(yīng)用聯(lián)系內(nèi)部模型數(shù)據(jù)的物理模型類的實(shí)現(xiàn)外部模型是來自應(yīng)用的外部現(xiàn)實(shí)世界的視圖,反映了用戶對(duì)問題的理解。概念模型要考慮在外部模型層所標(biāo)識(shí)的實(shí)體之間的關(guān)系,聯(lián)系的重要屬性是實(shí)例連接。內(nèi)部模型考慮實(shí)體的物理模型,是生存期中類的設(shè)計(jì)階段,物理模型包括數(shù)據(jù)和操作。語義數(shù)據(jù)模型中的一般聯(lián)系在面向?qū)ο笤O(shè)計(jì)中起著核心的作用,通過它們給出了繼承和實(shí)例化等概念的表達(dá)。泛化(Generalization)聚合(Aggregation)分類(classification)關(guān)聯(lián)(Association)語義數(shù)據(jù)模型提供了對(duì)外部層和概念層的支持,從用戶視圖的角度出發(fā),標(biāo)識(shí)和描述實(shí)體,還提供了從這些視圖到實(shí)際數(shù)據(jù)結(jié)構(gòu)的映像,即內(nèi)部層。一般化關(guān)系表示類與類之間的繼承關(guān)系接口與接口之間的繼承關(guān)系類對(duì)接口的實(shí)現(xiàn)關(guān)系。方向:與繼承或?qū)崿F(xiàn)的方向相反從子類指向父類從實(shí)現(xiàn)接口的類指向被實(shí)現(xiàn)的接口。關(guān)聯(lián)關(guān)系是類與類之間的聯(lián)接它使一個(gè)類知道另一個(gè)類的屬性和方法。關(guān)聯(lián)可以是雙向的,也可以是單向的。雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒有箭頭。單向的關(guān)聯(lián)有一個(gè)箭頭,表示關(guān)聯(lián)的方向,更為普遍,通常不鼓勵(lì)使用雙向的關(guān)聯(lián)。在Java語言里,關(guān)聯(lián)關(guān)系用實(shí)例變量實(shí)現(xiàn)每一個(gè)關(guān)聯(lián)都有一個(gè)名字(Drives)每一個(gè)關(guān)聯(lián)都有兩個(gè)端點(diǎn)每個(gè)端點(diǎn)有角色名,顯示出關(guān)聯(lián)的本質(zhì)關(guān)聯(lián)的端點(diǎn)有基數(shù)表明該端類有幾個(gè)實(shí)例關(guān)聯(lián)關(guān)系可以進(jìn)一步確定為聚合關(guān)系或者合成關(guān)系聚合關(guān)系(共享聚合)是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系。是整體和個(gè)體之間的關(guān)系(汽車類與引擎類、輪胎類)關(guān)聯(lián)關(guān)系往往可以進(jìn)一步確定為聚合關(guān)系或者合成關(guān)系(如唐僧(師傅)與徒弟)僅僅從Java語法上難以分辨關(guān)聯(lián)與聚合,需要考察所涉及的類之間的邏輯關(guān)系。如果不能確定,可以設(shè)置為關(guān)聯(lián)關(guān)系。合成關(guān)系(組成聚合)比聚合關(guān)系強(qiáng)的關(guān)聯(lián)關(guān)系。整體對(duì)象負(fù)責(zé)部分對(duì)象的生命周期。負(fù)責(zé)部分對(duì)象的存活或消亡整體對(duì)象可以將代表部分的對(duì)象傳遞給另一個(gè)對(duì)象,由后者負(fù)責(zé)此對(duì)象的生命周期。代表部分的對(duì)象在每一個(gè)時(shí)刻只能與一個(gè)對(duì)象發(fā)生合成關(guān)系,由后者排他地負(fù)責(zé)其生命周期。合成關(guān)系聚合關(guān)系依賴關(guān)系表示一個(gè)類依賴于另一個(gè)類的定義。與關(guān)聯(lián)關(guān)系不同:Person類里沒有Car和House類的屬性,Car和House類的實(shí)例是以參量的方式傳入到buy()方法中去的。人(Person)可以買車(Car〕和房子(House),Person類依賴于Car類和House類。因?yàn)镻erson類引用了Car類和House類分類在系統(tǒng)的設(shè)計(jì)中出現(xiàn)了一個(gè)類的各個(gè)實(shí)例間有共享信息時(shí),常常要利用分類聯(lián)系,建立泛化/特化類的繼承層次結(jié)構(gòu)。在一個(gè)解釋性語言環(huán)境(像Smalltalk)中,類的每個(gè)實(shí)例都可具有該類的屬性。提供了一沖借助于“黑板”系統(tǒng)開發(fā)各實(shí)例間通信的能力,在這個(gè)黑板系統(tǒng)中,可以把一個(gè)實(shí)例相關(guān)屬性寫到黑板上,該類其他實(shí)例可以從黑板上讀取它。而在系統(tǒng)中的其他對(duì)象不能存取這個(gè)屬性,它僅僅對(duì)該類的實(shí)例是可訪問的。在分析階段所標(biāo)識(shí)的對(duì)象是應(yīng)用級(jí)的對(duì)象,即它們對(duì)應(yīng)于應(yīng)用論域的用戶視圖。由它們產(chǎn)生的類是對(duì)用戶視圖的模型而不是對(duì)物理數(shù)據(jù)結(jié)構(gòu)的模型化。計(jì)算機(jī)顯示屏幕就是一個(gè)對(duì)象,它給出用戶界面部分,可將其抽象成一個(gè)類顯示器屏幕,以反映用戶的想法。標(biāo)識(shí)的實(shí)現(xiàn)級(jí)的類可以是一個(gè)特殊的位圖存儲(chǔ)結(jié)構(gòu),為了確定在屏幕上將要顯示什么,就需要掃描這個(gè)結(jié)構(gòu)。作為顯示器屏幕類的實(shí)現(xiàn)部分,需要使用一個(gè)位圖類。在分析階段,特定應(yīng)用適用于要標(biāo)識(shí)的聯(lián)系,這些聯(lián)系表明了問題論域中實(shí)體之間的相互作用。在設(shè)計(jì)中,應(yīng)用級(jí)聯(lián)系用下面兩種方式中的一種來表示:消息連接。兩個(gè)對(duì)象之間的通信聯(lián)系可以標(biāo)識(shí)為兩個(gè)對(duì)象之件的消息。交互對(duì)象實(shí)例連接。兩個(gè)對(duì)象之間的聯(lián)系可以通過一個(gè)不依賴于兩個(gè)對(duì)象種的任一方的交互對(duì)象表示。有四種類型,表示在兩個(gè)類中實(shí)例的對(duì)應(yīng)關(guān)系,包括一對(duì)一、多對(duì)一、一對(duì)多和多對(duì)多。面向?qū)ο笤O(shè)計(jì)是將OOA所創(chuàng)建的分析模型轉(zhuǎn)化成設(shè)計(jì)模型。OOD和OOA采用相同的符號(hào)表示,沒有明顯的分界線,往往反復(fù)迭代進(jìn)行。在OOA中關(guān)心的是系統(tǒng)“做什么”,而在OOD中要解決的是系統(tǒng)如何做。因此,需要在OOA模型中為系統(tǒng)的實(shí)現(xiàn)補(bǔ)充新的類,或在原有類中補(bǔ)充新屬性和操作。OOA是一個(gè)分類活動(dòng),即分析問題力圖確定在開發(fā)解決方案時(shí)可應(yīng)用的對(duì)象類,同時(shí)確定對(duì)象關(guān)系和行為。OOD使得軟件工程師能夠確定從類中導(dǎo)出的對(duì)象,以及這些對(duì)象的相互關(guān)聯(lián),此外,OOD描述了對(duì)象間的關(guān)系如何達(dá)到;行為如何實(shí)現(xiàn);對(duì)象間通信如何實(shí)現(xiàn)。OOD同樣遵循抽象、信息隱藏、功能獨(dú)立和模塊化等設(shè)計(jì)準(zhǔn)則。面向?qū)ο笤O(shè)計(jì)面向?qū)ο笤O(shè)計(jì)一般步驟如下:系統(tǒng)設(shè)計(jì)將子系統(tǒng)分配到處理器。選擇實(shí)現(xiàn)數(shù)據(jù)管理、界面支持和任務(wù)管理的設(shè)計(jì)策略。為系統(tǒng)設(shè)計(jì)合適的控制機(jī)制。復(fù)審并考慮權(quán)衡對(duì)象設(shè)計(jì)在過程級(jí)別設(shè)計(jì)每個(gè)操作。定義內(nèi)部類。為類屬性設(shè)計(jì)內(nèi)部數(shù)據(jù)結(jié)構(gòu)消息設(shè)計(jì):使用對(duì)象間的協(xié)作和對(duì)象-關(guān)系模型,設(shè)計(jì)消息模型。復(fù)審:復(fù)審設(shè)計(jì)模型,并在需要時(shí)迭代。OOD通常分為高層設(shè)計(jì)和低層設(shè)計(jì)兩個(gè)階段,高層設(shè)計(jì)建立應(yīng)用的體系結(jié)構(gòu),低層設(shè)計(jì)集中于類及關(guān)系的詳細(xì)設(shè)計(jì)。高層設(shè)計(jì)階段開發(fā)軟件的體系結(jié)構(gòu),構(gòu)造軟件的總體模型。主要是標(biāo)識(shí)在計(jì)算機(jī)環(huán)境中解決問題所需要的概念,并增加一批新類(可使應(yīng)用軟件與系統(tǒng)的外部世界交互的類)。此階段的輸出是適合應(yīng)用軟件要求的類、類之間的關(guān)系和應(yīng)用的子系統(tǒng)視圖規(guī)格說明。從OOD導(dǎo)出的系統(tǒng)結(jié)構(gòu)圖系統(tǒng)級(jí)的抉擇將影響對(duì)應(yīng)用軟件各個(gè)子系統(tǒng)的任務(wù)分配,但不影響各個(gè)類的結(jié)構(gòu)。客戶/服務(wù)器(C/S)模型是一個(gè)典型的高層設(shè)計(jì)模型,這個(gè)模型導(dǎo)出的體系結(jié)構(gòu)既可以在過程性系統(tǒng)中使用,又可在面向?qū)ο蟮南到y(tǒng)中使用。建立高層設(shè)計(jì)模型旨在讓系統(tǒng)的一個(gè)部分(服務(wù)器子系統(tǒng))提供一組服務(wù)給另一個(gè)部分(客戶子系統(tǒng))。請(qǐng)求服務(wù)的對(duì)象都?xì)w于客戶子系統(tǒng),而接受請(qǐng)求提供服務(wù)的就是服務(wù)器。對(duì)一個(gè)應(yīng)用進(jìn)行高層設(shè)計(jì)時(shí),可以遵守以下幾個(gè)簡單規(guī)則:最小化構(gòu)件間的通信。子系統(tǒng)各個(gè)高層構(gòu)件之間的通信量應(yīng)當(dāng)達(dá)到最小。一個(gè)用戶界面應(yīng)當(dāng)能夠自行處理交互、改正錯(cuò)誤和控制硬件,而不需打擾主應(yīng)用。隱藏復(fù)雜性:子系統(tǒng)應(yīng)當(dāng)把那些成組的類打包,形成高度的內(nèi)聚。邏輯功能分組:雖然輸入和輸出設(shè)備可能相互間不通信,但邏輯上把它們歸組到一個(gè)處理輸入/輸出的子系統(tǒng)中。這樣就提供了一個(gè)單元,它很容易識(shí)別并定位問題論域中的事件。類與通過概念封裝的子系統(tǒng)十分類似。事實(shí)上,每個(gè)子系統(tǒng)都可以被當(dāng)作一個(gè)類來實(shí)現(xiàn),這個(gè)類聚集了它的構(gòu)件,提供了一組操作。高層設(shè)計(jì)標(biāo)識(shí)在計(jì)算機(jī)環(huán)境中實(shí)現(xiàn)問題解決所需要的概念,并增加了一批必要的類。這些類包括那些可使應(yīng)用軟件與系統(tǒng)的外部世界交互的類。這些交互則包括與其他軟件系統(tǒng)(如數(shù)據(jù)庫管理系統(tǒng)、鼠標(biāo)和鍵盤)的界面,與收集數(shù)據(jù)或者負(fù)責(zé)控制的硬件設(shè)備的界面。這個(gè)階段的輸出是適合應(yīng)用軟件要求的類、類間的聯(lián)系以及應(yīng)用的子系統(tǒng)視圖規(guī)格說明。標(biāo)識(shí)應(yīng)用所需的概念是類設(shè)計(jì)的第一步。應(yīng)用分析過程包括了對(duì)問題論域所需的類的模型化。但在最終實(shí)現(xiàn)應(yīng)用時(shí),還需要追加一些類。類設(shè)計(jì)的主要目標(biāo)是:單一概念的模型。在分析與高層設(shè)計(jì)階段,常常需要使用多個(gè)類來表示一個(gè)“概念”??蓮?fù)用的“插接相容性”構(gòu)件。所開發(fā)的構(gòu)件可以在未來的應(yīng)用中使用。可靠的構(gòu)件。應(yīng)用軟件必須是可靠的(健壯的和正確定義的)軟件。而這種可靠性與它的構(gòu)件有關(guān)。每個(gè)構(gòu)件必須經(jīng)過充分的測試。標(biāo)識(shí)應(yīng)用所需的概念是類設(shè)計(jì)的第一步。應(yīng)用分析過程包括了對(duì)問題論域所需的類的模型化。但在最終實(shí)現(xiàn)應(yīng)用時(shí),還需要追加一些類。類設(shè)計(jì)的主要目標(biāo)是:可集成的構(gòu)件。將類的實(shí)例用到其他類的開發(fā)和應(yīng)用中,這要求類的界面應(yīng)當(dāng)盡可能小,表示一個(gè)類所需要的數(shù)據(jù)和操作都包含在類定義中。因此,類的設(shè)計(jì)應(yīng)當(dāng)盡量減少命名沖突。類結(jié)構(gòu)提供的封裝特性使得把概念集成到應(yīng)用的工作變得很容易。封裝特性保證了把一個(gè)概念的所有細(xì)節(jié)都組合在一個(gè)界面下,而信息隱蔽則保證了實(shí)現(xiàn)級(jí)的名字將不會(huì)同其他類的名字互相干擾。類的模塊設(shè)計(jì)還有以下一些方針:信息隱蔽。軟件設(shè)計(jì)通過信息隱蔽可增強(qiáng)抽象,并可保護(hù)類的存儲(chǔ)表示不被數(shù)據(jù)類型實(shí)例的用戶直接存取。對(duì)其表示的惟一存取途徑只能是界面。消息限制。類的設(shè)計(jì)者應(yīng)當(dāng)為類的命令設(shè)計(jì)一個(gè)明確的界面,該類的實(shí)例的用戶應(yīng)當(dāng)只使用界面提供的操作。狹窄界面。不是所有的操作都是公共的。只有對(duì)其他類的實(shí)例必要的操作才放到界面上,其他操作應(yīng)是隱蔽實(shí)現(xiàn)的。強(qiáng)內(nèi)聚。模塊內(nèi)部各個(gè)部分之間應(yīng)有較強(qiáng)的關(guān)系,它們不能分別標(biāo)識(shí)。類的模塊設(shè)計(jì)還有以下一些方針:弱耦合。在面向?qū)ο蠓椒ㄖ惺亲罨镜膶?duì)象,耦合主要指不同對(duì)象之間相互關(guān)聯(lián)的緊密程度。耦合程度依賴于所使用的分解方法,“一般/特殊”的繼承結(jié)構(gòu)損害了弱耦合的概念。包括交互耦合和繼承耦合。顯式信息傳遞。除了依賴于最少的類外,還應(yīng)該明確在這些類之間的信息流。在類之間全局變量的共享隱含了信息的傳遞,并且是一種依賴形式。因此,兩個(gè)類之間的交互應(yīng)當(dāng)僅涉及顯式信息傳遞。顯式信息傳遞是通過參數(shù)表來完成的。類的模塊設(shè)計(jì)還有以下一些方針:派生類當(dāng)作派生類型。每個(gè)派生類應(yīng)該當(dāng)做基類的特殊化來開發(fā),而基類所具有的公共界面成為派生類的共有界面的一個(gè)子集。C++允許設(shè)計(jì)者選擇類的基類是共有的或私有的。如果基類是共有的,則其共有界面將成為新的派生類的共有界面部分,這表明基類的行為成為派生類的行為部分。如果基類是私有的,它的行為將不是繼承類的公共行為部分而是實(shí)現(xiàn)部分。對(duì)基類的劃分是為了實(shí)現(xiàn)新類中的服務(wù)。抽象類。某些語言提供了一個(gè)類,用它作為繼承結(jié)構(gòu)的開始點(diǎn),所有用戶定義的類都直接或間接以這個(gè)類為基類。因此,每個(gè)繼承結(jié)構(gòu)的根類應(yīng)當(dāng)是目標(biāo)概念的一個(gè)抽象模型。這個(gè)抽象模型生成一個(gè)類,它不用于產(chǎn)生實(shí)例。它定義了一個(gè)最小的共有界面,許多派生類可以加到這個(gè)界面上以給出概念的一個(gè)特定視圖。利用既存類來設(shè)計(jì)類有4種方式,即選擇、分解、配置和演變,這是面向?qū)ο蠹夹g(shù)的一個(gè)重要優(yōu)點(diǎn)。許多類的設(shè)計(jì)都基于既存類的復(fù)用。選擇。設(shè)計(jì)類最簡單的方法是從既存構(gòu)件中簡單地選擇合乎要求的構(gòu)件。一個(gè)面向?qū)ο箝_發(fā)環(huán)境應(yīng)提供常用構(gòu)件庫,大多數(shù)語言環(huán)境都帶有一個(gè)原始構(gòu)件庫(如整數(shù)、實(shí)數(shù)和字符),它是提供其他所有功能的基礎(chǔ)層。任何基本構(gòu)件庫(如“基本數(shù)據(jù)結(jié)構(gòu)”構(gòu)件)都應(yīng)建立在這些原始層上。例如,列表、集合、棧和隊(duì)列等,都是一些一般的和可復(fù)用的類。原始層還包括一組提供其他應(yīng)用論域服務(wù)的一般類,如窗口系統(tǒng)和圖形圖元等。利用既存類來設(shè)計(jì)類有4種方式,即選擇、分解、配置和演變,這是面向?qū)ο蠹夹g(shù)的一個(gè)重要優(yōu)點(diǎn)。許多類的設(shè)計(jì)都基于既存類的復(fù)用。分解。最初標(biāo)識(shí)的“類”常常是幾個(gè)概念的組合。在著手設(shè)計(jì)時(shí),可能會(huì)發(fā)現(xiàn)所標(biāo)識(shí)的操作落在分散的幾個(gè)概念中,或者會(huì)發(fā)現(xiàn),數(shù)據(jù)屬性被分開放到模型中拆散概念形成的幾個(gè)組內(nèi)。這樣就必須把一個(gè)類分成幾個(gè)類,希望新標(biāo)識(shí)的類容易實(shí)現(xiàn),或者它們已經(jīng)存在。利用既存類來設(shè)計(jì)類有4種方式,即選擇、分解、配置和演變,這是面向?qū)ο蠹夹g(shù)的一個(gè)重要優(yōu)點(diǎn)。許多類的設(shè)計(jì)都基于既存類的復(fù)用。配置。在設(shè)計(jì)類時(shí),可能會(huì)要求由既存類的實(shí)例提供類的某些特性。通過把相應(yīng)類的實(shí)例聲明為新類的屬性來配置新類。利用既存類來設(shè)計(jì)類有4種方式,即選擇、分解、配置和演變,這是面向?qū)ο蠹夹g(shù)的一個(gè)重要優(yōu)點(diǎn)。許多類的設(shè)計(jì)都基于既存類的復(fù)用。演變。要開發(fā)的新類可能與一個(gè)既存類非常類似,但不完全相同。此時(shí),不適宜采用“選擇”操作,但可以將一個(gè)既存類演變成一個(gè)新類,可以利用繼承機(jī)制來表示泛化的關(guān)系。特殊化處理有3種可能的方式,例如由既存類建立子類、通過繼承層次由既存類建立新類和建立既存類的父類等。類的設(shè)計(jì)描述包括兩部分:協(xié)議描述

(protocoldescription)。協(xié)議描述定義了每個(gè)類可以接收的消息,建立一個(gè)類的界面。協(xié)議描述由一組消息及對(duì)每個(gè)消息的相應(yīng)注釋組成。實(shí)現(xiàn)描述

(implementationdescription)實(shí)現(xiàn)描述說明了每個(gè)操作的實(shí)現(xiàn)細(xì)節(jié),這些操作應(yīng)包含在類的消息中。實(shí)現(xiàn)描述的信息有:類名和對(duì)一個(gè)類引用的規(guī)格說明私有數(shù)據(jù)結(jié)構(gòu)的規(guī)格說明,包括數(shù)據(jù)項(xiàng)和其類型的指示。每個(gè)操作的過程描述。實(shí)現(xiàn)描述必須包含充足的信息,以提供對(duì)協(xié)議描述中所描述的所有消息的適當(dāng)處理。接受一個(gè)類所提供服務(wù)的用戶必須熟悉執(zhí)行服務(wù)的協(xié)議,即定義“什么”被描述;而服務(wù)的提供者(對(duì)象類本身)必須關(guān)心:服務(wù)如何提供給用戶,即實(shí)現(xiàn)細(xì)節(jié)的封裝問題。界面。類的界面構(gòu)成了類的規(guī)格說明,定義了與其他類的交互。界面包括操作特征及先決條件和后置條件。操作特征包括它的名字和應(yīng)歸入?yún)?shù)的類。命名操作。操作的命名指示了設(shè)計(jì)人員所采取的視點(diǎn)。操作的目的是操縱一個(gè)類的實(shí)例(該操作定義在此類上),或者提供有關(guān)該實(shí)例狀態(tài)的信息。操作名應(yīng)反映這個(gè)目的。傳送給操作的信息是操作的另一特征,要求數(shù)據(jù)量不要很多。操作發(fā)送消息給對(duì)象,這些對(duì)象必須在消息的參數(shù)中出現(xiàn)。因此,操作可能會(huì)引起其他對(duì)象改變它們的狀態(tài),并改變它自己對(duì)象的狀態(tài)。界面的級(jí)別。類定義中有三種不同的存取級(jí)別:Public(共有界面):類A的共有界面的使用者是所有使用類A的實(shí)例的對(duì)象的集會(huì)。這個(gè)界面是該類操作的一個(gè)列表,它包括通常使用的算法運(yùn)算和輸入輸出函數(shù)。這些操作的實(shí)現(xiàn)和類的數(shù)據(jù)元素的確切表示,對(duì)類的用戶來說都是隱蔽的。Private(私有界面):類的私有界面是一些操作的集合,這些操作僅為該類的其他操作所使用。它們是依賴于實(shí)現(xiàn)的;同時(shí)它們進(jìn)一步把實(shí)現(xiàn)的細(xì)節(jié)對(duì)外部世界隱蔽起來。subclass(子類):類A的子類界面是一個(gè)操作的集合,使用這些操作可存取類A子類的實(shí)例。,這些操作多少有點(diǎn)依賴于實(shí)現(xiàn)的。它們?cè)试S子類對(duì)類的細(xì)節(jié)進(jìn)行特殊的存取。標(biāo)準(zhǔn)界面。在設(shè)計(jì)類的層次時(shí),結(jié)構(gòu)的根類提供了一個(gè)模型或標(biāo)準(zhǔn)界面,它們能夠描述在子類中可找到的那些概念。根類是抽象的,且不必實(shí)現(xiàn)界面上的每個(gè)操作,但它應(yīng)提供將在每個(gè)子類中實(shí)現(xiàn)的操作的標(biāo)準(zhǔn)特征。內(nèi)部結(jié)構(gòu)。在類的內(nèi)部定義了兩種類型的數(shù)據(jù):數(shù)據(jù)模型的成員和支持信息。數(shù)據(jù)模型的成員提供了概念的表示;支持信息僅僅是為了幫助概念的實(shí)現(xiàn)。數(shù)據(jù)模型對(duì)象的標(biāo)識(shí)和定義是分析與高層設(shè)計(jì)階段的任務(wù),而支持?jǐn)?shù)據(jù)對(duì)象的標(biāo)識(shí)是類設(shè)計(jì)和實(shí)現(xiàn)級(jí)的任務(wù)。消息模式。要根據(jù)功能模型及動(dòng)態(tài)模型,以及實(shí)際情況設(shè)計(jì)對(duì)象的消息模式。對(duì)象之間相互傳遞消息的機(jī)制是:當(dāng)一個(gè)對(duì)象接收了一條消息后,就在該對(duì)象中尋找消息指定的操作名。假如沒有找到,就到它的父類中尋找,直到查找成功,或查找失敗(找完根類對(duì)象)為止。如果找到了所需的操作,就執(zhí)行這個(gè)操作,執(zhí)行的過程中會(huì)有進(jìn)一步的消息發(fā)送。消息發(fā)送的方法是完全一樣的,不考慮具體的接收者。消息模式和處理能力共同構(gòu)成對(duì)象的外部特性。確定各類之間的繼承關(guān)系時(shí),將各對(duì)象的公共性質(zhì)放在較上層的類中描述,通過繼承而共享對(duì)公共性質(zhì)的描述。類又是一種分層結(jié)構(gòu),類的上層可以有父類,下層有子類。子類直接繼承父類的全部描述,這也叫傳遞性。類可以有多個(gè)父類和多個(gè)子類,即多重繼承;如果只限于一個(gè)父類,叫簡單繼承,在這種情況下,類的層次結(jié)構(gòu)是樹型結(jié)構(gòu)。在實(shí)現(xiàn)時(shí),利用繼承性可把通用的類和專用的類存儲(chǔ)于類庫中,根據(jù)需要可以復(fù)用它們。面向?qū)ο蠓椒ò衍浖_發(fā)的分析、設(shè)計(jì)和實(shí)現(xiàn)自然地聯(lián)系在一起。雖然面向?qū)ο笤O(shè)計(jì)原則上不依賴于特定的實(shí)現(xiàn)環(huán)境,但是實(shí)現(xiàn)的結(jié)果和成本卻在很大程度上取決于實(shí)現(xiàn)環(huán)境。因此,直接支持面向?qū)ο笤O(shè)計(jì)范式的面向?qū)ο蟪绦蛘Z言、開發(fā)環(huán)境及類庫等,對(duì)于面向?qū)ο髮?shí)現(xiàn)來說是非常重要的。面向?qū)ο缶幊?OOP)

是在完成面向?qū)ο蠓治?、面向?qū)ο笤O(shè)計(jì)的基礎(chǔ)上,利用一種或多種面向?qū)ο笳Z言,具體實(shí)現(xiàn)軟件各項(xiàng)功能的過程。面向?qū)ο蟮某绦蛟O(shè)計(jì)語言適合用來實(shí)現(xiàn)面向?qū)ο笤O(shè)計(jì)結(jié)果。事實(shí)上,具有方便的開發(fā)環(huán)境和豐富的類庫的面向?qū)ο蟪绦蛟O(shè)計(jì)語言,是實(shí)現(xiàn)面向?qū)ο笤O(shè)計(jì)的最佳選擇。面向?qū)ο缶幊滩徽摬捎煤畏N面向?qū)ο笳Z言進(jìn)行編碼,它們都有共性的一面,即符合面向?qū)ο缶幊痰囊?guī)范,具有面向?qū)ο蟮木幊田L(fēng)格。面向?qū)ο蟮某绦蛟O(shè)計(jì)語言必須支持下面的概念:封裝的對(duì)象類和實(shí)例的概念類的繼承類的多態(tài)性面向?qū)ο缶幊讨械幕緲?gòu)件是對(duì)象和類,基本機(jī)制是方法、消息和繼承性,提高軟件開發(fā)的抽象層次、提高軟件的重用性,是面向?qū)ο缶幊痰幕舅枷牒褪侄?。設(shè)計(jì)重點(diǎn)集中在類和類層次結(jié)構(gòu)的設(shè)計(jì)、實(shí)現(xiàn)和重用上,是面向?qū)ο缶幊毯蛡鹘y(tǒng)程序設(shè)計(jì)的本質(zhì)區(qū)別。詳細(xì)的面向?qū)ο笤O(shè)計(jì)是與語言有關(guān)的。這樣,可以有效地為過程型語言、面向軟件包的語言、面向?qū)ο蟮恼Z言所用。通常所有的語言都可以完成面向?qū)ο髮?shí)現(xiàn),但某些語言能夠提供更豐富的語法,能夠顯式地描繪在面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)過程中所使用的表示法。面向?qū)ο笤O(shè)計(jì)與過程型語言面向?qū)ο笤O(shè)計(jì)與基本對(duì)象語言面向?qū)ο笤O(shè)計(jì)與面向?qū)ο蟮某绦蛟O(shè)計(jì)語言面向?qū)ο笤O(shè)計(jì)與面向?qū)ο髷?shù)據(jù)庫語言(OODBL)、面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)(OODBMS)及語言,是面向?qū)ο蟪绦蛟O(shè)計(jì)語言(OOPL)與數(shù)據(jù)管理能力的組合OODBMS有4種不同的體系結(jié)構(gòu):大屬性。擴(kuò)充關(guān)系型DBMS,能容納大屬性,如一個(gè)文檔。松散耦合。一個(gè)OOPL與大量的DBMS組合在一起。緊密耦合。一個(gè)OOPL與某個(gè)專用的DBMS集成為一個(gè)系統(tǒng)。擴(kuò)充關(guān)系型。擴(kuò)充關(guān)系型DBMS,能容納“過程”之類的屬性。緊密耦合體系結(jié)構(gòu)在程序設(shè)計(jì)和數(shù)據(jù)操縱中使用了同一種語言,它更能顯式地表達(dá)面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)的語義。面向?qū)ο蟪绦蛟O(shè)計(jì)語言(OOPL,Object-Oriented

ProgrammingLanguages)是目前最為流行的一類高級(jí)語言,主要有Java、C++、VisualC++和Delphi等。OOPL以其內(nèi)在機(jī)制體現(xiàn)了OOP的核心思想,同時(shí)為OOP的實(shí)際應(yīng)用提供了有效的支持和規(guī)范化的約束。盡管使用傳統(tǒng)編程語言也可以體現(xiàn)一些OOP風(fēng)格,但傳統(tǒng)編程語言中缺少像繼承性這樣的OOPL所獨(dú)有的基本機(jī)制,所以O(shè)OPL更為規(guī)范、高效、易于重用和易于維護(hù)。純OOPL為OOP的發(fā)展起到了奠基作用,混合式OOPL則使得OOP為軟件產(chǎn)業(yè)所真正接受。在OOPL中廣泛使用了動(dòng)態(tài)聯(lián)編、多態(tài)性、多重繼承等技術(shù),類庫和程序設(shè)計(jì)環(huán)境則是決定一個(gè)OOPL是否適用的兩個(gè)關(guān)鍵因素。OOPL的基本特征有七個(gè),即:對(duì)象、類、繼承性、信息隱藏、強(qiáng)類型化、并發(fā)性、持久性。但是,目前還沒有哪一種語言能夠同時(shí)具備這些特征。流行的OOPL都可以歸入以下六類語言之一:基于對(duì)象的語言,支持對(duì)象。基于類的語言,對(duì)象屬于類。面向?qū)ο蟮恼Z言,類支持繼承性。面向?qū)ο蟮臄?shù)據(jù)抽象語言,類支持信息隱藏。面向?qū)ο蟮膹?qiáng)類型化語言,類型可以在編譯時(shí)確定。支持并發(fā)性與持久性的面向?qū)ο蟮膹?qiáng)類型化語言。常用的面向?qū)ο筌浖臏y試方法和技巧與過程軟件相同,或者可以從傳統(tǒng)的測試方法和技巧中演化而來,但實(shí)踐和研究表明,它們之間還是存在許多不同。面向?qū)ο蟮能浖y試要面對(duì)某些新的挑戰(zhàn)。同時(shí),作為增量開發(fā)過程的一部分,設(shè)計(jì)良好的面向?qū)ο筌浖楦纳苽鹘y(tǒng)測試過程提供了機(jī)遇。在面向?qū)ο缶幊陶Z言中,繼承和多態(tài)的特征對(duì)測試者來說是一個(gè)新的技術(shù)難點(diǎn)。面向?qū)ο蠹夹g(shù)不僅給編程語言帶來了變化,而且給軟件開發(fā)的很多方面也帶來了變化。面向?qū)ο鬁y試對(duì)于面向?qū)ο蟮能浖y試,使用了增量開發(fā)過程,重新調(diào)整并使用新的符號(hào)來分析和設(shè)計(jì),并充分利用編程語言的新特性,這些變化提高了軟件的可維護(hù)性、復(fù)用性和靈活性等等:面向?qū)ο蠹夹g(shù)中特有的封裝、繼承和多態(tài)機(jī)制,給面向?qū)ο鬁y試帶來了一些新的特點(diǎn),增加了測試和調(diào)試的難度。在面向?qū)ο蟪绦蛑校瑢?duì)象是屬性和操作的封裝體。對(duì)象彼此之間通過發(fā)送消息啟動(dòng)相應(yīng)的操作,并且通過修改對(duì)象狀態(tài)達(dá)到轉(zhuǎn)換系統(tǒng)運(yùn)行狀態(tài)的目的。對(duì)象并沒有明顯地規(guī)定用什么次序啟動(dòng)它的操作才是合法的。因此在測試類的實(shí)現(xiàn)時(shí),面對(duì)的不是一段順序的代碼,所以傳統(tǒng)的測試方法(?)就不完全適用了。傳統(tǒng)的編程中,復(fù)用無非是從已有的程序中復(fù)制一段代碼,放到當(dāng)前的程序中,或者調(diào)用標(biāo)準(zhǔn)的庫函數(shù)。而面向?qū)ο蟪绦蛑胁粌H要測試父類,對(duì)于繼承的子類也需要展開進(jìn)行測試。隨著繼承層次的加深,雖然可復(fù)用的構(gòu)件越來越多,但是,測試的工作量和難度也隨之增加。面向?qū)ο蟮拈_發(fā)是漸進(jìn)的迭代開發(fā),從分析設(shè)計(jì)到實(shí)現(xiàn)使用相同的語義結(jié)構(gòu),如類、屬性、操作、消息等。復(fù)審對(duì)面向?qū)ο蠓椒▉碚f顯得特別重要,面向?qū)ο蟮臏y試必須擴(kuò)大到面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)階段。正式的技術(shù)復(fù)審可用于檢查分析和設(shè)計(jì)模型的正確性和一致性。為了保證分析和設(shè)計(jì)模型的正確性和—致性,分析人員和業(yè)務(wù)人員應(yīng)該對(duì)分析和設(shè)計(jì)模型中的主要內(nèi)容(類圖、交互圖、活動(dòng)圖和接口描述、構(gòu)架描述、界面描述)進(jìn)行仔細(xì)的討論,確定正確的分析和設(shè)計(jì)模型。為了保持模型之間的一致性,應(yīng)該檢查每個(gè)類以及類之間的連接,如果一個(gè)類在模型的某一部分有表示,而在模型的其他部分沒有正確的反映,則一致性是有問題的。檢查一致性可以從分析模型開始,采用深度優(yōu)先的策略,一直跟蹤到設(shè)計(jì)模型,配合正確性檢查,保持模型間的一致性。每次的開發(fā)迭代都要進(jìn)行單元測試和集成測試,測試設(shè)計(jì)人員要規(guī)劃每一次迭代需要的測試工作。迭代的每一個(gè)構(gòu)造都需要做集成測試,迭代結(jié)束時(shí)進(jìn)行系統(tǒng)測試。設(shè)計(jì)和實(shí)現(xiàn)測試采取的方法是創(chuàng)建測試規(guī)程和測試用例,測試規(guī)程說明如何執(zhí)行一個(gè)測試。有時(shí)可能還需要?jiǎng)?chuàng)建使測試自動(dòng)化的測試構(gòu)件。按照測試規(guī)程執(zhí)行測試,系統(tǒng)地處理每個(gè)測試的結(jié)果,當(dāng)發(fā)現(xiàn)有缺陷的構(gòu)造時(shí),要重新測試,甚至可能要送回給其他核心工作流,以修復(fù)嚴(yán)重的缺陷。出于開發(fā)工作的迭代性,一些在早期創(chuàng)建的測試用例也可以在后續(xù)用做回歸測試用例。在迭代中對(duì)回歸測試的需要逐步增長,這意味著后期迭代將包括大量的回歸測試。測試階段具體包括如下幾個(gè)活動(dòng):制定測試計(jì)劃根據(jù)用況模型、分析模型、設(shè)計(jì)模型、實(shí)現(xiàn)模型以及構(gòu)架描述和補(bǔ)充需求來制定測試計(jì)劃,目的是為了規(guī)劃一次迭代中的測試工作。包括描述測試策略、估計(jì)測試工作所需要的人力以及系統(tǒng)資源、制定測試工作的進(jìn)度。在準(zhǔn)備測試計(jì)劃時(shí)應(yīng)該考慮用況模型和補(bǔ)充性需求等制品,來輔助制定測試進(jìn)度、預(yù)算測試的工作量。一般的測試設(shè)計(jì)準(zhǔn)則是:所設(shè)計(jì)的測試用例和測試規(guī)程能以最小的代價(jià)來測試最重要的用況,并且對(duì)風(fēng)險(xiǎn)性最大的需求進(jìn)行測試。測試階段具體包括如下幾個(gè)活動(dòng):設(shè)計(jì)測試用例設(shè)計(jì)集成測試用例。集成測試用例用于驗(yàn)證被組裝成構(gòu)造的構(gòu)件之間能夠正常交互。測試設(shè)計(jì)人員應(yīng)設(shè)計(jì)一組測試用例,以便有效地完成測試計(jì)劃中規(guī)定的測試目標(biāo)。為此,測試設(shè)計(jì)人員應(yīng)盡可能尋找一組互不重疊的測試用例,以盡可能少的測試用例,發(fā)現(xiàn)盡可能多的問題。設(shè)計(jì)系統(tǒng)測試用例。系統(tǒng)測試用于測試系統(tǒng)功能整體上是否正確,在不同條件下的用況組合的運(yùn)行是否有效。這些條件包括不同的硬件配置、不同程度的系統(tǒng)負(fù)載、不同數(shù)量的參與者,以及不同規(guī)模的數(shù)據(jù)庫。在設(shè)計(jì)系統(tǒng)測試用例時(shí),還要考慮事件流和一些特殊需求。測試階段具體包括如下幾個(gè)活動(dòng):設(shè)計(jì)回歸測試用例為了驗(yàn)證將迭代開發(fā)中產(chǎn)生的構(gòu)件集成在一起是否有缺陷,除了添加一些必要的測試用例進(jìn)行接口的驗(yàn)證外,充分利用前面已經(jīng)使用過的測試用例來驗(yàn)證后續(xù)的構(gòu)造是非常有效的。設(shè)計(jì)回歸測試用例時(shí),要注意靈活性,它要能夠適應(yīng)被測試軟件的變化。測試階段具體包括如下幾個(gè)活動(dòng):實(shí)現(xiàn)測試:構(gòu)件工程師根據(jù)測試用例、測試規(guī)程和被測軟件的實(shí)現(xiàn)模型設(shè)計(jì)并實(shí)現(xiàn)測試構(gòu)件,實(shí)現(xiàn)測試規(guī)程自動(dòng)化。實(shí)現(xiàn)測試構(gòu)件有兩種方法:依賴于測試自動(dòng)化工具。構(gòu)件工程師根據(jù)測試規(guī)程,在測試自動(dòng)化工具環(huán)境中執(zhí)行測試規(guī)程所描述的動(dòng)作,測試工具會(huì)自動(dòng)記錄這些動(dòng)作,構(gòu)件工程師整理這些記錄,并做適當(dāng)?shù)恼{(diào)整,生成一個(gè)測試構(gòu)件。這種構(gòu)件通常是以腳本語言實(shí)現(xiàn)的,例如,VisualBasic的測試腳由構(gòu)件工程師以測試規(guī)程為需求規(guī)格說明,進(jìn)行分析和設(shè)計(jì)后,使用編程語言開發(fā)的測試構(gòu)件。開發(fā)測試構(gòu)件的工程師需要有更高超的編程技巧和責(zé)任心。測試階段具體包括如下幾個(gè)活動(dòng):實(shí)現(xiàn)集成測試:由集成測試人員根據(jù)測試用例、測試規(guī)程、測試構(gòu)件和實(shí)現(xiàn)模型對(duì)一次迭代內(nèi)創(chuàng)建的每個(gè)構(gòu)造執(zhí)行集成測試,并且將集成測試的結(jié)果返回給測試設(shè)計(jì)人員和相關(guān)的工作流負(fù)責(zé)人員,集成測試的工作步驟如下:對(duì)每一個(gè)測試用例執(zhí)行測試規(guī)程(手工或自動(dòng)),實(shí)現(xiàn)與構(gòu)造相關(guān)的集成測試。將測試結(jié)果和預(yù)期結(jié)果相比較,研究二者的偏離原因。把缺陷報(bào)告給相關(guān)工作流的負(fù)責(zé)人員,對(duì)構(gòu)件的缺陷進(jìn)修改。把缺陷報(bào)臺(tái)給測試設(shè)計(jì)人員,對(duì)測試結(jié)果和缺陷類型進(jìn)行統(tǒng)計(jì)分析,評(píng)估整個(gè)測試的結(jié)果。執(zhí)行系統(tǒng)測試測試階段具體包括如下幾個(gè)活動(dòng):執(zhí)行系統(tǒng)測試:集成測試表明系統(tǒng)滿足了當(dāng)前迭代中所確定的集成質(zhì)量目標(biāo)后,開始進(jìn)行系統(tǒng)測試。根據(jù)測試用例、測試規(guī)程、測試構(gòu)件和實(shí)現(xiàn)模型對(duì)迭代開發(fā)的結(jié)果進(jìn)行系統(tǒng)測試,并且將測試中發(fā)現(xiàn)的問題反饋給相關(guān)人員。評(píng)估測試:這是由測試設(shè)計(jì)人員根據(jù)測試計(jì)劃、測試用例、測試規(guī)程、測試構(gòu)件和測試執(zhí)行者反饋的測試缺陷對(duì)一次迭代內(nèi)的測試工作做出的評(píng)估。測試設(shè)計(jì)人員準(zhǔn)備了一些度量標(biāo)準(zhǔn),用來確定軟件的質(zhì)量水平,并確定還需要進(jìn)一步做多少測試工作。測試設(shè)計(jì)人員尤其看重兩條度量標(biāo)準(zhǔn):

測試完全性。測試設(shè)計(jì)人員分析測試用例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論