ch09_状态图及建模.ppt_第1页
ch09_状态图及建模.ppt_第2页
ch09_状态图及建模.ppt_第3页
ch09_状态图及建模.ppt_第4页
ch09_状态图及建模.ppt_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

状态图及建模 状态图 顺序图 活动图 协作图 动态模型的组件 状态图及建模 状态1 状态2 初始状态 如果无效 则重复状态 1 如果有效 则转换状态2 最终状态 状态图 状态图描述了单个事物如何为响应发生的事件而更改状态和生成响应 并通过此方式与其环境进行交互 浸泡 洗涤 漂洗 脱水 Washclothes WashingMachineUser 动态模型 状态图 4 状态图 StateDiagram 状态图是系统分析的一种常见工具 用于描述系统或单独对象的外部可见行为 UML中的状态图主要用于建立类或对象的动态行为模型 表现一个对象所经历的状态序列 引起状态或活动转移的事件 以及因状态或活动的转移而伴随的动作 状态图 实体的生存期比较复杂时 需要状态图对类的所有实例的生命周期建模 大多数面向商业的应用中的类不需要状态图以下情况经常使用状态图动态模型中产生或接收大量信息的类界面类实时系统中的类 状态图 状态图 8 实时系统中的类 闲置状态 拨号状态 通话状态 拿起听筒拨号 线路拨通 挂断电话 电话机 电话线状态图 9 主要内容 1 状态机2 状态3 事件4 转移5 组合状态6 状态图的应用 状态机和状态图建模 时间 2020年2月3日 I引言 在软件系统中有这样一类对象 它们一方面需要处理各种随机发生的事件序列 通过相应的动态行为产生对事件的响应另一方面 其特定时刻的动态行为取决于此对象在早些时刻的行为的结果 I引言 根据当前事件 以及对以前事件的响应的结果决定对当前事件的响应的软件对象的动态行为 称为是事件驱动的 在UML里 最适合于描述这类动态行为的建模手段 就是状态机 状态机用状态 记录以前的动态行为的结果 用转移 迁移 描述软件对象对外来事件的响应以及响应的状态的变化 例如 图1描述一个软件的图形用户界面的动态行为的状态机 它描述的是一个位图观察器的图象浏览工具的动态行为 它可以通过鼠标在窗口上拖动图象 以观察图象的不同局部 图1 状态机 16 9 1状态机 1 UML用状态机对系统的动态特征建模 状态机表示一个模型元素在其生命期间的情况 从该模型元素的开始状态起 响应事件 执行某些动作 引起转移到新状态 在新状态下响应事件 执行动作 引起转移到另一个状态 如此继续 直到终结状态 状态机的组成 状态 转移 事件 活动 动作等 17 9 1状态机 2 状态机用于对一个模型元素建立行为模型 一个对象 一个子系统 整个系统 在UML中状态机用状态图可视化表示 状态图 状态的节点 转移 事件等组成 源状态 目标状态 事件 状态机 在类层次反映状态与状态转化的图 它是一个类的对象的所有可能的生命历程的模型 主要用来捕捉外部事件引起的变化 它将一个对象与其外部世界隔离开来独立考察其行为 不宜用来描述系统的整体运作 如有此要求 可用顺序图 状态机用来描述界面和控制类业务比较合适 19 9 2状态State 状态 对象全部属性的当前值 状态属性 对确定对象的状态有重要意义的属性 状态属性一般具有少量的值 而且这些属性的值的转换是有限的 并且其属性值反映所属对象的特定状态 在UML中 对一个对象 模型元素 的行为建模时 所选择的该对象的生存期中的状态数量是有限的 对象处于每个状态的持续时间也是有限的 当发生某个事件或完成某个动作 都会触发状态的转移 问题 对象任何一个新的属性值组合就是一个新状态 状态空间太大 如 对于 汽车 对象 可能有 型号 车况 使用情况 公里数 汽油剩余量 等属性 不应取 公里数 或 汽油剩余量 作为状态属性 可取 使用情况 作为属性状态 则 汽车 对象的有限个不同状态 跑车 停车 维修 闲置 报废 等 21 9 2 1状态图标 状态图标 状态节点 一个状态可以加入信息 活动activity动作action事件Event效应effectentry exit statement entry actiondo activityevent effect 在某个时间内系统处于某一状态下发生的 do 将要发生的动作 当系统发生特定的迁移 进入或退出特定状态下发生的瞬时行为 为响应事件而执行的行为 22 9 2 2状态行为 1 进入操作 entry 系统进入该状态时要发生的动作 前面加上entry和 不可中断 活动 do 系统处于该状态时要发生的活动 前面加上do和 活动是可中断行为 可以在对象处于该状态时运行完毕 也可以在对象转入另一状态时中断 航班预定entry 将时刻表发布到Internet 航班取消do 为客户寻找其它航班 航班进入预定状态时 系统将时刻表发布到Internet 尽管发布动作在技术上是可以中断的 但其速度很快 用户很难在其发生时取消事物 23 9 2 2状态行为 2 退出操作 exit 系统离开该状态时要发生的动作 前面加上exit和 不可中断 发送事件 在活动 进入和退出操作的动作中可以是对象内部发生的行为 也可能是向另外一个对象发送消息 飞行状态exit 记录登陆时间 状态名entry 目标对象 消息名 消息参数 do 目标对象 消息名 消息参数 exit 目标对象 消息名 消息参数 24 9 2 3初始与终结状态 状态图中定义的状态有 初态 终态 中间状态 组合状态 历史状态等 初始状态 模型元素的初始状况 代表一个状态图的起始点 是一个伪状态 初始状态是转移的初始源 而不能是转移的目标 终结状态 模型元素的最后状态 代表一个状态图的终止点 是一个伪状态 终结状态是转移的最后目标 而不能是转移的初始源 状态图只能有一个初态 而终态可以有多个 也可以没有终态 9 3事件Event 事件是指某时刻发生的事情事件是指已发生并可能引发某种活动的一件事效应 为响应事件而执行的行为活动 由效应触发的实际行为 某个状态的多个活动迁移到达上的活动进入 推出活动do活动 9 3事件Event 不同类型的事件调用事件 表示操作的调用信号事件信号是指从一个对象到另一个对象的单项数据流动信号事件指某时刻发生的事情变化事件满足布尔表达式而引起的事件 对控制条件的连续测试 表示时间段when batterypower lowerlimit 时间事件在绝对时间上或某个时间后发生的事情引起的事情 表示时间点When date 2011 11 1 After 10s defer事件 延迟事件 格式为事件名 defer 延迟事件在本状态中不进行处理 而将其推迟到下一个状态再处理 练习 用状态图描述简单信号灯的变化 转移 transition 是一个状态向另外一个状态的转换 对象处在源状态时 发生一个事件 如果条件满足 则执行相应的动作 对象由源状态转移到目标状态 转移之前对象所处的状态为源状态 转移之后对象所处的状态为目标状态转移用箭头表示 如果没有标注事件 则本转移为自动转移 箭尾连接出发状态 即源状态 箭头连接到达状态 即目标状态 警戒条件 guard 是为了要让转移发生而必须为真的布尔表达式 例如 当你早上出门的时候 事件 如果温度在冰点以下 条件 那你要戴手套 下一状态 表示 出门 冰点以下 9 4状态转移 迁移 的概念 当发生一个转移时 该转移进入的状态为活动状态 它将执行相应的动作 当发生一个转移离开一个状态时 该状态变为非活动状态 当标在迁移箭头上的事件出现时会引起状态的迁移 此时 首先执行引起迁移的事件中的动作 然后迁移到新的状态 执行新状态中的内部动作 包括entry exit do以及用户定义的动作 在执行do或用户定义的动作时 可以被外部的事件 将导致该状态的迁移 中断 但entry动作和exit动作是不能被中断的 并且它们总是要执行完的 源状态 目标状态 事件 条件 动作 转移的类型 1 自身转移 源状态和目标状态为同一状态的转移 首先当前状态下正在执行的do动作全部停止 然后执行退出动作 接着执行引起转移事件的相关动作 紧接着回到该状态 开始执行该状态的入口动作和其他动作 不会改变对象的状态 调用状态的入口和出口动作 自转移 注意内部转移和自转移的区别 自转移会激发状态的入口动作和出口动作 而内部转移不会 自动转移 一个状态根据本状态的有关情况 自动触发进入目标状态 在转移上没有事件 自动转移 条件转移 通过分支判断所确定的转移 条件转移 转移的类型 2 32 9 4 1转移类型 3 复合转移 Compound Transition 由简单转移通过分支判定 分叉组成 判定 在状态图中的一个特定的位置 工作流在此依据条件的取值而发生的分支 判定用空心小菱形表示 33 9 4 1转移类型 4 34 源状态 目标状态4 目标状态3 目标状态2 目标状态1 事件1 条件1 动作1 条件3 动作3 条件4 动作4 条件5 动作6 条件2 动作2 条件6 动作6 多条件链式分支 源状态 目标状态4 目标状态3 目标状态2 目标状态1 事件1 条件1and条件3 动作1 动作3 多条件非链式分支 事件1 条件2and条件6 动作2 动作6 事件1 条件2and条件5 动作2 动作5 事件1 条件1and条件4 动作1 动作4 35 9 4 2转移示例 未分配任务 已分配任务 取消对任务的资源分配 NumAssTasks 1 NumAssTasks 1 NumAssTasks 1 NumAssTasks 0 分配任务给资源 NumAssTasks 1 资源休闲 资源管理员 PRMS的一个资源状态图 分配任务给资源 NumAssTasks 1 内部转移 迁移 状态的内部转移 迁移 是不会引起状态变化的转移 迁移 此转移 迁移 的触发不会导致状态的入口 出口动作的被执行 状态变化的含义 从一个状态变为另一状态图形表示由于内部转移 迁移 不引起状态的转换 因此它的文字标识 textlable 被附加在表示状态的圆角矩形内部 不使用箭头进行图形标识 转移条件 状态转移触发表示当一个特定的事件发生或某些条件满足时 一个源状态下的对象将完成一些特定的动作 称为转移条件 描述状态转态的形式化语法格式如下 事件 条件 动作表达式发送子句事件 指已发生并可能引发某种活动的一件事 条件 由方括号围起的关系或逻辑表达式 动作表达式 一个触发状态迁移时可执行的过程表达式 发送子句 动作的一个特例 说明调用的事件名 操作 是哪个对象的 简单状态转移的表达 简单状态变化指的是同一个对象的两个状态之间的变化 它表示一个对象从一个状态进入了另一个状态 表示当一个条件满足时要发生的一个事件 整个事件可以有参数 这些参数可能用于描述这个变化过程的活动之中 也可能用于下一个状态的初始活动 变化是用一根带有实心箭头的直线来表示的 该直线可以有一个用字符串表示的标识 event signature guard condition action expression send clause其中的事件签名 event signature 描述了一个事件以及它的参数 event name parameter 简单状态变化的表达 发送说明 sendclause 是一类特殊的活动 它的表达格式为 destination expression destination message name argument 式中的目的地表达式 destination expression 是一个表达式 经过计算可演绎为一个或多个具体的接受对象 接受对象的信息名 destination message name 说明了接受对象的信息的名称 发送子句用来说明在两个状态的迁移期间发送的消息所调用的事件是属性哪个对象的 ExampleofaSendClause Exampleright mouse down location locationinwindow object pick object location object highlight 一个变化可能含有多个发送说明 这些活动和发送说明的顺序关系到它们执行的次序 练习 用状态图描述三岔口智能信号灯的变化 练习 PC从开启到关机的GUI状态图 43 9 5组合状态 平面状态图的问题n个属性 状态 连接结构化机制简化状态图的冗余扩展的状态自动收货机状态图嵌套状态 组合状态电话线的状态图 44 9 5 1组合状态 子状态 一个状态内嵌套了若干个状态 则称该状态为组合状态 被嵌套的状态称为子状态 子状态本身仍然可以是组合状态 采用组合状态可以简化复杂行为的建模 45 9 5 1组合状态 子状态 采用组合状态可以简化复杂行为的建模 发货处理 取消 已发货 取消 网上商店处理送货过程的状态图 网上商店处理送货过程的状态图 网上商店处理送货过程的组合状态图 48 9 5 1组合状态 子状态 一个组合状态可以有一个被嵌套的子状态图 它代表了该组合状态的一个活动 子状态图中必须有自己的初始和终结状态 对组合状态的一个入转移代表对其子区域内的初始状态的入转移 对子区域内的终结状态的转移代表包含它的组合状态的相应活动的完成 49 在店内 entry 令store theStore 本店 购入项目 已出租 归还项目 弃置项目 租出项目 已租出 正常 entry 令store null 空值 do 每天检查到期时间 超过到期日子 过期 entry 通知会员 租借店软件系统中的租借项目 录像带 游戏等 状态图 租出项目 练习 PC从开启到关机的GUI状态图 顺序子状态并发子状态历史状态 51 9 5 2顺序子状态 顺序子状态 子状态是一个一个顺序转移的 不是并发存在的 等待用户输入 登记用户输入 显示用户输入 输入 工作 PC的GUI中 工作 的组合状态 52 活动 验卡 拨号 通话 挂断 休闲 继续 维修 结束 维修完成 维修 插卡 取消 IC卡电话机顺序状态示例 53 9 5 3并发子状态 1 并发状态图用于描述一个对象在某个时刻有多个并发的子状态机的情况 并发状态图是这些子状态图的组合 等待用户输入 登记用户输入 显示用户输入 输入 工作 监视系统时钟 更新界面显示 时钟间隔已过 GUI中 工作 的并发组合状态 54 9 5 3并发子状态 2 网上商店系统中 订货 对象的并发状态图 等待 商品检查 办理装货 付款检查 已付款 取消 发货 拒绝 订货 55 9 5 4同步 同步可定义为并发工作流的分叉 Fork 与汇合合 Join 分叉 是一个源状态分为两个或两个以上的目标状态 汇合 是两个以上的源状态连接为一个目标状态 同步在状态图中用一条粗短实线表示 称为同步杆 源状态 目标状态 目标状态1 目标状态2 源状态1 源状态2 56 9 5 4并发子状态 同步 同步状态在并发状态图中一个子状态图中的子状态 常常需要与另一个子状态图中的子状态的行为同步 并发子状态之间的同步状态用含 的小圆表示 伪状态 没有状态变量和状态内活动的状态 放在分隔子状态的虚线上 例 建筑住宅的并发状态图 二个并行子状态图主体工程施工和水电工程施工 砌筑基础 铺设室内管线 安装水电设备 主体结构 水电准备 安装门框 室内装修 竣工验收 57 9 5 5历史状态 1 历史状态 HistoryState 代表上次离开组合状态时的最后一个活动子状态 历史状态用含有字母 H 的小园圈表示 每当转移到组合状态中的历史状态时 对象便恢复上次离开该组合状态时最后一个子状态 并执行入口动作 历史状态是一个伪状态的图形标记 只能作为组合状态中的子状态 不能在顶层状态图中使用 zhufei 带有历史状态指示器的软件安装过程状态图 带有历史指示器的软件安装过程状态图 状态图描述了一个软件的安装过程 一个 建立 迁移触发使系统进入安装软件状态 在软件安装状态中嵌套有两个并发的子状态图 一个是正在运行的操作系统 另一个是运行安装软件的程序 只有在操作系统正在运行的情况下 才能启动安装软件的程序 因此它们是并发执行 当软件安装完毕时 操作系统和安装软件的程序都要重新启动 安装的软件才能开始工作 操作系统运行子状态图的功能很清楚 这里重点讨论安装程序运行子状态图的状态迁移过程 在安装程序运行子状态图中有一个内有字母H的圆圈 表明该子状态图处于历史状态指示器的作用之下 当有迁移触发历史指示器时 应恢复到离开该状态图迁移时的前一个状态 在图所示安装程序运行子状态图中 首先进入 启动安装程序 状态 再自动进入 安装 软件状态 在 安装 软件状态中 操作人员按照安装程序的提示进行软件安装 如果在安装过程中出现 磁盘错误 或 超出内存 错误时 安装程序暂时停止安装进程 在屏幕上提示出错信息并要求操作者进行选择 zhufei 出现 磁盘错误 时 操作者可以选择 再试一次 或 终止安装 迁移 出现 超出内存 错误时 操作者可以选择 继续安装 或 终止安装 迁移 如果选择 终止安装 迁移 则安装程序停止运行 退出安装程序 回到操作系统 如果选择 再试一次 或 继续安装 迁移时 该迁移触发历史指示器 此时 并不是回到安装程序运行子状态图中的起始状态 而是返回到安装程序运行子状态图中发生迁移时的前一个状态 历史状态 即 安装 软件状态 继续进行软件安装 62 9 5 5历史状态 2 停止 播发 选择 暂停 H 恢复 活动 中断 影碟机对象工作的部分状态图 63 9 5 5历史状态 3 等待用户输入 登记用户输入 显示用户输入 输入 工作 PC的GUI中 工作 的历史状态 等待 超时 移动鼠标或键盘 H 64 9 6状态图的应用 状态图为一个对象的生命周期建立模型 状态图可以表示一个对象的历史 引起一个状态向另一个状态转移的事件 以及由于状态的转移而引发的动作 状态图适合描述一个对象穿越多个UseCase的行为 但不适合描述多个对象的协同行为 使用状态图可以对一个对象 类 的行为建模 也可以对一个子系统或整个系统的行为建模 类 数字手表类及其状态机图 状态机图 9 6状态图的应用 状态图的作用帮助分析员 设计人员和开发人员理解对象的行为 单个对象如何表现自己的行为 清楚的了解对象应该作什么而不用猜测 用来描述一个对象在其生命周期中所表现出来的状态和行为 66 9 6 1使用状态图设计类 类的状态图应该尽量简单 对象的行为依赖它的状态 状态越多 则越难理解 很难正确地为这样的类编写代码 最终的实现方法具有多个条件分支 很难测试该类 单元测试 时 要测试对象状态图中的每个细节 如果类的行为以一种非常复杂的方式依赖它的状态 则外部编码很难正确使用该类 一个具有多个状态的类 应该考虑是否有好的设计方法 有时一个具有多个状态的类可以被分割成两个或多个具有简单行为的类 读烧水过程状态图 与状态off相关的转换有两个 其触发事件都是turnOn 只不过其监护条件不同 如果对象收到事件turnOn 那么将判断壶中是否有水 如果 没水 则仍然处于off状态 如果 有水 则转为on状态 并执行 烧水 动作 而与状态on相关的转换也有两个 如果 水开了 就执行turnOff 关掉开关 如果烧坏了 就进入了终态了 状态图建模技术 建模的时候要找出对象所处的状态 触发状态改变的动作 以及对象状态改变时应执行的动作具体步骤如下 1 找出适合用模型描述其行为的类 2 确定对象可能存在的状态 3 确定引起状态转换的事件 4 确定转换进行时对对象执行的相应动作 5 对建模的结果进行相应的精化和细化 图书馆中 图书 的状态图 具体步骤如下 1 找出适合用模型描述其行为的类 2 确定对象可能存在的状态 3 确定引起状态转换的事件 4 确定转换进行时对对象执行的相应动作 5 对建模的结果进行相应的精化和细化 实例1 图书馆中 图书 的状态图 实例2 OS中 进程 的状态图 手机的状态图 手机对象的各种场景1 呼叫对方成功2 呼叫对方不成功3 被呼叫 接听4 被呼叫 未听见铃声5 被呼叫 拒绝接听 手机状态图 一个股票订单的状态图 教学进程 实例3 电梯的状态图 状态图的建模分析步骤 1 首先要确定进行系统控制的对象 可以从前面分析的顺序图中寻找 2 确定对象的起始状态和结束状态 3 在对象的整个生命周期寻找有意义的控制状态 4 寻找状态之间的转换 5 补充引起转换的事件 6 UML建模工具画状态图 7 补充必要的文档 1 以下那些图形元素是对状态的描述 a 超时 b 到达 c 在第一层 2 空闲状态超时后转移到 状态 a 向第一层下降 b 上升状态 c 终态 习题答案 1 c 2 a 练习 具体步骤如下 1 找出适合用模型描述其行为的类 2 确定对象可能存在的状态 3 确定引起状态转换的事件 4 确定转换进行时对对象执行的相应动作 5 对建模的结果进行相应的精化和细化 9 6 2状态图的建立 建立状态图可以参照下列步骤 1 确定状态机的上下文 可以是一个类 use 子系统或整个系统 2 选择初始状态和终结状态 3 发现对象的各种状态 应当仔细找出对问题有意义的对象的状态属性 这些属性具有少量的值且其转换受到限制 状态属性值的组合 结合行为有关的事件和动作 就可以确定具有特定的行为特征的状态 9 6 2状态图的建立 建立状态图可以参照下列步骤 4 确定状态可能发生的转移 分析从一个状态可以转移到哪些状态 对象的哪些行为可引起状态的转移并找出触发状态转移的事件 5 把必要的动作加到状态或转移上 6 利用子状态 分支 历史状态等概念组织和简化一个复杂的状态机 7 分析状态的并发和同步情况 9 6 2状态图的建立 建立状态图可以参照下列步骤 8 绘制状态图 9 确认每一个状态在某个事件组合之下都可达到 确认没有一个死端状态 对象不能从该状态中转移出来 9 6 2状态图的建立 84 项目 活动 任务 资源 PRMS系统的高层项目管理对象类图 1 1 1 1 85 P

温馨提示

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

最新文档

评论

0/150

提交评论