PlantUML 是一个开源项目,能够方便的绘制各种UML图形:
- 时序图
- 用例图
- 类图
- 活动图
- 组件图
- 状态图
- 对象图
PlantUML 使用一个非常简单直观的语言来定义图形, 每个定义均包含在 @startuml
和 @enduml
。
时序图
时序图中,使用 ->
绘制参与者
之间的消息。例如:
@startuml
Alice -> Proxy: SIP MESSAGE 1
Proxy --> Bob: SIP MESSAGE 2
Proxy <- Bob: 200 OK 1
Alice <-- Proxy: 200 OK 2
@enduml
PlantUML 绘制的结果如图:
为了可读性更好,PlantUML支持 <-
。 对于 -->
/ <--
, PlantUML会生成点线。
用例图
用例图中,使用 ()
定义 用例
, ::
定义 主角
。例如:
@startuml
:用户: -> (查询)
:用户: -> (缴费)
:用户: -> (取款)
:用户: -> (转账)
@enduml
PlantUML 绘制的结果如图:
类图
类图中,使用 <|--
定义 继承
, *--
定义 组合
, o--
定义 聚合
。例如:
@startuml
Class01 <|-- Class02
Class03 *-- Class04
Class05 o-- Class06
@enduml
PlantUML 绘制的结果如图:
活动图
活动图中, 使用 ""
定义 活动
, (*)
定义 起点
和 终点
, -->
定义 箭头
。例如:
@startuml
(*) --> "First Activity"
--> "Second Activity"
--> (*)
@enduml
PlantUML 绘制的结果如图:
组件图
组件图中,使用 []
定义 组件
, ()
定义 接口
, 可以组合使用 ..
, --
, -->
。例如:
@startuml
() DataAccess - [First Component]
[First Component] --> HTTP
@enduml
PlantUML 绘制的结果如图:
状态图
状态图中,直接使用 名称
定义 状态
, [*]
定义 起点
和 终点
, -->
定义 箭头
。 例如
@startuml
[*] --> State1
State1 --> [*]
State1 -> State2
State2 --> [*]
@enduml
PlantUML 绘制的结果如图:
对象图
对象图中,使用 object
关键字定义 对象
,<|--
定义 继承
, *--
定义 组合
, o--
定义 聚合
。例如:
@startuml
object Object01
object Object02
object Object03
object Object04
object Object05
object Object06
Object01 <|-- Object02
Object03 *-- Object04
Object05 o-- Object06
@enduml
PlantUML 绘制的结果如图:
在Jekyll中使用PlantUML
Jekyll 提供插件支持,可以通过插件的方式在Jekyll中使用PlantUML。具体方法参看 这里。
注意, 这种方式只能在本地使用,无法在Github上使用。
在org-mode中使用PlantUML
Emacs的org-mode提供对PlantUML的支持。 配置如下:
(org-babel-do-load-languages
'org-babel-load-languages
'((plantuml . t)
))
(setq org-confirm-babel-evaluate nil)
(setq org-plantuml-jar-path (expand-file-name "/path/to/plantuml.jar"))
通过上述配置,在 .org
文件中,输入:
#+BEGIN_SRC plantuml :file /path/to/result.png :cmdline -charset UTF-8
Alice -> Proxy: SIP MESSAGE 1
Proxy --> Bob: SIP MESSAGE 2
Proxy <- Bob: 200 OK 1
Alice <-- Proxy: 200 OK 2
#+END_SRC
按下 C-c C-c
便可生成UML图形。
注意
PlantUML的功能远不止上述介绍的这些,这里抛砖引玉,更多更详细的介绍参看 这里。