面向对象分析状态

上传人:san****019 文档编号:70257047 上传时间:2019-01-16 格式:PPT 页数:31 大小:304.51KB
返回 下载 相关 举报
面向对象分析状态_第1页
第1页 / 共31页
面向对象分析状态_第2页
第2页 / 共31页
面向对象分析状态_第3页
第3页 / 共31页
面向对象分析状态_第4页
第4页 / 共31页
面向对象分析状态_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《面向对象分析状态》由会员分享,可在线阅读,更多相关《面向对象分析状态(31页珍藏版)》请在金锄头文库上搜索。

1、第六章 状态图 人的生命 货物运输定单 可能需要建模的事物:系统、窗口、控制者、事务、设备、自身类型或角色发生变化的事物。 对事物所处的状态及其变迁的考虑: 大多数事物在其生命周期中经历了不同的状态; 在特定的时间,一个事物精确地位于一个状态; 在现实世界存在着引起事物的状态发生变化的事件; 事物在其状态间按次序转化; 事物从一个状态到另一个状态的转化通常是即时的。 当事件发生时,事物可能需要采取一些动作。,事物的一般生命周期形式 目前主要有两种对生命周期进行建模的形式: 周期性生命周期 如:飞机、微波炉 出生-死亡生命周期 把状态图赋予一个对象 一个对象的状态: 创建、状态变化序列、撤消 只

2、是要对这样的事物进行状态考察:它有明确的生命期阶段(状态),且需要通过状态分析对其复杂性进行深刻地认识。 在实际系统中,无法建立全系统的状态图。 为了可视化、详述、构造和文档化一个单独对象的动态特性,状态图可以被附加到类(把一个状态模型作为定义一个类的一部分)、用况或整个系统上。,什么是对象的状态? 关于对象状态的不同解释 状态 = 属性 只是一个别名,没有更多的意义 状态 = 属性值 没错,但没有必要辨别这么多状态,对象技术词典的另一种定义: 对象或者类的整体行为(例如响应消息)的某些规则所能适应的(对象或类的)状况、情况、条件、形式或生存周期阶段。 按某种规定,按对象的属性值划分等价类,例

3、1:一个容量为1000的栈,需要区分几种状态*?,在此例中 ,每一种状态是一组使对象呈现共同行为规则的属性值组合。,例2:为“设备”对象设立一个属性,名为“状态” 属性值:关闭、待命、运行、故障等。 在这里,“状态”是一个专门设置的属性,它的值反映了实际事物的状态。,状态图示例,53 1 概念与表示法 1、事件 从一般意义上讲,事件是指在时间和空间上可以定位并具有实际意义、值得注意的所发生的事情。 在OO中,事件是对一个可观察的事情的规格说明,这种事情的发生可以引发状态的转换。 事件可以分为多种: 1)信号事件 一个对象对一个信号实例(在不引起混淆的情况下,以下简称信号)的接收,导致一个信号事

4、件。 可在一个类的符号中加一个附件的信号栏,列出其能接收的信号。 把这样的事件的特征标记放由它所触发的转换上。 信号可以作为状态机中的状态转换上的动作被发送,或者作为交互中的一个消息被发送。,2) 调用事件 对操作的调用的接收(这样的操作由接收事件的对象实现) 调用事件一般来说是同步的 3)时间事件 在指定事件(经常是当前状态的入口)后,经过了一定的时间或到了指定日期/时间,导致一个时间事件。时间经历事件能用后跟有计算时间量的表达式的关键词“after”表示,比如“after (5 秒)”或者”after (从状态A退出后经历了10秒)”。如果没指明时间起始点,那么从进入当前状态开始计时。使用

5、关键字at 来指出在某个绝对时间点上发生的时间事件。例如,时间事件at(1 Jan 2005, 12:00 UT)指出该事件发生在格林尼治时间2005 年1 月1 日的中午12点。,4)改变事件(条件变为真事件) 用布尔表达式描述的指派条件变为真,就导致了一个改变事件。无论表达式的值何时由假变成真,事件都发生。与改变事件关联的布尔表达式的值变成真时事件发生一次,即使之后布尔表达式的值变为假,产生的事件仍将保持,直到它被处理为止。 用后有跟布尔表达式的关键词“when”表示变为真的条件,比如 when (altitude 1000) 可以把其看作是连续测试条件,直到它为真。,通常事件后面还跟有一

