第3章面向?qū)ο箝_發(fā)方法與_第1頁
第3章面向?qū)ο箝_發(fā)方法與_第2頁
第3章面向?qū)ο箝_發(fā)方法與_第3頁
第3章面向?qū)ο箝_發(fā)方法與_第4頁
第3章面向?qū)ο箝_發(fā)方法與_第5頁
免費預(yù)覽已結(jié)束,剩余32頁可下載查看

下載本文檔

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

文檔簡介

現(xiàn)代軟件工程

ModernSoftwareEngineering

第三章面向?qū)ο笈cUML西郵計算機學院

第三章面向?qū)ο笈cUMLPart1面向?qū)ο蠹夹g(shù)概述3·1傳統(tǒng)方法學的缺點3·2面向?qū)ο蠓椒▽W概述3·3面向?qū)ο蟮幕靖拍?·1傳統(tǒng)方法學的缺點傳統(tǒng)的生命周期方法學的本質(zhì),是通過需求分析預(yù)定義軟件需求,然后一個階段接著一個階段有條不紊的開發(fā)用戶所要求的軟件,實現(xiàn)預(yù)定義的軟件需求。

雖然生命周期方法較之傳統(tǒng)的軟件開發(fā)方法更為規(guī)范化,對實現(xiàn)軟件開發(fā)工程化起到了重要的促進作用,部分緩解了軟件危機,引起了軟件開發(fā)原理的一次重大變革。

但是,對于那些大的復(fù)雜的軟件系統(tǒng)而言,這種方法仍然顯得力不從心。一、瀑布模型的缺點:僵化

生命周期各階段間存在嚴格的順序性與依賴性,因此其特別強調(diào)預(yù)先定義需求的重要性。要求預(yù)先定義并“凍結(jié)”軟件需求。 實踐表明:在系統(tǒng)建立起來很難僅僅依靠分析就能確定一套完整、準確、一致、有效的應(yīng)用需求,而且該方法不適用與用戶需求不斷變化的情況: (1)某些類型的系統(tǒng)需求是模糊的。 (2)項目參與者之間存在通訊鴻溝。 (3)預(yù)先定義的需求可能是過時的。二、SA-SD-SP技術(shù)的缺點 本質(zhì)上是功能分解,以實現(xiàn)功能的過程為中心,而用戶的需求變化主要是針對功能的。這就使基于過程的設(shè)計不易被理解;且功能變化往往引起結(jié)構(gòu)變化較大,穩(wěn)定性不好。系統(tǒng)有明確的邊界定義,且系統(tǒng)結(jié)構(gòu)依賴于系統(tǒng)邊界的定義,系統(tǒng)不易擴充和修改。數(shù)據(jù)與操作分開處理,可造成軟構(gòu)件對具體應(yīng)用環(huán)境的依賴,可重用性(reusability)較差.3·2面向?qū)ο蠓椒▽W概述一、傳統(tǒng)的軟件開發(fā)方法的缺點: 特點是把軟件視為處理流,并定義成由一系列步驟構(gòu)成的算法。每一步驟都是帶有預(yù)定輸入和特定輸出的一個過程,把這些步驟串聯(lián)在一起可產(chǎn)生合理的穩(wěn)定的貫通于整個程序的控制流,最終產(chǎn)生一個簡單的具有靜態(tài)結(jié)構(gòu)的體系結(jié)構(gòu)。過程性開發(fā)模式側(cè)重建立構(gòu)成問題解決的處理流。數(shù)據(jù)抽象、數(shù)據(jù)結(jié)構(gòu)根據(jù)算法步驟的要求開發(fā),它貫穿于過程,提供過程所要求操作的信息。系統(tǒng)的狀態(tài)是一組全局變量,這組全局變量保存狀態(tài)的值,把它們從一個過程傳送到另一個過程。二、面向?qū)ο笏枷氲挠蓙韨鹘y(tǒng)的軟件開發(fā)方法—沒有直接而全面地反映問題的本質(zhì)

直接面對問題域中客觀存在的事物來進行軟件開發(fā)—

面向?qū)ο笙M⒚嫦驅(qū)ο笏枷氲挠蓙?續(xù))對象表示現(xiàn)實世界中某個具體的事物。事物可分為兩大部分:物質(zhì)

