1. 程式人生 > >UML中6大關係分析

UML中6大關係分析

大話設計模式上的一個圖,我用EA畫出來的:

 大話設計模式類圖

UML中的6大關係相關英文及音標:

 依賴關係 dependency [di'pendənsi]
 關聯關係 association  [ə,səuʃi'eiʃən]
 聚合關係 aggregation  [ˌægrɪˈgeɪʃən]
 組合關係 composition  [,kɔmpə'ziʃən]
 實現 realization  [,ri:əlɪ'zeɪʃən]
 泛化 generalization  [,dʒenərəlɪ'zeɪʃən]

UML中的6大關係簡單解釋:

  1. 關聯:連線模型元素及連結例項,用一條實線來表示;
  2. 依賴:表示一個元素以某種方式依賴於另一個元素,用一條虛線加箭頭來表示;
  3. 聚合:表示整體與部分的關係,用一條實線加空心菱形來表示;
  4. 組成:表示整體與部分的有一關係,用一條實線加實心菱形來表示;
  5. 泛化(繼承):表示一般與特殊的關係,用一條實線加空心箭頭來表示;
  6. 實現:表示類與介面的關係,用一條虛線加空心箭頭來表示;

注意:泛化關係和實現關係又統稱為一般關係;
總之:一般關係表現為繼承或實現(is a),關聯關係、聚合關係、合成/組合關係表現為成員變數(has a),依賴關係表現為函式中的引數(use a);

UML中的6大關係詳細說明:

1、關聯關係:

  含義:類與類之間的連結,關聯關係使一個類知道另外一個類的屬性和方法;通常含有“知道”,“瞭解”的含義
體現:在C#中,關聯關係是通過成員變數來實現的;
方向:雙向或單向;
圖示:實線 + 箭頭;箭頭指向被關聯的類;
舉例:“漁民”需要知道“天氣”情況才能夠出海   //公司關聯僱員
public class Company
{
    private Employee employee;
    public Employee GetEmployee()
    {
        return employee;
    }
    public void SetEmployee(Employee employee)
    {
        this.employee = employee;
    }
    //公司運作    
    public void Run()
    {
        employee.StartWorking();
    }

}

//A關聯B
class A
{
    B b = new B();
}
class B
{
}

2、依賴關係:
  含義:是類與類之間的連線,表示一個類依賴於另外一個類的定義;依賴關係僅僅描述了類與類之間的一種使用與被使用的關係;
體現:在C#中體現為區域性變數、方法/函式的引數或者是對靜態方法的呼叫;
方向:單向;
圖示:虛線 + 箭頭;
舉例:人依賴於水和空氣;汽車依賴汽油
    //人划船,人依賴於船
public class Person
{
    //划船
    public void Oarage(Boat boat)
    {
        boat.Oarage();
    }


//A依賴於B
class A
{
    public void Function(B b)
    { }
}
class B
{
}

3、聚合關係:
  含義:是關聯關係的一種,是一種強關聯關係;聚合關係是整體和個體/部分之間的關係;關聯關係的兩個類處於同一個層次上,而聚合關係的兩個類處於不同的層次上,一個是整體,一個是個體/部分;在聚合關係中,代表個體/部分的物件有可能會被多個代表整體的物件所共享;
體現:C++中,聚合關係通過將被聚合者的(陣列)指標作為內部成員來實現的;
方向:單向;
圖示:空心菱形 + 實線 + 箭頭;箭頭指向被聚合的類,也就是說,箭頭指向個體/部分;
舉例:鴨群與鴨子具有聚合關係;汽車由引擎、輪胎以及其它零件組成,因為汽車壞掉了,沒有壞掉的引擎,輪胎和其他零件還可以繼續使用。

4、組合關係:
  含義:它也是關聯關係的一種,但它是比聚合關係更強的關係.組合關係要求聚合關係中代表整體的物件要負責代表個體/部分的物件的整個生命週期;組合關係不能共享;在組合關係中,如果代表整體的物件被銷燬或破壞,那麼代表個體/部分的物件也一定會被銷燬或破壞,而聚在合關係中,代表個體/部分的物件則有可能被多個代表整體的物件所共享,而不一定會隨著某個代表整體的物件被銷燬或破壞而被銷燬或破壞;
體現:在C#中,組合關係是通過成員變數來實現的;
方向:單向;
圖示:實心菱形 + 實線 + 箭頭;箭頭指向代表個體/部分的物件,也就是被組合的類的物件;
舉例:一個人由頭、四肢、等各種器官組成,因為人與這些器官具有相同的生命週期,人死了,這些器官也掛了;

5、泛化關係:
  含義:它表示一個更泛化的元素和一個更具體的元素之間的關係;也就是通常所說的類的繼承關係;
體現:在C#中,泛化關係通過類的繼承來實現的;
方向:單向;子類繼承父類;
圖示:空心箭頭 + 實線;箭頭指向父類;
舉例:動物下面可以分為哺乳動物,脊椎動物,爬行動物等

6、實現關係:
  含義:它指定了兩個實體之間的一份合同;即:一個實體定義一份合同,另外一個實體則保證履行該合同;
體現:在C#中,實現關係通過類實現介面來實現的,即:一個類實現某個介面;
方向:單向;子類實現介面;
圖示:空心箭頭 + 虛線;箭頭指介面向介面;
舉例:唐老鴨(物件)會說話(介面),因為一般鴨子不會說話,所以不會將說話這個方法給一般的鴨子帶上;超人(物件)會飛(介面)