3.4.1 状态图的组成

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 订单状态图