第7章状态机图 本章导读 状态机图用于对象的行为建模。本章介绍状态机中涉及到的状态、状态转换、事件、 复合状态、并发状态、子机状态、控制结点等概念,并给出几个状态机模型的实例。 主要知识点 状态 状态转换 ■事件 复合状态 并发状态 控制结点 子机状态 ■状态机
1 第 7 章 状态机图 本章导读 状态机图用于对象的行为建模。本章介绍状态机中涉及到的状态、状态转换、事件、 复合状态、并发状态、子机状态、控制结点等概念,并给出几个状态机模型的实例。 主要知识点 ■ 状态 ■ 状态转换 ■ 事件 ■ 复合状态 ■ 并发状态 ■ 控制结点 ■ 子机状态 ■ 状态机
7.1几个基本概念 711状态 状态( (state指事物在其生命周期中满足某些条件、执行某些操作或等待某些事件而持 续的一种稳定的状况。一个事物在它的生命期中会有一系列状态,处于某种状态意味着 它满足某些条件,执行特定活动,或者等待某些事件发生,每个状态都需持续一段有限 的时间。例如,设备具有待用、运行和故障等状态。设备在待用状态如果启动运行,则 进入运行状态,如果关闭设备则又回到待用状态。当设备出现故障则进入故障状态,设 备被维修好后又返回到待用状态 712状态机 状态机 (state machine)描述一个事物在其生命期中,所具有的状态,以及因事件触发 而引起的状态的各种转换。一个事物在其生命期中会具有多种状态,并会因事件触发而 引起状态的转换。例如,商店中的商品具有订购、库存、待售、已售、报废等状态。与 供货商签订订单之后,商品处于订购状态,商品到货入库后转为库存状态,商品出库放 到销售货架上处于待售状态,销售出去后进入售出状态,如果因为损坏或清库而报废则 处于报废状态。签订订单、到货入库、出库、销售等是引发商品状态转换的事件。 7.13状态机图 订购 库存 售出 "(" 报废 图71状态机图 状态机图 state machine diagram)是UM用来描述状态机的图,在UML20版本之前, 状态机图被称为状态图。状态机图由状态结点、控制结点和转换边构成。状态结点描述 事物的状态,可分为简单状态、复合状态和子机状态等类型。控制结点用来协调状态关 系、控制状态转换的流程,有开始状态、终止状态、分叉与汇合、选择、汇接等。转换
2 7.1 几个基本概念 7.1.1 状态 状态(state)指事物在其生命周期中满足某些条件、执行某些操作或等待某些事件而持 续的一种稳定的状况。一个事物在它的生命期中会有一系列状态,处于某种状态意味着 它满足某些条件,执行特定活动,或者等待某些事件发生,每个状态都需持续一段有限 的时间。例如,设备具有待用、运行和故障等状态。设备在待用状态如果启动运行,则 进入运行状态,如果关闭设备则又回到待用状态。当设备出现故障则进入故障状态,设 备被维修好后又返回到待用状态。 7.1.2 状态机 状态机(state machine)描述一个事物在其生命期中,所具有的状态,以及因事件触发 而引起的状态的各种转换。一个事物在其生命期中会具有多种状态,并会因事件触发而 引起状态的转换。例如,商店中的商品具有订购、库存、待售、已售、报废等状态。与 供货商签订订单之后,商品处于订购状态,商品到货入库后转为库存状态,商品出库放 到销售货架上处于待售状态,销售出去后进入售出状态,如果因为损坏或清库而报废则 处于报废状态。签订订单、到货入库、出库、销售等是引发商品状态转换的事件。 7.1.3 状态机图 状态机图(state machine diagram)是UML用来描述状态机的图,在UML2.0版本之前, 状态机图被称为状态图。状态机图由状态结点、控制结点和转换边构成。状态结点描述 事物的状态,可分为简单状态、复合状态和子机状态等类型。控制结点用来协调状态关 系、控制状态转换的流程,有开始状态、终止状态、分叉与汇合、选择、汇接等。转换 图 7.1 状态机图
边用来连接状态机图中的结点,表示状态因事件触发,由源状态到目标状态的转换。图 7.1是描述商店商品的状态机图。 7.2状态 7.21状态的表示 状态用圆角矩形表示。每一个状态应该有名字,状态的名字用标识符表示。状态名 如果用英文,第一个字母要大写。状态的名字放在圆角矩形里面,见图72 状态名 闲 图72状态的表示 7.22状态的类型 状态可以分为下面几种类型 1)简单状态:不包含子状态和子机状态的状态,也被称为原子状态 2)复合状态:内部包含子状态的状态 3)子机状态:由状态机作为复合状态中的一个子状态 7.23状态的动作 一个状态的内部可以包括多个动作和事件。当事物处在该状态时,就可能执行这些 动作或事件,状态的动作或事件写到状态名下面,见图73。一个状态可以有入口动作、 出口动作、内部变迁、延迟事件等 状态名 entry/入口动作 do活动 ex出口动作 event事件名/ defer 图73状态动作或事件 1.入口动作 入口动作是转入该状态时,自动执行的第一个动作。在进入该状态后,在该状态中 的其他所有活动均在入口动作之后发生,转入一个状态仅执行一次入口动作。入口动作
3 边用来连接状态机图中的结点,表示状态因事件触发,由源状态到目标状态的转换。图 7.1 是描述商店商品的状态机图。 7.2 状态 7.2.1 状态的表示 状态用圆角矩形表示。每一个状态应该有名字,状态的名字用标识符表示。状态名 如果用英文,第一个字母要大写。状态的名字放在圆角矩形里面,见图 7.2。 7.2.2 状态的类型 状态可以分为下面几种类型: 1)简单状态:不包含子状态和子机状态的状态,也被称为原子状态。 2)复合状态:内部包含子状态的状态。 3)子机状态:由状态机作为复合状态中的一个子状态。 7.2.3 状态的动作 一个状态的内部可以包括多个动作和事件。当事物处在该状态时,就可能执行这些 动作或事件,状态的动作或事件写到状态名下面,见图 7.3。一个状态可以有入口动作、 出口动作、内部变迁、延迟事件等。 状态名 entry/ 入口动作 do/ 活动 exit/ 出口动作 event 事件名/ defer 1. 入口动作 入口动作是转入该状态时,自动执行的第一个动作。在进入该状态后,在该状态中 的其他所有活动均在入口动作之后发生,转入一个状态仅执行一次入口动作。入口动作 图7.2 状态的表示 图 7.3 状态动作或事件
表示为 extry/do shing,例如, extry/dooropen 2.出囗动作 出口动作是转出该状态时,自动执行的最后一个动作。该动作执行之后,就将由该 状态转换到下一个状态。出口动作表示为 exit/do shing,例如, exit/door close 3.内部变迁 内部变迁指在该状态内部执行的动作,该动作不会引起状态的变换。在一个状态内 部可以有多个内部变迁,内部变迁总是在入口行为之后,出口行为之前执行。内部变迁 表示为 do/thing,例如,do/ check 4.延迟事件 延迟事件表示在当前状态下,如果发生某个事件,该事件将被延迟处理。延迟事件 表示为:事件 /defer,例如, print/defer(15),表示打印事件将被延迟15秒。 7.3状态转换 7.31状态转换的概念 状态转换( state transition)是两个状态之间的一种有向关系,表示从源状态转换到 目标状态。状态转换用一个带箭头的实线表示,箭头由源状态指向目标状态。在实线上 标注状态转换的触发事件、监护条件和转换状态的动作,状态转移可表示为图7.4的形 状态 率件[护条件])换动作 状态2 74状态转换 732状态转换的三要素 在某种条件下,发生某种事件,执行某个动作而引起事物从源状态转换到目标状态, 触发事件、监护条件和转换动作被称为引发状态转换的三要素,状态转换的三要素标注 在状态转换线上,见图74 1.触发事件
4 表示为 extry/do shing,例如,extry/dooropen。 2. 出口动作 出口动作是转出该状态时,自动执行的最后一个动作。该动作执行之后,就将由该 状态转换到下一个状态。出口动作表示为 exit/do shing,例如,exit/door close。 3. 内部变迁 内部变迁指在该状态内部执行的动作,该动作不会引起状态的变换。在一个状态内 部可以有多个内部变迁,内部变迁总是在入口行为之后,出口行为之前执行。内部变迁 表示为 do/thing,例如,do/check up on work。 4. 延迟事件 延迟事件表示在当前状态下,如果发生某个事件,该事件将被延迟处理。延迟事件 表示为:事件/defer,例如,print/defer(15),表示打印事件将被延迟 15 秒。 7.3 状态转换 7.3.1 状态转换的概念 状态转换(state transition)是两个状态之间的一种有向关系,表示从源状态转换到 目标状态。状态转换用一个带箭头的实线表示,箭头由源状态指向目标状态。在实线上 标注状态转换的触发事件、监护条件和转换状态的动作,状态转移可表示为图 7.4 的形 式。 7.3.2 状态转换的三要素 在某种条件下,发生某种事件,执行某个动作而引起事物从源状态转换到目标状态, 触发事件、监护条件和转换动作被称为引发状态转换的三要素,状态转换的三要素标注 在状态转换线上,见图 7.4。 1. 触发事件 图 7.4 状态转换
指触发状态转换的事件。例如,开门,关门,入库,出库等。如果在转换中没有触 发事件,则表示源状态执行完成后,不需要事件的触发自动转换到目标状态 2.监护条件 监护条件放到方括号中间,用来监护状态转换。在事件发生后,如果监护条件为真, 则执行动作,并转换状态。如果监护条件为假,则不执行转换动作,也不实施状态转换 如果没有监护条件,则不作条件判断,在事件发生后直接执行转换动作。 3.转换动作 在事件发生后所执行的一组动作,并把状态由源状态转换到目标状态。在动作前置 个“/”。这些行为通常在瞬间完成,不能有明显的时间延续。如果省略动作,则直接 转换状态。 图75表示电梯从待载状态到上升状态的状态情况。电梯在等待载人状态,如果有 人进入,要到达的目标楼层高于当前楼层,则电梯关门上行,进人上升状态 进人[目柝楼>当楼]关门上行 图75电梯的待载状态到上升状态的转换 7.4事件 741事件的概念 在状态机中,事件( event)是指所发生的瞬时事情,它能够引发状态的转换。例如, “按开关”事件能够使马达的状态由关闭转变为转动,“双击鼠标”事件能够使得一个信 息窗口由隐藏变为打开状态。 状态机中的事件的性质有以下两点: (1)瞬时态:事件是瞬时发生的,没有时间的延续。并不是说事件的发生不需要时 间,而是在状态机建模中要求事件发生的时间是短促的,并且不需要表现事件的时延。 (2)原子性:事件不可再分割,即使一个复杂的事件,也被认为是在瞬时发生的 件事情。 7.42事件的类型 1.按事件发生的位置分
5 指触发状态转换的事件。例如,开门,关门,入库,出库等。如果在转换中没有触 发事件,则表示源状态执行完成后,不需要事件的触发自动转换到目标状态。 2. 监护条件 监护条件放到方括号中间,用来监护状态转换。在事件发生后,如果监护条件为真, 则执行动作,并转换状态。如果监护条件为假,则不执行转换动作,也不实施状态转换。 如果没有监护条件,则不作条件判断,在事件发生后直接执行转换动作。 3. 转换动作 在事件发生后所执行的一组动作,并把状态由源状态转换到目标状态。在动作前置 一个“/”。这些行为通常在瞬间完成,不能有明显的时间延续。如果省略动作,则直接 转换状态。 图 7.5 表示电梯从待载状态到上升状态的状态情况。电梯在等待载人状态,如果有 人进入,要到达的目标楼层高于当前楼层,则电梯关门上行,进人上升状态。 7.4 事件 7.4.1 事件的概念 在状态机中,事件(event)是指所发生的瞬时事情,它能够引发状态的转换。例如, “按开关”事件能够使马达的状态由关闭转变为转动,“双击鼠标”事件能够使得一个信 息窗口由隐藏变为打开状态。 状态机中的事件的性质有以下两点: (1) 瞬时态:事件是瞬时发生的,没有时间的延续。并不是说事件的发生不需要时 间,而是在状态机建模中要求事件发生的时间是短促的,并且不需要表现事件的时延。 (2) 原子性:事件不可再分割,即使一个复杂的事件,也被认为是在瞬时发生的一 件事情。 7.4.2 事件的类型 1. 按事件发生的位置分 图 7.5 电梯的待载状态到上升状态的转换