:表達具體的事物意識

:描述抽象的概念解決問題方法:(OOObject-Oriented)現(xiàn)實問題空間面向?qū)ο蠼饪臻g物質(zhì)對象(客觀存在的)意識類(抽象的概念)三、對象、實體與類關(guān)系圖對象實體類抽象數(shù)據(jù)類計算機世界現(xiàn)實世界計算機邏輯的實現(xiàn)影射抽象實例化抽象四、面向?qū)ο蠓椒?OOM)特點

盡可能模擬人類習慣的思維方式,即問題域與求解域在結(jié)構(gòu)上盡可能一致。與傳統(tǒng)方法相反,OOM以數(shù)據(jù)或信息為主線,把數(shù)據(jù)和處理結(jié)合構(gòu)成統(tǒng)一體——對象。這時程序不再是一系列工作在數(shù)據(jù)上的函數(shù)集合,而是相互協(xié)作又彼此獨立的對象的集合。OOM舉例:郵局業(yè)務(wù)管理杭州北京Post-officeMessageSendbymethod對象ObjectObject=數(shù)據(jù)AttributeAttributes:location;employee;……+操作MethodMethods:send;sell;……注意:Object內(nèi)部的attributes不允許外部用戶直接改動,只有當它提供了相應(yīng)的服務(wù)method時,用戶才能通過發(fā)送message來提請它執(zhí)行。我想把郵局搬到我家門口,多加幾個郵遞員,24小時都開門……對不起,本郵局不提供此類服務(wù)唉,那就先送束花吧——Post_office.Send(request,payment)五、面向?qū)ο蟮亩x面向?qū)ο?對象+類+繼承+通信如果一個軟件系統(tǒng)是使用這樣4個概念設(shè)計和實現(xiàn)的,則我們認為這個軟件系統(tǒng)是面向?qū)ο蟮?。一個面向?qū)ο蟮某绦虻拿恳怀煞輵?yīng)是對象,計算是通過新的對象的建立和對象之間的通信來執(zhí)行的。面向?qū)ο笏囊兀海?)對象(2)類(3)繼承(4)消息六、面向?qū)ο笏囊亍獙ο髮ο?Object)是面向?qū)ο蟮幕境煞?。每個對象可用它本身的一組屬性和它可以執(zhí)行的一組操作來定義。屬性一般只能通過執(zhí)行對象的操作來改變。操作又稱為方法或服務(wù),它描述了對象執(zhí)行的功能,若通過消息傳遞,還可以為其它對象使用。六、面向?qū)ο笏囊亍愵悾–lass)是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合。類的定義包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。類定義可以視為一個具有類似特性與共同行為的對象的模板,可用來產(chǎn)生對象。在一個類中,每個對象都是類的實例

(Instance),它們都可使用類中提供的函數(shù)。對象的狀態(tài)則包含在它的實例變量,即實例的屬性中。六、面向?qū)ο笏囊亍⑾ⅲ∕essage)是一個對象與另一個對象的通信單元,是要求某個對象執(zhí)行類中定義的某個操作的規(guī)格說明。發(fā)送給一個對象的消息定義了一個方法名和一個參數(shù)表(可能是空的),并指定某一個對象。一個對象接收的消息則調(diào)用消息中指定的方法,并將形式參數(shù)與參數(shù)表中相應(yīng)的值結(jié)合起來。classPost_office//定義類{private:loc_typelocation;emp_typeemployee;……public:voidsend(req_typerequest,money_typepayment);voidsell(intgoods,money_typepayment);……};

