状态图
一、概览
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<> Olive BorderColor Gray FontName Impact } [*] --> NotShooting state "Not Shooting State" as NotShooting { state "Idle mode" as Idle < > 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
四、状态图