关于uml:PlanUML指南

53次阅读

共计 4395 个字符,预计需要花费 11 分钟才能阅读完成。

简介

对立建模语言(英语: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.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 为例。

  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 on
    
    actor 用户
    
    用户 -> 应用服务器: 获取用户信息
    应用服务器 -> 微信服务器: 跳转受权链接:(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-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
  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-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
  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-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
  4. 渲染成果

    依赖关系如下:

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

(完)

正文完
 0