UML常用的幾種關係的總結

最近在看博客,裏面涉及到很多的類圖,流程圖,雖然說以前學過UML相關的課程,但畢竟過了這麼久了,對這幾種概念早已模糊不清了,所以索性藉着這次看博客的時間,把這幾種概念再重新梳理總結一遍,以備再次查看之用。


一、泛化(Generalization)

泛化,是一種繼承關係, 表示一般與特殊的關係, 它指定了子類如何特化父類的所有特徵和行爲。在Java中此類關係通過關鍵字extends明確標識。

例如:貓是動物的一種, 它既有貓的特性也有動物的共性。

箭頭指向帶三角箭頭的實線,箭頭指向父類
這裏寫圖片描述

二、實現(Realization)

實現,是一種類與接口的關係, 表示類是接口所有特徵和行爲的實現.在Java中此類關係通過關鍵字implements明確標識。

例如:哺乳動物中蝙蝠(對象)會飛(接口),而一般的哺乳動物都不會飛。

箭頭指向帶三角箭頭的虛線,箭頭指向接口

這裏寫圖片描述

三、組合(Composition)

組合關聯關係的一種特例,他體現的是一種contains-a的關係,這種關係比聚合更強,也稱爲強聚合。它是整體與部分的關係,但部分不能離開整體而單獨存在

例如:公司和部門是整體和部分的關係,沒有公司就不存在部門。

箭頭指向帶實心菱形的實線,菱形指向整體

這裏寫圖片描述

public class Company
{
    private Department mDepartment;
    public Company()
    {
        mDepartment = new Department();
    }
    ......
}

public class Department
{
    ......
}

四、聚合(Aggregation)

聚合也是關聯關係的一種特例,它體現的是一種has-a的關係,這種關係比依賴強,也是一種整體和部分的關係,但整體與部分是可以分開的,它們擁有各自的生命週期

例如:如車與輪胎、公司與員工的關係等。

箭頭指向帶空心菱形的實心線,菱形指向整體

這裏寫圖片描述

public class Car
{
    private Engine mTyre;
    public Car(Tyre tyre)
    {
        this.mTyre = tyre;
    }
}

public void setTyre(Tyre tyre)  
{  
    this.mTyre = tyre;  
}

public class Tyre
{
    ......
}

五、關聯(Association)

關聯類與類或類與接口之間語義級別的一種強依賴關係,它使一個類知道另一個類的屬性和方法這種關係一般是長期的,而且雙方的關係一般是平等的、關聯可以是單向的或者雙向的雙向關聯有兩個箭頭或沒有箭頭,單向關聯有一個箭頭

例如:老師與學生,我和我的朋友,一名學生需要上多門課程等。

箭頭指向帶普通箭頭(或實心三角形箭頭)的實心線,指向被關聯元素

這裏寫圖片描述

public class Teacher
{
     private List<Student> mStudentList;
}

public class Student
{  
    ......
}

代碼中的體現主要是成員變量的關係,爲被關聯類Student以類屬性的形式出現在關聯類Teacher中,當然也可能是關聯類引用了一個類型爲被關聯類的全局變量。

六、依賴(Dependency)

依賴是一種使用關係,即一個類A使用到了另一個類B,而這種使用關係是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A類,它是一種單向關係。

例如:人與車就是一種依賴關係。

箭頭指向帶箭頭的虛線,指向被依賴元素

這裏寫圖片描述

public class Person
{
    void buy(Car car)
   {
       ......
    }
}
public class Car 
{
    ......
}

依賴在代碼中的體現主要是局部變量、方法的參數或者對靜態方法的調用。描述的是對象之間的調用關係,這一點與關聯不同(關聯描述的是對象之間的結構關係),一般來說要儘量避免雙向依賴


總結

幾種關係之間的強弱順序爲:

泛化 = 實現 > 組合 > 聚合 > 關聯 > 依賴

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