UML急速入門

UML是什麼

UML定義:

  • 統一建模語言(Unified Modeling Language,縮寫UML)
  • 非專利的第三代建模和規約語言

UML特點:

  • UML是一種開放方法
  • 用於說明、可視化、構建和編寫一個正在開發的、面向對象的、軟件密集系統的製品的開放方法
  • UML展現了一系列最佳工程實踐,這些最佳實踐在對大規模,複雜系統進行建模方面,特別是在軟件架構層次已經被驗證有效

在UML2.2中一共定義了14中圖示,大體分爲三類:

  • 結構式圖形:強調的是系統式的建模
  • 行爲式圖形:強調系統模型中觸發的事件
  • 交互式圖形:屬於行爲式圖形的子集,強調系統模型中資料流程

1.結構式圖形:

  • 靜態圖(類圖、對象圖、包圖)
  • 實現圖(組件圖、部署圖)
  • 剖面圖
  • 複合結構圖

2.行爲式圖形:

  • 活動圖
  • 狀態圖
  • 用例圖

3.交互式圖形:

  • 通信圖
  • 交互概述圖(UML2.0)
  • 時序圖(UML2.0)
  • 時間圖(UML2.0)

UML類圖:

類圖(Class Diagram):用於表示類、接口、實例等之間相互的靜態關係,雖然名字叫類圖,但類圖中並不只有類。我們來看一個比較全面的UML類圖樣例:
UML急速入門

首先在圖的上方可以看到一個“動物”矩形框,這個矩形框就代表一個類。類圖分三層,第一層是類的名稱,如果是抽象類,類名會使用斜體表示。第二層是類的屬性,也就是類的字段或變量。第三層是類的行爲,也就是方法或者說函數。

圖中左下角的“飛翔”表示一個接口圖,與類圖的主要區別是接口圖頂端有<<interface>>。第一層自然是接口的名稱,第二層則是接口方法。接口還有另一種表示方法,也就是圖中的棒棒糖表示法。

然後我們來簡單說說子類與父類及實現類與接口的關係在UML類圖中的表示方式:

當類與類之間是繼承關係時,使用空心三角形和實線來表示,而一個類實現了一個接口時,使用空心三角形和虛線來表示,不管是繼承關係還是實現關係,三角形箭頭都是由子類指向父類或接口

類與類之間的關係及其在UML類圖中的表示方式,關聯關係:

當一個類“知道”另一個類時,那麼它們就具有關聯關係,關聯關係使用實線箭頭表示。例如圖中的企鵝需要知道氣候這個類,此時企鵝類與氣候類就是關聯關係

聚合關係:

圖中的大雁羣和大雁這兩個類就是聚合關係,我們都知道大雁是羣居動物,多隻大雁可以聚合成一個雁羣,所以它們之間就滿足聚合關係。聚合表示一種弱的“擁有關係”,體現的是A對象可以包含B對象,但B對象不是A對象的一部分。聚合關係使用空心菱形和實線箭頭來表示

合成(組合)關係:

合成是一種強的”擁有“關係,體現了嚴格的部分和整體的關係,部分與整體的生命週期一樣。上圖中的鳥和其翅膀就是合成(組合)關係,因爲它們是部分和整體的關係,並且翅膀和鳥的生命週期是相同的。合成關係用實心的菱形和實線箭頭來表示。另外,在圖中合成關係的連線兩端還有一個數字1和數字2,這被稱爲基數,表明這一端的類可以有幾個實例。很顯然,一隻鳥應該有兩隻翅膀,所以翅膀的基數是2。如果一個類可能有無數個實例,則就用n來表示。除了合成關係外關聯關係以及聚合關係也可以有基數

依賴關係:

我們都知道動物維持生命就得進行新陳代謝,那麼就需要氧氣、水等物質。也就是說,動物依賴於氧氣和水。所以它們之間是依賴關係,使用虛線箭頭來表示。


接着我們再來看單個類的類圖:
UML急速入門

