简介

对立建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言。UML是一种凋谢的办法,用于阐明、可视化、构建和编写一个正在开发的、面向对象的、软件密集零碎的制品的凋谢办法

编写UML的软件很多,然而根本是可视化的,须要手动编写,本文次要介绍基于文本的UML编写工具——PlantUML。

装置

PlantUML有以下依赖:

  1. graphviz
  2. jdk
  3. 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.dylibUsing layout: dot:dot_layoutActivated plugin library: libgvplugin_core.6.dylibUsing render: dot:coreUsing device: dot:dot:coreThe 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-19OpenJDK Runtime Environment (build 11.0.10+9)OpenJDK 64-Bit Server VM (build 11.0.10+9, mixed mode)

Jetbrains IDE插件装置

本文以Goland为例。

  1. 关上IDE设置,关上Plugins窗口,搜寻PlantUML integration
  2. 装置结束后重启IDE
  3. 关上IDE设置,搜寻plantuml,确保Remote rendering已敞开

PlantUML语法

以最罕用的时序图、类图、流程图、组件图举例。

时序图

Get Started

  1. IDE新建一个空我的项目,关上我的项目之后,右键新建文件

  2. 抉择Sequence

  3. PlantUML菜单项阐明

  4. 以微信网页受权为例编写时序图。

    @startuml'https://plantuml.com/sequence-diagram'启用主动编号autonumber'生命线主动激活autoactivate onactor 用户用户 -> 应用服务器: 获取用户信息应用服务器 -> 微信服务器: 跳转受权链接:(appid,scope,callback)微信服务器 -> 用户: 申请用户受权return 容许受权return 返回受权code应用服务器 -> 微信服务器: 获取用户access_token(appid,secret,code)return 返回access_token+openid应用服务器 -> 微信服务器: 获取用户信息(openid,access_token)return 用户信息return 用户信息@enduml
  5. 渲染成果

语法阐明

标记申明
@startuml和@enduml是PlantUML的开始完结标记,无需更改。autonumber 关上启动编号,也就是每个步骤之前都有数字编号,关上之后整个流程更加清晰autoactivate on 关上生命线主动激活,须要配合`return`应用actor 用户 申明`用户`的类型是actor(行为人)
时序申明
  • 应用->来申明一个时序操作,:前面能够附加音讯
  • 应用return来返回音讯给调用者
申明参与者

默认状况下参与者为矩形,无奈看出理论类型。理论利用中,会有数据库、音讯队列等等参与者,应用以下关键字来扭转参与者的图例。

actor 用户database 数据库queue 音讯队列

类图

类图是UML中十分重要的一种类型,可能在理论编码之前为咱们提供OOP的具体设计。

Get Started

  1. IDE新建一个空我的项目,关上我的项目之后,右键新建文件

  2. 抉择Class

  3. 以一个上传类为例编写类图

    @startuml'https://plantuml.com/class-diagramnamespace 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
  4. 渲染成果

语法阐明

倡议应用namespace关键字申明包,package申明的包内的类名必须全局惟一(忽视package),而namespace只要求该namespace内惟一即可。

class/interface

与理论编程语言简直无差别,比方下面例子中采纳的是java语法。

可见性

PlantUML反对3种可见性:

  • - 公有级别 private
  • # 爱护级别 protected
  • + 私有级别 public
元素关系

PlantUML次要有以下3种关系:

  1. 扩大: 蕴含implementsextends
  2. 聚合: 应用o--右边的蕴含左边
  3. 组合: 应用*--,右边的依赖左边

组合和聚合的区别:(以下面的图为例)

  1. 组合:QiniuUploader必须依赖Client能力提供上传性能,组合个别是1对1的。
  2. 聚合:UploadFacade能够依赖多个Uploader实例,也能够依赖0个实例(只是这时候不会有文件上传了),聚合个别是1对多的。

流程图

在梳理简单业务逻辑时,善用流程图能帮咱们更加清晰地梳理分明,也不便咱们和其余人员进行沟通(非开发人员根本看不懂代码)。

Get Started

  1. IDE新建一个空我的项目,关上我的项目之后,右键新建文件

  2. 新建Activity类型文件

  3. 上面以一个受权获取用户openid并插入数据库,而后查问用户好友进行音讯推送的场景编写流程图

    @startuml'https://plantuml.com/activity-diagram-betastart:应用code,appid,secret申请微信服务器获取access_token和openid;:应用access_token和openid申请微信服务器获取用户信息;:查询数据库openid是否存在;if (数据库查问失败?) then (是)stopelseif (用户已存在?) then (是):更新用户信息;else (否):新建用户并绑定openid;endif:获取用户好友列表;while(好友列表遍历实现?) is (否):推送音讯给好友;endwhile(是)stop@enduml
  4. 渲染成果

语法阐明

  • 开始和完结: 应用startstop
  • 解决语句: 应用:;包裹该流程
  • 条件判断: 应用if,elseif,else,endif,then
  • 循环语句: 应用while,is,endwhile编写

组件图

现阶段组件化MVVM框架大行其道,具备代表性的有Vue,ReactAngular。咱们能够应用组件图来绘制组件关系,简略易懂。

Get Started
  1. IDE新建一个空我的项目,关上我的项目之后,右键新建文件

  2. 抉择Component

  3. 以微信首页聊天列表为例绘制组件关系图

    @startuml'https://plantuml.com/component-diagrampackage widgets {    [SearchBar] --> [Text]    [SearchBar] --> [Icon]    [NavigationBar] --> [Text]    [NavigationBar] --> [Icon]        [ListView] --> [ListItem]    [ListItem] --> [Image]    [ListItem] --> [Text]}package routes {    [Home] --> [NavigationBar]    [Home] --> [SearchBar]    [Home] --> [ListView]}@enduml
  4. 渲染成果

    依赖关系如下:

    • 首页: 导航栏, 搜寻框,列表
    • 导航栏: 文本,图标
    • 搜寻框: 文本,图标
    • 列表: 列表项
    • 列表项: 文本,图片
语法阐明
  • package 申明包,同一个包内的组件是相似位置
  • [组件名]申明组件,组件名在单个文件内是惟一的
  • --> 申明依赖关系,右边依赖左边

(完)