博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UML第五次作业
阅读量:5256 次
发布时间:2019-06-14

本文共 4085 字,大约阅读时间需要 13 分钟。

一、学习PlantUML状态图绘制方法,学习状态图

(1)简单状态

使用([*])开始和结束状态图。

使用-->添加箭头。

@startuml[*] --> State1State1 --> [*]State1 : this is a stringState1 : this is another stringState1 -> State2State2 --> [*]@enduml

(2)合成状态

一个状态也可能是合成的,必须使用关键字state和花括号来定义合成状态。

 

@startumlscale 350 width[*] --> NotShootingstate 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定义长名字状态。

 

@startumlscale 600 width[*] -> State1State1 --> State2 : SucceededState1 --> [*] : AbortedState2 --> State3 : SucceededState2 --> [*] : Abortedstate 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 : FailedState3 --> [*] : Succeeded / Save ResultState3 --> [*] : Aborted @enduml

(4)并发状态

 用-- or ||作为分隔符来合成并发状态。

@startuml[*] --> Activestate 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->

 

@startuml[*] -up-> FirstFirst -right-> SecondSecond --> ThirdThird -left-> Last@enduml 可以用首字母缩写或者开始的两个字母定义方向(如, -d-,-down-和-do-是完全等价的)。请不要滥用这些功能,Graphviz不喜欢这样。

 

 

(6)注释

可以用 note left ofnote right ofnote top ofnote bottom of 关键字来定义注释。

还可以定义多行注释。

@startuml[*] --> ActiveActive --> Inactivenote left of Active : this is a short\nnotenote right of Inactive  A note can also  be defined on  several linesend note@enduml

以及浮动注释。

@startumlstate foonote "This is a floating note" as N1@enduml

(7)更多注释

 

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

@startuml[*] --> NotShootingstate "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)显示参数

改变字体和颜色。

可以在如下场景中使用:

  • 在图示的定义中,
  • 在或者提供的配置文件中。

还可以为状态的构造类型指定特殊的字体和颜色。

 

@startumlskinparam backgroundColor LightYellowskinparam state {  StartColor MediumBlue  EndColor Red  BackgroundColor Peru  BackgroundColor<
> Olive BorderColor Gray FontName Impact}[*] --> NotShootingstate "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)电梯控制

  • 电梯存在四种基本状态,即:待载、上升、下降、楼间停;
  • 电梯无人承载时停在某一楼层,处于待载状态;
  • 当有人进入电梯,并且当前楼层比目标楼层低,电梯上升;
  • 当有人进入电梯,并且当前楼层比目标楼层高,电梯下降;
  • 所有人都在本层下电梯,电梯回到待载状态。
  • 电梯中还有人,判断目标楼层是否比当前楼层高,高则上升,低则下降。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@startuml
[*] --> 待载
  
 
 
待载 --> 上升:进入[目标楼层>当前楼层]/关门上行
 
待载 --> 下降:进入[目标楼层<当前楼层]/关门下行
  
 
上升 -> 楼间停:[进人/出人]/停机开门
 
下降 -> 楼间停:[进人/出人]/停机开门
  
 
楼间停 -> 上升:[目标楼层>当前楼层]/关门上行
 
楼间停 -> 下降:[目标楼层<当前楼层]/关门下行
 
楼间停 -left-> 待载:[无人]/关门
@enduml

(2)银行账户

 

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@startuml
[*] -> 空额
 
空额 -> [*]
  
空额 --> 有余额:存款/余额=余额+存款额
空额 --> 负债:取款[取款额<最大限额]/余额=余额-存款额
有余额 -> 有余额:存款/余额=余额+存款额
 
有余额 -> 有余额:取款[取款额<余额]/余额=余额-取款额
有余额 --> 负债:取款[取款额>余额]/余额=余额-取款额
有余额 --> 空额:取款[取款额=余额]/余额=余额-取款额
 
负债 -> 负债
 
负债 --> 有余额
 
负债 --> 空额
@enduml

  

 

 

 

 

 

  

转载于:https://www.cnblogs.com/maohuibin/p/10822357.html

你可能感兴趣的文章
php上传文件及头像预览
查看>>
程序猿加班的不归路!
查看>>
【译】在Transformer中加入相对位置信息
查看>>
大四java实习生的一些经历
查看>>
python programming
查看>>
基础排序算法之快速排序(Quick Sort)
查看>>
Truncate 删除数据
查看>>
线程池的概念
查看>>
USB打印机开钱箱
查看>>
mysql数据库 中文乱码
查看>>
Linux下Mysql数据库互为主从的配置过程
查看>>
ECSHOP系统,数据库表名称、结构
查看>>
Python Web开发框架Django
查看>>
【Install】我是如何安装Linux类系统的
查看>>
作业三4
查看>>
多态存在的3个必要条件
查看>>
code First 四
查看>>
Django与Ajax
查看>>
再做一题,2013-6-16更新
查看>>
Oracle_Statspack性能诊断工具
查看>>