第10章 状态机图

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一个状态通常包括名称、进入/退出活动、内部转换、 子状态和延迟事件等五个部分组成

状态机是计算机科学理论的一部分,但UML中的状态 机模型主要是基于David Harel所做的扩展,是用来展示 状态与状态之间转换的图
状态机图描述从状态到状态的控制流程,常用来对系 统的动态特怔进行建模。在大多数情况下,它用来对 反应型对象(外部事件触发对象,对象接受到事件后产生 响应)的行为模型。 状态机图常用来描述业务或软件系统中的对象在外部 事件的作用下,对象的状态从一个状态到另一个状态 的控制流。利用状态图可以精确地描述对象在生命周 期内的行为特征。
复杂转换
转换类型 外部转换
描述
语法
对事件做出响应,引起状态变化或 事件(参数)[监护条件]/动作 自身转换,同时引发一个特定动作, 如果离开或进入状态将引发进入转 换、离开转换 对事件做出响应,并执行一个特定 的活动,但并不引起状态变化或进 入转换、离开转换 当进入某一状态时,执行相应活动 当离开某一状态时,执行相应活动 事件(参数)[监护条件]/动作
监护条件 监护条件是一个布尔表达式,当布尔表达式的值为真 时,转换才能够完成。只有在触发事件发生时,才计 算一次监护条件的值,当监护条件的值为真时,转换 才发生。如果转换发生后,监护条件才由假变为真, 那么转换也不会被触发。
动作 当转换被激活后,如果定义了相应的动作,那么就将 执行这个动作。动作可以是一个赋值语句、简单的算 术运算、发送信号、调用操作、创建和销毁对象、读 取和设置属性的值,甚至是一个包含多个动作的活动。 例如,在图中,当turnOn事件发生,就测试监护条件 [有水],如果有水,就会执行“烧水”的动作。
子状态机通信
历史

“一个圆圈中加上字母H”,用来表示历史状态的。它 的含义是:当从状态“结账”和“显示购物车”返回子
状态“显示索引信息”时,将进入的是离开时的历史状 态。也就是说,转到购物 车或结账区之后, 再回到“浏览目录”的 页面时,其中的内容 是不变的,仍然保留 原来的信息。
子状态机
读图小结

与状态off相关的转换有两个,其触发事件都是turnOn, 只不过其监护条件不同。如果对象收到事件turnOn,那

么将判断壶中是否有水;如果[没水],则仍然处于off状 态;如果[有水]则转为on状态,并执行“烧水”动作
而与状态on相关的转换也有两个,如果“水开了”就执 行turnOff,关掉开关;如果烧坏了,就进入了终态了
状态机图
知识图谱
Agenda
• • • • •
状态和状态机 如何阅读状态机图
如何绘制状态机图
状态机图应用说明 本章小结
Agenda
• • • • •
状态和状态机 如何阅读状态机图
如何绘制状态机图
状态机图应用说明 本章小结
状态、状态表示法及状态机


状态是指在对象生命周期中满足某些条件、执行某些活 动或等待某些事件的一个条件和状况
3).改变事件 改变事件是指某个指定属性值为真时,事件得到触发。 它与监护条件不同,在对象生命周期内,一直在计算 改变事件中的属性值,当属性值为真时,事件触发, 计算停止。 4).时间事件 当时间流逝到某个时刻,触发事件对对象起作用。时 间事件代表时间的流逝。它可以指定为绝对形式(每 天的某时,例如after(12:00)),也可以指定为相对 形式(从某一指定事件发生开始所经过的时间,例如 after(2seconds))。对于前一种形式,也可以使用 变化事件来描述:when(12:00)。

将子状态机单独定义,并对其进行命名(通常以大写字 母开头),然后在需要使用的地方来引用它
Agenda
• • • • •
状态和状态机 如何阅读状态机图
如何绘制状态机图
状态机图应用说明 本章小结
绘制状态机图—航班机票预订
• •
绘制状态机图的理想步骤是:寻找主要的状态,确定状 态之间的转换,细化状态内的活动与转换,用复合状态 来展开细节 寻找主要状态:对于航班机票预订系统而言,显然包括 的状态主要有 -- 在刚确定飞机计划时,显然是没有任何预订的,并 且在有人预订机票之前都将处于这种“无预订”状态 -- 对订座而言显然有“部分预订”和“预订完”两种 状态 -- 而当航班快要起飞时,显然要“预订关闭” 总结一下,主要有四种状态:无预订、部分预订、预订 完以及预订关闭
Agenda
• • • • •
状态和状态机 如何阅读状态机图
如何绘制状态Baidu Nhomakorabea图
状态机图应用说明 本章小结
阅读最简单的状态图

