軟件開發(fā)方法與技術(shù)(靜態(tài)模型-類圖對象圖)課件_第1頁
軟件開發(fā)方法與技術(shù)(靜態(tài)模型-類圖對象圖)課件_第2頁
軟件開發(fā)方法與技術(shù)(靜態(tài)模型-類圖對象圖)課件_第3頁
軟件開發(fā)方法與技術(shù)(靜態(tài)模型-類圖對象圖)課件_第4頁
軟件開發(fā)方法與技術(shù)(靜態(tài)模型-類圖對象圖)課件_第5頁
已閱讀5頁,還剩97頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章類圖和對象圖第3章類圖和對象圖1§3.1類及其表示

一、類的定義“類”是面向?qū)ο笾邢到y(tǒng)組織結(jié)構(gòu)的核心。它是對一組具有相同屬性、行為、關(guān)系和語義的事物的抽象。這些事物包括了現(xiàn)實世界中的物理實體、邏輯事物、應(yīng)用事物、行為事物和甚至純粹的概念事物等。在UML中“類”被表述成具有相似結(jié)構(gòu)、行為和關(guān)系的一組對象的描述符,所用的屬性和操作都被附加在類中。“類”的圖形表示如下:類名屬性操作§3.1類及其表示一、類的定義類名2其中:1.在UML中類的命名分simplename和pathname兩種形式如:simplename:ClassApathname:Package1::ClassB2.屬性基本格式:[可見性]屬性名[:類型][=初始值]如:+name:string-age:integer#max:integer=1003.方法基本格式:[可見性]方法名[(參數(shù)列表)][:返回類型]如:+pa():boolean說明:在ROSE中+、–、#分別采用直觀的圖形符號來表示注:C++中三種不同的繼承方式的基類和派生類特性參見下表:公有(public)保護(hù)(protected)私有(private)公有(public)繼承+(public)#(protected)×私有(private)繼承-(private)-(private)×保護(hù)(protected)繼承#(protected)#(protected)×其中:注:C++中三種不同的繼承方式的基類和派生類特性參見下3例如:

