第一部分:狀態圖語法併發
(1)簡單狀態:使用([*]
)開始和結束狀態圖。使用-->
添加箭頭。this
1 @startuml 2 3 [*] --> State1 4 State1 --> [*] 5 State1 : this is a string 6 State1 : this is another string 7 8 State1 -> State2 9 State2 --> [*] 10 11 @enduml
(2)合成狀態:一個狀態也多是合成的,必須使用關鍵字state
和花括號來定義合成狀態。spa
1 @startuml 2 scale 350 width 3 [*] --> NotShooting 4 5 state NotShooting { 6 [*] --> Idle 7 Idle --> Configuring : EvConfig 8 Configuring --> Idle : EvConfig 9 } 10 11 state Configuring { 12 [*] --> NewValueSelection 13 NewValueSelection --> NewValuePreview : EvNewValue 14 NewValuePreview --> NewValueSelection : EvNewValueRejected 15 NewValuePreview --> NewValueSelection : EvNewValueSaved 16 17 state NewValuePreview { 18 State1 -> State2 19 } 20 21 } 22 @enduml
(3)長名字:也能夠使用關鍵字state
定義長名字狀態。code
1 @startuml 2 scale 600 width 3 4 [*] -> State1 5 State1 --> State2 : Succeeded 6 State1 --> [*] : Aborted 7 State2 --> State3 : Succeeded 8 State2 --> [*] : Aborted 9 state State3 { 10 state "Accumulate Enough Data\nLong State Name" as long1 11 long1 : Just a test 12 [*] --> long1 13 long1 --> long1 : New Data 14 long1 --> ProcessData : Enough Data 15 } 16 State3 --> State3 : Failed 17 State3 --> [*] : Succeeded / Save Result 18 State3 --> [*] : Aborted 19 20 @enduml
(4)併發狀態:用--
or ||
做爲分隔符來合成併發狀態。blog
1 @startuml 2 [*] --> Active 3 4 state Active { 5 [*] -> NumLockOff 6 NumLockOff --> NumLockOn : EvNumLockPressed 7 NumLockOn --> NumLockOff : EvNumLockPressed 8 -- 9 [*] -> CapsLockOff 10 CapsLockOff --> CapsLockOn : EvCapsLockPressed 11 CapsLockOn --> CapsLockOff : EvCapsLockPressed 12 -- 13 [*] -> ScrollLockOff 14 ScrollLockOff --> ScrollLockOn : EvCapsLockPressed 15 ScrollLockOn --> ScrollLockOff : EvCapsLockPressed 16 } 17 18 @enduml
(5)箭頭方向:string
使用->
定義水平箭頭,也能夠使用下列格式強制設置箭頭方向:it
-down->
(default arrow)-right->
or ->
-left->
-up->
@startuml [*] -up-> First First -right-> Second Second --> Third Third -left-> Last @enduml
(6)註釋:io
能夠用 note left of
, note right of
, note top of
, note bottom of
關鍵字來定義註釋。還能夠定義多行註釋。ast
@startuml [*] --> Active Active --> Inactive note left of Active : this is a short\nnote note right of Inactive A note can also be defined on several lines end note @enduml
(7)更多註釋:能夠在合成狀態中放置註釋。class
@startuml [*] --> NotShooting state "Not Shooting State" as NotShooting { state "Idle mode" as Idle state "Configuring mode" as Configuring [*] --> Idle Idle --> Configuring : EvConfig Configuring --> Idle : EvConfig } note right of NotShooting : This is a note on a composite state @enduml
第二部分:分析電梯運行、銀行帳戶的狀態轉換
①電梯運行
②銀行帳戶
第三部分:《電梯控制》系統、《銀行帳戶》系統狀態轉換的腳本程序
①電梯運行
1 @startuml 2 [*] --> 待載 3 4 待載 -> 上升:進入[目標樓層>當前樓層]/關門上行 5 待載 -> 降低:進入[目標樓層<當前樓層]/關門下行 6 7 上升 --> 樓間停:[進人/出人]/停機開門 8 降低 --> 樓間停:[進人/出人]/停機開門 9 10 樓間停 --> 上升:[目標樓層>當前樓層]/關門上行 11 樓間停 --> 降低:[目標樓層<當前樓層]/關門下行 12 樓間停 --> 待載:[無人]/關門 13 @enduml
②銀行帳戶
1 @startuml 2 [*] -> 空額 3 空額 -> [*] 4 5 空額 --> 有餘額:存款/餘額=餘額+存款額 6 空額 --> 負債:取款[取款額<最大限額]/餘額=餘額-存款額 7 8 有餘額 -> 有餘額:存款/餘額=餘額+存款額 9 有餘額 -> 有餘額:取款[取款額<餘額]/餘額=餘額-取款額 10 有餘額 --> 負債:取款[取款額>餘額]/餘額=餘額-取款額 11 有餘額 --> 空額:取款[取款額=餘額]/餘額=餘額-取款額 12 13 負債 -> 負債:取款[取款額<最大限額]/餘額=餘額-存款額 14 負債 -> 負債:存款[存款額<ABS(餘額)]/餘額=餘額+存款額 15 負債 --> 有餘額:存款[存款額>ABS(餘額)]/餘額=餘額+存款額 16 負債 --> 空額:存款[存款額=ABS(餘額)]/餘額=餘額+存款額 17 @enduml