UML類圖畫法

詳見http://www.cnblogs.com/xrq730/p/5527115.html

屬性的表示方式爲:【可見性】【屬性名稱】:【類型】={缺省值,可選}

方法的表示方式爲:【可見性】【方法名稱】(【參數名稱:參數類型】):【返回類型】 

可見性都是一樣的,"-"表示private、"+"表示public、"#"表示protected

。在UML中,繼承關係用帶空心三角形的實線來表示。

在UML中,抽象類無論類名還是抽象方法名和返回值,都以斜體的方式表示,因爲這也是一種繼承關係,所以子類與父類通過帶空心三角形的實線來聯繫。

在接口名上應當有<<interface>>表示這是一個接口,即使沒有屬性也要空一行,

表示實現接口關係時應當使用帶空心三角形的虛線來表示


關聯:實線連接(你有一個朋友)

關聯(Assocition)關係是類與類之間最常見的一種關係,它是一種結構化的關係,表示一類對象與另一類對象之間有聯繫,如汽車和輪胎、師傅和徒弟、班級和學生等。在UML類圖中,用實線連接有關聯關係的對象所對應的類,例如A類擁有B類的實例,則爲關聯A->B。
自關聯,指的就是對象中的屬性爲對象本身,這在鏈表中非常常見,單向鏈表Node中會維護一個它的前驅Node,雙向鏈表Node中會維護一個它的前驅Node和一個它的後繼Node。就以單向鏈表爲例,它的Java寫法爲自己指向自己。

聚合:帶空心菱形的直線(你借的一本書,即書是你的,但離開你別人也能讀)

聚合(Aggregation)關係表示整體與部分的關係。在聚合關係中,成員對象是整體的一部分,但是成員對象可以脫離整體對象獨立存在。在UML中,聚合關係用帶空心菱形的直線表示,如汽車(Car)與引擎(Engine)、輪胎(Wheel)、車燈(Light),即我擁有你的實例,且你是我組成的一部分,但你脫離我依然單獨存在成員對象通常以構造方法、Setter方法的方式注入到整體對象之中。

public class Car
{
    private Engine engine;
    private Light light;
    private Wheel wheel;
    
    public Car(Engine engine, Light light, Wheel wheel)
    {
        super();
        this.engine = engine;
        this.light = light;
        this.wheel = wheel;
    }
    
    public void drive()
    {
        
    }
}

組合:用帶實心菱形的直線(你和你的心臟

組合(Composition)關係也表示的是一種整體和部分的關係,但是在組合關係中整體對象可以控制成員對象的生命週期,一旦整體對象不存在,成員對象也不存在,整體對象和成員對象之間具有同生共死的關係。在UML中組合關係用帶實心菱形的直線表示。通常在整體類的構造方法中直接實例化成員類,這是因爲組合關係的整體和部分是共生關係,如果通過外部注入,那麼即使整體不存在,那麼部分還是存在的,這就相當於變成了一種聚合關係了。

public class Head
{
    private Mouth mouth;
    private Nose nose;
    
    public Head()
    {
        mouth = new Mouth();//直接實例化
        nose = new Nose();
    }
    
    public void shake()
    {
        
    }
}

依賴:帶箭頭的虛線

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

比如,駕駛員(Driver)開車,Driver類的drive()方法將車(Car)的對象作爲一個參數傳遞,以便在drive()方法中能夠調用car的move()方法,且駕駛員的drive()方法依賴車的move()方法,因此也可以說Driver依賴Car,即你被我使用則我依賴你。

public class Driver
{
    public void drive(Car car)
    {
        car.move();
    }
}


關聯關係、聚合關係、組合關係之間的區別

從上文可以看出,關聯關係、聚合關係和組合關係三者之間比較相似,本文的最後就來總結一下這三者之間的區別。

關聯和聚合的區別主要在於語義上:關聯的兩個對象之間一般是平等的,聚合則一般是不平等的

聚合和組合的區別則在語義和實現上都有差別:組合的兩個對象之間生命週期有很大的關聯,被組合的對象在組合對象創建的同時或者創建之後創建,在組合對象銷燬之前銷燬,一般來說被組合對象不能脫離組合對象獨立存在,而且也只能屬於一個組合對象;聚合則不一樣,被聚合的對象可以屬於多個聚合對象

再舉例子來說:

  • 你和你的朋友屬於關聯關係,因爲你和你的朋友之間的關係是平等的,關聯關係只是表示一下兩個對象之間的一種簡單的聯繫而已,就像我有一個朋友
  • 你和你借的書屬於聚合關係,第一是因爲書可以獨立存在,第二是因爲書不僅僅屬於你,也可以屬於別人,只是暫時你擁有
  • 你和你的心臟屬於組合關係,因爲你的心臟只是屬於你的,不能脫離與你而存在


發佈了27 篇原創文章 · 獲贊 48 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章