面向?qū)ο蠓治龇椒╛第1頁
面向?qū)ο蠓治龇椒╛第2頁
面向?qū)ο蠓治龇椒╛第3頁
面向?qū)ο蠓治龇椒╛第4頁
面向?qū)ο蠓治龇椒╛第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

面向?qū)ο蟮姆治鼋y(tǒng)一方法統(tǒng)一方法既統(tǒng)一建模語言UML(UnifyModeingLanguage)由Rumbaugh

、Booch

、Yourdon

方法本來就存在一些共性的東西,統(tǒng)一建模語言是集眾家之所長演化發(fā)展起來的行業(yè)標(biāo)準(zhǔn)。是目前流行的方法,并有相應(yīng)可視化工具的支持。UML進行OOA的特點是以角色+案例(Actor+UseCase)為驅(qū)動。主要內(nèi)容:

UML的發(fā)展史及應(yīng)用概況統(tǒng)一的面向?qū)ο蠓治龅倪^程建立用例模型發(fā)現(xiàn)和定義對象類識別對象的外部聯(lián)系1.UML的發(fā)展史及應(yīng)用概況產(chǎn)生UML的幾個里程碑⑴面向?qū)ο蟮慕7椒ㄊ加?0世紀(jì)80年代初期,大量有決定意義的思想形成于20世紀(jì)90年代中期,這期間涌現(xiàn)出一些重要方法,包括Booch、OMT、Shlaer-Mellor、Fusion、OOSE和Coad-Yourdon等。⑵1994年10月,JimRumbaugh和GradyBooch開始共同合作,于1995年10月提出“統(tǒng)一方法(UnifiedMethod)”0.8版本。隨后,Ivar

Jacobson也加入其中,同時將OOSE思想融合進來,于1996年6月發(fā)布“統(tǒng)一建模語言(UnifiedModelingLanguage,UML)”0.9版本。⑶1997年1月,UML1.0版本被提交給OMG組織,申請作為一種標(biāo)準(zhǔn)建模語言。在此期間,一些重要的軟件開發(fā)商和系統(tǒng)集成商成立了一個UML伙伴組織,如DigitalEquipmentCorporation、HP、IBM、Microsoft、Oracle、Rational等,它們積極地使用UML并提出反饋意見,于1997年7月將UML的修改版(1.1版本)再次提交OMG,1997年11月,UML1.1版本正式被OMG采納作為業(yè)界標(biāo)準(zhǔn)。⑷目前,UML已經(jīng)提交國際標(biāo)準(zhǔn)化組織(ISO)進行國際標(biāo)準(zhǔn)化。1.UML的發(fā)展史及應(yīng)用概況UML發(fā)展史圖1.UML的發(fā)展史及應(yīng)用概況UML應(yīng)用

UML是一種直觀化、明確化、構(gòu)建和文檔化軟件系統(tǒng)產(chǎn)物的通用可視化建模語言,從企業(yè)信息系統(tǒng)到基于Web的分布式應(yīng)用,甚至嚴(yán)格的實時嵌入式系統(tǒng)都適合于用UML來建模。它是一種富有表達(dá)力的語言,可以描述開發(fā)所需要的各種視圖,并以此為基礎(chǔ)組建系統(tǒng)。1.UML的發(fā)展史及應(yīng)用概況

UML作為一種強有力的系統(tǒng)建模語言,具有創(chuàng)建系統(tǒng)的靜態(tài)結(jié)構(gòu)和動態(tài)行為等多種模型的能力,其應(yīng)用范圍十分廣泛,它可以用于商業(yè)建模和軟件開發(fā)建模的各個階段,也可以用于其他類型的系統(tǒng)。UML結(jié)合了國際上面向?qū)ο箜椖康某晒?jīng)驗,主要適合于大型復(fù)雜系統(tǒng)的開發(fā),其使用要求如下:(1)支持用例驅(qū)動

用例成為系統(tǒng)分析、設(shè)計、測試、編寫文檔的基礎(chǔ)。(2)以體系結(jié)構(gòu)為中心

以系統(tǒng)的體系結(jié)構(gòu)為核心,在開發(fā)過程中對系統(tǒng)進行抽象、構(gòu)造、管理和改進。(3)遵循迭代的或增量的開發(fā)過程(RUP)

這種開發(fā)過程使軟件開發(fā)人員漸進地開發(fā)和逐步完善軟件系統(tǒng),其每一次迭代都產(chǎn)生比上一次發(fā)布有所改善的新發(fā)布,而每一次發(fā)布都努力處理和降低對項目成功影響最為顯著的風(fēng)險。2.統(tǒng)一的面向?qū)ο蠓治鲞^程2.1問題域分析

