UML第五次作业:绘制状态图

                                             状态图

一、概览

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<<Warning>> Olive
  BorderColor Gray
  FontName Impact
}

[*] --> NotShooting

state "Not Shooting State" as NotShooting {
  state "Idle mode" as Idle <<Warning>>
  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

四、状态图

猜你喜欢

转载自www.cnblogs.com/97-ntu/p/10823635.html
今日推荐