UML圖中類之間的關系:依賴,泛化,關聯,聚合,組合,實現

類與類圖

1) 類(Class)封裝了數據和行為,是面向對象的重要組成部分,它是具有相同屬性、操作、關系的對象集合的總稱。

2) 在系統中,每個類具有一定的職責,職責指的是類所擔任的任務,即類要完成什么樣的功能,要承擔什么樣的義務。一個類可以有多種職責,設計得好的類一般只有一種職責,在定義類的時候,將類的職責分解成為類的屬性和操作(即方法)。

3) 類的屬性即類的數據職責,類的操作即類的行為職責

 一、依賴關系(Dependence)

依賴關系(Dependence):假設A類的變化引起了B類的變化,則說名B類依賴于A類。

?  依賴關系(Dependency) 是一種使用關系,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關系。大多數情況下,依       賴關系體現在某個類的方法使用另一個類的對象作為參數。

?   在UML中,依賴關系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。

1.jpg

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

依賴關系有如下三種情況:

1、A類是B類中的(某中方法的)局部變量;

2、A類是B類方法當中的一個參數;

3、A類向B類發送消息,從而影響B類發生變化;

 二、泛化關系(Generalization)

泛化關系(Generalization):A是B和C的父類,B,C具有公共類(父類)A,說明A是B,C的一般化(概括,也稱泛化)

?  泛化關系(Generalization)也就是繼承關系,也稱為“is-a-kind-of”關系,泛化關系用于描述父類與子類之間的關系,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛      化關系用帶空心三角形的直線來表示。

?  在代碼實現時,使用面向對象的繼承機制來實現泛化關系,如在Java語言中使用extends關鍵字、在C++/C#中使用冒號“:”來實現。 

1.png

public class Person   
{  
    protected String name;  
    protected int age;  
    public void move()   
    {  
        ……  
    }  
    public void say()   
   {  
        ……  
    }  
}  
public class Student extends Person   
{  
    private String studentNo;  
    public void study()   
    {  
        ……  
    }  
}

在UML當中,對泛化關系有三個要求:

1、子類與父類應該完全一致,父類所具有的屬性、操作,子類應該都有;

2、子類中除了與父類一致的信息以外,還包括額外的信息;

3、可以使用父類的實例的地方,也可以使用子類的實例;

 三、關聯關系(Association)

關聯關系(Association:類之間的聯系,如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單,再如籃球隊員與球隊之間的關聯(下圖所示)。

1.jpg

其中,關聯兩邊的"employee"和“employer”標示了兩者之間的關系,而數字表示兩者的關系的限制,是關聯兩者之間的多重性。通常有“*”(表示所有,不限),“1”(表示有且僅有一個),“0…”(表示0個或者多個),“0,1”(表示0個或者一個),“n…m”(表示n到m個都可以),“m…*”(表示至少m個)。

?  關聯關系(Association) 是類與類之間最常用的一種關系,它是一種結構化關系,用于表示一類對象與另一類對象之間有聯系。

?  在UML類圖中,用實線連接有關聯的對象所對應的類,在使用Java、C#和C++等編程語言實現關聯關系時,通常將一個類的對象作為另一個類的屬性。

?  在使用類圖表示關聯關系時可以在關聯線上標注角色名。

1)  雙向關聯: 默認情況下,關聯是雙向的。

1.png

public class Customer  
{  
    private Product[] products;  
    ……  
}  
public class Product  
{  
    private Customer customer;  
    ……  
}

1.png

public class Customer  
{  
    private Address address;  
    ……  
}  
  
public class Address  
{  
    ……  
}

3) 自關聯: 在系統中可能會存在一些類的屬性對象類型為該類本身,這種特殊的關聯關系稱為自關聯。

1.png

public class Node  
{  
    private Node subNode;  
    ……  
}

4) 重數性關聯: 重數性關聯關系又稱為多重性關聯關系(Multiplicity),表示一個類的對象與另一個類的對象連接的個數。在UML中多重性關系可以直接在關聯直線上增加一個數字表示與之對應的另一個類的對象的個數。

表示方式

多重性說明

1..1

表示另一個類的一個對象只與一個該類對象有關系

0..*

表示另一個類的一個對象與零個或多個該類對象有關系

1..*

表示另一個類的一個對象與一個或多個該類對象有關系

0..1

表示另一個類的一個對象沒有或只與一個該類對象有關系

m..n

表示另一個類的一個對象與最少m、最多n個該類對象有關系 (m<=n)

1.png

public class Form  
{  
    private Button buttons[];  
    ……  
}   
public class Button  
{  
    …  
}

 四、聚合關系(Aggregation)