分析應(yīng)用領(lǐng)域的業(yè)務(wù)范圍、業(yè)務(wù)規(guī)則和業(yè)務(wù)處理過程,確定系統(tǒng)的責(zé)任、范圍和邊界,確定系統(tǒng)的需求。在分析中,需要著重對系統(tǒng)與外部的用戶和其他系統(tǒng)的交互進行分析,確定交互的內(nèi)容、步驟和順序。需求分析采用Actor+UseCase來建立模型。2.統(tǒng)一的面向?qū)ο蠓治鲞^程2.2發(fā)現(xiàn)和定義對象與類

識別對象和類,確定它們的內(nèi)部特征,即屬性和操作。這是一個從現(xiàn)實世界到概念模型的抽象過程,是認(rèn)識從特殊到一般的提升過程。

抽象是面向?qū)ο蠓治龅幕驹瓌t,系統(tǒng)分析員不必了解問題域中繁雜的事物和現(xiàn)象的所有方面,只需研究與系統(tǒng)目標(biāo)有關(guān)的事物及其本質(zhì)特性,并且舍棄個體事物的細(xì)節(jié)差異,抽取其共同的特征而獲得有關(guān)事物的概念,從而發(fā)現(xiàn)對象和類。2.統(tǒng)一的面向?qū)ο蠓治鲞^程2.3識別對象的外部聯(lián)系

在發(fā)現(xiàn)和定義對象與類的過程中,需要同時識別對象與類、類與類之間的各種外部聯(lián)系,即結(jié)構(gòu)性的靜態(tài)聯(lián)系和行為性的動態(tài)聯(lián)系,包括一般與特殊、整體與部分、實例連接、消息連接等聯(lián)系。

對象和類是現(xiàn)實世界中事物的抽象,它們之間的聯(lián)系要從分析現(xiàn)實世界事物的各種真實聯(lián)系中獲得。2.統(tǒng)一的面向?qū)ο蠓治鲞^程2.4建立系統(tǒng)的靜態(tài)結(jié)構(gòu)模型

分析系統(tǒng)的行為,建立系統(tǒng)的靜態(tài)結(jié)構(gòu)模型,并將其用圖形和文字說明表示出來,如繪制類圖、對象圖、系統(tǒng)與子系統(tǒng)結(jié)構(gòu)圖等,編制相應(yīng)的說明文檔。

2.統(tǒng)一的面向?qū)ο蠓治鲞^程2.5建立系統(tǒng)的動態(tài)結(jié)構(gòu)模型

分析系統(tǒng)的行為,建立系統(tǒng)的動態(tài)行為模型,并將其用圖形和文字說明表示出來,如交互圖、活動圖、狀態(tài)圖等,編制相應(yīng)的說明文檔。

現(xiàn)實世界中事物的行為是極其復(fù)雜的,需要從中抽象出對建立系統(tǒng)模型有意義的行為。在分析中需要控制系統(tǒng)行為的復(fù)雜性,注意確定行為的歸屬和作用范圍,確定事物之間的行為依賴關(guān)系,區(qū)分主動與被動,認(rèn)識并發(fā)行為和狀態(tài)對行為的影響。系統(tǒng)的靜態(tài)結(jié)構(gòu)模型和動態(tài)行為模型、必要的需求分析說明書、系統(tǒng)分析說明書等一起構(gòu)成了系統(tǒng)的分析模型,這是系統(tǒng)分析活動的成果,成為下一步系統(tǒng)設(shè)計的基礎(chǔ)。3.建立用例模型3.1用例模型的用途

用例模型在系統(tǒng)建模過程中是十分重要的,它影響著其他視圖的建立和系統(tǒng)的實現(xiàn)。對不同的人員來說,用例模型具有不同的用處:客戶使用它,詳細(xì)說明系統(tǒng)應(yīng)有的功能,并描述系統(tǒng)的使用方法;開發(fā)人員使用它,有助于理解系統(tǒng)的需求,為后續(xù)階段的工作(如分析、設(shè)計和實現(xiàn))奠定基礎(chǔ);系統(tǒng)集成和測試人員使用它,驗證最終實現(xiàn)的系統(tǒng)是否與用例模型說明的功能一致;文檔人員使用它,為編寫用戶手冊提供參考。3.建立用例模型3.2用例圖用例圖描述系統(tǒng)外部的執(zhí)行者(Actor)與系統(tǒng)的用例(UseCase)之間的某種聯(lián)系。所謂用例是指對系統(tǒng)提供的功能(或稱系統(tǒng)的用途)的一種描述;執(zhí)行者是那些可能使用這些用例的人或外部系統(tǒng);用例圖著重于從系統(tǒng)外部執(zhí)行者的角度來描述系統(tǒng)需要提供哪些功能,并且指明了這些功能的執(zhí)行者是誰;用例圖在UML方法中占有十分重要的地位,人們甚至稱UML是一種用例圖驅(qū)動的開發(fā)方法。3.建立用例模型3.3建立用例模型的過程如下:(1)找出系統(tǒng)邊界以外的角色(actor),角色是與系統(tǒng)進行交互的外部實體,可以是與系統(tǒng)交互的人員、與系統(tǒng)相連并交換信息的設(shè)備和其他系統(tǒng);(2)從這些角色如何與系統(tǒng)進行交互的角度,使用用例(usecase)來描述角色怎樣使用系統(tǒng)以及系統(tǒng)向角色提供什么功能,用例所表示的是從外部用戶角度觀察的系統(tǒng)功能;(3)繪制用例圖,并編寫詳細(xì)的用例描述。用例圖只能宏觀地描述系統(tǒng)的功能,但卻不能提供用例模型所必需的所有信息,每個功能的含義和具體實現(xiàn)步驟則以文本方式描述。

