面向?qū)ο蠓椒▽W(xué)引論_第1頁
面向?qū)ο蠓椒▽W(xué)引論_第2頁
面向?qū)ο蠓椒▽W(xué)引論_第3頁
面向?qū)ο蠓椒▽W(xué)引論_第4頁
面向?qū)ο蠓椒▽W(xué)引論_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第9章面向?qū)ο蠓椒▽W(xué)引論

(Object-OrientedMethodology)

本章介紹面向?qū)ο蠓椒▽W(xué)的概述、基本概念,以及在用面向?qū)ο蠓椒▽W(xué)開發(fā)軟件過程中通常建立的3種模型:對象模型、動態(tài)模型和功能模型。

瀑布模型的缺點(diǎn)是僵化,要求:生命周期各階段間遵守嚴(yán)格的順序;預(yù)先定義并“凍結(jié)”軟件需求。

SA-SD-SP技術(shù)的缺點(diǎn):本質(zhì)上是功能分解,以實現(xiàn)功能的過程為中心,而用戶的需求變化主要是針對功能的。這就使基于過程的設(shè)計不易被理解;且功能變化往往引起結(jié)構(gòu)變化較大,穩(wěn)定性不好。數(shù)據(jù)與操作分開處理,可能造成軟構(gòu)件對具體應(yīng)用環(huán)境的依賴,可重用性(reusability)較差?!?.OOM概述

盡可能模擬人類習(xí)慣的思維方式,即問題域與求解域在結(jié)構(gòu)上盡可能一致。與傳統(tǒng)方法相反,OOM以數(shù)據(jù)或信息為主線,把數(shù)據(jù)和處理結(jié)合構(gòu)成統(tǒng)一體——對象。這時程序不再是一系列工作在數(shù)據(jù)上的函數(shù)集合,而是相互協(xié)作又彼此獨(dú)立的對象的集合。OOM的四要點(diǎn):①對象(object):客觀世界由對象組成。②類(class):對象可劃分為類;單個對象可視為某一類的實例(instance)。OOM的特點(diǎn):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);……}§1.OOM概述例如:③繼承(inheritance):類可分層,下層子類與上層父類有相同特征,稱為繼承。④消息(message):對象間只能通過發(fā)送消息進(jìn)行聯(lián)系,外界不能處理對象的內(nèi)部數(shù)據(jù),只能通過消息請求它進(jìn)行處理(如果它提供相應(yīng)消息的話)?!?.OOM概述OOM(Object-Oriented)=Object+Classes+Inheritance+CommunicationwithmessagesObject-based=Object+CommunicationwithmessagesClass-based=Object+Classes+CommunicationwithmessagesOOM:以object為核心,強(qiáng)調(diào)對現(xiàn)實概念的模擬而不強(qiáng)調(diào)算法。“面向?qū)ο蠓椒▽W(xué)的基本原則,是按照人們習(xí)慣的思維方式建立問題域的模型,開發(fā)出盡可能直觀、自然地表現(xiàn)求解方法的軟件系統(tǒng)”。

Class:由特殊到一般的歸納(induction)

