一、概念
状态图和活动图是状态机的两种表现形式。利用状态机可以精确地描述对象的行为。
从对象的初始状态起,开始响应事件并执行某些动作,这些事件引起状态的转换;对象在新状态下又开始响应事件和执行动作,如此连续进行直到终结状态。
二、状态图
状态图(State Diagram) =状态(State) + 迁移(Transition)
- 一个状态图描述一个状态机。
- 状态图表现从一个状态到另一个状态的控制流。
2.1 状态图的语法
- 除了状态中的初始状态(实心圆)和终止状态(牛眼形状),其它状态用一个圆角矩形表示
- 转换表示状态间可能的路径,用箭头表示
- 事件/动作写在由它们触发引起的转换上
2.2 状态
- 状态一般是给定类对象中的一组属性值,在其所在的上下文中应该唯一,但可以匿名。
- 在对系统建模时,我们可以只关心那些明显影响对象行为的属性以及由他们表达的对象状态,而不用理睬那些于对象行为无关的状态。
表示方式:状态由一个带圆角的矩形表示。
应用标签标示状态的内部活动。
语法:标签/活动表达式
UML提供的标签:
- entry:当进入一个状态的时候被自动触发,该活动在状态中其它任何活动之前被自动触发。
- do:当状态处于激活时执行do活动,do活动在进入活动之后执行,并且一直运行到它本身完成为止。
- exit:当离开一个状态的时候被自动触发,该活动在该状态结束之前、所有其它活动都完成后被触发。
状态可以嵌套状态图,此时状态称为组成状态,否则为简单状态。
入口事件表示一个入口的动作序列,它在进入状态时执行。入口事件的动作是原子的,并且先于人和内部活动或转换。
出口事件表示一个出口的动作序列,它在退出状态时执行。出口事件也是原子的,它跟在所有的内部活动之后,但是先于所有的出口转换。
1. 简单状态(Simple State)
2. 复合状态(Composite State)
复合状态可以有多组状态图,每组用虚线分割开来。
- 可以是通过“或”关系分解为互相排斥的顺序子状态
-
可以是使用“与”关系分解为并发子状态
-
如果一个组成状态的子状态对应的对象在其生命期内的任何时刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在