• 1.摘要
  • 2.基本信息
  • 3.基本介绍
  • 4.动态建模
  • 5.状态
  • 6.转移
  • 6.1.事件触发器
  • 6.2.警戒条件
  • 6.3.操作
  • 6.4.进入退出操作
  • 6.5.内部转移
  • 6.6.延迟的事件
  • 6.7.子状态
  • 7.历史状态
  • 8.建模技术
  • 9.提示与技巧
  • 10.链式状态
  • 11.通用准则
  • 12.状态指南
  • 13.建模指南
  • 13.1.建模子状态
  • 13.2.子状态变换
  • 13.3.变换和动作

状态图

事件反应的动态行为

状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。

基本信息

  • 中文名

    状态图

  • 外文名

    State Diagram

  • 基于

    事件反应

  • 动态建模

    受事件驱动的方面

  • 目的

    研究类角色

  • 用于

    显示状态机

基本介绍

状态图用于显示状态机(它指定对象所在的状态序列)、使对象达到这些状态的事件和条件、以及达到这些状态时所发生的操作。

动态建模

状态机用于对模型元素的动态行为进行建模,更具体地说,就是对系统行为中受事件驱动的方面进行建模(请参见概念:事件与信号)。状态机专门用于定义依赖于状态的行为(即根据模型元素所处的状态而有所变化的行为)。其行为不会随着其元素状态发生变化的模型元素不需要用状态机来描述其行为(这些元素通常是主要负载管理数据的被动类)。

图 1:状态机符号。
图 2:简单编辑器的状态机。

状态机由状态组成,各状态由转移链接在一起。状态是对象执行某项活动或等待某个事件时的条件。转移是两个状态之间的关系,它由某个事件触发,然后执行特定的操作或评估并导致特定的结束状态。图 1 描绘了状态机的各种元素。一个简单的编辑器可被视为有限的状态机,其状态为Empty(空)、Waiting for a command(等待命令)和 Waiting for text(等待文本)。事件 Load file(装载文件)、Insert text(插入文本)、Insert character(插入字符)和Saveandquit(保存并退出)导致了状态机中的转移。下面的图 2 描绘了编辑器的状态机。

状态

状态是对象执行某项活动或等待某个事件时的条件。对象可能会在有限的时间长度内保持某一状态。状态具有以下几项特征:

名称

将一个状态与其他状态区分开来的文本字符串;状态也可能是匿名的,这表示它没有名称。

进入/退出操作

在进入和退出状态时所执行的操作。

内部转移

在不使状态发生变更的情况下进行的转移。

子状态

状态的嵌套结构,包括不相连的(依次处于活动状态的)或并行的(同时处于活动状态的)子状态。

延迟的事件

未在该状态中处理但被延迟处理(即列队等待由另一个状态中的对象来处理)的一系列事件。

转移

转移是两个状态之间的关系,它表示当发生指定事件并且满足指定条件时,第一个状态中的对象将执行某些操作并进入第二个状态。当发生这种状态变更时,即“触发”了转移。在触发转移之前,可认为对象处于“源”状态;在触发转移之后,可认为对象处于“目标”状态。转移具有以下几项特征:

源状态

转移所影响的状态;如果对象处于源状态,当对象收到转移的触发事件并且满足警戒条件(如果有)时,就可能会触发输出转移。

事件触发器

使转移满足触发条件的事件。当处于源状态的对象收到该事件时(假设已满足其警戒条件),就可能会触发转移。

警戒条件

一种布尔表达式。在接收到事件触发器而触发转移时,将对该表达式求值;如果该表达式求值结果为 True,则说明转移符合触发条件;如果该表达式求值结果为 False,则不触发转移。如果没有其他转移可以由同一事件来触发,该事件就将被丢弃。

操作

可执行的、不可分割的计算过程,该计算可能直接作用于拥有状态机的对象,也可能间接作用于该对象可见的其他对象。

目标状态

在完成转移后被激活的状态。

一个转移可能有多个源状态,在这种情况下,它将呈现为一个从多个并行状态出发的结合点;一个转移也可能有多个目标状态,在这种情况下,它将呈现为一个到多个并发状态的叉形图。

事件触发器

在状态机环境中,事件是指可触发状态转移的激励的发生。事件可能包括信号、调用、时间推移或状态变更。信号或调用可能具有其值可用于转移的参数,其中包括警戒条件和操作的表达式。也可能会有无触发器的转移,这样的转移没有事件触发器。这种转移也被称为完成转移,它们在源状态完成其活动后将被隐含触发。

警戒条件

当转移的触发事件发生时,将对警戒条件进行求值。只要警戒条件不重叠,就可能会有来自同一源状态并具有同一事件触发器的多个转移。在事件发生时,只为转移进行一次警戒条件求值。该布尔表达式可能会引用对象的状态。

操作