状态图

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

状态图Statechartdiagram状态图Statechartdiagram•为什么需要状态图在一个对象的整个生存期中,它必须能够合理地响应次序变动范围相当大的消息。可能存在着太多的状态,不能用文档穷举;而且,除了要知道可能的状态是什么,我们还需要知道哪些状态是不可能,或者不合法的。所以我们需要使用表示方法更抽象的形式详细说明系统,揭示系统的复杂特性。在UML中,对象的行为规格说明是通过为对象定义状态机来给出的。状态机说明了对象对它在生存期期间可能检测到的事件的响应。在UML中,状态机通常是用一种称为状态图的图来文档化的。状态图Statechartdiagram•状态图范围状态图自始至终在一个单个对象的整个生存期中跟踪该对象,指定该对象能够接收的所有可能的消息序列,以及它对这些消息的响应。•如何界定状态第一,一个对象有若干个可能的状态,并且在任何给定时间必须至少处于这些状态中的一个。第二,对象可以改变这个状态。通常,它在给定时间所处的状态会由它的历史决定。第三,对象在此状态下对至少一个刺激有不同与其他状态的响应。状态图Statechartdiagram•事件(Event)当某些事情发生时对象的状态发生改变,我们称改变对象状态的事情为事件。•延迟事件(deferredevent)是指在该状态下暂不处理,但将推迟到该对象的另一个状态下排队处理的时间列表。•转换(Translation)转换是两个状态间的一种关系,表示对象将在当前状态中执行动作,并在某个特定事件发生或某个特定的条件满足时进入后续状态。在转换激活之前,称对象处于源状态(sourcestate);激活后,就称对象处于目标状态(targetstate)。状态图Statechartdiagram•基本图形系统的状态以圆角矩形表示,其中写着状态的名字。状态转换用连接两个状态的箭头表示。每个这样的箭头必须标注一个事件的名字,如果系统在处于箭头尾的时候接收到该事件,它将转到箭头的头所指向的状态。对象可能在多个不同的状态检测到同样的事件。状态图Statechartdiagram•描述CD播放机的基本模型从每个状态都有三个出发的箭头(不算off),每一个事件都可以被CD播放机检测到。如果事件没有引起状态的改变,那么相应的转换只是在一个状态上形成回路。例如,在CD播放机已经处于正在播放状态,检测到播放事件时发生的转换。这样的转换被称为自转换(self-transition)。状态图Statechartdiagram•组成状态图的元素1、对象所处的状态称为激活状态(activestate)2、能够引起转换激发的事件称为触发器(trigger)3、守卫条件(Guard-Condition)守卫条件是转换的规格说明的一部分,写在标注该转换的事件名字之后,并用方括号括起来。4、动作(Action)说明对象响应检测到的特定事件时做些什么,通过在图中的相关转换上增加动作来表明,动作写在事件名字之后,前面加斜线。转换经常既带有条件,还带有动作。如果是这样,条件紧跟在事件名字之后,动作写在条件的后面。一个状态转移中允许有多个动作,每个动作用斜线分隔开。动作从左至右一个一个执行。状态图Statechartdiagram注意:假定CD播放机正处于打开状态时按下了播放按钮。发生的第一件事情是关闭抽屉,要注意这个时候尽管事实上抽屉是关闭的,但CD播放机并不是在关闭状态,仍然是在打开状态下。评估播放转换上的监护条件的值,看应该激发哪个转换。这阐明了:CD播放机的状态机中的状态不必要和CD播放机的实际状态恰好对应。状态图Statechartdiagram•组成状态图的元素5、再论动作动作被看作是简短的、自包含的一段处理,所花费的完成时间可以忽略。动作的定义特征是它在转换到达新状态之前完成。这隐含着动作不能由对象可能检测到的任何其他事件中断,而必须总是执行完成。在这个意义上,不是原子的动作,或者对象处于给定状态时执行的处理,可以通过活动而不是动作描述。6、入口和出口动作(EntryAction,ExitAction)每当一个状态变为激活状态时,紧接在通向该状态的转换上的动作完成之后就执行入口动作。状态还可以有出口动作,只要离开该状态的转换激发时就会执行。状态图Statechartdiagram注意:自转换被看作状态改变。当一个状态上的自转换激发时,这个状态暂时不再是激活的,然后被再激活。这意味着,当沿着自转换前进时,如果该状态存在入口动作和出口动作,则首先执行出口动作,接着执行入口动作。状态图Statechartdiagram•组成状态图的元素7、活动(activity)当处于正在播放状态时,CD播放机正在做某些事情,即播放CD的当前曲目。要花费时间完成的延续的操作可以表示为状态中的活动(activity)。和动作一样,活动也写在状态之中,前面加上“do”标记。动作和活动之间的区别是这样的,动作被认为是瞬时的,活动不同,是发生在一段延续的时期之内。当状态成为激活状态时,它的入口动作被执行,然后开始它的活动,并且在状态处于激活的整个期间该活动都持续运行。状态图Statechartdiagram•组成状态图的元素8、完成转换(completiontransition)完成转换是没有事件标注的转换。在状态的内部活动正常终止,没有被外部事件中断时,完成转换被触发。例如,CD播放的活动,如果到了曲目结束时就会出现这种情况。将有两个完成转换,一个转换从正在播放状态通向关闭状态,另一个是正在播放状态上的自转换。状态图Statechartdiagram•组成状态图的元素9、内部转换(internaltransition)有时,需要对让对象停在同一状态,但是不触发状态的改变以及入口与出口动作的执行,为这样的事件建模,可以用“内部转换”。内部转换写在状态之中,标注为引起该转换的事件的名字,和自转换不同,内部转换不会引起状态的改变,因此也不会触发入口和出口动作。例如,假定CD播放机有一个“info”按钮,当按下时显示当前曲目剩余的时间,其发生应该不中断正在进行的曲目播放。状态图Statechartdiagram•状态元素总结:一个状态一般包含三个部分。第一部分是状态名字,例如空闲,已付,播放第二部分为可选的状态变量的变量名和变量值。变量是状态图中类的属性。某些情况,比如计数器,需要用到这个。第三部分为可选的活动表,列出有关的事件和活动。常常使用三种标准事件:进入(entry)、退出(exit)、做(do)活动部分的语法为:事件名参数表/动作表达式状态图Statechartdiagram•组成状态图的元素10、组合状态(compositestate)允许一个状态包含若干子状态,这个状态称为组合状态。这些子状态,共享某些特性,这些特性可以更简明地表示为单独一个“超状态”的特性,而将这些子状态组合成一组放入一个状态中。例子:使用子状态的CD播放机状态图Statechartdiagram•组合状态具有下面的特性:第一,如果组合状态是激活的,那么它的子状态中至少有一个必须是激活的。第二,在对象处于组合状态时检测到的事件可以触发从组合状态本身出发的转换,或者从当前激活的它的子状态出发的转换。•子状态完全是正常的状态,并且到达它们的转换能够自由地穿过超状态的边界。•除了普通的状态,组合状态还可以包含初始状态和终止状态。组合状态中的初始状态表示如果到达组合状态的转换终止于组合状态的边界时,该默认子状态即成为激活状态。组合状态中的终止状态表明状态中正在进行的活动已经完成。到达终止状态使得从组合状态出发的完成转换能够激发。•组合状态也可以有自己的入口和出口动作。这些状态被激活的方式与简单状态每当状态变成激活的或不再是激活的时方式完全相同。状态图Statechartdiagram例如,假设按下CD播放机上的暂停按钮会引起播放被中断。当再次按下这个按钮时,从暂停的位置开始继续播放,也就是说,和按下播放按钮的情况不同,曲目不用重新开始。状态图Statechartdiagram•组合状态中的子状态可以分成两种:与子状态(and-substate),或子状态(or-substate)。与子状态:子状态中同一时刻只能有一个是激活着的。或子状态:子状态可能有多个状态同时存在。例如:行进中的汽车状态图Statechartdiagram•组成状态图的元素11、历史状态(HistoryStates)•假如CD播放机的行为如同上页图所描述的,并且用户在CD播放机处于暂停状态时按下了播放按钮,那么这将激发忙碌状态上的标记为“播放”的自转换,因而将退出暂停状态,再次进入忙碌状态。入口动作将导致找到曲目的开头,因为自转换只是通向组合状态的,因此沿着从初始状态出发的转换前进,使机器停留在正在播放状态,播放CD。•但是,假如我们希望,在CD播放机暂停时按下播放按钮重新开始该曲目,但播放机仍然处于暂停状态。就必须组合状态的转换能够“记住”上次组合状态激活时哪个子状态是激活的,并能够自动返回到那个子状态。•历史状态可以达到这个效果。历史状态由圆圈中一个大写字母“H”表示,并且只能出现在组合状态之内。到达历史状态的转换引起组合状态中最近的激活子状态再次成为激活的。状态图Statechartdiagram如果在CD播放机暂停时按下“播放”按钮,将沿忙碌状态上的自转换进行,终止在历史状态。这将引起一个到上个激活子状态的隐含转换,在这个例子中即暂停状态。状态图Statechartdiagram描述CD播放机的行为的完整的状态图状态图Statechartdiagram•状态图之间发送消息状态图Statechartdiagram•一些注意事项:1、避免“黑洞”状态黑洞状态是那种只有变换进来,但没有任何变换发出的状态。这种情况要么由于该状态是一个最终状态,要么就是错过了一个或者多个变换事件。2、避免“奇迹”状态奇迹状态是那种只有变换发出,但是没有任何变换进来的状态。这种情况要么是由于该状态是一个起点,要么就是错过了一个或者多个变换事件。

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功