Startuml 畫流程圖使用方法


https://www.jianshu.com/p/e92a52770832

程序員難免要經常畫流程圖,狀態圖,時序圖等。以前經常用 visio 畫,經常為矩形畫多大,擺放在哪等問題費腦筋。有時候修改文字后,為了較好的顯示效果不得不再去修改圖形。今天介紹的工具是如何使用 Sublime + PlantUML 的插件畫流程圖,狀態圖,時序圖等。這是一種程序員看了就會愛上的畫圖方式:自然,高效。

Alt+d 生成圖片

什么是 PlantUML

PlantUML 是一個畫圖腳本語言,用它可以快速地畫出:

  • 時序圖
  • 流程圖
  • 用例圖
  • 狀態圖
  • 組件圖

簡單地講,我們使用 visio 畫圖時需要一個一個圖去畫,但使用 PlantUML 只需要用文字表達出圖的內容,然后就可以直接生成圖片。看一個最簡單的例子

時序圖

@startuml

title 時序圖

== 鑒權階段 ==

Alice -> Bob: 請求
Bob -> Alice: 應答

== 數據上傳 ==

Alice -> Bob: 上傳數據
note left: 這是顯示在左邊的備注

Bob --> Canny: 轉交數據
... 不超過 5 秒鍾 ...
Canny --> Bob: 狀態返回
note right: 這是顯示在右邊的備注

Bob -> Alice: 狀態返回

== 狀態顯示 ==

Alice -> Alice: 給自己發消息

@enduml

TIPS:

  • 使用 title 來指定標題
  • '->' 和 '-->' 來指示線條的形式
  • 在每個時序后面加冒號 : 來添加注釋
  • 使用 note 來顯示備注,備注可以指定顯示在左邊或右邊
  • 使用 == xxx == 來分隔時序圖
  • 使用 ... 來表示延遲省略號
  • 節點可以給自己發送消息,方法是發送方和接收方使用同一個主體即可

用例圖

@startuml

left to right direction
actor 消費者
actor 銷售員
rectangle 買單 {
消費者 -- (買單)
(買單) .> (付款) : include
(幫助) .> (買單) : extends
(買單) -- 銷售員
}

@enduml
  • 用例圖
    • 用例圖是指由參與者(Actor)、用例(Use Case)以及它們之間的關系構成的用於描述系統功能的靜態視圖
    • 百度百科上有簡易的入門資料,其中用例之間的關系 (include, extends) 是關鍵
  • 使用 actor 來定義參與者
  • 使用括號 (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

TIPS:

  • 使用 start 來表示流程開始,使用 stop 來表示流程結束
  • 順序流程使用冒號和分號 :xxx; 來表示
  • 條件語句使用 if ("condition 1") then (true/yes/false/no) 來表示
  • 條件語句可以嵌套

組件圖

我們經常使用組件圖來畫部署視圖,或者用來畫系統的拓撲結構圖。

@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

TIPS:

  • 使用方括號 [xxx] 來表示組件
  • 可以把幾個組件合並成一個包,可以使用的關鍵字為 package, node, folder, frame, cloud, database。不同的關鍵字圖形不一樣。
  • 可以在包內部用不同的箭頭表達同一個包的組件之間的關系
  • 可以在包內部直接表達到另外一個包內部的組件的交互關系
  • 可以在流程圖外部直接表達包之間或包的組件之間的交互關系

狀態圖

我們一般使用狀態圖來畫狀態機。

@startuml

scale 640 width

[*] --> NotShooting

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

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

@enduml

TIPS:

  • 使用 [*] 來表示狀態的起點
  • 使用 state 來定義子狀態圖
  • 狀態圖可以嵌套
  • 使用 scale 命令來指定生成的圖片的尺寸

Plantuml官方文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM