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

 

 

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

  • -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

更多注释:可以在合成状态中放置注释。

@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

显示参数:

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

 

posted @ 2019-05-21 12:33  lynn-lz  阅读(229)  评论(0编辑  收藏  举报