您好,欢迎访问三七文档
LOGO《UML统一建模》第10章状态机图(为对象状态建模)目录10.1状态机图的概念10.2状态图的表示10.3转换的分类10.4状态的分类10.5建立状态机图10.6状态机图应用范围10.1状态机图的概念状态机图offonliftswitchlowerswitchstatetransition一盏灯具的状态机图1.状态:状态定义对象在其生命周期中的条件或状况。是指在对象生命周期中满足某些条件、执行某些活动或等待某些事件的一个条件和状况。2.状态机:状态机用来表示一个对象在它的生命周期中响应事件所发生的状态变化以及对事件的响应,展示了状态与状态的转换。3.状态机图:状态机图描述一个状态机,强调了从状态到状态的控制流。这种图的节点是状态(包括初始状态和终止状态),关系是转换。10.1状态机图的概念2.状态机图的作用状态机图常用来描述业务或软件系统中的对象在外部事件的作用下,对象的状态从一个状态到另一个状态的控制流。利用状态图可以精确地描述对象在生命周期内的行为特征。在对系统进行建模时,有时需要反映对象对外部事件的响应、生命周期的变迁以及对过去行为的依赖等内容,这时就需要使用状态机图。3.状态机图的组成元素状态机图的组成元素包括:初始状态、终止状态、状态、转换。其中,转换将各种状态连接在一起,构成一个状态图。10.2状态图的表示一个状态图包含的元素有初始状态、终止状态、状态、转换、分支。初始状态的表示终止状态的表示1状态的表示1)初始状态初始状态代表状态图的起始位置,只能作为转换的源,而不能作为转换的目标。初始状态在一个状态图中只允许有一个,它用一个实心的圆表示。2)终止状态终止状态是对象的最后状态,是一个状态图的终止点。终止状态只能作为转换的目标,而不能作为转换的源。终止状态在一个状态图中可以有多个,它用一个套有一个实心圆的空心圆表示。10.2状态图的表示3)状态对象属性值的集合标识了一个对象的状态。表示对象状态的图标由一个带圆角的矩形表示。它包含三部分:名称:给对象所处状态取的名字,名字用一个字符串表示。如果没有名称,则称为匿名状态;如果有名称,也应保持名称的惟一性。状态的表示内部转换:内部转换用来处理一些不离开该状态的事件。它和自身转换是不同的,自身转换是归为外部转换的一种。嵌套状态:状态图中的状态可以包含两种状态:一种是简单状态,简单状态不包含其它状态;一种是组合状态,组合状态包含子状态。即状态图的某些状态本身也是状态图。10.2状态图的表示2转换的表示一个转换是两个状态之间的一种关系,表示对象将在第一个状态中执行一定的行为,并在某个特定事件发生时且满足特定条件时进入第二个状态。烧水器的状态图转换用带箭头的直线表示,箭尾连接源状态(转出的状态),箭头连接目标状态(转入的状态)。转换关系涉及到的内容包括:源状态、目标状态、外部事件、监护条件和执行的动作。注意:用实线箭头表示的转换都是外部转换。1)源状态受转换影响的状态,如果一个对象处于源状态,那么当该对象收到转换的触发事件并满足监护条件时,会激活转换。源状态是个相对的概念,相对当前状态而言,它的前一个状态就是源状态。10.2状态图的表示2)目标状态转换完成后,对象所处的状态是目标状态。当前状态相对它的前一个状态而言,当前状态就是目标状态。源状态和目标状态都是相对某个转换而言的。3)触发事件它用来为转换定义一个事件,当源状态中的对象接收到这个事件时,会使转换合法地激活。触发事件是外部作用于一个对象,能够触发对象状态改变的一种现象。事件可以分为调用、改变、信号、时间四类事件。(1)信号事件对象之间通过发送信号和接收信号实现通信。信号是两个对象之间通信的媒介,它是一种异步机制。在计算机中,鼠标和键盘的操作均属于此类事件。对于一个信号而言,对象一般都有相应的事件处理器,如onMouseClick()等。(2)调用事件调用某个对象的成员方法就是调用事件,它是一种同步的机制。例如在烧水器的状态图中,turnOn就是一种调用事件,用来将开关置于“On”状态。10.2状态图的表示(3)改变事件改变事件是指某个指定属性值为真时,事件得到触发。在对象生命周期内,一直在计算改变事件中的属性值,当属性值为真时,事件触发,计算停止。(4)时间事件当时间流逝到某个时刻,触发事件对对象起作用。时间事件代表时间的流逝。它可以指定为绝对形式(每天的某时,例如after(12:00)),也可以指定为相对形式(从某一指定事件发生开始所经过的时间,例如after(2seconds))。对于前一种形式,也可以使用改变事件来描述:when(12:00)。(5)延迟事件延迟事件是指对象处在本状态时外部事件产生了,但没有执行事件,要推迟到另外一个状态才执行的事件。例如,当E-mail程序中正在发送第一封邮件时,用户下达发送第二封邮件执令(事件)就会被延迟,但第一封邮件发送完成后,这封邮件就会被发送。这种事件就属于延迟事件。10.2状态图的表示4)监护条件监护条件是一个布尔表达式。当对象接收到触发事件时,就对该布尔表达式求值。如果表达式的值为真,则激活转换;如果取值为假,则不激活转换。只有在触发事件发生时,才计算一次监护条件的值,当监护条件的值为真时,转换才发生。如果转换发生后,监护条件才由假变为真,那么转换也不会被触发。5)动作当转换被激活后,如果定义了相应的动作,那么就将执行这个动作。动作可以是一个赋值语句、简单的算术运算、发送信号、调用操作、创建和销毁对象、读取和设置属性的值,甚至是一个包含多个动作的活动。(1)入口动作入口动作表示对象进入某个状态所要执行的动作。入口动作用“entry/要执行的动作”表示。(2)出口动作出口动作表示对象退出某个状态所要执行的动作。出口动作用“exit/要执行的动作”表示。入口动作和出口动作都标识在状态视图的第二栏中。动作分为入口动作和出口动作。10.2状态图的表示6)活动当对象处于一个状态时,它一般是空闲的,在等待一个事件的发生。但是某些时间,对象正在执行一序列动作,即,对象做着某些工作,并一直继续到某个外部事件的到来,才中断这些工作,我们把对象处于某个状态时进行的一序列动作称为活动。如果对象处于某个状态进行一些动作,可能会需要一些时间,我们可以用活动来描述这一序列动作。表示活动的方法是,在状态的转换分栏中添加一行“活动描述”,其格式为“do/动作名”。活动用来描述对象处于某个状态时,对象进行的一序列动作。10.2状态图的表示7)理解简单状态图烧水器的状态变化图在一张状态机图中,最为核心的元素无外乎有两个:一个是用圆角矩形表示的状态(初态和终态例外);另一个是转换。10.2状态图的表示3分支的表示对象在外部事件的作用下,根据监护条件的不同值,转向不同的目标状态。即,对象的状态根据监护条件的取值而发生分支。分支用空心小菱形表示。根据监护条件的真假可以触发不同的分支转换。分支的表示状态1状态2状态3[满足监护条件][不满足监护条件]分支实例10.3转换的分类1、外部转换外部转换是一种改变对象状态的转换,是最常见的一种转换。外部转换用从源状态到目标状态的箭头表示。UsedUnusedMaintainingThetrainstopThetraingorunningSomebodygointoSomebodygointoSomebodygoout火车上卫生间的状态外部转换10.3转换的分类2.内部转换内部转换用来处理一些不离开该状态的事件。它有一个源状态但是没有目标状态,它转换后的状态仍旧是它本身。内部转换自始至终都不离开源状态,所以没有入口动作和出口动作。因此,当对象处于某个状态,进行一些动作时,我们可以把这些动作看成是内部转换。内部转换event事件名(参数)[监护条件]/动作10.3转换的分类3.自动转换在没有外部事件的作用下,对象执行了某些活动后,自然而然地完成的转换。自动转换是离开某个状态后重新进入原先的状态,它会激发状态的入口动作和出口动作的执行。NewStateNewState2NewState3NewState4NewState5Event1[Condition1]/Action1[Condition2]/Action2[Condition3]/Action3[Condition4]/Action4[Condition5]/Action5[Condition6]/Action6复合转换4.复合转换复合转换由简单转换组成,通过分支判定,把多个简单转换组合在一起。10.4状态的分类状态机图中的状态分为简单状态和复合状态两种。烧水器的状态图1简单状态简单状态是指不包含其他状态的状态。但是,简单状态可以具有内部转换、入口动作和出口动作等。课堂练习根据下面的Java源代码,给出其对应的状态机图…..Intsum=0;…..publicintregister(Students){switch(state){caseOpen:if(sum40){state=Open;sum=sum+1;}elsestate=Close;break;caseClose:System.out.println(“theclassisfull”);}returnsum;}10.4状态的分类2复合状态复合状态是指状态本身包含一到多个子状态机的状态。复合状态中包含的多个子状态之间的关系有两种:一种是并发关系,另一种是互斥关系。如果包含的子状态是并发关系,我们称之为并发复合状态;如果包含的子状态是互斥关系,我们称之为顺序复合状态。1)顺序复合状态在任何时刻,当复合状态被激活时,如果复合状态包含的多个子状态中,只能有一个子状态处于活动状态,即多个子状态之间是互斥的,这种子状态称为顺序子状态。10.4状态的分类顺序复合状态实例—IC卡电话重新拨号10.4状态的分类2)并发复合状态我们把可以同时出现的状态称为并发子状态。并发子状态可以用于并发线程的状态建模。并发复合状态实例---处于“运行”状态的电动车如果复合状态包含两个或者多个并发的子状态机,称该复合状态为并发复合状态。10.4状态的分类3)复合状态表示法复合状态包含了一个或多个嵌套的状态机,复合状态的表示法有两种。(1)将子状态机嵌入表示状态的圆角矩形中这种表示法是在表示状态的圆角矩形中加入子状态机的新分栏。10.4状态的分类(2)在圆角矩形中加入分解指示符这种表示法是在表示状态的圆角矩形中加入分解指示符的新分栏,其中,分解指示符表示子状态机。我们把复合状态称为父状态。每个子状态继承了父状态的全部转换。每个复合状态的区域可能具有一个初始状态。进入复合状态边界的转换,也就是进入初始状态上的转换;类似地,复合状态也可以有终态。到了终态的转换会触发复合状态的完成转换。10.4状态的分类3历史状态当状态机通过转换从某种状态转入复合状态时,被嵌套的子状态机一般要从子状态机的初始状态开始执行,除非转到特定的子状态。但是有些情况下,当离开一个复合状态,然后重新进入复合状态时,并不希望从复合包含的子状态机的初始状态开始执行,而是希望直接进入上次离开复合状态时的最后一个活动子状态,我们用一个包含字母“H”的小圆圈表示最后一个活动子状态(历史状态)。每当转换到复合状态的历史状态时,对象的状态便恢复到上次离开该复合状态时的最后一个活动子状态,并执行入口动作。MP3播放器对象历史状态活动10.4状态的分类4子状态机间实现通信在并发复合状态中,子状态机之间可能会需要通信。要表示这些通信,当然可以借助于监护条件、状态间的事件来描述,但有时更希望采用异步模式来描述它。在UML1.0中,采用属性和基于同步点两种方法来实现子状态机间的通讯,但在UML2.0中已经废弃了同步状态这一方法。10.4状态的分类子状态机间的通信10.5建立状态机图状态机图的建模技术使用状态机图一般是对系统中反映型对象建模,特别是对类、用例和系统的实例的行为建模。在对这些反映型对象建模时,要描述三个方面内容:对象可能处于的稳定状态,触发状态转变的事件,对象状态改变时发生的动作。这也是状态图要表达的主要内容。在使
本文标题:第10章+状态机图
链接地址:https://www.777doc.com/doc-3993997 .html