状态图以可视化地方式将对象的各个生命周期展现出来,表现为一个个的状态,状态之间的流转以及流转触发方式、触发条件等。
例如此,有三个状态,每个圆角矩形代表着一个状态,状态之间通过箭头表示状态流转,箭头上的文字说明表示流转的触发时间和条件。
1、基本元素
a、状态(state)
一个对象,在其生命周期里会执行很多的命令,将这些命令进行归类,就成了一个个的状态,当触发了某些事件,一个状态会流转到下一个状态。
b、初态(initial)和终态(final)
初态:状态机的起点,它能流转到别的状态,别的状态不能流转到它。
终态:状态机的重点,代表着对象的声明周期已经结束,只能由别的状态流转到它,它不能流转到任何其他状态。
c、流转(Transitions)
流转即状态之间的变化,在StarUML里用箭头表示,触发状态的流转一定是出现了某个事情,所以流转箭头上一定包含触发事件,除此之外还会包含其他一些元素
(1) 事件标识 它可以是一个信号、条件变化、时间表达式(调用事件(Call)、变化事件(Change)、时间事件(Time)和信号事件(Singal));
(2) 警戒条件 当事件发生之后,并不是所有的情况,都会发生状态流转的,还需要满足警戒条件,才能流转
(3) 结果 状态流转之后发生的事情(状态流转除了导致当前输出的状态变化,还会发生一些其他的结果,这里就是用于补充的)
一条流转线上,可以增加多个,前提是 警戒条件和结果是一致的,如果不一致需要重新画
添加多个事件的方法
添加结果的方法
添加警戒条件是在属性里添加的
d、动作(State Action)
动作分为进、出两个动作,这是状态机一个非常强大的地方,对象在进入某个状态的时候,在进动作里初始化一些变量,构建该状态中命令集合的运行环境,而在出动作里,可以打扫战场,清理一些变量,与进动作相呼应
添加进出动作的方法:双击状态名
e、自身转移(Self-Transitions)
状态机中状态的转化中,还包含有自身状态转移
after 2 seconds 是事件,pull 是结果,其实pull 也可以放在waiting状态中的进动作中,不过表意可能就没有放在结果中那么好。
f、进入节点(Entry Point)、退出节点(Exit Point)
有的时候,对象没有经过初始化,直接进入到某个状态,叫做进入节点;
与此相对应的是退出节点,一般用于针对异常情况退出。
2、高级元素
a、组合状态(Composed State)
组合状态就是指状态嵌套,一个状态嵌套在另一个状态里,模块化设计中经常会用到这个。
b、历史状态
历史状态实际上不是一种状态,而是一个逻辑,它的作用对象是组合状态,当组合状态中突然因为某个突发事件跳出了组合状态,进入到外面的状态,当再次进入到组合状态的时候,不是从组合状态的第一个状态走起,而是从上次断掉的状态继续往下走
如果在组合状态”做饭”中的子状态”做饭”执行的时候,突然累了,跳转到”休息”状态,当休息好了之后,从”休息”状态跳回“做饭”状态的时候,不需要重新开始,即不需要从“准备做饭”开始,而是从“做饭开始”。
c、并发区域(Concurrent Regions)
并发区域是针对于组合状态的,对于状态机来说,在一个时刻,对象只允许处于一种状态,如果实际情况下出现两种状态同时运行,那么一般的做法是将两个状态合并成一个组合状态,大状态内部违背状态机的唯一状态的原则,以保证整个系统的遵守原则。并发区域由分叉引出,但不一定要由汇合结束。
3、案例
所有评论(0)