用例模型用于描述系統(tǒng)的基本功能,其中,角色代表外部實體,如用戶、硬件或其他外部系統(tǒng),用例代表一個完整的功能。角色啟動用例并與之通訊,執(zhí)行中的用例是一個動作序列。用例的具體執(zhí)行過程需要用文本進行描述。3.建立用例模型3.4舉例:學(xué)生注冊課程系統(tǒng)

某大學(xué)準(zhǔn)備開發(fā)一個學(xué)生課程注冊系統(tǒng),學(xué)生可以使用該系統(tǒng)查詢新學(xué)期將開設(shè)的課程和講課教師情況,選擇自己要學(xué)習(xí)的課程進行登記注冊,并可以查詢成績單;教師可以使用該系統(tǒng)查詢新學(xué)期將開設(shè)的課程和選課學(xué)生情況,并可以登記成績單;注冊管理員使用該系統(tǒng)進行注冊管理,包括維護教師信息、學(xué)生信息和課程信息等。

在每個學(xué)期的開始,學(xué)生可以獲得該學(xué)期的課程目錄表,課程目錄表列出每門課程的所有信息,諸如基本信息、教師、開課系和選課條件等。

新學(xué)期開始前兩周為選課注冊時間,在此期間學(xué)生可以選課注冊,并且允許改變或取消注冊申請,開學(xué)兩周后注冊管理員負(fù)責(zé)關(guān)閉課程注冊。每個學(xué)生可以選擇不超過4門課程,同時指定2門侯選課程以備主選課程未選上。每門課程最多不能超過10人,最少不能低于3人,低于3人選課的課程將被取消。一旦學(xué)生的注冊過程完畢,注冊系統(tǒng)將有關(guān)信息提交收費系統(tǒng)以便學(xué)生付費。如果在實際注冊過程中名額已滿,系統(tǒng)將通知學(xué)生在提交課程表之前予以更改。

在學(xué)期結(jié)束時,學(xué)生可以存取系統(tǒng)查看電子成績單。由于學(xué)生成績屬于敏感信息,系統(tǒng)必須提供必要的安全措施以防非法存取。3.建立用例模型3.4.1發(fā)現(xiàn)角色

簡單地說,角色是與系統(tǒng)交互的人或事。所謂“與系統(tǒng)交互”意味著向系統(tǒng)發(fā)送消息,從系統(tǒng)中接收消息,或是與系統(tǒng)交換信息。有些角色可以初始化用例,有些角色則不然,僅僅參與用例,在某個時刻與用例進行通信。在UML語言中,角色用一個小人的圖形和名稱來表示。

我們可以通過回答下列問題,進行系統(tǒng)角色的識別:

誰使用系統(tǒng)的功能?誰需要借助系統(tǒng)完成日常工作?誰來維護和管理系統(tǒng),以保證系統(tǒng)正常工作?系統(tǒng)控制的硬件設(shè)備有哪些?系統(tǒng)需要與其他哪些系統(tǒng)交互?誰對系統(tǒng)產(chǎn)生的結(jié)果感興趣?

3.建立用例模型在上述例子中,學(xué)生和教師使用系統(tǒng)完成課程注冊和成績登記等,注冊管理員維護和管理教師、學(xué)生和課程的信息。另外,新系統(tǒng)存取已有的課程目錄數(shù)據(jù)庫,獲得課程列表。因此,我們可以識別出如圖1所示的角色。圖1學(xué)生注冊課程系統(tǒng)的角色3.建立用例模型3.4.2發(fā)現(xiàn)用例