6、个监护条件(布尔表达式)。当事件发生后,还要检验其监护条件,如果监护条件为假,则该事件不触发转换。 可以按如下的格式定义事件: 事件名 (用逗号分隔的参数列表) 参数的格式如下: 参数名 : 类型表达式 参数值由监护条件和动作表达式使用.,2、状态 状态是一个对象的生命期的一个阶段,在该阶段中该对象要满足一些特定的条件、执行特定的活动或等待某个(些)事件。 把状态表示成四角均为圆角的矩形(看下图),并把状态的名称放在其中。 可以有选择地把表示状态的矩形划分成由水平线相互分隔的多个分栏: a) 名称分栏 可以在该分栏中放置状态名。没有名称的状态是匿名的,但同一张图中的匿名状态是各不相同的。 b)

7、 内部转换分栏 用该分栏给出对象在这个状态中所执行的内部动作或活动的列表。各表项的表示法的基本格式为: 事件名(用逗号分隔的参数表)监护条件 / 动作表达式 用户可以自己对对事件进行命名,只是entry、exit和do这三个保留字外,因为UML已经为它们规定了特定含义,动作表达式是由一些动作组成的动作序列,有关动作的具体内容请看本节的第3部分。 监护条件是布尔表达式,根据触发事件的参数和拥有这个状态机的对象的属性和链来书写这样的布尔表达式。当事件出现要触发转换时,对它求值;如果表达式取值为真,则触发转换;如果为假,则不触发转换,而且如果没有其他的转换被此事件所触发,则该事件丢失。在一个状态中,

8、如果监护条件不同,相同的事件名可以出现多次,当该事件发生时,根据监护条件决定触发那个转换。事件参数和监护条件是可选的。如果事件有参数,可以把参数用在监护条件或动作表达式中。 内部转换分栏中的事件的发生不会导致状态的改变,也就是说,即使发生了事件且执行了相应的动作,对象仍然处于原来的状态,故把这样的事件触发的转换称为内部转换。,延迟事件 延迟事件是指在当前状态下暂不处理,但将推迟到该对象的另一个状态下排队处理的事件。也就是说,在某些建模情况下,可能想要识别某些事件,但延迟对它们的响应,直到以后才执行。 用特殊的动作defer表明一个事件被延迟: 事件/defer 延迟事件形成了一个事件列表,这些

9、事件在状态中发生,但被延迟,直到激活了一个使这些列表事件不被延迟的状态,此时这些事件才会发生,并触发转换,就像它们刚刚发生一样。如果一个事件发生,并被列为延迟事件,则进入队列。一旦对象进入一个不延迟这些事件的状态,就按某种算法,从队列中除掉这些事件,这些事件开始发挥作用。有可能在某时刻要撤消延迟事件。 伪状态 初始状态是状态图的缺省开始状态,终止状态是状态图执行已经毕后的结束状态。,3、动作 动作是在状态内或在状态转化时所执行的操作,是原子的和即时的。动作是原子的,是指在与状态相关的抽象层次上,动作是不可间断的;动作时即时的,是指动作执行的时间是可忽略不计的。 动作可为: 设置或修改本对象的属

10、性操作; 向一个对象发送信号; 调用另一个对象的一个可见性为公共操作; 创建或撤消对象; 返回一个值或值集; 在转换中、在状态的入口、在一个对象处于一个状态的整个期间或在状态的出口,都是执行动作的时机。,出于特殊的目的,保留了一些动作标号,它们不能用作事件名。如下的3个是保留的动作标号及其含义: 1) entry/进入动作表达式 这个标号标识由相应的动作表达式规定的动作,在进入状态时首先执行该动作。不能有参数或监护条件。 2)exit/退出动作表达式 这个标号标识由相应的动作表达式规定的动作,在退出状态时最后执行该动作。不能有参数或监护条件。 3)do/活动 这个标号标识正在进行的活动(“do

11、 活动”)。活动是一个动作表达式,它在执行中可以被事件中断。 “do”这个关键字标识正在进行的活动(称为do 活动)。do活动在状态的入口动作执行后开始执行,并且它与其他的动作或活动是并发的。只要被建模的对象是在当前的状态中,就执行这个活动,直到对象离开该状态为止。也有可能do活动执行完毕后对象仍处于当前状态,这时会导致一个完成事件,如果存在一条外出的完成转移,就退出当前状态。如果在活动没未完成之前,由于外出转换的激发而导致了状态的退出,就中断活动。,活动 活动是在对象处于一个状态中的整个阶段执行的一个动作或动作的集合。 活动不是原子的,在执行中可以被事件打断。 用特殊的内部转换do来说明执行