4.在ROSE中類有三種表達(dá)方式:選中類圖標(biāo)(菜單項的)FormatSuppressAttributes/Opration(制止屬性/操作)例如:4.在ROSE中類有三種表達(dá)方式:選中類圖標(biāo)(菜4說明:ROSE中可見性有以下4種:公有(Public)+受保護(hù)(Protected)#私有(Private)–包內(nèi)公有(Package)~分別采用空白、鑰匙、鎖和榔頭表示。例如:注意:Option-->ShowVisibility:顯示/隱藏可見性。例如:

說明:ROSE中可見性有以下4種:注意:Option-->S5軟件開發(fā)方法與技術(shù)(靜態(tài)模型—類圖對象圖)課件6

二、類的種類及一些符號表示(1)邊界類(BoundaryClass)邊界類:代表了系統(tǒng)和系統(tǒng)外的一些實體(人或設(shè)備)之間的交互的類,它是系統(tǒng)與外界交換信息的媒介,并將系統(tǒng)與系統(tǒng)環(huán)境中的變化隔離開來。例如:窗口、報表、打印機、掃描儀等硬件的界面邊界類UML符號表示有如下3種:二、類的種類及一些符號表示7邊界類在Sterotype(構(gòu)造型)中的設(shè)置:邊界類在Sterotype(構(gòu)造型)中的設(shè)置:8(2)實體類(EntityClass)實體類:是模擬必須被永久存儲的信息和關(guān)聯(lián)行為的類如:文件、數(shù)據(jù)庫等

UML符號表示有如下3種:注:實體類的設(shè)置參照邊界類的設(shè)置,即Sterotype(Entity)(2)實體類(EntityClass)注:實體類的設(shè)置參9

其中:控制類所提供的行為具有以下特點:①確定用例中的控制邏輯(事件順序)和事務(wù)②使用或規(guī)定若干實體類的內(nèi)容,協(xié)調(diào)這些實體類的行為

說明:①每個用例通常有一個控制類,控制用例中的事件順序②控制類一般可采用窗體(Forms)/對話框(Dialog)來實現(xiàn)(3)控制類(ControlClass)控制類:是用來為特定于一個或幾個用例的控制行為的類??刂祁怳ML符號表示有如下3種:注:控制類的設(shè)置參照邊界類的設(shè)置,即Sterotype(Control)其中:控制類所提供的行為具有以下特點:(3)控制類(Co10(4)接口(Interface)是兩個不相關(guān)的實體(系統(tǒng)或構(gòu)件)提供交流途徑的設(shè)備(一組操作的集合

其UML符號表示有如下:

作用:幫助類圖中的類與其他系統(tǒng)或組件或外部設(shè)備進(jìn)行通信。注:接口的設(shè)置參照邊界類的設(shè)置,即Sterotype(Interface)(4)接口(Interface)作用:幫助類圖中的類與其11§3.2類圖(ClassDiagram)

一、類圖的定義類圖是描述類、接口、協(xié)作以及它們之間關(guān)系的圖,用來顯示系統(tǒng)的靜態(tài)結(jié)構(gòu)。

其中:協(xié)作(Collaboration):一個用例或一組用例的工作(實現(xiàn))視圖。協(xié)作的UML符號表示用Stereotype是

use-caserealization類型的用例來表示如下:§3.2類圖(ClassDiagram)一、類圖的12一個協(xié)作包含以下3部分:(1)名稱(2)結(jié)構(gòu)部分:一般用類圖來描述,說明共同工作完成協(xié)作的類、接口和其它元素(3)行為部分:說明關(guān)于這些元素如何交互的動態(tài)特征可用UML的交互圖來描述:順序圖:強調(diào)消息的時間順序協(xié)作圖:強調(diào)對象之間的結(jié)構(gòu)順序

說明:協(xié)作包含的視圖通過在“協(xié)作”的Specification(規(guī)格)→Diagrams(圖)視窗中點擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇插入注:協(xié)作視圖的建立參見下圖。一個協(xié)作包含以下3部分:注:協(xié)作視圖的建立參見下圖。13軟件開發(fā)方法與技術(shù)(靜態(tài)模型—類圖對象圖)課件14二、關(guān)系:

?依賴(Dependence)表示兩個模型元素之間的語義(借用目標(biāo)元素的功能,而不是結(jié)構(gòu))關(guān)系,它說明一個模型元素的變化可能影響到使用它的另一個模型元素。

例如:設(shè)X、Y是兩個類,如果修改Y的定義可能會導(dǎo)致對X的修改,則稱類X依賴類Y。依賴關(guān)系圖形表示為:例如:充電電池和充電器,充電電池通過充電器來充電自行車和打氣筒,自行車通過打氣筒來充氣則Bicycle類與Pump類的類圖:二、關(guān)系:例如:充電電池和充電器,充電電池通過充電器來充電15classCPeople//人類{public:CBicyclemyBicycle;CPumpmyPump;voidPumpToBicycle(){myBicycle.Expand(&myPump);}}

說明:依賴關(guān)系在實現(xiàn)中,目標(biāo)對象不出現(xiàn)在源對象的屬性結(jié)構(gòu)中,通常采用目標(biāo)對象作為源對象方法的參數(shù)來使用。例如,上例的模擬實現(xiàn)代碼為:classCBicycle//自行車類classCPump//打氣筒類{{public:/*給輪胎充氣*/public:/*打氣筒充氣*/

voidExpand(CPump*Pp)voidBlow(){{Pp->Blow();//使用該打氣筒給自行車充氣

}}}}classCPeople//人類說明:classCBi16classCPump//打氣筒類{public:/*打氣筒充氣*/

voidBlow(){

printf("

%s\n","…使用該打氣筒給自行車充氣…");}}

#include"stdafx.h"#include"People.h"intmain(){CPeoplePbe;Pbe.PumpToBicycle();return0;}編寫主函數(shù)main()如下:

如果把CPump類改寫成:運行結(jié)果classCPump//打氣筒類#include"17?泛化(Generalization)同前是一般到特殊之間的關(guān)系(派生/繼承關(guān)系)

說明:泛化關(guān)系是在現(xiàn)有類的基礎(chǔ)上定義和實現(xiàn)一個新類的技術(shù)(復(fù)用技術(shù))。泛化關(guān)系圖形表示為:例如:即:?泛化(Generalization)例如:即:18C++描述如下:

classCAutomobile{……}classCCar:CAutomobile{……}classCLorry:CAutomobile{……}C++描述如下:classCAutomobi19關(guān)聯(lián)關(guān)系(Association)關(guān)聯(lián)關(guān)系表示兩個類之間“結(jié)構(gòu)+語義(行為)”的關(guān)系

其圖形表示為:雙向關(guān)聯(lián)單向關(guān)聯(lián)

例如:關(guān)聯(lián)關(guān)系(Association)例如:20classClassWclassClassA

classClassB{{{………………

public:public:public:

ClassAa;voidaFun()voidbFun()

ClassB*b;{{…………

……public:}}voidwFun()…………{}}a.aFun();b=new(ClassB);b->bFun();

}……}

對應(yīng)的C++實現(xiàn)有以下兩種方式:classClassW21說明:在類的方法(函數(shù))內(nèi)部臨時聲明類對象之討論classClassWclassClassA

classClassB{{{………………

public:public:public:

ClassAa;//關(guān)聯(lián)voidaFun()voidbFun()

……{{public:……

……voidwFun()}}{…………ClassBb;}}a.aFun();b.bFun();

}……}顯然,這是一種介于關(guān)聯(lián)和依賴關(guān)系之間的編碼方式,在建模中既可使用關(guān)聯(lián)關(guān)系也可使用依賴關(guān)系,我們規(guī)定使用“依賴關(guān)系”//依賴說明:在類的方法(函數(shù))內(nèi)部臨時聲明類對象之討論cl22關(guān)聯(lián)的修飾:⑴名稱:用來描述關(guān)聯(lián)的性質(zhì)。說明:關(guān)聯(lián)名稱應(yīng)使用動詞短語,因為它表明源對象正在目標(biāo)對象上執(zhí)行動作。關(guān)聯(lián)名稱的添加如圖:關(guān)聯(lián)的修飾:23作用:為未來如下設(shè)計做鋪墊classStudent classUniversity{ {public:public:

University

u;void

uTeach();//教師授課…………voidsStudy();//學(xué)生學(xué)習(xí)}

…… }voidStudent::sStudy(){……u.uTeach();//學(xué)生通過大學(xué)里的教師授課來學(xué)習(xí)

……}作用:為未來如下設(shè)計做鋪墊classStudent24⑵角色:一個類在關(guān)聯(lián)中所扮演的角色說明:角色名稱應(yīng)使用名詞或名詞短語。關(guān)聯(lián)角色的添加如圖:作用:為未來如下分析做鋪墊:

為未來如下設(shè)計做鋪墊⑵角色:一個類在關(guān)聯(lián)中所扮演的角色為未來如下設(shè)計做鋪25

⑶多重性多重性表示一個類的一個實例與另一個類的幾個實例相關(guān)聯(lián)。多重性語法表示:

修飾語義0..10或11恰為10..n或0..*0或更多1..n或1..*1或更多n或*0或更多1..51至5個例如:⑶多重性修飾語義026多重性的添加如圖:作用:為未來如下分析、設(shè)計做鋪墊多重性的添加如圖:作用:為未來如下分析、設(shè)計做鋪墊27聚合關(guān)系(Aggregation)

聚合關(guān)系表示類間的關(guān)系是整體與部分的結(jié)構(gòu)關(guān)系。C++描述:classClassW{……private:classClassU{……}u;classClassV{……

}v;……}UML描述:例:聚合關(guān)系(Aggregation)C++描述:class28實現(xiàn)(Realize):

是一種語義關(guān)系,表示一個事物只繼承另一個事物的行為,而不繼承結(jié)構(gòu)。實現(xiàn)關(guān)系圖形表示如下:

說明:

⑴UML用實現(xiàn)關(guān)系來建立接口和實現(xiàn)接口的類或組件之間的關(guān)系或:或:實現(xiàn)(Realize):說明:或:或:29⑵而通過“接口”訪問“實現(xiàn)接口的類”的類和接口之間的關(guān)系是依賴關(guān)系。看一個例子:注意:在這里實現(xiàn)接口的類自動繼承了接口類的函數(shù)⑵而通過“接口”訪問“實現(xiàn)接口的類”的類和接口之間的關(guān)系30#include<unknwn.h>//此頭文件中有interface定義interfaceIInterface//接口類的聲明{//下面兩條語句聲明兩個接口函數(shù)(純虛函數(shù))virtualintiFunction()=0;virtualintiMethod()=0;};classCRealizeInterface:publicIInterface//實現(xiàn)接口類的定義,繼承接口類{public://實現(xiàn)接口部分

intiFunction(){Function();return0;}intiMethod(){Method();return0;}private://內(nèi)部工作部分

voidFunction(){printf("%s\n","通過接口IInterface::iFunction()調(diào)用CRealizeInterface::Function()成功!");

}voidMethod(){

printf("%s\n","通過接口IInterface::iMethod()調(diào)用CRealizeInterface::Method()成功!");}};上述關(guān)系圖的C++實現(xiàn):#include<unknwn.h>//此頭文件中有31classCVisitRealizeInterface//通過“接口類”訪問“實現(xiàn)接口類”的類的定義{public:voidVFunction_Method(){IInterface*IPoint;IPoint=newCRealizeInterface;IPoint->iFunction();IPoint->iMethod();}};intmain()//主函數(shù){CVisitRealizeInterfacevri;vri.VFunction_Method();return0;}classCVisitRealizeInterface32實現(xiàn)的運行結(jié)果:實現(xiàn)的運行結(jié)果:33§3.3類圖建模技術(shù)

一、為機制(較大范圍的協(xié)作)建模機制:代表了需要被模擬的部分系統(tǒng)的功能和行為,這些功能和行為是由類、接口等元素交互作用產(chǎn)生的。機制建模步驟:1.確定要為之建模的機制。2.對于每個機制,確定參與這個機制的類、接口和其他的機制。3.確定這些元素間的關(guān)系。4.根據(jù)機制的腳本,發(fā)現(xiàn)遺漏的模型部分,以及簡單的語義錯誤。腳本是描述機制的對象間動態(tài)行為的圖,如狀態(tài)圖等5.確定對象的屬性和操作。

例:基于“圖書管理系統(tǒng)”的用例圖我們按步驟進(jìn)行分析§3.3類圖建模技術(shù)一、為機制(較大范圍的協(xié)作)建模34邊界邊界Query

(查詢)邊界邊界邊界Query邊界351.確定機制。根據(jù)機制(協(xié)作)的定義(模擬部分系統(tǒng)的功能和行為),顯然可得到如下機制(協(xié)作):總體機制讀者機制工作人員機制管理人員機制2.確定參與每個機制的類

⑴考慮系統(tǒng)邊界,基于“用例圖之“參與者─>用例”建立邊界類

基于業(yè)務(wù)人員機制,邊界類有:業(yè)務(wù)員登錄窗口業(yè)務(wù)窗口:為操作“借書”和“還書”用例設(shè)置的邊界類基于讀者機制,邊界類有:查詢窗口:為操作“查詢圖書”和“查詢借閱情況”用例設(shè)置的邊界類基于管理人員機制,邊界類有:管理員登錄窗口管理窗口:為操作“維護(hù)圖書”和“維護(hù)讀者”用例設(shè)置的公共邊界類

1.確定機制。根據(jù)機制(協(xié)作)的定義(模擬部分系統(tǒng)的功能和36⑵考慮問題域,建立實體類(數(shù)據(jù)庫/文件)借閱者:教工借閱者、學(xué)生借閱者借閱圖書文件圖書圖書借閱明細(xì)借閱歷史檔案

工作人員⑶考慮系統(tǒng)責(zé)任,基于“用例圖---用例”建立控制類

借書業(yè)務(wù):實現(xiàn)“借書”用例操作控制類還書業(yè)務(wù):實現(xiàn)“還書”用例操作控制類

查詢:實現(xiàn)“查詢”用例操作控制類注冊圖書、更新圖書:實現(xiàn)“維護(hù)圖書”用例操作控制類注冊讀者、注冊讀者:實現(xiàn)“維護(hù)讀者”用例操作控制類注意:用子窗體/對話框來實現(xiàn)

⑷考慮同外部系統(tǒng)或組件的聯(lián)系,確定接口類無?、瓶紤]問題域,建立實體類(數(shù)據(jù)庫/文件)37類類名類類名邊界類:實體類:業(yè)務(wù)員登錄窗口LibrarianLogin借閱者ReaderInf管理員登錄窗口AdministratorLogin教工借閱者TeacherInf業(yè)務(wù)窗口LibrarianWin學(xué)生借閱者StudentInf維護(hù)窗口MaintainWin圖書BookInf查詢窗口QueryWin借閱圖書文件BorroweBookFileInf控制類:圖書借閱明細(xì)BookBorroweStatisticsInf借書業(yè)務(wù)LendbookForm借閱歷史檔案BorrowehistoryInf

還書業(yè)務(wù)ReturnbookForm工作人員WorkerInf維護(hù)圖書RegisterbookFormUpdatebookForm維護(hù)讀者RegisterBorrowerFormUpdateBorrowerForm機制機制名總體機制TotalCollaboration讀者機制ReaderCollaboration業(yè)務(wù)人員機制LibrarianCollaboration管理人員機制ManagerCollaboration類信息表類類名類類名邊界類:實體類:業(yè)務(wù)員登錄窗口Librari383.確定類之間的關(guān)系(構(gòu)造類圖)

⑴基于工作人員機制之類圖

注意:類與包之間是依賴關(guān)系3.確定類之間的關(guān)系(構(gòu)造類圖)注意:類與包之間是依賴關(guān)39

⑵基于讀者機制之類圖⑵基于讀者機制之類圖40⑶基于管理人員機制之類圖⑶基于管理人員機制之類圖41⑷基于總機制之類圖說明:機制在設(shè)計、實現(xiàn)時體現(xiàn)在:1.在系統(tǒng)外部由獨立的子系統(tǒng)來實現(xiàn)2.在系統(tǒng)內(nèi)部由主菜單來實現(xiàn)⑷基于總機制之類圖說明:機制在設(shè)計、實現(xiàn)時體現(xiàn)在:42⑸基于實體類,為數(shù)據(jù)庫模式建模使用UML:⑸基于實體類,為數(shù)據(jù)庫模式建模43使用SQLServer:使用SQLServer:444.根據(jù)機制的腳本,發(fā)現(xiàn)遺漏的模型部分有:讀者機制之類圖中查詢包含兩項獨立的對象(互不相干),它們分別是“查詢圖書信息”、“查詢借閱信息”,且在查詢借閱信息前應(yīng)該先“登錄”,所以應(yīng)追加三個類且建立相應(yīng)的關(guān)系。更新成4.根據(jù)機制的腳本,發(fā)現(xiàn)遺漏的模型部分有:讀者機制之類圖中更45類類名類類名邊界類:實體類:業(yè)務(wù)員登錄窗口LibrarianLogin借閱者ReaderInf管理員登錄窗口AdministratorLogin教工借閱者TeacherInf業(yè)務(wù)窗口LibrarianWin學(xué)生借閱者StudentInf維護(hù)窗口MaintainWin圖書BookInf查詢窗口QueryWin借閱圖書文件BorroweBookFileInf控制類:圖書借閱明細(xì)BookBorroweStatisticsInf借書業(yè)務(wù)LendbookForm借閱歷史檔案BorrowehistoryInf

還書業(yè)務(wù)ReturnbookForm工作人員WorkerInf維護(hù)圖書RegisterbookFormUpdatebookForm維護(hù)讀者RegisterBorrowerFormUpdateBorrowerForm查詢QuerybookFormQueryBorroweForm、BorrowerLoginForm機制機制名總體機制TotalCollaboration讀者機制ReaderCollaboration業(yè)務(wù)人員機制LibrarianCollaboration管理人員機制ManagerCollaboration更新的類信息表類類名類類名邊界類:實體類:業(yè)務(wù)員登錄窗口Librari465.按類圖的3個層次進(jìn)一步分析和設(shè)計,添加屬性、方法和細(xì)節(jié)等。參見下一節(jié)“§3.4類圖的層次劃分”注意:在這期間就需要動態(tài)模型協(xié)助設(shè)計5.按類圖的3個層次進(jìn)一步分析和設(shè)計,添加屬性、方法和細(xì)47§3.4類圖的層次劃分說明:雖然在軟件開發(fā)的不同階段都使用類圖,但這些類圖描述了不同層次的抽象。1.概念層概念層類圖:最高層次的抽象類圖,描述了問題域中的概念,一般這些概念和類有自然的聯(lián)系(即類可以從問題域的概念中得出),一個概念模型應(yīng)獨立于實現(xiàn)它的軟件和程序設(shè)計語言。說明:概念層類圖中的類一般只有一個類名在分析階段,類圖是所研究的問題域中的概念;在設(shè)計階段,類圖描述類與類之間的接口;(相當(dāng)于概要設(shè)計)在實現(xiàn)階段,類圖描述軟件系統(tǒng)中類的實現(xiàn)。(相當(dāng)于詳細(xì)設(shè)計)§3.4類圖的層次劃分1.概念層說明:概念層類圖中的類一482.說明層說明層類圖:描述軟件的接口部分,而不是軟件的實現(xiàn)部分。說明:說明層類圖中的類一般有類名、屬性名和方法名,但對屬性名不說明,方法亦不指明其參數(shù)和返回值類型。如:

3.實現(xiàn)層實現(xiàn)層類圖:真正考慮類的實現(xiàn)問題,提供了實現(xiàn)細(xì)節(jié),它與軟件系統(tǒng)的實現(xiàn)和程序設(shè)計語言有關(guān),即從軟件的實現(xiàn)角度建立類圖。說明:實現(xiàn)層類圖中一般應(yīng)給出屬性和方法的說明。如:2.說明層3.實現(xiàn)層49§3.5對象圖

對象圖:表示一組對象及它們之間的聯(lián)系,是參與交互的各個對象在交互過程中某一時刻的狀態(tài),常用于表示復(fù)雜的類圖的一個實例。其中:1.對象只有兩個分欄:名稱和屬性2.對象名稱有以下2種形式:完整表示:“對象名:類名”匿名對象表示:“:類名”

3.屬性名包含當(dāng)前值

4.關(guān)聯(lián)關(guān)系沒有多重性,所有的鏈接都是一對一的

§3.5對象圖對象圖:表示一組對象及它們之間的聯(lián)系,50說明:對象圖的使用相當(dāng)有限,主要用于表達(dá)數(shù)據(jù)結(jié)構(gòu)的示例,以及了解系統(tǒng)在某個特定時刻的具體情況等。例:關(guān)聯(lián)對象:

注:可在協(xié)作圖中建立對象圖11:n說明:對象圖的使用相當(dāng)有限,主要用于表達(dá)數(shù)據(jù)結(jié)構(gòu)的示例,關(guān)51第3章類圖和對象圖第3章類圖和對象圖52§3.1類及其表示

一、類的定義“類”是面向?qū)ο笾邢到y(tǒng)組織結(jié)構(gòu)的核心。它是對一組具有相同屬性、行為、關(guān)系和語義的事物的抽象。這些事物包括了現(xiàn)實世界中的物理實體、邏輯事物、應(yīng)用事物、行為事物和甚至純粹的概念事物等。在UML中“類”被表述成具有相似結(jié)構(gòu)、行為和關(guān)系的一組對象的描述符,所用的屬性和操作都被附加在類中?!邦悺钡膱D形表示如下:類名屬性操作§3.1類及其表示一、類的定義類名53其中:1.在UML中類的命名分simplename和pathname兩種形式如:simplename:ClassApathname:Package1::ClassB2.屬性基本格式:[可見性]屬性名[:類型][=初始值]如:+name:string-age:integer#max:integer=1003.方法基本格式:[可見性]方法名[(參數(shù)列表)][:返回類型]如:+pa():boolean說明:在ROSE中+、–、#分別采用直觀的圖形符號來表示注:C++中三種不同的繼承方式的基類和派生類特性參見下表:公有(public)保護(hù)(protected)私有(private)公有(public)繼承+(public)#(protected)×私有(private)繼承-(private)-(private)×保護(hù)(protected)繼承#(protected)#(protected)×其中:注:C++中三種不同的繼承方式的基類和派生類特性參見下54例如:

