分析電梯控制系統和銀行帳戶系統,分別畫出狀態圖

第一部分:狀態圖語法併發

(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

第二部分:分析電梯運行、銀行帳戶的狀態轉換

①電梯運行

  • 電梯有待載、上升、降低、和樓間停4鍾基本狀態。
  • 電梯無人承載時停在某一樓層,處在待載狀態。
  • 有人進入電梯,而且當前樓層比目標樓層低,電梯上升。
  • 反之電梯降低。
  • 全部人在本層下電梯,電梯待載狀態。
  • 電梯中還有人則判斷樓層,高於當前樓層則上升,反之降低。

②銀行帳戶

  •  銀行帳戶存在空額、有餘額、負債三種狀態。
  • 初次創建帳戶爲空額。
  • 向其中存款,有餘額狀態。
  • 從帳戶中取款,進入負債狀態。
  • 有餘額狀態存款,餘額增長,有餘額狀態。
  • 從帳戶中取款,取款額小於餘額,有餘額狀態。
  • 取款額大於餘額,負債狀態。
  • 取款額等於餘額,空額狀態。
  • 負債狀態時取款,負債狀態。
  • 負債狀態存款,存款額小於負債額,負債狀態。
  • 存款額對於負債額,空額狀態。
  • 存款額大於負債額,有餘額狀態。

第三部分:《電梯控制》系統、《銀行帳戶》系統狀態轉換的腳本程序

 ①電梯運行

 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

相關文章
相關標籤/搜索