最为核心的元素无外乎是两个:一个是用圆角矩形表示 的状态(初态和终态例外);另一个则是在状态之间的、
包含一些文字描述的有向箭头线,这些箭头线称为转换
初始状态 初始状态代表状态图的起始位置,只能作为转换的源, 而不能作为转换的目标。初始状态在一个状态图中只 允许有一个,它用一个实心的圆表示
状态视图的表示
转换
转换是指对象在外部事件的作用下,当满足特定的条 件时,对象执行一定的动作,进入目标状态。转换用 带箭头的直线表示,箭尾连接源状态(转出的状态), 箭头连接目标状态(转入的状态)。 转换关系到的内容包括:源状态、目标状态、外部事 件、监护条件和执行的动作。
转换的五要素
• • •
动作分为入口动作和出口动作。当转换发生时,进入 某个状态时发生的动作称为入口动作;离开某个状态 时发生的动作称为出口动作。 1).入口动作 入口动作表示对象进入某个状态所要执行的动作。入 口动作用“entry/要执行的动作”表示。 2). 出口动作 出口动作表示对象退出某个状态所要执行的动作。出 口动作用“exit/要执行的动作”表示。 入口动作和出 口动作都标识在状态视图的第二栏中。
绘制状态机图

确定状态间转换
源目标 无预订 部分预订 预订完 预订关闭
无预订 部分预订 退订(),使预订人=0
预订完 预订关闭 不直接转换 无转换
预订()
退订() 无转换
不直接转换 预订(),无空座
无转换
关闭() 关闭()
关闭()
绘制状态机图

细化状态内的活动与转换
绘制状态机图

使用复合状态
创建项目中的状态图---选课
复合状态表示法
复合状态是指包含一个或多个嵌套状态机的状态,也 称为子状态机状态,它所包含的状态称为子状态。
Test
entry/ showScreen exit/ hideScreen
A B B
嵌套区域表示法
Dialing
entry/ offHook
分解指 示符
分解指示符法
顺序复合状态图 仅包含一个状态机的复合状态称为顺序复合状态,也称为非 正交状态。
初始状态的表示
终止状态 终止状态是对象的最后状态,是一个状态图的终止点。 终止状态只能作为转换的目标,而不能作为转换的源。 终止状态在一个状态图中可以有多个,它用一个套有 一个实心圆的空心圆表示。
终止状态的表示
状态
对象属性值的集合标识了一个对象的状态。表示对象状态的图标由一 个带圆角的矩形表示。它包含个三部分: 名称:给对象所处状态取的名字,名字用一个字符串表示,在一个图 中,名字应该是唯一的。 内部转换:对象响应外部事件所执行的动作。内部转换发生时,不改 变对象的状态,但是,当进入该状态时,可以包含进入动作;当退出 该状态时,可以包含退出动作。我们把内部转换标识在状态框的第二 栏;用一条实线箭头来标识外部转换,外部转换是指一种状态到另一 种状态的转换。 嵌套状态 :状态图中的状态可以包含两种状态:一种是简单状态, 简单状态不包含其它状态;一种是组合状态,组合状态包含了子状态。 即状态图的某些状态本身也是状态图。
活动 当对象处于一个状态时,它一般是空闲的,在等待一 个事件的发生。但是某些时间,对象正在执行一序列 动作,即,对象做着某些工作,并一直继续到被某个 外部事件的到来,才中断这些工作,我们把对象处于 某个状态时进行的一序列动作称为活动。 如果对象处于某个状态进行一些动作,可能会需要一 些时间,我们可以用活动来描述这一序列动作。表示 活动的方法是,在状态的转换分栏中添加一行“活动 描述”,其格式为“do/动作名”。 活动用来描述对象处于某个状态时,对象进行的一 序列动作。

