版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件工程第7章面向?qū)ο蟮姆治龊驮O(shè)計(jì)1.軟件工程第7章面向?qū)ο蟮姆治龊驮O(shè)計(jì)1.內(nèi)容摘要面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮姆治龊驮O(shè)計(jì)過(guò)程UML概述用況建模靜態(tài)建模動(dòng)態(tài)建模物理體系結(jié)構(gòu)建模2.內(nèi)容摘要面向?qū)ο蟮幕靖拍?.內(nèi)容摘要面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮姆治龊驮O(shè)計(jì)過(guò)程UML概述用況建模靜態(tài)建模動(dòng)態(tài)建模物理體系結(jié)構(gòu)建模3.內(nèi)容摘要面向?qū)ο蟮幕靖拍?.PeterCoad和EdwardYourdon提出用下列等式識(shí)認(rèn)面向?qū)ο蠓椒ǎ好嫦驅(qū)ο?對(duì)象(object)+分類(lèi)(classification)+繼承(inheritance)+通過(guò)消息的通信(communicationwithmessages)可以說(shuō),采用這四個(gè)概念開(kāi)發(fā)的軟件系統(tǒng)是面向?qū)ο蟮?.PeterCoad和EdwardYourdon提出用下列面向?qū)ο蠓椒ǖ某霈F(xiàn)很快受到計(jì)算機(jī)軟件界的青睞,并成為20世紀(jì)90年代的主流開(kāi)發(fā)方法。我們可以從下列幾個(gè)方面來(lái)分析其原因:從認(rèn)知學(xué)的角度來(lái)看,面向?qū)ο蠓椒ǚ先藗儗?duì)客觀世界的認(rèn)識(shí)規(guī)律。面向?qū)ο蠓椒ㄩ_(kāi)發(fā)的軟件系統(tǒng)易于維護(hù),其體系結(jié)構(gòu)易于理解、擴(kuò)充和修改。面向?qū)ο蠓椒ㄖ械睦^承機(jī)制有力支持軟件的復(fù)用。5.面向?qū)ο蠓椒ǖ某霈F(xiàn)很快受到計(jì)算機(jī)軟件界的青睞,并成面向?qū)ο蟮幕靖拍?.對(duì)象(object)
對(duì)象是指一組屬性以及這組屬性上的專(zhuān)用操作的封裝體。
屬性(attribute)通常是一些數(shù)據(jù),有時(shí)它也可以是另一個(gè)對(duì)象。每個(gè)對(duì)象都有它自己的屬性值,表示該對(duì)象的狀態(tài)。對(duì)象中的屬性只能通過(guò)該對(duì)象所提供的操作來(lái)存取或修改。
操作(operation)(也稱(chēng)方法或服務(wù))規(guī)定了對(duì)象的行為,表示對(duì)象所能提供的服務(wù)。
6.面向?qū)ο蟮幕靖拍?.對(duì)象(object)6.封裝(encapsulation)是一種信息隱蔽技術(shù),用戶(hù)只能看見(jiàn)對(duì)象封裝界面上的信息,對(duì)象的內(nèi)部實(shí)現(xiàn)對(duì)用戶(hù)是隱蔽的。封裝的目的是使對(duì)象的使用者和生產(chǎn)者分離,使對(duì)象的定義和實(shí)現(xiàn)分開(kāi)。
一個(gè)對(duì)象通??捎蓪?duì)象名、屬性和操作三部分組成。7.封裝(encapsulation)是一種信息隱蔽技術(shù),用戶(hù)只2.類(lèi)(class)類(lèi)是一組具有相同屬性和相同操作的對(duì)象的集合。一個(gè)類(lèi)中的每個(gè)對(duì)象都是這個(gè)類(lèi)的一個(gè)實(shí)例(instance)。類(lèi)是創(chuàng)建對(duì)象的模板,從同一個(gè)類(lèi)實(shí)例化的每個(gè)對(duì)象都具有相同的結(jié)構(gòu)和行為。8.2.類(lèi)(class)8.轎車(chē)型號(hào):字符串顏色:字符串牌照號(hào):字符串....張經(jīng)理的轎車(chē)型號(hào)=桑塔納顏色=紅色牌照號(hào)=滬AN2037....類(lèi)實(shí)例對(duì)象9.轎車(chē)張經(jīng)理的轎車(chē)類(lèi)實(shí)例對(duì)象9.3.繼承(inheritance)繼承是類(lèi)間的基本關(guān)系,它是基于層次關(guān)系的不同類(lèi)共享數(shù)據(jù)和操作的一種機(jī)制。父類(lèi)中定義了其所有子類(lèi)的公共屬性和操作,在子類(lèi)中除了定義自己特有的屬性和操作外,可以繼承其父類(lèi)(或祖先類(lèi))的屬性和操作,還可以對(duì)父類(lèi)(或祖先類(lèi))中的操作重新定義其實(shí)現(xiàn)方法。10.3.繼承(inheritance)10.矩形長(zhǎng)寬對(duì)角線(xiàn)計(jì)算面積計(jì)算對(duì)角線(xiàn)多邊形頂點(diǎn)數(shù)頂點(diǎn)坐標(biāo)計(jì)算面積旋轉(zhuǎn)11.矩形多邊形11.有時(shí),我們定義一個(gè)類(lèi),它把一些類(lèi)組織起來(lái),提供一些公共的行為,但并不需要使用這個(gè)類(lèi)的實(shí)例,而僅使用其子類(lèi)的實(shí)例。我們把這種沒(méi)有實(shí)例的類(lèi)稱(chēng)為抽象類(lèi)(abstractclass)。在抽象類(lèi)中可以定義抽象操作,抽象操作指:只定義這個(gè)類(lèi)的操作接口,不定義它的實(shí)現(xiàn),其實(shí)現(xiàn)部分由其子類(lèi)定義。抽象操作操作名用斜體字表示,也可以在操作特征(signature)后面加上特征字符串{abstract}。12.有時(shí),我們定義一個(gè)類(lèi),它把一些類(lèi)組織起來(lái),提供一些公共的行為交通工具飛行器汽車(chē)船轎車(chē)貨車(chē)
一般-特殊關(guān)系13.交通工具飛行器汽車(chē)船轎車(chē)貨車(chē)一般-特殊關(guān)系13.如果一個(gè)子類(lèi)只有唯一一個(gè)父類(lèi),這個(gè)繼承稱(chēng)為單一繼承。如果一個(gè)子類(lèi)有一個(gè)以上的父類(lèi),這種繼承稱(chēng)為多重繼承。水上交通工具陸上交通工具水陸兩棲交通工具多重繼承14.如果一個(gè)子類(lèi)只有唯一一個(gè)父類(lèi),這個(gè)繼承稱(chēng)為單一繼承4.消息(message)消息傳遞是對(duì)象間通信的手段,一個(gè)對(duì)象通過(guò)向另一個(gè)對(duì)象發(fā)送消息來(lái)請(qǐng)求其服務(wù)。一個(gè)消息通常包括接收對(duì)象名、調(diào)用的操作名和適當(dāng)?shù)膮?shù)(如果有必要的話(huà))。消息只告訴接收對(duì)象需要完成什么操作,但并不指示接收者怎樣完成操作。消息完全由接收者解釋?zhuān)邮照擢?dú)立決定采用什么方法完成所需的操作。15.4.消息(message)15.5.多態(tài)性(polymorphism)多態(tài)性是指同一個(gè)操作作用于不同的對(duì)象上可以有不同的解釋?zhuān)a(chǎn)生不同的執(zhí)行結(jié)果。例如“畫(huà)”操作,作用在“矩形”對(duì)象上,則在屏幕上畫(huà)一個(gè)矩形,作用在“圓”對(duì)象上,則在屏幕上畫(huà)一個(gè)圓。也就是說(shuō),相同操作的消息發(fā)送給不同的對(duì)象時(shí),每個(gè)對(duì)象將根據(jù)自己所屬類(lèi)中定義的這個(gè)操作去執(zhí)行,從而產(chǎn)生不同的結(jié)果。16.5.多態(tài)性(polymorphism)16.6.動(dòng)態(tài)綁定(dynamicbinding)動(dòng)態(tài)綁定是指在程序運(yùn)行時(shí)才將消息所請(qǐng)求的操作與實(shí)現(xiàn)該操作的方法連接起來(lái)。傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言的過(guò)程調(diào)用與目標(biāo)代碼的連接(即調(diào)用哪個(gè)過(guò)程)放在程序運(yùn)行前(即編譯時(shí))進(jìn)行(稱(chēng)為靜態(tài)綁定),而動(dòng)態(tài)綁定則是把這種連接推遲到運(yùn)行時(shí)才進(jìn)行。動(dòng)態(tài)綁定是一種在運(yùn)行時(shí)確定被執(zhí)行代碼的技術(shù)。17.6.動(dòng)態(tài)綁定(dynamicbinding)17.在一般與特殊關(guān)系中,子類(lèi)是父類(lèi)的一個(gè)特例,所以父類(lèi)對(duì)象可以出現(xiàn)的地方,也允許其子類(lèi)對(duì)象出現(xiàn)。因此在運(yùn)行過(guò)程中,當(dāng)一個(gè)對(duì)象發(fā)送消息請(qǐng)求服務(wù)時(shí),要根據(jù)接收對(duì)象的具體情況將請(qǐng)求的操作與實(shí)現(xiàn)的方法進(jìn)行連接,即動(dòng)態(tài)綁定。18.在一般與特殊關(guān)系中,子類(lèi)是父類(lèi)的一個(gè)特例,所以父類(lèi)對(duì)象可以出if條件thenp:=t;elsep:=r;area:=p.getarea;getArea{abstract}polygonareahexagongetArearectanglegetArealengthwidthtrianglegetAreaVarp:polygon;Vart:triangle:=triangle.new;Varr:rectangle:=rectangle.new;19.if條件thenp:=t;getArea內(nèi)容摘要面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮姆治龊驮O(shè)計(jì)過(guò)程UML概述用況建模靜態(tài)建模動(dòng)態(tài)建模物理體系結(jié)構(gòu)建模20.內(nèi)容摘要面向?qū)ο蟮幕靖拍?0.面向?qū)ο蠓治?/p>
Object-OrientedAnalysis
面向?qū)ο蠓治龅囊话悴襟E如下:獲取客戶(hù)對(duì)系統(tǒng)的需求:包括標(biāo)識(shí)場(chǎng)景(scenario)和用況(usecase,也稱(chēng)用例),以及建造需求模型用基本的需求為指南,來(lái)選擇類(lèi)和對(duì)象(包括屬性和操作)。定義類(lèi)的結(jié)構(gòu)和層次。建造對(duì)象—關(guān)系模型。建造對(duì)象—行為模型。利用用況/場(chǎng)景來(lái)復(fù)審分析模型。21.面向?qū)ο蠓治?/p>
Object-OrientedAnalysi1.
獲取客戶(hù)對(duì)系統(tǒng)的需求需求獲取必須讓客戶(hù)與開(kāi)發(fā)者充分地交流,這里介紹一種采用用況來(lái)收集客戶(hù)需求的技術(shù)。分析員首先標(biāo)識(shí)使用該系統(tǒng)的不同的執(zhí)行者(actor),這些執(zhí)行者代表使用該系統(tǒng)的不同的角色。每個(gè)執(zhí)行者可以敘述他如何使用系統(tǒng),或者說(shuō)他需要系統(tǒng)提供什么功能。執(zhí)行者提出的每一個(gè)使用場(chǎng)景(或功能)都是系統(tǒng)的一個(gè)用況的實(shí)例,一個(gè)用況描述了系統(tǒng)的一種用法(或一個(gè)功能),所有執(zhí)行者提出的所有用況構(gòu)成系統(tǒng)的完整的需求。
分析過(guò)程22.1.
獲取客戶(hù)對(duì)系統(tǒng)的需求分析過(guò)程22.注意,執(zhí)行者與用戶(hù)是不同的兩個(gè)概念,一個(gè)用戶(hù)可以扮演幾個(gè)角色(執(zhí)行者),一個(gè)執(zhí)行者可以是用戶(hù),也可以是其他系統(tǒng)(應(yīng)用程序或設(shè)備)。得到的用況必須進(jìn)行復(fù)審,以使需求完整。23.注意,執(zhí)行者與用戶(hù)是不同的兩個(gè)概念,一個(gè)用戶(hù)可以扮演幾個(gè)角色2.
標(biāo)識(shí)類(lèi)和對(duì)象類(lèi)和對(duì)象來(lái)自問(wèn)題領(lǐng)域??梢韵葮?biāo)識(shí)候選類(lèi),然后進(jìn)行篩選24.2.
標(biāo)識(shí)類(lèi)和對(duì)象24.3.定義類(lèi)的結(jié)構(gòu)和層次類(lèi)的結(jié)構(gòu)主要有兩種:一般—特殊(generalization—specialization)結(jié)構(gòu)和整體—部分(whole—part)結(jié)構(gòu)。
一般—特殊結(jié)構(gòu)是一種分類(lèi)結(jié)構(gòu),反映了類(lèi)間的一般與特殊的關(guān)系。一般類(lèi)與特殊類(lèi)之間是一種“isa”的關(guān)系,如:汽車(chē)是一種交通工具。同樣,特殊類(lèi)還可以分為更特殊的類(lèi),這樣可形成類(lèi)的層次結(jié)構(gòu)。
整體—部分結(jié)構(gòu)反映了類(lèi)間的整體與部分關(guān)系。值得注意的是,整體—部分關(guān)系是對(duì)對(duì)象而言的,而不是對(duì)類(lèi)的。整體—部分關(guān)系是一種“hasa”的關(guān)系,如“汽車(chē)”有“發(fā)動(dòng)機(jī)”。同樣,整體—部分結(jié)構(gòu)也具有層次結(jié)構(gòu)。25.3.定義類(lèi)的結(jié)構(gòu)和層次25.有的面向?qū)ο蠓椒ㄖ校鸦ハ鄥f(xié)作以完成一組緊密結(jié)合在一起的責(zé)任的類(lèi)的集合定義為主題(subject)或子系統(tǒng)(subsystem)。主題和子系統(tǒng)都是一種抽象,從外界觀察系統(tǒng)時(shí),主題或子系統(tǒng)可看作黑盒,它有自己的一組責(zé)任和協(xié)作者,觀察者不必關(guān)心其細(xì)節(jié)。觀察一個(gè)主題或子系統(tǒng)的內(nèi)部時(shí),觀察者可以把注意力集中在系統(tǒng)的某一個(gè)方面。因此,主題或子系統(tǒng)實(shí)際上是系統(tǒng)更高抽象層次上的一種描述。26.有的面向?qū)ο蠓椒ㄖ?,把互相協(xié)作以完成一組緊密結(jié)合在一起的責(zé)任4.
建造對(duì)象——關(guān)系模型對(duì)象--關(guān)系模型描述了系統(tǒng)的靜態(tài)結(jié)構(gòu),它指出了類(lèi)間的關(guān)系(relationship)。類(lèi)之間的關(guān)系有關(guān)聯(lián)、依賴(lài)、泛化、實(shí)現(xiàn)等。27.4.
建造對(duì)象——關(guān)系模型27.5.
建立對(duì)象——行為模型對(duì)象--行為模型描述了系統(tǒng)的動(dòng)態(tài)行為,它們指明系統(tǒng)如何響應(yīng)外部的事件或激勵(lì)(stimulus)。建模的步驟如下:評(píng)估所有的用況,以完全理解系統(tǒng)中交互的序列。標(biāo)識(shí)驅(qū)動(dòng)交互序列的事件,理解這些事件如何和特定的對(duì)象相關(guān)聯(lián)。為每個(gè)用況創(chuàng)建事件軌跡(eventtrace)。為系統(tǒng)建造狀態(tài)機(jī)圖。復(fù)審對(duì)象--行為模型,以驗(yàn)證準(zhǔn)確性和一致性。
28.5.
建立對(duì)象——行為模型28.面向?qū)ο笤O(shè)計(jì)
(Object_OrientedDesign)
面向?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)衡(折衷)29.面向?qū)ο笤O(shè)計(jì)
(Object_OrientedDesign對(duì)象設(shè)計(jì)在過(guò)程級(jí)別(procedurallavel)設(shè)計(jì)每個(gè)操作,即設(shè)計(jì)每個(gè)操作的實(shí)現(xiàn)細(xì)節(jié)定義內(nèi)部類(lèi)為類(lèi)屬性設(shè)計(jì)內(nèi)部數(shù)據(jù)結(jié)構(gòu)消息設(shè)計(jì)使用對(duì)象間的協(xié)作和對(duì)象--關(guān)系模型,設(shè)計(jì)消息模型復(fù)審復(fù)審設(shè)計(jì)模型并在需要時(shí)迭代。30.對(duì)象設(shè)計(jì)30.1.系統(tǒng)設(shè)計(jì)1)
將分析模型劃分成子系統(tǒng)在OO系統(tǒng)設(shè)計(jì)中,我們把分析模型中緊密相關(guān)的類(lèi)、關(guān)系等設(shè)計(jì)元素包裝成子系統(tǒng)。通常,子系統(tǒng)的所有元素共享某些公共的性質(zhì),它們可能都涉及完成相同的功能;它們可能駐留在相同的產(chǎn)品硬件中;或者它們可能管理相同的類(lèi)和資源。子系統(tǒng)由它們的責(zé)任所刻畫(huà),即,一個(gè)子系統(tǒng)可以通過(guò)它提供的服務(wù)來(lái)標(biāo)識(shí)。在OOD中,這種服務(wù)是完成特定功能的一組操作。
31.1.系統(tǒng)設(shè)計(jì)31.
子系統(tǒng)的設(shè)計(jì)準(zhǔn)則是:(1)子系統(tǒng)應(yīng)具有定義良好的接口,通過(guò)接口和系統(tǒng)的其它部分通信;(2)除了少數(shù)的“通信類(lèi)”外,子系統(tǒng)中的類(lèi)應(yīng)只和該子系統(tǒng)中的其它類(lèi)協(xié)作;(3)子系統(tǒng)的數(shù)量不宜太多;(4)可以在子系統(tǒng)內(nèi)部再次劃分,以降低復(fù)雜性。32.子系統(tǒng)的設(shè)計(jì)準(zhǔn)則是:32.2)標(biāo)識(shí)問(wèn)題本身的并發(fā)性,并為子系統(tǒng)分配處理器通過(guò)對(duì)對(duì)象--行為模型的分析,可發(fā)現(xiàn)系統(tǒng)的并發(fā)性。如果對(duì)象(或子系統(tǒng))不是同時(shí)活動(dòng)的,則它們不需并發(fā)處理,此時(shí)這些對(duì)象(或子系統(tǒng))可以在同一個(gè)處理器上實(shí)現(xiàn)。反之,如果對(duì)象(或子系統(tǒng))必須對(duì)一些事件同時(shí)異步地動(dòng)作,則它們被視為并發(fā)的,此時(shí),可以將并發(fā)的子系統(tǒng)分別分配到不同的處理器,或者分配在同一個(gè)處理器,而由操作系統(tǒng)提供并發(fā)支持。33.2)標(biāo)識(shí)問(wèn)題本身的并發(fā)性,并為子系統(tǒng)分配處理器33.3)任務(wù)管理設(shè)計(jì)Coad和Yourdon提出如下管理并發(fā)任務(wù)對(duì)象的設(shè)計(jì)策略:(1)確定任務(wù)的類(lèi)型;(2)必要時(shí),定義協(xié)調(diào)者任務(wù)和關(guān)聯(lián)的對(duì)象;(3)將協(xié)調(diào)者任務(wù)和其它任務(wù)集成。通常可通過(guò)了解任務(wù)是如何被啟動(dòng)的來(lái)確定任務(wù)的類(lèi)型,如事件驅(qū)動(dòng)任務(wù),時(shí)鐘驅(qū)動(dòng)任務(wù)。每個(gè)任務(wù)應(yīng)該定義其優(yōu)先級(jí),并識(shí)別關(guān)鍵任務(wù)。當(dāng)有多個(gè)任務(wù)時(shí)還可以考慮增加一個(gè)協(xié)調(diào)者任務(wù),以控制這些任務(wù)協(xié)同工作。34.3)任務(wù)管理設(shè)計(jì)34.4)數(shù)據(jù)管理設(shè)計(jì)通常數(shù)據(jù)管理設(shè)計(jì)成層次模式,其目的是將數(shù)據(jù)的物理存儲(chǔ)及操縱與系統(tǒng)的業(yè)務(wù)邏輯加以分離。數(shù)據(jù)管理的設(shè)計(jì)包括設(shè)計(jì)系統(tǒng)中各種數(shù)據(jù)對(duì)象的存儲(chǔ)方式(如內(nèi)部數(shù)據(jù)結(jié)構(gòu)、文件、數(shù)據(jù)庫(kù)),以及設(shè)計(jì)相應(yīng)的服務(wù),即為要儲(chǔ)存的對(duì)象增加所需的屬性和操作。35.4)數(shù)據(jù)管理設(shè)計(jì)35.5)資源管理設(shè)計(jì)OO系統(tǒng)可利用一系列不同的資源(如磁盤(pán)驅(qū)動(dòng)器、處理器、通信線(xiàn)路等外部實(shí)體或數(shù)據(jù)庫(kù)、對(duì)象等抽象資源),很多情況下,子系統(tǒng)同時(shí)競(jìng)爭(zhēng)這些資源,因此要設(shè)計(jì)一套控制機(jī)制和安全機(jī)制,以控制對(duì)資源的訪問(wèn),避免對(duì)資源使用的沖突。
6)人機(jī)界面設(shè)計(jì)對(duì)大多數(shù)應(yīng)用系統(tǒng)而言,人機(jī)界面本身是一個(gè)非常重要的子系統(tǒng)。人機(jī)界面主要強(qiáng)調(diào)人如何命令系統(tǒng),以及系統(tǒng)如何向人提交信息。它包括窗口、菜單、報(bào)告的設(shè)計(jì)。
36.5)資源管理設(shè)計(jì)36.7)子系統(tǒng)間的通信子系統(tǒng)之間可以通過(guò)建立客戶(hù)/服務(wù)器連接進(jìn)行通信,也可以通過(guò)端對(duì)端(peertopeer)連接進(jìn)行通信。我們必須確定子系統(tǒng)間通信的合約(contract),合約提供了一個(gè)子系統(tǒng)和另一個(gè)子系統(tǒng)交互的方式。
37.7)子系統(tǒng)間的通信37.2.
對(duì)象設(shè)計(jì)對(duì)象設(shè)計(jì)是為每個(gè)類(lèi)的屬性和操作作出詳細(xì)的設(shè)計(jì),并設(shè)計(jì)連接類(lèi)與它的協(xié)作者之間的消息規(guī)約。1)
對(duì)象描述對(duì)象的設(shè)計(jì)描述可以采取以下形式之一:(1)協(xié)議描述:描述對(duì)象的接口,即定義對(duì)象可以接收的消息以及當(dāng)對(duì)象接收到消息后完成的相關(guān)操作;(2)實(shí)現(xiàn)描述:描述傳送給對(duì)象的消息所蘊(yùn)含的每個(gè)操作的實(shí)現(xiàn)細(xì)節(jié),實(shí)現(xiàn)細(xì)節(jié)包括有關(guān)對(duì)象私有部分的信息,即關(guān)于描述對(duì)象屬性的數(shù)據(jù)結(jié)構(gòu)的內(nèi)部細(xì)節(jié)和描述操作的過(guò)程細(xì)節(jié)。對(duì)對(duì)象的使用者來(lái)說(shuō),只需要協(xié)議描述就夠了。38.2.
對(duì)象設(shè)計(jì)38.2)設(shè)計(jì)算法和數(shù)據(jù)結(jié)構(gòu)為對(duì)象中的屬性和操作設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和實(shí)現(xiàn)算法。3.
設(shè)計(jì)模式(designpatterns)在許多面向?qū)ο笙到y(tǒng)中,存在一些類(lèi)和通信對(duì)象的重復(fù)出現(xiàn)的模式。這些模式求解特定的設(shè)計(jì)問(wèn)題,使面向?qū)ο笤O(shè)計(jì)更靈活,并最終可復(fù)用。這些模式幫助設(shè)計(jì)者復(fù)用以前成功的設(shè)計(jì),設(shè)計(jì)者可以把這些模式應(yīng)用到新的設(shè)計(jì)中。39.2)設(shè)計(jì)算法和數(shù)據(jù)結(jié)構(gòu)39.一個(gè)設(shè)計(jì)模式通常可用四個(gè)信息來(lái)描述:1)模式名設(shè)計(jì)模式名應(yīng)具有實(shí)際的含義,它能反映模式的適用性和意圖。2)使模式可被應(yīng)用所必須存在的環(huán)境和條件。3)設(shè)計(jì)模式的特征模式特征指出一些設(shè)計(jì)的屬性,調(diào)整這些屬性使該模式能適應(yīng)各種不同的問(wèn)題。這些屬性表示設(shè)計(jì)的特征,這些特征能被用于檢索(通過(guò)數(shù)據(jù)庫(kù))以找到合適的模式。4)應(yīng)用設(shè)計(jì)模式的結(jié)果(consequences)對(duì)于一個(gè)設(shè)計(jì)模式的使用結(jié)果表明設(shè)計(jì)決策的走向。40.一個(gè)設(shè)計(jì)模式通??捎盟膫€(gè)信息來(lái)描述:40.典型的面向?qū)ο蠓椒–oad&Yourdon方法OMT方法Booch方法OOSE方法41.典型的面向?qū)ο蠓椒–oad&Yourdon方法41.內(nèi)容摘要面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮姆治龊驮O(shè)計(jì)過(guò)程UML概述用況建模靜態(tài)建模動(dòng)態(tài)建模物理體系結(jié)構(gòu)建模42.內(nèi)容摘要面向?qū)ο蟮幕靖拍?2.統(tǒng)一建模語(yǔ)言UMLUnifiedModelingLanguage43.統(tǒng)一建模語(yǔ)言UMLUnifiedModelingLangUML概述為何研究UML—結(jié)束方法大戰(zhàn)發(fā)展歷史
1994年Booch和Rumbaugh在RationalSoftwareCorporation開(kāi)始了UML的工作,其目標(biāo)是創(chuàng)建一個(gè)“統(tǒng)一的方法”,1995年OOSE的創(chuàng)始人Jacobson加盟到這項(xiàng)工作中,工作重點(diǎn)轉(zhuǎn)移到創(chuàng)建一種統(tǒng)一的建模語(yǔ)言UML1996年6月、10月、1997年1月、11月分別推出了UML0.9、UML0.91、UML1.0、UML1.144.UML概述為何研究UML—結(jié)束方法大戰(zhàn)44.UML概述1997年11月,OMG(ObjectManagementGroup)批準(zhǔn)把UML1.1作為基于面向?qū)ο蠹夹g(shù)的標(biāo)準(zhǔn)建模語(yǔ)言之后,UML進(jìn)行了持續(xù)的修訂和改進(jìn),先后產(chǎn)生了UML1.2、1.3、1.4、1.5版本2004年推出了UML2.0,UML2.0對(duì)UML1.x作了重大的修改。45.UML概述1997年11月,OMG(Obj模型元素
模型元素指模型中的實(shí)體以及實(shí)體間相互連接的關(guān)系
部分模型元素注解類(lèi)屬性操作對(duì)象:類(lèi)屬性操作狀態(tài)用況結(jié)點(diǎn)供應(yīng)接口包依賴(lài)關(guān)聯(lián)泛化主動(dòng)類(lèi)屬性操作請(qǐng)求接口構(gòu)件實(shí)現(xiàn)46.模型元素部分模型元素注解類(lèi)屬性操作對(duì)象:類(lèi)屬性操作狀態(tài)用況視圖與圖主題域視圖(view)圖(diagram)結(jié)構(gòu)化靜態(tài)視圖類(lèi)圖(class)設(shè)計(jì)視圖內(nèi)部結(jié)構(gòu)(internalstructure)協(xié)作圖(collaboration)構(gòu)件圖(component)用況視圖用況圖(usecase)動(dòng)態(tài)的狀態(tài)機(jī)視圖狀態(tài)機(jī)圖(statemachine)活動(dòng)視圖活動(dòng)圖(activity)交互視圖順序圖(sequence)通信圖(communication)物理的部署視圖部署圖(deployment)模型管理模型管理視圖包圖(package)47.視圖與圖主題域視圖(view)圖(diagram)結(jié)構(gòu)化靜靜態(tài)視圖靜態(tài)視圖對(duì)應(yīng)用領(lǐng)域中的概念以及與系統(tǒng)實(shí)現(xiàn)有關(guān)的內(nèi)部概念建模,主要由類(lèi)以及類(lèi)之間的相互關(guān)系組成,在靜態(tài)視圖中不描述依賴(lài)于時(shí)間的系統(tǒng)行為。靜態(tài)視圖用類(lèi)圖來(lái)展示。設(shè)計(jì)視圖設(shè)計(jì)視圖對(duì)應(yīng)用自身的設(shè)計(jì)結(jié)構(gòu)建模,例如,將設(shè)計(jì)結(jié)構(gòu)擴(kuò)展成:結(jié)構(gòu)化類(lèi)元,為實(shí)現(xiàn)功能所需的協(xié)作和良定義接口的構(gòu)件的組裝。設(shè)計(jì)視圖由內(nèi)部結(jié)構(gòu)圖、協(xié)作圖和構(gòu)件圖實(shí)現(xiàn)。48.靜態(tài)視圖48.用況視圖用況視圖對(duì)被稱(chēng)為執(zhí)行者的外部代理(他與特定視點(diǎn)的主題交互)所感受到的主題(如系統(tǒng))功能建模。用況視圖的意圖是列出系統(tǒng)中的用況和執(zhí)行者,并顯示哪個(gè)執(zhí)行者參與了哪個(gè)用況的執(zhí)行。用況的行為用動(dòng)態(tài)視圖,特別是交互視圖來(lái)表示。用況視圖用用況圖來(lái)展示。49.用況視圖49.狀態(tài)機(jī)視圖狀態(tài)機(jī)視圖對(duì)一個(gè)類(lèi)的對(duì)象的可能生命歷程建模。一個(gè)狀態(tài)機(jī)包括用遷移連接的狀態(tài),每個(gè)狀態(tài)對(duì)一個(gè)對(duì)象在其生命期中滿(mǎn)足某種條件的一個(gè)時(shí)間段建模。當(dāng)一個(gè)事件發(fā)生時(shí),它會(huì)導(dǎo)致觸發(fā)對(duì)象的一個(gè)狀態(tài)向另一個(gè)新?tīng)顟B(tài)的遷移,附加在遷移上的動(dòng)作或活動(dòng)也同時(shí)被執(zhí)行。狀態(tài)機(jī)視圖用狀態(tài)機(jī)圖來(lái)展示。50.狀態(tài)機(jī)視圖50.活動(dòng)視圖活動(dòng)展示了包含在執(zhí)行計(jì)算或工作流中的計(jì)算活動(dòng)的控制流。一個(gè)動(dòng)作是一個(gè)基本的計(jì)算步,一個(gè)活動(dòng)結(jié)點(diǎn)是一組動(dòng)作或子活動(dòng),一個(gè)活動(dòng)可描述順序的和并發(fā)的計(jì)算?;顒?dòng)視圖用活動(dòng)圖來(lái)展示。交互視圖交互視圖描述系統(tǒng)各部分中消息交換的順序。交互視圖提供了系統(tǒng)中行為的整體視圖,也就是說(shuō),它展示了多個(gè)對(duì)象間交叉的控制流。交互視圖用順序圖和通信圖來(lái)展示。51.活動(dòng)視圖51.部署視圖部署視圖描述了運(yùn)行時(shí)結(jié)點(diǎn)上制品的分布。制品是一個(gè)物理實(shí)現(xiàn)單元,如一個(gè)文件,它也可以表示一或多個(gè)構(gòu)件的實(shí)現(xiàn)(一種表現(xiàn)形式)。結(jié)點(diǎn)是運(yùn)行時(shí)表示計(jì)算資源的物理對(duì)象,如,計(jì)算機(jī)、設(shè)備或內(nèi)存。部署視圖允許對(duì)分配的結(jié)果和資源分配進(jìn)行評(píng)估。部署視圖用部署圖來(lái)展示。52.部署視圖52.模型管理視圖模型管理視圖對(duì)模型自身的組織建模。一個(gè)模型由一組保存模型元素(如類(lèi)、狀態(tài)機(jī)、用況)的包組成。包還可以包含其它的包,因此,一個(gè)模型從一個(gè)間接包含所有模型內(nèi)容的根包(rootpackage)開(kāi)始。包是操縱模型內(nèi)容的單元,還是訪問(wèn)控制和配置控制的單元。每個(gè)模型元素可以被一個(gè)包或另一個(gè)元素?fù)碛?。模型管理信息通常展示在包圖中,它是類(lèi)圖的變種。53.模型管理視圖53.剖面(profile)UML是用一個(gè)元模型(metamodel)定義的,元模型是指描述建模語(yǔ)言自身的模型。通常元模型的改變是復(fù)雜的,也是危險(xiǎn)的。剖面機(jī)制允許在不修改基礎(chǔ)元模型的前提下對(duì)UML作有限的變化。UML包含三個(gè)主要的可擴(kuò)展結(jié)構(gòu):約束(constraints)、版型(stereotypes)和標(biāo)簽值(taggedvalues)。約束是以自然語(yǔ)言或特定形式語(yǔ)言的正文表示的語(yǔ)義條件或限制,約束寫(xiě)在花括號(hào)中({}),如{value≥0},{or}。版型是在基于現(xiàn)有各類(lèi)模型元素的外形中定義模型元素的新類(lèi)型,它本質(zhì)上是一種新元類(lèi)(metaclass)。版型可以擴(kuò)展語(yǔ)義,但不能擴(kuò)展原元模型類(lèi)的結(jié)構(gòu)。用《》標(biāo)記版型,如《signal》。標(biāo)簽值是貼在任何模型元素上的被命名的信息片。下圖給出了版型和標(biāo)簽值的應(yīng)用實(shí)例。54.剖面(profile)54.版型和標(biāo)簽值《authorship》Schedulingtaggedvalues《authorship》author=“FrankMartin”due=Dec.31,200955.版型和標(biāo)簽值《authorship》taggedvalue類(lèi)圖類(lèi)圖展示了系統(tǒng)中類(lèi)的靜態(tài)結(jié)構(gòu),即類(lèi)與類(lèi)之間的相互聯(lián)系。類(lèi)之間有多種聯(lián)系方式,如關(guān)聯(lián)(相互連接)、依賴(lài)(一個(gè)類(lèi)依賴(lài)或使用另一個(gè)類(lèi))、泛化(一個(gè)類(lèi)是另一個(gè)類(lèi)的特殊情況)等??梢园讶舾蓚€(gè)相關(guān)的類(lèi)包裝在一起作為一個(gè)單元(包),相當(dāng)于一個(gè)子系統(tǒng)。一個(gè)系統(tǒng)可以有多張類(lèi)圖,一個(gè)類(lèi)也可以出現(xiàn)在幾張類(lèi)圖中。對(duì)象圖對(duì)象圖是類(lèi)圖的實(shí)例,它展示了系統(tǒng)執(zhí)行在某一時(shí)間點(diǎn)上的一個(gè)可能的快照。對(duì)象圖使用與類(lèi)圖相同的符號(hào),只是在對(duì)象名下面加上下劃線(xiàn),同時(shí)它還顯示了對(duì)象間的所有實(shí)例鏈接(link)關(guān)系。56.類(lèi)圖56.內(nèi)部結(jié)構(gòu)圖內(nèi)部結(jié)構(gòu)圖展示了類(lèi)的分解,給出了組成一個(gè)結(jié)構(gòu)化類(lèi)元的相互連接的部分、端口和連接器。手冊(cè):演出手冊(cè)數(shù)據(jù)庫(kù):演出數(shù)據(jù)庫(kù)售票員:售票員售票處售票內(nèi)部結(jié)構(gòu)圖57.內(nèi)部結(jié)構(gòu)圖手冊(cè):演出手冊(cè)數(shù)據(jù)庫(kù):演出數(shù)據(jù)庫(kù)售票員:售票員售票協(xié)作圖協(xié)作圖展示了協(xié)作的定義,是一種合成的結(jié)構(gòu)圖。協(xié)作是為了完成某一目的而一起工作的一組對(duì)象間的上下文關(guān)系。劇院售票*1售票亭:售票亭[*]:售票處1*終端:售票終端[*]協(xié)作圖58.協(xié)作圖劇院售票*1售票亭:售票亭[*]:售票處1*構(gòu)件圖構(gòu)件圖展示了系統(tǒng)中的構(gòu)件(即來(lái)自應(yīng)用的軟件單元),構(gòu)件間通過(guò)接口的連接,以及構(gòu)件之間的依賴(lài)關(guān)系。構(gòu)件是一種結(jié)構(gòu)化類(lèi)元,可以用內(nèi)部結(jié)構(gòu)圖來(lái)定義它的內(nèi)部結(jié)構(gòu)。59.構(gòu)件圖59.用況圖用況圖展示了各類(lèi)外部執(zhí)行者與系統(tǒng)所提供的用況之間的連接。一個(gè)用況是系統(tǒng)所提供的一個(gè)功能(也可以說(shuō)是系統(tǒng)提供的某一特定用法)的描述,執(zhí)行者是指那些可能使用這些用況的人或外部系統(tǒng),執(zhí)行者與用況的連接表示該執(zhí)行者使用了那個(gè)用況。用況圖給出了用戶(hù)所感受到的系統(tǒng)行為,但不描述系統(tǒng)如何實(shí)現(xiàn)該功能。用況通常用普通正文描述,也可以用活動(dòng)圖來(lái)描述。60.用況圖60.狀態(tài)機(jī)圖狀態(tài)機(jī)圖通常是對(duì)類(lèi)描述的補(bǔ)充,它說(shuō)明該類(lèi)的對(duì)象所有可能的狀態(tài)以及哪些事件將導(dǎo)致?tīng)顟B(tài)的改變。一個(gè)事件可以是另一個(gè)對(duì)象向它發(fā)送的一條消息,或者是滿(mǎn)足了某些條件。狀態(tài)的改變稱(chēng)為遷移(transition)。一個(gè)狀態(tài)遷移還可以有與之相關(guān)的動(dòng)作,該動(dòng)作指出狀態(tài)遷移時(shí)應(yīng)做什么。并不是所有的類(lèi)都要畫(huà)狀態(tài)機(jī)圖,有些類(lèi)有一些意義明確的狀態(tài),并且其行為受不同的狀態(tài)所影響和改變,這些類(lèi)才需要畫(huà)狀態(tài)機(jī)圖。61.狀態(tài)機(jī)圖61.活動(dòng)圖活動(dòng)圖展示了連續(xù)的活動(dòng)流?;顒?dòng)圖通常用來(lái)描述完成一個(gè)操作所需要的活動(dòng)。當(dāng)然它還能用于描述其它活動(dòng)流,如描述用況?;顒?dòng)圖由動(dòng)作狀態(tài)組成,它包含完成一個(gè)動(dòng)作的活動(dòng)的規(guī)約(即規(guī)格說(shuō)明)。當(dāng)一個(gè)動(dòng)作完成時(shí),將離開(kāi)該動(dòng)作狀態(tài)?;顒?dòng)圖中的動(dòng)作部分還可包括消息發(fā)送和接收的規(guī)約。62.活動(dòng)圖62.順序圖順序圖展示了幾個(gè)對(duì)象之間的動(dòng)態(tài)交互關(guān)系。它主要是用來(lái)顯示對(duì)象之間發(fā)送消息的順序,它還顯示了對(duì)象之間的交互,即系統(tǒng)執(zhí)行的某一特定點(diǎn)所發(fā)生的事。通信圖通信圖用幾何排列來(lái)表示交互作用中的角色,它顯示了有協(xié)作關(guān)系的復(fù)合結(jié)構(gòu)組成部分或角色范圍內(nèi)的交互。它明確地顯示元素之間的協(xié)作關(guān)系,而不顯示作為獨(dú)立維的時(shí)間,消息的順序和并發(fā)線(xiàn)程必須由順序號(hào)確定。63.順序圖63.部署圖部署圖展示了運(yùn)行時(shí)處理結(jié)點(diǎn)和在結(jié)點(diǎn)上生存的制品的配置。結(jié)點(diǎn)是運(yùn)行時(shí)的計(jì)算資源,制品是物理實(shí)體,如構(gòu)件、文件。部署圖中顯示部署在結(jié)點(diǎn)上的制品和它們之間的關(guān)系,以及結(jié)點(diǎn)之間的連接和通信方式。64.部署圖64.包圖包圖是由包和它們間的關(guān)系組成的結(jié)構(gòu)圖模型是在某一視點(diǎn)給定的精度上對(duì)系統(tǒng)的完整描述,一個(gè)系統(tǒng)可以從不同的視點(diǎn)(如分析模型、設(shè)計(jì)模型)存在多個(gè)模型。一個(gè)模型可看作一個(gè)特定類(lèi)型的包,通常僅顯示包就足夠了(不必顯示包內(nèi)部的細(xì)節(jié))。下圖給出了劇院系統(tǒng)所細(xì)分成的包以及它們之間的依賴(lài)關(guān)系。65.包圖65.售票處計(jì)劃廣告時(shí)間表客戶(hù)記錄票記錄運(yùn)作售票工資單計(jì)算購(gòu)買(mǎi)包圖66.售票處計(jì)劃廣告時(shí)間表客戶(hù)記錄票記錄運(yùn)作售票工資單計(jì)算購(gòu)買(mǎi)包圖內(nèi)容摘要面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮姆治龊驮O(shè)計(jì)過(guò)程UML概述用況建模靜態(tài)建模動(dòng)態(tài)建模物理體系結(jié)構(gòu)建模67.內(nèi)容摘要面向?qū)ο蟮幕靖拍?7.用況建模用況建模是用于描述一個(gè)系統(tǒng)應(yīng)該做什么的建模技術(shù),用況建模不僅用于新系統(tǒng)的需求獲取,還可用于已有系統(tǒng)的升級(jí)。用況模型用用況圖來(lái)描述。用況圖展示了各類(lèi)外部執(zhí)行者與系統(tǒng)所提供的用況之間的連接。一個(gè)用況是系統(tǒng)所提供的一個(gè)功能(也可以說(shuō)是系統(tǒng)提供的某一特定用法)的描述,執(zhí)行者是指那些可能使用這些用況的人或外部系統(tǒng),執(zhí)行者與用況的連接表示該執(zhí)行者使用了那個(gè)用況。用況圖給出了用戶(hù)所感受到的系統(tǒng)行為,但不描述系統(tǒng)如何實(shí)現(xiàn)該功能。用況通常用普通正文描述,也可以用活動(dòng)圖來(lái)描述。68.用況建模用況建模是用于描述一個(gè)系統(tǒng)應(yīng)該做什么的建模技任何一個(gè)涉及到系統(tǒng)功能活動(dòng)的人都會(huì)用到用況模型??蛻?hù):用況模型指明了系統(tǒng)的功能,描述了系統(tǒng)能如何使用。用況建模時(shí)客戶(hù)的積極參與是十分重要的。開(kāi)發(fā)者:用況模型幫助他們理解系統(tǒng)要做什么,同時(shí)為以后的其它模型建模、結(jié)構(gòu)設(shè)計(jì)、實(shí)現(xiàn)等提供依據(jù)。集成測(cè)試和系統(tǒng)測(cè)試人員:根據(jù)用況來(lái)測(cè)試系統(tǒng),以驗(yàn)證系統(tǒng)是否完成了用況指定的功能。69.任何一個(gè)涉及到系統(tǒng)功能活動(dòng)的人都會(huì)用到用況模型。69用況建模步驟創(chuàng)建用況模型的步驟包括:1.定義系統(tǒng)2.確定執(zhí)行者3.確定用況4.描述用況5.定義用況間的關(guān)系,6.確認(rèn)模型70.用況建模步驟創(chuàng)建用況模型的步驟包括:70.用況模型由用況圖組成,用況圖展示了執(zhí)行者、用況以及它們之間的關(guān)系。用況通常用正文形式來(lái)描述。一個(gè)用況模型可由若干幅用況圖組成。一幅用況圖包含的模型元素有系統(tǒng)、執(zhí)行者、用況,以及表示它們間的不同關(guān)系,如關(guān)聯(lián)、擴(kuò)展、包含、泛化等。71.用況模型由用況圖組成,用況圖展示了執(zhí)行者、用況以及它們之間的用況圖電話(huà)訂購(gòu)系統(tǒng)用況圖TelephoneCatalogCustomerSalespersonnShippingClerksupervisorestablishcreditFillorderArrangePaymentSupplyCustomerDataorderproductArrangeCreditPaycashplaceorderRequestCatalog《include》《include》《include》《extend》checkstatus72.用況圖電話(huà)訂購(gòu)系統(tǒng)用況圖TelephoneCatalog一.
確定執(zhí)行者執(zhí)行者是指與系統(tǒng)交互的人或其它系統(tǒng)執(zhí)行者代表一種角色,而不是具體的某個(gè)人執(zhí)行者可分成主執(zhí)行者和副執(zhí)行者:主執(zhí)行者使用系統(tǒng)的主要功能例如,保險(xiǎn)系統(tǒng)中主執(zhí)行者處理保險(xiǎn)的注冊(cè)和管理副執(zhí)行者處理系統(tǒng)的輔助功能例如,管理數(shù)據(jù)庫(kù)、通信、備份以及其它管理等系統(tǒng)維護(hù)73.一.確定執(zhí)行者73.執(zhí)行者還可分為主動(dòng)執(zhí)行者和被動(dòng)執(zhí)行者:主動(dòng)執(zhí)行者開(kāi)始一個(gè)用況被動(dòng)執(zhí)行者從不開(kāi)始用況,只是參與一個(gè)或多個(gè)用況74.執(zhí)行者還可分為主動(dòng)執(zhí)行者和被動(dòng)執(zhí)行者:74.我們可以通過(guò)回答下列問(wèn)題來(lái)確定執(zhí)行者:誰(shuí)使用系統(tǒng)的主要功能(主執(zhí)行者)?誰(shuí)需要從系統(tǒng)中得到對(duì)他們?nèi)粘9ぷ鞯闹С??誰(shuí)需要維護(hù)、管理和維持系統(tǒng)的日常運(yùn)行(副執(zhí)行者)?系統(tǒng)需要控制哪些硬件設(shè)備?系統(tǒng)需要與哪些其它系統(tǒng)交互?哪些人或哪些系統(tǒng)對(duì)系統(tǒng)產(chǎn)生的結(jié)果(值)感興趣?75.我們可以通過(guò)回答下列問(wèn)題來(lái)確定執(zhí)行者:75.確定用況1.
用況的特征用況總是被執(zhí)行者啟動(dòng)的(initiated),執(zhí)行者必須直接或間接地指示系統(tǒng)去執(zhí)行用況用況向執(zhí)行者提供值,這些值必須是可識(shí)別的用況是完整的,一個(gè)用況必須是一個(gè)完整的描述用況是一個(gè)類(lèi),而不是實(shí)例,用況的實(shí)例稱(chēng)為場(chǎng)景(scenario)76.確定用況76.2.尋找用況可以通過(guò)讓每個(gè)執(zhí)行者回答以下問(wèn)題來(lái)尋找用況:執(zhí)行者需要系統(tǒng)提供哪些功能?執(zhí)行者需要做什么?執(zhí)行者是否需要讀、創(chuàng)建、刪除、修改或儲(chǔ)存系統(tǒng)中的某類(lèi)信息?執(zhí)行者是否要被系統(tǒng)中的事件提醒,或者執(zhí)行者是否要提醒系統(tǒng)中某些事情?從功能觀點(diǎn)看,這些事件表示什么?執(zhí)行者的日常工作是否因?yàn)橄到y(tǒng)的新功能(尤其是目前尚未自動(dòng)化的功能)而被簡(jiǎn)化或提高了效率?77.2.尋找用況77.另外還有一些不是目前的執(zhí)行者回答的問(wèn)題:系統(tǒng)需要哪些輸入/輸出?誰(shuí)從系統(tǒng)獲取信息?誰(shuí)為系統(tǒng)提供信息?與當(dāng)前系統(tǒng)(可能是人工系統(tǒng)而不是自動(dòng)化系統(tǒng))的實(shí)現(xiàn)有關(guān)的主要問(wèn)題是什么?
對(duì)同一個(gè)項(xiàng)目,不同的開(kāi)發(fā)者選取的用況數(shù)是不一樣的。例如一個(gè)10個(gè)人年規(guī)模的項(xiàng)目,有人選取了20個(gè)用況,而在一個(gè)類(lèi)似的項(xiàng)目中,有人選用了100個(gè)用況。似乎20個(gè)太少,而100個(gè)太多,希望在項(xiàng)目規(guī)模和用況數(shù)之間保持均衡。
78.另外還有一些不是目前的執(zhí)行者回答的問(wèn)題:78.3.用況的描述用況通常用正文(text)來(lái)描述,也可用活動(dòng)圖來(lái)描述。用況的正文描述應(yīng)包括以下內(nèi)容:用況的目的:用況的最終目的是什么?它試圖達(dá)到什么?用況是如何啟動(dòng)(initiate)的:哪個(gè)執(zhí)行者在什么情況下啟動(dòng)用況的執(zhí)行?執(zhí)行者和用況之間的消息流:用況與執(zhí)行者之間交換什么消息或事件來(lái)通知對(duì)方改變或恢復(fù)信息?描述系統(tǒng)與執(zhí)行者之間的主消息流是什么?以及系統(tǒng)中哪些實(shí)體被使用或修改?79.3.用況的描述79.用況中可供選擇的流:用況中的活動(dòng)可根據(jù)條件或異常(exception)有選擇地執(zhí)行。如何通過(guò)給執(zhí)行者一個(gè)值來(lái)結(jié)束用況:描述何時(shí)可認(rèn)為用況已結(jié)束.80.用況中可供選擇的流:用況中的活動(dòng)可根據(jù)條件或異常(excep執(zhí)行者的簡(jiǎn)要描述如客戶(hù):向公司訂購(gòu)商品的人
客戶(hù)代表:公司處理客戶(hù)請(qǐng)求的雇員
庫(kù)存系統(tǒng):記錄公司庫(kù)存的軟件用況的簡(jiǎn)要描述如訂購(gòu)貨物:客戶(hù)創(chuàng)建一個(gè)新的請(qǐng)求商品的訂單,并為那些商品付費(fèi)
取消訂單:客戶(hù)取消一個(gè)已經(jīng)存在的訂單81.執(zhí)行者的簡(jiǎn)要描述81.用況的詳細(xì)描述前置條件和后置條件前置條件和后置條件表示用況開(kāi)始和結(jié)束的條件事件流(flowofevents)事件流是一系列陳述句,它是從執(zhí)行者的角度看,列出用況的各個(gè)步驟用況描述中可以包含條件、分支和循環(huán)。例如:訂購(gòu)貨物用況的描述如下82.用況的詳細(xì)描述82.用況名稱(chēng):訂購(gòu)貨物參與的執(zhí)行者:客戶(hù)、客戶(hù)代表前置條件:一個(gè)合法的客戶(hù)已經(jīng)登錄到這個(gè)系統(tǒng)事件流:當(dāng)客戶(hù)選擇訂購(gòu)貨物時(shí),用況開(kāi)始客戶(hù)輸入他的姓名和地址如果客戶(hù)只輸入郵編,系統(tǒng)將給出州和城市名當(dāng)客戶(hù)輸入產(chǎn)品代碼 a.系統(tǒng)給出產(chǎn)品描述和價(jià)格 b.系統(tǒng)往客戶(hù)訂單中添加該物品的價(jià)格循環(huán)結(jié)束5.客戶(hù)輸入信用卡支付信息83.用況名稱(chēng):訂購(gòu)貨物83.6.客戶(hù)選擇提交7.系統(tǒng)檢驗(yàn)輸入的信息,把該訂單作為未完成的交易保存,同時(shí)向記賬系統(tǒng)轉(zhuǎn)發(fā)支付信息。如果客戶(hù)提交的信息不正確,系統(tǒng)將提示客戶(hù)修改。8.當(dāng)支付確認(rèn)后,訂單就被標(biāo)記上已經(jīng)確認(rèn),同時(shí)返回給客戶(hù)一個(gè)訂單ID,用況也就結(jié)束了。如果支付沒(méi)有被確認(rèn),系統(tǒng)將提示客戶(hù)改正支付信息或者取消。如果客戶(hù)選擇修改信息,就回到第5步;如果選擇取消,用況結(jié)束。后置條件:如果訂單沒(méi)有被取消,它將保存在系統(tǒng)中,并做上標(biāo)記84.6.客戶(hù)選擇提交84.其他需求在用況中還可描述一些特殊的需求,這些需求常常是非功能性需求,如可用性、安全性、可維護(hù)性、負(fù)載、性能、自動(dòng)防故障、數(shù)據(jù)需求等。如訂購(gòu)貨物用況的其他需求:前置條件:(略)事件流:(略)特殊需求:系統(tǒng)必須在一秒內(nèi)響應(yīng)客戶(hù)的輸入后置條件:(略)85.其他需求85.事件流可分為兩部分:基本路徑基本路徑是運(yùn)轉(zhuǎn)正常時(shí)的路徑,是一系列沒(méi)有分支和選擇的簡(jiǎn)單陳述句可選路徑可選路徑是指不同于基本路徑而允許不同的事件序列的路徑。對(duì)于明顯有可能隨時(shí)發(fā)生的事情來(lái)說(shuō),可選路徑非常有效。86.事件流可分為兩部分:86.如訂購(gòu)貨物用況的基本路徑:事件流:基本路徑當(dāng)客戶(hù)選擇訂購(gòu)貨物時(shí),用況開(kāi)始客戶(hù)輸入他的姓名和地址當(dāng)客戶(hù)輸入產(chǎn)品代碼時(shí) a.系統(tǒng)給出產(chǎn)品描述和價(jià)格 b.系統(tǒng)往客戶(hù)訂單中添加該物品的價(jià)格循環(huán)結(jié)束4.客戶(hù)輸入信用卡支付信息5.客戶(hù)選擇提交6.系統(tǒng)檢驗(yàn)輸入的信息,把該訂單作為未完成的交易保存,同時(shí)向記賬系統(tǒng)轉(zhuǎn)發(fā)支付信息7.當(dāng)支付確認(rèn)后,訂單就被標(biāo)記上已經(jīng)確認(rèn),同時(shí)返回給客戶(hù)一個(gè)訂單ID,用況結(jié)束87.如訂購(gòu)貨物用況的基本路徑:87.如果在訂購(gòu)貨物用況中,客戶(hù)可以在提交訂單前隨時(shí)取消訂單,其可選路徑如下:可選路徑:在選擇提交前的任何時(shí)候,客戶(hù)都可以選擇cancel。這次訂購(gòu)沒(méi)有被保存,用況結(jié)束。在基本路徑第6步,如果有任何不正確的信息,系統(tǒng)提示客戶(hù)去修改這些信息。在基本路徑第7步,如果支付沒(méi)有被確認(rèn),系統(tǒng)將提示客戶(hù)改正支付信息或者取消。如果客戶(hù)選擇修改信息,就回到基本路徑第4步;如果選擇取消,用況結(jié)束。88.如果在訂購(gòu)貨物用況中,客戶(hù)可以在提交訂單前隨時(shí)取消訂確定用況之間的關(guān)系關(guān)系說(shuō)明記號(hào)關(guān)聯(lián)執(zhí)行者與他所參與的一個(gè)用況之間的通信路徑擴(kuò)展擴(kuò)展的用況到基本用況的一種關(guān)系,它指出擴(kuò)展的用況所定義的行為如何插入到基本用況所定義的行為中。擴(kuò)展的用況通過(guò)模塊化方式增量地修改基本用況《extend》89.確定用況之間的關(guān)系關(guān)系說(shuō)明記號(hào)關(guān)聯(lián)執(zhí)行者與他所參與的一個(gè)用況關(guān)系說(shuō)明記號(hào)包含從基本用況到另一個(gè)用況(稱(chēng)為包含用況,inclusionusecase)的一種關(guān)系,它指出包含用況定義的行為被包含在基本用況所定義的行為中?;居脹r能看到包含用況,并依賴(lài)于執(zhí)行包含用況后的結(jié)果,但兩者相互間不能訪問(wèn)其它屬性用況泛化一個(gè)一般用況與一個(gè)更特殊的用況之間的關(guān)系,特殊用況可繼承一般用況的特征《include》90.關(guān)系說(shuō)明記號(hào)包含從基本用況到另一個(gè)用況(稱(chēng)為包含用況,inc實(shí)例本實(shí)例實(shí)現(xiàn)一個(gè)簡(jiǎn)化了的銀行儲(chǔ)蓄賬戶(hù)管理系統(tǒng),該系統(tǒng)是在銀行的柜臺(tái)上對(duì)客戶(hù)辦理活期儲(chǔ)蓄業(yè)務(wù)。系統(tǒng)的需求陳述如下:一個(gè)客戶(hù)可以在多個(gè)銀行中開(kāi)設(shè)賬戶(hù),一個(gè)客戶(hù)也可在同一銀行中開(kāi)設(shè)多個(gè)不同的賬戶(hù)??蛻?hù)可以通過(guò)銀行職員進(jìn)行開(kāi)戶(hù)、存款、取款、轉(zhuǎn)賬、注銷(xiāo)賬戶(hù)等活動(dòng)。其中轉(zhuǎn)賬指客戶(hù)將自己的某個(gè)賬戶(hù)上的錢(qián)款轉(zhuǎn)入同一銀行的不同賬戶(hù)(稱(chēng)為銀行內(nèi)轉(zhuǎn)賬)或轉(zhuǎn)入不同銀行的賬戶(hù)(稱(chēng)為銀行間轉(zhuǎn)賬)。系統(tǒng)管理員負(fù)責(zé)系統(tǒng)的賬戶(hù)管理及業(yè)務(wù)報(bào)表的生成。91.實(shí)例本實(shí)例實(shí)現(xiàn)一個(gè)簡(jiǎn)化了的銀行儲(chǔ)蓄賬戶(hù)管理系統(tǒng),該系統(tǒng)是在銀識(shí)別執(zhí)行者客戶(hù):到銀行辦理儲(chǔ)蓄業(yè)務(wù)的人,負(fù)責(zé)輸入密碼銀行職員(客戶(hù)代理):銀行工作人員,代表客戶(hù)進(jìn)行儲(chǔ)蓄業(yè)務(wù)的操作銀行職員(管理人員):銀行工作人員,根據(jù)客戶(hù)的儲(chǔ)蓄業(yè)務(wù)更新賬戶(hù)管理員:銀行計(jì)算機(jī)的管理人員,負(fù)責(zé)賬戶(hù)的管理和業(yè)務(wù)報(bào)表的生成92.識(shí)別執(zhí)行者92.識(shí)別用況從系統(tǒng)的需求陳述可知,銀行職員(客戶(hù)代理)需要系統(tǒng)提供開(kāi)戶(hù)、存款、取款、轉(zhuǎn)賬、注銷(xiāo)賬戶(hù)等功能,這些功能都包含了校驗(yàn)密碼的功能。系統(tǒng)管理員需要系統(tǒng)提供賬戶(hù)管理和報(bào)表生成功能。銀行職員(管理人員)則參與了賬戶(hù)管理中的更新賬戶(hù)的功能。此外,轉(zhuǎn)賬功能可分為銀行內(nèi)轉(zhuǎn)賬和銀行間轉(zhuǎn)賬,我們可將它們?cè)O(shè)計(jì)成三個(gè)用況,其中銀行內(nèi)轉(zhuǎn)賬用況和銀行間轉(zhuǎn)賬用況都繼承了基本轉(zhuǎn)賬用況。據(jù)此分析,得到該系統(tǒng)的用況圖如下圖所示。93.識(shí)別用況93.銀行儲(chǔ)蓄賬戶(hù)管理系統(tǒng)《包含》《包含》《包含》銀行職員(用戶(hù)代理)賬戶(hù)管理銀行間轉(zhuǎn)賬開(kāi)戶(hù)取款銀行內(nèi)轉(zhuǎn)賬注銷(xiāo)存款校驗(yàn)密碼轉(zhuǎn)賬報(bào)表生成其它銀行賬戶(hù)管理系統(tǒng)客戶(hù)系統(tǒng)管理員銀行職員(管理人員)94.銀行儲(chǔ)蓄賬戶(hù)管理系統(tǒng)《包含》《包含》《包含》銀行職員賬戶(hù)管理開(kāi)戶(hù)用況描述用況名稱(chēng):開(kāi)戶(hù)參與的執(zhí)行者:銀行職員(客戶(hù)代理),客戶(hù)前置條件:一個(gè)合法的銀行職員(客戶(hù)代理)已登錄到該系統(tǒng)事件流:1.當(dāng)選擇開(kāi)戶(hù)功能時(shí)用況開(kāi)始2.輸入客戶(hù)信息(姓名、地址、身份證號(hào)等)3.從賬戶(hù)管理系統(tǒng)獲取新的賬號(hào)4.請(qǐng)客戶(hù)輸入密碼5.請(qǐng)客戶(hù)再次輸入密碼6.如果兩次密碼不一致則回到第4步,否則繼續(xù)7.在賬戶(hù)庫(kù)中添加新賬戶(hù)8.打印存折,用況結(jié)束后置條件:在賬戶(hù)庫(kù)中增加了一個(gè)新賬戶(hù),得到一張新存折95.開(kāi)戶(hù)用況描述95.取款用況描述用況名稱(chēng):取款參與的執(zhí)行者:銀行職員(客戶(hù)代理)前置條件:一個(gè)合法的銀行職員(客戶(hù)代理)已登錄到該系統(tǒng)事件流:基本路徑:1.當(dāng)選擇取款功能時(shí)用況開(kāi)始2.當(dāng)輸入客戶(hù)信息(姓名、賬號(hào)等)后a)如果客戶(hù)信息與賬戶(hù)不一致,顯示錯(cuò)誤信息,可以重新輸入或結(jié)束用況b)如果該賬戶(hù)被凍結(jié)(如因掛失而凍結(jié)),顯示凍結(jié)信息并結(jié)束用況3.輸入并校驗(yàn)密碼96.取款用況描述96.4.輸入取款金額,如果該賬戶(hù)的余款小于取款金額,顯示錯(cuò)誤信息,要求重新輸入5.打印取款單,交客戶(hù)簽字6.建立取款事件記錄,更新賬戶(hù)信息7.打印存折,用況結(jié)束可選路徑:1.在第5步客戶(hù)簽字之前的任何時(shí)刻,客戶(hù)可以取消本次取款,用況結(jié)束2.第3步校驗(yàn)密碼時(shí),如發(fā)現(xiàn)密碼不一致,則重新輸入密碼,或用況結(jié)束后置條件:如果取款成功,客戶(hù)賬戶(hù)中的余額被更新(減少),否則余額不變。97.4.輸入取款金額,如果該賬戶(hù)的余款小于取款金額,顯示錯(cuò)誤信息描述取款用況的活動(dòng)圖[客戶(hù)不確認(rèn)][客戶(hù)確認(rèn)][余額≥取款額][未凍結(jié)][不一致][一致][選擇重新輸入][選擇結(jié)束][凍結(jié)][余額<取款額]●··●··打印取款單輸入客戶(hù)信息顯示錯(cuò)誤信息建立取款記錄更新賬戶(hù)信息打印存折顯示錯(cuò)誤信息輸入取款金額輸入并校驗(yàn)密碼顯示凍結(jié)信息●··98.描述取款用況的活動(dòng)圖[客戶(hù)不確認(rèn)][客戶(hù)確認(rèn)][余額≥取款額內(nèi)容摘要面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο蟮姆治龊驮O(shè)計(jì)過(guò)程UML概述用況建模靜態(tài)建模動(dòng)態(tài)建模物理體系結(jié)構(gòu)建模99.內(nèi)容摘要面向?qū)ο蟮幕靖拍?9.靜態(tài)建模
(類(lèi)和對(duì)象建模)
類(lèi)和對(duì)象模型的基本模型元素有類(lèi)、對(duì)象以及它們之間的關(guān)系。系統(tǒng)中的類(lèi)和對(duì)象模型描述了系統(tǒng)的靜態(tài)結(jié)構(gòu),在UML中用類(lèi)圖和對(duì)象圖來(lái)表示。100.靜態(tài)建模
(類(lèi)和對(duì)象建模)類(lèi)和對(duì)象模型的基本模型元類(lèi)圖由系統(tǒng)中使用的類(lèi)以及它們之間的關(guān)系組成。類(lèi)之間的關(guān)系有關(guān)聯(lián)、依賴(lài)、泛化、實(shí)現(xiàn)等。類(lèi)圖是一種靜態(tài)模型,它是其它圖的基礎(chǔ)。一個(gè)系統(tǒng)可以有多張類(lèi)圖,一個(gè)類(lèi)也可出現(xiàn)在幾張類(lèi)圖中。對(duì)象圖是類(lèi)圖的一個(gè)實(shí)例,它描述某一時(shí)刻類(lèi)圖中類(lèi)的特定實(shí)例以及這些實(shí)例之間的特定鏈接。對(duì)象圖使用了與類(lèi)圖相同的符號(hào),只是在對(duì)象名下附加下劃線(xiàn),對(duì)象名后可接以冒號(hào)和類(lèi)名,即
object-name:class-name
101.類(lèi)圖由系統(tǒng)中使用的類(lèi)以及它們之間的關(guān)系組成。類(lèi)之間的關(guān)系有關(guān)
對(duì)象名:類(lèi)名屬性名=值操作類(lèi)名屬性名:類(lèi)型操作聚集組合關(guān)聯(lián)泛化依賴(lài)實(shí)現(xiàn)102.對(duì)象名:類(lèi)名屬性名=值操作類(lèi)名屬性名:類(lèi)型操作聚集類(lèi)圖和對(duì)象圖實(shí)例xL3對(duì)象圖L4P2lineX1:realY1:realX2:realY2:realpointX:realY:realL1:lineX1=10Y1=10X2=-10Y2=-10L2:lineL3:lineX1=10Y1=5X2=-10Y2=-5L4:lineX1=9Y1=5X2=9Y2=3X1=-10Y1=10X2=10Y2=-10P1:pointX=0Y=0P2:pointX=9Y=4。5P1L1yL2類(lèi)圖相交2..*0..*103.類(lèi)圖和對(duì)象圖實(shí)例xL3對(duì)象圖L4P2lineX1:realY確定類(lèi)1.
標(biāo)識(shí)類(lèi)這里介紹一種類(lèi)—責(zé)任—協(xié)作者(class—responsibility—collaborator,簡(jiǎn)稱(chēng)CRC)技術(shù)。CRC實(shí)際上是一組表示類(lèi)的索引卡片,每張卡片分成三部分,它們分別描述類(lèi)名、類(lèi)的責(zé)任和類(lèi)的協(xié)作者。類(lèi)名:
協(xié)作者:
責(zé)任:
104.確定類(lèi)1.
標(biāo)識(shí)類(lèi)類(lèi)名:協(xié)作者:責(zé)任:104.(1)標(biāo)識(shí)潛在的對(duì)象類(lèi)通常陳述中的名詞或名詞短語(yǔ)是可能的潛在對(duì)象,它們以不同的形式展示出來(lái),如:1)
外部實(shí)體(如,其它系統(tǒng)、設(shè)備、人員),他們生產(chǎn)或消費(fèi)計(jì)算機(jī)系統(tǒng)所使用的信息;2)
物件(如,報(bào)告、顯示、信函、信號(hào)),它們是問(wèn)題信息域的一部分;3)
發(fā)生的事情或事件(如,性能改變或完成一組機(jī)器人移動(dòng)動(dòng)作),它們出現(xiàn)在系統(tǒng)運(yùn)行的環(huán)境中;105.(1)標(biāo)識(shí)潛在的對(duì)象類(lèi)105.4)
角色(如:管理者、工程師、銷(xiāo)售員),他們由與系統(tǒng)交互的人扮演;5)
組織單位(如:部門(mén)、小組、小隊(duì)),他們與一個(gè)應(yīng)用有關(guān);6)
場(chǎng)所(如:制造場(chǎng)所、裝載碼頭),它們建立問(wèn)題和系統(tǒng)所有功能的環(huán)境;7)
構(gòu)造物(如,四輪交通工具、計(jì)算機(jī)),它們定義一類(lèi)對(duì)象,或者定義對(duì)象的相關(guān)類(lèi)。106.4)
角色(如:管理者、工程師、銷(xiāo)售員),他們由與系統(tǒng)交互的回答下列問(wèn)題來(lái)識(shí)別潛在對(duì)象:是否有要儲(chǔ)存、轉(zhuǎn)換、分析或處理的信息?是否有外部系統(tǒng)?是否有模式(pattern)、類(lèi)庫(kù)和構(gòu)件等?是否有系統(tǒng)必須處理的設(shè)備?是否有組織部分(organizationalparts)?業(yè)務(wù)中的執(zhí)行者扮演什么角色?這些角色可以看作類(lèi),如客戶(hù)、操作員等。107.回答下列問(wèn)題來(lái)識(shí)別潛在對(duì)象:107.(2)篩選對(duì)象類(lèi),確定最終對(duì)象類(lèi)我們可以用以下選擇特征來(lái)確定最終的對(duì)象:1)
保留的信息:僅當(dāng)必須記住有關(guān)潛在對(duì)象的信息,系統(tǒng)才能運(yùn)作時(shí),則該潛在對(duì)象在分析階段是有用的;2)
需要的服務(wù):潛在對(duì)象必須擁有一組可標(biāo)識(shí)的操作,它們可以按某種方式修改對(duì)象屬性的值;3)
多個(gè)屬性:在分析階段,關(guān)注點(diǎn)應(yīng)該是“較大的”信息(僅具有單個(gè)屬性的對(duì)象在設(shè)計(jì)時(shí)可能有用,但在分析階段,最好把它表示為另一對(duì)象的屬性);108.(2)篩選對(duì)象類(lèi),確定最終對(duì)象類(lèi)108.4)
公共屬性:可以為潛在的對(duì)象定義一組屬性,這些屬性適用于該類(lèi)的所有實(shí)例;5)
公共操作:可以為潛在的對(duì)象定義一組操作,這些操作適用于該類(lèi)的所有實(shí)例;6)必要的需求:出現(xiàn)在問(wèn)題空間中的外部實(shí)體以及對(duì)系統(tǒng)的任何解決方案的實(shí)施都是必要的生產(chǎn)或消費(fèi)信息,它們幾乎總是定義為需求模型中的類(lèi)。109.4)
公共屬性:可以為潛在的對(duì)象定義一組屬性,這些屬性適用于
對(duì)象和類(lèi)還可以按以下特征進(jìn)行分類(lèi):1)
確切性(tangibility):類(lèi)表示了確切的事物(如,鍵盤(pán)或傳感器),還是表示了抽象的信息(如,預(yù)期的輸出)?2)
包含性(inclusiveness):類(lèi)是原子的(即不包含任何其它類(lèi)),還是聚合的(至少包含一個(gè)嵌套的對(duì)象)?3)
順序性(sequentiality):類(lèi)是并發(fā)的(即,擁有自己的控制線(xiàn)程),還是順序的(被外部的資源控制)?110.對(duì)象和類(lèi)還可以按以下特征進(jìn)行分類(lèi):110.4)
持久性(persistence):類(lèi)是短暫的(即,它在程序運(yùn)行期間被創(chuàng)建和刪除)、臨時(shí)的(它在程序運(yùn)行期間被創(chuàng)建,在程序終止時(shí)被刪除)、還是永久的(它存放在數(shù)據(jù)庫(kù)中)?永久對(duì)象(persistentobject):其生存周期可以超越程序的執(zhí)行時(shí)間而長(zhǎng)期存在的對(duì)象。5)
完整性(integrity):類(lèi)是易被侵害的(即,它不防衛(wèi)其資源受外界的影響),還是受保護(hù)的(該類(lèi)強(qiáng)制控制對(duì)其資源的訪問(wèn))。基于上述分類(lèi),CRC卡的內(nèi)容可以擴(kuò)充,以包含類(lèi)的類(lèi)型和特征。111.4)
持久性(persistence):類(lèi)是短暫的(即,它在類(lèi)的類(lèi)型:(如:設(shè)備,角色,場(chǎng)所,……)
類(lèi)的特征:(如:確切的,原子的,并發(fā)的,……)
協(xié)作者:
責(zé)任:
類(lèi)名:
CRC卡112.類(lèi)的類(lèi)型:(如:設(shè)備,角色,場(chǎng)所,……)類(lèi)的特征:(如:確2.標(biāo)識(shí)責(zé)任責(zé)任是與類(lèi)相關(guān)的屬性和操作,簡(jiǎn)單地說(shuō),責(zé)任是類(lèi)所知道的或要做的任何事情。(1)
標(biāo)識(shí)屬性屬性表示類(lèi)的穩(wěn)定特征,即為了完成客戶(hù)規(guī)定的目標(biāo)所必須保存的類(lèi)的信息,一般可以從問(wèn)題陳述中提取出或通過(guò)對(duì)類(lèi)的理解而辨識(shí)出屬性。分析員可以再次研究問(wèn)題陳述,選擇那些應(yīng)屬于該對(duì)象的內(nèi)容,同時(shí)對(duì)每個(gè)對(duì)象回答下列問(wèn)題:“在當(dāng)前的問(wèn)題范圍內(nèi),什么數(shù)據(jù)項(xiàng)(復(fù)合的和/或基本的)完整地定義了該對(duì)象?”113.2.標(biāo)識(shí)責(zé)任113.(2)定義操作操作定義了對(duì)象的行為并以某種方式修改對(duì)象的屬性值。操作可以通過(guò)對(duì)系統(tǒng)的過(guò)程敘述的分析提取出來(lái),通常敘述中的動(dòng)詞可作為候選的操作。類(lèi)所選擇的每個(gè)操作展示了類(lèi)的某種行為。操作大體可分為三類(lèi):以某種方式操縱數(shù)據(jù)的操作(如,增加、刪除、重新格式化、選擇);完成某種計(jì)算的操作;為控制事件的發(fā)生而監(jiān)控對(duì)象的操作。114.(2)定義操作114.
3.標(biāo)識(shí)協(xié)作者一個(gè)類(lèi)可以用它自己的操作去操縱它自己的屬性,從而完成某一特定的責(zé)任,一個(gè)類(lèi)也可和其它類(lèi)協(xié)作來(lái)完成某個(gè)責(zé)任。如果一個(gè)對(duì)象為了完成某個(gè)責(zé)任需要向其它對(duì)象發(fā)送消息,則我們說(shuō)該對(duì)象和另一對(duì)象協(xié)作。協(xié)作實(shí)際上標(biāo)識(shí)了類(lèi)間的關(guān)系。為了幫助標(biāo)識(shí)協(xié)作者,可以檢索類(lèi)間的類(lèi)屬關(guān)系。如果兩個(gè)類(lèi)具有整體與部分關(guān)系(一個(gè)對(duì)象是另一個(gè)對(duì)象的一部分),或者一個(gè)類(lèi)必須從另一個(gè)類(lèi)獲取信息,或者一個(gè)類(lèi)依賴(lài)于(depends-upon)另一個(gè)類(lèi),則它們間往往有協(xié)作關(guān)系。115.3.標(biāo)識(shí)協(xié)作者115.4.復(fù)審CRC卡在填好所有CRC卡后,應(yīng)對(duì)它進(jìn)行復(fù)審。復(fù)審應(yīng)由客戶(hù)和軟件分析員參加,復(fù)審方法如下:1)
參加復(fù)審的人,每人拿CRC卡片的一個(gè)子集。注意,有協(xié)作關(guān)系的卡片要分開(kāi),即,沒(méi)有一個(gè)人持有兩張有協(xié)作關(guān)系的卡片。2)
將所有用況/場(chǎng)景分類(lèi)。3)復(fù)審負(fù)責(zé)人仔細(xì)閱讀用況,當(dāng)讀到一個(gè)命名的對(duì)象時(shí),將令牌(token)傳送給持有對(duì)應(yīng)類(lèi)的卡片的人員。116.4.復(fù)審CRC卡116.4)收到令牌的類(lèi)卡片持有者要描述卡片上記錄的責(zé)任,復(fù)審小組將確定該類(lèi)的一個(gè)或多個(gè)責(zé)任是否滿(mǎn)足用況的需求。當(dāng)某個(gè)責(zé)任需要協(xié)作時(shí),將令牌傳給協(xié)作者,并重復(fù)4)。5)
如果卡片上的責(zé)任和協(xié)作不能適應(yīng)用況,則需對(duì)卡片進(jìn)行修改,這可能導(dǎo)致定義新的類(lèi),或在現(xiàn)有的卡片上刻畫(huà)新的或修正的責(zé)任及協(xié)作者。這種做法持續(xù)至所有的用況都完成為止。117.4)收到令牌的類(lèi)卡片持有者要描述卡片上記錄的責(zé)任,復(fù)審小組UML對(duì)屬性的描述UML中,描述一個(gè)屬性的語(yǔ)法如下:visibilityopt/optattribute-name
:type
optmultiplicityopt
=initial-value
opt
{property-string}
opt其中帶下標(biāo)opt或
opt的部分表示該部分是任選的。visibility(可見(jiàn)性):表示該屬性在哪個(gè)范圍內(nèi)可見(jiàn)(即可使用),見(jiàn)下表。118.UML對(duì)屬性的描述118.符號(hào)種類(lèi)語(yǔ)義+Public(公共的)任何能看到這個(gè)類(lèi)的類(lèi)都能看到該屬性#Protected(受保護(hù)的)這個(gè)類(lèi)或者它的任何子孫類(lèi)都能看到該屬性
Private(私有的)只有這個(gè)類(lèi)自身能看到該屬性
Package(包的)在同一個(gè)包中的任何類(lèi)能看到該屬性可見(jiàn)性119.符號(hào)種類(lèi)語(yǔ)義+Public任何能看到這個(gè)類(lèi)的類(lèi)都能看到該屬性attribute-name:表示屬性名。type(類(lèi)型):用來(lái)指明屬性名的類(lèi)型。multiplicity(重?cái)?shù)):用來(lái)指出該屬性可能的值的個(gè)數(shù)以及它們的排列次序和唯一性。值的個(gè)數(shù)寫(xiě)在方括號(hào)([])中,其形式是:[minimum..maximum]。maximum可以是“*”,表示“無(wú)限”。當(dāng)值的個(gè)數(shù)是單一值(如值的個(gè)數(shù)是3)時(shí),可寫(xiě)成[3..3]或簡(jiǎn)寫(xiě)成[3]。典型的寫(xiě)法有:[0..1],[1](表示[1..1]),[*](表示[0..*]),[1..*],[1..3]。當(dāng)重?cái)?shù)缺省時(shí),隱含表示重?cái)?shù)為1。當(dāng)一個(gè)屬性有多個(gè)值時(shí),可在值的個(gè)數(shù)后面指明值元素的排列次序和唯一性,排列次序和唯一性寫(xiě)在花括號(hào)({})中,可使用的關(guān)鍵字如下表所示,其默認(rèn)值是set,即無(wú)序且值元素唯一。120.attribute-name:表示屬性名。120.關(guān)鍵字排列次序和唯一性set無(wú)序,值元素唯一bag無(wú)序,值元素不唯一orderedset有序,值元素唯一list(orsequence)有序,值元素不唯一121.關(guān)鍵字排列次序和唯一性set無(wú)序,值元素唯一bag無(wú)序,值initial-value(初值):在創(chuàng)建一個(gè)類(lèi)的實(shí)例對(duì)象時(shí),應(yīng)對(duì)其屬性賦值,如果類(lèi)中對(duì)某屬性定義了初值,那么該初值可作為創(chuàng)建對(duì)象時(shí)該屬性的默認(rèn)值。property-string(特征字符串):用來(lái)明確地指明該屬性可能的候選值,如{紅,黃,綠}指出該屬性可枚舉的值只能是紅、黃、綠。122.initial-value(初值):在創(chuàng)建一個(gè)類(lèi)的實(shí)例對(duì)象時(shí)屬性還可以定義為類(lèi)屬性(classattribute,C++或Java中稱(chēng)為靜態(tài)屬性—staticattibute),表示被這個(gè)類(lèi)的所有實(shí)例對(duì)象共享該屬性的值。類(lèi)屬性是這個(gè)類(lèi)的名字空間中的全局變量。類(lèi)屬性用下劃線(xiàn)來(lái)指明。maxCount:Integer=0jobID:Integercreate(){jobID=maxCount++}schedule()Job類(lèi)屬性實(shí)例屬性類(lèi)操作實(shí)例操作123.屬性還可以定義為類(lèi)屬性(classattribute,C+“發(fā)票”類(lèi)的屬性
Invoice+amount:Real+date:Date=Currentdate+customer:String+line:record[1..5]{set}-administrator:String=“unspecified”-maxCount:Integer=0-numberofinvoices:Integer+status:Status=unpaid{unpaid,paid}124.“發(fā)票”類(lèi)的屬性UML對(duì)操作的描述UML中描述一個(gè)操作的語(yǔ)法如下:visibilityoptoperating-name(parameter-list)
:return-type
opt
{property-string}
opt
操作可見(jiàn)性的含義與屬性中的含義相同。參數(shù)表是用逗號(hào)分隔的形式參數(shù)序列,描述一個(gè)參數(shù)的語(yǔ)法如下:directionoptparameter-name:type
multiplicity
opt
=default-value
opt
其中:direction(方向):用來(lái)指明參數(shù)信息流的方向。125.UML對(duì)操作的描述125.方向的取值關(guān)鍵字語(yǔ)義in傳遞值的輸入?yún)?shù),該參數(shù)的改變對(duì)調(diào)用者是無(wú)效的out輸出參數(shù),沒(méi)有輸入值,其最終值對(duì)調(diào)用者是有效的inout一個(gè)可以修改的輸入?yún)?shù),其最終值對(duì)調(diào)用者是有效的return調(diào)用的返回值,該值對(duì)調(diào)用者是有效的,語(yǔ)義上與out參數(shù)沒(méi)有不同,但在一串表達(dá)式中使用時(shí)return是有效的126.方向的取值關(guān)鍵字語(yǔ)義in傳遞值的輸入?yún)?shù),該參數(shù)的改變對(duì)調(diào)type和multiplicity的含義與屬性中的含義相同,default–value(默認(rèn)值)是在操作的調(diào)用者未提供參數(shù)時(shí),用它作為該參數(shù)的值。類(lèi)也可以定義類(lèi)操作(classoperation)。通常操作是在該類(lèi)的對(duì)象實(shí)例上被調(diào)用的,而類(lèi)操作可以在沒(méi)有對(duì)象實(shí)例的情況下被調(diào)用,但此時(shí)只允許訪問(wèn)類(lèi)屬性。127.type和multiplicity的含義與屬性中的含義相同F(xiàn)igureSize:SizePos:Position+draw()+resize(percentX:Integer=25,percentY:Integer=25)+returnPos():Position128.Figure+draw()128.類(lèi)之間的關(guān)系關(guān)系功能符號(hào)關(guān)聯(lián)類(lèi)實(shí)例間連接的描述依賴(lài)二個(gè)模型元素之間的一種關(guān)系泛化更特殊描述與更一般描述之間的一種關(guān)系,用于繼承和多態(tài)性類(lèi)型聲明實(shí)現(xiàn)規(guī)約(specification)與它的實(shí)現(xiàn)之間的關(guān)系129.類(lèi)之間的關(guān)系關(guān)系功能符號(hào)關(guān)聯(lián)類(lèi)實(shí)例間連接的描述依賴(lài)二個(gè)1.
關(guān)聯(lián)關(guān)聯(lián)描述了系統(tǒng)中對(duì)象之間或其它實(shí)例之間的連接。關(guān)聯(lián)的種類(lèi)主要有二元關(guān)聯(lián),多元關(guān)聯(lián),受限關(guān)聯(lián),聚集(aggregation)和組合(composition)。130.1.
關(guān)聯(lián)130.(1)二元關(guān)聯(lián)二元關(guān)聯(lián)表示為在兩個(gè)類(lèi)之間用一條直線(xiàn)連接,直線(xiàn)上可寫(xiě)上關(guān)聯(lián)名。有首都國(guó)家城市工作于公司員工雇傭關(guān)聯(lián)通常是雙向的131.(1)二元關(guān)聯(lián)有首都國(guó)家城市工作于公司員工雇傭關(guān)聯(lián)通常是關(guān)聯(lián)的兩端可加上重?cái)?shù)(multiplicity),表示該類(lèi)有多少個(gè)對(duì)象可與對(duì)方的一個(gè)對(duì)象關(guān)聯(lián)駕駛?cè)宿I車(chē)駕駛員公車(chē)工作于公司員工雇傭*1工作于公司員工雇傭**關(guān)聯(lián)的兩端還可加上角色名(role)132.關(guān)聯(lián)的兩端可加上重?cái)?shù)(multiplicity),表示該類(lèi)允許一個(gè)類(lèi)與自身關(guān)聯(lián)*雇傭*工作于工人1..*老板0..1管理公司員工雇傭關(guān)聯(lián)的鏈公司A張三公司B李四公司A王五公司C張三鏈?zhǔn)顷P(guān)聯(lián)的實(shí)例133.允許一個(gè)類(lèi)與自身關(guān)聯(lián)*雇傭一個(gè)類(lèi)的對(duì)象在不同的關(guān)聯(lián)中扮演不同的角色保險(xiǎn)公司人保險(xiǎn)合同保險(xiǎn)單0..11表示為表達(dá)0..*1有涉及婚姻丈夫妻子0..*1..*涉及有保險(xiǎn)客戶(hù)134.一個(gè)類(lèi)的對(duì)象在不同的關(guān)聯(lián)中扮演不同的角色保險(xiǎn)公司人保險(xiǎn)合同保(2)多元關(guān)聯(lián)三個(gè)或三個(gè)以上的類(lèi)之間可以互相關(guān)聯(lián)項(xiàng)目程序語(yǔ)言程序員135.(2)多元關(guān)聯(lián)項(xiàng)目程序語(yǔ)言程序員135.CAD程序:項(xiàng)目C:語(yǔ)言記賬系統(tǒng):項(xiàng)目COBOL:語(yǔ)言張三:開(kāi)發(fā)人員三重關(guān)聯(lián)對(duì)象圖136.CAD程序:項(xiàng)目C:語(yǔ)言記賬系統(tǒng):項(xiàng)目COBOL(3)受限關(guān)聯(lián)(qualifiedassociation):受限關(guān)聯(lián)用于一對(duì)多或多對(duì)多的關(guān)聯(lián)。限定符(qualifier)用來(lái)區(qū)分關(guān)聯(lián)“多”端的對(duì)象集合,它指明了在關(guān)聯(lián)“多”端的某個(gè)特殊對(duì)象
目錄文件0..*{ordered}有序關(guān)聯(lián)目錄文件文件名受限關(guān)聯(lián)137.(3)受限關(guān)聯(lián)(qualifiedassociation)(4)聚集和組合
聚集(aggregation)是表示整體一部分關(guān)系的一種關(guān)聯(lián),它的“部分”對(duì)象可以是任意“整體”對(duì)象的一部分。聚集成員**組個(gè)人138.(4)聚集和組合聚集成員*組合(composition):組合是一種更強(qiáng)形式的關(guān)聯(lián),代表整體的組合對(duì)象有管理它的部分對(duì)象的特有責(zé)任,如部分對(duì)象的分配和解除分配。組合關(guān)聯(lián)具有強(qiáng)的物主身份,即“整體”對(duì)象擁有“部分”對(duì)象,“部分”對(duì)象生存在“整體”對(duì)象中。*窗口正文對(duì)話(huà)框按鈕菜單***139.組合(composition):組合是一種更強(qiáng)形式的關(guān)聯(lián),代(5)關(guān)聯(lián)類(lèi):UML中可以把關(guān)聯(lián)定義成類(lèi),該關(guān)聯(lián)的每個(gè)鏈都是這個(gè)類(lèi)的實(shí)例關(guān)聯(lián)類(lèi)用戶(hù)工作站授權(quán)優(yōu)先級(jí)特權(quán)開(kāi)始一個(gè)時(shí)間片*授權(quán)*140.(5)關(guān)聯(lián)類(lèi):UML中可以把關(guān)聯(lián)定義成類(lèi),該關(guān)聯(lián)的每個(gè)鏈都(6)導(dǎo)航性(navigability)導(dǎo)航*選課*學(xué)生課程(a)*選課*學(xué)生課程(c)*選課*學(xué)生課程(b)141.(6)導(dǎo)航性(navigability)導(dǎo)航*導(dǎo)航性符號(hào)明確的含義隱含的含義未指明雙向可導(dǎo)航右邊可導(dǎo)航左邊未指明只有右邊可導(dǎo)航只有右邊可導(dǎo)航只有右邊可導(dǎo)航右邊未指明左邊不可導(dǎo)航只有右邊可導(dǎo)航雙向可導(dǎo)航雙向可導(dǎo)航雙向不可導(dǎo)航雙向不可導(dǎo)航
142.導(dǎo)航性符號(hào)明確的含義隱含的含義未指明雙向可導(dǎo)航右邊可導(dǎo)航只
泛化
泛化指出類(lèi)間的“一般—特殊關(guān)系”(is-a)一般類(lèi)定義了它的特殊類(lèi)的公共屬性和操作對(duì)一般類(lèi)擴(kuò)展一些屬性和/或操作后,可以特化(specialize)成特殊類(lèi)一般類(lèi)是特殊類(lèi)的父類(lèi),特殊類(lèi)是一般類(lèi)的子類(lèi)特殊類(lèi)可以繼承一般類(lèi)的屬性和操作子類(lèi)可以定義自己的屬性和操作,也可重新定義父類(lèi)中的操作,但重新定義的操作必須與父類(lèi)具有相同的操作特征(signature)143.泛化143.
顯示計(jì)算面積四邊形泛化和繼承
顯示六邊形
顯示三角形
多邊形顯示邊數(shù)頂角座標(biāo)
長(zhǎng)寬矩形計(jì)算面積144.顯示四邊形泛化和繼承顯示六邊形顯示三角形多邊泛化是一種分類(lèi)學(xué)關(guān)系,一個(gè)一般類(lèi)可以從不同的維或方面將其特化(specialization)成不同的特殊類(lèi)集合,用一個(gè)類(lèi)元(用作分類(lèi)符)來(lái)表示一個(gè)維或方面,由一個(gè)類(lèi)元特化而成的特殊類(lèi)組成一個(gè)泛化集(generalizationset)。在泛化集中可對(duì)其元素應(yīng)用約束,在UML中提供以下約束,見(jiàn)下表。145.泛化是一種分類(lèi)學(xué)關(guān)系,一個(gè)一般類(lèi)可以從不同的維或方面將其特化泛化集的約束符號(hào)含義disjoint(不相交)該類(lèi)元在泛化集中是互斥的overlapping(交迭)該類(lèi)元在泛化集中不是互斥的complete(完全的)該類(lèi)元在泛化集中完全覆蓋特化的維incomplete(不完全的)該類(lèi)元在泛化集中不完全覆蓋特化的維146.泛化集的約束符號(hào)含義disjoint(不相交)該類(lèi)元在泛化集泛化集的約束醫(yī)生人男人工人女人教師{overlapping,incomplete}{disjoint,complete}:職業(yè):職業(yè):職業(yè):性別:性別147.泛化集的約束醫(yī)生人男人工人女人教師:職業(yè):職業(yè):職業(yè):性別3.實(shí)現(xiàn):實(shí)現(xiàn)關(guān)系將一個(gè)模型元素(如類(lèi))連接到另一個(gè)模型元素(如接口),后者(如接口)是行為的規(guī)約(specification),而不是結(jié)構(gòu),前者(如類(lèi))必須至少支持(通過(guò)繼承或直接聲明)后者的所有操作。可以認(rèn)為前者是后者的實(shí)現(xiàn)。泛化和實(shí)現(xiàn)都可以將一般描述與具體描述聯(lián)系起來(lái)。其區(qū)別是,泛化是同一語(yǔ)義層上的元素之間的連接,通常在同一模型內(nèi);而實(shí)現(xiàn)是不同語(yǔ)義層中的元素之間的連接,它通常建立在不同的模型內(nèi),如設(shè)計(jì)類(lèi)到分析類(lèi)是一種實(shí)現(xiàn)關(guān)系。148.3.實(shí)現(xiàn):實(shí)現(xiàn)關(guān)系將一個(gè)模型元素(如類(lèi))連接到另一個(gè)模型元實(shí)現(xiàn)關(guān)系《interface》choiceBlocksetDefault(choice:Choice)getChoice():ChoiceRadioButtonArraysetDefault(choice:Button)getChoice():ButtonPopUpMenusetDefault(choice:String)getCho
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件銷(xiāo)售服務(wù)合同
- 選修和諧勞動(dòng)關(guān)系構(gòu)建及勞動(dòng)合同法解讀自測(cè)題
- 2025年廠房租賃及節(jié)能改造合同文本3篇
- 2024至2030年不處理膠輥?lái)?xiàng)目投資價(jià)值分析報(bào)告
- 物流運(yùn)輸合同非常詳盡
- 養(yǎng)豬土地流轉(zhuǎn)合同
- 2024年金屬軟接頭項(xiàng)目可行性研究報(bào)告
- 2025版級(jí)城市生活垃圾處理設(shè)施采購(gòu)詢(xún)價(jià)合同3篇
- 2025百貨行業(yè)定制化產(chǎn)品銷(xiāo)售合作協(xié)議2篇
- 2024年羊毛密封制品項(xiàng)目可行性研究報(bào)告
- 2024屆廣東省深圳市羅湖區(qū)中考適應(yīng)性考試化學(xué)試題含解析
- 醫(yī)保信息系統(tǒng)管理制度范文
- 售后響應(yīng)時(shí)間保障措施
- 《工業(yè)數(shù)據(jù)采集技術(shù)》課程標(biāo)準(zhǔn)
- 智慧農(nóng)業(yè)的無(wú)人機(jī)與遙感技術(shù)
- 河北省石家莊市2023-2024學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量檢測(cè)生物試題(含答案解析)
- 循證護(hù)理在骨科中的護(hù)理
- 心肺復(fù)蘇應(yīng)急演練腳本
- 華南理工大學(xué)2022年622物理化學(xué)考研真題(含答案)
- 抖音認(rèn)證承諾函
- 建筑垃圾安全生產(chǎn)管理制度范本
評(píng)論
0/150
提交評(píng)論