1. 程式人生 > >UML類圖介紹以及PlantUML使用方法

UML類圖介紹以及PlantUML使用方法

方法名 som 技術 tro 時間 對應關系 比較 關系 uml圖

類的UML表示方法

UML介紹

類圖,是UML(統一建模語言)中用於描述"類"以及"類與類"之間的示意圖。它形象的描述出了系統的結構,幫助人們理解系統。
類圖是在"所有的UML圖"中,實用頻率非常之高;掌握它對於我們軟件設計,以及交流都很有幫助。

對於類圖而言,它的基本單位是類。類主要由三部分組成:類名、屬性、操作(函數)。UML類的表示大致如下:

技術分享圖片

類名

類的名稱

屬性

UML類圖中,屬性的基本格式: 可見性 名稱: 類型 [=缺省值]

  • 可見性 -- 表示該屬性對於類外的元素而言是否可見。

    主要包括公有(public)、私有(private)、受保護(protected)以及包內可見(package private)四種,在類圖中分別用符號+、-、#和~表示。

    UML中可見性和符號的對應關系如下所示:

可見性 符號
public +
package private
protected #
private -

在PlantUML中的表示形式如下圖所示:

技術分享圖片

  • 名稱 -- 表示屬性名。
  • 類型 -- 表示屬性的數據類型。可以是基本數據類型,也可以是用戶自定義類型。
  • 缺省值 -- 屬性的初始值。它是一個可選項。

操作

UML類圖中,屬性的基本格式: 可見性 名稱(參數類表) [:返回類型]

  • 可見性 -- 表示該屬性對於類外的元素而言是否可見。它的表示方法與"屬性的可見性"相同。
  • 名稱 -- 表示方法名。
  • 參數列表 -- 表示方法的參數。參數個數是任意的,多個參數之間用逗號","隔開。
  • 返回類型 -- 表示方法的返回值類型。它是一個可選項;可以是具體的返回類型,可以是void,也可以無返回類型(構造方法)。

"實體類", "抽象類", "接口"的UML表示和在PlantUML中的表示

  • 實體類的UML表示

    實體類在UML用類名表示。在PlantUML中實體類用 “帶圓圈的C + 類名” 表示。

  • 抽象類的UML表示

    抽象類和實體類的UML表示法類似。區別是: "抽象類的類名是斜體",而"實體類的類名不是斜體"

    ;在PlantUML中用 “帶圓圈的A + 斜體類名” 表示。

  • 接口的UML表示

    在UML中,通過在"類名"位置添加“interface” 關鍵字來表示接口。在PlantUML中用 “帶圓圈的I + 斜體類名” 表示。

"實體類", "抽象類", "接口"在PlantUML中的表示如下圖:

技術分享圖片

UML類圖的幾種關系

在UML類圖中,關系可以分為4種: 泛化, 實現, 關聯 和 依賴。

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

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

泛化(Generalization)

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

示例代碼:

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

UML示例圖:(以下所有的示例均是用PlantUML繪制而成,PlantUML使用手冊可參看考:PlantUML參考指南 )

技術分享圖片

實現(Realization)

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

示例代碼:

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

UML示例圖:

技術分享圖片

關聯(Association)

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

自關聯

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

示例代碼:

    public class Node {
        private Node node;
    }

UML示例圖:

技術分享圖片

單向關聯

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

示例代碼:

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

UML示例圖:

技術分享圖片

雙向關聯

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

示例代碼:

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

UML示例圖:

技術分享圖片

聚合(Aggregation)

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

示例代碼:

    public class Car {
        private Tire tire;
    }
    
    public class Tire {
        private double radius;
        private double perimeter;
    }

UML示例圖:

技術分享圖片

組合(Composition)

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

示例代碼:

    public class Body {
        private Nose nose;
    
        private class Nose {
        }
    }

UML示例圖:

技術分享圖片

依賴(Dependency)

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

示例代碼:

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

UML示例圖:

技術分享圖片

參考資料

UML系列02之 UML類圖(一)

UML系列03之 UML類圖(二)

PlantUML參考指南

UML類圖介紹以及PlantUML使用方法