?在UML類圖中,常見(jiàn)的有以下幾種關(guān)系:?泛化(Generalization),??實(shí)現(xiàn)(Realization)赴蝇,關(guān)聯(lián)(Association)滩租,聚合(Aggregation)角溃,組合(Composition)颗圣,依賴(Dependency)
?1.?泛化(Generalization)
? ? ? ? 【泛化關(guān)系】:是一種繼承關(guān)系喳钟,表示一般與特殊的關(guān)系屁使,它指定了子類如何特化父類的所有特征和行為。例如:老虎是動(dòng)物的一種奔则,即有老虎的特性也有動(dòng)物的共性蛮寂。
????????【箭頭指向】:帶三角箭頭的實(shí)線,箭頭指向父類
? ? ? ? 2.?實(shí)現(xiàn)(Realization)
????????【實(shí)現(xiàn)關(guān)系】:是一種類與接口的關(guān)系易茬,表示類是接口所有特征和行為的實(shí)現(xiàn).
????????【箭頭指向】:帶三角箭頭的虛線酬蹋,箭頭指向接口
? ? ? ? 3.?關(guān)聯(lián)(Association)
????????【關(guān)聯(lián)關(guān)系】:是一種擁有的關(guān)系,它使一個(gè)類知道另一個(gè)類的屬性和方法抽莱;如:老師與學(xué)生范抓,丈夫與妻子關(guān)聯(lián)可以是雙向的,也可以是單向的食铐。雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒(méi)有箭頭匕垫,單向的關(guān)聯(lián)有一個(gè)箭頭。
????????【代碼體現(xiàn)】:成員變量
????????【箭頭及指向】:帶普通箭頭的實(shí)心線璃岳,指向被擁有者
? ? ? ? 上圖中年缎,老師與學(xué)生是雙向關(guān)聯(lián)悔捶,老師有多名學(xué)生铃慷,學(xué)生也可能有多名老師。但學(xué)生與某課程間的關(guān)系為單向關(guān)聯(lián)蜕该,一名學(xué)生可能要上多門課程犁柜,課程是個(gè)抽象的東西他不擁有學(xué)生。?
????????下圖為自身關(guān)聯(lián):?
? ? ? ? 4.?聚合(Aggregation)
????????【聚合關(guān)系】:是整體與部分的關(guān)系堂淡,且部分可以離開(kāi)整體而單獨(dú)存在馋缅。如車和輪胎是整體和部分的關(guān)系,輪胎離開(kāi)車仍然可以存在绢淀。
????????聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種萤悴,是強(qiáng)的關(guān)聯(lián)關(guān)系;關(guān)聯(lián)和聚合在語(yǔ)法上無(wú)法區(qū)分皆的,必須考察具體的邏輯關(guān)系覆履。
????????【代碼體現(xiàn)】:成員變量
????????【箭頭及指向】:帶空心菱形的實(shí)心線,菱形指向整體
? ? ? ? 5.?組合(Composition)
????????【組合關(guān)系】:是整體與部分的關(guān)系费薄,但部分不能離開(kāi)整體而單獨(dú)存在硝全。如公司和部門是整體和部分的關(guān)系,沒(méi)有公司就不存在部門楞抡。
???????組合關(guān)系是關(guān)聯(lián)關(guān)系的一種伟众,是比聚合關(guān)系還要強(qiáng)的關(guān)系,它要求普通的聚合關(guān)系中代表整體的對(duì)象負(fù)責(zé)代表部分的對(duì)象的生命周期召廷。
【代碼體現(xiàn)】:成員變量
【箭頭及指向】:帶實(shí)心菱形的實(shí)線凳厢,菱形指向整體
? ? ? ? 6.?依賴(Dependency)
????????【依賴關(guān)系】:是一種使用的關(guān)系账胧,即一個(gè)類的實(shí)現(xiàn)需要另一個(gè)類的協(xié)助,所以要盡量不使用雙向的互相依賴.
????????【代碼表現(xiàn)】:局部變量先紫、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用
????????【箭頭及指向】:帶箭頭的虛線找爱,指向被使用者
? ? ? ? 各種關(guān)系的強(qiáng)弱順序:
? ? ? ? ? ?泛化?=?實(shí)現(xiàn)?>?組合?>?聚合?>?關(guān)聯(lián)?>?依賴
????????下面這張UML圖,比較形象地展示了各種類圖關(guān)系:
Powerdesigner 畫圖
面向?qū)ο竽P?/p>
? 面向?qū)ο竽P褪抢肬ML(統(tǒng)一建模語(yǔ)言)的圖形來(lái)描述系統(tǒng)結(jié)構(gòu)的模型泡孩,它從不同角度實(shí)現(xiàn)系統(tǒng)的工作狀態(tài)车摄。這些圖形有助于用戶,管理人員仑鸥,系統(tǒng)分析人員吮播,開(kāi)發(fā)人員,測(cè)試人員和其他人員之間進(jìn)行信息交流眼俊。這里主要介紹用例圖意狠,序列圖和類圖。
? 1.面向?qū)ο竽P蚈OM
??? 面向?qū)ο竽P褪抢肬ML的圖形描述系統(tǒng)結(jié)構(gòu)的模型疮胖,可以利用PowerDesigner的面向?qū)ο竽P瓦M(jìn)行創(chuàng)建环戈。PowerDesigner支持UML的下列圖形。
用例圖(User Case Diagram):通常用來(lái)定義系統(tǒng)的高層次草圖澎灸,它從用戶角度描述了應(yīng)用的系統(tǒng)功能院塞,指出了各個(gè)功能的外部操作者。
序列圖(Sequence Diagram):描述系統(tǒng)如何實(shí)際完成在User Case圖中定義的功能性昭±怪梗可以畫出對(duì)象(類的實(shí)例)之間交互時(shí)產(chǎn)生的時(shí)序關(guān)系。
類圖(Class Diagram):描述類與類之間的靜態(tài)關(guān)系糜颠。其中包括一系列的包汹族,類,接口和它們之間的關(guān)系其兴。類圖是定義其他圖的基礎(chǔ)顶瞒。
? 2.創(chuàng)建面向?qū)ο竽P?/b>
(1)選擇File-New Model命令或者單擊工具欄中的New Model圖標(biāo)
,彈出New Model窗口元旬。
??? (2)在左側(cè)是Model type欄中選擇Object-Oriented Model(面向?qū)ο竽P?選項(xiàng)榴徐,在右側(cè)輸入模型名稱,語(yǔ)言法绵,如圖8-1所示箕速。
? ? (3)單擊“確定”按鈕,進(jìn)入OOM設(shè)計(jì)工作區(qū)朋譬。在該工作區(qū)中可以定義OOM的屬性和操作盐茎,也可以設(shè)計(jì)各種UML的圖形。
??? (4)選擇Model-Model Properties命令徙赢,顯示如圖8-2所示OOM的Model Properties窗口字柠。
? ? (5)定義完畢后單擊“確定”按鈕探越。然后選擇File-Save As命令,以PubInfoSys.OOM這個(gè)名稱將所定義的模型存盤窑业。
??? (6)設(shè)置模型的選擇钦幔。選擇Tools-Model Options命令,打開(kāi)Model Options(模型選項(xiàng))窗口常柄。如圖8-3所示鲤氢。
? ?(7)單擊Set As Default按鈕,設(shè)置為默認(rèn)選項(xiàng)西潘,然后單擊OK按鈕卷玉。
?3.設(shè)計(jì)用例圖
?? 3.1 用例圖用于系統(tǒng)需求分析階段,進(jìn)行系統(tǒng)需求和功能設(shè)計(jì)喷市,它包含執(zhí)行者和用例兩個(gè)要素相种。執(zhí)行者指用戶在系統(tǒng)中的角色,用例是用戶與計(jì)算機(jī)的一次交互品姓。用例圖主要用來(lái)描述每個(gè)用例將有哪些執(zhí)行者進(jìn)行參與寝并。
定義用例:用例是外部可見(jiàn)的一個(gè)系統(tǒng)功能單元,這些功能由系統(tǒng)單元提供腹备,通過(guò)一系列單元與一個(gè)或多個(gè)參與者之間交換的消息表達(dá)衬潦。?
定義角色:角色描述了與系統(tǒng)相互作用的一組用戶,最明顯的角色是系統(tǒng)中的人馏谨,但也可能是系統(tǒng)本身别渔。
定義關(guān)聯(lián):用例除了與其參與者發(fā)生關(guān)聯(lián)外,還可以參與系統(tǒng)中的多個(gè)關(guān)系惧互,允許定義的關(guān)聯(lián)有關(guān)聯(lián),擴(kuò)展喇伯,用例泛化喊儡,包括。
? 3.2定義用例圖
??? 定義用例圖如下:
(1)單擊“用例”圖標(biāo)
定義4個(gè)用例稻据,如圖8-4所示艾猜。
?(2)選中第一個(gè)用例雙擊,打開(kāi)Use Case Properties(用例屬性)窗口捻悯,將Name屬性修改為“查找”匆赃,將Code屬性修改為Search,如圖8-5所示。
(3)利用同樣的方法今缚,修改其他3個(gè)用例屬性如圖8-6所示算柳。
(4)單擊“執(zhí)行者”圖標(biāo)
定義3個(gè)執(zhí)行者,如圖8-7所示姓言。
圖8-7
??? (5)選中第一個(gè)執(zhí)行者并雙擊瞬项,打開(kāi)Actor Properties窗口蔗蹋,將Name屬性修改為“顧客”,將Code屬性修改為Buyer囱淋,如圖8-8所示猪杭。
??? (6)利用同樣的方法,修改其他兩個(gè)執(zhí)行者的屬性妥衣。
(7)定義執(zhí)行者和用例之間的關(guān)系皂吮。單擊“關(guān)系”圖標(biāo)
,再單擊執(zhí)行者“顧客”并拖動(dòng)鼠標(biāo)至用例“查找”税手,釋放鼠標(biāo)涮较,這時(shí)在執(zhí)行者和用例之間建立了關(guān)系。雙擊該關(guān)系冈止,打開(kāi)Association Properties窗口狂票,將Name屬性修改為“查詢商品”,將Code屬性修改為SearchProduct熙暴。
??? (8)按照步驟(7)的方法闺属,在其他執(zhí)行者和用例之間建立關(guān)系。
??? (9)定義完成后的用例圖如圖8-9所示周霉。
?4設(shè)計(jì)序列圖
??? 4.1序列圖(Sequence Diagram)是用來(lái)描述系統(tǒng)如何實(shí)現(xiàn)完成在Use Case圖中定義的功能掂器。可以畫出對(duì)象之間的交互時(shí)產(chǎn)生的時(shí)序關(guān)系俱箱。它一方面描述了一次交互国瓮,交互中涉及類圖中的類,另一方面細(xì)化了用例的描述狞谱。
??? 序列圖有角色(Actor),對(duì)象(Object)乃摹,消息(Message)和激活期(Activation)幾個(gè)要素如果8-10所示。
????? 消息類型有:
Message:消息
Slef Message 遞歸消息
Call Message帶有激活期的消息
Self Call Message帶有激活期的遞歸消息
Return Message返回消息
Self Return Message遞歸返回消息
? 4.2創(chuàng)建序列圖
??? (1)選擇File-New Model命令跟衅,打開(kāi)New Model窗口孵睬。在窗口左側(cè)的Mode type欄選擇Object-Oriented Model選項(xiàng),在右側(cè)的First diagram下拉列表框中選擇Sequence Diagram選項(xiàng)伶跷,在Object language下拉框中選擇Java選項(xiàng)掰读,如圖8-11所示。
(2)選擇完畢后單擊“確定”按鈕叭莫,進(jìn)入PowerDesigner設(shè)計(jì)工作區(qū)蹈集。
(3)單擊Palette工具欄的Object圖標(biāo)
,在右邊空白工作區(qū)單擊鼠標(biāo)雇初,出現(xiàn)對(duì)象符號(hào)如圖8-12所示拢肆。
??? (4)在設(shè)計(jì)區(qū)空白區(qū)域右擊,鼠標(biāo)指針變?yōu)榧^形狀,雙擊對(duì)象符號(hào)善榛,彈出Actor Properties窗口辩蛋,在Name文本框中輸入"呼叫方",在Code文本框中輸入“Caller”,然后單擊“確定”按鈕移盆。
??? (5)重復(fù)步驟(3)(4),添加其他兩個(gè)對(duì)象悼院,Name分別為“交換機(jī)”和“被叫方”,Code分別為Exchange和Receiver咒循。
(6)單擊Palette工具欄中的Message圖標(biāo)
据途,在“呼叫方”對(duì)象下方的虛線處單擊,拖動(dòng)鼠標(biāo)至“交換機(jī)”對(duì)象下方的虛線釋放鼠標(biāo)叙甸,即可增加一個(gè)消息颖医。
??? (7)在設(shè)計(jì)區(qū)空白區(qū)域右擊,鼠標(biāo)指針變成箭頭形狀裆蒸,雙擊對(duì)象符號(hào)熔萧,彈出“消息屬性”窗口,在Name文本框中輸入“拿起話筒”僚祷,在Code文本框中輸入“Lift Reciever”,然后單擊“確定”按鈕佛致。
??? (8)重復(fù)(6)(7),添加其他消息。
??? (9)最終的序列圖如圖8-13所示辙谜。
??? (10)選擇File-Save命令俺榆,保存新建的面向?qū)ο竽P?/p>
?5設(shè)計(jì)類圖
? 類圖是用一種抽象的方法來(lái)描述對(duì)象及對(duì)象之間的關(guān)系,并不能描述對(duì)象的所有細(xì)節(jié)装哆。
??? 5.1創(chuàng)建Class(類)
??? (1)選擇File-New Model命令罐脊,打開(kāi)New Model窗口。在窗口左側(cè)的Mode type欄選擇Object-Oriented Model選項(xiàng)蜕琴,在右側(cè)的First diagram下拉列表框中選擇Class Diagram選項(xiàng)萍桌,在Object language下拉框中選擇Java選項(xiàng),如圖8-14所示奸绷。
??? (2)在類圖工作區(qū)中單擊Palette工具欄中的Class圖標(biāo)梗夸,創(chuàng)建一個(gè)類,雙擊類圖的圖形符號(hào)号醉,打開(kāi)Class Properties窗口。
??? (3)選擇Detail選項(xiàng)卡辛块,可以定義類的更多屬性畔派。
??? (4)選擇Attributes選項(xiàng)卡,可以為類增加屬性润绵。單擊Add a Row圖標(biāo)线椰,增加屬性,也可以單擊Add Attributes圖標(biāo)打開(kāi)Selection窗口列表模型中其他類的屬性尘盼,選擇需要的屬性憨愉,然后單擊“OK”按鈕即可烦绳。
??? (5)選擇Operations選項(xiàng)卡,單擊Add Operation圖標(biāo)配紫,打開(kāi)Selection窗口径密,從中可以選擇該模型中其他類包含的操作。選擇完畢后躺孝,單擊OK按鈕享扔,所選的操作即可增加到當(dāng)前類上。
??? (6)選擇Inner Classifies選項(xiàng)卡植袍,可以為該類定義內(nèi)部類惧眠。內(nèi)部類是PowerDesigner的一個(gè)分類器,在UML中分類器是一個(gè)包含有屬性和操作等的模型元素于个。定義完畢后可以通過(guò)Preview選項(xiàng)卡觀察當(dāng)前類或接口所包含的內(nèi)部類代碼氛魁,如圖8-15所示。
??? (7)除了以上屬性外厅篓,還可以定義Associations,Identifies等屬性秀存。屬性定義完畢后創(chuàng)建的內(nèi)容如圖8-16所示。
? 5.2創(chuàng)建聯(lián)系
? 在類圖中贷笛,聯(lián)系有關(guān)聯(lián)应又,依賴,泛化和實(shí)現(xiàn)聯(lián)系乏苦。
? 6.生成Java的源代碼
? 如圖8-17所示類圖株扛,生成Java源代碼。
? (1)在類圖中選擇Language-Generate Java Code命令汇荐,打開(kāi)Generation窗口洞就,顯示模型中包含的類。
? (2)在Selection選項(xiàng)卡的Classes選項(xiàng)卡中選擇類掀淘,在Directory欄中輸入Java源代碼的目標(biāo)路徑旬蟋。
? (3)在Options選項(xiàng)卡中定義Java生成選項(xiàng)。
? (4)在Tasks選項(xiàng)卡中定義Java生成任務(wù)選項(xiàng)革娄,如圖8-18所示倾贰。
? (5)單擊“確定”按鈕,開(kāi)始生成Java源文件拦惋,生成完成顯示Generated Files窗口匆浙。
? (6)選擇一個(gè)源文件,單擊Edit按鈕厕妖,將在文本編輯器中顯示該文件的內(nèi)容首尼。如圖8-19所示。
? 7.根據(jù)Java代碼生成類圖
? ?(1)選擇File-Reverse Engineer-Object Language彈出如圖8-20所示。
? ?(2)在Object language欄選擇Java,單擊確定進(jìn)入如下界面软能,如圖8-21所示迎捺。
? ?(3)點(diǎn)擊Add,添加Java文件查排,再單擊確定即可生成相應(yīng)的Java類圖(在Reverse engineer欄中還可以選擇Java字節(jié)碼文件或文件目錄),如圖8-23所示凳枝。