Inheritance:由一般到特殊的演繹(deduction)2、面向?qū)ο蠓椒▽W(xué)的優(yōu)點(diǎn)傳統(tǒng)方法:面向過程設(shè)計,以算法為核心,數(shù)據(jù)與操作分離,不易理解?!?.OOM概述①與人類習(xí)慣的思維方式一致OOM:以object模擬實體,需求變化不會引起結(jié)構(gòu)的整體變化,因為實體相對穩(wěn)定,故系統(tǒng)也相應(yīng)穩(wěn)定。②面向?qū)ο筌浖€(wěn)定性好傳統(tǒng)方法:結(jié)構(gòu)依賴于功能,不穩(wěn)定。傳統(tǒng)方法:通過建立標(biāo)準(zhǔn)函數(shù)庫來重用軟構(gòu)件。但標(biāo)準(zhǔn)函數(shù)缺少必要的“柔性”,難以適應(yīng)不同場合的不同需要。OOM:一個class所有的instances都可重用它的代碼;由inheritance派生出的新的class可重用其父類的代碼,并且可以修改、擴(kuò)充而不影響其父類的使用?!?.OOM概述③面向?qū)ο筌浖芍赜眯院脗鹘y(tǒng)方法:在許多中、小規(guī)模軟件開發(fā)中取得成功。OOM:構(gòu)成軟件系統(tǒng)的每個對象有自己的數(shù)據(jù)、操作、功能和用途??梢园汛笮蛙浖a(chǎn)品分解成一系列本質(zhì)上相互獨(dú)立的小產(chǎn)品,從而降低技術(shù)難度,便于管理。④較易開發(fā)大型軟件產(chǎn)品穩(wěn)定性好:軟件功能需求的變化不牽動全局,只需局部修改;Class獨(dú)立性強(qiáng):只要修改不涉及class的對外接口,則內(nèi)部修改完全不影響外部調(diào)用;Inheritance和多態(tài)性(polymorphism)使其很容易被修改和擴(kuò)充;容易理解;OOM:從以下幾方面改善了可維護(hù)性——有這一條就什么都好辦了!

容易測試、調(diào)試。這一點(diǎn)還可商榷⑤面向?qū)ο筌浖删S護(hù)性好§1.OOM概述傳統(tǒng)方法:可維護(hù)性是最令人頭痛的問題。注:OOM并不是減少了開發(fā)時間,而是通過提高可重用性、可維護(hù)性,進(jìn)行擴(kuò)充和修改的容易程度等,從長遠(yuǎn)角度改進(jìn)了軟件的質(zhì)量。3、面向?qū)ο蟮能浖^程

任何開發(fā)方法學(xué)都必須完成的工作要素:“做什么”、“怎樣做”、“實現(xiàn)”和“完善”。

迭代在OOM中更常見更容易實現(xiàn)開發(fā)重點(diǎn)應(yīng)該是生命周期的分析階段

生命周期個階段的區(qū)分并不重要、不明顯

整個開發(fā)過程中使用統(tǒng)一的軟件概念“對象”整個開發(fā)過程吻合一致,是“無縫”連接的為避免開發(fā)過程過分無序,應(yīng)以一線性過程為總目標(biāo)?!?.OOM概述進(jìn)一步開發(fā)運(yùn)行狀態(tài)集成和測試階段編碼階段面向?qū)ο笤O(shè)計階段面向?qū)ο蠓治鲭A段陳述需求階段維護(hù)期f1f2f3……fi……fnfi(X)Sgi(X,S)S’輸出輸出§2.面向?qū)ο蟮母拍?/p>

對象是基本運(yùn)行實體,由描述其屬性的數(shù)據(jù)以及可以對這些數(shù)據(jù)施加的所有操作封裝在一起構(gòu)成的統(tǒng)一體。1、對象(Object)Object:=ID+Method+Attribute+Message=ID,MS,DS,MI§2.OO的概念Object的特點(diǎn):①以數(shù)據(jù)為中心,不設(shè)與數(shù)據(jù)無關(guān)的操作;②Object主動處理而不被動地等待被處理,外部只能通過message請求操作;③具有黑盒性:外部操作時,無須知道該object內(nèi)部的數(shù)據(jù)結(jié)構(gòu)及算法;④具有并行性:不同object各自獨(dú)立地處理自身數(shù)據(jù),彼此間僅通過傳遞message完成通信;⑤模塊獨(dú)立性好:內(nèi)聚強(qiáng)(①)、耦合弱(③④)class中定義的數(shù)據(jù),object有自己特有的屬性值。7、封裝(Encapsulation)2、類(Class)§2.OO的概念具有相同數(shù)據(jù)和相同操作的一組相似對象。3、實例(Instance)某個class描述的一個具體對象。4、消息(Message)

