天天看點

架構師必須學會的UML圖小結一、 UML 是什麼二、 UML 畫圖的工具推薦三、UML 類圖中的關系四、小結

一、 UML 是什麼

定義

UML 是統一模組化語言, 是一種開放的方法,用于說明、可視化、建構和編寫一個正在開發的、面向對象的、軟體密集系統的制品的開放方法。

統一模組化語言(Unified Modeling Language,UML)是一種為面向對象系統的産品進行說明、可視化和編制文檔的一種标準語言,是非專利的第三代模組化和規約語言。UML是面向對象設計的模組化工具,獨立于任何具體程式設計語言。

UML 本身是一套符号的規定,就像數學符号和化學符号一樣,這些符号用于描述軟體模型中的各個元素和他 們之間的關系,比如類、接口、實作、泛化、依賴、組合、聚合等。

作用

  1. 幫組開發團隊以一種可視化的方式了解系統的功能需求。
  2. 有利于開發團隊隊員之間在各個開發環節間确立溝通的标準,便于系統文檔的制定和項目的管理。因為 UML 的簡單、直覺和标準性,在一個團隊中用 UML 來交流比用文字說明的文檔要好的多。
  3. UML 為非專業程式設計人士了解軟體的功能和構造,提供了一種直白、簡單、通俗的方法。
  4. 使用 UML 可以友善的了解各種架構的設計方式。

二、 UML 畫圖的工具推薦

  1. MarkDown
  2. PlantUML
  3. Draw.io (Mac)
  4. PowerDesigner (Windows)

工作中第一個常用用來寫文檔,二三個用來畫UML圖比較多(推薦結合使用)。

隻要掌握常用的幾種圖 (用例圖、類圖、時序圖、活動圖) ,就已經邁向架構第一步了,工作學習中交流起來就容易多了。

三、UML 類圖中的關系

在 UML 類圖中,常見的有以下幾種關系:

  • 泛化(Generalization)(繼承)
  • 實作(Realization)
  • 關聯(Association)
  • 聚合(Aggregation)
  • 組合(Composition)
  • 依賴(Dependency)

他們的強弱級别為:

泛化 = 實作 > 組合 > 聚合 > 關聯 > 依賴

UML 類與類之間的關系表示總覽:

架構師必須學會的UML圖小結一、 UML 是什麼二、 UML 畫圖的工具推薦三、UML 類圖中的關系四、小結

以下 UML 圖用的是 Draw.io 來畫的,開源位址:https://github.com/jgraph/drawio

1. 泛化(繼承)

【泛化關系】:是一種繼承關系,表示一般與特殊的關系,它指定了子類如何特化父類的所有特征和行為。
【例如】:男人是人的一種,既有男人的特性也有人的共性。女人也是如此。
【箭頭指向】:帶三角箭頭的實線,箭頭指向父類。
           
架構師必須學會的UML圖小結一、 UML 是什麼二、 UML 畫圖的工具推薦三、UML 類圖中的關系四、小結

2. 實作(Realization)

【實作關系】:是一種類與接口的關系,表示類是接口所有特征和行為的實作。
【例如】:USB 是一個接口,每一個電腦都可以插上 USB 這個接口。
【箭頭指向】:帶三角箭頭的虛線,箭頭指向接口。
           
架構師必須學會的UML圖小結一、 UML 是什麼二、 UML 畫圖的工具推薦三、UML 類圖中的關系四、小結

3. 關聯(Association)

【關聯關系】:是一種擁有的關系,它使一個類知道另一個類的屬性和方法。關聯可以是雙向的,也可以是單向的。
【例如】:老師與學生是雙向關聯,老師有多名學生,學生也可能有多名老師。但學生與某課程間的關系為單向關聯,一名學生可能要上多門課程,課程是個抽象的東西,他不擁有學生。
【代碼展現】:成員變量。
【箭頭及指向】:雙向的關聯可以有兩個箭頭或者沒有箭頭,單向的關聯有一個箭頭。
           
架構師必須學會的UML圖小結一、 UML 是什麼二、 UML 畫圖的工具推薦三、UML 類圖中的關系四、小結

4. 聚合(Aggregation)

【聚合關系】:是整體與部分的關系,可以看成 「has-a」 的關系,部分可以離開整體而單獨存在。
【例如】:電腦和鍵盤是整體和部分的關系,電腦沒了鍵盤仍然可以存在。
【代碼展現】:成員變量。
【箭頭及指向】:帶空心菱形的實心線,菱形指向整體。
           
架構師必須學會的UML圖小結一、 UML 是什麼二、 UML 畫圖的工具推薦三、UML 類圖中的關系四、小結

5. 組合(Composition)

聚合關系】:是整體與部分的關系,可以看成 「contains-a」 的關系,部分離開整體後無法單獨存在。
【例如】:鳥兒和翅膀是整體和部分的關系,鳥兒沒了翅膀不能獨立存在。
【代碼展現】:成員變量。
【箭頭及指向】:帶實心菱形的實心線,菱形指向整體。
           
架構師必須學會的UML圖小結一、 UML 是什麼二、 UML 畫圖的工具推薦三、UML 類圖中的關系四、小結

6. 依賴(Dependency)

【聚合關系】:是一種使用的關系,即一個類的實作需要另一個類的協助,是以要盡量不使用雙向的互相依賴。
【例如】:人依賴計算機實作玩電腦遊戲的目的。
【代碼展現】:局部變量、方法的參數或者對靜态方法的調用。
【箭頭及指向】:帶箭頭的虛線,指向被使用者。
           
架構師必須學會的UML圖小結一、 UML 是什麼二、 UML 畫圖的工具推薦三、UML 類圖中的關系四、小結

如果要畫項目的設計圖,有很多類的關系圖,這個軟體可以使用。如果需要快速在設計某個功能時也可以使用 PlantUML 來實作,怎麼快怎麼來。

可以在網頁上畫,在 IDE中也有插件 :

架構師必須學會的UML圖小結一、 UML 是什麼二、 UML 畫圖的工具推薦三、UML 類圖中的關系四、小結

比如我在總結設計模式系列時,就用這個來畫。

用代碼來直接渲染生成UML 設計圖檔

代碼如下:

@startuml
skinparam classAttributeIconSize 0

package "class ChainOfResponsibility(責任鍊模式)"  {
    abstract class Handler
    {
    #setSuccessor(Handler)
    +handle():void
    }
    note left: 抽象處理者

    class HandlerA
    {
    +handle():void
    }

    class HandlerB
    {
    +handle():void
    }

     class HandlerC
     {
     +handle():void
     }

    Handler o-- Handler:0..1
    Handler <|-- HandlerA
    Handler <|-- HandlerB
    Handler <|-- HandlerC
    Client ..> Handler
}
@enduml
           

四、小結

  1. PlantUml

繼續閱讀