状态图是UML中对系统动态方面建模的图之一,通过建立对象的生命周期模型来描述对象状态随时间变化的动态行为。系统中对象的状态最容易发现和理解的,所以建模时首先考虑基于状态间的控制流。具体来说,
状态图用于描述模型元素的实例的行为,适用于描述状态和动作的顺序,不仅可以展示一个对象拥有的状态,还可以说明事件如何随着时间的推移来影响这些状态。
先来了解下状态机,状态机是一种记录下给定时刻状态的设备,可以根据各种不同的输入对每个给定的变化而改变其状态或引发一个动作,如各种客户端软件、Web上的各种交互页面。状态机由对象的各个状态和连接这些状态的转换组成,可以展示状态和状态转换,用于说明对象在其生命周期中响应事件所经历的状态序列以及对这些事件的响应。
状态机由状态、转换、事件、活动和动作5部分组成。
状态是指对象在生命周期中的一种状况,处于某个特定状态中的对象必然满足某些条件或执行某些动作。
转换是指两个不同状态之间的一种关系。
事件是指发生在时间和空间上的对状态机有意义的事情。
动作是指状态机中可以执行的那些原子操作,所谓原子操作时指对象在运行过程中不能被其他消息中断,必须
执行下去,导致状态的变更或返回一个值。
活动是指状态机中进行的非原子操作。
通常一个状态机依附于类、用例或操作等,并且描述它们对接收到的事件的动态响应过程。状态机总是一个对象、协作或用例的局部视图,考虑问题时将实体与外部分离,所以适合对局部、细节进行建模。
状态图本质上就是一个状态机描述了一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的时间做出的反应。状态图的组成:状态、转换、判定、初始状态和终止状态。 下面的图就是一个简单的选课状态图,其中的判定是可选动作,用的到就选用,用不到就不用选择。
状态用于对实体在生命周期中的各种状况进行建模,在UML中由一个带圆角的矩形表示,包括状态名、入口和出口动作、内部转换和嵌套状态。
转换在UML的状态建模机制中,用带箭头的直线表示,一端连接源状态,箭头指向目标状态。转换还可以标注与此转换相关的选项,如果没有标注则表示转换自动进行。
判定:根据给定条件进行判断,然后根据不同的判断结果进行不同的转换,在UML中判定用空心菱形表示。
初始状态:表示状态图的起始位置,且必须要有一个输出的无触发转换。初始状态只能作为转换的源,不能作为转化的目标。在UML中一个状态图只能有一个初始状态,用实心的圆表示。
终止状态:是状态图的终点,状态图中可以有多个终止状态,终止状态不可能有任何形式的触发转换,目的是为了激发封装状态上的完成转换。因此终止状态不能作为转换的源,在UML中终止状态用空心圈实心圆表示。另外,一些特殊的状态图可以没有终止状态。
状态图的作用:
1. 清晰的描述了状态间的转换顺序,容易看出事件的执行顺序。
2. 有利于程序员在开发程序时避免出现时间错误的情况。
3. 描述了状态转换时所必须触发的事件、监护条件和动作等影响转换的因素,有利于程序员避免程序中非法时间的进入。
4. 通过判定可以更好地描述工作流应为不同的条件发生的分支。
通过状态图的了解,能清晰的看到在系统状态之间的变化,对系统功能的影响作出更加准确的分析。状态图和活动图两者密不可分,在状态图中的很多概念在活动图中也都有应用,两者集合将展现更加清晰的系统动态状态,
状态图的更加复杂的应用将在以后的使用中进一步探索。