• markdown工具链plantuml:像写代码一样绘制 UML 模型-时列图


    markdown工具链plantuml:像写代码一样绘制 UML 模型-时列图

    概述

    序列图具有直观、形象的特点,对于理清、呈现对象之间的交互关系非常有帮助。在UML建模中,时序图中包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等。

    • 角色: 可以是人或者系统;
    • 对象:指系统中某个模块、类、类的实例等,对象的命名包含三种方式:1)对象:类名;2):类名;3)对象名。通常,为作图清晰,对象的排列遵循以下两个原则:1)把交互频繁的对象尽可能的靠拢;2)把初始化整个交互活动的对象放置在最左端;
    • 生命线:从对象图标向下延伸的一条虚线,表示对象存在的时间;
    • 控制焦点:又称为激活期,表示时间段的符号,在这个时间段内对象将执行相应的操作。它可以被理解成C语言语义中一对花括号{ }中的内容;用小矩形表示;
    • 消息:用于对象间传递信息,消息代表的是责任分配而不是数据流动,消息名称中不用带“请求二次”,因为消息箭头已经包含有请求的意思。例如,A指向B是指A调用B做某事,做某事是B的一个责任。消息可分为:
      • 1)同步消息(Synchronous Message):又称调用消息,消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义;
      • 2)异步消息(Asynchronous Message):消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的;
      • 3)返回消息(Return Message): 返回消息表示从过程调用返回;
      • 4)自关联消息(Self-Message): 表示方法的自身调用以及一个对象内的一个方法调用另外一个方法。

    上述各个建模元素使用 plantuml 语言示意如下:

    @startuml
    actor 角色
    
    activate 对象1 
    角色 -> 对象1 
    
    对象1 -> 对象2 : 同步消息
    对象2 --> 对象1 : 返回消息1
    
    对象1 o-> 对象2 : 异步消息
    
    对象1 -> 对象1 : 自关联消息
    
    @enduml
    

    一般异步消息开始点使用圆圈表示

    角色、对象(参与者)

    UML中, 角色可以是人或者系统;对象 指系统中某个模块、类、类的实例等,对象的命名包含三种方式:1)对象:类名;2):类名;3)对象名。通常,为作图清晰,对象的排列遵循以下两个原则:1)把交互频繁的对象尽可能的靠拢;2)把初始化整个交互活动的对象放置在最左端;

    UML角色与对象在 plantuml 中都是参与者。

    声明参与者

    plantuml 使用如下关键字actor, boundary, control, entity, database声明参与者:

    @startuml
    actor actor
    boundary boundary
    control control
    entity entity
    database database
    @enduml
    

    • 可以使用 <<>> 给参与者添加构造类型。在构造类型中,可以使用 (X,color) 格式的语法添加一个圆圈圈起来的字符;
    • 可以使用 participant 改变参与者的先后顺序与颜色。
    • 可以使用引号定义参与者,此时参与者可以使用特殊字符。
    @startuml
    participant A << (C,#ADD1B2) Test >> order 2 #red
    participant B order 1 #99ff99
    
    A -> B
    B -> "C()" : 测试
    
    @enduml
    

    order 值越小,越靠前。

    包裹参与者

    plantuml 可以使用 boxend box 画一个盒子将参与者包裹起来。 还可以在 box 关键字之后添加标题或者背景颜色。

    @startumlA
    
    box "帖子管理" #LightBlue 
    participant 添帖模块 
    participant 查询模块
    end box
    
    participant 数据库
    添帖模块 -> 查询模块 : 查询帖子
    查询模块 -> 数据库 : 查询数据库
    @enduml
    

    外观参数

    plantuml 用 skinparam 改变字体和颜色。
    可以在如下场景中使用:

    • 在图示的定义中,
    • 在引入的文件中,
    • 在命令行或者ANT任务提供的配置文件中。
    @startuml
    skinparam backgroundColor #EEEBDC 
    skinparam handwritten true
    skinparam sequence { 
        ArrowColor DeepSkyBlue 
        ActorBorderColor DeepSkyBlue 
        LifeLineBorderColor blue 
        LifeLineBackgroundColor #A9DCDF
        ParticipantBorderColor DeepSkyBlue 
        ParticipantBackgroundColor DodgerBlue 
        ParticipantFontName Impact 
        ParticipantFontSize 17 
        ParticipantFontColor #A9DCDF
        ActorBackgroundColor aqua 
        ActorFontColor DeepSkyBlue 
        ActorFontSize 17 
        ActorFontName Aapex
    }
    
    box "帖子管理" #LightBlue 
    participant 添帖模块 
    participant 查询模块
    end box
    
    participant 数据库
    添帖模块 -> 查询模块 : 查询帖子
    查询模块 -> 数据库 : 查询数据库
    @enduml
    

    生命线

    UML 中,生命线是从对象图标向下延伸的一条虚线,表示对象存在的时间。

    时延与空间

    在 plantuml 中,可以使用...来表示延迟,并且可以给延迟添加注释;可以使用 ||| 来增加空间。可以使用数字指定增加的像素的数量。

    @startuml
    帖子管理模块 -> 数据库: 认证请求
    ... 
    帖子管理模块 <-- 数据库: 返回码
    ...5 分钟后... 
    
    数据库 <-  帖子管理模块 : 断开连接
    ||45||
    数据库 -->  帖子管理模块 : 再见
    @enduml
    

    控制焦点(激活期)

    控制焦点,又称为激活期,表示时间段的符号,在这个时间段内对象将执行相应的操作。它可以被理解成C语言语义中一对花括号{ }中的内容;用小矩形表示;

    在plantuml中,关键字 activate用来表示参与者的生命活动,一旦参与者被激活,就进入激活期。使用 deactivate 退出生命期。
    还可以使用嵌套的生命线,并且运行给生命线添加颜色。可以使用destroy销毁生命线。

    @startuml 
    participant 用户 
    用户 -> 帖子管理模块: 发帖 
    activate 帖子管理模块 #FFBBBB
    
    帖子管理模块 -> 帖子管理模块: 内部调用 
    activate 帖子管理模块 #DarkSalmon
    
    帖子管理模块 o-> 数据库: << 创建表项 >> 
    activate 数据库
    deactivate 帖子管理模块
    
    数据库 --> 帖子管理模块: 返回码
    destroy 数据库
    @enduml
    

    消息

    UML序列图中,消息用于对象间传递信息,消息代表的是责任分配而不是数据流动,消息名称中不用带“请求二次”,因为消息箭头已经包含有请求的意思。例如,A指向B是指A调用B做某事,做某事是B的一个责任。消息可分为:

    • 1)同步消息(Synchronous Message):又称调用消息,消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义;
    • 2)异步消息(Asynchronous Message):消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的;
    • 3)返回消息(Return Message): 返回消息表示从过程调用返回;
    • 4)自关联消息(Self-Message): 表示方法的自身调用以及一个对象内的一个方法调用另外一个方法。

    进入和发出消息

    在 plantuml 中,如果只想关注部分图示,你可以使用进入和发出箭头。 使用方括号 [] 表示图示的左、右两侧。

    @startuml 
    [-> 帖子管理 : 发帖
    帖子管理 ->] : 删除某个表项
    帖子管理 <--] : 错误码
    @enduml
    

    箭头

    在 plantuml 中,可以修改箭头的样式、颜色。

    1. 修改箭头样式的方式有以下几种:

    • 表示一条丢失的消息,末尾加x
    • 让箭头只有上半部分或者下半部分:将 <> 替换成 或者 /
    • 细箭头:将箭头标记写两次 (如 >> 或 //) ;
    • 虚线箭头:用 -- 替代 -
    • 箭头末尾加圈:->o
    • 双向箭头:<->

    2. 可以使用记号修改箭头颜色A -[#red]> B

    @startuml
    A -> B : 正常消息
    A ->x B : 丢失的消息
    A ->> B : 小箭头消息
    A - B : 单箭头消息
    A -/ B : 单箭头消息
    A o-> B : 圆点箭头消息
    A ->o B : 圆点箭头消息
    
    A -[#blue]> B : 修改箭头颜色
    @enduml
    

    消息编号

    在 plantuml 中,通过关键字 autonumber start_num step 给消息自动编号;
    可通过在双引号内指定编号的格式,格式是由 Java 的 DecimalFormat 类实现的:(0 表示数字;# 也表示数字,但默认为 0)。也可以用HTML标签来制定格式。

    可以使用autonumber stop停止使用编号。

    @startuml
    
    autonumber 
    A -> B : 编号的消息
    
    autonumber 10 5
    A -> B : 编号1的消息
    A -> B : 编号4的消息
    
    autonumber "<b>[000]"
    A -> B : 3位编号
    
    autonumber 15 "<b>(<u>##</u>)" 
    A -> B : 2位编号
    
    autonumber 20 "<font color=red><b> 消息 0 :"
    A -> B : 红色消息
    @enduml
    

    组合消息

    在 plantuml 中,可以通过关键字alt, opt, loop, group, par, critical声明组合消息。

    • alt: 抉择,用来指明在两个或更多的消息序列之间的互斥的选择,相当于经典的if..else..

    抉择在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。else的临界指示其他任何临界都不为 True 时应运行的片段。如果所有临界都为 False 并且没有 else,则不执行任何片段。

    @startuml
    
    alt 查询成功
    
    发帖模块 -> 查贴模块 : 查询
    return 帖子ID
    
    else 查询失败小于3次
    
    发帖模块 -> 查贴模块 : 查询
    查贴模块 -> 查贴模块 : 重试
    
    else 查询失败大于3次
    
    发帖模块 -> 查贴模块 : 查询
    return 查询错误码
    
    end
    @enduml
    

    • opt :选项,包含一个可能发生或不发生的序列
    @startuml
    
    opt 查询频率超过 1000次/s
    
    发帖模块 -> 查贴模块 : 查询
    return 返回拒绝服务码
    
    end
    @enduml
    

    • loop,循环
    @startuml
    
    loop 每周一
    
    员工 -> 主管 : 汇报
    return 安排工作
    
    end
    @enduml
    

    • group: 后面紧跟着消息内容,表示一个序列组
    @startuml
    
    group 发帖操作
    actor 用户
    用户 -> 发帖模块 : 发贴
    发帖模块 -> 数据库 : 查询数据库
    return 查询结果
    
    发帖模块 -> 数据库 : 添加数据库
    return  添加成功
    
    end
    @enduml
    

    • par:并行,表示两个消息可以并行就行,不同消息使用else隔开。
    @startuml
    客人 -> 厨师 : 点菜
    activate 厨师
    
    par
    厨师 -> 厨师 : 炒菜
    else
    厨师 -> 厨师 : 炖汤
    end
    @enduml
    

    • critical: 关键,用在 Par 或 Seq 片段中。 指示此片段中的消息不得与其他消息交错。

    注释

    在 plantuml 中,可以通过在消息后面添加 note left of 对象 或者 note right of 对象 关键词来给消息添加注释;
    可以使用 end note 来添加多行注释;
    可以使用 rnote或者 hnote代替 note,分别表示 矩形 与 六边形
    可以在 note 的后面添加 #颜色,改变 note 的颜色。

    @startuml
    
    发帖模块 -> 数据库 : 添加
    note right of 发帖模块
    需要用户密码认证
    end note
    
    发帖模块 -> 数据库 : 删除
    hnote right of 发帖模块 #aqua
    需要用户密码认证
    end note
    
    @enduml
    

    分割

    可以使用 == 关键字 == 分割消息为不同的部分

    @startuml
    
    发帖模块 -> 数据库 : 添加
    note right of 发帖模块
    需要用户密码认证
    end note
    
    == 关键字 ==
    
    发帖模块 -> 数据库 : 删除
    hnote right of 发帖模块 #aqua
    需要用户密码认证
    end note
    
    @enduml
    

    参考

    NFVschool 微信公共号,关注最前沿的网络技术。


    原文链接

  • 相关阅读:
    DLink无线路由器做交换机配置
    解决超过两小时的问题记录
    SIP学习之旅【资料收集篇】

    从google code里面获取代码的方法
    NSString表示的时间转为time_t
    C语言中 时间日期格式化符号 详解
    (转)time_t的定义
    (分享)简单圆角UITextView
    viewDidUnload释疑
  • 原文地址:https://www.cnblogs.com/kekukele/p/13586440.html
Copyright © 2020-2023  润新知