第10章状态机图_第1页
第10章状态机图_第2页
第10章状态机图_第3页
第10章状态机图_第4页
第10章状态机图_第5页
已阅读5页,还剩13页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE145第10章状态机图状态图描述从状态到状态的控制流程,常用来对系统的动态特怔进行建模。在大多数情况下,它用来对反应型对象(外部事件触发对象,对象接受到事件后产生响应)的行为模型。10.1状态机图的概念10.1.1状态机图状态机图描述对象在整个生命周期内,在外部事件的作用下,从一种状态转换到另一种状态的关系图。这种图的节点是状态(包括初始状态和终止状态),关系是转换。图10-1是一个典型的状态机图。图10-1状态机图。10.1.2状态机图的作用状态机图常用来描述业务或软件系统中的对象在外部事件的作用下,对象的状态从一个状态到另一个状态的控制流。利用状态图可以精确地描述对象在生命周期内的行为特征。10.1.3状态机图的组成元素状态机图的组成元素包括:初始状态、终止状态、状态、转换。其中,转换将各种状态连接在一起,构成一个状态图。10.1.4状态机在整个生命周期内,描述对象处于各种状态的图,该图必须完整包括:初始状态、终止状态、状态、转换。状态图不一定完整包含初始状态、终止状态、状态、转换等状态。10.2状态图的表示一个状态图包含的元素有初始状态、终止状态、状态、转换、分支。下面分别描述元素的语义和表示方法。下面分别描述每个元素的表示法。10.2.1状态的表示1.初始状态初始状态代表状态图的起始位置,只能作为转换的源,而不能作为转换的目标。初始状态在一个状态图中只允许有一个,它用一个实心的圆表示,如下图所示。图10-2初始状态的表示2.终止状态终止状态是对象的最后状态,是一个状态图的终止点。终止状态只能作为转换的目标,而不能作为转换的源。终止状态在一个状态图中可以有多个,它用一个套有一个实心圆的空心圆表示。如下图所示。图10-3终止状态的表示3.状态对象属性值的集合标识了一个对象的状态。表示对象状态的图标由一个带圆角的矩形表示。它包含个三部分:名称:给对象所处状态取的名字,名字用一个字符串表示,在一个图中,名字应该是唯一的。内部转换:对象响应外部事件所执行的动作。内部转换发生时,不改变对象的状态,但是,当进入该状态时,可以包含进入动作;当退出该状态时,可以包含退出动作。我们把内部转换标识在状态框的第二栏;用一条实线箭头来标识外部转换,外部转换是指一种状态到另一种状态的转换。嵌套状态:状态图中的状态可以包含两种状态:一种是简单状态,简单状态不包含其它状态;一种是组合状态,组合状态包含了子状态。即状态图的某些状态本身也是状态图。图10-4状态视图的表示10.2.2转换的表示转换是指对象在外部事件的作用下,当满足特定的条件时,对象执行一定的动作,进入目标状态。转换用带箭头的直线表示,箭尾连接源状态(转出的状态),箭头连接目标状态(转入的状态)。转换关系到的内容包括:源状态、目标状态、外部事件、监护条件和执行的动作。下图描述了烧水器的状态图。注意:用实线箭头表示的转换都是外部转换。图10-5烧水器的状态图源状态对于一个转换来说,转换前对象所处的状态,就是源状态。源状态是个相对的概念,即,相对当前状态而言,它的前一个状态就是源状态。目标状态转换完成后,对象所处的状态就是目标状态。当前状态相对它的前一个状态而言,当前状态就是目标状态。源状态和目标状态都是相对某个转换而言的。事件事件就是外部作用于一个对象,能够触发对象状态改变的一种现象。事件可以分为调用、改变、信号、时间四类事件。1).信号事件对象之间通过发送信号和接收信号实现通信。信号是一种异步机制。在计算机中,鼠标和键盘的操作均属于此类事件。对于一个信号而言,对象一般都有相应的事件处理器,如onMouseClick()等。2).调用事件调用某个对象的成员方法就是调用事件,它是一种同步的机制。例如在图10-5中,turnOn就是一种调用事件,用来将开关置于“On”状态。3).改变事件改变事件是指某个指定属性值为真时,事件得到触发。它与监护条件不同,在对象生命周期内,一直在计算改变事件中的属性值,当属性值为真时,事件触发,计算停止。4).时间事件当时间流逝到某个时刻,触发事件对对象起作用。时间事件代表时间的流逝。它可以指定为绝对形式(每天的某时,例如after(12:00)),也可以指定为相对形式(从某一指定事件发生开始所经过的时间,例如after(2seconds))。对于前一种形式,也可以使用变化事件来描述:when(12:00)。5).延迟事件延迟事件是指对象处在在本状态时外部事件产生了,但没有执行事件,要推迟到另外一个状态才执行的事件。例如,当E-mail程序中正在发送第一封邮件时,用户下达发送第二封邮件执令(事件)就会被延迟,但第一封邮件发送完成后,这封邮件就会被发送。这种事件就属于延迟事件。监护条件监护条件是一个布尔表达式,当布尔表达式的值为真时,转换才能够完成。只有在触发事件发生时,才计算一次监护条件的值,当监护条件的值为真时,转换才发生。如果转换发生后,监护条件才由假变为真,那么转换也不会被触发。动作当转换被激活后,如果定义了相应的动作,那么就将执行这个动作。动作可以是一个赋值语句、简单的算术运算、发送信号、调用操作、创建和销毁对象、读取和设置属性的值,甚至是一个包含多个动作的活动。例如,在图10-5中,当turnOn事件发生,就测试监护条件[有水],如果有水,就会执行“烧水”的动作。动作分为入口动作和出口动作。 当转换发生时,进入某个状态时发生的动作称为入口动作;离开某个状态时发生的动作称为出口动作。1).入口动作入口动作表示对象进入某个状态所要执行的动作。入口动作用“entry/要执行的动作”表示。2).出口动作出口动作表示对象退出某个状态所要执行的动作。出口动作用“exit/要执行的动作”表示。入口动作和出口动作都标识在状态视图的第二栏中。活动当对象处于一个状态时,它一般是空闲的,在等待一个事件的发生。但是某些时间,对象正在执行一序列动作,即,对象做着某些工作,并一直继续到被某个外部事件的到来,才中断这些工作,我们把对象处于某个状态时进行的一序列动作称为活动。如果对象处于某个状态进行一些动作,可能会需要一些时间,我们可以用活动来描述这一序列动作。表示活动的方法是,在状态的转换分栏中添加一行“活动描述”,其格式为“do/动作名”。活动用来描述对象处于某个状态时,对象进行的一序列动作。理解简单状态图例如,我们描述一个烧水器在工作时的行为状态变化。可以采用如图10-6所示进行描述。图10-6烧水器的状态变化图对上图的说明如下:与状态off相关的转换有两个,其触发事件都是turnOn,只不过其监护条件不同。如果对象收到事件turnOn,那么将判断壶中是否有水;如果[没水],则仍然处于off状态;如果[有水]则转为on状态,并执行“烧水”动作而与状态on相关的转换也有两个,如果“水开了”就执行turnOff动作,关掉开关;如果烧坏了,就进入了终态了从图10-6中不难看出,在一张状态机图中,最为核心的元素无外乎有两个:一个是用圆角矩形表示的状态(初态和终态例外);另一个是转换。在前面已经说过了状态的含义和表示法,在此重点理解“转换”的含义和表示法。10.2.3分支的表示对象在外部事件的作用下,根据监护条件的不同值,转向不同的目标状态。即,对象的状态根据监护条件的取值而发生分支。分支用空心小菱形表示。图10-7分支的表示根据监护条件的真假可以触发不同的分支转换。图10-8分支实例图10-8说明,当对象处于状态1时,当某个事件作用于对象,这时,就要计算监护条件,当条件满足时(true),对象的状态变为状态2;当条件不满足时(false),对象状态变为状态3。10.3转换的分类转换表示当一个外部事件作用于对象,在监护条件得到满足时,对象在源状态下执行一序列的动作后,转向目标状态。转换进入的状态称为活动状态,转换离开的状态变变为非活动状态。转换通常分为外部转换、内部转换、自动转换、复合转换4种。外部转换外部转换是一种改变对象状态的转换,是最常见的一种转换。外部转换用从源状态到目标状态的箭头表示。图10-9描述了火车上卫生间的简单状态转换。该卫生间存在三个状态,包含5个外部转换。图10-9外部转换内部转换内部转换有一个源状态但是没有目标状态,它转换后的状态仍旧是它本身。内部转换自始至终都不离开源状态,所以没有入口动作和出口动作。因此,当对象处于某个状态,进行的一些动作时,我们可以把这些动作看成是内部转换。图10-10内部转换在图10-10中,在第二栏,描述了入口动作和出口动作,也描述了内部转换,要注意的是,入口动作和出口动作描述的是外部转换时发生的动作;内部转换是描述本状态没有发生改变的情况下,发生的动作。自动转换在没有外部事件的作用下,对象执行了某些活动后,自然而然地完成的转换。自转换是离开某个状态后重新进入原先的状态,它会激发状态的入口动作和出口动作的执行。复合转换复合转换由简单转换组成,通过分支判定,把多个简单转换组合在一起。图10-11复合转换10.4状态的分类状态机图中的状态分为简单状态和复合状态2种。10.4.1简单状态简单状态是指不包含其他状态的状态。但是,简单状态可以具有内部转换、入口动作和出口动作等。下图10-12是烧水器的状态图,它只包含2个简单状态。图10-12烧水器的状态图10.4.2复合状态复合状态是指状态本身包含一到多个子状态机的状态。复合状态中包含的多个子状态之间的关系有两种:一种是并发关系,另一种是互斥关系。如果子状态是并发关系,我们称子状态为并发子状态;如果子状态是互斥关系,我们称子状态为顺序子状态。顺序子状态在任何时刻,当复合状态被激活时,如果复合状态包含的多个子状态中,只能有一个子状态处于活动状态,即多个子状态之间是互斥的,这种子状态称为顺序子状态。复合状态的子状态如果是顺序子状态,那么,复合状态只包含一个状态机。在图10-13中,IC卡电话包括3个基本状态:“使用状态”、“未使用状态”和“维修状态”。其中“使用状态”状态是一个复合状态。下面我们来看看IC电话的连接过程:当拿起电话打IC电话的时候,首先要插入IC卡,进行IC卡的有效验证,验证通过才可以拨打电话,此时从最初的“IC卡验证”状态转到“拨号”状态。如果电话接通,则转到“连接”状态;在连接状态,如果对方也拿起听筒,则转入“通话”状态,通话完毕转入“挂断”状态;如果对方无人接听。则转入“挂断”状态。如果拨号时出现异常情况,则挂断电话;如果挂断后重新拨号,电话又处于“拨号”状态。如果此时取出IC卡,则IC电话转入“未使用”状态。“未使用状态”包含5个子状态,因为IC电话不能同时处于两个不同的子状态中,所以这些子状态是顺序子状态。图10-13顺序子状态实例并发子状态如果复合状态包含两个或者多个并发的子状态机,此时称复合状态的子状态为并发子状态。考察一辆处于“运行”状态的电动车。车处在运行状态时,包含了前进和后退两个不同的子状态,这两个子状态之间的关系看,它们就是顺序子状态,因为一辆车不可能同时处于前进和后退两种子状态;另一方面,车的运行状态又包括高速行驶状态和低速行驶状态。前进状态可以同时为高速行驶或者低速行驶状态;后退状态时,也可以是高速行驶或者低速行驶状态,即,前进状态或后退状态之一,可以与高速行驶状态或低速行使状态之一同时存在。我们把这些可以同时出现的状态称为并发子状态,如图10-14所示。并发子状态可以用于并发线程的状态建模。图10-14并发子状态实例复合状态表示法图10-4是简单状态的表示法,简单状态不包含子状态。复合状态包含了一个或多个嵌套的状态机,复合状态所包含的状态被称为子状态。复合状态的表示法有2两种。(1).将子状态机嵌入表示状态的圆角矩形中这种表示法是在表示状态的圆角矩形中加入子状态机的新分栏,如图10-15的左图所示。将子状态机嵌入圆角矩形将子状态机嵌入圆角矩形用分解指示符表示子状态机图10-15复合状态的两种表示法(2).在圆角矩形中加入加分解指示符这种表示法是在表示状态的圆角矩形中加入分解指示符的新分栏,其中,分解指示符表示子状态机,如图10-15的右所示。我们把复合状态称为父状态。每个子状态继承了父状态的全部转换。每个复合状态的区域可能具有一个初始状态。进入复合状态边界的转换,也就是进入初始状态上的转换;类似地,复合状态也可以有终态。到了终态的转换会触发复合状态上的完成转换。10.4.3历史状态当状态机通过转换从某种状态转入复合状态时,被嵌套的子状态机一般要从子状态机的初始状态开始执行,除非转到特定的子状态。但是有些情况下,当离开一个复合状态,然后重新进入复合状态时,并不希望从复合包含的子状态机的初始状态开始执行,而是希望直接进入上次离开复合状态时的最后一个活动子状态,我们用一个包含字母“H”的小圆圈表示最后一个活动子状态,即,称为历史状态。每当转换到复合状态的历史状态时,对象的状态便恢复到上次离开该复合状态时的最后一个活动子状态,并执行入口动作。考虑一个MP3播放器对象的状态图,如图10-16所示。图10-16历史状态从上图中可以看出,MP3播放器对象的复合状态——“活动”状态包含4个嵌套子状态:“停止”、“播放”、“前进”、“后退”状态,如果用户按下了“暂停”按钮,活动状态被打断而进入暂停状态;当用户撤销暂停,恢复播放器的活动状态时,MP3播放器对象直接进入历史状态,此时将进入播放器上一次离开活动状态时的子状态。例如当用户在播放状态按下暂停按钮,当恢复播放时,播放器仍进入播放状态。10.4.4子状态机间实现通信在并发复合状态中,子状态机之间可能会需要通信。要表示这些通信,当然可以借助于监护条件、状态间的事件来描述,但有时更希望采用异步模式来描述它。在UML1.0中,采用属性和基于同步点两种方法来实现子状态机间的通讯,但在UML2.0中已经废弃了同步状态这一方法。在图10-17中,状态“课程评价”包含了三个并发的子状态机:第一个子状态机包含两个状态,即“实验1”和“实验2”;第二个子状态机包含一个状态,即“团队项目”;第三个子状态机包含一个状态,即“考试”。现在来看看第一个子状态机与第二个子状态机之间的通讯方式:选修该课程的学生必须先完成“实验1”才能进入子状态“团队项目”,那么可以通过一个属性来表达两个子状态之间的这种逻辑。图10-17子状态机间的通信图10-17中,在实验1中添加了一个退出动作,使其退出该状态时将属性lab的值设置为true,再将lab作为另一个子状态“团队项目”执行的监护条件,这样就可以保证在实验1完成之后才能进入子状态”团队项目”。10.5建立状态机图前面已经阐述了状态机图的基本组成,引入了内部转换、状态的进入和退出动作、活动、延迟事件等等;最后还介绍了各种复合状态。下面以一个航班机票预订的例子来说明状态机图的绘制过程。绘制状态机图的一般步骤是:(1).寻找主要的状态,(2).寻找外部事件,以便确定状态之间的转换(3).详细描述每个状态和转换(4).把简单状态图转换为复合状态图。10.5.1寻找主要状态在绘制状态机图时,第一步就是寻找出主要的状态。对于航班机票预订系统而言,我们把飞机票看作一个整体,我们来看飞机票有哪几种状态,以及有哪些事件触发机票状态的变化。确定状态飞机票有以下4种状态:无预订、部分预订、预订完、预订关闭。(1)在刚确定飞行计划时,显然时没有任何预订的,并且在顾客预订机票之前都将处于这种“无预订”状态。(2)对于订座而言,显然有“部分预订”和“预订完”两种状态。(3)当航班快要起飞时,显然要“预订关闭”。寻找外部事件无论机票处于那种状态,可能有的外部事件有:(1)预订():顾客预订机票。(2)退订():顾客退订机票。(3)关闭():机票管理员关闭订票系统。(4)取消航班():飞机调度人员取消飞行计划。10.5.2确定状态间的转换我们已经知道了机票的主要状态,也知道了改变机票状态变化的外部事件。现在我们分析状态之间的转换(这里指外部转换)。即,确定当机票处于这一状态时,哪些外部事件能真正改变机票状态,哪些事件对本状态不起作用。可以采用表格的方式来进行分析,如表10-1所示。表10-1事件与状态转换源目标无预订部分预订预订完预订关闭无预订