用例代表一個完整的功能,如與角色通信、進行計算或在系統(tǒng)內(nèi)工作等。用例具有以下的特征:用例總是由角色驅(qū)動的;用例為角色提供值;用例具有完全性,即不管其內(nèi)部是如何實現(xiàn)的,只有最終產(chǎn)生了返回角色的結(jié)果,用例的執(zhí)行才能完畢。用例描述了它所代表的功能的各個方面,即包含了用例執(zhí)行期間可能發(fā)生的種種情況。用例和角色之間具有“關(guān)聯(lián)“的連接關(guān)系,表示什么角色與該用例進行通信。在UML語言中,用例用一個橢圓圖形和名稱表示。3.建立用例模型實際上,從識別角色開始,發(fā)現(xiàn)用例的過程就已經(jīng)開始了。對于已識別的角色,通過詢問下列問題,我們可以發(fā)現(xiàn)用例:角色需要從系統(tǒng)中獲得什么功能?角色需要做什么?角色需要讀取、產(chǎn)生、刪除、修改或存儲系統(tǒng)的某些信息嗎?系統(tǒng)中發(fā)生事件需要通知角色嗎?角色需要通知系統(tǒng)某件事情嗎?系統(tǒng)需要的輸入/輸出信息是什么?這些信息從哪兒來到哪兒去?采用什么實現(xiàn)方法滿足某些特殊要求?

3.建立用例模型在上述例子中,我們通過上述提問可以識別以下用例:(1)與教師有關(guān)的用例

選擇課程--選擇所教的課程,并獲得學(xué)生名冊;

登記成績--在學(xué)期結(jié)束時,提交學(xué)生的課程成績。(2)與學(xué)生有關(guān)的用例

注冊課程--在學(xué)期開始進行選課注冊,允許在一段時間內(nèi)更改或刪除,課程目錄系統(tǒng)提供當(dāng)前學(xué)期的所有可選課程列表。

查看成績單--學(xué)生可以查看以前學(xué)期的電子成績單。(3)與注冊管理員有關(guān)的用例

維護課程信息--在系統(tǒng)中增加、修改和刪除課程信息;

維護學(xué)生信息--在系統(tǒng)中增加、修改和刪除學(xué)生信息;

維護教師信息--在系統(tǒng)中增加、修改和刪除教師信息。

關(guān)閉注冊--刪除少于3人的課程,并由付費系統(tǒng)通知學(xué)生繳費。(3)與安全性要求有關(guān)的用例

登錄--使用此系統(tǒng)的人員需要進行登錄,以驗證其身份和權(quán)限。3.建立用例模型本例的UseCase圖3.建立用例模型3.5用例之間的關(guān)系在構(gòu)造UseCase圖時,用符號描述角色和用例,用例和用例之間存在的關(guān)系。

⑴角色與用例之間用“關(guān)聯(lián)”關(guān)系描述了“誰使用哪個用例”或者說一個用例是由哪個角色啟動的。⑵用例之間有兩種關(guān)系:包含(<<include>>)也稱“使用關(guān)系”

如果若干用例的某些行為都是相同的,則可以將這些相同的行為提取出來單獨組成一個用例。當(dāng)其他用例使用該用例時,便包含了該用例的所有行為。包含關(guān)系用帶關(guān)鍵字<<include>>的虛線來表示,箭頭指向被包含的用例。由用例A,B連向用例C,表示用例A和B中使用了用例C中的行為或功能(調(diào)用)。擴展(<<extend>>)

也是在一個用例中使用另一個用例中的功能,類似多親繼承;被擴展的用例A可以根據(jù)需要有選擇地繼承原幾個用例(B,C)的部分行為,擴展關(guān)系用帶關(guān)鍵字<<extend>>的虛線來表示,箭頭指向被擴展的用例(與包含相反)。3.建立用例模型包含關(guān)系和擴展關(guān)系的對比:ABC《include》《include》ABC《extend》《extend》3.建立用例模型(3)一般化關(guān)系也稱泛化關(guān)系,反映的是繼承關(guān)系。既可用于角色也可用于用例學(xué)生本科研究生抽象BAC3.建立用例模型3.6用事件流描述用例單純使用用例圖不能提供用例所具有的全部信息,因此,需要使用文字描述那些不能反映在圖形上的信息。用例描述實際上是關(guān)于角色與系統(tǒng)如何交互的規(guī)格說明,要求清晰明確,沒有二義性。描述用例時,應(yīng)該只注重外部能力,不涉及內(nèi)部細(xì)節(jié)。(類似結(jié)構(gòu)化中的加工說明)

用例描述主要包括以下內(nèi)容:

⑴目標(biāo)

簡要描述用例的最終任務(wù)和結(jié)果。

⑵事件流說明用例是怎樣啟動的,即哪些角色在什么情況下啟動執(zhí)行用例。說明角色和用例之間的信息處理過程,如哪些信息是通知對方的,怎樣修改和檢索信息的,系統(tǒng)使用和修改了哪些實體等。說明用例在不同的條件下,可以選擇執(zhí)行的多種方案。說明用例在什么情況下才能被視作完成,完成時結(jié)果應(yīng)傳給角色。3.建立用例模型

