1.状态图的作用:
(1)清晰的表达了状态之间的转换关系。
(2)表示出不同的条件产生的分支。
(3)避免时间错序。
(4)可以表达出状态转换时必须出发的条件。
2.使用的范围:
(1)对象的状态在三个以上。
(2)有大量的信息,并经常对其进行增、删、改等操作。
(3)边界类较多较复杂(页面之间的转换)。
(4)系统是实时应用系统。
3.组成要素:
(1)状态:对象在某个时刻的存在方式或状况。
- 名称唯一,每个单词的首字母大写。
- 入口/出口动作:进出时的边界动作,不论从哪个状态离开,进入下一个状态时都要进行出口操作。
- 内部活动与转换:内部活动转换不会修改状态,且一般不执行出口操作。
例如:修改文件名。 - 简单状态:简单状态即为不再拥有子状态的状态。
- 复合状态:即为拥有子状态的状态。
例如:在修改文件状态中,有插入、删除状态。
在复合状态中,子状态与子状态之间的关系分为并发关系和顺序关系。顺序关系为两个状态互斥,不能同时执行,比如汽车的前进后退。并发关系为两个或两个以上的状态可以一起执行,比如汽车的加油门和前进。
如下图:
- 延迟事件:对此状态暂不处理,推迟到该对象的另一个状态下排队处理的事件列表。
例如发邮件时,第一个邮件正字发送,此时点击第二个邮件发送,不会显示拒绝执行第二个邮件的发送操作,而是会等到第一个邮件发送完完毕后发送。
- 历史状态:在复合状态中,我们有时希望下次执行到复合状态时仍从上次执行的子状态继续执行,此时的状态为历史状态。用带圈的H表示。不过因为历史状态在使用时比较繁琐,应尽量避免使用。
历史状态如下图:
状态标记: - 初始状态:只有一个初始状态,表示如下图:
- 终止状态:可有多个,表示如下图:
- 一般状态:用下图标表示:
(2)转换:两个状态之间的关系。
- 源状态:可有多个,在对象状态被触发前的状态即为源状态。
- 触发事件:引起对象状态发生改变的事件。例如一个信号、条件变化、时间表达式等都可为一个事件。
- 监护条件:通常是一个布尔表达式,在触发事件被触发时,监护条件被赋予初始值。可以没有监护条件,如果没有,则相当于为真,若为假,触发事件也会忽略。
- 动作:可执行的原子操作,不可中断。
- 目标状态:转换完成,对象的状态发生改变的状态。
如下图:
(3)事件:
(4)动作与活动:活动包含多个动作,通常为do list中。
(5)判定和同步:
- 判定:表示一个事件根据不同的监护条件有不同的影响。有一个或两个转出,用空心菱形进行表示,两个转出状态是互斥的。
- 同步:同步是独立的。分为并发汇合、并发分支。并发汇合全部到达才会执行,并发分支是两个或两个以上的分流。
判定如图:
同步如图: