版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、状态图与事件驱动系统行为建模,面向对象技术高级教程 第二部分:面向对象分析,1.引入 2.基本状态图 3.状态图中的高级概念 4.UML2.0中的状态图,提纲,1.引入,对事物所处的状态及其变迁的考虑 大多数事物在其生命周期中经历了不同的阶段; 事物在其生存阶段,按次序递进; 在现实世界中,存在着引起事物状态间的递进(或者表明它已经递进)的事变; 对象在一段有限的时间内,位于某个状态中; 事物从一个阶段到另一个阶段的递进是即时的; 当事变/事件发生时,事物可能需要采取一些动作。,事物的一般生命周期形式,事物的一般生命周期形式 Sally Shlaer ,动作标号: 标识触发相应动作表达式的事件
2、, 动作表达式可以使用对象范围内的任何属性和链。 这三个保留的动作标号entry、exit和do,内部转换 除了预定义的三个标号外,在所有的其它情况中,动作标号标识触发相应动作表达式的事件。这些事件触发内部转换,在语义上它们等价于自转换,只是不退出状态和再进入状态,不会导致状态的改变。 事件名(用逗号分隔的参数表)监护条件/ 动作表达式,off/null;,内部转换由 “off”事件激发,状态,延迟事件 延迟事件是指在当前状态下暂不处理,但将推迟到该对象的另一个状态下排队处理的事件。也就是说,在某些建模情况下,可能想要识别某些事件,但延迟对它们的响应,直到以后才执行。,off/,on/,关灯,
3、entry/lamp.off(),off/defer,延迟事件,状态,伪状态 初始状态和终止状态都是伪状态。 伪状态(pseudo state) 正如其字面意义所表明的,伪状态实际上并不是一种状态,只是为了加强状态机图的可视化表示而引入的一些图形符号,都是结点(顶点)型的图形成分。 UML参考手册中认为这些伪状态与一般状态的区别是没有内部转换分栏,不会在该伪状态上停留一定的时间,也不能处理事件,所以不是一般意义上的状态,但在表示法上与一般的状态很相似,故称之为伪状态。,状态,UML中的伪状态,最终状态不是伪状态,UML还定义了另外一个与终止很相似的概念最终状态(final state),用一个
4、被圆圈套起来的实心圆点表示。 最终状态表明复合状态中的一个区域的活动已经完成,如果复合状态有多个区域,那么所有这些区域必须都执行完毕。 最终状态不是伪状态的原因是,最终状态可以在一段时间内保持在该状态下(需要等待其他正交区域的完成),不像伪状态那样进入后直接转换到其后续状态,所以它不是伪状态。 但它也不是一般的状态,因为不允许有从它出发的事件触发转换。,动作,动作是在状态内或在转化时所做的操作,是原子的和即时的,就是说,它在相关状态的抽象层次上是不可间断的。 一个动作可能: 设置或修改本对象的一个属性 产生发送给分析范围之外的事件(例如,操作员、硬件设备或在另一个系统/子系统中的对象) 执行对
5、象的一个操作 向一个对象发送信号 调用另一个对象(包括自身)的一个公共操作(调用拥有状态机的对象或其他可见的对象) 以及创建或撤消另一个对象(包括自身) 返回一个值或值集 动作发生的时机: 在转化中、在状态的入口、在一个对象处于一个状态的整个期间、在状态的出口、在引起状态转化的事件到来时,或在没有引起状态转化的事件到来时。,三种保留的动作标号,entry/进入动作 这个标号标识由相应的动作表达式规定的动作,在进入状态时执行该动作。不能有参数或监护条件。 exit/退出动作 这个标号标识由相应的动作表达式规定的动作,在退出状态时执行该动作。不能有参数或监护条件。,entry/lamp.on();
6、,exit/lamp.off();,do/活动 这个标号标识正在进行的活动(“do 活动”),只要被建模的对象是在当前状态中,或没有完成由动作表达式指定的计算,就执行这个活动(后者的完成可能导致一个完成事件) 活动是在对象处于一个状态中的整个阶段执行的一个动作或动作的集合。活动不是原子的,在执行中可以被事件打断。 引发并行执行的线程直到: 动作完成 通过一个向外的转换离开了该状态 如do/op1(a);op2(b);op3(c),do/while (true) alarm.ring();,所做的活动,实例:打印服务器-输入口令,EnterPassword,entry/password.rese
7、t(),exit/password.test(),digit/handle character,Clear/password.reset(),help/display help,print/defer,do/suppress echo,入口动作,出口动作,内部转换,延迟事件,内部活动,状态转换,转换是两个状态之间的一种关系,表示当一个特定事件出现时,如果满足一定的条件,对象就从第一个状态(源状态)进入第二个状态(目标状态),并执行一定的动作。转换本身也是原子的。,原状态,目标状态,事件特征标记监护条件/动作表达式,描述带有参数的事件: 事件名(由逗号分隔的参数表),是布尔表达式,根据触发事件的
8、参数 和拥有这个状态机的对象的属性和链来 书写这样的布尔表达式。 当事件触发器接收事件而要触发转换时,对它求值; 如果表达式取值为真,则激活转换; 如果为假,则不激活转换,而且如果没有其他 的转换被此事件所触发,则该事件丢失。,是由动作组成的动作序列, 其中包括显式地产生事件的动作,如发送信号或调用操作。 可以根据对象的属性、操作和链以及触发事件的参数, 或在其范围内的其它特征书写动作表达式。 它可以直接作用于拥有状态机的对象, 并间接作用于对该对象是可见的其它对象。,举例,结果序列: printf(“exiting”); printf(“to off”); lamp.off();,print
9、f(“exiting”); printf(“needless”); lamp.off();,守卫条件,转换的条件执行,交汇点(junction)静态条件分支,用于将多种转换连接在一起,用于构造状态之间复杂的转换路径。,(value = 100) ,等待,取得Token,取得Body,Put(c)C /token.append(c); return false,Put(c)C; /body.append(c); return false,Put(c)C=,Put(c)C=; /return true,例3:微波炉,对微波炉的用户有一个控制按钮可以使用。 如果微波炉门关了用户按下按钮,微波炉就加热
10、(结通发热管)1分钟。 如果当微波炉加热的任何时候用户按下按钮,用户就会得到附加的一分钟的加热时间。 在炉门打开的时候使用按钮无效。 在炉内有灯。 在任何加热的时候,灯必须打开。 在炉门打开的任何时间,灯必须开着。 用户可以通过打开炉门停止加热。 如果用户关上门,灯就灭了。 如果加热时间到了(加热到预置时间),它就关上加热管和灯。同时发出警告鸣声告诉用户食物已经好了。,识别事件,开门 关门 按按钮 定时器时间到,识别状态,空闲/门开 空闲/门关 初始烹饪 延长烹饪 烹饪中断 烹饪完成,开门 关门 按按钮 定时器时间到,状态转换表,空闲门开 Entry/开灯,开门,空闲门关 Entry/关灯,初
11、始烹饪 Entry/设置定时器 Entry/开功率管 Entry/开灯,烹饪中断 Entry/关功率管 Entry/清除记时器,延长烹饪 Entry/记时器增1分,烹饪完成 Entry/关灯 Entry/关功率管 Entry/发滴滴声,开门,关门,关门,按按钮,开门,开门,定时器时间到,定时器时间到,按按钮,画状态图,按按钮,例4:自动洗衣机,对洗衣机的用户有一个控制按钮可以使用。 如果洗衣机门关了用户按下按钮,洗衣机就洗衣1小时。 如果当洗衣机就洗衣的任何时候用户按下按钮,洗衣机就会追加1小时洗衣时间。 在洗衣机门打开的时候使用按钮无效。 在洗衣机上有指示灯。 在洗衣的时候,指示灯灯必须打开
12、。 在洗衣机门打开的任何时间,指示灯也必须开着。 用户可以通过打开洗衣机门停止洗衣。 如果用户关上门,指示灯就灭了。 如果洗衣预置时间到了,洗衣机就关上马达和指示灯。同时发出警告鸣声告诉用户衣服已经洗好了。,识别事件,开门 关门 按按钮 定时器时间到,识别状态,空闲/门开 空闲/门关 初始洗衣 延长洗衣 洗衣中断 洗衣完成,开门 关门 按按钮 定时器时间到,事件列表,状态列表,状态转换表,空闲门开 Entry/开指示灯,开门,空闲门关 Entry/关指示灯,初始洗衣 Entry/设置定时器; 开马达; 开指示灯;,洗衣中断 Entry/关马达; 清除记时器;,延长洗衣 Entry/记时器增1周
13、期,洗衣完成 Entry/关灯; 关马达;发滴滴声,开门,关门,关门,按按钮,开门,开门,定时器时间到,定时器时间到,按按钮,画状态图,按按钮,例4:自动洗衣机增强,更真实的自动洗衣机的行为是在洗衣的过程中经历洗涤、漂洗、脱水三个阶段,在这三个阶段用户都可能会按下按钮,延长洗衣周期。用户都可能打开门中断洗衣,并且在关上门的时候,又需要在继续开始洗衣。 为了支持这些新增加的功能,状态机图将变得非常复杂。为了减少复杂性,需要引入组合状态,状态图的实现,实现简单状态图由5个活动组成: 1、实现由对象执行的动作。 2、为了捕获状态,引入枚举数据类型。 3、给类添加状态变量。 4、引入助手函数,以管理状
14、态的进入和退出动作。 5、实现事件处理程序(方法函数),以响应事件。,1、实现由对象执行的动作,开灯、关灯、开炉、关炉、增加时间、清除时间、设置时间和鸣叫 class Microwave protected: void turnOnlight(); void turnOfflight(); void turnOnTube(); void turnOffTube(); void addMinutToTimer(); void clearTimer(); void setTimer(); void soundBeep(); ,2、为了捕获状态,引入枚举数据类型,并给类添加状态变量,定义6个状态:
15、Class Microware enum state InitialCooking, Complete,IdleDoorOpen,IdleDoorClosed, Interrupted, Extended; protected: state myState; protected: voidturnOnlight(); voidturnOfflight(); voidturnOnTube(); voidturnOffTube(); voidaddMinutToTimer(); voidclearTimer(); voidsetTimer(); voidsoundBeep(); ,3、引入助手函数
16、,以管理状态的进入和退出动作,void Microwave:onEntry() switch(myState) case InitiaCooking: setTimer(); turnOnLight(); turnOnTube() break; case Complete: turnOffTube() turnOffLight(); soundBeep(); break; case IdleDoorOpen: turnOnLight(); break;,case IdleDoorClosed: turnOffLight(); break; case interrupted: turnOffLi
17、ght(); clearTimer(); break; case Extended: addMinuteToTimer(); break; default: /此处应该发一个出错信号 ; ,对onExit()方法和onTransition()方法可以写类似的代码。 在本例中,不需要onExit()方法和onTransition()方法,因为没有任何要处理 退出的状态,也没有任何转换动作。,4、实现事件处理程序(方法函数),以响应事件。,微波炉必须响应四个消息:开门、关门、按下开关和计时器时间到。要捕获这四个消息,引入四个新方法: doorOpen() doorClose() buttonPus
18、h() timerTimeout() 。,定义doorOpen,Void MicroWave:doorOpen() switch(myState) Case InitiaCooking: myState= Interrupter; OnEntry(); break; case Complete: myState= idle; OnEntry() break; case IdleDoorOpen: /不应该到达此处,门已经打开了! break;,Case IdleDoorClosed: myState=idleDoorOpen; OnEntry(); break; case interrupte
19、d: /不应该到达此处,门已经打开了! break; case Extended: myState= Interrupted; OnEntry(); break; default: /此处应该发一个出错信号 ; ,3.状态图中的高级概念,组合状态 历史状态 并发状态,组合状态,组合状态是含有子状态的状态,是由两个或多个子状态构成的状态。 状态的嵌套结构包括不相交(或,顺序活动)或并发(与,并发活动)子状态。任何组合状态的子状态也可以是这两种类型的组合状态。 新创建的对象,从最外层的初始伪状态开始,执行其最外层的缺省转换。若对象转换到了最外层的终结状态,则对象的生命期终止。 一个状态内的各区域可
20、以有初始伪状态和终止状态。到封闭状态的转换表示到其初始伪状态的转换。到最终状态的转换表示封闭区域中的活动的完成。在所有并发区域中的活动的完成,表示经由封闭状态的活动的完成,并触发封闭状态上的完成事件。,灯闪烁,闪烁,缺省的到初始伪状态的转换,组合转换,LampFlashing,off/,FlashOff,FlashOn,激发规则,两个或更多的转换可以具有相同的事件激发 最内面的转换优先 不管事件激发转换与否,都将被丢弃,完成转换,由完成事件激发 当组合状态机终止时自动产生,完成转换 (无激发),动作的次序:复杂的例子,initS2,E/actE,动作执行的顺序: exS11 exS1 actE
21、 enS2 initS2 enS21,历史状态,返回到以前访问的等级状态 浅历史状态:保存并重新激货活与历史状态处于同一个嵌套层次上的状态. 深历史状态:保存复合状态中更深的嵌套层次的状态.,Diagnosing,Diagnostic1,Diagnostic2,H*,H,并发状态,对相同实体的多种同时的视角,正交区:多种并发描述的合成,正交区 语义,所有互为正交区的部分检测相同的事件并同时对其响应,正交区 语义,所有互为正交区的部分检测相同的事件并同时对其响应,正交区之间的交互,通常是通过共享的变量或对其他地区的状态改变的感知来实现的,(sane)/,request Grounding/san
22、e,sane : Boolean,flying : Boolean,根据第二十二条军规,疯子才能获准免于飞行,但必须由本人提出申请;同时又规定,凡能意识到飞行有危险而提出免飞申请的,属头脑清醒者,应继续执行飞行任务。,正交区之间的交互,自己理发,为别人理发 entry/为别人理发 := true; Do/理发,自己理发,被理发 entry/自己理发 := true; Do/接受理发,接受理发 : Boolean,理发师悖论 著名的理发师悖论是伯特纳德罗素提出的。一个理发师的招牌上写着:城里所有不自己理发的人都由我给他们理发,我也只给这些人理发。,为别人理发 : Boolean,为别人理发,为别
23、人理发,转换的分支与结合点,用来表示进入或离开正交区,职员,职员,儿童,成人,退休,年龄,经理,通常对正交区的误用,使用正交区对独立的对象建模,甲,乙,建立状态图的策略(UML 用户指南 第二版),设置状态机的语境 找出相临的类(关联与依赖) 建立初始状态和终止状态。 决定这个对象可能响应的事件。 对象的接口(属性与操作) 可能的交互对象与事件 从初态开始到终态,列出这个对象可能处于的顶层状态.用适当的事件触发的转换将其连接起来.并在转换中添加动作.对于内部转换也是如此。 识别各状态的进入或退出的动作 如果需要,从这个对象的高层状态开始,然后考虑各自的可能子状态,用子状态进行扩充 检查状态图中
24、的事件与对象接口中的事件相匹配 检查动作是否由对象的关系方法和操作所支持 跟踪状态图,看是否达到期望的动作顺序,检查状态图,检查在状态机中提到的所有事件是否和该对象接口所期望的事件相匹配。类似地,检查该对象的接口所期望的所有事件,是否都被状态机所处理。最后,找出明显地想忽略的事件的地方。 检查在状态机中提到的所有动作是否被闭合对象的关系和操作所支持。 通过状态机,跟踪检查事件的顺序和它们的响应,尤其要努力地寻找那些未达到的状态和导致状态机停止的状态。 在重新安排状态机后,按所期望的顺序再一次检查,以确保你没有改变该对象的语义。,线卡 1,不可靠的 通信线路,例5: 协议处理器,多线包交换机使用
25、交替位协议(alternating-bit protocol)作为其连接协议,交换机,. . .,AB 发送器,AB 接受器,AB 发送器,AB 接受器,AB 协议,交替位协议(1),一种简单的单向点对点包协议,etc.,AB 协议,交替位协议(2)状态机描述,ackB/ack,data/pktA,ackA/ack,data/pktB,timeout/pktB,timeout/pktA,发送器状态机,AcceptPktA,WaitAckA,AcceptPktB,WaitAckB,接受器状态机,附加的考虑,支持 (控制)基础结构,交换机,AB 接受器,AB 发送器,操作器界面,数据库接口,系统
26、操作器,数据库,AB 线 管理器,控制,一套附加的机制和动作,使系统进入正确的操作状态,并面对不同的预计中和预计不到的干扰能够维持这些状态,对于软件系统包括: 系统/构件启动和关闭 错误检测/报告/发现 系统管理、维护和防备 (在线)软件升级,控制行为的描述,Failed,JustCreated,Hardware Audit,GettingData,ReadyToGo,Analysing Failure,控制自动机,隔离后,相同的控制行为就显得很简单,开发继承,抽象的控制类可以捕获共同的控制行为,发送器,接受器,. . .,使用层次化的状态机,加电,微波炉扩展被动对象,空闲门开 Entry/开
27、灯,开门,空闲门关 Entry/开灯,初始烹饪 Entry/设置定时器 Entry/开功率管 Entry/开灯,烹饪中断 Entry/关功率管 Entry/清除记时器,延长烹饪 Entry/记时器增1分,烹饪完成 Entry/关灯 Entry/关功率管 Entry/发滴滴声,开门,关门,关门,按按钮,开门,开门,定时器时间到,定时器时间到,按按钮,按按钮,无电,开电源开电源灯,关电源关电源灯,被动组合状态图的代码转化,S1,S2,t1/a1,S3,t2/a2,S3.1,S3.2,t3/a3,t4/a4,t5/a5,S4,t4/a6,C1 States1,s2,s3,s4 +t1 +t2 +t4
28、 #a1 #a2 #a6,C2 SubStates3.1,s3.2 +t3 +t4 +t5 #a3 #a4 #a5,Switch (state) case s1: state=s2; a1; ,Switch (state) case s2: state=s3; a1; sub=new C2; ,StateM +t1 +t2 +t3 +t4 +t5,1,1,1,1,main,sub,If (subnull) Sub.t4 else Main.t4;,Switch (state) case s3: state=s4; a6; ,If (substate=s3.1) Substate=s3.2; s
29、4 Else C1:t4;,例6: 电子表,b1 清除记时器;,洗衣完成 Entry/关灯; 关马达;发滴滴声,开门,关门,关门,按按钮,开门,20分钟后,洗涤,脱水 Entry/开马达 ;开排水阀; Do/while true 脱水,1小时后,H*,进水 Entry/开进水阀; Exit/关进水阀;,漂洗 Entry/开马达 Do/while true 搅动 Exit/关马达,排水 Entry/开排水阀;开马达 Do/while true 抽水 Exit/关排水阀;关马达,水满,抽水完成,洗涤次数3,例7: 电梯,根据下面类图,画出电梯的状态图,电梯 当前层数 载重量 最大负重限度 运动(方
30、向) 停止 开门 关门 报警 取消报警,控制器 发送指令(),停止/门开 Entry/开门,停止/门关 Entry/停止 Entry/关门,运行 Entry/运行(方向),报警 Do/while ture 报警,请求运动,请求停止,请求关门,请求开门,载重量 最大负重限度 ,载重量 最大负重限度 ,载重量 =最大负重限度 /取消报警,例8: 电梯控制器,电梯控制器在不同层次的上下按钮及仓内按钮的控制下运动。 建立电梯控制器的状态图。,分析,电梯控制器保有两个队列 外部队列:保存电梯外的所有请求的层数与方向 内部队列:保存电梯内的所有请求的层数,3 上 5 下 6 下 8 上 2 下 1 上 9
31、 下,外部队列,内部队列,3 4 5 6 7 1 2,事件,乘客在电梯外按上下按钮 乘客在电梯内按楼层按钮 到达楼层 到达乘客希望的楼层 到达乘客请求的楼层 ,状态图,乘客在电梯外按上下按钮/将请求放在外部请求队列中 乘客在电梯内按楼层按钮/将请求放在内部请求队列中,上行 Entry/flag:=up,下行 Entry/flag:=down,静止 Entry/flag:=stop,外部队列中有上位请求 或,内部队列中有上位请求,外部队列中有下位请求 或,内部队列中有下位请求,外内部队列中无上位请求,外内部队列中无下位请求,运行,到站 Entry/显示所到的楼层,停止 Entry/停止 Exit
32、/从内外请求队列中 删除相关请求,上升 Entry/上升,下降 Entry/下降,门开 Entry/开门,门关 Entry/关门,到达楼层,到达乘客希望的楼层,到达乘客请求的楼层,H,flag:=up,flag:=down,外队列中存在一节点N,N.层数=层数,且(N.flag=flag 或 flag=stop); 内队列中存在一节点N,N.层数=层数,外部内部队列中有请求,优化状态图,乘客在电梯外按上下按钮/将请求放在外部请求队列中 乘客在电梯内按楼层按钮/将请求放在内部请求队列中,决策,上行 Entry/flag:=up,下行 Entry/flag:=down,静止 Entry/flag:
33、=stop,外部队列中有上位请求 或,内部队列中有上位请求,外部队列中有下位请求 或,内部队列中有下位请求,外内部队列中无上位请求,外内部队列中无下位请求,运行,到站 Entry/显示所到的楼层,停止 Entry/停止 Exit/从内外请求队列中 删除相关请求,上升 Entry/上升,下降 Entry/下降,门开 Entry/开门,门关 Entry/关门,到达楼层,到达乘客希望的楼层,到达乘客请求的楼层,H,flag:=up,flag:=down,外队列中存在一节点N,N.层数=层数,且(N.flag=flag 或 flag=stop); 内队列中存在一节点N,N.层数=层数,外部内部队列中有请求,H,决策完成,电梯控制器状态图的实现,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2.1 声音的产生与传播 课件(共25张内嵌视频)
- 中小学生交通安全教育知识主题班会课件
- 《学龄前儿童营养与健康指南》解读
- 2026年秋季小学高年级立德树人德育实践课件:环境育人
- 房屋工程模拟试题及答案呈现
- 管理规范拔高试题及答案分析
- 300万吨甲醇制烯烃项目可行性研究报告
- 2026年消防基础网格测试题及答案
- 2026年行政助理测试题及答案
- 2026年实务单元测试题及答案
- 固体废物贮存场所建设规范
- 产时电子胎心监护判读和管理:2025年美国妇产科医师学会临床实践指南解读
- 学校总务处管理制度汇编
- 排水管网勘察测绘方案
- 2025-2026学年浙教版(新教材)初中科学八年级第二学期教学计划附进度表
- (完整版)钢箱梁工程监理实施细则
- 山地清山合同范本
- 电视台导演岗位面试题目与解析
- 安全联锁保护系统管理制度
- 幼儿园大班语言《泡泡变成包》课件
- 计算机软件与理论复试面试题及答案
评论
0/150
提交评论