要求對象執(zhí)行在定義它的那個類中所定義的某個操作的規(guī)格說明。Message:=object_ID.method_ID(parameter(s))5、方法(Method)object能做的操作,亦稱為service、responsibility,在

class中須定義相應(yīng)的代碼。6、屬性(Attribute)把數(shù)據(jù)和實現(xiàn)操作集中放在對象內(nèi)部,對外界隱藏了實現(xiàn)細(xì)節(jié)。Class中國人中國人Attributes中國人Methods張山(instance)Class中國人

張山的AttributesClass重慶人

(子類)

重慶人Attributes

重慶人MethodsClass中國人李士(instance)

中國人李士的Attributes

重慶人李士的AttributesClass重慶人例:§2.OO的概念8、繼承(Inheritance)

子類自動共享父類的attributes和methods,而不必重復(fù)定義。Inheritance的特點(diǎn):①若重慶人的methods中有與中國人的同名,則李士執(zhí)行該method時以重慶人為準(zhǔn),不執(zhí)行中國人中定義的同名method。

講官話,這叫做“低層性質(zhì)override高層性質(zhì)”講土話,這叫做“縣官不如現(xiàn)管”②傳遞性(transitivity):AB、BCAC

一個class繼承了上層全部classes的一切性質(zhì)。③一個子類只有一個父類稱為單繼承(singleinheritance),一個子類可有多個父類稱為多重繼承(multipleinheritance).§2.OO的概念FemaleChineseScholarI例:注意:multipleinheritance在定義中應(yīng)避免二義性(ambiguity),即二個父類中定義重名,但各具不同性質(zhì)。④修改與擴(kuò)充可以很容易地通過派生子類來完成。9、多態(tài)性(Polymorphism)

不同層次的classes可共享一個method名,但按各自的方式來實現(xiàn)這種method。C++中定義了虛函數(shù)(virtualfunction)來實現(xiàn)這一功能。即一個method有多個版本,運(yùn)行時才決定執(zhí)行哪一個。故亦稱為動態(tài)聯(lián)編(dynamicbinding)或滯后聯(lián)編(latebinding)§2.OO的概念10、重載(Overloading)

對相同的函數(shù)名或運(yùn)算符實現(xiàn)不同的函數(shù)算法或運(yùn)算。分為函數(shù)重載和運(yùn)算符重載兩種。doubleavg(constdoublea[],intsize);doubleavg(constinta[],intsize);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”;}⑴Function(orparameter)overloading:不同函數(shù)共用一個名字,而調(diào)用參數(shù)的特征不同?!?.OO的概念例:⑵Operatoroverloading:同一運(yùn)算符(operator)作用于不同類型的操作數(shù)(operand)。

在編譯(compile)階段就決定了使用類型及執(zhí)行代碼,故亦稱為靜態(tài)聯(lián)編(staticbinding)或先前聯(lián)編

(earlybinding)?!?.面向?qū)ο蠼?/p>

Object-OrientedModeling

面向?qū)ο蠓椒ㄗ罨镜脑瓌t是:按照人們習(xí)慣的思維方式,用面向?qū)ο笥^點(diǎn)建立問題域的模型,進(jìn)而開發(fā)出盡可能自然地表現(xiàn)求解方法的軟件。

模型是為了理解事物而對事物作出的一種抽象,是對事物的一種無歧義的書面描述。

影響較大的面向?qū)ο蠹夹g(shù):

Coad/Yourdon方法

Booch方法

OMT(ObjectModelingTechnique)技術(shù)UML(UnifiedModelingLanguage)和RUP(RationalUnifiedProcess)OMT方法建立三種模型:描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的對象模型(objectmodel).

描述系統(tǒng)控制結(jié)構(gòu)的動態(tài)模型(dynamicmodel).

描述系統(tǒng)功能的功能模型(functionmodel).

