简介
对立建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言。UML 是一种凋谢的办法,用于阐明、可视化、构建和编写一个正在开发的、面向对象的、软件密集零碎的制品的凋谢办法
编写 UML 的软件很多,然而根本是可视化的,须要手动编写,本文次要介绍基于文本的 UML 编写工具——PlantUML。
装置
PlantUML 有以下依赖:
- graphviz
- jdk
- Jetbrains IDE 插件(可选,本文举荐)
装置 graphviz
本文应用 Homebrew
装置graphviz
,终端执行以下命令装置graphviz
。
brew install graphviz
装置结束后查看版本信息。
dot -v
输入如下:
dot - graphviz version 2.47.0 (20210316.0004)
libdir = "/usr/local/Cellar/graphviz/2.47.0/lib/graphviz"
Activated plugin library: libgvplugin_dot_layout.6.dylib
Using layout: dot:dot_layout
Activated plugin library: libgvplugin_core.6.dylib
Using render: dot:core
Using device: dot:dot:core
The plugin configuration file:
/usr/local/Cellar/graphviz/2.47.0/lib/graphviz/config6
was successfully loaded.
render : cairo dot dot_json fig gd json json0 map mp pic pov ps quartz svg tk visio vml vrml xdot xdot_json
layout : circo dot fdp neato nop nop1 nop2 osage patchwork sfdp twopi
textlayout : textlayout
device : bmp canon cgimage cmap cmapx cmapx_np dot dot_json eps exr fig gd gd2 gif gv icns ico imap imap_np ismap jp2 jpe jpeg jpg json json0 mp pct pdf pic pict plain plain-ext png pov ps ps2 psd sgi svg svgz tga tif tiff tk vdx vml vmlz vrml wbmp webp xdot xdot1.2 xdot1.4 xdot_json
loadimage : (lib) bmp eps gd gd2 gif jpe jpeg jpg pdf png ps svg webp xbm
jdk
本文应用 Homebrew
装置 openjdk
即可,终端执行以下命令装置openjdk
。
brew install openjdk
装置结束后查看版本信息。
java -version
输入如下:
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment (build 11.0.10+9)
OpenJDK 64-Bit Server VM (build 11.0.10+9, mixed mode)
Jetbrains IDE 插件装置
本文以 Goland
为例。
- 关上 IDE 设置,关上
Plugins
窗口,搜寻PlantUML integration
- 装置结束后重启 IDE
-
关上 IDE 设置,搜寻
plantuml
,确保Remote rendering
已敞开
PlantUML 语法
以最罕用的时序图、类图、流程图、组件图举例。
时序图
Get Started
-
IDE 新建一个空我的项目,关上我的项目之后,右键新建文件
-
抉择
Sequence
-
PlantUML 菜单项阐明
-
以微信网页受权为例编写时序图。
@startuml 'https://plantuml.com/sequence-diagram' 启用主动编号 autonumber ' 生命线主动激活 autoactivate on actor 用户 用户 -> 应用服务器: 获取用户信息 应用服务器 -> 微信服务器: 跳转受权链接:(appid,scope,callback) 微信服务器 -> 用户: 申请用户受权 return 容许受权 return 返回受权 code 应用服务器 -> 微信服务器: 获取用户 access_token(appid,secret,code) return 返回 access_token+openid 应用服务器 -> 微信服务器: 获取用户信息(openid,access_token) return 用户信息 return 用户信息 @enduml
-
渲染成果
语法阐明
标记申明
@startuml 和 @enduml 是 PlantUML 的开始完结标记,无需更改。autonumber 关上启动编号,也就是每个步骤之前都有数字编号,关上之后整个流程更加清晰
autoactivate on 关上生命线主动激活,须要配合 `return` 应用
actor 用户 申明 ` 用户 ` 的类型是 actor(行为人)
时序申明
- 应用
->
来申明一个时序操作,:
前面能够附加音讯 - 应用
return
来返回音讯给调用者
申明参与者
默认状况下参与者为矩形,无奈看出理论类型。理论利用中,会有数据库、音讯队列等等参与者,应用以下关键字来扭转参与者的图例。
actor 用户
database 数据库
queue 音讯队列
类图
类图是 UML 中十分重要的一种类型,可能在理论编码之前为咱们提供 OOP 的具体设计。
Get Started
-
IDE 新建一个空我的项目,关上我的项目之后,右键新建文件
-
抉择
Class
-
以一个上传类为例编写类图
@startuml 'https://plantuml.com/class-diagram namespace com.ddhigh.uploader { interface Uploader {+ String Upload(String filename) Throws IOException } namespace qiniu { class QiniuUploader implements Uploader { - client: qiniu.Client -- + String Upload(String filename) Throws IOException } QiniuUploader *-- qiniu.Client } package aliyun { class AliyunUploader implements Uploader { - client: aliyun.Client -- + String Upload(String filename) Throws IOException } AliyunUploader *-- aliyun.Client } class UploaderFacade { - uploaders: List<Uploader> -- + List<String> Upload(String filename) Throws IOException } UploaderFacade o-- Uploader } @enduml
-
渲染成果
语法阐明
包
倡议应用 namespace
关键字申明包,package
申明的包内的类名必须全局惟一 (忽视 package),而namespace
只要求该 namespace
内惟一即可。
class/interface
与理论编程语言简直无差别,比方下面例子中采纳的是 java 语法。
可见性
PlantUML 反对 3 种可见性:
-
公有级别private
#
爱护级别protected
+
私有级别public
元素关系
PlantUML 次要有以下 3 种关系:
- 扩大: 蕴含
implements
和extends
- 聚合: 应用
o--
,右边
的蕴含左边
的 - 组合: 应用
*--
,右边
的依赖左边
的
组合和聚合的区别:(以下面的图为例)
- 组合:QiniuUploader 必须依赖 Client 能力提供上传性能,组合个别是 1 对 1 的。
- 聚合:UploadFacade 能够依赖多个 Uploader 实例,也能够依赖 0 个实例(只是这时候不会有文件上传了),聚合个别是 1 对多的。
流程图
在梳理简单业务逻辑时,善用流程图能帮咱们更加清晰地梳理分明,也不便咱们和其余人员进行沟通(非开发人员根本看不懂代码)。
Get Started
-
IDE 新建一个空我的项目,关上我的项目之后,右键新建文件
-
新建
Activity
类型文件 -
上面以一个
受权获取用户 openid 并插入数据库,而后查问用户好友进行音讯推送
的场景编写流程图@startuml 'https://plantuml.com/activity-diagram-beta start : 应用 code,appid,secret 申请微信服务器获取 access_token 和 openid; : 应用 access_token 和 openid 申请微信服务器获取用户信息; : 查询数据库 openid 是否存在; if (数据库查问失败?) then (是) stop elseif (用户已存在?) then (是) : 更新用户信息; else (否) : 新建用户并绑定 openid; endif : 获取用户好友列表; while(好友列表遍历实现?) is (否) : 推送音讯给好友; endwhile(是) stop @enduml
-
渲染成果
语法阐明
- 开始和完结: 应用
start
和stop
- 解决语句: 应用
:
和;
包裹该流程 - 条件判断: 应用
if
,elseif
,else
,endif
,then
- 循环语句: 应用
while
,is
,endwhile
编写
组件图
现阶段组件化 MVVM 框架大行其道,具备代表性的有 Vue
,React
和Angular
。咱们能够应用组件图来绘制组件关系,简略易懂。
Get Started
-
IDE 新建一个空我的项目,关上我的项目之后,右键新建文件
-
抉择
Component
-
以微信首页聊天列表为例绘制组件关系图
@startuml 'https://plantuml.com/component-diagram package widgets {[SearchBar] --> [Text] [SearchBar] --> [Icon] [NavigationBar] --> [Text] [NavigationBar] --> [Icon] [ListView] --> [ListItem] [ListItem] --> [Image] [ListItem] --> [Text] } package routes {[Home] --> [NavigationBar] [Home] --> [SearchBar] [Home] --> [ListView] } @enduml
-
渲染成果
依赖关系如下:
- 首页: 导航栏, 搜寻框,列表
- 导航栏: 文本,图标
- 搜寻框: 文本,图标
- 列表: 列表项
- 列表项: 文本,图片
语法阐明
- package 申明包,同一个包内的组件是相似位置
[组件名]
申明组件,组件名
在单个文件内是惟一的-->
申明依赖关系,右边
依赖左边
(完)