正在进行的活动。在处于一个状态的同时,对象做着某 些工作,并一直继续到被某个事件中断
延迟事件:延迟事件是一种特殊的事件,它是指该事件 不会触发状态的转换,当对象处于该状态时事件不会丢 失,但会被延迟执行。例如,当E-mail程序中正在发送 第一封邮件时,用户下达发送第二封邮件执令就会被延 迟,但第一封邮件发送完成后,这封邮件就会被发送。 这种事件就属于延迟事件
并发复合状态图
如果复合状态包含两个或者多个并发的子状态机,此时称复 合状态的子状态为并发子状态。 考察一辆处于“运行”状态的电动车。车处在运行状态时, 包含了前进和后退两个不同的子状态,这两个子状态之间的 关系看,它们就是顺序子状态,因为一辆车不可能同时处于 前进和后退两种子状态;另一方面,车的运行状态又包括高 速行驶状态和低速行驶状态。前进状态可以同时为高速行驶 或者低速行驶状态;后退状态时,也可以是高速行驶或者低 速行驶状态,即,前进状态或后退状态之一,可以与高速行 驶状态或低速行使状态之一同时存在。 我们把这些可以同时出现的状态称为并发子状态,并发子状 态可以用于并发线程的状态建模。
等价的简单状态机图


IC卡电话包括3 个基本状态:“使用状态”、“未使用状态”和“维修状态”。其中“使用状态” 状态是一个复合状态。 当拿起电话打IC电话的时候,首先要插入IC卡,进行IC卡的有效验证,验证通过才可以拨打电话 ,此时从最初的“IC卡验证”状态转到“拨号”状态。如果电话接通,则转到“连接”状态;在连 接状态,如果对方也拿起听筒,则转入“通话”状态,通话完毕转入“挂断”状态;如果对方无人 接听。则转入“挂断”状态。如果拨号时出现异常情况,则挂断电话;如果挂断后重新拨号,电话 又处于“拨号”状态。如果此时取出IC卡,则IC电话转入“未使用”状态。 “使用状态”包含5个子状态,因为IC电话不能同时处于两个不同的子状态中,所以这些子状态是 顺序子状态。
内部转换
进入转换 退出转换
entry/活动 exit/活动
阅读带有复杂转换的状态图
各种转换的区别
• •
进入和退出转换:当进入一个状态时,执行某个动作; 或当退出某个状态时,执行什么动作。这时就可以使用
进入和退出转换来表示
内部转换:用来处理一些不离开该状态的事件
活动与延迟事件

活动:当对象处于一个状态时,它一般是空闲的,在等 待一个事件的发生。但是某些时间,你可能希望描述个
1. 确定状态图的实体
要创建状态图,首先要标识出哪些实体需要使用状态图 进一步建模。虽然我们可以为每一个类、操作、包或用 例创建状态图,但是这样做势必浪费很多的精力。 一般来说,不需要给所有的类都创建状态图,只有具有 重要动态行为的类才需要。 从另一个角度看,状态图应该用于复杂的实体,而不必 用于具有复杂行为的实体。使用活动图可能会更加适合 那些有复杂行为的实体。具有清晰、有序的状态实体最 适合使用状态图进一步建模。 对于学生选课来说,需要建模的实体就是学生账号。
源状态:即受转换影响的状态 目标状态:当转换完成后对象的状态 触发事件:用来为转换定义一个事件,包括调用、改变、 信号、时间四类事件
• •
监护条件:布尔表达式,决定是否激活转换、
动作:转换激活时的操作
源状态 对于一个转换来说,转换前对象所处的状态,就是源 状态。源状态是个相对的概念,即,相对当前状态而 言,它的前一个状态就是源状态。 目标状态 转换完成后,对象所处的状态就是目标状态 。当前状 态相对它的前一个状态而言,当前状态就是目标状态。 源状态和目标状态都是相对某个转换而言的。
事件:就是外部作用于一个对象,能够触发对象状态 改变的一种现象。事件可以分为调用、改变、信号、 时间四类事件。 1).信号事件 对象之间通过发送信号和接收信号实现通信。信号是 一种异步机制。在计算机中,鼠标和键盘的操作均属 于此类事件。对于一个信号而言,对象一般都有相应 的事件处理器,如onMouseClick()等。 2).调用事件 调用某个对象的成员方法就是调用事件,它是一种同 步的机制。例如在图中,turnOn就是一种调用事件, 用来将开关置于“On”状态。
相关文档
最新文档