main(){Post_officeMy_PO;//聲明類的示例:對象req_typeMy_request;money_typeMy_payment;……My_PO.Send(My_request,My_payment);//通訊……}OOM舉例:郵局業(yè)務(wù)管理六、面向?qū)ο笏囊亍^承繼承(Inheritance)是使用已存在的定義做為基礎(chǔ)建立新定義的技術(shù)。新類的定義可以是既存類所聲明的數(shù)據(jù)和新類所增加的聲明的組合。新類復(fù)用既存的定義,而不要求修改既存類。既存類可當做基類來引用,則新類相應(yīng)地可當做派生類來引用。例如,從一個既存的車輛類派生的四輪驅(qū)動車類可能不僅是車輛類子集合定義的特殊化,而且還可能在新類的界面中引入新的能力。七、面向?qū)ο笈c傳統(tǒng)方法比較①OOM與人類習慣的思維方法一致傳統(tǒng)方法:面向過程設(shè)計,以計算為核心,數(shù)據(jù)與操作分離,不易理解。OOM:以object為核心,強調(diào)對現(xiàn)實概念的模擬而不強調(diào)算法?!懊嫦?qū)ο蠓椒▽W的基本原則,是按照人們習慣的思維方式建立問題域的模型,開發(fā)出盡可能直觀、自然地表現(xiàn)求解方法的軟件系統(tǒng)”。Class:由特殊到一般的歸納(induction)

Inheritance:由一般到特殊的演繹(deduction)七、面向?qū)ο笈c傳統(tǒng)方法比較②OOM穩(wěn)定性好傳統(tǒng)方法:結(jié)構(gòu)依賴于功能,不穩(wěn)定。OOM:以object模擬實體,需求變化不會引起結(jié)構(gòu)的整體變化,因為實體相對穩(wěn)定,故系統(tǒng)也相應(yīng)穩(wěn)定。七、面向?qū)ο笈c傳統(tǒng)方法比較(續(xù))③OOM可重用性好傳統(tǒng)方法:通過建立標準函數(shù)庫來重用軟構(gòu)件。但標準函數(shù)缺少必要的“柔性”,難以適應(yīng)不同場合的不同需要。

OOM:一個class所有的instances都可重用它的代碼;由inheritance派生出的新的class可重用其父類的代碼,并且可以修改、擴充而不影響其父類的使用。七、面向?qū)ο笈c傳統(tǒng)方法比較(續(xù))穩(wěn)定性好:軟件功能需求的變化不牽動全局,只需局部修改;面向?qū)ο蟮能浖容^容易修改:只要修改不涉及class的對外接口,則內(nèi)部修改完全不影響外部調(diào)用;Inheritance和多態(tài)性(polymorphism)使其很容易被修改和擴充;易于測試和調(diào)試面向?qū)ο蟮能浖容^容易理解;④可維護性好傳統(tǒng)方法:可維護性是最令人頭痛的問題。

OOM:從以下幾方面改善了可維護性——七、面向?qū)ο笈c傳統(tǒng)方法比較(續(xù))⑤較易開發(fā)大型軟件產(chǎn)品

采用00M,便于一個大型軟件產(chǎn)品分解成一系列本質(zhì)上相互獨立的小產(chǎn)品來處理,這就不僅降低了開發(fā)的技術(shù)難度,而且也使得對開發(fā)工作的管理變得容易多了。

OOM并不一定減少了開發(fā)時間,而是通過提高可重用性、可維護性,進行擴充和修改的容易程度等,從長遠角度改進了軟件的質(zhì)量。OOM與快速原型法結(jié)合使用效果好。八、噴泉模型

主要用于支持面向?qū)ο箝_發(fā)過程,體現(xiàn)了軟件創(chuàng)建所固有的迭代和無間隙的特征。3·3面向?qū)ο蟮幕靖拍頵1f2f3……fi……fnfi(X)Sgi(X,S)S’輸出輸出1、對象Object:=ID+Method+Attribute+Message對象的基本特點①以數(shù)據(jù)為中心,不設(shè)與數(shù)據(jù)無關(guān)的操作;②Object主動處理而不被動地等待被處理,外部只能通過message請求操作;③具有黑盒性:外部操作時,無須知道該object內(nèi)部的數(shù)據(jù)結(jié)構(gòu)及算法;④具有并行性:不同object各自獨立地處理自身數(shù)據(jù),彼此間僅通過傳遞message完成通信;⑤模塊獨立性好:內(nèi)聚強(①)、耦合松(③④)2、類Class:具有相同數(shù)據(jù)和相同操作的一組對象;3、實例Instance:某個class描述的具體對象;4、消息Message:=object_ID.method_ID(parameter(s));5、方法Method:object能做的操作,亦稱為service、responsibility,在