通常,事件流包括基本流程(主事件流)和可選流程(其他事件流)錯誤流三部分?;玖鞒蹋赫f明了角色和系統(tǒng)之間相互交互或?qū)υ挼捻樞?,?dāng)這種交互結(jié)束時,角色便實現(xiàn)了預(yù)期目的;可選流程:在一些決策點上的分支,然后再重新匯成一個基本流程。錯誤流:表示系統(tǒng)發(fā)生錯誤的操作。如數(shù)據(jù)庫無法打開,外部其他系統(tǒng)出現(xiàn)錯誤。事件流描述可以用自然語言描述的文本,也可用活動圖(ActivityDiagram,ROSE中提供)

對于邏輯結(jié)構(gòu)比較復(fù)雜時適宜采用活動圖

注意,事件流表達(dá)的是一個活動經(jīng)過哪些事件,一定要避免詳細(xì)討論事件怎么干3.建立用例模型(3)特殊需求說明此用例的特殊要求。(4)前提條件

說明此用例開始執(zhí)行的前提條件,如角色登錄成功等。(5)后置條件

說明此用例執(zhí)行結(jié)束后,結(jié)果應(yīng)傳給什么角色或運行另一個案例。

下面我們給出上述例子中"登記成績"的用例描述。3.建立用例模型用例:登記成績1.目標(biāo):教師提交上學(xué)期完成的一門或多門課程的學(xué)生成績。2.事件流:

基本流程系統(tǒng)顯示教師上學(xué)期所教的課程列表;教師選擇所教課程;系統(tǒng)檢索出已注冊此課程的學(xué)生列表,顯示每個學(xué)生及以前給的成績;對于列表中的每個學(xué)生,教師輸入百分制成績,如果教師希望跳過某個學(xué)生,其相應(yīng)的成績可以為空,以后再進行填寫。教師可以修改學(xué)生的成績。

可選流程在主流程中,如果教師在上學(xué)期沒有教課,系統(tǒng)將顯示錯誤信息,教師接受此信息,用例結(jié)束。3.特殊需求:無。4.前提條件:用例開始之前,教師必須在系統(tǒng)登錄成功。5.后置條件:如果用例執(zhí)行成功,所提供課程的學(xué)生成績被更新,否則,系統(tǒng)狀態(tài)不變。3.建立用例模型用活動圖表示事件流:顯示教師上學(xué)期所教的課程列表檢索出已注冊此課程的學(xué)生列表顯示每個學(xué)生及以前給的成績教師選擇所教的一門課程取列表中的每個學(xué)生教師輸入百分制成績其相應(yīng)的成績可以為空以后再進行填寫顯示信息:本學(xué)期沒有所教課程[本學(xué)期無課][本學(xué)期有課][滿足錄分條件][不滿足]4.發(fā)現(xiàn)和定義對象類發(fā)現(xiàn)和定義對象類應(yīng)以問題域和系統(tǒng)責(zé)任為出發(fā)點,正確地運用抽象原則,盡可能全面地發(fā)現(xiàn)對象的因素,并對其進行檢查和整理,最終得到系統(tǒng)的對象類。我們可以在用例模型的基礎(chǔ)上,通過識別實體類、邊界類和控制類,從而發(fā)現(xiàn)和定義系統(tǒng)中的對象類。實體類表示系統(tǒng)存儲和管理的永久信息;

邊界類表示角色與系統(tǒng)之間的交互;

控制類表示由系統(tǒng)支持和用戶執(zhí)行的任務(wù);

使用UML中的構(gòu)造型

<<entity>>、<boundary>>和<<control>>分別表示實體類、邊界類和控制類。4.發(fā)現(xiàn)和定義對象類4.1識別實體類