同樣的從上至下分別是類名、屬性以及行爲。屬性和行爲前面都有權限表示符,+ 表示public、- 表示private、# 表示protected、~ 表示default。屬性和行爲中有下劃線的表示static,即靜態的屬性、方法。

而與該類圖所對應的Java代碼如下:

public abstract class StudentClass {

    public String name;

    private int age;

    protected double weight;

    double height;

    public static char sex;

    public void eat(String food) {
    }

    protected void drink() {
    }

    private void walk() {
    }

    void run() {
    }

    public abstract void study();

    public boolean openMac() {
        return true;
    }

    public static void playGame(){
    }
}

記憶技巧

下面介紹一些簡單UML類圖的記憶技巧:

記憶技巧1:UML箭頭方向:

  • 從子類指向父類

可能有些人會認爲子類是以父類爲基礎的,箭頭應從父類指向子類。但我們都知道定義子類時需要通過extends關鍵字指定父類,那麼子類一定是知道父類定義的,只有知道對方信息時才能指向對方,而父類是不知道子類是如何定義的,所以箭頭方向應從子類指向父類。

記憶技巧2:實線 - 繼承 | 虛線 - 實現:

  • 空心三角箭頭:繼承或實現:
  • 實線 - 繼承,is a 關係,擴展目的,所以不虛,很結實
  • 虛線 - 實現,虛線之所以“虛”是因爲無實體,因爲接口是需要被實現的
    UML急速入門

記憶技巧3:實線 - 關聯 | 虛線 - 依賴:

  • 虛線 - 依賴關係:臨時用一下,若即若離,虛無縹緲,若有若無,所以是虛線,表示一種使用關係,一個類需要藉助另一個類來實現功能。一般是一個類裏的函數使用了另一個類作爲參數,或作爲返回值
  • 實線 - 關聯關係:關係穩定,實打實的關係,鐵哥們,表示一個類對象和另一個類對象有關聯,通常是一個類中有另一個類對象做爲屬性
    UML急速入門

記憶技巧4: 空心菱形 - 聚合 | 實心菱形 - 組合:

  • 我們可以想象菱形就是一個盛東西的器皿(例如盤子,或者代碼中的集合容器)
  • 而聚合代表空器皿裏可以放很多相同的東西,聚在一起(箭頭方向所指的類),所以是整體和局部的關係,兩者有着獨立的生命週期,是has a的關係,是弱關係
  • 組合則代表器皿裏已經有實體結構的存在,可以說是生死與共了,是整體與局部的關係,和聚合關係相比,關係更加強烈,兩者有相同的生命週期,contains - a 的關係,是強關係

UML急速入門

記憶技巧5:常見基數表達及含義,假設有A類和B類,數字標記在A類一端:

  • 0..1:0個或1個實例,在系統某一時刻,代表B類的實例可以與0個或1個A類的實例相關
  • 0..*:0個或多個實例,代表B類的實例可以與0個或多個A類的實例相關
  • 1..1:1個實例,代表B類的實例可以與1個A類的實例相關
  • 1:只能有1個實例,代表B類的實例可以與1個A類的實例相關
  • 1..*:至少有1個實例,代表B類的實例可以與1個或多個A類的實例相關

注:通常會省略“..”直接使用數字表示


UML時序圖:

時序圖(Sequence Diagram):是顯示對象之間交互的圖,這些對象是按時間順序排列的

時序圖中包括的建模元素主要有:

  • 對象(Actor)
  • 生命線(Lifeline)
  • 控制焦點(Focus of control)
  • 消息(Message)

我們來看一個簡單的時序圖, 左邊是代碼右邊是時序圖:
UML急速入門

右邊的時序圖的三個方框表示三個實例:Client、Service、Device,而下面的虛線則是該實例的生命線,時間從上向下流逝,生命線僅存在於實例的生命週期內。其中虛線上的細長方形表示實例處於某種活動中,稱之爲控制焦點。黑色的實線實心箭頭表示方法的同步調用,異步調用是實線非實心箭頭,而虛線非實心箭頭則表示方法的結束返回。這些箭頭所表示的元素就是消息,例如圖中的work和open等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章