已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 1 9 1 第3讲状态图 2020 1 9 2 1什么是状态图 状态图描述了一个对象或交互过程在它的生命周期中对一系列外界激励所呈现出的不同状态以及它相应的响应和活动状态机用状态和瞬时过程的变化图形来表示一个对象对外界激励下的响应 状态机一般附着在一个对象或具体的方法上状态图描述了一个状态机 在我们考虑的范围内 它们是同一件事UML中关于状态图的定义和描述主要是采用DavidHare提出的状态图方法并加上了面向对象的含义 2020 1 9 3 2状态图的构成 状态图由一组表示状态和迁移组成 一个简单的编辑器可以被看作为一个有限状态机 它具有状态Empty Waitingforacommand 和Waitingfortext 事件Loadfile Inserttext Insertcharacter Saveandquit引发状态机中的状态的迁移 2020 1 9 4 3什么是状态 状态表示的是一个对象或交互过程中的一个特定阶段 满足了某一个条件 进行某项活动或等待某个事件的发生 状态对应一段有限的时间 状态对应于一组对象属性的值状态由一个带圆角的矩形表示两个特殊状态 初始状态 一个小实心黑圆终止状态 一个套有小实心黑圆得圆 2020 1 9 5 4什么是迁移 一个迁移表示由事件 条件或事件触发后状态的改变状态间的迁移用一根带箭头的直线来表示 2020 1 9 6 5 动作 可以在状态内使用动作表示其行为动作是选取一段输入且产生一组输出并最终可改变系统的状态动作的执行只需要一小段时间且执行不可中断动作可发生在以下3个位置 当一条迁移被选中时当进入一个状态时 entry 当退出一个状态时 exit 2020 1 9 7 2020 1 9 8 6 活动 一个状态可关联到一个活动 该活动的执行与驻留在这一状态上的对象的生命周期一样长动作与活动的区别 动作的执行时间短且不可中断 而一个活动的执行需要一段时间且其执行是可以中断的 其中断的时机就是该状态的一个迁移被时活动使用 do标识 2020 1 9 9 2020 1 9 10 2020 1 9 11 2020 1 9 12 2020 1 9 13 7 内部迁移 内部迁移指一个未离开该状态的迁移 通过事件触发内部迁移 并可出现与这些事件相关联的动作 2020 1 9 14 8 嵌套状态图 嵌套简化了复杂性 可用于取代内部迁移 2020 1 9 15 2020 1 9 16 打电话的状态图 2020 1 9 17 9 建模技巧 1 状态机最经常被用以对一个对象的生命周期中的行为进行建模 特别是在对象具有依赖于状态的行为的时候可以具有状态机的包括类 子系统 用例和接口 确定实现接口的对象必须满足的状态 2020 1 9 18 9 建模技巧 2 在实时系统中 状态机可以用于进程 capsules 和协议 确定实现协议的对象需要满足的状态 并不是所有的对象都需要状态机 如果对象的行为是简单的 比如说它只是简单的存储和获取数据 对象的行为是状态不变的 state invariant 那么其状态机就没有多少意义对对象的生命周期的建模涉及到三件事情 描述对象需要响应的事件对这些事件的响应过去对当前行为的影响对对象的生命周期的建模也涉及到决定对象响应事件的次序 这种响应始于对象的创建时刻 继续直到其销毁 2020 1 9 19 9 建模技巧 3 为了对对象的生命周期进行建模 确定状态机的背景 是类 用例 还是整个系统如果背景是类或者是一个用例 收集邻近的类 包括父类或者通过关联或依赖关系能够到达的类 这些邻居是动作的可能的目标 或者是保安条件中包含的内容如果背景是整个系统 将焦点放在系统的某一个行为上 然后考虑对象在该方面的生命周期 整个系统的生命周期太大了 建立对象的初始和最终状态 如果对于初始和最终状态有前置条件或后置条件 也要定义它们 2020 1 9 20 确定对象能够响应的事件 它们可以从对象的接口中找到 在实时系统中 它们可以从对象的协议中找到从初始状态到最终状态 画出对象的最高层的状态 将这些状态用转移连接起来 这些连接由特定的事件触发确定进入和退出动作通过使用子状态能够扩展和简化状态机 2020 1 9 21 9 建模技巧 4 检查是否状态机中所有的事件触发转换与由对象实现的接口所期望的事件匹配所有的对象接口期望的事件都包含在状态机中在实时系统中 对进程的协议进行同样的检查 确定那些明确希望忽略事件的地方 例如延迟事件 2020 1 9 22 是否状态机中的所有的动作得到了包含的对象的关系 方法和操作支持在状态图中进行跟踪检查 将它与期待的事件和响应的顺序进行比较 搜索那些到达不了的状态和 死锁 状态在调整状态机图时 确保语义不变 2020 1 9 23 9 建模技巧 5 在有选择的情形下 尽量使用状态机的可视化语义而不是写详细的转移说明 例如 不要在一个转移上列出多个信号 然后用文字说明依据不同的信号来管理不同的控制流 代之以单独的转移 由单独的信号触发 2020 1 9 24 9 建模技巧 6 状态命名根据在一个状态中等待或发生的情况来确定 记住 状态不是一个 时间点 它是状态机等待什么事发生的一段时间 例如 waitingForEnd 就比 end 好 timingSomeActivity 就比 timeout 好 不要把状态命名成动作 2020 1 9 25 9 建模技巧 7 一致性命名 给状态机中的每一个状态和转换一个唯一的名字 这将使源代码级的调试更容易小心使用状态变量 控制行为的属性 2020 1 9 26 9 建模技巧 8 如果一个图上5 2状态 考虑使用子状态 一般而言 在通常的情况下十个状态可能没有问题 但是两个状态之间却有四十个转换肯定需要重新考虑 我们需要保证状态图是容易理解的根据触发事件和 或在转换上发生的情况来命名转换 在选择名字时 也需要从可理解性的角度出发 2020 1 9 27 9 建模技巧 9 当你看到一个选择点 你需要问一下是否能够将选择条件的责任分配给另外一个组件 在这种情况下 发送者或者其它活动者进行决策 并将带有决策信息的信号发送给另外一个对象 该信号的名字要带有决策信息 例如信号的名字为isFull和isEmpty 而不应该是value和checkingmessagedata 2020 1 9 28 9 建模技巧 10 选择点的命名 在选择点处的回答问题的命名要采用描述性的方法例如 isThereStillLife 或者 isItTimeToComplain 选择点名字是唯一的 对任何对象 尽力保证选择点的名字是唯一的 同样 保持转换的名字是唯一的 转换的表达不能过长 如果过长 需要考虑用函数 或者将公共的代码片断用函数表示 转换必须读起来象高层的伪代码 例如 如果转换上的代码长于25行 可能就太长了 2020 1 9 29 9 建模技巧 11 动作根据它们的任务命名注意entry和exit动作 很容易发生修改后 忘了修改它们退出动作可以提供安全特性 例如从 heaterOn 到heateroff状态之间的退出动作 该动作就用以确保状态转换 2020 1 9 30 9 建模技巧 12 子状态必须包含两个或以上状态 除非状态机是抽象的并将被包含的元素的子类所修饰选择点必须被用于在动作或转换的条件逻辑的场合 选择点容易被看到 而在代码中表达的条件逻辑是隐藏的 容易被忽略 2020 1 9 31 9 建模技巧 13 避免下列保安条件 如果一个事件能触发多个转换 没有一个控制确定对哪一个保安条件首先进行判断 这样的情况下 结果是不可预测的多个保安条件都可能是真的 但是只有一个转换可以遵循 路径的选择可能是无法预测的保安条件不是可视化的 很难看到它们的存在 2020 1 9 32 9 建模技巧 14 不要使状态机象流程图这种状态可能意味着你对一个可能实际上不存在的抽象情形进行了建模 使用了一个主动类对最好采用被动 或数据 类的行为进行建模采用紧密耦合的数据类和主动类对一个数据类进行建模 例如 数据类被用于传递类型信息 但是主动类包含了绝大部分的数据 这些数据本来应该是与数据类相联系的 2020 1 9 33 这种对状态机错误的应用可以通过以下症状来判断 消息发送给自己只是为了重用代码非常少的状态 很多的选择点在状态机中没有一个循环 这种状态机在过程控制应用或者控制事件序列是有效的 在分析阶段中 它们的出现代表了状态机被弱化成流程图当问题找到后 使主动类变小从而将职责分得更清楚将更多的行为移到与问题主动类相关的数据类中将更多的行为移到主动类功能中构造更富有意义的信号而不是依赖于数据 2020 1 9 34 小组作业 航班从Tentative 暂定 开始 有人制定时刻表 确定是否包含这个航班 如果计划批准 则航班转入Scheduled状态 航班时刻表发布到Internet上离起飞时间小于60天 该航班开始开始售票 进入Open状态可以从航班中增加和删除旅客 但售出最后一张票 航班就满了 如果有人退票 则再次开始售票飞机起飞10分钟前 航班停止售票如果飞机还没有到达 则航班延迟 若延迟超过4小时 则航班取消 若乘客不足50人 则也把航班取消 如果航班取消 则航空公司要为乘客寻找另一航班 如果飞机到达 则其起飞和着陆 完成这个航班 航班从Tentative 暂定 开始 有人制定时刻表 确定是否包含这个航班 如果计划批准 则航班转入Scheduled状态 航班时刻表发布到Internet上
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古成考高升专数学理科真题附答案卷
- 湖北成考专升本高数二真题练习卷
- 福建成考专升本教育理论真题附答案集
- 2026年高考古诗很难的题目及答案
- 2026广西梧州市苍梧第一幼儿园秋季学期教师招聘笔试模拟试题及答案解析
- 2026广西崇左江州区新侨卫生院招聘编外聘用卫生专业技术人员2人考试模拟试题及答案解析
- 江安县公安局2026年第二次公开招聘警务辅助人员(35人)考试备考试题及答案解析
- 恒丰银行2026下半年毕业生招聘考试备考试题及答案解析
- 2026年甘肃省陇南市阶州中学面向部属公费师范毕业生和国家“优师计划”毕业生招聘教师32人笔试模拟试题及答案解析
- 2027中国海洋石油秋季校园招聘(广东有岗)考试模拟试题及答案解析
- 2026山西教师职称考试(教育管理)历年参考题库含答案详解
- 2026年高校教师资格证(高等教育学)考试题库(带答案)
- 2026年四川省拟任县处级领导干部任职资格试题及参考答案
- 一例丘脑出血合并肺部感染雾化吸入治疗个案护理
- 2025年安徽中考英语试卷(真题+答案)
- 2021-2026年高考英语真题分项解读及变式汇编20 阅读理解B篇真题变式题(解析版)
- 百家争鸣说课课件2026-2027学年统编版七年级历史上册
- 2026年安徽省普通高校分类考试招生和对口招生文化素质测试语文试题
- 期刊审读阅评工作制度
- 多台阶覆盖式排土场设计施工方案(含概算)
- 自考学习资料 考前必背英语二10篇范文
评论
0/150
提交评论