日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java uml聚合代码_UML类图(下):关联、聚合、组合、依赖

發(fā)布時間:2024/9/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java uml聚合代码_UML类图(下):关联、聚合、组合、依赖 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

上一篇文章UML類圖(上):類、繼承、實現(xiàn),講了UML類圖中類、繼承、實現(xiàn)三種關(guān)系及其在UML類圖中的畫法,本文將接著上文的內(nèi)容,繼續(xù)講講對象之間的其他幾種關(guān)系,主要就是關(guān)聯(lián)、聚合、組合、依賴,下面開始文章的內(nèi)容。

注意1:子類中覆蓋了父類的abstract方法,方法名再次出現(xiàn)。

注意2:無論哪種關(guān)系,箭頭指向被依賴方。

關(guān)聯(lián)關(guān)系

關(guān)聯(lián)(Assocition)關(guān)系是類與類之間最常見的一種關(guān)系,它是一種結(jié)構(gòu)化的關(guān)系,表示一類對象與另一類對象之間有聯(lián)系,如汽車和輪胎、師傅和徒弟、班級和學(xué)生等。在UML類圖中,用實線連接有關(guān)聯(lián)關(guān)系的對象所對應(yīng)的類,在Java中通常將一個類的對象作為另一個類的成員變量。關(guān)聯(lián)關(guān)系分單向關(guān)聯(lián)、雙向關(guān)聯(lián)、自關(guān)聯(lián),逐一看一下。

1、單向關(guān)聯(lián)關(guān)系

單向關(guān)聯(lián)指的是關(guān)聯(lián)只有一個方向,比如顧客(Customer)擁有地址(Address),其Java實現(xiàn)為:

public classAddress

{

}

public classCustomer

{privateAddress address;

}

UML的畫法為:

2、雙向關(guān)聯(lián)關(guān)系

默認情況下的關(guān)聯(lián)都是雙向的,比如顧客(Customer)購買商品(Product),反之,賣出去的商品總是與某個顧客與之相關(guān)聯(lián),這就是雙向關(guān)聯(lián)。Java類的寫法為:

public classProduct

{privateCustomer customer;

}

public classCustomer

{privateProduct[] product;

}

對應(yīng)的UML類圖應(yīng)當是:

3、自關(guān)聯(lián)關(guān)系

自關(guān)聯(lián),指的就是對象中的屬性為對象本身,這在鏈表中非常常見,單向鏈表Node中會維護一個它的前驅(qū)Node,雙向鏈表Node中會維護一個它的前驅(qū)Node和一個它的后繼Node。就以單向鏈表為例,它的Java寫法為:

public classNode

{privateNode nextNode;

}

對應(yīng)的UML類圖應(yīng)當是:

聚合關(guān)系

聚合(Aggregation)關(guān)系表示整體與部分的關(guān)系。在聚合關(guān)系中,成員對象是整體的一部分,但是成員對象可以脫離整體對象獨立存在。在UML中,聚合關(guān)系用帶空心菱形的直線表示,如汽車(Car)與引擎(Engine)、輪胎(Wheel)、車燈(Light),Java表示為:

public classEngine

{

}

public classWheel

{

}

public classLight

{

}

public classCar

{privateEngine engine;privateLight light;privateWheel wheel;publicCar(Engine engine, Light light, Wheel wheel)

{super();this.engine =engine;this.light =light;this.wheel =wheel;

}public voiddrive()

{

}

}

對應(yīng)的UML類圖為:

代碼實現(xiàn)聚合關(guān)系,成員對象通常以構(gòu)造方法、Setter方法的方式注入到整體對象之中。

組合關(guān)系

組合(Composition)關(guān)系也表示的是一種整體和部分的關(guān)系,但是在組合關(guān)系中整體對象可以控制成員對象的生命周期,一旦整體對象不存在,成員對象也不存在,整體對象和成員對象之間具有同生共死的關(guān)系。在UML中組合關(guān)系用帶實心菱形的直線表示。