预订()不直接转换关闭()部分预订退订()事件发生后,使预订人=0

预订(),无空座关闭()预订完不直接转换退订()

关闭()预订关闭无转换无转换无转换

通过上述分析,确定了状态之间的有效转换,在此基础上可以绘制出相应的状态机图,如图10-18所示。图10-18机票预订系统的初步状态图对图10-18的说明如下:起初,刚确定航班时,机票无人订,机票处在“无预订”状态;当有顾客预订机票时,机票处在“部分预订”状态;当有人退订时,如果退订时“退订数等于已预订数”,那么退订后状态将回到“无预订”状态。在部分预订状态时,如果再发生预订,而且“预订数=空位数”,那么将订完所有的位置,因此将进入“预订完”状态。当机票处在“预订完”状态时,只要有人退订,就必将转为“部分预订”状态。10.5.3详细描述每个状态和转换前面已经确定了各个状态之间的外部转换,为了详细描述状态,我们给状态添加内部转换、外部转换时的进入和退出动作,以及相关的活动等。例如,在这个例子中,还存在下一些内部转换和活动:1.机票处在“部分预订”状态时,当发生退订事件时,如果退订数小于预订数,那么状态不变;同样的道理,当发生预订事件时,如果预订数小于空位数,那么状态也是不变的。2.从初态到“无预订”状态时,我们要对机票数、预定数和空座位数进行初始化活动。3.当预订事件和取订事件发生时,都应该更新预订数和空位数的值。但由于座位总数是已知的,因此只要更新预订数就可以了。通过上述分析,可以在状态机图上,为每个状态添加详细的动作或活动,添加了新信息后,得到如图10-19所示的状态机图。图10-19详细描述后的状态图10.5.4把简单状态图转换为复合状态图为了便于理解状态图,我们常把简单状态图(图10-19)转换为复合状态图(图10-20)。对于图10-19,可以将无预定、部分预订、预订完三个状态归结为“预订”状态,这样就可以采用一个复合状态,即“预订”状态来表示该图,如图10-20所示。图10-20复合状态表示机票预订系统10.6状态机图应用范围状态机图主要应用有两种:一是,在对象生命周期内,对一个对象的整个活动状态建模;二是,对反应型对象的行为建模。对对象的生命周期建模使用状态机最通常的目的是对对象的生命周期建模,即,描述对象在生命周期内,各种状态以及在外部事件的作用下,状态之间的转换。交互图建模是用来描述多个协作对象的行为;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论