UML作业第五次:分析系统,绘制状态图

 

一. PlantUML状态图 语法学习小结

1.简单状态

我们使用[*]开始和结束状态图,使用-->添加箭头。

@startuml
[*] --> Test1
Test1 --> [*]
Test1 : this is a test
Test1 : this is another test

Test1 -> Test2
Test2 --> [*]
@enduml

 

UML作业第五次:分析系统,绘制状态图_第1张图片

 

2.更改状态渲染

我们使用隐藏空描述将状态呈现为简单状态。

@startuml
hide empty description
[*] --> Test1
Test1 --> [*]
Test1 : this is a test
Test1 : this is another test

Test1 -> Test2
Test2 --> [*]
@enduml

UML作业第五次:分析系统,绘制状态图_第2张图片

 

3.合成状态

一个状态也可能是合成的,但必须使用关键字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

UML作业第五次:分析系统,绘制状态图_第3张图片

 

4.长名字

我们使用关键字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

UML作业第五次:分析系统,绘制状态图_第4张图片

 

 

5.并发状态

我们使用-- 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

UML作业第五次:分析系统,绘制状态图_第5张图片

 

二. 电梯控制系统与银行账户系统的状态转换

(1)电梯控制

    1. 电梯存在四种基本状态,即:待载、上升、下降、楼间停;
    2. 电梯无人承载时停在某一楼层,处于待载状态;
    3. 当有人进入电梯,并且当前楼层比目标楼层低,电梯上升;
    4. 当有人进入电梯,并且当前楼层比目标楼层高,电梯下降;
    5. 当在某一层时电梯内所有人都离开电梯,电梯回到待载状态;
    6. 如果电梯中存在人,则执行2或3步骤。

(2)银行账户

    1. 银行账户存在三种状态,即:空额、有余额、负债;
    2. 初建立的账户没有存款,处于空额状态;
    3. 若在空额状态时向账户存款,则进入有余额状态;若在空额状态时从账户取款,进入负债状态;
    4. 在有余额状态时向账户存款,余额增加,但还是处于有余额状态;
    5. 从账户中取款,若取款额小于余额,处于有余额状态;等于余额,回到空额状态;大于余额,进入负债状态;
    6. 负债时,取款则余额减少,仍处于负债状态;存款,当存款额小于负债额,还是负债;存款额等于负债额,回到空额状态;若存款额大于负债额,进入有余额状态。

三. 脚本程序

(1)电梯控制

@startuml

[*] --> 待载
 
state 运行 {
  待载 --> 上升 : 进入[目标楼层>当前楼层]/关门上行
  上升 --> 楼间停 : [进人/出人]/停机开门
 
  待载 --> 下降 : 进入[目标楼层<当前楼层]/关门下行
  下降 --> 楼间停 : [进人/出人]/停机开门

  楼间停 --> 上升:[目标楼层>当前楼层]/关门上行
  楼间停 --> 下降:[目标楼层<当前楼层]/关门下行  
  楼间停 --> 待载:[无人]/关门
}
@enduml

(2)银行账户

@startuml
state 银行账户系统{

[*] --> 空额
 
空额 --> 有余额 : 存款/余额=余额+存款额 
空额 --> 负债 : 取款[取款额<最大限额]/余额=余额-存款额

有余额 --> 有余额 : 存款/余额=余额+存款额 
有余额 --> 有余额 : 取款[取款额<余额]/余额=余额-取款额
有余额 --> 负债 : 取款[取款额>余额]/余额=余额-取款额
有余额 --> 空额 : 取款[取款额=余额]/余额=余额-取款额

负债 --> 负债 : 取款[取款额<最大限额]/余额=余额-存款额
负债 --> 负债 : 存款[存款额<负债额]/余额=余额+存款额
负债 --> 有余额 : 存款[存款额>负债额]/余额=余额+存款额
负债 --> 空额 : 存款[存款额=负债额]/余额=余额+存款额

}
@enduml

 

四. 状态图

(1)电梯控制

 UML作业第五次:分析系统,绘制状态图_第6张图片

 

(2)银行账户

 UML作业第五次:分析系统,绘制状态图_第7张图片

 

你可能感兴趣的:(UML作业第五次:分析系统,绘制状态图)