第六章:状态图

概述
  • 状态图定义:状态图描述了一个对象或交互过程在它的生命周期中对**一系列外界激励的所呈现出的不同状态以及它相应的响应和活动。**状态图描述了一个状态机。
  • 状态机定义:根据当前事件,以及对以前事件的响应的结果决定对当前事件的响应的软件对象的动态行为,称为是事件驱动的。在UML里,最适合于描述这类动态行为的建模手段,就是状态机。
  • 状态机
    用状态:记录以前的动态行为的结果。
    用变迁:描述软件对象对外来事件的响应以及响应的状态的变化。
  • 可描述对象:可以是类的实例,可以是用例的实例,甚至可以是非软件对象。
构成
  • 状态:状态被图形化表示为一个圆角矩形
    在这里插入图片描述
    除了用圆角矩形表示的状态外, 还有两种特殊的状态,初始状态和终止状态。
    状态机所在对象在创建后状态机产生的第一个变迁将从初始状态出发。
    用带实心圆的圆环表示的状态称为状态机的终止状态(final state)。

  • 变迁:变迁被定义为软件对象的两个状态之间的关系,表明在指定的事件发生后,在特定的条件下,对象执行指定的动作,并进入另一个状态。
    在这里插入图片描述
    变迁由五部分组成:

  1. 起始状态(可以有多个起始状态)
  2. 目标状态(可以有多个目标状态)
  3. 触发事件(触发条件是一个布尔表达)
  4. 触发条件(触发事件[触发条件]/变迁动作)
  5. 变迁动作(变迁动作是伴随着变迁的激发被执行的一个元计算)
状态图基本组成成分

描述状态图的图符元素有:状态图符、迁移图符、起始状态、终止状态、条件判定、发出信号、接收信号和并发等。
在这里插入图片描述

状态
  • 一个完整的状态包括三个组成部分,它们是:状态名、状态变量、活动
    在这里插入图片描述
    状态名:由一个字符串构成,用以标识不同的状态。状态名字可以省略,称为匿名状态。
    状态变量:状态图所描述的类的属性,也可以是临时变量。
    活动:列出了在该状态时要执行的事件和动作,是任选项,活动有三个标准活动:

    • entry事件:指明在进入该状态时的特定动作;
    • exit事件:指明退出该状态时的特定动作;
    • do事件:指明在该状态中执行的动作;
  • 对象的状态属性可分为:嵌套状态(组合状态)、顺序状态、历史状态、同步状态和并发状态。

  1. 包含子状态的状态称为复合状态,不包含子状态的状态称为简单状态。
    在这里插入图片描述
  2. 顺序状态:表示状态的顺序迁移。如果一个复合状态的子状态机所在的对象在其生存期内的任一时刻只能处于一个子状态,则这些子状态被称为串行子状态。
  3. 并发状态:一个状态可以有多个并发的子状态。可以复合迁移的同步并发迁移图来表示并发子状态。复合迁移就是由条件判断、并发分叉和并发连接这些图符来表示。
    在这里插入图片描述
    在这里插入图片描述
  4. 历史状态:历史状态是一个特殊的子状态,它记录了复合状态被转出时的活跃子状态。在绘制状态机时,其中的历史状态被表示成一个被圆环包围的字母H。
迁移和触发
  • 描述状态迁移的形式化语法格式如下:
    事件[条件]/动作表达式 发送子句
    事件:指已发生并可能引发某种活动的一件事;
    [条件]:由方括号围起的关系或逻辑表达式;
    动作表达式:一个触发状态迁移时可执行的过程表达式。
    发送子句:动作的一个特例,说明调用的事件名(操作)是哪个对象的。

  • 转移类型

  1. 自转移: 源状态和目标状态为同一状态的转移。
    在这里插入图片描述

  2. 自动转移: 一个状态根据本状态的有关情况,自动触发进入目标状态,在转移上没有事件。
    在这里插入图片描述

  3. 条件转移: 通过分支判断所确定的转移。
    在这里插入图片描述

状态图的作用:

当在系统建模过程中需要描述某个事物或对象的不同状态,以及状态之间转移的事件和动作时,用状态图。
在这里插入图片描述

对比
  • 状态图VS交互图
    交互强调的是对象之间的互相协作,通过软件对象的交互实现软件系统的设计功能。
    状态机则强调的是对象本身对对象外部发生的事件的响应及伴随的状态的变化。

  • 动作VS活动
    动作:一组可执行的语句,具有迁移性、原子性和连续性。
    活动:一组可执行的动作,具有有限性和非原子性。

状态图的建模分析步骤

(1)首先要确定进行系统控制的对象,可以从前面分析的顺序图中寻找。
(2)确定对象的起始状态和结束状态。
(3)在对象的整个生命周期寻找有意义的控制状态。
(4)寻找状态之间的转换。
(5)补充引起转换的事件。
(6)UML建模工具画状态图。
(7)补充必要的文档。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