三種模型從3個不同但又密切相關(guān)的角度模擬目標(biāo)系統(tǒng),從不同側(cè)面反映了系統(tǒng)的實質(zhì)性內(nèi)容,綜合起來全面地反映對目標(biāo)系統(tǒng)的需求。三種模型都是必不可少的,其中的對象模型是最重要、最基本、最核心的。§3.面向?qū)ο蠼!?.面向?qū)ο蠼?、對象模型(ObjectModel,OM)ClassNameAttributesMethodsClass

對象模型表示靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)的“數(shù)據(jù)”性質(zhì),是對模擬客觀世界實體的對象及對象彼此間的關(guān)系的映射,描述了系統(tǒng)的靜態(tài)結(jié)構(gòu)。

建立對象模型的目標(biāo)是從客觀世界中提煉出對具體應(yīng)用有價值的概念。(1)類圖的基本符號

通常使用UML提供的類圖來建立對象模型,UML中類的實際含義是“一個類及屬于該類的對象”。

屬性

服務(wù)可見性屬性名:類型名=初值{性質(zhì)串}可見性操作名(參數(shù)表):返回值類型{性質(zhì)串}注:可見性有3種+(public)、-(private)、#(protected)

參數(shù)名:類型名=默認(rèn)值例如:圓

圓心坐標(biāo)半徑

……

顯示隱藏

……§3.面向?qū)ο蠼#霃剑篿nteger=1

關(guān)聯(lián)關(guān)系表示兩類對象之間存在著某種語義上的聯(lián)系,即對象之間有相互作用、相互依靠的關(guān)系。(2)表示關(guān)系的符號§3.面向?qū)ο蠼"訇P(guān)聯(lián)關(guān)系校長學(xué)校一對一(1:1)教師講義一對多(1:M)1M教師學(xué)生多對多(N:M)MN

關(guān)聯(lián)的多重性:在表示關(guān)聯(lián)的直線兩端寫上重數(shù)0..1表示0到1個對象0..*或*表示0到多個對象1+或1..*表示1到多個對象1..10表示1到10個對象5表示5個對象§3.面向?qū)ο蠼?+目錄文件文件名

名稱:常見的關(guān)聯(lián)是雙向的關(guān)系作家計算機(jī)1+*使用被使用

關(guān)聯(lián)的限定:受限的關(guān)聯(lián)由兩類對象及限定詞組成

關(guān)聯(lián)類:為說明關(guān)聯(lián)的性質(zhì),引入關(guān)聯(lián)類來表示這些附加信息電梯控制器電梯按鈕4*隊列

角色:類對象在關(guān)聯(lián)中的特定作用工人公司*雇主雇員②聚集關(guān)系§3.面向?qū)ο蠼?/p>

聚集(聚合)是關(guān)聯(lián)的特例,表示一類對象與另一類對象之間的關(guān)系是整體與部分的關(guān)系。

共享聚集:處于部分方的對象可以同時參與多個處于整體方對象

組合聚集:部分類對象完全隸屬于整體類對象窗口列表框*按鈕菜單文本框***包含課題組人1..**成員§3.面向?qū)ο蠼"鄯夯P(guān)系

泛化關(guān)系就是通常的繼承關(guān)系,是通用類和具體類之間的關(guān)系。具體類完全擁有通用類的數(shù)據(jù)和操作,并且還可以補(bǔ)充一些數(shù)據(jù)和操作。注:泛化是針對類而不針對實例,指出在類與類之間存在“一般-特殊”關(guān)系。抽象類是沒有具體對象的類。抽象操作是抽象類的操作。

普通泛化:就是繼承關(guān)系(§2)交通工具{abstract}drive(){abstract}汽車drive()輪船drive()

受限泛化:具有進(jìn)一步說明泛化使用方法或擴(kuò)充方法的附加約束條件的泛化關(guān)系。預(yù)定義的約束有多重、不相交、完全和不完全4種。§3.面向?qū)ο蠼"芤蕾嚭图?xì)化關(guān)系

