markdown工具链plantuml:像写代码一样绘制 UML 模型-用例图
对于程序员来说,为心无旁骛,全心投入到系统架构、软件、算法的设计中,通常不希望双手在键盘与鼠标之间频繁切换,导致大脑焦点不集中,影响工作效率。
然而,在做业务建模、需求、分析、设计时,需要绘制用例图、类图、序列图等,并且绘图软件大多通过鼠标操作。那么,有没有一种绘图软件不需要通过鼠标操作呢?答案就是 plantuml 标记语言。
plantuml 可以嵌入到 markdown 文档中,结合 vim 编辑器,真正实现键不离手。同时,plantuml 的使用者不需要关心图的布局与布线,这些由软件自动完成。相比 visio 等可视化软件,plantuml 绘图的布局布线更加高效、自然。
推荐使用 vnote 软件,其将这上述几个软件集成在一起。
UML模型
UML (Unified Modeling Language, 统一建模语言) 是非专利的第三代建模和规约语言。在UML系统中有3种主要的模型:
- 功能模型:从用户的角度展示系统的功能,包含用例图;
- 对象模型: 采用对象,属性,操作,关联等概念展示系统的结构和基础,包括类別图、对象图。
- 动态模型: 展现系统的内部行为,包括序列图,活动图,状态图。
UML 模型有9种图,包括:用例图、类图、状态图、协作图、活动图、序列图、构件图、部署图。图是模型中信息的图形表达方式,但是UML模型独立于UML图存在。
不同的UML图使用场景不同,在软件开发的过程中,不同的阶段使用不同的图,通常,软件开发的不同阶段使用到的UML模型图如下:
- 需求分析: 用例图,对外部的参与者以及其需要的系统功能建模,表示客户需求;
- 概要设计: 类图、状态图、协作图、活动图,描述系统的静态结构、动态特征;
- 详细设计:状态图、协作图、活动图、序列图,产生技术解决方案;
- 测试:类图、构件图、部署图,单元测试使用类图,集成测试使用构建图、部署图。
plantuml 软件是众多支持 UML 建模的开源软件中的一个,其允许用户从纯文本语言创建UML图。
用例图
用例图主要用来描述“用户、需求、系统功能单元”之间的关系。
它展示一个外部用户能够观察到的系统功能模型图。用例图多用于静态建模阶段(主要是业务建模和需求建模),帮助开发团队以一种可视化的方式理解系统的功能需求。
顾名思义,用例图主要由用例、角色、关系组成。
例如,在一个论坛系统中:
- 用例:登录论坛、发帖子、查询贴子、删除贴子、评论贴子、用户级别管理等;
- 角色:论坛游客、论坛用户、系统管理员;
- 关系:用例与角色之间的连接。
用例
plantuml 标记语言中,可以使用如下两种方式表示用例:
- 使用
(..)
定义用例,即用例用圆括号括起来; - 使用关键字
usecase
声明用例
上述两种方式都可以使用as
定义别名。
@startuml
(登录论坛)
(发帖子) as (tiezi_add)
usecase 删帖子 as tiezi_del
#enduml
include 与 extend
如果一个用例 include 一个用例可以使用.>
+ :include
表示;
如果一个用例extend 一个用例可以使用.>
+ :extend
表示;
@startuml
(删除帖子) as (del)
(查询帖子) as (lookup)
del .> lookup : include
@enduml
构造类型
可以使用 <<..>>
定义用例或者角色的构造类型
@startuml
(删除帖子) as (del) << 操作 >>
@enduml
角色
plantuml 标记语言中,角色的定义也有两种方法:
- 使用
:...:
定义角色,即使用两个冒号将角色括起来; - 使用关键字
actor
定义角色;
@startuml
:游客:
actor 论坛用户 as user
actor 论坛管理者 as admin
@enduml
继承
如果一个角色继承另一个,可以使用<|--
符号表示;
@startuml
user <|-- admin
@enduml
关系
plantuml 标记语言中,使用箭头-->
连接角色与用例,表示他们之间的关系,默认是竖直方向。
另外, 横杠-
越多,表示箭头越长,可以将不同的角色在布局上分开。
@startuml
actor 游客 as visitor
actor 论坛用户 as user
(查询帖子) as lookup
(发表帖子) as add
user --> lookup
user --> add
visitor -> lookup
@enduml
注释
plantuml 使用 note left of, note right of, note top of, note bottom of
等关键字声明注释,可通过as
声明注释别名,然后使用..
连接其他对象。
@startuml
actor 论坛用户 as user
(查询帖子) as lookup
(发表帖子) as add
user -> lookup
user -> add
note as note1
发表帖子之前需要查询帖子
end note
add .. note1
note1 .. lookup
@enduml
箭头方向
plantuml 中,使用箭头-->
连接角色与用例,表示他们之间的关系,默认是竖直方向。可以用一个-
表示水平方向。
可以给箭头添加left, right, up, down
等关键字来改变方向
@startuml
论坛用户 -left-> (查询帖子)
论坛用户 -right-> (发表帖子)
论坛用户 -up-> (删除帖子)
论坛用户 -down-> (更新帖子)
@enduml
分割
用 newpage 关键字将图示分解为多个页面。
@startuml
论坛用户 --> (查询帖子)
newpage
游客 --> (查询帖子)
@enduml
构图
默认从上往下构建图示。
你可以用 left to right direction
命令改变图示方向。
@startuml
left to right direction
论坛用户 --> (查询帖子)
@enduml
注意:不支持
right to left direction
命令。
参考
- plantuml 中文教程
- 软件方法:业务建模与需求 潘加宇
- planttext线上编辑plantuml
NFVschool 微信公共号
NFVschool,关注最前沿的网络技术。