狀態圖
一、概覽
1、PlantUML狀態圖 語法學習小結。圖例及用法
2、語言描述《電梯控制》系統《銀行賬戶》系統狀態轉換
3、繪制《電梯控制》系統《銀行賬戶》系統狀態轉換的腳本程序
4、繪制的狀態圖
二、語法小結
1.開始、結束
使用([*]
)開始和結束狀態圖。 使用-->
添加箭頭
示例:
@startuml [*] --> State1 State1 --> [*] State1 : this is a string State1 : this is another string State1 -> State2 State2 --> [*] @enduml
2.合成狀態
一個狀態也可能是合成的,使用關鍵字state
和花括號來定義合成狀態。
示例:
@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
3.長名字
使用關鍵字state
定義長名字狀態
示例:
@startuml scale 600 width [*] -> State1 State1 --> State2 : Succeeded State1 --> [*] : Aborted State2 --> State3 : Succeeded State2 --> [*] : Aborted state State3 { state "Accumulate Enough Data\nLong State Name" as long1 long1 : Just a test [*] --> long1 long1 --> long1 : New Data long1 --> ProcessData : Enough Data } State3 --> State3 : Failed State3 --> [*] : Succeeded / Save Result State3 --> [*] : Aborted @enduml
4.並發狀態
用--
or ||
作為分隔符來合成並發狀態
示例:
@startuml [*] --> Active state Active { [*] -> NumLockOff NumLockOff --> NumLockOn : EvNumLockPressed NumLockOn --> NumLockOff : EvNumLockPressed -- [*] -> CapsLockOff CapsLockOff --> CapsLockOn : EvCapsLockPressed CapsLockOn --> CapsLockOff : EvCapsLockPressed -- [*] -> ScrollLockOff ScrollLockOff --> ScrollLockOn : EvCapsLockPressed ScrollLockOn --> ScrollLockOff : EvCapsLockPressed } @enduml
5.箭頭方向
使用->
定義水平箭頭,也可以用首字母縮寫或者開始的兩個字母定義方向(如, -d-
,-down-
和-do-
是完全等價的)
示例:
@startuml [*] -up-> First First -right-> Second Second --> Third Third -left-> Last @enduml
6.顯示參數
用skinparam
改變字體和顏色
示例:
@startuml skinparam backgroundColor LightYellow skinparam state { StartColor MediumBlue EndColor Red BackgroundColor Peru BackgroundColor<<Warning>> Olive BorderColor Gray FontName Impact } [*] --> NotShooting state "Not Shooting State" as NotShooting { state "Idle mode" as Idle <<Warning>> state "Configuring mode" as Configuring [*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig } NotShooting --> [*] @enduml
二、《電梯控制》系統《銀行賬戶》系統狀態轉換
電梯控制系統狀態:
1.電梯共有四種運行狀態:運行、待載、樓間停止
2.電梯需要判斷目標樓層與當前樓層的大小,如目標樓層大,則關門上行,如若比目標樓層小,則關門下行
3.電梯如果沒有人使用,則處於待載狀態
銀行賬戶系統狀態:
1.銀行賬戶共有三種狀態:空額、有余額、負載。
2.賬戶建立初期沒有存款,處於空額狀態。
3.賬戶在空額狀態時,如果向其中存款,進入有余額狀態;反之如果取款,則進入負載狀態。
4.賬戶在有余額狀態時,如果存款,則余額增加,還處於有余額狀態;如果取款,取款金額小於余額,處於有余額狀態,取款金額等於余額,處於有空額狀態,取款金額大於余額,處於負債狀態。
5.賬戶處於負債狀態時,如果存款,但存款金額小於負債金額,還處於負債狀態,存款金額等於負債金額,處於空額狀態,存款金額大於於負債金額,處於有余額狀態。
三、腳本程序
電梯控制系統
@startuml [*] --> 待載 state 運行 { 待載 --> 上升 : 進入[目標樓層>當前樓層]/關門上行 上升 --> 樓間停 : [進人/出人]/開門 待載 --> 下降 : 進入[目標樓層<當前樓層]/關門下行 下降 --> 樓間停 : [進人/出人]/開門 樓間停 --> 上升:[目標樓層>當前樓層]/關門上行 樓間停 --> 下降:[目標樓層<當前樓層]/關門下行 樓間停 --> 待載:[無人]/關門 } @enduml
銀行賬戶系統
@startuml
state 銀行賬戶系統{
[*] --> 空額
空額--> [*]
空額 --> 有余額 : 存款/余額=余額+存款額
空額 --> 負債 : 取款[取款額<最大限額]/余額=余額-存款額
有余額 --> 有余額 : 存款/余額=余額+存款額
有余額 --> 有余額 : 取款[取款額<余額]/余額=余額-取款額
有余額 --> 負債 : 取款[取款額>余額]/余額=余額-取款額
有余額 --> 空額 : 取款[取款額=余額]/余額=余額-取款額
負債 --> 負債 : 取款[取款額<最大限額]/余額=余額-存款額
負債 --> 負債 : 存款[存款額<負債額]/余額=余額+存款額
負債 --> 有余額 : 存款[存款額>負債額]/余額=余額+存款額
負債 --> 空額 : 存款[存款額=負債額]/余額=余額+存款額
}
@enduml
四、狀態圖