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


第一部分:狀態圖語法

(1)簡單狀態:使用([*])開始和結束狀態圖。使用-->添加箭頭。

 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和花括號來定義合成狀態。

 

 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定義長名字狀態。

 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 ||作為分隔符來合成並發狀態。

 

 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)箭頭方向:

使用->定義水平箭頭,也可以使用下列格式強制設置箭頭方向:

  • -down-> (default arrow)
  • -right-> or ->
  • -left->
  • -up->
@startuml

[*] -up-> First
First -right-> Second
Second --> Third
Third -left-> Last

@enduml

(6)注釋:

可以用 note left of, note right of, note top of, note bottom of 關鍵字來定義注釋。還可以定義多行注釋。

@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)更多注釋:可以在合成狀態中放置注釋。

@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

 


免責聲明!

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



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