第10章 状态机图.ppt_第1页
第10章 状态机图.ppt_第2页
第10章 状态机图.ppt_第3页
第10章 状态机图.ppt_第4页
第10章 状态机图.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章状态机图 2 对象和状态 对象是某个状态下的对象 而状态则是描述当前对象 所有的对象均有状态 状态可改变下面一些例子说明了对象和状态 1 支票 对象 已付 状态 2 汽车 对象 已启动 状态 3 小王 对象 睡着了 状态 4 小红 对象 未婚 状态 2 3 为什么要建模状态机图 对象可能会有不同的状态 某些行为依赖于这些状态 例如 按下开关按钮时 电灯将改变当前的状态 由关变开或由开变关 因此 需要记录对象当前的状态发生了某种事件才会引起状态间的转移由一个状态转到另一个状态的过程通常通过方法调用实现状态机图通常作为对类图的补充 面向对象分析与设计 UML 4 状态机图 电梯 状态机图主要显示以下3种内容 对象在生命周期中所经历的状态序列 诱发对象从一个状态转移到另一个状态的事件 状态改变所导致的动作 状态机图的概念 状态机图描述对象在整个生命周期内 在外部事件的作用下 从一种状态转换到另一种状态的关系图 这种图的节点是状态 包括初始状态和终止状态 关系是转换 状态机图的概念 状态机图的作用状态机图常用来描述业务或软件系统中的对象在外部事件的作用下 对象的状态从一个状态到另一个状态的控制流 利用状态机图可以精确地描述对象在生命周期内的行为特征 状态机图的组成元素状态机图的组成元素包括 初始状态 终止状态 状态 转换 其中 转换将各种状态连接在一起 构成一个状态机图 状态机在整个生命周期内 描述对象处于各种状态的图 该图必须完整包括 初始状态 终止状态 状态 转换 状态机图不一定完整包含初始状态 终止状态 状态 转换等状态 7 状态机图的基本符号 状态机图的表示 一个状态机图包含的元素有初始状态 终止状态 状态 转换 分支 状态的表示初始状态初始状态代表状态机图的起始位置 只能作为转换的源 而不能作为转换的目标 初始状态在一个状态机图中只允许有一个 它用一个实心的圆表示 终止状态终止状态是对象的最后状态 是一个状态机图的终止点 终止状态只能作为转换的目标 而不能作为转换的源 终止状态在一个状态机图中可以有多个 它用一个套有一个实心圆的空心圆表示 状态机图的表示 状态对象属性值的集合标识了一个对象的状态 表示对象状态的图标由一个带圆角的矩形表示 它包含三部分 名称 给对象所处状态取的名字 名字用一个字符串表示 在一个图中 名字应该是唯一的 内部转换 对象响应外部事件所执行的动作 内部转换发生时 不改变对象的状态 但是 当进入该状态时 可以包含进入动作 当退出该状态时 可以包含退出动作 嵌套状态 状态机图中的状态可以包含两种状态 一种是简单状态 简单状态不包含其它状态 一种是组合状态 组合状态包含了子状态 即状态机图的某些状态本身也是状态机图 10 状态机图的表示 状态机图的表示 转换的表示转换是指对象在外部事件的作用下 当满足特定的条件时 对象执行一定的动作 进入目标状态 转换用带箭头的直线表示 箭尾连接源状态 转出的状态 箭头连接目标状态 转入的状态 转换关系到的内容包括 源状态 目标状态 外部事件 监护条件和执行的动作 下图描述了烧水器的状态机图 注意 用实线箭头表示的转换都是外部转换 烧水器的状态机图 12 转换的五要素 源状态 即受转换影响的状态目标状态 当转换完成后对象的状态触发事件 用来为转换定义一个事件 包括调用 改变 信号 时间四类事件监护条件 布尔表达式 决定是否激活转换 动作 转换激活时的操作 状态机图的表示 1 源状态对于一个转换来说 转换前对象所处的状态 就是源状态 源状态是个相对的概念 即 相对当前状态而言 它的前一个状态就是源状态 2 目标状态转换完成后 对象所处的状态就是目标状态 当前状态相对它的前一个状态而言 当前状态就是目标状态 源状态和目标状态都是相对某个转换而言的 状态机图的表示 3 事件事件就是外部作用于一个对象 能够触发对象状态改变的一种现象 1 信号事件对象之间通过发送信号和接收信号实现通信 信号是一种异步机制 对于一个信号而言 对象一般都有相应的事件处理器 如onMouseClick 2 调用事件调用某个对象的成员方法就是调用事件 它是一种同步的机制 例如turnOn是一种调用事件 用来将开关置于 On 状态 3 改变事件指某个指定属性值为真时 事件得到触发 与监护条件不同 在对象生命周期内 一直在计算改变事件中的属性值 事件触发 计算停止 4 时间事件当时间流逝到某个时刻 触发事件对对象起作用 例如 after 12 00 after 2seconds when 12 00 5 延迟事件指对象处在在本状态时外部事件产生了 但没有执行事件 要推迟到另外一个状态才执行的事件 状态机图的表示 4 监护条件监护条件是一个布尔表达式 当布尔表达式的值为真时 转换才能够完成 只有在触发事件发生时 才计算一次监护条件的值 当监护条件的值为真时 转换才发生 如果转换发生后 监护条件才由假变为真 那么转换也不会被触发 状态机图的表示 5 动作当转换被激活后 如果定义了相应的动作 那么就将执行这个动作 动作可以是一个赋值语句 简单的算术运算 发送信号 调用操作 创建和销毁对象 读取和设置属性的值 甚至是一个包含多个动作的活动 例如 当turnOn事件发生 就测试监护条件 有水 如果有水 就会执行 烧水 的动作 动作分为入口动作和出口动作 1 入口动作入口动作表示对象进入某个状态所要执行的动作 入口动作用 entry 要执行的动作 表示 2 出口动作出口动作表示对象退出某个状态所要执行的动作 出口动作用 exit 要执行的动作 表示 状态机图的表示 活动当对象处于一个状态时 它一般是空闲的 在等待一个事件的发生 但是某些时间 对象正在执行一序列动作 即 对象做着某些工作 并一直继续到被某个外部事件的到来 才中断这些工作 我们把对象处于某个状态时进行的一序列动作称为活动 如果对象处于某个状态进行一些动作 可能会需要一些时间 我们可以用活动来描述这一序列动作 表示活动的方法是 在状态的转换分栏中添加一行 活动描述 其格式为 do 动作名 活动用来描述对象处于某个状态时 对象进行的一序列动作 状态机图的表示 理解简单状态机图例如 描述一个烧水器在工作时的行为状态变化 与状态off相关的转换有两个 其触发事件都是turnOn 只不过其监护条件不同 如果对象收到事件turnOn 那么将判断壶中是否有水 如果 没水 则仍然处于off状态 如果 有水 则转为on状态 并执行 烧水 动作与状态on相关的转换也有两个 如果 水开了 就执行turnOff动作 关掉开关 如果烧坏了 就进入了终态了 状态机图的表示 分支的表示对象在外部事件的作用下 根据监护条件的不同值 转向不同的目标状态 即 对象的状态根据监护条件的取值而发生分支 分支用空心小菱形表示 根据监护条件的真假可以触发不同的分支转换 状态机图的表示 转换表示当一个外部事件作用于对象 在监护条件得到满足时 对象在源状态下执行一序列的动作后 转向目标状态 转换进入的状态称为活动状态 转换离开的状态变变为非活动状态 转换通常分为 外部转换内部转换自动转换复合转换 转换的分类 1 外部转换外部转换是一种改变对象状态的转换 是最常见的一种转换 外部转换用从源状态到目标状态的箭头表示 火车上卫生间的简单状态转换 该卫生间存在三个状态 包含5个外部转换 转换的分类 2 内部转换内部转换有一个源状态但是没有目标状态 它转换后的状态仍旧是它本身 内部转换自始至终都不离开源状态 所以没有入口动作和出口动作 因此 当对象处于某个状态 进行的一些动作时 我们可以把这些动作看成是内部转换 在第二栏 描述了入口动作和出口动作 也描述了内部转换 要注意的是 入口动作和出口动作描述的是外部转换时发生的动作 内部转换是描述本状态没有发生改变的情况下 发生的动作 状态的分类 3 自动转换在没有外部事件的作用下 对象执行了某些活动后 自然而然地完成的转换 自转换是离开某个状态后重新进入原先的状态 它会激发状态的入口动作和出口动作的执行 4 复合转换复合转换由简单转换组成 通过分支判定 把多个简单转换组合在一起 24 转换的区别 内部转换和自转换不同 自转换是离开本状态后重新进入该状态 它会激发状态的入口动作和出口动作的执行 内部转换自始至终都不离开本状态 所以没有出口或入口事件 也就不执行入口和出口动作 25 带有复杂转换的状态机图 26 同步 使用同步条可以显示并发转移 并发转移中可以有多个源状态和目标状态 并发转移表示一个同步将一个控制划分为并发的线程 状态机图中使用到同步条是为了说明某些状态在哪里需要跟上或者等待其他状态 状态机图中同步条是一条黑色的粗线 26 状态的分类 状态机图中的状态分为简单状态和复合状态2种 1简单状态简单状态是指不包含其他状态的状态 但是 简单状态可以具有内部转换 入口动作和出口动作等 下图只包含2个简单状态 状态的分类 2复合状态复合状态是指状态本身包含一到多个子状态机的状态 复合状态中包含的多个子状态之间的关系有两种 一种是并发关系 另一种是互斥关系 如果子状态是并发关系 称子状态为并发子状态 如果子状态是互斥关系 称子状态为顺序子状态 子状态 子状态也可以有初态和终态 状态的分类 1 顺序子状态在任何时刻 当复合状态被激活时 如果复合状态包含的多个子状态中 只能有一个子状态处于活动状态 即多个子状态之间是互斥的 这种子状态称为顺序子状态 复合状态的子状态如果是顺序子状态 在下图中 IC卡电话 使用状态 状态是一个复合状态 包含5个子状态 因为IC电话不能同时处于两个不同的子状态中 所以这些子状态是顺序子状态 状态的分类 2 并发子状态如果复合状态包含两个或者多个并发的子状态机 此时称复合状态的子状态为并发子状态 考察一辆处于 运行 状态的电动车 车处在运行状态时 包含了前进和后退两个不同的子状态 这两个子状态之间是顺序子状态 因为一辆车不可能同时处于前进和后退两种子状态 另一方面 车的运行状态又包括高速行驶状态和低速行驶状态 前进状态可以同时为高速行驶或者低速行驶状态 后退状态时 也可以是高速行驶或者低速行驶状态 即 前进状态或后退状态之一 可以与高速行驶状态或低速行使状态之一同时存在 这些可以同时出现的状态称为并发子状态 状态的分类 3 复合状态表示法复合状态的表示法有两种 1 将子状态机嵌入表示状态的圆角矩形中这种表示法是在表示状态的圆角矩形中加入子状态机的新分栏 2 在圆角矩形中加入加分解指示符这种表示法是在表示状态的圆角矩形中加入分解指示符的新分栏 其中 分解指示符表示子状态机 历史状态 历史状态当状态机通过转换从某种状态转入复合状态时 被嵌套的子状态机一般要从子状态机的初始状态开始执行 但是有些情况下 当离开一个复合状态 然后重新进入复合状态时 并不希望从复合包含的子状态机的初始状态开始执行 而是希望直接进入上次离开复合状态时的最后一个活动子状态 最后一个活动子状态即称为历史状态 每当转换到复合状态的历史状态时 对象的状态便恢复到上次离开该复合状态时的最后一个活动子状态 并执行入口动作 历史状态 一个MP3播放器对象的状态机图 MP3播放器对象的复合状态 活动 状态包含4个嵌套子状态 停止 播放 前进 后退 状态 如果用户按下了 暂停 按钮 活动状态被打断而进入暂停状态 当用户撤销暂停 恢复播放器的活动状态时 MP3播放器对象直接进入历史状态 此时将进入播放器上一次离开活动状态时的子状态 例如当用户在播放状态按下暂停按钮 当恢复播放时 播放器仍进入播放状态 34 当从状态 结账 和 显示购物车 返回子状态 显示索引信息 时 将进入的是离开时的历史状态 也就是说 转到购物车或结账区之后 再回到 浏览目录 的页面时 其中的内容是不变的 仍然保留原来的信息 历史状态 建立状态机图 绘制状态机图的一般步骤是 1 寻找主要的状态 2 寻找外部事件 以便确定状态之间的转换3 详细描述每个状态和转换4 把简单状态机图转换为复合状态机图 建立状态机图例子 对于航班机票预订系统而言 我们把飞机票看作一个整体 我们来看飞机票有哪几种状态 以及有哪些事件触发机票状态的变化 1 确定状态飞机票有以下4种状态 无预订 部分预订 预订完 预订关闭 1 在刚确定飞行计划时 显然时没有任何预订的 并且在顾客预订机票之前都将处于这种 无预订 状态 2 对于订座而言 显然有 部分预订 和 预订完 两种状态 3 当航班快要起飞时 显然要 预订关闭 建立状态机图例子 2 寻找外部事件无论机票处于那种状态 可能有的外部事件有 1 预订 顾客预订机票 2 退订 顾客退订机票 3 关闭 机票管理员关闭订票系统 4 取消航班 飞机调度人员取消飞行计划 3 我们已经知道了机票的主要状态 也知道了改变机票状态变化的外部事件 现在我们分析状态之间的转换 这里指外部转换 即 确定当机票处于这一状态时 哪些外部事件能真正改变机票状态 哪些事件对本状态不起作用 可以采用表格的方式来进行分析 建立状态机图例子 确定状态间的有效转换 在此基础上可以绘制出相应的状态机图 机票预订系统的初步状态机图 事件与状态转换 建立状态机图例子 详细描述每个状态和转换前面已经确定了各个状态之间的外部转换 为了详细描述状态 我们给状态添加内部转换 外部转换时的进入和退出动作 以及相关的活动等 例如 在这个例子中 还存在下一些内部转换和活动 1 机票处在 部分预订 状态时 当发生退订事件时 如果退订数小于预订数 那么状态不变 同样的道理 当发生预订事件时 如果预订数小于空位数 那么状态也是不变的 2 从初态到 无预订 状态时 我们要对机票数 预定数和空座位数进行初始化活动 3 当预订事件和取订事件发生时 都应该更新预订数和空位数的值 但由于座位总数是已知的 因此只要更新预订数就可以了 通过上述分析 可以在状态机图上 为每个状态添加详细的动作或活动 建立状态机图例子 详细描述后的状态机图 建立状态机图例子 把简单状态机图转换为复合状态机图为了便于理解状态机图 我们常把简单状态机图转换为复合状态机图 可以将无预定 部分预订 预订完三个状态归结为 预订 状态 这样就可以采用一个复合状态 即 预订 状态来表示该图 状态机图的应用 状态机图主要应用有两种 一是在对象生命周期内 对一个对象的整个活动状态建模 二是对反应型对象的行为建模 1 对对象的生命周期建模使用状态机最通常的目的是对对象的生命周期建模 即 描述对象在生命周期内 各种状态以及在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论