12、了进入动作后在一个状态内部所做的工作。 一个do转换的活动可能命名另一个状态机(子状态)。 也可以说明一个动作序列如do/op1(a);op2(b);op3(c) 。 动作是从不中断的,但动作序列是会中断的。也即,在每两个动作之间(由分号分开),由于事件的出现,导致一个离开此状态的转换。,EnterPassword,entry/password.reset() exit/password.test() digit/handle character Clear/password.reset() help/display help print/defer do/suppress echo,内部转换

13、,延迟事件,内部活动,入口和出口动作,4、状态转换 转换是两个状态之间的一种关系,表示当一个特定事件出现时,如果满足一定的条件,对象就从第一个状态(源状态)进入第二个状态(目标状态),并执行一定的动作。转换本身也是原子的。,源状态,目标状态,事件名(用逗号分隔的参数表)监护条件 /动作表达式,事件可能有参数,这样的参数可由转换中的监护条件和动作使用,也可由与源状态和目标状态相关的退出和进入动作分别使用。,对于这样的状态的改变,把转换称为“点火”。 如果转换点火,就执行动作表达式(如果有的话)。 每次处理一个事件。 如果事件没有触发任何转换,就丢弃它。 如果在同一个顺序区域(不是在不同的并发区域

14、)里触发了多于1个转换,就只对一个点火。 如果这些相冲突的转换具有相同的优先权,就随机地选择和触发一个。 转换示例: right-mouse-down(location)location in window/object:= pick-object(location); 触发到自身的转换,要先退出当前状态,再进入该状态,这样要执行退出动作和进入动作。 触发内部转换,不需要退出当前状态。,5、状态图 一个状态图描述一个对象在其生命期内响应事件所经历的状态序列,以及对这些事件所做出的反应。 通常用状态图描述类的行为,也可以用它描述其它模型实体(如用况、参与者、子系统)的行为。,例题1 下图描述了一

15、个负责监视某些传感器的控制器的状态机。,clearing,例题2 绘制一个状态图,它能分析如下格式的字符流: 字母串;如deFCAccount;,Waiting,GettingToken,GettingBody,Put(c)c/=/return false,Put(c)c=“,Put(c)c/=/ token.append(c);return false,Put(c)c/=;/ body.append(c);return false,Put(c)c=;/return true,Put(c)c=“,开门,关门,开门,关门,按按纽,开门,按按纽,开门,按按纽,定时器时间到,定时器时间到,例题3 为

16、简易微波炉(只有一个按钮)建模,6、组合状态 上面讲述的状态图中的状态都是简单状态。例如,本节开始的图中的状态 Active是一个组合状态。其中DialTone和Timeout等状态均为Active的子状态。 (1)语义 组合状态是由两个或多个子状态构成的状态,其中的子状态是顺序的或并发的,而且子状态还可以是组合状态。 新创建的对象,从最外层的初始伪状态开始,执行其最外层的缺省转换。若对象转换到了最外层的终结状态,则对象的生命期终止。 一个状态内的各区域可以有初始伪状态和终止状态。到封闭状态的转换表示到其初始伪状态的转换。到最终状态的转换表示封闭区域中的活动的完成。在所有并发区域中的活动的完成,表示经由封闭状态的活动的完成,并触发封闭状态上的完成事件。,(2)表示法 把组合状态展开是为了表示它的内部状态机结构。除了(可选的)名称和内部转换分栏外,状态可以包含

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号