LOGO《UML统一建模》第10章状态机图2对象和状态•对象是某个状态下的对象,而状态则是描述当前对象。所有的对象均有状态,状态可改变•下面一些例子说明了对象和状态–(1)支票(对象)已付(状态)–(2)汽车(对象)已启动(状态)–(3)小王(对象)睡着了(状态)–(4)小红(对象)未婚(状态)23为什么要建模状态机图•对象可能会有不同的状态,某些行为依赖于这些状态。例如,按下开关按钮时,电灯将改变当前的状态(由关变开或由开变关),因此:–需要记录对象当前的状态–发生了某种事件才会引起状态间的转移–由一个状态转到另一个状态的过程通常通过方法调用实现•状态机图通常作为对类图的补充面向对象分析与设计&UML4状态机图:电梯状态机图主要显示以下3种内容:对象在生命周期中所经历的状态序列;诱发对象从一个状态转移到另一个状态的事件;状态改变所导致的动作。状态机图的概念•状态机图描述对象在整个生命周期内,在外部事件的作用下,从一种状态转换到另一种状态的关系图。这种图的节点是状态(包括初始状态和终止状态),关系是转换。状态机图的概念•状态机图的作用–状态机图常用来描述业务或软件系统中的对象在外部事件的作用下,对象的状态从一个状态到另一个状态的控制流。利用状态机图可以精确地描述对象在生命周期内的行为特征。•状态机图的组成元素–状态机图的组成元素包括:初始状态、终止状态、状态、转换。其中,转换将各种状态连接在一起,构成一个状态机图。•状态机–在整个生命周期内,描述对象处于各种状态的图,该图必须完整包括:初始状态、终止状态、状态、转换。状态机图不一定完整包含初始状态、终止状态、状态、转换等状态。7状态机图的基本符号状态机图的表示•一个状态机图包含的元素有初始状态、终止状态、状态、转换、分支。•状态的表示–初始状态•初始状态代表状态机图的起始位置,只能作为转换的源,而不能作为转换的目标。初始状态在一个状态机图中只允许有一个,它用一个实心的圆表示。–终止状态–终止状态是对象的最后状态,是一个状态机图的终止点。终止状态只能作为转换的目标,而不能作为转换的源。终止状态在一个状态机图中可以有多个,它用一个套有一个实心圆的空心圆表示。状态机图的表示•状态–对象属性值的集合标识了一个对象的状态。表示对象状态的图标由一个带圆角的矩形表示。它包含三部分:•名称:给对象所处状态取的名字,名字用一个字符串表示,在一个图中,名字应该是唯一的。•内部转换:对象响应外部事件所执行的动作。内部转换发生时,不改变对象的状态,但是,当进入该状态时,可以包含进入动作;当退出该状态时,可以包含退出动作。•嵌套状态:状态机图中的状态可以包含两种状态:一种是简单状态,简单状态不包含其它状态;一种是组合状态,组合状态包含了子状态。即状态机图的某些状态本身也是状态机图。10状态机图的表示状态名入口动作,进入该状态时执行该动作.动作,处于该状态时执行的动作.内部转换,该状态中出现特定事件时执行的动作.退出动作,当离开该状态时执行该动作.延迟响应事件,在该状态出现该事件时,不在本状态响应,而是延迟到其他状态响应.状态机图的表示•转换的表示•转换是指对象在外部事件的作用下,当满足特定的条件时,对象执行一定的动作,进入目标状态。转换用带箭头的直线表示,箭尾连接源状态(转出的状态),箭头连接目标状态(转入的状态)。•转换关系到的内容包括:源状态、目标状态、外部事件、监护条件和执行的动作。下图描述了烧水器的状态机图。•注意:用实线箭头表示的转换都是外部转换。烧水器的状态机图12转换的五要素•源状态:即受转换影响的状态•目标状态:当转换完成后对象的状态•触发事件:用来为转换定义一个事件,包括调用、改变、信号、时间四类事件•监护条件:布尔表达式,决定是否激活转换、•动作:转换激活时的操作状态机图的表示•1.源状态•对于一个转换来说,转换前对象所处的状态,就是源状态。源状态是个相对的概念,即,相对当前状态而言,它的前一个状态就是源状态。•2.目标状态•转换完成后,对象所处的状态就是目标状态。当前状态相对它的前一个状态而言,当前状态就是目标状态。源状态和目标状态都是相对某个转换而言的。状态机图的表示•3.事件•事件就是外部作用于一个对象,能够触发对象状态改变的一种现象。•1).信号事件•对象之间通过发送信号和接收信号实现通信。信号是一种异步机制。对于一个信号而言,对象一般都有相应的事件处理器,如onMouseClick()。•2).调用事件•调用某个对象的成员方法就是调用事件,它是一种同步的机制。例如turnOn是一种调用事件,用来将开关置于“On”状态。•3).改变事件•指某个指定属性值为真时,事件得到触发。与监护条件不同,在对象生命周期内,一直在计算改变事件中的属性值,事件触发,计算停止。•4).时间事件•当时间流逝到某个时刻,触发事件对对象起作用。例如,after(12:00)),after(2seconds)),when(12:00)。•5).延迟事件•指对象处在在本状态时外部事件产生了,但没有执行事件,要推迟到另外一个状态才执行的事件。状态机图的表示•4.监护条件•监护条件是一个布尔表达式,当布尔表达式的值为真时,转换才能够完成。只有在触发事件发生时,才计算一次监护条件的值,当监护条件的值为真时,转换才发生。如果转换发生后,监护条件才由假变为真,那么转换也不会被触发。状态机图的表示•5.动作•当转换被激活后,如果定义了相应的动作,那么就将执行这个动作。动作可以是一个赋值语句、简单的算术运算、发送信号、调用操作、创建和销毁对象、读取和设置属性的值,甚至是一个包含多个动作的活动。例如,当turnOn事件发生,就测试监护条件[有水],如果有水,就会执行“烧水”的动作。•动作分为入口动作和出口动作。•1).入口动作•入口动作表示对象进入某个状态所要执行的动作。入口动作用“entry/要执行的动作”表示。•2).出口动作•出口动作表示对象退出某个状态所要执行的动作。出口动作用“exit/要执行的动作”表示。状态机图的表示•活动•当对象处于一个状态时,它一般是空闲的,在等待一个事件的发生。但是某些时间,对象正在执行一序列动作,即,对象做着某些工作,并一直继续到被某个外部事件的到来,才中断这些工作,我们把对象处于某个状态时进行的一序列动作称为活动。•如果对象处于某个状态进行一些动作,可能会需要一些时间,我们可以用活动来描述这一序列动作。表示活动的方法是,在状态的转换分栏中添加一行“活动描述”,其格式为“do/动作名”。•活动用来描述对象处于某个状态时,对象进行的一序列动作。状态机图的表示•理解简单状态机图•例如,描述一个烧水器在工作时的行为状态变化。•与状态off相关的转换有两个,其触发事件都是turnOn,只不过其监护条件不同。如果对象收到事件turnOn,那么将判断壶中是否有水;如果[没水],则仍然处于off状态;如果[有水]则转为on状态,并执行“烧水”动作•与状态on相关的转换也有两个,如果“水开了”就执行turnOff动作,关掉开关;如果烧坏了,就进入了终态了状态机图的表示•分支的表示•对象在外部事件的作用下,根据监护条件的不同值,转向不同的目标状态。即,对象的状态根据监护条件的取值而发生分支。分支用空心小菱形表示。•根据监护条件的真假可以触发不同的分支转换。状态1状态2状态3[满足监护条件][不满足监护条件]状态机图的表示•转换表示当一个外部事件作用于对象,在监护条件得到满足时,对象在源状态下执行一序列的动作后,转向目标状态。转换进入的状态称为活动状态,转换离开的状态变变为非活动状态。•转换通常分为:–外部转换–内部转换–自动转换–复合转换转换的分类•1.外部转换•外部转换是一种改变对象状态的转换,是最常见的一种转换。外部转换用从源状态到目标状态的箭头表示。•火车上卫生间的简单状态转换。该卫生间存在三个状态,包含5个外部转换。UsedUnusedMaintainingThetrainstopThetraingorunningSomebodygointoSomebodygointoSomebodygoout转换的分类•2.内部转换•内部转换有一个源状态但是没有目标状态,它转换后的状态仍旧是它本身。内部转换自始至终都不离开源状态,所以没有入口动作和出口动作。因此,当对象处于某个状态,进行的一些动作时,我们可以把这些动作看成是内部转换。•在第二栏,描述了入口动作和出口动作,也描述了内部转换,要注意的是,入口动作和出口动作描述的是外部转换时发生的动作;内部转换是描述本状态没有发生改变的情况下,发生的动作。状态的分类•3.自动转换•在没有外部事件的作用下,对象执行了某些活动后,自然而然地完成的转换。自转换是离开某个状态后重新进入原先的状态,它会激发状态的入口动作和出口动作的执行。•4.复合转换•复合转换由简单转换组成,通过分支判定,把多个简单转换组合在一起。NewStateNewState2NewState3NewState4NewState5Event1[Condition1]/Action1[Condition2]/Action2[Condition3]/Action3[Condition4]/Action4[Condition5]/Action5[Condition6]/Action624转换的区别•内部转换和自转换不同:①自转换是离开本状态后重新进入该状态,它会激发状态的入口动作和出口动作的执行。②内部转换自始至终都不离开本状态,所以没有出口或入口事件,也就不执行入口和出口动作。25带有复杂转换的状态机图26同步•使用同步条可以显示并发转移,并发转移中可以有多个源状态和目标状态。并发转移表示一个同步将一个控制划分为并发的线程。•状态机图中使用到同步条是为了说明某些状态在哪里需要跟上或者等待其他状态。状态机图中同步条是一条黑色的粗线。26State1State2State3状态的分类•状态机图中的状态分为简单状态和复合状态2种。•1简单状态•简单状态是指不包含其他状态的状态。但是,简单状态可以具有内部转换、入口动作和出口动作等。•下图只包含2个简单状态。状态的分类•2复合状态•复合状态是指状态本身包含一到多个子状态机的状态。•复合状态中包含的多个子状态之间的关系有两种:一种是并发关系,另一种是互斥关系。如果子状态是并发关系,称子状态为并发子状态;如果子状态是互斥关系,称子状态为顺序子状态。子状态子状态也可以有初态和终态状态的分类•1.顺序子状态•在任何时刻,当复合状态被激活时,如果复合状态包含的多个子状态中,只能有一个子状态处于活动状态,即多个子状态之间是互斥的,这种子状态称为顺序子状态。复合状态的子状态如果是顺序子状态,•在下图中,IC卡电话“使用状态”状态是一个复合状态,包含5个子状态,因为IC电话不能同时处于两个不同的子状态中,所以这些子状态是顺序子状态。状态的分类•2.并发子状态•如果复合状态包含两个或者多个并发的子状态机,此时称复合状态的子状态为并发子状态。•考察一辆处于“运行”状态的电动车。车处在运行状态时,包含了前进和后退两个不同的子状态,这两个子状态之间是顺序子状态,因为一辆车不可能同时处于前进和后退两种子状态;另一方面,车的运行状态又包括高速行驶状态和低速行驶状态。前进状态可以同时为高速行驶或者低速行驶状态;后退状态时,也可以是高速行驶或者低速行驶状态,即,前进状态或后退状态之一,可以与高速行驶状态或低速行使状态之一同时存在。这些可以同时出现的状态称为并发子状态。状态的分类•3.复合状态表示法•复合状态的表示法有两种。•(1).将子状态机嵌入表示状态的圆角矩形中•这种表示法是在表示状态的圆角矩形中加入子状态机的新分栏。•(2).在圆角矩形中加入加分解指示符•这种表示法是在表示状态的圆角矩形中加入分解指示符的新分栏,其中,分解指示符表示子状态机,历史状态•历史状态–当状态机通过转换从某种状态转入复合状态时,被嵌套的子状态机一般要从子状态机的初始状态开始执行。但是有些情况下,