聚合關系(Aggregation:表示的是整體和部分的關系,整體與部分 可以分開.

?  聚合關系(Aggregation) 表示一個整體與部分的關系。通常在定義一個整體類后,再去分析這個整體類的組成結構,從而找出一些成員類,該整體類和成員類之間就形成了聚合   關系。

?  在聚合關系中,成員類是整體類的一部分,即成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨立存在。在UML中,聚合關系用帶空心菱形的直線表示。 

1.png

public class Car  
{  
    private Engine engine;  
    public Car(Engine engine)  
   {  
        this.engine = engine;  
    }  
      
    public void setEngine(Engine engine)  
    {  
        this.engine = engine;  
    }  
    ……  
}  
public class Engine  
{  
    ……  
}

如:電話機包括一個話筒

       電腦包括鍵盤、顯示器,一臺電腦可以和多個鍵盤、多個顯示器搭配,確定鍵盤和顯示器是可以和主機分開的,主機可以選擇其他的鍵盤、顯示器組成電腦;

1.jpg

 五、組合關系(Composition)

組合關系(Composition:也是整體與部分的關系,但是整體與部分不可以分開.

?  組合關系(Composition)也表示類之間整體和部分的關系,但是組合關系中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在,部分對象與整體對象之    間具有同生共死的關系。

?  在組合關系中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴于整體類。在UML中,組合關系用帶實心菱形的直線表示。

1.png

public class Head  
{  
    private Mouth mouth;  
    public Head()  
    {  
    mouth = new Mouth();  
    }  
    ……  
}  
  
public class Mouth  
{  
    ……  
}

如:公司和部門,部門是部分,公司是整體,公司A的財務部不可能和公司B的財務部對換,就是說,公司A不能和自己的財務部分開; 人與人的心臟.

2.jpg

 六、實現關系(Implementation)

實現關系(Implementation):是用來規定接口和實線接口的類或者構建結構的關系,接口是操作的集合,而這些操作就用于規定類或者構建的一種服務。

? 接口之間也可以有與類之間關系類似的繼承關系和依賴關系,但是接口和類之間還存在一種實現關系(Realization),在這種關系中,類實現了接口,類中的操作實現了接口中所     聲明的操作。在UML中,類與接口之間的實現關系用帶空心三角形的虛線來表示。

1.png

public interface Vehicle   
{  
    public void move();  
}  
public class Ship implements Vehicle  
{  
    public void move()   
    {  
    ……  
    }  
}  
public class Car implements Vehicle  
{  
    public void move()   
    {  
    ……  
    }  
}

轉自;http://blog.csdn.net/hguisu/article/details/7609483

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/2815

(0)
s19930811s19930811
上一篇 2015-04-07 19:21
下一篇 2015-04-07 19:23

相關推薦

  • 輸出重定向 輸入重定向 管道簡單介紹 -20160729

    輸出重定向 輸入重定向 管道簡單介紹 標準輸入和輸出 我們先來了解下輸入和輸出的概念: 在計算機中我們了解到計算機的組成部分:其中有輸入 輸出設備。       輸出重定向 對于程序來說: 程序 :指令 + 數據 對于數據來說,數據可以由我們通過鍵盤輸入,或者程序直接使用存儲設備上的數據,我們稱為讀入 數據,程序處理數據后需要返…

    Linux干貨 2016-08-04
  • 0809linux基礎小記(sed和vim用法)

    sed  [options] ‘scripts’ inputfile -n: 不輸出模式空間內容的自動打印 -e: 多點編輯 -f:從指定文件中讀取編輯腳本 -i:原處編輯 scripts: ’地址命令’ 地址定界: (1)  不給地址:對全文進行處理 (2)  單地址: #:  指定的行 例: sed '2…

    Linux干貨 2016-08-11
  • 磁盤管理總結

    linux磁盤管理總結 一、向linux主機添加硬盤 不同類型的硬盤,linux需要不同的驅動。kernel需要驅動,硬盤是基本的硬件設備,驅動一般不需要安裝了。 (1)linux內核的設計架構,使用了模塊。除了系統必須的驅動,一般以模塊方式加載到內核中。內核的模塊放在。/lib/modules內。 (2)linux一切皆文件,設備也是文件,ls -l 查看…

    Linux干貨 2016-08-29
  • 博客

       這是我的第一篇博客!   平時學習中,總會遇到或大或小的問題,以及一些新的感悟,在當時能夠十分清晰記得,但過一些時日,便發現又忘記了。以前十分明白的東西,又變得有些模糊,甚至完全忘記。因此特別需要記錄下來,方便日后的查閱或分享給其他遇到類似問題的朋友。    如果以后忘記的某些知識,這時候,翻開以往博客…

    Linux干貨 2017-07-11
  • 系統基礎之用戶,組管理作業題

    、創建testuser uid 1234,主組:bin,輔助組:root,ftp,shell:/bin/csh home:/testdir/testuser 1 2 3 [root@wen-7 ~]# useradd -u 1234 -g bin -G root,ftp&nbsp…

    Linux干貨 2016-08-04
  • 文本三劍客之grep

    文本編輯三劍客之grep 目錄 一、正則表達式 二、grep:文本過濾器 一、正則表達式 REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面上的意義,而表示控制或者通配的功能。分類: 基本正則表達式:BRE 擴展正則表達式:ERE 元字符的分類: 字符匹配 匹配次數 位置錨定 分組 (1)基本正則表達式元字符 1>…

    2017-03-26
欧美性久久久久