依賴關(guān)系:描述兩個類或用例之間的語義連接關(guān)系。表明一個類對象為了完成自己的任務(wù)需要借助另一個類對象提供的服務(wù)。

如:一個類使用另一個類的對象作為操作的參數(shù)或數(shù)據(jù)成員、一個類向另一個類發(fā)消息等。類B類A

細(xì)化關(guān)系:描述同一個事物的不同抽象層次的類對象。分析類設(shè)計類

即:“分析類”和“設(shè)計類”描述同一事物但抽象層次不同,“設(shè)計類”是在“分析類”的基礎(chǔ)上的更詳細(xì)的描述(“設(shè)計類”細(xì)化了“分析類”,或“分析類”細(xì)化成了“設(shè)計類”)。三要素:①事件(event):引發(fā)object狀態(tài)改變的控制信息(瞬時)。②狀態(tài)(status):即

object的

attributes所處的情形(可持續(xù))。③行為(action):object要達(dá)到某種status所做的操作(耗時)。

動態(tài)模型表示系統(tǒng)瞬時的、行為化的系統(tǒng)控制性質(zhì),規(guī)定了對象模型中的對象的合法變化序列。表示方法:用UML提供的狀態(tài)圖(P.66)來描述對象的狀態(tài)、觸發(fā)狀態(tài)轉(zhuǎn)換的事件以及對象的行為。注:每個類的動態(tài)行為用一張狀態(tài)圖來描繪,各個類的狀態(tài)圖通過共享事件合并起來構(gòu)成系統(tǒng)的動態(tài)模型。2、動態(tài)模型(DynamicModel,DM)§3.面向?qū)ο蠼ie置撥號通話斷線撥號音do/響撥號音超時do/響蜂鳴音存儲的信息do/播放信息接通中do/試接通振鈴do/振鈴忙音do/響忙音拿起聽筒數(shù)字?jǐn)?shù)字有效號碼已接通受話人回話受話人掛斷電話掛斷電話超時掛斷電話超時無效號碼信息播完占線例:電話系統(tǒng)的狀態(tài)圖§3.面向?qū)ο蠼1硎痉椒ǎ?/p>

數(shù)據(jù)流圖(DFD)(P.40)用例模型(CaseModel)(1)用例圖(CaseDiagram)UML提供的用例圖是進(jìn)行需求分析和建立功能模型的有力工具。在UML中用用例圖建立起來的系統(tǒng)模型稱用例模型。

用例圖包含的模型元素有系統(tǒng)、行為者、用例及用例之間的關(guān)系。§3.面向?qū)ο蠼?、功能模型(FunctionModel,F(xiàn)M)功能模型表示變化的系統(tǒng)的功能性質(zhì),表明系統(tǒng)應(yīng)該做什么。自動售貨機(jī)系統(tǒng)售貨供貨取貨款顧客供貨人收銀員§3.面向?qū)ο蠼"傧到y(tǒng)

用矩形框表示系統(tǒng)。方框的邊線表示系統(tǒng)的邊界,用于劃定系統(tǒng)的功能范圍,定義了系統(tǒng)所具有的功能。②

用例UML中用例定義為系統(tǒng)完成一個完整功能的一系列動作,其結(jié)果能被特定的行為者感受到。具有如下特征:

用例代表用戶可見的功能,實現(xiàn)一個具體的用戶目標(biāo)

用例是被行為者啟動的,并向行為者提供確切的值

用例可大可小,但必須是相對完整的注:用例置于系統(tǒng)方框內(nèi)用例是一個類,代表一類功能而不是使用該類功能的某個具體實例用例的實例是系統(tǒng)的一種實際使用方法(腳本)用例除完成內(nèi)部計算與工作外,還包括與外部的通信§3.面向?qū)ο蠼"?/p>

行為者④

用例之間的關(guān)系

是與系統(tǒng)交互的人或其他系統(tǒng),代表系統(tǒng)外部的實體。注

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論