本文基於sublime的PlantUML插件繪製類圖。如需瞭解插件安裝,請點擊Sublime安裝PlantUML插件git
使用UML表示一個類,主要由三部分組成。類名
、屬性
、方法
。其中屬性
和方法
的訪問修飾符用 -
、#
、+
表示 private
、protected
、public
。github
如圖所示,表示A
類有一個private
屬性,protected
構造函數和public
方法。函數
@startuml
class A{
- String field
+ A()
# void method()
}
note right: 這是測試類 A
@enduml
複製代碼
在面嚮對象語言中,類的關係有不少種,能夠歸納爲三類:泛化
、依賴
、關聯
。測試
泛化指父類跟子類的關係,表示is-a
的關係。如父類是抽象類或普通類,則這種關係叫繼承。如,父類是接口,則這種關係叫實現。UML中,繼承和實現由不一樣的標記表示。spa
PlantUML用 --|>
表示繼承關係。實線和三角形的抽象表示,指向誰,即繼承誰。插件
@startuml
class A
abstract B
' A 繼承 B
A --|> B
@enduml
複製代碼
PlantUML用 ..|>
表示實現關係。虛和三角形的抽象表示,指向誰,即實現誰。3d
@startuml
class A
interface C
' A 實現 C
A ..|> C
@enduml
複製代碼
類之間,最弱的關聯方式。經常使用於在A類的方法中使用B類的對象做爲參數、局部變量或者對B類靜態方法的調用。code
PlantUML用 ..>
表示依賴關係。虛線和箭頭的抽象表示,指向誰,即依賴誰。cdn
@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
複製代碼
相比較其餘的UML軟件或插件。PlantUML的優點在於,存儲的是文本文件,能夠方便的進行團隊協做以及高度可定製化的依賴關係。可是,最大的缺點在於,排版是經過插件自動生成的,排版效果不盡人意。所以,PlantUML提供四個關鍵字 up
down
left
right
。指定類與類之間的相對關係。
@startuml
class A1
class B1
A1 --> B1
class A2
class B2
A2 <-- B2
@enduml
複製代碼
箭頭向左時,被指向對象在上; 箭頭向右時,被指向對象在下。
@startuml
class A1
class B1
A1 -up-> B1
class A2
class B2
A2 <-up- B2
@enduml
複製代碼
使用up時,被指向對象在上。
@startuml
class A1
class B1
A1 -down-> B1
class A2
class B2
A2 <-down- B2
@enduml
複製代碼
使用down時,被指向對象在下。
@startuml
class A1
class B1
A1 -left-> B1
class A2
class B2
A2 <-left- B2
@enduml
複製代碼
使用left時,被指向對象在左。
@startuml
class A1
class B1
A1 -right-> B1
class A2
class B2
A2 <-right- B2
@enduml
複製代碼
使用right時,被指向對象在右。
畫類圖,只是PlantUML的功能之一,還能夠使用它畫用例圖、順序圖、活動圖。更多用法,請關注後續博客或訪問官網。
此處是廣告:Flueky的技術小站