實體類代表系統(tǒng)中需要存儲和關(guān)系的信息,通常是永久存在的。啟發(fā)分析員發(fā)現(xiàn)實體類的因素包括:人員:通常系統(tǒng)會涉及到各種各樣的人員,我們需要考慮的是由系統(tǒng)保存和管理其信息的人員,如教師、學(xué)生等。組織:在系統(tǒng)中發(fā)揮一定作用的組織機構(gòu),如系、班級等。物品:需要由系統(tǒng)管理的物品,可以是有形或無形的,如課程等。設(shè)備:在系統(tǒng)中動態(tài)地運行、由系統(tǒng)進行監(jiān)控或供系統(tǒng)使用的各種設(shè)備、儀表、機器、運輸工具等。事件:需要由系統(tǒng)長期記憶的事件,如學(xué)生注冊課程的記錄等。表格:這里的"表格"是廣義的,可以是各種業(yè)務(wù)報表、統(tǒng)計表、申請表、身份證、商品訂單、帳目、學(xué)生成績單等,注意不要將原始的表格進行簡單對應(yīng),應(yīng)該是分析和整理后形成的映射一些現(xiàn)實事物的表格。3.發(fā)現(xiàn)和定義對象類在學(xué)生課程注冊系統(tǒng)的例子中,通過分析和理解問題域,我們找出以下實體類:實體類說明Professor學(xué)校中講課的教師(編號、姓名、專業(yè)、職稱)Student學(xué)校中注冊課程的學(xué)生(學(xué)號、姓名、班級)Schedule學(xué)生在新學(xué)期選擇登記的課程列表CourseCatalog學(xué)校所有課程的目錄Course課程的基本信息,如代碼、名稱、學(xué)時、學(xué)分、大綱、簡介CourseOffering新學(xué)期課程的開設(shè)信息,如講課教師、時間、地點等信息3.發(fā)現(xiàn)和定義對象類3.2識別邊界類

邊界類代表系統(tǒng)與角色的接口,在每一個用例中,一個角色對應(yīng)一個邊界類。邊界類收集來自角色的信息,并將其轉(zhuǎn)換成實體類和控制類可以使用的中間接口。

根據(jù)角色的不同類型,邊界類可以是用戶接口、系統(tǒng)接口和設(shè)備接口。對于用戶接口來說,邊界類集中描述了用戶與系統(tǒng)的交互信息,而不是描述用戶接口的顯示形式,如按鈕、菜單等;對于系統(tǒng)接口和設(shè)備接口來說,邊界類集中描述所定義的通信或交換協(xié)議,而不是說明協(xié)議如何實現(xiàn)的。

3.發(fā)現(xiàn)和定義對象類在學(xué)生課程注冊系統(tǒng)的例子中,通過發(fā)現(xiàn)用例-角色對,我們定義以下邊界類:邊界類說明LoginForm為教師、學(xué)生和注冊管理員提供登錄的操作RegisterCoursesForm為學(xué)生提供選課注冊的操作ViewReportForm為學(xué)生提供成績查詢的操作SelectTeachCoursesForm為教師提供查看學(xué)生選課情況的操作SubmitGradesForm為教師提供登記成績的操作MaintainProfessorsForm為注冊管理員提供維護教師信息的操作MaintainStudentsForm為注冊管理員提供維護學(xué)生信息的操作MaintainCoursesForm為注冊管理員提供維護課程信息的操作CloseRegistrationForm為注冊管理員提供關(guān)閉注冊的操作BillingSystemNotice提供與收費系統(tǒng)的信息交換接口3.發(fā)現(xiàn)和定義對象類3.3識別控制類(業(yè)務(wù)邏輯調(diào)度中心)

控制類負(fù)責(zé)協(xié)調(diào)邊界類和實體類,通常在現(xiàn)實世界中沒有對應(yīng)的事物,它負(fù)責(zé)接收邊界類的信息,并將其分發(fā)給實體類。

控制類與用例存在著密切的關(guān)系,它在用例開始執(zhí)行時創(chuàng)建,在用例結(jié)束時取消。一般來說,一個用例對應(yīng)一個控制類。當(dāng)用例比較復(fù)雜時,特別是產(chǎn)生分支事件流的情況下,也可以有多個控制類。在有些情況下,用例的行為十分簡單,這時可以沒有控制類,學(xué)生注冊課程系統(tǒng)中的“用戶登錄"就是這種情況。

3.發(fā)現(xiàn)和定義對象類在學(xué)生課程注冊系統(tǒng)的例子中,我們發(fā)現(xiàn)以下控制類:控制類說明RegisterCoursesControl負(fù)責(zé)新學(xué)期學(xué)生的選課登記ViewReportControl負(fù)責(zé)學(xué)生成績的查詢SelectTeachCoursesControl負(fù)責(zé)教師新學(xué)期課程的學(xué)生選擇情況SubmitGradesControl負(fù)責(zé)學(xué)生成績的登記CloseRegistrationControl負(fù)責(zé)關(guān)閉課程注冊3.發(fā)現(xiàn)和定義對象類

3.4將用例行為分配到對象類

識別上述對象類之后,通過建立交互圖(Interaction),我們將用例的行為分布到這些對象類中。交互圖有兩種視圖:

時序圖(Sequence)

協(xié)作圖(Collaboration)

時序圖表示完成某項行為的對象類和這些對象類之間傳遞消息的時間順序,其組成如圖所示。3.發(fā)現(xiàn)和定義對象類其中,對象生命線是一條垂直的虛線,表示對象存在的時間;控制焦點是一個細(xì)長的矩形,表示對象執(zhí)行一個所經(jīng)歷的時間段;消息是對象之間的一條水平箭頭線,表示對象之間的通信。

