3.4.1 状态图的组成
状态图中一般包含状态、转移、活动、事件等元素。
1.状态
对象的状态是指在这个对象的生命期中的一个条件或状况, 在此期间对象将满足某些条件、执行某些活动或等待某些事件。对象的状态主要分为3种: 初态、终态和中间状态。
2.转移
转移是由一种状态到另一种状态的迁移。这种转移由被建模实体内部或外部事件触发。
对一个类来说, 转移通常是调用了一个可以引起状态发生重要变化的操作的结果。
状态和转移的具体解释如表3-3所示。
表3-3 状态和转移的具体解释
3.活动
活动表示对象处于某种中间状态时系统要执行的事件和动作, 包括入口动作、出口动作、内部转移、活动等。具体说明如下。
①入口和出口动作表示进入和退出某个状态所执行的动作。入口动作的语法: entry/执行的动作。出口动作的语法: exit/执行的动作。如果有多个执行动作, 则用逗号分隔。
②内部转移描述的是一个事件触发了对象的某个响应, 但并不改变对象的状态。内部转移的语法: 事件/动作表达式。
③活动是在一个状态内执行的处理过程。在UML 中还用do 转移来描述在入口动作之后执行的内部的一个活动序列。
图3-19描述了用户对象输入密码的状态。
图3-19 用户对象输入密码的状态
4.事件
事件是在某种特定时间、特定地点发生的事情, 引起对象做出动作从源状态向目标状态转移。UML 中定义了以下4种主要事件类型。
①消息事件: 由外界传递的简单信号或消息, 对象收到后发生状态转移。消息事件的格式: [消息或信号]。图3-20 (a) 中的“[断电]” 信号为消息事件。
②调用事件: 外界传递的要求使对象调用执行某个操作并发生状态转移的请求。调用事件的格式: 事件名(参数列表)。图3-20 (b) 中的“Startautopilot (normal) ” 信号为调用事件。
③时间事件: 根据某时间表达式的满足情况决定对象状态转移的事件。时间事件用关键字 “after” 表示, 时间事件的格式: after (时间表达式)。图3-20 (c) 中的“after (2 second) ” 为时间事件。
④变化事件: 根据某特定条件的满足情况决定对象状态转移的事件。变化事件的格式: [when (条件表达式) ]。图3-20 (d) 中的“when (temperature>120)/alarm” 为变化事件。
图3-20 事件类型
(a) 消息事件; (b) 调用事件; (c) 时间事件; (d) 变化事件
根据状态图的组成成分的说明, 可以绘制如图3-21所示的订单状态图。
图3-21 订单状态图