状态图(Statechart)
状态图和活动图的区别:活动图用来建模不同区域的工作如何彼此交互,而状态图用来表示单个的对象,以及对象的行为如何改变其状态。
什么是状态?状态定义为对象行为在某一个时刻的快照(snapshot)或者转折点(milestone)。例如计算机的状态可以分为开机、启动、工作中、空闲、关机和离线。状态图的任务就是描述计算机如何从离线状态进入启动状态,以及如何从处理进入空闲。
为什么建模状态图?用来建模对象状态的改变,也可以用于建模复杂的用例行为。
状态图标记符组件:
u 状态:普通的用圆角矩形。开始用实心点。结束用带圈的实心点。状态图中,不必同时具有开始和结束状态,开始状态和结束状态都可以有0个到多个。
u 转移:表示从一个状态到另一个状态的处理流。
u 决策点:一个分成多个
u 同步:许多个状态同时有效。
u 事件:一个放在转移上的藐视,指示状态改变的原因。
u 动作:由状态中的条件或者事件触发的行为。说明当事件发生时发生了什么行为。状态初始时有5种基本动作类型:
1. Entry 用来指定进而状态时发生的动作。
2. Exit 用来指定状态被另一个状态取代时发生的动作。
3. Do 用来指定出于状态时的活动。
4. Include 调用另一个状态图表示的子机器。
5. Event 用来指定当特定的事件触发时执行的动作。
标记符:action-label / action。例如:entry / numberOfStudents = 0。标在转移上。
一个对象可以通过同步操作同时拥有多个状态。有时,当单个状态具有独有的附加子状态时,可以在状态中使用层次结构的状态。如何使用合成状态?
u 子状态:状态图中的某个状态独有的状态,可以使用单个状态图来建模。
u 合成状态:另一种演示子状态的方法。在大状态的框中画小状态,小状态也是一套状态图。
如何建模状态图:
1. 标识出需要进一步建模的实体。状态图应该用于复杂的实体,而不是用于具有复杂行为的实体,具有复杂行为的实体用活动图更好。
2. 标识出每一个实体的开始状态和结束状态。确定开始和结束状态要什么信息?(如何创建和销毁实体)
3. 确定与每一实体相关的事件。确定事件时需要哪些信息?(实体的任务是什么)
4. 从开始状态开始创建状态图。
5. 如果必要则指定合成状态。