




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019/7/28,1,第3讲 状态图,2019/7/28,2,1 什么是状态图?,状态图描述了一个对象或交互过程在它的生命周期中对一系列外界激励所呈现出的不同状态以及它相应的响应和活动 状态机用状态和瞬时过程的变化图形来表示一个对象对外界激励下的响应,状态机一般附着在一个对象或具体的方法上 状态图描述了一个状态机,在我们考虑的范围内,它们是同一件事 UML中关于状态图的定义和描述主要是采用David Hare提出的状态图方法并加上了面向对象的含义,2019/7/28,3,2 状态图的构成,状态图由一组表示状态和迁移组成。,一个简单的编辑器可以被看作为一个有限状态机,它具有状态Empty, Waiting for a command, 和Waiting for text. 事件Load file, Insert text, Insert character, Save and quit 引发状态机中的状态的迁移,2019/7/28,4,3什么是状态?,状态表示的是一个对象或交互过程中的一个特定阶段:满足了某一个条件,进行某项活动或等待某个事件的发生,状态对应一段有限的时间。状态对应于一组对象属性的值 状态由一个带圆角的矩形表示 两个特殊状态: 初始状态:一个小实心黑圆 终止状态:一个套有小实心黑圆得圆,2019/7/28,5,4 什么是迁移?,一个迁移表示由事件、条件或事件触发后状态的改变 状态间的迁移用一根带箭头的直线来表示。,2019/7/28,6,5.动作,可以在状态内使用动作表示其行为 动作是选取一段输入且产生一组输出并最终可改变系统的状态 动作的执行只需要一小段时间且执行不可中断 动作可发生在以下3个位置: 当一条迁移被选中时 当进入一个状态时(entry) 当退出一个状态时(exit),2019/7/28,7,2019/7/28,8,6.活动,一个状态可关联到一个活动,该活动的执行与驻留在这一状态上的对象的生命周期一样长 动作与活动的区别:动作的执行时间短且不可中断,而一个活动的执行需要一段时间且其执行是可以中断的,其中断的时机就是该状态的一个迁移被时 活动使用“do 标识”,2019/7/28,9,2019/7/28,10,2019/7/28,11,2019/7/28,12,2019/7/28,13,7.内部迁移,内部迁移指一个未离开该状态的迁移。 通过事件触发内部迁移,并可出现与这些事件相关联的动作,2019/7/28,14,8.嵌套状态图,嵌套简化了复杂性,可用于取代内部迁移,2019/7/28,15,2019/7/28,16,打电话的状态图,2019/7/28,17,9. 建模技巧/1,状态机最经常被用以对一个对象的生命周期中的行为进行建模,特别是在对象具有依赖于状态的行为的时候 可以具有状态机的包括类,子系统,用例和接口 (确定实现接口的对象必须满足的状态),2019/7/28,18,9. 建模技巧/2,在实时系统中,状态机可以用于进程(capsules)和协议 (确定实现协议的对象需要满足的状态) 并不是所有的对象都需要状态机. 如果对象的行为是简单的,比如说它只是简单的存储和获取数据,对象的行为是状态不变的(state-invariant ),那么其状态机就没有多少意义 对对象的生命周期的建模涉及到三件事情: 描述对象需要响应的事件 对这些事件的响应 过去对当前行为的影响 对对象的生命周期的建模也涉及到决定对象响应事件的次序,这种响应始于对象的创建时刻,继续直到其销毁,2019/7/28,19,9. 建模技巧/3,为了对对象的生命周期进行建模: 确定状态机的背景, 是类,用例,还是整个系统 如果背景是类或者是一个用例,收集邻近的类,包括父类或者通过关联或依赖关系能够到达的类,这些邻居是动作的可能的目标,或者是保安条件中包含的内容 如果背景是整个系统,将焦点放在系统的某一个行为上,然后考虑对象在该方面的生命周期。整个系统的生命周期太大了。 建立对象的初始和最终状态,如果对于初始和最终状态有前置条件或后置条件,也要定义它们,2019/7/28,20,确定对象能够响应的事件,它们可以从对象的接口中找到,在实时系统中,它们可以从对象的协议中找到 从初始状态到最终状态,画出对象的最高层的状态,将这些状态用转移连接起来,这些连接由特定的事件触发 确定进入和退出动作 通过使用子状态能够扩展和简化状态机,2019/7/28,21,9. 建模技巧/4,检查 是否状态机中所有的事件触发转换与由对象实现的接口所期望的事件匹配 所有的对象接口期望的事件都包含在状态机中 在实时系统中,对进程的协议进行同样的检查。 确定那些明确希望忽略事件的地方 (例如延迟事件),2019/7/28,22,是否状态机中的所有的动作得到了包含的对象的关系、方法和操作支持 在状态图中进行跟踪检查,将它与期待的事件和响应的顺序进行比较,搜索那些到达不了的状态和“死锁”状态 在调整状态机图时,确保语义不变,2019/7/28,23,9. 建模技巧/5,在有选择的情形下,尽量使用状态机的可视化语义而不是写详细的转移说明。例如,不要在一个转移上列出多个信号,然后用文字说明依据不同的信号来管理不同的控制流;代之以单独的转移,由单独的信号触发。,2019/7/28,24,9. 建模技巧/6,状态命名根据在一个状态中等待或发生的情况来确定。记住,状态不是一个“时间点”,它是状态机等待什么事发生的一段时间。例如 waitingForEnd 就比end好; timingSomeActivity 就比timeout好. 不要把状态命名成动作,2019/7/28,25,9. 建模技巧/7,一致性命名。给状态机中的每一个状态和转换一个唯一的名字;这将使源代码级的调试更容易 小心使用状态变量 (控制行为的属性),2019/7/28,26,9. 建模技巧/8,如果一个图上5 2状态,考虑使用子状态。 一般而言,在通常的情况下十个状态可能没有问题,但是两个状态之间却有四十个转换肯定需要重新考虑。我们需要保证状态图是容易理解的 根据触发事件和/或在转换上发生的情况来命名转换。在选择名字时,也需要从可理解性的角度出发,2019/7/28,27,9. 建模技巧/9,当你看到一个选择点,你需要问一下是否能够将选择条件的责任分配给另外一个组件。在这种情况下,发送者或者其它活动者进行决策,并将带有决策信息的信号发送给另外一个对象,该信号的名字要带有决策信息,例如信号的名字为isFull和isEmpty,而不应该是 value 和checking message data),2019/7/28,28,9. 建模技巧/10,选择点的命名:在选择点处的回答问题的命名要采用描述性的方法例如,isThereStillLife或者isItTimeToComplain 选择点名字是唯一的:对任何对象,尽力保证选择点的名字是唯一的 (同样,保持转换的名字是唯一的) 转换的表达不能过长:如果过长,需要考虑用函数,或者将公共的代码片断用函数表示,转换必须读起来象高层的伪代码,例如,如果转换上的代码长于25行,可能就太长了,2019/7/28,29,9. 建模技巧/11,动作根据它们的任务命名 注意entry和exit动作,很容易发生修改后,忘了修改它们 退出动作可以提供安全特性,例如从heaterOn到heater off状态之间的退出动作,该动作就用以确保状态转换,2019/7/28,30,9. 建模技巧/12,子状态必须包含两个或以上状态,除非状态机是抽象的并将被包含的元素的子类所修饰 选择点必须被用于在动作或转换的条件逻辑的场合。选择点容易被看到,而在代码中表达的条件逻辑是隐藏的,容易被忽略,2019/7/28,31,9. 建模技巧/13,避免下列保安条件: 如果一个事件能触发多个转换,没有一个控制确定对哪一个保安条件首先进行判断,这样的情况下,结果是不可预测的 多个保安条件都可能是真的,但是只有一个转换可以遵循,路径的选择可能是无法预测的 保安条件不是可视化的,很难看到它们的存在,2019/7/28,32,9. 建模技巧/14,不要使状态机象流程图 这种状态可能意味着你对一个可能实际上不存在的抽象情形进行了建模: 使用了一个主动类对最好采用被动(或数据)类的行为进行建模 采用紧密耦合的数据类和主动类对一个数据类进行建模 (例如,数据类被用于传递类型信息,但是主动类包含了绝大部分的数据,这些数据本来应该是与数据类相联系的).,2019/7/28,33,这种对状态机错误的应用可以通过以下症状来判断: 消息发送给自己只是为了重用代码 非常少的状态,很多的选择点 在状态机中没有一个循环,这种状态机在过程控制应用或者控制事件序列是有效的;在分析阶段中,它们的出现代表了状态机被弱化成流程图 当问题找到后: 使主动类变小从而将职责分得更清楚 将更多的行为移到与问题主动类相关的数据类中 将更多的行为移到主动类功能中 构造更富有意义的信号而不是依赖于数据,2019/7/28,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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版水电水利工程环境保护与环境影响评价合同
- 2025年度足球场租赁合同细则
- 2025年发电机发电量统计与分析服务合同
- 2025年多保证人共同履行的知识产权转让保证合同责任
- 2025版注塑机租赁服务合同样本
- 2025版土地资产评估与价值分析服务合同
- 2025别墅装修泥瓦工程劳务分包施工合同(含合同履行期限)
- 2025版围墙工程设计与施工监理合同大全
- 2025代理记账与财务风险预警服务委托合同
- 2025版城市污水处理厂建设与运营管理合同
- 水箱拆除专项施工方案
- YY/T 1851-2022用于增材制造的医用纯钽粉末
- GB/T 20858-2007玻璃容器用重量法测定容量试验方法
- 纪委案件审理课件教材
- 生活中的会计课件
- 辽宁大学学生手册
- 湘美版美术一年级上册全册课件
- 酒水购销合同范本(3篇)
- 师说一等奖优秀课件师说优质课一等奖
- 学习罗阳青年队故事PPT在急难险重任务中携手拼搏奉献PPT课件(带内容)
- 小学生打扫卫生值日表word模板
评论
0/150
提交评论