UML類圖介紹

UML類圖很是簡單,能夠用下面的圖表示一個類:spa

類圖

該圖表示一個叫作Person的類,該類有name、age、sex三個private屬性,每一個屬性的類型緊跟在冒號的後面。該類有walk和speak兩個方法,其中walk方法是public的,而speak方法是protected的,兩個方法的返回值類型緊跟在冒號的後面。
若是要表示一個接口,則用下面的圖表示:設計

圖片描述

下面介紹類與類之間的關係。若是按照關係的緊密程度從弱到強劃分,類與類之間的關係包括:code

  1. 依賴
  2. 關聯
  3. 聚合
  4. 組合
  5. 實現
  6. 繼承

下面依次對這些關係進行介紹。繼承

依賴關係

依賴關係是全部類間關係中最弱的一種,它用下面的圖表示:
圖片描述接口

圖中的箭頭方向表示依賴的方向,上圖表示類A依賴類B。
依賴,顧名思義表示一個實體的存在必須依賴另外一個實體的存在。能夠這樣認爲,若是類A依賴類B,那麼類A只有在類B存在的狀況下,才能編譯經過。下面代碼是依賴的一個例子:生命週期

public class UserController {
    
    private UserService userService;

    public User query(Strint userId) {
        User user = userService.queryUser(userId);
        return user;
    }
}

在這段代碼,UserController類同時依賴於UserService和User兩個類,能夠用下面的類圖表示它們的依賴關係:
圖片描述遊戲

可見依賴關係大量的存在於咱們的代碼中,但千萬不要在項目設計時將所有的依賴關係都畫出來,這不只很累,並且也沒有必要。當梳理依賴關係時,先要搞清楚你關注什麼,想表達什麼,只畫出真正須要畫的就能夠。圖片

關聯關係

關聯關係表示兩個實體間存在必定的聯繫,這種聯繫比依賴關係更緊密,不單單只是「兩個實體觸碰到」這樣鬆散的關係。例如Student和School這兩個類,一個學生必定會有一個對應的學校,那麼Student和School間就存在關聯關係,且它們的關係是一對多的。這個關係表如今代碼層面以下所示:it

class Student {
    private String name;

    private String sex;

    private School school;
}

或者編譯

class Student {
    private String name;

    private String sex;

    private String schoolId;
}

上面這兩種代碼均可以用下面的UML圖表示:
圖片描述

關聯關係也能夠用於領域建模,例如要設計一個骰子游戲,遊戲者連續投擲兩次篩子,若是兩次點數的總數是7,則遊戲者贏,不然遊戲者輸。能夠用下面UML圖對這個問題進行領域建模,各實體間使用的就是關聯關係。這也是關聯關係的一種特殊用法。
圖片描述

聚合&組合

聚合也是一種關聯關係,可是這種關聯關係存在總體與部分的語義。例如大雁和大雁羣,一隻大雁是整個大雁羣的一部分。這就是一種聚合關係,具備has-a的語義。下面的UML圖用來描述聚合關係。
圖片描述

組合是一種強聚合關係,它表示總體和部分之間具備相同的生命週期,同生共死。例如鳥和翅膀,鳥若是死掉了,那麼它的翅膀也會跟着死掉。組合關係具備contains-a的語義。下面的UML圖用於表達組合關係。
圖片描述

記憶聚合和組合UML圖畫法的小技巧:菱形就至關於一個容器,容器指向的實體就是總體,因此上面圖中的菱形分別指向大雁羣和鳥。此外,因爲組合關係的緊密程度比聚合關係更強,因此組合關係用實心菱形,聚合關係用空心菱形。

繼承&實現

繼承和實現都是Java中的基礎,比較容易理解,它們是類與類之間關係最強的。分別用下面的UML圖表示。
繼承示例:
圖片描述

實現示例:
圖片描述

PS:實現關係應該用空心箭頭,但我使用的UML畫圖軟件是visual paradigm,找到的表示「實現關係」的箭頭就只有實心的。

應用舉例

請根據如下描述,畫出相應的UML圖:
神州六號飛船是神州飛船系列的一種,它由軌道艙、返回艙、推動艙和逃逸救生塔等組成;航天員能夠在返回艙內駕駛飛船,軌道艙則是航天員工做和休息的場所。在緊急的狀況下,能夠利用逃逸救生塔逃生。在飛船兩側有多個太陽能電池翼,能夠爲飛創提供電能;
根據問題描述,能夠抽象出以下實體

  1. 神州飛船
  2. 神州六號飛船
  3. 軌道艙
  4. 返回艙
  5. 推動艙
  6. 逃逸救生塔
  7. 航天員
  8. 太陽能電池翼

繪製的UML圖以下所示:
圖片描述

相關文章
相關標籤/搜索