分析电梯控制系统和银行账户系统,分别画出状态图

第一部分:状态图语法

(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

分析电梯控制系统和银行账户系统,分别画出状态图_第1张图片

(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

分析电梯控制系统和银行账户系统,分别画出状态图_第2张图片

(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

分析电梯控制系统和银行账户系统,分别画出状态图_第3张图片

(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

分析电梯控制系统和银行账户系统,分别画出状态图_第4张图片

(5)箭头方向:

使用->定义水平箭头,也可以使用下列格式强制设置箭头方向:

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

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

@enduml

分析电梯控制系统和银行账户系统,分别画出状态图_第5张图片

(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

分析电梯控制系统和银行账户系统,分别画出状态图_第6张图片

(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

分析电梯控制系统和银行账户系统,分别画出状态图_第7张图片

第二部分:分析电梯运行、银行账户的状态转换

①电梯运行

  • 电梯有待载、上升、下降、和楼间停4钟基本状态。
  • 电梯无人承载时停在某一楼层,处在待载状态。
  • 有人进入电梯,并且当前楼层比目标楼层低,电梯上升。
  • 反之电梯下降。
  • 所有人在本层下电梯,电梯待载状态。
  • 电梯中还有人则判断楼层,高于当前楼层则上升,反之下降。

②银行账户

  •  银行账户存在空额、有余额、负债三种状态。
  • 初次建立账户为空额。
  • 向其中存款,有余额状态。
  • 从账户中取款,进入负债状态。
  • 有余额状态存款,余额增加,有余额状态。
  • 从账户中取款,取款额小于余额,有余额状态。
  • 取款额大于余额,负债状态。
  • 取款额等于余额,空额状态。
  • 负债状态时取款,负债状态。
  • 负债状态存款,存款额小于负债额,负债状态。
  • 存款额对于负债额,空额状态。
  • 存款额大于负债额,有余额状态。

第三部分:《电梯控制》系统、《银行账户》系统状态转换的脚本程序

 ①电梯运行

 1 @startuml
 2 [*] --> 待载
 3 
 4 待载 -> 上升:进入[目标楼层>当前楼层]/关门上行
 5 待载 -> 下降:进入[目标楼层<当前楼层]/关门下行
 6 
 7 上升 --> 楼间停:[进人/出人]/停机开门
 8 下降 --> 楼间停:[进人/出人]/停机开门
 9 
10 楼间停 --> 上升:[目标楼层>当前楼层]/关门上行
11 楼间停 --> 下降:[目标楼层<当前楼层]/关门下行
12 楼间停 --> 待载:[无人]/关门
13 @enduml

分析电梯控制系统和银行账户系统,分别画出状态图_第8张图片

②银行账户

 1 @startuml
 2 [*] -> 空额
 3 空额 -> [*]
 4 
 5 空额 --> 有余额:存款/余额=余额+存款额
 6 空额 --> 负债:取款[取款额<最大限额]/余额=余额-存款额
 7 
 8 有余额 -> 有余额:存款/余额=余额+存款额
 9 有余额 -> 有余额:取款[取款额<余额]/余额=余额-取款额
10 有余额 --> 负债:取款[取款额>余额]/余额=余额-取款额
11 有余额 --> 空额:取款[取款额=余额]/余额=余额-取款额
12 
13 负债 -> 负债:取款[取款额<最大限额]/余额=余额-存款额
14 负债 -> 负债:存款[存款额存款额
15 负债 --> 有余额:存款[存款额>ABS(余额)]/余额=余额+存款额
16 负债 --> 空额:存款[存款额=ABS(余额)]/余额=余额+存款额
17 @enduml

分析电梯控制系统和银行账户系统,分别画出状态图_第9张图片

 

你可能感兴趣的:(分析电梯控制系统和银行账户系统,分别画出状态图)