版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、UML類圖關(guān)系大全,Association in class diagrams ,課本: 軟件工程張海藩 編著,人民郵電出版社 圖書(shū)館編號(hào): TP311.5 Z111,泛化(Generalization) 類與類的繼承關(guān)系,類與接口的實(shí)現(xiàn)關(guān)系。 場(chǎng)景: 父與子、動(dòng)物與人、植物與樹(shù)、系統(tǒng)使用者與B2C會(huì)員和B2E會(huì)員的關(guān)系,系統(tǒng)的使用者包括:B2C會(huì)員、B2B會(huì)員和B2E會(huì)員。他們都是系統(tǒng)使用者。,類與類之間的泛化圖,Pizza is a food. A Pizza has ingredients, tomato, pepper, mushroom, a cost, and a price. p
2、ublic class Pizza extends Food /is-a relationship int ingredients; Tomato t; Peper p; Mushroom m; double cost; double price; . ,汽車是一種交通工具: 汽車 is-a 交通工具 汽車有一個(gè)發(fā)動(dòng)機(jī): 汽車 has-a 發(fā)動(dòng)機(jī) is-a 一般是繼承關(guān)系 has-a 一般是組合關(guān)系,public class car extends Vehicle Engine engine; Cartwheel cartwheel; SteeringWheel swheel; Tyre ty
3、re; ,使用ROSE 生成的代碼是這樣的: classC1 . public: C2*theC2; ; classC2 . public: C1*theC1; ; 雙向關(guān)聯(lián)在代碼的表現(xiàn)為雙方都擁有對(duì)方的一個(gè)指針,當(dāng)然也可以是引用或者是值。,1、關(guān)聯(lián),雙向關(guān)聯(lián):C1-C2:指雙方都知道對(duì)方的存在,都可以調(diào)用對(duì)方的公共屬性和方法。,Association,單向關(guān)聯(lián):C3-C4:表示相識(shí)關(guān)系,指C3知道C4,C3可以調(diào)用C4的公共屬性和方法。沒(méi)有生命期的依賴。一般是表示為一種引用。生成代碼如下: classC3 . public: C4*theC4; ; classC4 . ; 單向關(guān)聯(lián)的代碼就表
4、現(xiàn)為C3有C4的指針,而C4對(duì)C3一無(wú)所知。,自身關(guān)聯(lián)(反身關(guān)聯(lián)):自己引用自己,帶著一個(gè)自己的引用。代碼如下: classC14 public: C14*theC14; ; 就是在自己的內(nèi)部有著一個(gè)自身的引用。,當(dāng)類之間有整體-部分關(guān)系的時(shí)候,我們就可以使用組合或者聚合。聚合:表示C9聚合C10,但是C10可以離開(kāi)C9而獨(dú)立存在(獨(dú)立存在的意思是在某個(gè)應(yīng)用的問(wèn)題域中這個(gè)類的存在有意義。這句話怎么解,請(qǐng)看下面組合里的解釋)。代碼如下: classC9 . public: C10theC10; ; classC10 . ;,組合(也有人稱為包容):一般是實(shí)心菱形加實(shí)線箭頭表示,如上圖所示,表示的
5、是C8被C7包容,而且C8不能離開(kāi)C7而獨(dú)立存在。但這是視問(wèn)題域而定的,例如在關(guān)心汽車的領(lǐng)域里,輪胎是一定要組合在汽車類中的,因?yàn)樗x開(kāi)了汽車就沒(méi)有意義了。但是在賣輪胎的店鋪業(yè)務(wù)里,就算輪胎離開(kāi)了汽車,它也是有意義的,這就可以用聚合了。在敏捷開(kāi)發(fā)中還說(shuō)到,A組合B,則A需要知道B的生存周期,即可能A負(fù)責(zé)生成或者釋放B,或者A通過(guò)某種途徑知道B的生成和釋放。 classC7 . public: C8theC8; ; classC8 . ; 可以看到,代碼和聚合是一樣的。具體如何區(qū)別,可能就只能用語(yǔ)義來(lái)區(qū)分了。,依賴:指C5可能要用到C6的一些方法,也可以這樣說(shuō),要完成C5里的所有功能,一定要有C
6、6的方法協(xié)助才行。C5依賴于C6的定義,一般是在C5類的頭文件中包含了C6的頭文件。ROSE對(duì)依賴關(guān)系不產(chǎn)生屬性。注意,要避免雙向依賴。一般來(lái)說(shuō),不應(yīng)該存在雙向依賴。,In UML, a dependency relationship is a relationship in which one element, the client, uses or depends on another element, the supplier. You can use dependency relationships in class diagrams, component diagrams, depl
7、oyment diagrams, and use-case diagrams to indicate that a change to the supplier might require a change to the client.,In an e-commerce application, a Cart class depends on a Product class because the Cart class uses the Product class as a parameter for an add operation. In a class diagram, a depend
8、ency relationship points from the Cart class to the Product class. As the following figure illustrates, the Cart class is, therefore, the client, and the Product class is the supplier.,泛化關(guān)系:如果兩個(gè)類存在泛化的關(guān)系時(shí)就使用,例如父和子,動(dòng)物和老虎,植物和花等。ROSE生成的代碼很簡(jiǎn)單,如下: #includeC11.h classC12:publicC11 . ;,1. 類(Classes) 類包含3個(gè)組成
9、部分。第一個(gè)是Java中定義的類名。第二個(gè)是屬性(attributes)。第三個(gè)是該類提供的方法。 屬性和操作之前可附加一個(gè)可見(jiàn)性修飾符。加號(hào)(+)表示具有公共可見(jiàn)性。減號(hào)(-)表示私有可見(jiàn)性。#號(hào)表示受保護(hù)的可見(jiàn)性。省略這些修飾符表示具有package(包)級(jí)別的可見(jiàn)性。如果屬性或操作具有下劃線,表明它是靜態(tài)的。在操作中,可同時(shí)列出它接受的參數(shù),以及返回類型,2. 包(Package) 包是一種常規(guī)用途的組合機(jī)制。UML中的一個(gè)包直接對(duì)應(yīng)于Java中的一個(gè)包。在Java中,一個(gè)包可能含有其他包、類或者同時(shí)含有這兩者。進(jìn)行建模時(shí),你通常擁有邏輯性的包,它主要用于對(duì)你的模型進(jìn)行組織。你還會(huì)擁有物
10、理性的包,它直接轉(zhuǎn)換成系統(tǒng)中的Java包。每個(gè)包的名稱對(duì)這個(gè)包進(jìn)行了惟一性的標(biāo)識(shí)。,3. 接口(Interface) 接口是一系列操作的集合,它指定了一個(gè)類所提供的服務(wù)。它直接對(duì)應(yīng)于Java中的一個(gè)接口類型。接口既可用下面的那個(gè)圖標(biāo)來(lái)表示(上面一個(gè)圓圈符號(hào),圓圈符號(hào)下面是接口名,中間是直線,直線下面是方法名),也可由附加了的一個(gè)標(biāo)準(zhǔn)類來(lái)表示。通常,根據(jù)接口在類圖上的樣子,就能知道與其他類的關(guān)系。,1. 依賴(Dependency) 實(shí)體之間一個(gè)“使用”關(guān)系暗示一個(gè)實(shí)體的規(guī)范發(fā)生變化后,可能影響依賴于它的其他實(shí)例。更具體地說(shuō),它可轉(zhuǎn)換為對(duì)不在實(shí)例作用域內(nèi)的一個(gè)類或?qū)ο蟮娜魏晤愋偷囊谩F渲邪ㄒ?/p>
11、個(gè)局部變量,對(duì)通過(guò)方法調(diào)用而獲得的一個(gè)對(duì)象的引用(如下例所示),或者對(duì)一個(gè)類的靜態(tài)方法的引用(同時(shí)不存在那個(gè)類的一個(gè)實(shí)例)。也可利用“依賴”來(lái)表示包和包之間的關(guān)系。由于包中含有類,所以你可根據(jù)那些包中的各個(gè)類之間的關(guān)系,表示出包和包的關(guān)系。,關(guān)系,2. 關(guān)聯(lián)(Association) 實(shí)體之間的一個(gè)結(jié)構(gòu)化關(guān)系表明對(duì)象是相互連接的。箭頭是可選的,它用于指定導(dǎo)航能力。如果沒(méi)有箭頭,暗示是一種雙向的導(dǎo)航能力。在Java中,關(guān)聯(lián)轉(zhuǎn)換為一個(gè)實(shí)例作用域的變量,就像圖E的“Java”區(qū)域所展示的代碼那樣??蔀橐粋€(gè)關(guān)聯(lián)附加其他修飾符。多重性(Multiplicity)修飾符暗示著實(shí)例之間的關(guān)系。在示范代碼中,
12、Employee可以有0個(gè)或更多的TimeCard對(duì)象。但是,每個(gè)TimeCard只從屬于單獨(dú)一個(gè)Employee。,3. 聚合(Aggregation) 聚合是關(guān)聯(lián)的一種形式,代表兩個(gè)類之間的整體/局部關(guān)系。聚合暗示著整體在概念上處于比局部更高的一個(gè)級(jí)別,而關(guān)聯(lián)暗示兩個(gè)類在概念上位于相同的級(jí)別。聚合也轉(zhuǎn)換成Java中的一個(gè)實(shí)例作用域變量。 關(guān)聯(lián)和聚合的區(qū)別純粹是概念上的,而且嚴(yán)格反映在語(yǔ)義上。聚合還暗示著實(shí)例圖中不存在回路。換言之,只能是一種單向關(guān)系。,4. 合成(Composition) 合成是聚合的一種特殊形式,暗示“局部”在“整體”內(nèi)部的生存期職責(zé)。合成也是非共享的。所以,雖然局部不一
13、定要隨整體的銷毀而被銷毀,但整體要么負(fù)責(zé)保持局部的存活狀態(tài),要么負(fù)責(zé)將其銷毀。 局部不可與其他整體共享。但是,整體可將所有權(quán)轉(zhuǎn)交給另一個(gè)對(duì)象,后者隨即將承擔(dān)生存期職責(zé)。Employee和TimeCard的關(guān)系或許更適合表示成“合成”,而不是表示成“關(guān)聯(lián)”。,5. 泛化(Generalization) 泛化表示一個(gè)更泛化的元素和一個(gè)更具體的元素之間的關(guān)系。泛化是用于對(duì)繼承進(jìn)行建模的UML元素。在Java中,用extends關(guān)鍵字來(lái)直接表示這種關(guān)系。,6. 實(shí)現(xiàn)(Realization) 實(shí)例關(guān)系指定兩個(gè)實(shí)體之間的一個(gè)合同。換言之,一個(gè)實(shí)體定義一個(gè)合同,而另一個(gè)實(shí)體保證履行該合同。對(duì)Java應(yīng)用程序進(jìn)行建模時(shí),實(shí)現(xiàn)關(guān)系可直接
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)內(nèi)部保密工作規(guī)劃制度
- 2026湖南長(zhǎng)沙市星斗工程醫(yī)衛(wèi)類市屬單位碩博人才選拔入圍考察人員參考題庫(kù)附答案
- 2026福建廈門(mén)市集美區(qū)雙嶺小學(xué)產(chǎn)假頂崗教師招聘1人參考題庫(kù)附答案
- 2026福建省標(biāo)準(zhǔn)化研究院下屬國(guó)有企業(yè)第一批人員招聘5人參考題庫(kù)附答案
- 2026福建福州左海眾凱科技有限責(zé)任公司招聘2人備考題庫(kù)附答案
- 2026西安交通大學(xué)第一附屬醫(yī)院涉外病護(hù)士招聘?jìng)淇碱}庫(kù)附答案
- 2026重慶九洲智造科技有限公司招聘財(cái)務(wù)管理崗等3人備考題庫(kù)附答案
- 2026阿拉善盟急需緊缺人才專業(yè)需求目錄參考題庫(kù)附答案
- 中共涼山州委辦公室2025年面向全州公開(kāi)選調(diào)所屬事業(yè)單位工作人員的(5人)參考題庫(kù)附答案
- 中國(guó)人民大學(xué)校醫(yī)院招聘2人參考題庫(kù)附答案
- 三年級(jí)科學(xué)上冊(cè)蘇教版教學(xué)工作總結(jié)共3篇(蘇教版三年級(jí)科學(xué)上冊(cè)知識(shí)點(diǎn)整理)
- 種子室內(nèi)檢驗(yàn)技術(shù)-種子純度鑒定(種子質(zhì)量檢測(cè)技術(shù)課件)
- SEMI S1-1107原版完整文檔
- 心電監(jiān)測(cè)技術(shù)操作考核評(píng)分標(biāo)準(zhǔn)
- 2023年中級(jí)財(cái)務(wù)會(huì)計(jì)各章作業(yè)練習(xí)題
- 金屬罐三片罐成型方法與罐型
- 維克多高中英語(yǔ)3500詞匯
- 大疆植保無(wú)人機(jī)考試試題及答案
- 《LED顯示屏基礎(chǔ)知識(shí)培訓(xùn)》
- 高校宿舍樓建筑結(jié)構(gòu)畢業(yè)設(shè)計(jì)論文原創(chuàng)
- LY/T 2501-2015野生動(dòng)物及其產(chǎn)品的物種鑒定規(guī)范
評(píng)論
0/150
提交評(píng)論