版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、UML中幾種類間關(guān)系:繼承、實(shí)現(xiàn)、依賴、關(guān)聯(lián)、聚合、組合的聯(lián)系與區(qū)別繼承指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的 功能,并可以增加它自己的新功能的能力,繼承是類與類或者接口與接口之間最 常見的關(guān)系;在Java中此類關(guān)系通過關(guān)鍵字extends明確標(biāo)識,在設(shè)計(jì)時一般沒 有爭議性;實(shí)現(xiàn)指的是一個class類實(shí)現(xiàn)interface接口(可以是多個)的功能;實(shí)現(xiàn)是類與接口 之間最常見的關(guān)系;在Java中此類關(guān)系通過關(guān)鍵字implements明確標(biāo)識,在設(shè) 計(jì)時一般沒有爭議性;依賴可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關(guān)系是具有 偶然性的、臨時性的、非常
2、弱的,但是B類的變化會影響到A;比如某人要過河,需要借用一條船,此時人與船之間的關(guān)系就是依賴;表現(xiàn)在代碼層面,為類B作為參數(shù)被類A在某個method方法中使用;關(guān)聯(lián)他體現(xiàn)的是兩個類、或者類與接口之間語義級別的一種強(qiáng)依賴關(guān)系,比如我和我 的朋友;這種關(guān)系比依賴更強(qiáng)、不存在依賴關(guān)系的偶然性、關(guān)系也不是臨時性的, 一般是長期性的,而且雙方的關(guān)系一般是平等的、關(guān)聯(lián)可以是單向、雙向的;表 現(xiàn)在代碼層面,為被關(guān)聯(lián)類B以類屬性的形式出現(xiàn)在關(guān)聯(lián)類A中,也可能是關(guān) 聯(lián)類A引用了一個類型為被關(guān)聯(lián)類B的全局變量;聚合聚合是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分、擁有的關(guān)系,即has-a的 關(guān)系,此時整體與部分之間
3、是可分離的,他們可以具有各自的生命周期,部分可 以屬于多個整體對象,也可以為多個整體對象共享;比如計(jì)算機(jī)與CPU、公司 與員工的關(guān)系等;表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語義級別來區(qū) 分;組合組合也是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比 聚合更強(qiáng),也稱為強(qiáng)聚合;他同樣體現(xiàn)整體與部分間的關(guān)系,但此時整體與部分 是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束;比如你和你 的大腦;表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語義級別來區(qū)分;對于繼承、實(shí)現(xiàn)這兩種關(guān)系沒多少疑問,他們體現(xiàn)的是一種類與類、或者類與接 口間的縱向關(guān)系;其他的四者關(guān)系則體現(xiàn)
4、的是類與類、或者類與接口間的引用、 橫向關(guān)系,是比較難區(qū)分的,有很多事物間的關(guān)系要想準(zhǔn)備定位是很難的,前面 也提到,這幾種關(guān)系都是語義級別的,所以從代碼層面并不能完全區(qū)分各種關(guān)系; 但總的來說,后幾種關(guān)系所表現(xiàn)的強(qiáng)弱程度依次為:組合聚合關(guān)聯(lián)依賴;UML-泛化、關(guān)聯(lián)、聚合、組合、依賴一、泛化關(guān)系(generalization)1.說明表示類與類之間的繼承關(guān)系,接口與接口之間的繼承關(guān)系,或類對接口的實(shí)現(xiàn)關(guān) 系。一般化的關(guān)系是從子類指向父類的,與繼承或?qū)崿F(xiàn)的方法相反。表現(xiàn)父類父類實(shí)例=new子類();舉例class Animal;class Tigger : public Animal;class
5、Dog : public Animal;Animal* pAnimal = new Dog;二、關(guān)聯(lián)關(guān)系(association)1.說明對于兩個相對獨(dú)立的對象,當(dāng)一個對象的實(shí)例與另一個對象的一些特定實(shí)例存在 固定的對應(yīng)關(guān)系時,這兩個對象之間為關(guān)聯(lián)關(guān)系。表示類與類之間的聯(lián)接,有雙向關(guān)聯(lián)和單向關(guān)聯(lián),雙向關(guān)聯(lián)有兩個箭頭或者沒有 箭頭,單向關(guān)聯(lián)有一個箭頭,表示關(guān)聯(lián)的方向。關(guān)聯(lián)關(guān)系以實(shí)例變量的形式存在,在每一個關(guān)聯(lián)的端點(diǎn),還可以有一個基數(shù) (multiplicity),表明這一端點(diǎn)的類可以有幾個實(shí)例。PersonAFriend1D,; HYPERLINK mailto: 表現(xiàn)雙向關(guān)聯(lián)在代碼的表現(xiàn)為雙方
6、都擁有對方的一個指針,當(dāng)然也可以是引用或者是 值。關(guān)聯(lián)關(guān)系是使用實(shí)例變量來實(shí)現(xiàn)。舉例/eg.1單向關(guān)聯(lián)class Person;class FriendPerson* mpPerson;/eg.2/雙向關(guān)聯(lián)class A;class BA* pA;class AB* pB;/eg.3/自身關(guān)聯(lián)class CC* pC;;三、聚合關(guān)系(aggregation)1.說明:關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系。聚合是整體和個體的關(guān)系。聚合關(guān)系也是通 過實(shí)例變量實(shí)現(xiàn)的。例如汽車、發(fā)動機(jī)、輪胎,一個汽車對象由一個發(fā)動機(jī)對象, 四個輪胎對象組成。當(dāng)類之間有整體-部分關(guān)系的時候,我們就可以使用組合或者聚合。2.例
7、圖表現(xiàn)與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過實(shí)例變量來實(shí)現(xiàn)這樣關(guān)系的。關(guān)聯(lián)關(guān)系和聚 合關(guān)系來語法上是沒辦法區(qū)分的,從語義上才能更好的區(qū)分兩者的區(qū)別。舉例class CPU;class Memory;class ComputerCPU* mpCPU;Memory* mpMemory;;四、組合關(guān)系(合成關(guān)系)(composition)說明:合成關(guān)系也是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系更強(qiáng)的關(guān)系。合成關(guān)系是不能共享 的。例如人有四肢、頭等。表示類之間整體和部分的關(guān)系,組合關(guān)系中部分和整體具有統(tǒng)一的生存期。一旦 整體對象不存在,部分對象也將不存在。部分對象與整體對象之間具有共生死的 關(guān)系。例圖表現(xiàn)舉例同聚合關(guān)
8、系,不過說語義不同class Leg;class Arm;class PersonLeg mLeg;Arm mArm;五、依賴關(guān)系(Dependency)說明:對于兩個相對獨(dú)立的對象,當(dāng)一個對象負(fù)責(zé)構(gòu)造另一個對象的實(shí)例,或者依賴另 一個對象的服務(wù)時,這兩個對象之間主要體現(xiàn)為依賴關(guān)系。與關(guān)聯(lián)關(guān)系不同的是,依賴關(guān)系是以參數(shù)變量的形式傳入到依賴類中的,依賴是 單向的,要避免雙向依賴。一般來說,不應(yīng)該存在雙向依賴。依賴是一種弱關(guān)聯(lián),只要一個類用到另一個類,但是和另一個類的關(guān)系不是太明 顯的時候(可以說是“uses”那個類),就可以把這種關(guān)系看成是依賴。例圖 CarPgn +buy(car: Car)4
9、-buyflnouse: House)- _ _ - - - -House HYPERLINK mailto: 表現(xiàn)依賴關(guān)系表現(xiàn)在局部變量,方法的參數(shù),以及對靜態(tài)方法的調(diào)用舉例class Car;class House;class Personvoid buy(Car& car)void buy(House* pHouse);六、關(guān)系之間的區(qū)別聚合與組合(1)聚合與組合都是一種結(jié)合關(guān)系,只是額外具有整體-部分的意涵。(2)部件的生命周期不同聚合關(guān)系中,整件不會擁有部件的生命周期,所以整件刪除時,部件不會被刪除。 再者,多個整件可以共享同一個部件。組合關(guān)系中,整件擁有部件的生命周期,所以整件刪除
10、時,部件一定會跟著刪除。 而且,多個整件不可以同時間共享同一個部件。(3)聚合關(guān)系是“has-a”關(guān)系,組合關(guān)系是“contains-a”關(guān)系。關(guān)聯(lián)和聚合(1)表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語義級別來區(qū)分。(2)關(guān)聯(lián)和聚合的區(qū)別主要在語義上,關(guān)聯(lián)的兩個對象之間一般是平等的,例 如你是我的朋友,聚合則一般不是平等的。(3)關(guān)聯(lián)是一種結(jié)構(gòu)化的關(guān)系,指一種對象和另一種對象有聯(lián)系。(4)關(guān)聯(lián)和聚合是視問題域而定的,例如在關(guān)心汽車的領(lǐng)域里,輪胎是一定要 組合在汽車類中的,因?yàn)樗x開了汽車就沒有意義了。但是在賣輪胎的店鋪業(yè)務(wù) 里,就算輪胎離開了汽車,它也是有意義的,這就可以用聚合了。關(guān)聯(lián)和依賴
11、(1)關(guān)聯(lián)關(guān)系中,體現(xiàn)的是兩個類、或者類與接口之間語義級別的一種強(qiáng)依賴 關(guān)系,比如我和我的朋友;這種關(guān)系比依賴更強(qiáng)、不存在依賴關(guān)系的偶然性、關(guān) 系也不是臨時性的,一般是長期性的,而且雙方的關(guān)系一般是平等的。(2)依賴關(guān)系中,可以簡單的理解,就是一個類A使用到了另一個類B,而這 種使用關(guān)系是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A。4.綜合比較這幾種關(guān)系都是語義級別的,所以從代碼層面并不能完全區(qū)分各種關(guān)系;但總的來說,后幾種關(guān)系所表現(xiàn)的強(qiáng)弱程度依次為:組合聚合關(guān)聯(lián)依賴;UML線條箭頭關(guān)系后面的例子將針對某個具體目的來獨(dú)立地展示各種關(guān)系。雖然語法無誤,但這些例子可進(jìn)一步精煉,在它
12、 們的有效范圍內(nèi)包括更多的語義。依賴(Dependency)實(shí)體之間一個“使用”關(guān)系暗示一個實(shí)體的規(guī)范發(fā)生變化后,可能影響依賴于它的其他實(shí)例(圖D)。更具 體地說,它可轉(zhuǎn)換為對不在實(shí)例作用域內(nèi)的一個類或?qū)ο蟮娜魏晤愋偷囊?。其中包括一個局部變量,對 通過方法調(diào)用而獲得的一個對象的引用(如下例所示),或者對一個類的靜態(tài)方法的引用(同時不存在那 個類的一個實(shí)例)。也可利用“依賴”來表示包和包之間的關(guān)系。由于包中含有類,所以你可根據(jù)那些包中 的各個類之間的關(guān)系,表示出包和包的關(guān)系。關(guān)聯(lián)(Association)實(shí)體之間的一個結(jié)構(gòu)化關(guān)系表明對象是相互連接的。箭頭是可選的,它用于指定導(dǎo)航能力。如果沒有箭
13、頭, 暗示是一種雙向的導(dǎo)航能力。在Java中,關(guān)聯(lián)(圖E)轉(zhuǎn)換為一個實(shí)例作用域的變量,就像圖E的“Java” 區(qū)域所展示的代碼那樣。可為一個關(guān)聯(lián)附加其他修飾符。多重性(Multiplicity)修飾符暗示著實(shí)例之間的 關(guān)系。在示范代碼中,Employee可以有0個或更多的TimeCard對象。但是,每個TimeCard只從屬于單 獨(dú)一個 Employee。聚合(Aggregation)聚合(圖F)是關(guān)聯(lián)的一種形式,代表兩個類之間的整體/局部關(guān)系。聚合暗示著整體在概念上處于比局部 更高的一個級別,而關(guān)聯(lián)暗示兩個類在概念上位于相同的級別。聚合也轉(zhuǎn)換成Java中的一個實(shí)例作用域變 量。關(guān)聯(lián)和聚合的區(qū)別純粹是概念上的,而且嚴(yán)格反映在語義上。聚合還暗示著實(shí)例圖中不存在回路。換言之, 只能是一種單向關(guān)系。圖F合成(Composition)合成(圖G)是聚合的一種特殊形式,暗示局部”在“整體”內(nèi)部的生存期職責(zé)。合成也是非共享的 所以, 雖然局部不一定要隨整體的銷毀而被銷毀,但整體要么負(fù)責(zé)保持局部的存活狀態(tài),要么負(fù)責(zé)將其銷毀。局 部不可與其他整體共享。但是,整體可將所有權(quán)轉(zhuǎn)交給另一個對象,后者隨即將承擔(dān)生存期職責(zé)。Employee和TimeCard的關(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年借殼上市交易合作協(xié)議
- 2025年倉儲干果堅(jiān)果保管合同
- 2025年售房合同解除協(xié)議
- 2025年死因贈與合同的咨詢平臺
- 2025年食堂食材采購與社區(qū)支持農(nóng)業(yè)合同范本大全3篇
- 2025版生物質(zhì)木屑顆粒燃料買賣合同4篇
- 二零二五年度不動產(chǎn)抵押擔(dān)保物業(yè)管理合同樣本3篇
- 2025版微股東眾籌入股協(xié)議書-新能源開發(fā)項(xiàng)目專用3篇
- 二零二五年度科研實(shí)驗(yàn)室租賃合同租金調(diào)整與設(shè)備配置補(bǔ)充協(xié)議
- 2025年度電子合同平臺用戶隱私保護(hù)合同
- 《中華民族多元一體格局》
- 2023年四川省綿陽市中考數(shù)學(xué)試卷
- 南安市第三次全國文物普查不可移動文物-各鄉(xiāng)鎮(zhèn)、街道分布情況登記清單(表五)
- 選煤廠安全知識培訓(xùn)課件
- 項(xiàng)目前期選址分析報(bào)告
- 急性肺栓塞搶救流程
- 《形象價值百萬》課件
- 紅色文化教育國內(nèi)外研究現(xiàn)狀范文十
- 中醫(yī)基礎(chǔ)理論-肝
- 小學(xué)外來人員出入校門登記表
- 《土地利用規(guī)劃學(xué)》完整課件
評論
0/150
提交評論