比如人的頭(Head)和嘴巴(Mouth)、鼻子(Nose),嘴巴和鼻子是頭的組成部分之一,一旦頭沒了,嘴巴也沒了,因此頭和嘴巴、鼻子是組合關(guān)系,Java表示為:

public classMouth

{

}

public classNose

{

}

public classHead

{privateMouth mouth;privateNose nose;publicHead()

{

mouth= newMouth();

nose= newNose();

}public voidshake()

{

}

}

其UML的表示方法為:

代碼實現(xiàn)組合關(guān)系,通常在整體類的構(gòu)造方法中直接實例化成員類,這是因為組合關(guān)系的整體和部分是共生關(guān)系,如果通過外部注入,那么即使整體不存在,那么部分還是存在的,這就相當于變成了一種聚合關(guān)系了。

依賴關(guān)系

依賴(Dependency)關(guān)系是一種使用關(guān)系,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關(guān)系,大多數(shù)情況下依賴關(guān)系體現(xiàn)在某個類的方法使用另一個類的對象作為參數(shù)。在UML中,依賴關(guān)系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。

比如,駕駛員(Driver)開車,Driver類的drive()方法將車(Car)的對象作為一個參數(shù)傳遞,以便在drive()方法中能夠調(diào)用car的move()方法,且駕駛員的drive()方法依賴車的move()方法,因此也可以說Driver依賴Car,Java代碼為:

public interfaceCar

{public voidmove();

}

public classDriver

{public voiddrive(Car car)

{

car.move();

}

}

其UML的畫法為:

依賴關(guān)系通常通過三種方式來實現(xiàn):將一個類的對象作為另一個類中方法的參數(shù)

在一個類的方法中將另一個類的對象作為其對象的局部變量

在一個類的方法中調(diào)用另一個類的靜態(tài)方法

關(guān)聯(lián)關(guān)系、聚合關(guān)系、組合關(guān)系之間的區(qū)別

從上文可以看出,關(guān)聯(lián)關(guān)系、聚合關(guān)系和組合關(guān)系三者之間比較相似,本文的最后就來總結(jié)一下這三者之間的區(qū)別。

關(guān)聯(lián)和聚合的區(qū)別主要在于語義上:關(guān)聯(lián)的兩個對象之間一般是平等的,聚合則一般是不平等的。

聚合和組合的區(qū)別則在語義和實現(xiàn)上都有差別:組合的兩個對象之間生命周期有很大的關(guān)聯(lián),被組合的對象在組合對象創(chuàng)建的同時或者創(chuàng)建之后創(chuàng)建,在組合對象銷毀之前銷毀,一般來說被組合對象不能脫離組合對象獨立存在,而且也只能屬于一個組合對象;聚合則不一樣,被聚合的對象可以屬于多個聚合對象。

再舉例子來說:你和你的朋友屬于關(guān)聯(lián)關(guān)系,因為你和你的朋友之間的關(guān)系是平等的,關(guān)聯(lián)關(guān)系只是表示一下兩個對象之間的一種簡單的聯(lián)系而已,就像我有一個朋友

你和你借的書屬于聚合關(guān)系,第一是因為書可以獨立存在,第二是因為書不僅僅屬于你,也可以屬于別人,只是暫時你擁有

你和你的心臟屬于組合關(guān)系,因為你的心臟只是屬于你的,不能脫離與你而存在

不過,實際應(yīng)用中,我個人感覺三種關(guān)系其實沒有區(qū)分得這么清楚,有些架構(gòu)師甚至?xí)f"組合和聚合沒什么區(qū)別",所以,有時候不需要把細節(jié)扣得這么細,合理利用對象之間的關(guān)系給出設(shè)計方案即可。

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的java uml聚合代码_UML类图(下):关联、聚合、组合、依赖的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。