UML系列03之 UML類圖(二)


 

概要

在"UML系列02之 UML類圖(一) "中介紹了類圖的基本構成--類的UML表示方法。本文是接着前文,繼續對"UML的類圖"中幾種關系進行介紹。介紹的主要內容包括:
UML類圖的幾種關系
1. 泛化
2. 實現
3. 關聯
  3.1 自關聯
  3.2 單向關聯
  3.3 雙向關聯
  3.4 多重性關聯
  3.5 聚合
  3.6 組合
4. 依賴

轉載請注明出處:http://www.cnblogs.com/skywang12345/p/3523209.html

 

UML類圖的幾種關系

在UML類圖中,關系可以分為4種: 泛化, 實現, 關聯依賴
1. 泛化 -- 表示"類與類之間的繼承關系"。
2. 實現 -- 表示"類與接口之間的實現"。
3. 關聯 -- 表示"類與類之間的擁有關系"。即,一個類是另一個類的成員。關聯又包括:自關聯, 單向關聯, 雙向關聯, 多重性關聯, 組合, 聚合。
4. 依賴 -- 表示"類與類之間的使用關系"。即,一個類是另一類的局部變量, 形式參數, 或者調用了靜態方法/成員等。

這幾種關系表示的"類與類之間關系的強弱順序"是:泛化 = 實現 > 關聯 > 依賴

 

1. 泛化(Generalization)

[關系說明]: 泛化是一種繼承關系。它指定了子類如何特化父類的所有特征和行為。例如:老虎是動物的一種。
[代碼說明]: 父類與子類。
[UML圖形]: 帶三角箭頭的實線,箭頭指向父類。
[示例]:  Fruit是"水果";Apple是"蘋果",它繼承了Fruit,是水果中的一種。
UML示例圖

對應的Java代碼

public class Fruit {
    protected int price;
    public int getPrice() {
        return price;
    }
    public void setPrice() {
        return price;
    }
}
public class Apple extends Fruit {
}

 

2. 實現(Realization)

[關系說明]: 實現是一種類與接口的關系,表示類是接口所有特征和行為的實現。
[代碼說明]: 實現類與接口。
[UML圖形]: 帶三角箭頭的虛線,箭頭指向接口。
[示例]: Runnable接口表示"一個任務",TimeTask是"計時任務",它實現了Runnable接口。
UML示例圖

對應的Java代碼

public interface Runnable {
    abstract public void run();
}
public class TimeTask implements Runnable{
    @Override
    public void run() {
    }
}

 

3. 關聯(Association)

關聯表示"類與類之間的擁有關系"。即,一個類是另一個類的成員。關聯包括:自關聯, 單向關聯, 雙向關聯, 多重性關聯, 聚合, 組合

 

3.1 自關聯

[關系說明]: 一個類包含自己。例如,單向鏈表中的節點,包含下一個節點的信息。
[代碼說明]: 成員變量
[UML圖形]: 帶普通箭頭的實心線,指向被自己。
[示例]: Node是單向鏈表中的節點,它包含下一個節點的指針。
UML示例圖

對應的Java代碼

public class Node {
    private Node node;
}

 

3.2 單向關聯

[關系說明]: "類A"中有"類B"成員變量,"類B"中沒有"類A"成員變量。
[代碼說明]: 成員變量
[UML圖形]: 帶普通單向箭頭的實心線,指向被擁有者。
[示例]: Person表示"人",IdCard表示"身份證信息",身份證包括id和"身份證編號snum"。一個人擁有唯一的身份證信息。
UML示例圖

對應的Java代碼

public class Person {
    private IdCard idcard;
}
public class IdCard {
    private int id;
    private String snum;
}

 

3.3 雙向關聯

[關系說明]: "類A"中有"類B"成員變量,"類B"也有"類A"成員變量。
[代碼說明]: 成員變量
[UML圖形]: 帶普通雙向箭頭的實心線 或者 不帶箭頭的實心線。
[示例]:  Cusomer表示"客戶",Product表示"產品"。客戶可以購買產品,產品也屬於客戶。
UML示例圖

對應的Java代碼

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

 

3.4 多重性關聯

[關系說明]: 多重性關聯是兩個類之間在關聯對象上的數量關系。有如下幾種:
┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ 表示方法     ┃ 多重性關聯說明                                                                                                    ┃
┣━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ 1..1             │ 表示另一個類的一個對象只與該類的一個對象有關系                                            ┃
┠────────┼──────────────────────────────────────────────────┨
┃ 0..*              │ 表示另一個類的一個對象與該類的零個或多個對象有關系                                    ┃
┠────────┼──────────────────────────────────────────────────┨
┃ 1..*              │ 表示另一個類的一個對象與該類的一個或多個對象有關系                                    ┃
┠────────┼──────────────────────────────────────────────────┨
┃ 0..1             │ 表示另一個類的一個對象沒有或只與該類的一個對象有關系                                 ┃
┠────────┼──────────────────────────────────────────────────┨
┃ m..n            │ 表示另一個類的一個對象與該類最少m,最多n個對象有關系(m≤n)                      ┃
┗━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

[代碼說明]: 成員變量
[UML圖形]: 實心線表示,單向關聯則包括箭頭,雙向關聯包括"兩個箭頭"或"不包含任何箭頭"。
[示例]:  Album是"相冊",Picture是"圖片",相冊有N(N>=0)張圖片。
UML示例圖

對應的Java代碼

public class Album {
    private Picture[] pics;
}
public class Picture {
}

 

3.5 聚合

[關系說明]: 聚合是整體與部分的關系。聚合關系是類與類之間關系比較密切的關聯關系;要區分聚合和其它的關聯關系,必須考察具體的邏輯關系。在聚合關系中,成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨立存在。如車和輪胎是整體和部分的關系。
[代碼說明]: 成員變量
[UML圖形]: 帶空心菱形的實心線,菱形指向整體
[示例]:  Car表示"汽車",Tire表示"輪胎"。"輪胎"本身是個獨立個體。
UML示例圖

對應的Java代碼

public class Company {
    private Nose nose;

    private class Nose {
    }
}

 

3.6 組合

[關系說明]: 組合是整體與部分的關系。組合關系是比聚合關系還要強的關聯關系。但是在組合關系中整體對象可以控制成員對象的生命周期,一旦整體對象不存在,成員對象也將不存在,成員對象與整體對象之間具有同生共死的關系。例如,身體和鼻子,身體包括鼻子,鼻子不能脫離身體而獨立存在。
[代碼說明]: 成員變量
[UML圖形]: 帶實心菱形的實線,菱形指向整體
[示例]: Body表示"身體",Nose表示"鼻子"。身體包含鼻子,鼻子離不開身體。
UML示例圖

對應的Java代碼

public class Company {
    private Nose nose;

    private class Nose {
    }
}

 

4. 依賴(Dependency)

[關系說明]: 依賴是一種使用的關系。在需要表示一個事物使用另一個事物時使用依賴關系,盡量不使用雙向的互相依賴。
[代碼說明]: 局部變量、方法的參數或者對靜態方法的調用
[UML圖形]: 帶箭頭的虛線,指向被使用者
[示例]:  人過河。人是"Person"類,它包括過河函數acrossRiver(),acrossRiver()的參數是過河工具,返回值是過河時間。此處的過河工具是船,船對應的類是Boat。
UML示例圖

對應的Java代碼

public class Person {
    public int acrossRiver(Boat boat);
}
public class Boat {
}



更多內容

1. UML系列01之 UML和繪圖工具Visio介紹

2. UML系列02之 UML類圖(一) 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM