状态图是系统分析的一种常用工具,通过建立对象的生存周期模型来描述对象随时间变化的动态行为。
1. 状态机
状态机是展示状态与状态转换的图。UML用状态机对软件系统的动态特征建模。通常一个状态机依附于一个类,并且描述一个类的实例即对象。状态机包含一个类的对象在其生命周期内所有状态的序列以及对象对接收到的事件所产生的反应。利用状态机可以精确地描述对象的行为,从对象的初始状态起,开始响应事件并执行某些动作,这些事件引起状态的转换;对象在新的状态下又开始响应和执行动作,如此连续进行直到终结状态。
状态机由状态、转换、事件、活动和动作5部分组成。
(1)状态表示一个模型在其生命周期内的状况,例如满足某些条件、执行某些操作或者等待某些事件。一个状态的生存期是一个有限的时间段。
(2)转换表示两个不同状态之间的联系,事件可以触发状态之间的转换。
(3)事件是某个时间产生的,可以触发状态转换,例如信号、对象的创建和销毁、超时和条件的改变等。
(4)活动是在状态机中进行一个非原子的执行,由一系列动作组成。
(5)动作是一个可执行的原子计算,导致状态的变更或返回值。
状态机不仅可以用于描述类的行为,也可以描述用例、协作和方法,甚至是整个系统的动态行为。
2. 状态图
一个状态图表示一个状态机,主要用于表现从一个状态到另一个状态的控制流。状态图不仅可以表示一个对象拥有的状态,还可以说明事件(例如消息的接收、错误、条件变更等)如何随着时间的推移来影响这些状态。状态图由表示状态的节点和表示状态之间转换的带箭头的直线组成。
图1 电梯状态图
状态图由8个基本要素点组成:
(1)状态:状态用一个带圆角的矩形表示。
(2)转换:转换用带箭头的直线表示,一端连接源状态,一端连接目标状态。当源状态接收到一个事件后,执行相应的动作,转换到目标状态。如果转换上没有标注事件,则表示此转换为自动进行。
图2 状态的转换
(3)初始状态:每个状态图都应该有一个初始状态,此状态代表状态图的起始位置。初始状态只能作为转换的源,不能作为转换的目标,并且在一个状态图中只能允许有一个。初始状态用一个实心圆表示。
(4)终止状态:终止状态是模型元素的最后状态,是一个状态图的终止点。终止状态只能作为转换的目标,而不能作为转换的源。终止状态在一二状态图中可以有多个。
(5)判定:当工作流按某一条件的取值而发生分支时,就要使用判定。判定用空心菱形表示。
图3 判定示例
(6)简单状态:简单状态是指不包含其他状态的状态。简单状态没有子结构,但可以具有内部转换。
(7)复合状态:复合状态是包含嵌套的子状态的状态。在复杂的应用中,当状态机处于某种状态时,状态机描述的对象行为仍可以用一个状态机描述。复合状态有两种类型,即顺序子状态和并发子状态。
(a)顺序子状态是指在对象生命周期内的任何时刻只能处于一个子状态,多个子状态之间是互斥的,不能同时存在,即子状态是按照顺序逐步出现的。
(b)并发子状态是指有两个或多个子状态之间可能是并发执行的。例如在一个图形界面的应用中,界面可以在用户输入信息的同时显示系统的时钟。
(8)历史状态:历史状态代表上次离开复合状态时的最后一个子状态,它用一个包含字母"H"的小圆圈表示。每当转换到历史状态时,对象便恢复到上次离开时的最后一个活动子状态。
图4 历史状态
上图播放器有4个子状态,即播放、前进、后退、停止,其中子状态之间可以互相转换。从状态的任一子状态都可以到“暂停”状态。当用户撤销暂停恢复播放器的活动状态时,播放器对象直接进入历史状态。
原文:http://blog.csdn.net/studynote/article/details/22403005