使用PlantUML繪製類圖
本文基於sublime的PlantUML外掛繪製類圖。如需瞭解外掛安裝,請點選 ofollow,noindex">Sublime安裝PlantUML外掛
類的UML表示
使用UML表示一個類,主要由三部分組成。 類名
、 屬性
、 方法
。其中 屬性
和 方法
的訪問修飾符用 -
、 #
、 +
表示 private
、 protected
、 public
。

如圖所示,表示 A
類有一個 private
屬性, protected
建構函式和 public
方法。
@startuml class A{ - String field + A() # void method() } note right: 這是測試類 A @enduml 複製程式碼
類的關係
在面嚮物件語言中,類的關係有很多種,可以概括為三類: 泛化
、 依賴
、 關聯
。
泛化
泛化指父類跟子類的關係,表示 is-a
的關係。如父類是抽象類或普通類,則這種關係叫繼承。如,父類是介面,則這種關係叫實現。UML中,繼承和實現由不同的標記表示。
繼承
PlantUML用 --|>
表示繼承關係。實線和三角形的抽象表示,指向誰,即繼承誰。
@startuml class A abstract B ' A 繼承 B A --|> B @enduml 複製程式碼

實現
PlantUML用 ..|>
表示實現關係。虛和三角形的抽象表示,指向誰,即實現誰。
@startuml class A interface C ' A 實現 C A ..|> C @enduml 複製程式碼

依賴
類之間,最弱的關聯方式。常用於在A類的方法中使用B類的物件作為引數、區域性變數或者對B類靜態方法的呼叫。
PlantUML用 ..>
表示依賴關係。虛線和箭頭的抽象表示,指向誰,即依賴誰。
@startuml class A class B ' A 依賴 B A ..> B @enduml 複製程式碼

關聯
關聯關係,即物件之間的引用關係。常使用類的屬性表達。
單向關聯
B類作為A類的屬性,表示A類與B類有關聯。 PlantUML用 -->
表示單向關聯。實線線和箭頭的抽象表示,指向誰,即關聯誰。
@startuml class A{ - B b } class B ' A 關聯 B A --> B @enduml 複製程式碼

雙向關聯
B類作為A類的屬性同時,A類也是B類的屬性,表示雙向關聯。 PlantUML用 --
表示雙向關聯。或者用 <-->
。
@startuml class A{ - B b } class B{ - A a } ' A 關聯 B A -- B @enduml 複製程式碼

自關聯
A類關聯A類自身。常見於單例模式。

@startuml class A{ - A a } ' A 關聯 A A --> A @enduml 複製程式碼
聚合
在關聯關係的基礎上,延伸出聚合關係,強的關聯關係,表示 has-a
關係。整體與部分的關係,部分不依賴於整體,可獨立存在。常用於成員變數。
如;汽車和輪胎的關係,輪胎可作為獨立的商品出售。
PlantUML用 o--
表示聚合關係。實線和空心菱形的抽象表示,指向誰,表示誰是整體。
@startuml class Car{ - List<Wheel> wheels } class Wheel ' Car 關聯 Wheel Car "1" o-- "4" Wheel @enduml 複製程式碼

圖中數字 1
和 4
也表示一對多關聯。 N
對 N
同理。
組合
在關聯關係的基礎上,延伸出另外一種關聯關係,組合關係,表示 contains-a
關係。整體與部分的關係,部分依賴於整體,不可獨立存在。常用於成員變數。
如:身體和動作的關係。
PlantUML用 *--
表示聚合關係。實線和實心菱形的抽象表示,指向誰,表示誰是整體。
@startuml class Body{ - List<Action> actions } class Action ' Body 關聯 Action Body "1" *-- "N" Action @enduml 複製程式碼

PlantUML排版
相比較其他的UML軟體或外掛。PlantUML的優勢在於,儲存的是文字檔案,可以方便的進行團隊協作以及高度可定製化的依賴關係。但是,最大的缺點在於,排版是通過外掛自動生成的,排版效果不盡人意。因此,PlantUML提供四個關鍵字 up
down
left
right
。指定類與類之間的相對關係。
default
@startuml class A1 class B1 A1 --> B1 class A2 class B2 A2 <-- B2 @enduml 複製程式碼

箭頭向左時,被指向物件在上; 箭頭向右時,被指向物件在下。
up
@startuml class A1 class B1 A1 -up-> B1 class A2 class B2 A2 <-up- B2 @enduml 複製程式碼

使用up時,被指向物件在上。
down
@startuml class A1 class B1 A1 -down-> B1 class A2 class B2 A2 <-down- B2 @enduml 複製程式碼

使用down時,被指向物件在下。
left
@startuml class A1 class B1 A1 -left-> B1 class A2 class B2 A2 <-left- B2 @enduml 複製程式碼
使用left時,被指向物件在左。

right
@startuml class A1 class B1 A1 -right-> B1 class A2 class B2 A2 <-right- B2 @enduml 複製程式碼

使用right時,被指向物件在右。