使用PlantUML快速绘图

PlantUML是一个快速创建UML图形的组件,官网上之所以称它是一个组件,我想主要是因为多数情况下我们都是在Eclipse,NetBenas,Intellijidea,Emacs,Sublime,Word等软件里来使用PlantUML。

PlantUML通过简单和直观的语言来定义图形,它可以生成PNG,SVG和二进制图片.PlantUML支持的图形有:

  • 时序图
  • 用例图
  • 类图
  • 活动图
  • 组件图
  • 状态图
  • 对象图

在IDEA中安装PlantUML插件

在IDEA上安装插件非常简单,这里不做详细介绍。需要注意的一个问题是,PlantUML画图需要生成图片的软件Graphviz的,所以如果第一次画图出现下面的提示请安装上的Graphviz,然后重启IDEA即可。 
使用PlantUML快速绘图_第1张图片

Graphviz下载地址:http//www.graphviz.org/Download..php

使用PlantUML快速绘图_第2张图片

快速绘图

时序图
@startuml

title 时序图

== 鉴权阶段 ==

Alice -> Bob: 请求
Bob -> Alice: 应答

== 数据上传 ==

Alice -> Bob: 上传数据
note left: 这是显示在左边的备注

Bob --> Canny: 转交数据
... 不超过 5 秒钟 ...
Canny --> Bob: 状态返回
note right: 这是显示在右边的备注

Bob -> Alice: 状态返回

== 状态显示 ==

Alice -> Alice: 给自己发消息

@enduml
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

使用PlantUML快速绘图_第3张图片

  • 使用标题来指定标题
  • ' - >'和' - >'来指示线条的形式
  • 在每个时间后面加冒号:来添加注释
  • 备注可以指定显示在左边或右边
  • 使用== xxx ==来分隔时序图
  • 使用...来表示延迟省略号
  • 节点可以给自己发送消息
活动图(新语法)
@startuml

start
:"步骤1处理";
:"步骤2处理";
if ("条件1判断") then (true)
    :条件1成立时执行的动作;
    if ("分支条件2判断") then (no)
        :"条件2不成立时执行的动作";
    else
        if ("条件3判断") then (yes)
            :"条件3成立时的动作";
        else (no)
            :"条件3不成立时的动作";
        endif
    endif
    :"顺序步骤3处理";
endif

if ("条件4判断") then (yes)
:"条件4成立的动作";
else
    if ("条件5判断") then (yes)
        :"条件5成立时的动作";
    else (no)
        :"条件5不成立时的动作";
    endif
endif
stop
@enduml
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 三十

使用PlantUML快速绘图_第4张图片

  • 使用start来表示流程开始,使用stop来表示流程结束
  • 顺序流程使用冒号和分号:xxx; 来表示
  • 条件语句if(“condition 1”)then(true / yes / false / no)来表示
  • 条件语句可以嵌套
类图
@startuml

title 类图
scale 1.5
/'组合关系(composition)'/
class Human {
    - Head mHead;
    - Heart mHeart;
    ..
    - CreditCard mCard;
    --
    + void travel(Vehicle vehicle);
}

Human *-up- Head : contains >
Human *-up- Heart : contains >

/'聚合关系(aggregation)'/
Human o-left- CreditCard : owns >

/'依赖关系(dependency)'/
Human .down.> Vehicle : dependent

/'关联关系(association'/
Human -down-> Company : associate

/'继承关系(extention)'/
interface IProgram {
    + void program();
}
class Programmer {
    + void program();
}
Programmer -left-|> Human : extend
Programmer .up.|> IProgram : implement
@enduml
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 三十
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

使用PlantUML快速绘图_第5张图片

  • 规模生成图片倍数
  • 默认的,字段和方法是由PlantUML自动分组的,你也可以使用: - .. == __这些分隔符手动进行分组
  • 上,下,左,右定义线的起始方位。
  • PlantUML用下面的符号来表示类之间的关系: 
    • 泛化,泛化:<| -
    • 关联,关联:< -
    • 组合,组成:* -
    • 聚合,聚合:邻
    • 实现,实现:<| ..
    • 依赖,相关性:<..
用例图
@startuml

left to right direction
actor 消费者
actor 销售员
rectangle 买单 {
消费者 -- (买单)
(买单) .> (付款) : include
(帮助) .> (买单) : extends
(买单) -- 销售员
}

@enduml
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

使用PlantUML快速绘图_第6张图片

  • 使用演员来定义参与者
  • 使用括号(xxx)来表示用例,用例用椭圆形表达
  • 使用不同的线条表达不同的关系。

组件图

我们经常使用组件图来画部署视图,或者用来画系统的拓扑结构图。

@startuml

package "组件1" {
    ["组件1.1"] - ["组件1.2"]
    ["组件1.2"] -> ["组件2.1"]
}

node "组件2" {
    ["组件2.1"] - ["组件2.2"]
    ["组件2.2"] --> [负载均衡服务器]
}

cloud {
    [负载均衡服务器] -> [逻辑服务器1]
    [负载均衡服务器] -> [逻辑服务器2]
    [负载均衡服务器] -> [逻辑服务器3]
}

database "MySql" {
    folder "This is my folder" {
        [Folder 3]
    }

    frame "Foo" {
        [Frame 4]
    }
}

[逻辑服务器1] --> [Folder 3]
[逻辑服务器2] --> [Frame 4]
[逻辑服务器3] --> [Frame 4]

@enduml
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 三十
  • 31
  • 32
  • 33

使用PlantUML快速绘图_第7张图片

  • 使用方括号[xxx]来表示组件
  • 可以把几个组件合并成一个包,可以使用的关键字为包,节点,文件夹,框架,云,数据库。不同的关键字图形不一样。
  • 在包内部用不同的箭头表达同一个包的组件之间的关系
  • 在包内部直接表达到另外一个包内部的组件的交互关系
  • 在流程图外部直接表达包之间或包的组件之间的交互关系
状态图
@startuml
scale 350 width
[*] --> NotShooting

state NotShooting {
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}

state Configuring {
  [*] --> NewValueSelection
  NewValueSelection --> NewValuePreview : EvNewValue
  NewValuePreview --> NewValueSelection : EvNewValueRejected
  NewValuePreview --> NewValueSelection : EvNewValueSaved

  state NewValuePreview {
     State1 -> State2
  }

}
@enduml
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

使用PlantUML快速绘图_第8张图片

  • 使[*]来表示状态的起点
  • 使用状态来定义子状态图
  • 状态图可以嵌套
  • 使用scale命令来指定生成的图片的尺寸

最后,不需要死记这些标记,用的时候去查,通过不断的使用来熟悉各种标记,附上网址:http://plantuml.com/

你可能感兴趣的:(工具)