class中須定義相應(yīng)的代碼;6、屬性Attribute:object的固有數(shù)據(jù);7、繼承Inheritance:子類自動共享父類attributes和methods,而不必重復(fù)定義。面向?qū)ο蟮幕靖拍?續(xù))面向?qū)ο蟮幕靖拍?續(xù))Class中國人中國人Attributes中國人Methods張山(instance)

Class中國人張山的AttributesClass杭州人(子類)杭州人Attributes杭州人Methods

Class中國人李士(instance)中國人李士的Attributes杭州人李士的Attributes

Class杭州人例:繼承的特點:①低層性質(zhì)覆蓋高層性質(zhì):若杭州人的methods中有與中國人的同名,則李士執(zhí)行該method時以杭州人為準,不執(zhí)行中國人中定義的同名method。②傳遞性(transitivity):AB、BCAC

一個

class繼承了上層全部classes

的一切性質(zhì)。③一個子類只有一個父類稱為單繼承(singleinheritance),一個子類可有多個父類稱為多重繼承(multipleinheritance).例④修改與擴充可以很容易地通過派生子類來完成。注意:multipleinheritance在定義中應(yīng)避免二義性(ambiguity),即二個父類中定義重名,但各具不同性質(zhì)。例:FemaleChineseScholarICardDeckGraphicalObjectGraphicalDeckMethod:Draw:=takeacardfromadeckMethod:Draw:=displayagraphicalobjectMethod:Draw:=?例:面向?qū)ο蟮幕靖拍?續(xù))8、多態(tài)性(Polymorphism):不同層次的classes可共享一個method名,但按各自的方式來實現(xiàn)這種method。 C++中定義了虛函數(shù)(virtualfunction)來實現(xiàn)這一功能。即一個method有多個版本,運行時才決定執(zhí)行哪一個。故亦稱為動態(tài)聯(lián)編(dynamicbinding)或滯后聯(lián)編(latebinding)面向?qū)ο蟮幕靖拍?續(xù))doubleavg(constdoublea[],intsize);{doublesum=0.0;for(inti=0;i<size;++i)sum+=a[i];return(sum/size);}doubleavg(constinta[],intsize);{intsum=0;for(inti=0;i<size;++i)sum+=a[i];return((double)sum/size);}main(){intk[3]={1,2,3};doublex[3]={1.1,2.2,3.3};cout<<avg(k,3)<<“intaverage\n”;cout<<avg(x,3)<<“doubleaverage\n”;}9、重載Overloading⑴函數(shù)重載:不同函數(shù)共用一個名字,而調(diào)用參數(shù)的特征不同。例:面向?qū)ο蟮幕靖拍?續(xù))⑵運算符重載Operatoroverloading:同一運算符(operator)作用于不同類型的操作數(shù)(operand)上面。在編譯(compile)階段就決定了使用類型及執(zhí)行代碼,故意亦稱為靜態(tài)聯(lián)編

(staticbinding)或先前聯(lián)編

(earlybinding)。3·4面向?qū)ο蠼K^模型,就是為了理解事物而對事物作出的一種抽象,是對事物的一種無歧義的書面描述。通常,模型由一組圖示符號和組織這些符號的規(guī)則組成,利用它們來定義和描述問題域中的術(shù)語和概念。更進一步講,模型是一種思考工具,利用這種工具可以把知識規(guī)范地表示出來。3·4面向?qū)ο蠼C嫦驅(qū)ο蟮拈_發(fā)方法Booch方法

Booch最先描述了面向?qū)ο蟮能浖_發(fā)的基礎(chǔ)問題,指出了面向?qū)ο箝_發(fā)方法是一種完全不同于傳統(tǒng)的功能分解的設(shè)計方法。面向?qū)ο蟮能浖纸夥椒ǜ咏藢陀^事物的理解,而功能分解只能通過問題空間的轉(zhuǎn)換獲得。

Booch方法包括各種模型,涉及軟件系統(tǒng)的對象、動態(tài)及功能各方面,對類及繼承方面的描述特別值得借鑒。面向?qū)ο蟮拈_發(fā)方法(續(xù))Coad方法 1989年Coad與Yourdon提出的面

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論