專家解析 UML依賴和聚集關(guān)系有何異同
本節(jié)向大家介紹一下UML中UML依賴和UML聚集關(guān)系的異同,UML中大致有六種關(guān)系,每種關(guān)系都有各自的特點(diǎn),這里和大家分享一下UML依賴和UML聚集關(guān)系有什么區(qū)別,希望本節(jié)的學(xué)習(xí)對你的學(xué)習(xí)有所幫助。
UML中UML依賴和UML聚集關(guān)系的異同
1.關(guān)聯(lián):連接模型元素及鏈接實(shí)例,用一條實(shí)線來表示;
2.依賴:表示一個元素以某種方式依賴于另一個元素,用一條虛線加箭頭來表示;
3.聚集:表示整體與部分的關(guān)系,用一條實(shí)線加空心菱形來表示;
4.組成:表示整體與部分的有一關(guān)系,用一條實(shí)線加實(shí)心菱形來表示;
(關(guān)聯(lián),依賴,聚集,組成的異同見后描述)
5.泛化(繼承):表示一般與特殊的關(guān)系,用一條實(shí)線加空心箭頭來表示;
6.實(shí)現(xiàn):表示類與接口的關(guān)系,用一條虛線加空心箭頭來表示;
UML依賴和UML聚集的異同:(《Java面向?qū)ο缶幊獭芬粫髡撸簩O衛(wèi)琴來源:www.javathinker.org)
在建立對象模型時,很容易把依賴、關(guān)聯(lián)和聚集關(guān)系混淆。當(dāng)對象A和對象B之間存在依賴、關(guān)聯(lián)或聚集關(guān)系時,對象A都有可能調(diào)用對象B的方法,這是三種關(guān)系之間的相同之處,除此之外,它們有著不同的特征。
1.UML依賴關(guān)系的特征
對于兩個相對獨(dú)立的系統(tǒng),當(dāng)一個系統(tǒng)負(fù)責(zé)構(gòu)造另一個系統(tǒng)的實(shí)例,或者依賴另一個系統(tǒng)的服務(wù)時,這兩個系統(tǒng)之間主要體現(xiàn)為依賴關(guān)系,例如生產(chǎn)零件的機(jī)器和零件,機(jī)器負(fù)責(zé)構(gòu)造零件對象。再例如充電電池和充電器,充電電池通過充電器來充電。再例如自行車Bicycle和打氣筒Pump,自行車通過打氣筒來充氣。圖1-39為Bicycle類與Pump類的類框圖。
圖1-39Bicycle類與Pump類的UML依賴關(guān)系
Bicycle類和Pump類之間是依賴關(guān)系,在Bicycle類中無需定義Pump類型的變量。Bicycle類的定義如下:
publicclassBicycle{
/**給輪胎充氣*/
publicvoidexpand(Pumppump){
pump.blow();
}
}
在現(xiàn)時生活中,通常不會為某一輛自行車配備專門的打氣筒,而是在需要充氣的時候,從附近某個修車棚里借個打氣筒打氣。在程序代碼中,表現(xiàn)為Bicycle類的expand()方法有個Pump類型的參數(shù)。以下程序代碼表示某輛自行車先后到兩個修車棚里充氣:
myBicycle.expand(pumpFromRepairShed1);//到第一個修車棚里充氣
myBicycle.expand(pumpFromRepairShed2);//若干天后,到第二個修車棚里充氣。看完了UML依賴的特征再來看一下UML聚集的特征看看它們有什么不同。
2.UML聚集關(guān)系的特征
當(dāng)系統(tǒng)A被加入到系統(tǒng)B中,成為系統(tǒng)B的組成部分時,系統(tǒng)B和系統(tǒng)A之間為聚集關(guān)系。例如自行車和它的響鈴、龍頭、輪胎、鋼圈以及剎車裝置就是聚集關(guān)系,因?yàn)轫戔徥亲孕熊嚨慕M成部分。而人和自行車不是聚集關(guān)系,因?yàn)槿瞬皇怯勺孕熊嚱M成的,如果一定要研究人的組成,那么他應(yīng)該由頭、軀干和四肢等組成。由此可見,可以根據(jù)語義來區(qū)分關(guān)聯(lián)關(guān)系和聚集關(guān)系。
聚集關(guān)系和關(guān)聯(lián)關(guān)系的區(qū)別還表現(xiàn)在以下方面:
(1)對于具有關(guān)聯(lián)關(guān)系的兩個對象,多數(shù)情況下,兩者有獨(dú)立的生命周期。比如自行車和他的主人,當(dāng)自行車不存在了,它的主人依然存在;反之亦然。但在個別情況下,一方會制約另一方的生命周期。比如客戶和訂單,當(dāng)客戶不存在,它的訂單也就失去存在的意義。
(2)對于具有聚集關(guān)系(尤其是強(qiáng)聚集關(guān)系)的兩個對象,整體對象會制約它的組成對象的生命周期。部分類的對象不能單獨(dú)存在,它的生命周期依賴于整體類的對象的生命周期,當(dāng)整體消失,部分也就隨之消失。比如小王的自行車被偷了,那么自行車的所有組件也不存在了,除非小王事先碰巧把一些可拆卸的組件(比如車鈴和坐墊)拆了下來。
不過,在用程序代碼來表示關(guān)聯(lián)關(guān)系和聚集關(guān)系時,兩者比較相似。圖1-41為自行車Bicycle與響鈴Bell的聚集關(guān)系。
以下例程1-6是Bicycle類的源程序。
例程1-6Bicycle.java
publicclassBicycle{
privateBellbell;
publicBellgetBell(){
returnbell;
}
publicvoidsetBell(Bellbell){
this.bell=bell;
}
/**發(fā)出鈴聲*/
publicvoidalert(){
bell.ring();
}
}
在Bicycle類中定義了Bell類型的成員變量,Bicycle類利用自身的bell成員變量來發(fā)出鈴聲,這和在Person類中定義了Bicycle類型的成員變量,Person類利用自身的bicycle成員變量去上班很相似。本節(jié)關(guān)于UML依賴和聚集異同介紹到這里。
【編輯推薦】
- 幾種UML關(guān)聯(lián)關(guān)系的區(qū)別詳解
- UML關(guān)聯(lián)符號用法剖析
- UML依賴和UML關(guān)聯(lián)關(guān)系的異同點(diǎn)解析
- 解析UML類圖符號意義
- 九大UML視圖專家解析