3.發(fā)現(xiàn)和定義對象類時序圖中,對象間傳遞的消息(PerformResponsibility)就是接收對象(Supplier)里的一個行為。此行為將被封裝到相應(yīng)的類中。下面以學(xué)生課程注冊系統(tǒng)中的用例“注冊課程”為例,下圖表示創(chuàng)建課程登記表的時序圖。3.發(fā)現(xiàn)和定義對象類

3.發(fā)現(xiàn)和定義對象類

時序圖清楚表示了對象之間通過消息完成一個用例經(jīng)過的先后順序,并且看出消息是接收對象的一個行為,但不能清楚表達(dá)一個對象到底有多少個行為。協(xié)作圖包含一組對象和以消息交換為紐帶的關(guān)聯(lián),用于描述系統(tǒng)的行為是如何由系統(tǒng)的成分合作實現(xiàn)的。協(xié)作圖與時序圖是同構(gòu)的,二者表示的都是同樣的系統(tǒng)交互活動,只是各自的側(cè)重點不同而已,它能清楚表達(dá)一個對象在一個用例中涉及到的所有行為。有利把行為分配到對象中。下圖表示"注冊課程"中創(chuàng)建課程登記表的協(xié)作圖。3.發(fā)現(xiàn)和定義對象類用例"注冊課程"中創(chuàng)建課程登記表的協(xié)作圖3.發(fā)現(xiàn)和定義對象類通過對用例建立交互圖,我們實現(xiàn)了將系統(tǒng)責(zé)任分配到對象類中,即交互圖中的每一個消息就是消息接收對象的一個服務(wù)。

當(dāng)把所有的用例都分解完畢,一個對象的行為也就分配完。最后,審查和整理對象圖,刪除一些不必要的冗余操作,分解或合并某些對象類。3.發(fā)現(xiàn)和定義對象類3.5定義屬性

對于每個對象,我們從以下方面考慮并發(fā)現(xiàn)對象的屬性:(1)按照一般常識,找出對象的某些屬性,如人員的姓名、性別、年齡、地址等;(2)認(rèn)真研究問題域,找出對象的某些屬性,如商品的條形碼、學(xué)生的學(xué)號等;(3)根據(jù)系統(tǒng)責(zé)任的要求,找出對象的某些屬性;(4)考慮對象需要系統(tǒng)保存和管理的信息,找出對象的相應(yīng)屬性,如“課程”需要保存和管理的信息;(5)對象為了在服務(wù)中實現(xiàn)其功能,需要增設(shè)一些屬性;(6)識別對象需要區(qū)別的狀態(tài),考慮是否需要增加一個屬性來區(qū)別這些狀態(tài);(7)確定屬性表示整體與部分結(jié)構(gòu)和實例連接。

對于初步發(fā)現(xiàn)的屬性,檢查這些屬性是否系統(tǒng)使用的特征、是否描述了對象本身的特征、是否可以通過繼承得到、是否可以從其他屬性直接導(dǎo)出等,對這些屬性進行整理和篩選。4.識別對象的外部聯(lián)系在找到系統(tǒng)的對象類之后,我們需要分析和認(rèn)識各類對象之間的關(guān)系,從而使對象類構(gòu)成一個整體的、有機的系統(tǒng)模型。對象與外部的關(guān)系有以下幾種:

(1)對象之間的分類關(guān)系,即泛化關(guān)系;

(2)對象之間的組成關(guān)系,即累積關(guān)系;

(3)對象之間的靜態(tài)關(guān)系,即關(guān)聯(lián)關(guān)系;

(4)對象之間的動態(tài)關(guān)系,即依賴關(guān)系。

4.識別對象的外部聯(lián)系4.1發(fā)現(xiàn)泛化關(guān)系(Generalization)

我們可以參考應(yīng)用領(lǐng)域已有的一些分類知識,也可以按照自己的常識,從各種不同角度考慮事物的分類,找出對象類之間的泛化關(guān)系。另外,通過考察系統(tǒng)中每個類的屬性和服務(wù),找出類之間的泛化關(guān)系。查看一個類的屬性與服務(wù)是否適合這個類的全部對象,如果某些屬性或服務(wù)只適合該類的一部分對象,說明應(yīng)該從這個類中劃分出一部分特殊類,建立泛化關(guān)系;檢查是否某些類具有相同的屬性和服務(wù),如果把這些相同的屬性和服務(wù)提取出來,能否在概念上構(gòu)成這些類的父類,形成泛化關(guān)系。為了加強分析模型的可復(fù)用性,應(yīng)該進一步考慮在更高的層次上運用泛化關(guān)系,從而開發(fā)一些可復(fù)用的構(gòu)件類。

