UML依賴、關聯、聚集等關系的特征解析
本節向大家介紹一下UML中UML依賴、關聯、聚集等關系的特征,通過特征的介紹我們可以比較一下就不難看出它們的異同了。下面讓我們一起來學習UML中關系的特征吧。
UML中UML依賴、關聯、聚集等關系的特征
1.關聯:連接模型元素及鏈接實例,用一條實線來表示;
2.依賴:表示一個元素以某種方式依賴于另一個元素,用一條虛線加箭頭來表示;
3.聚集:表示整體與部分的關系,用一條實線加空心菱形來表示;
4.組成:表示整體與部分的有一關系,用一條實線加實心菱形來表示;
(關聯,依賴,聚集,組成的異同見后描述)
5.泛化(繼承):表示一般與特殊的關系,用一條實線加空心箭頭來表示;
6.實現:表示類與接口的關系,用一條虛線加空心箭頭來表示;
UML依賴,關聯,聚集的異同:(《Java面向對象編程》一書,作者:孫衛琴來源:www.javathinker.org)
在建立對象模型時,很容易把依賴、關聯和聚集關系混淆。當對象A和對象B之間存在依賴、關聯或聚集關系時,對象A都有可能調用對象B的方法,這是三種關系之間的相同之處,除此之外,它們有著不同的特征。
1.UML依賴關系的特征
對于兩個相對獨立的系統,當一個系統負責構造另一個系統的實例,或者依賴另一個系統的服務時,這兩個系統之間主要體現為依賴關系,例如生產零件的機器和零件,機器負責構造零件對象。再例如充電電池和充電器,充電電池通過充電器來充電。再例如自行車Bicycle和打氣筒Pump,自行車通過打氣筒來充氣。圖1-39為Bicycle類與Pump類的類框圖。
圖1-39Bicycle類與Pump類的依賴關系
Bicycle類和Pump類之間是UML依賴關系,在Bicycle類中無需定義Pump類型的變量。Bicycle類的定義如下:
publicclassBicycle{
/**給輪胎充氣*/
publicvoidexpand(Pumppump){
pump.blow();
}
}
在現時生活中,通常不會為某一輛自行車配備專門的打氣筒,而是在需要充氣的時候,從附近某個修車棚里借個打氣筒打氣。在程序代碼中,表現為Bicycle類的expand()方法有個Pump類型的參數。以下程序代碼表示某輛自行車先后到兩個修車棚里充氣:
myBicycle.expand(pumpFromRepairShed1);//到***個修車棚里充氣
myBicycle.expand(pumpFromRepairShed2);//若干天后,到第二個修車棚里充氣。介紹完了UML依賴關系再來看一下UML關聯關系的特征。
2.UML關聯關系的特征
對于兩個相對獨立的系統,當一個系統的實例與另一個系統的一些特定實例存在固定的對應關系時,這兩個系統之間為關聯關系。例如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單;再例如公司和員工,每個公司對應一些特定的員工,每個員工對應一特定的公司;再例如自行車和主人,每輛自行車屬于特定的主人,每個主人有特定的自行車,圖1-40顯示了主人和自行車的關聯關系。而充電電池和充電器之間就不存在固定的對應關系,同樣自行車和打氣筒之間也不存在固定的對應關系。
圖1-40主人和自行車的關聯關系
Person類與Bicycle類之間存在關聯關系,這意味著在Person類中需要定義一個Bicycle類型的成員變量。以下是Person類的定義:
publicclassPerson{
privateBicyclebicycle;//主人的自行車
publicBicyclegetBicycle(){
returnbicycle;
}
publicvoidsetBicycle(Bicyclebicycle){
this.bicycle=bicycle;
}
/**騎自行車去上班*/
publicvoidgoToWork(){
bicycle.run();
}
}
在現時生活中,當你騎自行車去上班時,只要從家里推出自己的自行車就能上路了,不象給自行車打氣那樣,在需要打氣時,還要四處去找修車棚。因此,在Person類的goToWork()方法中,調用自身的bicycle對象的run()方法。假如goToWork()方法采用以下的定義方式:
/**騎自行車去上班*/
publicvoidgoToWork(Bicyclebicycle){
bicycle.run();
}
那就好比去上班前,還要先四處去借一輛自行車,然后才能去上班。再來看一下UML中UML依賴、關聯、聚集等關系的特征中UML聚集關系。
3.UML聚集關系的特征
當系統A被加入到系統B中,成為系統B的組成部分時,系統B和系統A之間為聚集關系。例如自行車和它的響鈴、龍頭、輪胎、鋼圈以及剎車裝置就是聚集關系,因為響鈴是自行車的組成部分。而人和自行車不是聚集關系,因為人不是由自行車組成的,如果一定要研究人的組成,那么他應該由頭、軀干和四肢等組成。由此可見,可以根據語義來區分關聯關系和聚集關系。
聚集關系和關聯關系的區別還表現在以下方面:
(1)對于具有關聯關系的兩個對象,多數情況下,兩者有獨立的生命周期。比如自行車和他的主人,當自行車不存在了,它的主人依然存在;反之亦然。但在個別情況下,一方會制約另一方的生命周期。比如客戶和訂單,當客戶不存在,它的訂單也就失去存在的意義。
(2)對于具有聚集關系(尤其是強聚集關系)的兩個對象,整體對象會制約它的組成對象的生命周期。部分類的對象不能單獨存在,它的生命周期依賴于整體類的對象的生命周期,當整體消失,部分也就隨之消失。比如小王的自行車被偷了,那么自行車的所有組件也不存在了,除非小王事先碰巧把一些可拆卸的組件(比如車鈴和坐墊)拆了下來。
不過,在用程序代碼來表示關聯關系和聚集關系時,兩者比較相似。圖1-41為自行車Bicycle與響鈴Bell的聚集關系。
以下例程1-6是Bicycle類的源程序。
例程1-6Bicycle.java
publicclassBicycle{
privateBellbell;
publicBellgetBell(){
returnbell;
}
publicvoidsetBell(Bellbell){
this.bell=bell;
}
/**發出鈴聲*/
publicvoidalert(){
bell.ring();
}
}
在Bicycle類中定義了Bell類型的成員變量,Bicycle類利用自身的bell成員變量來發出鈴聲,這和在Person類中定義了Bicycle類型的成員變量,Person類利用自身的bicycle成員變量去上班很相似。
4。組成關系的特征
組成關系是一種兩個類之間的關系,其中整體類由部分類組成,部分類需要整體類才能存在,這種關系意味著銷毀整體類將會同時銷毀部分類。本節關于UML中UML依賴、關聯、聚集等關系的特征介紹到這里,請關注本節其他相關報道。
【編輯推薦】