PlantUML绘制时序图

Posted kingmax54212008

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PlantUML绘制时序图相关的知识,希望对你有一定的参考价值。

 PlantUML系列文章
PlantUML绘制活动图https://blog.csdn.net/zhangwei_david/article/details/125507374PlantUML绘制类图https://blog.csdn.net/zhangwei_david/article/details/125477021

 

什么是时序图

        时序图有时候也被称为序列图,活动序列图,作为交互图的一种,时序图按照时间顺序从上往下显示每个操作。
 案例说明

   我们以一个日常生活中常见的操作,在ATM上查询银行卡账户余额,首先用户先将银行卡插入读卡器,然后在屏幕上输入密码,如果密码错误则回提示重新输入密码,如果密码正确则会收到一条登陆ATM的提示短信。我们根据这个流程怎么绘制时序图呢?我们就看看下图:

在这幅图中,垂直的虚线叫做参与者的生面线,表示一个对象的存活时间。每个箭头都表示一个调用。我们在了解时序图以后,我们看看如何使用PlantUML 绘制时序图。
Idea安装PlantUML插件

        idea->preferences->plugin;在marketplace中搜索PlanUML Integration, 进行安装;安装后我们就可在idea中新建一个PlantUML 文件,图下图所示

PlantUML语法

     上文中ATM的时序图就是使用PlantUML绘制的,plantUML 文件是以 @startuml 开头, 以 @enduml结尾,如下所示:

    @startuml
    'https://plantuml.com/sequence-diagram
    title 时序图示例
    header @author chenxiu
    footer page  @author chenxiu
    skinparam roundcorner 20
    skinparam sequenceParticipant underline
    skinparam LifeLineBackgroundColor #lightYellow
    hide footbox
    actor User as user #green
    box ATM
    control 屏幕 as app #lightBlue
    participant 读卡器 as reader #yellow
    end box
     
    box BANK #lightBlue
    participant service
    entity 短信
    queue   MessageQueue
    database mysql
     
    activate user
    user->reader #lightBlue:插如银行卡
    activate reader
    reader-> reader:读卡
    activate reader
    deactivate reader
    reader->app:显示屏幕
    deactivate reader
    activate app
    app ->user:提示输入密码
    deactivate app
    user->app:输入密码
    activate app
    app-> service:查询用户
    activate service
    service->Mysql:查询用户
    activate Mysql
    Mysql ->service:resultSet
    deactivate Mysql
    alt 用户存在
       service ->> MessageQueue:发送登陆ATM消息
    activate MessageQueue
    note over MessageQueue #red:通过消息队列消峰
       ...30秒...
       MessageQueue ->短信:发送短信
       activate 短信
       短信 -->user
       deactivate 短信
       deactivate MessageQueue
       service ->app:服务选项
       app -> user :提示选择服务
    else 用户不存在
    |||
       service->app:登陆失败
       deactivate service
       app-> user:重新输入密码
       deactivate app
    end
     
    @enduml

 通过上文的DEMO,我们逐步来分析时序图的内容

声明参与者

     在时序图中使用 a -> b绘制两个参与者之间的关系,a,b 都是参与者,不必明确声明.但是如果需要对参与者进行更多的控制就需要声明参与者,在PlantUML 中支持其中参与者
参与者    含义
participant     参与者
actor    角色
boundary    边界
control    控制
entity    实体
database    数据库
collections    集合
queue    队列

各个参与者的效果如下图所示:

可以使用 as 关键字给参与者取别名,也可以针对参与者使用多行定义,具体代码示例如下:

    @startuml
    'https://plantuml.com/sequence-diagram
     
    '使用 as 关键字对参与者Actor取别名 user,在后续的代码中可以直接使用别名'
    actor Actor as user
    participant Participant
    participant 多行参与者  [
        =标题
        ----
        副标题
    ]
     
    control Control
     
    boundary Boundary
     
    entity Entity
     
    collections Collections
     
    queue Queue
     
    database Database
     
    user->Participant
    user->多行参与者
    user->Control
    user->Boundary
    user->Entity
    user -> Collections
    user->Queue
    user->Database
     
    @enduml

注释

  在代码中使用 ‘注释’ 针对代码进行注释,在UML中使用如下语句添加注释

    note right: this is another note
    note left: this is another note
    note over Alice: This is displayed over Alice.

组合消息

     可以通过以下关键字来组合消息
关键字     含义
alt/else/end    if..else
loop/end    循环
par/end    常态
break/end    中断条件
critical/end    条件
group    分组
opt    可选项

代码示例

    @startuml
    'https://plantuml.com/sequence-diagram
     
    A ->B
    alt success
       B-> C
       opt 可选逻辑
        C-->D
       end
       par 正常场景
        C-->D
       end
       critical input==1
        C-->E
       end
       break input <=0
       E ->C
       end
     
       group 分组说明 [second]
        loop 100次
         B->B:自旋
        end
       end
       C -->A
       |||
    else fail
    |||
      B--> A
     
    end
     
    @enduml

颜色

在PlantUML 中很多元素都是可以修改颜色的,下面我们分别来看看修改颜色
说明    语法示例
修改参与者颜色    participant Participant  #blue
改变箭头颜色    user -[#blue]> Participant
改变消息颜色    

user -> participant:<font color=red> requestg

改变生面线颜色    

控制器 ->alice #lightyellow:认证失败

修改注释颜色    

note over Alice, Bob #FFAAAA: This is displayed\\n over Bob and Alice.

修改背景颜色    

skinparam backgroundColor #EEEBDCm

锚点和持续时间

可以在时序图中添加锚点,进而指定持续时间

    @startuml
    !pragma teoz true
     
    start Alice -> Bob : start doing things during duration
    Bob -> Max : something
    Max -> Bob : something else
    end Bob -> Alice : finish
     
    start <-> end : some time
    @enduml

其他
说明    语法    备注
标题    title 时序图示例    
页头    header 我是页头    
页脚    footer page 1/2    
开启自动序号    autonumber    
隐藏脚注    hide footbox    
 延迟    ... 五分钟后 ...    
分页    newpage    
分割    == 分割 ==    
激活生命线    activate    
撤销生命线    deactivate    
终结生命线    destory    
自动激活生命线    autoactivate  on /return     
创建对象    create    
包裹参与者    box/end box    

可以使用box, end box

 

    

参考资料:

顺序图的语法和功能PlantUML序列图的语法:你可以有几种类型的参与者(演员和其他人),箭头,音符,组...改变字体和颜色也有可能。https://plantuml.com/zh/sequence-diagram
 

以上是关于PlantUML绘制时序图的主要内容,如果未能解决你的问题,请参考以下文章

PlantUML绘制时序图

markdown语法在线绘制时序图--plantuml

PlantUML 快速入门 UML 时序图

如何绘制UML顺序图

使用 PlantUML 高效画图

PlantUML简介与使用