4.在ROSE中類有三種表達(dá)方式:選中類圖標(biāo)(菜單項的)FormatSuppressAttributes/Opration(制止屬性/操作)例如:4.在ROSE中類有三種表達(dá)方式:選中類圖標(biāo)(菜55說明:ROSE中可見性有以下4種:公有(Public)+受保護(hù)(Protected)#私有(Private)–包內(nèi)公有(Package)~分別采用空白、鑰匙、鎖和榔頭表示。例如:注意:Option-->ShowVisibility:顯示/隱藏可見性。例如:

說明:ROSE中可見性有以下4種:注意:Option-->S56軟件開發(fā)方法與技術(shù)(靜態(tài)模型—類圖對象圖)課件57

二、類的種類及一些符號表示(1)邊界類(BoundaryClass)邊界類:代表了系統(tǒng)和系統(tǒng)外的一些實體(人或設(shè)備)之間的交互的類,它是系統(tǒng)與外界交換信息的媒介,并將系統(tǒng)與系統(tǒng)環(huán)境中的變化隔離開來。例如:窗口、報表、打印機、掃描儀等硬件的界面邊界類UML符號表示有如下3種:二、類的種類及一些符號表示58邊界類在Sterotype(構(gòu)造型)中的設(shè)置:邊界類在Sterotype(構(gòu)造型)中的設(shè)置:59(2)實體類(EntityClass)實體類:是模擬必須被永久存儲的信息和關(guān)聯(lián)行為的類如:文件、數(shù)據(jù)庫等

UML符號表示有如下3種:注:實體類的設(shè)置參照邊界類的設(shè)置,即Sterotype(Entity)(2)實體類(EntityClass)注:實體類的設(shè)置參60

其中:控制類所提供的行為具有以下特點:①確定用例中的控制邏輯(事件順序)和事務(wù)②使用或規(guī)定若干實體類的內(nèi)容,協(xié)調(diào)這些實體類的行為

說明:①每個用例通常有一個控制類,控制用例中的事件順序②控制類一般可采用窗體(Forms)/對話框(Dialog)來實現(xiàn)(3)控制類(ControlClass)控制類:是用來為特定于一個或幾個用例的控制行為的類??刂祁怳ML符號表示有如下3種:注:控制類的設(shè)置參照邊界類的設(shè)置,即Sterotype(Control)其中:控制類所提供的行為具有以下特點:(3)控制類(Co61(4)接口(Interface)是兩個不相關(guān)的實體(系統(tǒng)或構(gòu)件)提供交流途徑的設(shè)備(一組操作的集合

其UML符號表示有如下:

作用:幫助類圖中的類與其他系統(tǒng)或組件或外部設(shè)備進(jìn)行通信。注:接口的設(shè)置參照邊界類的設(shè)置,即Sterotype(Interface)(4)接口(Interface)作用:幫助類圖中的類與其62§3.2類圖(ClassDiagram)

一、類圖的定義類圖是描述類、接口、協(xié)作以及它們之間關(guān)系的圖,用來顯示系統(tǒng)的靜態(tài)結(jié)構(gòu)。

其中:協(xié)作(Collaboration):一個用例或一組用例的工作(實現(xiàn))視圖。協(xié)作的UML符號表示用Stereotype是

use-caserealization類型的用例來表示如下:§3.2類圖(ClassDiagram)一、類圖的63一個協(xié)作包含以下3部分:(1)名稱(2)結(jié)構(gòu)部分:一般用類圖來描述,說明共同工作完成協(xié)作的類、接口和其它元素(3)行為部分:說明關(guān)于這些元素如何交互的動態(tài)特征可用UML的交互圖來描述:順序圖:強調(diào)消息的時間順序協(xié)作圖:強調(diào)對象之間的結(jié)構(gòu)順序

說明:協(xié)作包含的視圖通過在“協(xié)作”的Specification(規(guī)格)→Diagrams(圖)視窗中點擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇插入注:協(xié)作視圖的建立參見下圖。一個協(xié)作包含以下3部分:注:協(xié)作視圖的建立參見下圖。64軟件開發(fā)方法與技術(shù)(靜態(tài)模型—類圖對象圖)課件65二、關(guān)系:

?依賴(Dependence)表示兩個模型元素之間的語義(借用目標(biāo)元素的功能,而不是結(jié)構(gòu))關(guān)系,它說明一個模型元素的變化可能影響到使用它的另一個模型元素。

例如:設(shè)X、Y是兩個類,如果修改Y的定義可能會導(dǎo)致對X的修改,則稱類X依賴類Y。依賴關(guān)系圖形表示為:例如:充電電池和充電器,充電電池通過充電器來充電自行車和打氣筒,自行車通過打氣筒來充氣則Bicycle類與Pump類的類圖:二、關(guān)系:例如:充電電池和充電器,充電電池通過充電器來充電66classCPeople//人類{public:CBicyclemyBicycle;CPumpmyPump;voidPumpToBicycle(){myBicycle.Expand(&myPump);}}

說明:依賴關(guān)系在實現(xiàn)中,目標(biāo)對象不出現(xiàn)在源對象的屬性結(jié)構(gòu)中,通常采用目標(biāo)對象作為源對象方法的參數(shù)來使用。例如,上例的模擬實現(xiàn)代碼為:classCBicycle//自行車類classCPump//打氣筒類{{public:/*給輪胎充氣*/public:/*打氣筒充氣*/

voidExpand(CPump*Pp)voidBlow(){{Pp->Blow();//使用該打氣筒給自行車充氣

}}}}classCPeople//人類說明:classCBi67classCPump//打氣筒類{public:/*打氣筒充氣*/

voidBlow(){

printf("

%s\n","…使用該打氣筒給自行車充氣…");}}

#include"stdafx.h"#include"People.h"intmain(){CPeoplePbe;Pbe.PumpToBicycle();return0;}編寫主函數(shù)main()如下:

如果把CPump類改寫成:運行結(jié)果classCPump//打氣筒類#include"68?泛化(Generalization)同前是一般到特殊之間的關(guān)系(派生/繼承關(guān)系)

說明:泛化關(guān)系是在現(xiàn)有類的基礎(chǔ)上定義和實現(xiàn)一個新類的技術(shù)(復(fù)用技術(shù))。泛化關(guān)系圖形表示為:例如:即:?泛化(Generalization)例如:即:69C++描述如下:

classCAutomobile{……}classCCar:CAutomobile{……}classCLorry:CAutomobile{……}C++描述如下:classCAutomobi70關(guān)聯(lián)關(guān)系(Association)關(guān)聯(lián)關(guān)系表示兩個類之間“結(jié)構(gòu)+語義(行為)”的關(guān)系

其圖形表示為:雙向關(guān)聯(lián)單向關(guān)聯(lián)

例如:關(guān)聯(lián)關(guān)系(Association)例如:71classClassWclassClassA

classClassB{{{………………

public:public:public:

ClassAa;voidaFun()voidbFun()

ClassB*b;{{…………

……public:}}voidwFun()…………{}}a.aFun();b=new(ClassB);b->bFun();

}……}

對應(yīng)的C++實現(xiàn)有以下兩種方式:classClassW72說明:在類的方法(函數(shù))內(nèi)部臨時聲明類對象之討論classClassWclassClassA

classClassB{{{………………

public:public:public:

ClassAa;//關(guān)聯(lián)voidaFun()voidbFun()

……{{public:……

……voidwFun()}}{…………ClassBb;}}a.aFun();b.bFun();

}……}顯然,這是一種介于關(guān)聯(lián)和依賴關(guān)系之間的編碼方式,在建模中既可使用關(guān)聯(lián)關(guān)系也可使用依賴關(guān)系,我們規(guī)定使用“依賴關(guān)系”//依賴說明:在類的方法(函數(shù))內(nèi)部臨時聲明類對象之討論cl73關(guān)聯(lián)的修飾:⑴名稱:用來描述關(guān)聯(lián)的性質(zhì)。說明:關(guān)聯(lián)名稱應(yīng)使用動詞短語,因為它表明源對象正在目標(biāo)對象上執(zhí)行動作。關(guān)聯(lián)名稱的添加如圖:關(guān)聯(lián)的修飾:74作用:為未來如下設(shè)計做鋪墊classStudent classUniversity{ {public:public:

University

u;void

uTeach();//教師授課…………voidsStudy();//學(xué)生學(xué)習(xí)}

…… }voidStudent::sStudy(){……u.uTeach();//學(xué)生通過大學(xué)里的教師授課來學(xué)習(xí)

……}作用:為未來如下設(shè)計做鋪墊classStudent75⑵角色:一個類在關(guān)聯(lián)中所扮演的角色說明:角色名稱應(yīng)使用名詞或名詞短語。關(guān)聯(lián)角色的添加如圖:作用:為未來如下分析做鋪墊:

為未來如下設(shè)計做鋪墊⑵角色:一個類在關(guān)聯(lián)中所扮演的角色為未來如下設(shè)計做鋪76

⑶多重性多重性表示一個類的一個實例與另一個類的幾個實例相關(guān)聯(lián)。多重性語法表示:

修飾語義0..10或11恰為10..n或0..*0或更多1..n或1..*1或更多n或*0或更多1..51至5個例如:⑶多重性修飾語義077多重性的添加如圖:作用:為未來如下分析、設(shè)計做鋪墊多重性的添加如圖:作用:為未來如下分析、設(shè)計做鋪墊78聚合關(guān)系(Aggregation)

聚合關(guān)系表示類間的關(guān)系是整體與部分的結(jié)構(gòu)關(guān)系。C++描述:classClassW{……private:classClassU{……}u;classClassV{……

}v;……}UML描述:例:聚合關(guān)系(Aggregation)C++描述:class79實現(xiàn)(Realize):

是一種語義關(guān)系,表示一個事物只繼承另一個事物的行為,而不繼承結(jié)構(gòu)。實現(xiàn)關(guān)系圖形表示如下:

說明:

⑴UML用實現(xiàn)關(guān)系來建立接口和實現(xiàn)接口的類或組件之間的關(guān)系或:或:實現(xiàn)(Realize):說明:或:或:80⑵而通過“接口”訪問“實現(xiàn)接口的類”的類和接口之間的關(guān)系是依賴關(guān)系??匆粋€例子:注意:在這里實現(xiàn)接口的類自動繼承了接口類的函數(shù)⑵而通過“接口”訪問“實現(xiàn)接口的類”的類和接口之間的關(guān)系81#include<unknwn.h>//此頭文件中有interface定義interfaceIInterface//接口類的聲明{//下面兩條語句聲明兩個接口函數(shù)(純虛函數(shù))virtualintiFunction()=0;virtualintiMethod()=0;};classCRealizeInterface:publicIInterface//實現(xiàn)接口類的定義,繼承接口類{public://實現(xiàn)接口部分

intiFunction(){Function();return0;}intiMethod(){Method();return0;}private://內(nèi)部工作部分

voidFunction(){printf("%s\n","通過接口IInterface::iFunction()調(diào)用CRealizeInterface::Function()成功!");

}voidMethod(){

printf("%s\n","通過接口IInterface::iMethod()調(diào)用CRealizeInterface::Method()成功!");}};上述關(guān)系圖的C++實現(xiàn):#include<unknwn.h>//此頭文件中有82classCVisitRealizeInterface//通過“接口類”訪問“實現(xiàn)接口類”的類的定義{public:voidVFunction_Method(){IInterface*IPoint;IPoint=newCRealizeInterface;IPoint->iFunction();IPoint->iMethod();}};intmain()//主函數(shù){CVisitRealizeInterfacevri;vri.VFunction_Method();return0;}classCVisitRealizeInterface83實現(xiàn)的運行結(jié)果:實現(xiàn)的運行結(jié)果:84§3.3類圖建模技術(shù)

一、為機制(較大范圍的協(xié)作)建模機制:代表了需要被模擬的部分系統(tǒng)的功能和行為,這些功能和行為是由類、接口等元素交互作用產(chǎn)生的。機制建模步驟:1.確定要為之建模的機制。2.對于每個機制,確定參與這個機制的類、接口和其他的機制。3.確定這些元素間的關(guān)系。4.根據(jù)機制的腳本,發(fā)現(xiàn)遺漏的模型部分,以及簡單的語義錯誤。腳本是描述機制的對象間動態(tài)行為的圖,如狀態(tài)圖等5.確定對象的屬性和操作。

例:基于“圖書管理系統(tǒng)”的用例圖我們按步驟進(jìn)行分析§3.3類圖建模技術(shù)一、為機制(較大范圍的協(xié)作)建模85邊界邊界Query

(查詢)邊界邊界邊界Query邊界861.確定機制。根據(jù)機制(協(xié)作)的定義(模擬部分系統(tǒng)的功能和行為),顯然可得到如下機制(協(xié)作):總體機制讀者機制工作人員機制管理人員機制2.確定參與每個機制的類

⑴考慮系統(tǒng)邊界,基于“用例圖之“參與者─>用例”建立邊界類

基于業(yè)務(wù)人員機制,邊界類有:業(yè)務(wù)員登錄窗口業(yè)務(wù)窗口:為操作“借書”和“還書”用例設(shè)置的邊界類基于讀者機制,邊界類有:查詢窗口:為操作“查詢圖書”和“查詢借閱情況”用例設(shè)置的邊界類基于管理人員機制,邊界類有:管理員登錄窗口管理窗口:為操作“維護(hù)圖書”和“維護(hù)讀者”用例設(shè)置的公共邊界類

1.確定機制。根據(jù)機制(協(xié)作)的定義(模擬部分系統(tǒng)的功能和87⑵考慮問題域,建立實體類(數(shù)據(jù)庫/文件)借閱者:教工借閱者、學(xué)生借閱者借閱圖書文件圖書圖書借閱明細(xì)借閱歷史檔案

工作人員⑶考慮系統(tǒng)責(zé)任,基于“用例圖---用例”建立控制類

借書業(yè)務(wù):實現(xiàn)“借書”用例操作控制類還書業(yè)務(wù):實現(xiàn)“還書”用例操作控制類

查詢:實現(xiàn)“查詢”用例操作控制類注冊圖書、更新圖書:實現(xiàn)“維護(hù)圖書”用例操作控制類注冊讀者、注冊讀者:實現(xiàn)“維護(hù)讀者”用例操作控制類注意:用子窗體/對話框來實現(xiàn)

⑷考慮同外部系統(tǒng)或組件的聯(lián)系,確定接口類無?、瓶紤]問題域,建立實體類(數(shù)據(jù)庫/文件)88類類名類類名邊界類:實體類:業(yè)務(wù)員登錄窗口LibrarianLogin借閱者ReaderInf管理員登錄窗口Adm

溫馨提示

  • 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

提交評論