14.状态机和状态机图

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

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

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

资源描述

1第十六章状态机和状态机图1、引言在软件系统中有这样一类对象,它们一方面需要处理各种随机发生的事件序列通过相应的动态行为产生对事件的响应另一方面,其特定时刻的动态行为取决于此对象在早些时刻的行为的结果。2例如,当软件系统的用户界面处理程序在和用户交互时,就是这种情形。如果用户界面是基于命令行的,那么,合法的命令必须满足特定的语法,命令行处理程序里的语法分析程序的任务分析从键盘传入的字符流,从中提取出合法的命令的语法成分区分命令行的命令部分和命令参数部分,\以决定进行何种操作。因此,对于字符流里的同样的子序列,应根据在其之前输入的字符序列所属的语法成分,决定此字符序列的正确的语法成分(如:123在某各命令行里可被解释为数字,而在另一个命令行里则可能被解释为名字。)。3基于图形界面的操作系统,鼠标操作代替了落后的命令行方式来完成人机交互操作,这时基本的用户操作在软件系统内被翻译为有限的几种鼠标事件。不同鼠标事件序列,对应了不同的操作意图。这也是当前行为取决于以前行为的结果的例子。4根据当前事件,以及对以前事件的响应的结果决定对当前事件的响应的软件对象的动态行为,称为是事件驱动的。在UML里,最适合于描述这类动态行为的建模手段,就是状态机。状态机用状态记录以前的动态行为的结果,用变迁描述软件对象对外来事件的响应以及响应的状态的变化。5例如:图16.1描述一个软件的图形用户界面的动态行为的状态机。它描述的是一个位图观察器的图象浏览工具的动态行为。它可以通过鼠标在窗口上拖动图象,以观察图象的不同局部。6位图浏览工具将接受三类鼠标消息鼠标左键按下鼠标移动鼠标左键释放。当使用者选中了位图浏览工具后此工具的状态机进入待命状态此状态在状态机里是一个名字为'waitingmousemessage的圆角矩形。在待命状态下,如果在图形区域内按下了鼠标左键表示位图浏览工具开始工作,这时,位图浏览状态机进入活跃状态(名字为active的圆角矩形)。7在活跃状态下,如果鼠标左键被释放,则状态机的状态立即恢复到待命状态;如果在活跃状态下发生了鼠标移动事件,则位图被拖动,位图在窗口里的位置被更新,并被重新显示。如果在待命状态下发生了鼠标移动事件,则此事件被忽略。8在UML中,除了状态机之外,还有一种为动态行为建模的手段,这就是交互(第四章)。交互强调的是对象之间的互相协作,通过软件对象的交互实现软件系统的设计功能。状态机则强调的是对象本身对对象外部发生的事件的响应及伴随的状态的变化。对状态机而言,它所能描述的对象是广义的。状态机描述的对象可以是类的实例,可以是用例的实例,甚至可以是非软件对象。对于任何一个对象,如果此对象的动态行为具有事件驱动的特性,就适合于用状态机来建模。9例如,对于非软件对象,可以用状态图描述业务部门的工作规则;对于软件对象,用状态图描述接口的调用的逻辑规则和用户对软件系统的使用过程,也可以用状态图描述单个对象的动态行为的运行逻辑。102、状态机的定义及构成状态机用于为具有事件驱动的特征的动态行为进行建模。事件驱动的动态行为的特点对象当前时刻的动态行为将取决于当前的事件输入和此对象在以前时刻的动态行为产生的结果。为描述这类动态行为,状态机内部设置了状态以记录以前的行为的结果,设置了变迁以描述状态机对外部事件的响应及相应的状态变化。在UML里,设有相应的图形符号以描述这些建模元素。11状态是软件对象在其生存期内满足特定条件的存在,在此条件下,对象能执行特定的动作、或等待事件的发生。状态被图形化表示为一个圆角矩形(图16.3)。除了用圆角矩形表示的状态外,还有两种特殊的状态,分别用一个实心圆形和内有一个实心圆的圆环表示。用实心圆形表示的称为初始状态。初始状态是状态机的所在对象被创建时刻所处的状态。状态机所在对象在创建后状态机产生的第一个变迁将从初始状态出发。用带实心圆的圆环表示的状态称为状态机的终止状态(finalstate)。状态机处于终止状态表明此状态机的执行已经完成。状态机处于终止状态后,不会发生任何直接转入此状态机的其它状态的变迁。12变迁被定义为软件对象的两个状态之间的关系,表明在指定的事件发生后,在特定的条件下,对象执行指定的动作,并进入另一个状态。变迁被图形化表示为连接两个状态的箭头,箭头起始端是变迁发生前的状态,箭头所指的状态是变迁完成后的状态。如果对象的状态发生了沿变迁箭头所指的方向的变化,那么此变迁被称为被激发(fire)。变迁的激发,可以和特定的事件联系起来,这样的事件被称为触发事件(eventtrigger)。只有当触发事件发生了,此变迁才有可能被激发。当变迁被激发后,状态机所在的对象将执行某种动作作为对此事件的响应。13在UML里,事件被定义为是占据特定时间和空间的、且具有特定意义的刺激的发生。动作(action)被定义为是一个元计算的执行,它可导致模型状态的变化和值的返回。事件的发生将导致变迁被激发,变迁的激发导致和变迁相连的动作被执行,动作执行完毕后,对象的状态随之发生变化。14状态机的定义在UML里,状态机用于描述对象的行为,它为对象指定了的一组状态,并在对象的生存期内为此对象指定了其在响应外界的事件时应执行的动作及状态变化。在UML的状态机模型里,对象的概念是广义的,状态机所在的对象,可以是软件对象,也可以是非软件对象。如果是软件对象,它也不局限于类的实例。状态机所在的对象还可以是用例的实例;可以是协同的实例;也可以是部件的实例。153、变迁的构成变迁用来描述状态机所在的对象所处的状态的变换。变迁由事件触发,变迁的激发还将伴随着特定的动作的执行。在UML里,变迁由五个部分构成,它们是:起始状态目标状态触发事件(eventtrigger)触发条件(guardecondition)变迁动作。这五个组成部分描述了变迁的各方面的特征。16(1)、起始状态和目标状态变迁描述的是状态机所在的对象的状态的变化。变迁的被激发使得对象从一个状态转换为另一个状态。变迁被激发之前对象所处的状态就是变迁的起始状态。因此,起始状态也是被变迁影响的状态。变迁完成之后,对象的状态发生了变化,这时对象所处的状态就是变迁的目标状态。目标状态是变迁完成之后被激活的状态。在绘制状态机时,变迁的起始状态位于表示变迁的箭头的起始位置;变迁的目标状态是表示变迁的箭头所指向的那个状态。17一个变迁可以有多个起始状态,这时,代表状态机所在对象中的多个控制流在变迁发生的时刻汇合为一个控制流。一个变迁也可以有多个目标状态,它表示状态机所在对象在变迁被激发的时刻其中的一个控制流被分解为多个控制流。在UML中,变迁的多起始状态和多终止状态的情形通常通过活动图表现。18(2)、触发事件状态机描述了对象的具有事件驱动特征的动态行为。在此类动态行为中,对象的动作的执行状态的改变都是以特定事件的发生为前提的。变迁的触发事件描述的就是引发状态机所在对象的动作的事件。触发事件是状态机在某变迁的起始状态状态下能接受的一个事件,此事件的发生使得变迁的激发成为可能。19(3)、触发条件触发事件的发生只是变迁被激发的前提。要使变迁被激发状态机所在对象必须还满足一个条件,这条件就是触发条件。触发条件是一个布尔表达式,只有当变迁的触发事件发生后,此表达式才被求值,并且在其值为真的时候,变迁才被激发。20(4)、变迁动作(action)事件的发生不仅仅导致状态机所在对象的状态的变化,它还要导致对象执行特定的动作,这动作称为变迁动作。变迁动作是伴随着变迁的激发被执行的一个元计算。元计算是软件对象能执行的计算的最小单元。它将直接作用于状态机所在的对象,间接地作用于和此对象有连接关系的对象。21(5)、触发事件、触发条件、变迁动作的图形化表示在绘制变迁时,变迁的触发事件、触发条件和变迁动作被表达成一个字符串被放置在表示变迁的箭头上。此字符串又被称为变迁的文字标记(textlabel)。变迁的文字标记的格式如下:触发事件[触发条件]/变迁动作在变迁的文字标记中,首先出现的是触发事件,然后是由方括号括起来的触发条件,它是一个布尔表达式,触发条件后面是一个用斜杠(/)表示的分隔符,分隔符后面是表现变迁动作的字符串。变迁的文字标记的三个部分以及文字标记本身都是可以省略的。如果其中的触发事件被省略,则此变迁被称为是无触发变迁(triggerlesstransition)。无触发变迁又被称为是完成变迁(completiontransition),因为此变迁在其起始状态被激活且其入口动作被执行后将被自动触发。224、状态的构成状态是状态机的重要组成部分,它记录了状态机所在对象的动态行为的执行所产生的有意义的结果。所谓有意义,指的是此结果将影响对象对后续事件的响应。例如:在图16.1所示的位图浏览工具,如果对象处于活跃状态,就意味着鼠标左键正处于被按下的状态,位图当前正在被拖动。在此状态下,鼠标的移动事件、鼠标左键的释放事件都是有意义的,它们的发生都会产生合法的响应。23而在待命状态,这同样两个事件都无意义,它们的发生都被忽略。在待命状态,只有鼠标左键被按下才是有意义的,它会使位图浏览工具进入活跃状态,并产生使用者期望的响应(位图被拖动)。24一个完整的状态包括五个组成部分,它们是:名字人口/出口动作内部变迁延迟事件状态活动(图16.3)。25(1)、名字状态名字由一个字符串构成,用以标识不同的状态。状态名字可以省略,这时,此状态就是匿名状态。状态名被放置在状态图符的顶部。26(2)、入口/出口动作一个状态可以有多个转入变迁和多个转出变迁。在每次状态被转入或转出时,有可能希望状态机所在的对象都执行同样的操作。27例如:许多图形/图象软件都有多个鼠标工具,这些鼠标工具通常以图形按钮的形式排列在用户界面的工具栏上。用户可以用鼠标在工具栏上选择所需的工具。当某个工具被选中时,此工具的图标被加亮显示,以表示此工具当前正在工作。这种鼠标工具的切换机制可以用状态机来建模。这时,每个工具的被选中都是状态机里的一个状态,当转入任何一个工具的选中状态时,无论在此之前被选中的工具是那一个,被选中的工具的图标都要被加亮显示。当任何一个被选中的工具被退出选中时,它的图标都要被恢复正常显示。对于这种在状态的转入/转出时刻被执行的动作,可以用状态的入口/出口动作来描述。28在UML里,状态的入口/出口动作动作指的是当状态机进入或退出此状态时,分别应执行的动作。在状态里书写入口/出口动作的语法和变迁的语法类似,所不同的是在事件的位置上分别用entry和exit代替。入口动作的语法是:entry/动作出口动作的语法是:exit/动作动作既代表单一动作,也可以是动作序列(在UML里,动作序列(actionsequence)也是动作的一种)。29(3)、内部变迁图16.1的例子在位图浏览工具的状态机的待命状态下,如果发生了在图像区域内按下了鼠标左键的事件,则会激发一个变迁使状态机转入活跃状态。这时,状态机所在的对象应该在显示窗口上对位图进行进行适当的标记,表示目前正在对此位图进行操作。此标记应一直保持,一直到状态机转入其它状态为止。这时,状态机所在的对象应执行一个动作把此标记消除。30根据前面的入口/出口状态的定义,对位图进行添加标记和取消标记的动作可以用入口/出口动作描述。然而,从图16.1上看到,在活跃状态上,还存在着一个自返变迁(selftransection

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

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

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

×
保存成功