4.識別對象的外部聯(lián)系4.2發(fā)現(xiàn)累積關(guān)系

累積關(guān)系分為組合和聚合都是表達(dá)問題域中事物之間整體和部分的組成關(guān)系。組合(Composition):Aclassiscomposedofanotherclass

關(guān)系緊密,部分和整體同時創(chuàng)建和消失或失靈(相同的生命期)。如樓房和房間、汽車和發(fā)動機、人和心臟的關(guān)系。聚合(Aggregation):Aclass“owns”anotherclass

關(guān)系松散。整體可以為空,部分不存在整體依然在(不同的生命期)。如校園和樓宇、部門和人員、人和衣物的關(guān)系。

我們可以考慮以下方面建立累積關(guān)系(表示數(shù)據(jù)組織):物理上的整體事物和組成部分,如設(shè)備與零部件的關(guān)系;組織機構(gòu)及其下級組織,如學(xué)校和系的關(guān)系;團體(組織)與成員,如學(xué)校和教師的關(guān)系;抽象事物的整體與部分,如法律與法律條文;具體事物及其某個抽象方面,如人員與身份。

CourseListCourseWindowsButton4.識別對象的外部聯(lián)系4.3發(fā)現(xiàn)關(guān)聯(lián)關(guān)系(Association)

Usestheservicesofanotherclass

關(guān)聯(lián)關(guān)系表示對象之間的靜態(tài)聯(lián)系,即可以通過對象屬性來表示的一個對象對另一個對象的依賴關(guān)系。在現(xiàn)實中存在大量的這種關(guān)系,如“教師”與“學(xué)生”之間的教學(xué)關(guān)系。我們可以通過以下分析活動,建立對象之間的關(guān)聯(lián)關(guān)系:認(rèn)識對象之間的靜態(tài)聯(lián)系,如“學(xué)生”與“課程”之間存在選課關(guān)系,那么這兩個類存在關(guān)聯(lián)關(guān)系;認(rèn)識關(guān)聯(lián)的屬性和操作,如在“學(xué)生”和“課程”的連接中,需要給出開課學(xué)期、講課教師等屬性信息;分析關(guān)聯(lián)的多重性,如“學(xué)生”和“課程”是多對多的連接;對于多元關(guān)聯(lián),需要增加一個對象類,使之轉(zhuǎn)化為二元關(guān)聯(lián);對于多對多的關(guān)聯(lián),需要增加一個對象類,使之轉(zhuǎn)化為兩個一對多的關(guān)聯(lián)。4.識別對象的外部聯(lián)系關(guān)聯(lián)反映對象之間的消息傳遞,既是一個類對另一個類進行實例化。關(guān)聯(lián)具有方向性,分為單向關(guān)聯(lián)和雙向關(guān)聯(lián)。雙向關(guān)聯(lián)不能復(fù)用,設(shè)計上避免雙向。

PublicclassRegisterCoursesControl{publicRCCCourseCatalog;//創(chuàng)建關(guān)聯(lián)類的一個實例

publlicCollectionGetCourseOfferings(){returnRCC.getCourseOffering();……

}

}RegisterCoursesControlCourseCatalogGetCourseOfferings()RegisterCoursesFormgetCourseOffering()4.識別對象的外部聯(lián)系4.4發(fā)現(xiàn)依賴關(guān)系(Dependency)

在面向?qū)ο蟮南到y(tǒng)中,消息體現(xiàn)了對象行為之間的依賴關(guān)系,實現(xiàn)了對象之間的動態(tài)聯(lián)系,使系統(tǒng)成為一個能活動的整體,并使各個部分能夠協(xié)調(diào)工作。

依賴表示兩個或多個模型元素之間語義上的關(guān)系。考慮當(dāng)該對象執(zhí)行時是否需要請求其它對象提供服務(wù)、是否需要向其他對象提供或索取某些數(shù)據(jù)等問題,從而建立依賴關(guān)系。

關(guān)聯(lián)與依賴從“使用關(guān)系”上的區(qū)別:關(guān)聯(lián):一個類引用另一個類的方法通過創(chuàng)建實例;依賴:除了創(chuàng)建實例以外的其它引用方法都是依賴,是更廣泛的“關(guān)聯(lián)”,牽涉類的封裝和訪問性。如:通過import、全局定義、參數(shù)傳遞等。

依賴只反映兩個類之間的“使用關(guān)系”,這種關(guān)系在使用中產(chǎn)生;而關(guān)聯(lián)還能反映類之間的數(shù)據(jù)結(jié)構(gòu)上的關(guān)系。關(guān)聯(lián)可以雙向,依賴只能單向。4.識別對象的外部聯(lián)系依賴關(guān)系的幾種情況:依賴關(guān)系

溫馨提示

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

評論

0/150

提交評論