uml第五次作业
一、学习小结
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.箭头:
使用->定义水平箭头,也可以使用下列格式强制设置箭头方向:
-down->(default arrow)-right->or->-left->-up->- 可以用首字母缩写或者开始的两个字母定义方向(如,
-d-,-down-和-do-是完全等价的)。 -
@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

8.显示参数:
用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.电梯运行:电梯有待载、上升、下降、和楼间停4钟基本状态。电梯无人承载时停在某一楼层,处在待载状态。有人进入电梯,并且当前楼层比目标楼层低,电梯上升。反之电梯下降。所有人在本层下电梯,电梯待载状态。电梯中还有人则判断楼层,高于当前楼层则上升,反之下降。
2.银行账户:银行账户存在空额、有余额、负债三种状态。初次建立账户为空额。向其中存款,有余额状态。从账户中取款,进入负债状态。有余额状态存款,余额增加,有余额状态。从账户中取款,取款额小于余额,有余额状态。取款额大于余额,负债状态。取款额等于余额,空额状态。负债状态时取款,负债状态。负债状态存款,存款额小于负债额,负债状态。存款额对于负债额,空额状态。存款额大于负债额,有余额状态。
脚本及状态图
电梯控制:
@startuml
[*] --> 待载
待载 -up-> 上升 : 进入[目标楼层>当前楼层]/关门上行
上升 -down-> 楼间停 : [进人/出人]/停机开门
待载 -down-> 下降 : 进入[目标楼层<当前楼层]/关门下行
下降 -up-> 楼间停 : [进人/出人]/停机开门
楼间停 -up-> 上升:[目标楼层>当前楼层]/关门上行
楼间停 -down-> 下降:[目标楼层<当前楼层]/关门下行
楼间停 -left-> 待载:[无人]/关门
@enduml

银行账户
@startuml
[*] --> 空额
空额 -down-> 有余额 : 存款/余额=余额+存款额
空额 -down-> 负债 : 取款[取款额<最大限额]/余额=余额-存款额
有余额 --> 有余额 : 存款/余额=余额+存款额
有余额 --> 有余额 : 取款[取款额<余额]/余额=余额-取款额
有余额 -right-> 负债 : 取款[取款额>余额]/余额=余额-取款额
有余额 -up-> 空额 : 取款[取款额=余额]/余额=余额-取款额
负债 --> 负债 : 取款[取款额<最大限额]/余额=余额-存款额
负债 --> 负债 : 存款[存款额<负债额]/余额=余额+存款额
负债 -left-> 有余额 : 存款[存款额>负债额]/余额=余额+存款额
负债 -up-> 空额 : 存款[存款额=负债额]/余额=余额+存款额
空额 -up-> [*]
@enduml


浙公网安备 33010602011771号