《UML-10状态机图教学文案》由会员分享,可在线阅读,更多相关《UML-10状态机图教学文案(55页珍藏版)》请在金锄头文库上搜索。
1、UML-10状态机图第第10章章 状态机图状态机图n10.1状态机图状态机图11410.2状态机图的应用状态机图的应用115Homen在在UML中状态机图可以用两种方式可视化地表达:中状态机图可以用两种方式可视化地表达:状态状态机图和活动图。机图和活动图。 n状态机图(状态机图(State Machine Diagram)着重于对一个模型)着重于对一个模型元素的可能的状态及其转移建立模型。元素的可能的状态及其转移建立模型。活动图着重于对一活动图着重于对一个活动到另一个活动的控制流建立模型个活动到另一个活动的控制流建立模型。n状态机图由表示状态的节点和表示状态之间的转移的弧状态机图由表示状态的节
2、点和表示状态之间的转移的弧组成。组成。n在状态机图中,若干个状态节点由一条或多条转移弧连在状态机图中,若干个状态节点由一条或多条转移弧连接,状态的转移由事件触发。模型元素的行为模型化为在接,状态的转移由事件触发。模型元素的行为模型化为在状态机图中的一个周游,在此周游中状态机图执行一系列状态机图中的一个周游,在此周游中状态机图执行一系列的动作。的动作。n一个状态机图表现了一个对象(或模型元素)的生存史,一个状态机图表现了一个对象(或模型元素)的生存史,显示触发状态转移的事件和因状态改变而导致的动作。显示触发状态转移的事件和因状态改变而导致的动作。 10.1 状态机图状态机图HomenUML的状态
3、机图的图形元素有的状态机图的图形元素有如下几种如下几种:n 1状态状态 n状态用一个状态用一个带圆角的矩形框带圆角的矩形框表示,表示,框内标有状态的名称和其他一些框内标有状态的名称和其他一些信息。信息。 n状态图标可以进一步划分成状态图标可以进一步划分成3个个分隔框:分隔框:名称框、内部转移框和名称框、内部转移框和嵌套状态机图框,如嵌套状态机图框,如图图10.2所示。所示。 n在名称框中标出状态的名称在名称框中标出状态的名称。n在在内部转移框中规定动作或活动内部转移框中规定动作或活动。10.1 状态机图状态机图Home图图10.10.2 状态的图形表示状态的图形表示 n状态可以是状态可以是简单
4、状态或组合状态简单状态或组合状态。n包含有子状态的状态称为组合状态(包含有子状态的状态称为组合状态(Composite State)。)。n在一个组合状态的嵌套状态机图的分隔框内放置被嵌在一个组合状态的嵌套状态机图的分隔框内放置被嵌套的子状态机图。套的子状态机图。对于一个简单状态,嵌套状态机图分对于一个简单状态,嵌套状态机图分隔框可以缺省。隔框可以缺省。 n 10.1 状态机图状态机图Home图图10.10.3 状态转移的图形表示状态转移的图形表示 n 2转移转移 n转移用转移用实箭线表示实箭线表示,箭尾连接出发状态,即源状态,箭尾连接出发状态,即源状态,箭头连接到达状态,即目标状态。箭头连接
5、到达状态,即目标状态。n在箭线上可以标示与该转移有关的选项:在箭线上可以标示与该转移有关的选项:事件、保安事件、保安条件(条件(Guard ConditionGuard Condition)和动作。)和动作。 n当处于源状态的对象接收到一个事件,并且保安条件当处于源状态的对象接收到一个事件,并且保安条件得到满足(如果有保安条件的话)时,则执行相应的动得到满足(如果有保安条件的话)时,则执行相应的动作,并从源状态转移到目标状态。作,并从源状态转移到目标状态。如果在转移箭线上不如果在转移箭线上不标示触发转移的事件时,则从源状态转移到目标状态是标示触发转移的事件时,则从源状态转移到目标状态是自动进行
6、的。自动进行的。 n状态转移的图形表示如图状态转移的图形表示如图10.3所示。所示。 10.1 状态机图状态机图Homen 3初始状态(初始状态(Initial State)n初始状态是模型元素的初始状况,代表一个状态机图初始状态是模型元素的初始状况,代表一个状态机图的起始点,是一个的起始点,是一个伪状态伪状态(Pseudo State)。)。 n初始状态用一个初始状态用一个实心的圆表示实心的圆表示。n 4终结状态(终结状态(Final State) n终结状态是模型元素的最后的状态,代表一个状态机终结状态是模型元素的最后的状态,代表一个状态机图的终止点,是一个伪状态。图的终止点,是一个伪状态
7、。 n终结状态用终结状态用一个圆中套一个小实心圆表示一个圆中套一个小实心圆表示。 n 10.1 状态机图状态机图Homen 5判定(判定(Decision) n判定是在状态机图中的一个特定的位置,工作流判定是在状态机图中的一个特定的位置,工作流(Work flow)在此按保安条件的取值而发生分支。)在此按保安条件的取值而发生分支。n判定用空心小菱形表示判定用空心小菱形表示。n一般,判定只有一个入转移和两个出转移,保安条件一般,判定只有一个入转移和两个出转移,保安条件为布尔表达式。根据保安条件表达式的值为为布尔表达式。根据保安条件表达式的值为“真真”或或“假假”,触发不同的分支转移。,触发不同的
8、分支转移。n判定也可以是有一个入转移和多个出转移。判定也可以是有一个入转移和多个出转移。 10.1 状态机图状态机图Homen 6同步(同步(Synchronization) n同步可视化地定义了并发工作流的同步可视化地定义了并发工作流的分叉(分叉(Fork)与联结()与联结(Join)。 n分叉是一个源状态分为两个或两个以上的目标状态,联结是两个以分叉是一个源状态分为两个或两个以上的目标状态,联结是两个以上的源状态连接为一个目标状态。上的源状态连接为一个目标状态。n在分叉与联结之间的工作流是并行执行的。在分叉与联结之间的工作流是并行执行的。 n同步在状态机图中用一条粗短实线表示,同步在状态机
9、图中用一条粗短实线表示,称为同步杆称为同步杆,如图,如图10.4所所示。示。 10.1 状态机图状态机图Home图图10.10.4 控制的分叉和联结的图形表示控制的分叉和联结的图形表示 n例:例:项目与资源管理系统项目与资源管理系统PRMS的一个资源对象的状态机图的一个资源对象的状态机图,如,如图图10.5所示。所示。10.1 状态机图状态机图Home图图10.10.5 项目与资源管理系统项目与资源管理系统PRMS的一个资源状态机的一个资源状态机图图 10.1 状态机图状态状态机图状态Home1 概述概述2 组合状态组合状态4 历史状态历史状态3 顺序状态顺序状态n从原则上说,对象属性的任何从
10、原则上说,对象属性的任何一个值的组合就是一个值的组合就是一个状态一个状态,全部的状态构成一个对象的状态空间。,全部的状态构成一个对象的状态空间。 n并非这个状态空间中的每一个状态都是值得关注并非这个状态空间中的每一个状态都是值得关注的。在对一个系统或对象建立动态行为模型时,的。在对一个系统或对象建立动态行为模型时,最最关心的是那些明显影响行为的属性和属性值,以及关心的是那些明显影响行为的属性和属性值,以及由它们表达的状态。由它们表达的状态。 n对确定对象的状态有重要意义的属性称为对确定对象的状态有重要意义的属性称为状态属状态属性(性(State Attribute)。)。 n在建立状态机图模型
11、时,需要正确地找出一个对在建立状态机图模型时,需要正确地找出一个对象的全部状态属性,根据它们的值划分对象状态。象的全部状态属性,根据它们的值划分对象状态。 Home10.1 状态机图状态状态机图状态n在对一个对象(模型元素)的行为建模在对一个对象(模型元素)的行为建模时,所选择的该对象(模型元素)的生存时,所选择的该对象(模型元素)的生存期中的期中的状态的数量是有限的状态的数量是有限的。n对象(模型元素)处于每个对象(模型元素)处于每个状态的持续状态的持续时间也是有限的时间也是有限的。当发生某个事件,或完。当发生某个事件,或完成了某个动作或活动的执行,都会触发状成了某个动作或活动的执行,都会触
12、发状态的转移。态的转移。n UML对一个状态的对一个状态的描述描述包含以下信息:包含以下信息:名字、入口动作与出口动作、内部转移、名字、入口动作与出口动作、内部转移、嵌套子状态、延迟事件等。嵌套子状态、延迟事件等。 n例:一个状态的示例,如图例:一个状态的示例,如图10.6所示。所示。 Home10.1 状态机图状态状态机图状态图图10.10.6 状态图标示例状态图标示例 n一个不含内嵌套状态的状态,称为一个不含内嵌套状态的状态,称为简单状态简单状态。 n如果一个状态内嵌套了若干个状态,则称该状态为如果一个状态内嵌套了若干个状态,则称该状态为超状态超状态(Superstate)或组合状态()或
13、组合状态(Composite State),),其中被嵌套的其中被嵌套的状态称为状态称为子状态(子状态(Substate)。子状态本身仍然可以是一个组合。子状态本身仍然可以是一个组合状态。状态。 n超状态中的每一个被嵌套的状态机图所表示的子状态机图,都超状态中的每一个被嵌套的状态机图所表示的子状态机图,都对应于该超状态内的正在进行的一个活动。对应于该超状态内的正在进行的一个活动。 n子状态机图的所在区域必有自己的初始状态和终结状态。对组子状态机图的所在区域必有自己的初始状态和终结状态。对组合状态的一个入转移代表对其子区域内的初始状态的入转移;对合状态的一个入转移代表对其子区域内的初始状态的入转
14、移;对子区域内的终结状态的转移代表包含它的组合状态的相应活动的子区域内的终结状态的转移代表包含它的组合状态的相应活动的完成。完成。 n注意,注意,动作(动作(Action)与活动()与活动(Activity)的含义是不同的。)的含义是不同的。 n动作与转移相关,动作是一组原子的可执行语句,它调用某个动作与转移相关,动作是一组原子的可执行语句,它调用某个操作,很快完成,不能被中断。操作,很快完成,不能被中断。 n活动是动作的非活动是动作的非原子序列,有一定的运行期限,活动可能被某原子序列,有一定的运行期限,活动可能被某个事件中断。个事件中断。 Home10.1 状态机图组合状态状态机图组合状态n
15、例:一个表示例:一个表示网上商店处理送网上商店处理送货过程的状态机货过程的状态机图,如图图,如图10.7所所示。它是一个带示。它是一个带有组合状态的状有组合状态的状态机图。态机图。 Home10.1 状态机图组合状态状态机图组合状态图10.7 组合状态机图示例 n组合状态可以包含组合状态可以包含有顺序子状态或并发子状态有顺序子状态或并发子状态。 n一个组合状态从理论上说可以嵌套任意层次,而外部一个组合状态从理论上说可以嵌套任意层次,而外部组合状态本身可以作为一个简单状态来对待。组合状态本身可以作为一个简单状态来对待。 n采用组合状态可以简化对复杂行为的建模。采用组合状态可以简化对复杂行为的建模
16、。 n更为重要的是组合状态清楚地表达了状态的结构关系,更为重要的是组合状态清楚地表达了状态的结构关系,便于分清主次,分别对待。便于分清主次,分别对待。 n如果状态图中的状态比较多,若不采用组合状态,则如果状态图中的状态比较多,若不采用组合状态,则转移线的交叉现象会不可避免,图面将凌乱不堪。转移线的交叉现象会不可避免,图面将凌乱不堪。n例如,图例如,图10.8的送货处理状态机图是图的送货处理状态机图是图10.7的另一个的另一个版本,其中没有采用组合状态。在图版本,其中没有采用组合状态。在图10.8的状态机图中的状态机图中出现了转移线交叉。出现了转移线交叉。 Home10.1 状态机图组合状态状态
17、机图组合状态n例:未采用组合状态表示的送货处理状态机图,如图例:未采用组合状态表示的送货处理状态机图,如图10.8 所示。所示。 Home10.1 状态机图组合状态状态机图组合状态图图10.10.8 送货处理送货处理状态机图示例状态机图示例 n顺序状态(顺序状态(Sequential State)又称为不相交状态(又称为不相交状态(Disjoint State),它们是一个一个顺序转移的,不是并发存在的。),它们是一个一个顺序转移的,不是并发存在的。 n顺序状态表现正常的顺利的行为。顺序状态表现正常的顺利的行为。n在行为过程中常会出现各种非正常的情况,为此,必然要为在行为过程中常会出现各种非正
18、常的情况,为此,必然要为每每一个状态画出一条表现非正常行为的转移箭线一个状态画出一条表现非正常行为的转移箭线 ,图面将凌乱,图面将凌乱。 n可以使用组合状态和顺序子状态的概念可以使用组合状态和顺序子状态的概念解决此类建模问题解决此类建模问题。n例如,在图例如,在图10.9中,中,“活动活动”状态是一个组合状态,状态是一个组合状态,“验卡验卡”、“拨拨号号”、“通话通话”、“挂断挂断”等状态是它的顺序子状态,它们构成等状态是它的顺序子状态,它们构成“活动活动”状态内部的子状态机图。状态内部的子状态机图。Home10.1 状态机图顺序状态状态机图顺序状态n例:顺序状态示例,如图例:顺序状态示例,如
19、图10.9所示。它是表示所示。它是表示IC卡电卡电话机工作的部分状态机图。话机工作的部分状态机图。Home10.1 状态机图顺序状态状态机图顺序状态图图10.10.9 顺序状态示例顺序状态示例 n在一个组合状态中所包含的一个由顺序子状态构成的子状态机在一个组合状态中所包含的一个由顺序子状态构成的子状态机图中,必定有一个子初始状态。每次进入该组合状态,被嵌套的图中,必定有一个子初始状态。每次进入该组合状态,被嵌套的子状态机图从它的子初始状态开始运作(除非直接转移到特定的子状态机图从它的子初始状态开始运作(除非直接转移到特定的子状态)。子状态)。n有的情况下,有的情况下,当离开一个组合状态后,又重
20、新进入该组合状态,当离开一个组合状态后,又重新进入该组合状态,但是不希望从它的子初始状态开始运作,而是直接进入到上次离但是不希望从它的子初始状态开始运作,而是直接进入到上次离开该组合状态时的最后一个子状态开该组合状态时的最后一个子状态。 n历史状态(历史状态(History State)代表上次离开组合状态时的最后一个代表上次离开组合状态时的最后一个活动子状态。活动子状态。 n每当转移到组合状态中的历史状态时,对象便恢复上次离开该每当转移到组合状态中的历史状态时,对象便恢复上次离开该组合状态时的最后一个活动子状态,并执行入口动作。组合状态时的最后一个活动子状态,并执行入口动作。 n历史状态用一
21、个历史状态用一个含有字母含有字母“H”的小圆圈的小圆圈表示。表示。 n历史状态只是一个伪状态(历史状态只是一个伪状态(Pseudo State)的图形标记,只能作)的图形标记,只能作为一个组合状态中的子状态,为一个组合状态中的子状态,不能在顶层状态机图中使用不能在顶层状态机图中使用。n历史状态可以有任意个从外部状态来的入转移,至多有一个无历史状态可以有任意个从外部状态来的入转移,至多有一个无标签的出转移,它进入到一个子状态机图。标签的出转移,它进入到一个子状态机图。 Home10.1 状态机图历史状态状态机图历史状态n例:历史状态示例,如图例:历史状态示例,如图10.10所示,它是表示一个所示
22、,它是表示一个影碟机对象工作的部分状态机图。影碟机对象工作的部分状态机图。Home10.1 状态机图历史状态状态机图历史状态图图10.10.10 历史状态示例历史状态示例 n转移转移表示当一个特定的事件发生或某些条件满足时,一个在源状表示当一个特定的事件发生或某些条件满足时,一个在源状态下的对象将完成一些特定的动作,一旦发生这种情况,就称该转态下的对象将完成一些特定的动作,一旦发生这种情况,就称该转移被激发了(移被激发了(Firing),其结果是),其结果是使得对象从源状态转移到另一个使得对象从源状态转移到另一个新的目标状态。新的目标状态。n触发状态转移的事件可以是:触发状态转移的事件可以是:
23、某个条件为真,一个信号,或一个某个条件为真,一个信号,或一个调用操作。调用操作。 n当发生一个转移时,该转移进入的状态为当发生一个转移时,该转移进入的状态为活动状态(活动状态(Active State),),它将执行相应的动作。当发生一个转移离开一个状态时,它将执行相应的动作。当发生一个转移离开一个状态时,该状态变成该状态变成非活动状态(非活动状态(Inactive State)。)。 n一个转移包含五部分信息:一个转移包含五部分信息:源状态、目标状态、事件、保安条件、源状态、目标状态、事件、保安条件、动作。动作。 n源状态是发出转移的状态,目标状态是转移到达的状态。源状态是发出转移的状态,目
24、标状态是转移到达的状态。 n事件、保安条件(简称条件)和动作是一个转移常要给出的事件、保安条件(简称条件)和动作是一个转移常要给出的3个选个选项,其在转移箭线上的标识格式为:项,其在转移箭线上的标识格式为:n 事件事件 保安条件保安条件 / 动作动作 Home10.1 状态机图状态机图转移转移10.1 状态机图状态机图转移转移Home1 事件事件2 条件条件4 转移的类型转移的类型3 动作动作n事件事件是一个有意义的出现(是一个有意义的出现(Occurrence)的说明,它位于特定)的说明,它位于特定的时间和空间点。的时间和空间点。n在状态机图中,事件是在状态机图中,事件是一个激励的出现一个激
25、励的出现,它定义一个触发子,它定义一个触发子(Trigger)触发对象改变其状态。)触发对象改变其状态。 n事件的描述事件的描述格式如下格式如下:n 事件名称事件名称 参数表参数表n entryn exitn don when 布尔表达式布尔表达式n after 时间表达式时间表达式n 参数表参数表 参数名参数名1,参数名,参数名2,Home10.1 状态机图状态机图转移事件转移事件n事件的名称用一个字符串表示事件的名称用一个字符串表示。事件名必须引用接受事件的对。事件名必须引用接受事件的对象类中的一个操作或信号。象类中的一个操作或信号。n在事件名后跟的方括号中列出的是传送给该事件的在事件名后
26、跟的方括号中列出的是传送给该事件的形式参数。形式参数。形式参数表为选项,可以缺省。形式参数表为选项,可以缺省。 n下面是一些事件的例子:下面是一些事件的例子:n entry / setEchoOff () / 入口事件入口事件n exit / setEchoOn () / 出口事件出口事件n do / checkChar / DO事件,执行活动事件,执行活动n help / verifyPsw.help() / 内部转移事件内部转移事件n when (temp120) / setTest / 改变事件改变事件n after (2 sec.) / send c.isAlive / 时间事件,发送
27、信号时间事件,发送信号n setTest /defer / 延迟事件延迟事件Home10.1 状态机图状态机图转移事件转移事件n事件之一的信号常用对象类图形表示,但是必须加上事件之一的信号常用对象类图形表示,但是必须加上构造型构造型,如图,如图10.11所示。所示。 n事件也可以只发生而不触发对象的状态转移。在这种事件也可以只发生而不触发对象的状态转移。在这种情况下,若事件不是被声明为一个延迟事件,它必定被情况下,若事件不是被声明为一个延迟事件,它必定被丢失。丢失。 Home10.1 状态机图状态机图转移事件转移事件图图10.10.11 事件的图形表示示例事件的图形表示示例 n事件的事件的种类
28、有种类有:入口事件、出口事件、:入口事件、出口事件、DO事件、信事件、信号事件、调用事件、改变事件、时间事件等。号事件、调用事件、改变事件、时间事件等。n(1)入口事件()入口事件(Entry Event) n入口事件表示一个入口动作序列,用关键字入口事件表示一个入口动作序列,用关键字“entry”说明,它在进入状态时执行。说明,它在进入状态时执行。 n入口事件的动作是入口事件的动作是原子的原子的,不能避开,而且先于任何,不能避开,而且先于任何内部活动或转移。内部活动或转移。 n入口事件可以不带参数和保安条件,因为它是隐式调入口事件可以不带参数和保安条件,因为它是隐式调用的。用的。n在一个对象
29、类的高层状态机图中的入口事件可能有参在一个对象类的高层状态机图中的入口事件可能有参数表,它对应于该类的一个对象在创建时所接收的变数表,它对应于该类的一个对象在创建时所接收的变量。量。 Home10.1 状态机图状态机图转移事件转移事件n(2)出口事件()出口事件(Exit Event) n出口事件表示一个出口动作序列,用关键字出口事件表示一个出口动作序列,用关键字“exit”说说明,它在退出状态时执行。明,它在退出状态时执行。n出口事件的动作是出口事件的动作是原子的原子的,不能避开,而且跟在任何,不能避开,而且跟在任何内部活动之后,但先于任何出转移。内部活动之后,但先于任何出转移。n出口事件可
30、以不带参数和保安条件,因为它是隐式调出口事件可以不带参数和保安条件,因为它是隐式调用的。用的。 n(3)DO事件(事件(Do Event) nDO事件表示对事件表示对一个嵌套状态机图的调用一个嵌套状态机图的调用,用关键字,用关键字“do”说明。说明。 n在入口动作之后,被调用的嵌套状态机图从它的初始在入口动作之后,被调用的嵌套状态机图从它的初始状态开始运作,直到到达它的终结状态,而后发生出状态开始运作,直到到达它的终结状态,而后发生出口动作。口动作。 Home10.1 状态机图状态机图转移事件转移事件n(4)调用事件()调用事件(Call Event) n调用事件表示调用事件表示调用者对操作的
31、请求调用者对操作的请求,调用事件至少涉及两个以,调用事件至少涉及两个以上的对象,一个对象请求调用另一个对象的操作。上的对象,一个对象请求调用另一个对象的操作。 n调用事件调用事件一般为同步调用一般为同步调用,也可以是异步调用也可以是异步调用。如果调用者需。如果调用者需等待操作的完成,则是同步调用,否则是异步调用。等待操作的完成,则是同步调用,否则是异步调用。 n调用事件的定义格式为:调用事件的定义格式为:n 事件名(参数列表)事件名(参数列表)n参数的格式为:参数的格式为:n 参数名:类型表达式参数名:类型表达式 n例:调用事件示例,如例:调用事件示例,如图图10.10.12 所示。所示。Ho
32、me10.1 状态机图状态机图转移事件转移事件图图10.10.12 调用事件示例调用事件示例 n(5)信号事件()信号事件(Signal Event) n在状态机图中,可以使用信号在状态机图中,可以使用信号发送构造型图标和信号接收构造发送构造型图标和信号接收构造型图标表示信号事件。型图标表示信号事件。 n信号发送构造型图标是一个矩信号发送构造型图标是一个矩形的一侧为尖角,形的一侧为尖角,它代表一个信它代表一个信号的发送,其中含有发送子句。号的发送,其中含有发送子句。n信号信号接收构造型图标是一个矩接收构造型图标是一个矩形的一侧为凹角形的一侧为凹角,它代表一个信,它代表一个信号的接收,其中含有事
33、件名称。号的接收,其中含有事件名称。n例:例:信号发送与接收的构造型信号发送与接收的构造型图标,如图图标,如图10.13所示。所示。它是一它是一个微波炉工作的状态机图。个微波炉工作的状态机图。 Home10.1 状态机图状态机图转移事件转移事件图图10.10.13 信号发送与接收的构造型图标示例信号发送与接收的构造型图标示例 n(6)改变事件()改变事件(Change Event) n改变事件表示改变事件表示一个通知信息一个通知信息,通知某个条件已为,通知某个条件已为“真真”, 以触发一个转移。以触发一个转移。 n改变事件用关键字改变事件用关键字“when”说明,后面带有括在说明,后面带有括在
34、圆括圆括号中号中的布尔表达式,并且跟有动作,意指当该布尔表的布尔表达式,并且跟有动作,意指当该布尔表达式为真时,执行规定的动作,引起状态的转移。达式为真时,执行规定的动作,引起状态的转移。 n改变事件与保安条件不同。改变事件与保安条件不同。n保安条件在事件触发时求值,而改变事件是在条件为保安条件在事件触发时求值,而改变事件是在条件为真时被触发。当一个对象发生改变时,二者连续被检真时被触发。当一个对象发生改变时,二者连续被检查查。 Home10.1 状态机图状态机图转移事件转移事件n(7)时间事件()时间事件(Time Event) n时间事件表示一个时间事件表示一个通知信息,通知自从进入状态以
35、来某个时间期通知信息,通知自从进入状态以来某个时间期限已到,或者已经到了某个特定的日期限已到,或者已经到了某个特定的日期/时间,以触发一个转移时间,以触发一个转移。n时间事件用关键字时间事件用关键字“after”说明,带有括在说明,带有括在圆括号中的时间表圆括号中的时间表达式达式,并且后跟动作。,并且后跟动作。 n例:时间事件与改变事件的示例,如图例:时间事件与改变事件的示例,如图10.14所示。所示。 Home10.1 状态机图状态机图转移事件转移事件图图10.10.14 时间事件与改变事件示例时间事件与改变事件示例 n(8)延迟事件()延迟事件(Deferred Event) n延迟事件是
36、延迟事件是在本状态不处理、推迟或排队等到另外一个状态才在本状态不处理、推迟或排队等到另外一个状态才处理的事件。处理的事件。 n延迟事件需要在状态的图标中列出延迟事件名,其后跟一个斜延迟事件需要在状态的图标中列出延迟事件名,其后跟一个斜杠杠“/”和特定的动作和特定的动作“defer”。 n例:在图例:在图10.6的状态的状态“键入口令键入口令”中的事件中的事件“setTest / defer”是是一个延迟事件,说明事件一个延迟事件,说明事件“setTest”(设置测试)在本状态中不(设置测试)在本状态中不响应,推迟到另外一个状态才处理。响应,推迟到另外一个状态才处理。 n在建立状态机图时,将会发
37、现许多事件,其中有些事件可以作在建立状态机图时,将会发现许多事件,其中有些事件可以作为状态转移的事件触发子;另一些事件意义不大,可以忽略;还为状态转移的事件触发子;另一些事件意义不大,可以忽略;还有一些事件可以延迟到以后再起作用。有一些事件可以延迟到以后再起作用。 Home10.1 状态机图状态机图转移事件转移事件n条件(保安条件)是条件(保安条件)是为触发转移必须满足的条件。为触发转移必须满足的条件。n一个状态的转移可能是自动发生的,也可能是在满足某个条件一个状态的转移可能是自动发生的,也可能是在满足某个条件的情况下发生的。当转移按照判定而分支时,条件是判定的依据。的情况下发生的。当转移按照
38、判定而分支时,条件是判定的依据。 n条件一般用一个布尔表达式表示,可能涉及到正在触发的事件条件一般用一个布尔表达式表示,可能涉及到正在触发的事件的参数和属性。的参数和属性。 n在事件发生时,一个条件对于一个转移只求值一次。如果该转在事件发生时,一个条件对于一个转移只求值一次。如果该转移再次被触发,则该条件可以再次求值。移再次被触发,则该条件可以再次求值。 n例:条件示例,如图例:条件示例,如图10.15所示。所示。 Home10.1 状态机图状态机图转移条件转移条件图图10.10.15 条件示例条件示例 n动作动作是一组可执行语句或计算过程。一个动作可以包是一组可执行语句或计算过程。一个动作可
39、以包括操作调用,创建或销毁另一个对象,发送一个信号括操作调用,创建或销毁另一个对象,发送一个信号给另一个对象等。给另一个对象等。 n动作是动作是原子的、不可被中断的。原子的、不可被中断的。n动作可以有一个动作表达式,它由用逗号分隔的动作动作可以有一个动作表达式,它由用逗号分隔的动作子句表构成。子句表构成。 n动作子句的格式为:动作子句的格式为:n 动作子句动作子句 返回表返回表 := 操作名操作名 变量表变量表n动作子句是一个调用动作(动作子句是一个调用动作(Call Action),它引起对),它引起对一个操作的调用,当转移被触发时执行。一个操作的调用,当转移被触发时执行。n操作的返回值组成
40、返回表,该值应是随后的操作的实操作的返回值组成返回表,该值应是随后的操作的实在参数。在参数。 Home10.1 状态机图状态机图转移动作转移动作n动作的类型有动作的类型有:入口动作,出口动作,调用动作,延迟动作,:入口动作,出口动作,调用动作,延迟动作,创建动作,销毁动作,返回动作,终止动作,发送动作,本地调创建动作,销毁动作,返回动作,终止动作,发送动作,本地调用动作,例外动作等。用动作,例外动作等。 n入口动作和出口动作是在内部转移框中规定的,当进入或离开入口动作和出口动作是在内部转移框中规定的,当进入或离开该状态时执行的动作。该状态时执行的动作。 n标有关键字标有关键字“defer”的动
41、作称为延迟动作的动作称为延迟动作,用于延迟一个事件。,用于延迟一个事件。 n创建动作创建一个对象类的实例(对象),它没有目标对象。创建动作创建一个对象类的实例(对象),它没有目标对象。n销毁动作销毁一个对象类的实例(对象),它必须有目标对象。销毁动作销毁一个对象类的实例(对象),它必须有目标对象。n返回动作返回一个值或值集给调用者。返回动作返回一个值或值集给调用者。n终止动作引起对象的自析构(终止动作引起对象的自析构(Self-Destruction),即自动销毁,),即自动销毁,结束对象的生存。结束对象的生存。 Home10.1 状态机图状态机图转移动作转移动作n发送动作异步发送一个信号发送
42、动作异步发送一个信号。发送动作可用专门发送子句表发送动作可用专门发送子句表示,其图形形式如图示,其图形形式如图10.16所示。所示。n发送动作还可以利用信号发送发送动作还可以利用信号发送与接收的构造型图标,如图与接收的构造型图标,如图10.13 所示。所示。 n本地调用动作调用本地的操作,本地调用动作调用本地的操作,不产生调用事件或信号事件。不产生调用事件或信号事件。n例外动作在发生运行错误时发例外动作在发生运行错误时发出出错信号。出出错信号。 Home10.1 状态机图状态机图转移动作转移动作图图10.16 10.16 发送子句发送子句 n转移有多种类型:转移有多种类型:自转移、内部转移、自
43、动转移、复合转移自转移、内部转移、自动转移、复合转移等。等。n 1自转移(自转移(Self-Transition) n自转移是指那些源状态和目标状态是同一个状态的转移。自转移是指那些源状态和目标状态是同一个状态的转移。 n自转移中有入口事件和出口事件,分别调用状态的自转移中有入口事件和出口事件,分别调用状态的入口和出口入口和出口动作。动作。 n例:例:在图在图10.14中的中的“休闲休闲” 状态有一个自转移。状态有一个自转移。 n 2内部转移(内部转移(Internal Transition)n内部转移是指执行那些响应事件的内部动作或活动,但是对象内部转移是指执行那些响应事件的内部动作或活动,
44、但是对象的状态并不发生改变。的状态并不发生改变。 n内部转移与自转移不同内部转移与自转移不同。 Home10.1 状态机图状态机图转移的类型转移的类型n在状态的在状态的内部转移内部转移中需给出内部动作列表,其格式为:中需给出内部动作列表,其格式为:n 动作标签动作标签 / 动作表达式动作表达式n动作标签标识调用该动作的环境,动作表达式规定动作。动作标签标识调用该动作的环境,动作表达式规定动作。n动作表达式可以用拥有该动作的实体的任何属性和连接来构成。动作表达式可以用拥有该动作的实体的任何属性和连接来构成。动作表达式和其前面的斜杠动作表达式和其前面的斜杠“/”可以缺省。可以缺省。 nUML规定了
45、一些规定了一些专用的动作标签专用的动作标签,如:,如:entry、exit、do、include等。等。 n动作标签动作标签entry用于标识入口动作。用于标识入口动作。 n动作标签动作标签exit用于标识出口动作。用于标识出口动作。n动作标签动作标签do用于标识一个正在进行的活动,即用于标识一个正在进行的活动,即“do活动活动”。 n动作标签动作标签“include”用于标识一个子状态机图的引用用于标识一个子状态机图的引用。n除了这些专用的动作标签以外,一个动作标签用于标识一个事件,除了这些专用的动作标签以外,一个动作标签用于标识一个事件,它触发后跟的动作表达式。它触发后跟的动作表达式。n这
46、种事件称为内部转移,它的表示格式为:这种事件称为内部转移,它的表示格式为:n 事件名(参数表)事件名(参数表)保安条件保安条件 / 动作动作 Home10.1 状态机图状态机图转移的类型转移的类型n 3自动转移(自动转移(Automatic Transition)n自动转移又称为完成转移(自动转移又称为完成转移(Completion Transition)。)。n每个状态都可能有一个不由事件触发的转移,它是根据该状态每个状态都可能有一个不由事件触发的转移,它是根据该状态内的动作完成而自动触发的,内的动作完成而自动触发的,这就是自动转移。这就是自动转移。 n 4复合转移(复合转移(Compoun
47、d Transition)n复合转移由简单转移组成,这些复合转移由简单转移组成,这些简单转移通过分支判定简单转移通过分支判定、分叉、分叉或联结组合在一起。或联结组合在一起。n转移的分支如图转移的分支如图10.17所示。所示。 n在图在图10.17中给出了转移的分支的两种表示方式,一个使用了中给出了转移的分支的两种表示方式,一个使用了菱菱形的判定图标,一个没有使用菱形的判定图标,这两种表示方式形的判定图标,一个没有使用菱形的判定图标,这两种表示方式等价。等价。 n多条件的分支判定可以是链式的和非链式的,如图多条件的分支判定可以是链式的和非链式的,如图10.18所示。所示。 n当多个转移同时被触发
48、时将发生转移的冲突。此时需要用转移当多个转移同时被触发时将发生转移的冲突。此时需要用转移的优先级来解决。的优先级来解决。n子状态的转移的优先级比包含它的超状态的转移优先级高。子状态的转移的优先级比包含它的超状态的转移优先级高。 Home10.1 状态机图状态机图转移的类型转移的类型Home10.1 状态机图状态机图转移的类型转移的类型图图10.10.17 分支示例分支示例 图图10.10.18 链式分支和非链式分支链式分支和非链式分支 10.1 状态机图状态机图并发状态机图并发状态机图Home1 1 并发子状态并发子状态2 2 同步同步n并发子状态并发子状态用于表示两个或多个状态机图并行执行的
49、用于表示两个或多个状态机图并行执行的情况。情况。 n并发状态机图(并发状态机图(Concurrent State Machine Diagram)用于描述一个对象在某个时刻有多个并发的用于描述一个对象在某个时刻有多个并发的子状态机图的情况,并发状态机图是这些子状态机图子状态机图的情况,并发状态机图是这些子状态机图的组合。的组合。 n并发状态机图中的子状态机图各自有自己的初始状态并发状态机图中的子状态机图各自有自己的初始状态和终结状态,它们的活动并发进行和终结状态,它们的活动并发进行 。n并发状态机图适合描述一个对象有许多独立行为的情并发状态机图适合描述一个对象有许多独立行为的情况,可以把表达这
50、些个别行为的状态机图组合在一起,况,可以把表达这些个别行为的状态机图组合在一起,构成一个并发状态机图。构成一个并发状态机图。 n一个表示网上商店系统中的一个表示网上商店系统中的“订货订货”对象的并发状态机对象的并发状态机图,如图图,如图10.19 所示。所示。 Home10.1 状态机图状态机图并发子状态并发子状态n例:一个表示网上商店系统中的例:一个表示网上商店系统中的“订货订货”对象的并发状对象的并发状态机图,如图态机图,如图10.19所示。所示。 Home10.1 状态机图状态机图并发子状态并发子状态图图10.10.19 并发状态机图示例并发状态机图示例 n在并发状态机图中一个子状态机图
51、中的子状态,常常在并发状态机图中一个子状态机图中的子状态,常常需要与另一个子状态机图中的子状态的行为同步。需要与另一个子状态机图中的子状态的行为同步。 n同步状态(同步状态(Synch State)是一个伪状态)是一个伪状态,它和分叉、,它和分叉、联结一起表达两个并发的子状态机图之间的同步,保联结一起表达两个并发的子状态机图之间的同步,保证一个子状态机图在另一个子状态机图进入某个特定证一个子状态机图在另一个子状态机图进入某个特定的状态之前离开某个(某些)状态。的状态之前离开某个(某些)状态。 n同步状态用一个含同步状态用一个含星号星号“*”的小圆表示,同步状态的的小圆表示,同步状态的小圆图标放
52、在分隔子状态机图的虚线上。小圆图标放在分隔子状态机图的虚线上。n在小圆中也可以含一个正整数,表示同步状态的出转在小圆中也可以含一个正整数,表示同步状态的出转移的上界。移的上界。 Home10.1 状态机图状态机图同步同步n一个表示建筑住一个表示建筑住宅的并发状态机图,宅的并发状态机图,如图如图10.20所示。其所示。其中有两个子状态机中有两个子状态机图,分别代表住宅图,分别代表住宅主体工程施工和水主体工程施工和水电工程施工,它们电工程施工,它们是并行进行的。图是并行进行的。图中有两个同步状态。中有两个同步状态。 Home10.1 状态机图状态机图同步同步图图10.10.20 同步状态同步状态示
53、例示例 n在在UML中系统的动态行为的表示图形中系统的动态行为的表示图形有交互图、状有交互图、状态机图与活动图态机图与活动图等。等。n在对系统行为建模方面,状态机图与交互图、活动图在对系统行为建模方面,状态机图与交互图、活动图的侧重点是不同的。的侧重点是不同的。 n交互模型(顺序图与通信图)表示若干对象在一起工交互模型(顺序图与通信图)表示若干对象在一起工作完成某项服务。作完成某项服务。而状态机图则是为一个对象的生命而状态机图则是为一个对象的生命期间的情况建立模型。期间的情况建立模型。 n活动图描述活动的序列,对活动到活动的控制流建模,活动图描述活动的序列,对活动到活动的控制流建模,适合表达工
54、作流和并发的处理行为。而适合表达工作流和并发的处理行为。而状态机图表达状态机图表达状态机图,是对事件到事件的控制流建模。状态机图,是对事件到事件的控制流建模。 n状态机图可以表示一个对象的历史,引起一个状态向状态机图可以表示一个对象的历史,引起一个状态向另一个状态转移的事件,以及由于状态的转移而引发另一个状态转移的事件,以及由于状态的转移而引发的动作。的动作。 Home10.2 状态机图的应用状态机图的应用n状态机图适合描述状态机图适合描述一个对象穿越多个一个对象穿越多个Use Case的行为。的行为。n状态机图状态机图不适合描述不适合描述多个对象的协同行为。多个对象的协同行为。n使用状态机图
55、可以对使用状态机图可以对一个对象(类)的行为建模,也一个对象(类)的行为建模,也可以对一个子系统或整个系统的行为建模可以对一个子系统或整个系统的行为建模。 n状态机图更多的是应用在状态机图更多的是应用在实时系统实时系统建模中。建模中。 n建立状态机图可以参照建立状态机图可以参照下列步骤下列步骤:n(1)确确定定状状态态机机图图的的上上下下文文,它它可可以以是是一一个个类类、子子系系统或整个系统。统或整个系统。n(2)选择初始状态和终结状态。)选择初始状态和终结状态。n(3)发现对象的各种状态。)发现对象的各种状态。n(4)确定状态可能发生的转移。)确定状态可能发生的转移。 Home10.2 状
56、态机图的应用状态机图的应用n(5)把必要的动作加到状态或转移上。)把必要的动作加到状态或转移上。n(6)利利用用超超状状态态、子子状状态态、分分支支、历历史史状状态态等等概概念念组组织和简化一个复杂的状态机图。织和简化一个复杂的状态机图。n(7)分析状态的并发和同步情况。)分析状态的并发和同步情况。n(8)绘制状态机图。)绘制状态机图。n(9)确确认认每每一一个个状状态态在在某某个个事事件件组组合合之之下下都都是是可可到到达达的的。确确认认没没有有一一个个死死端端状状态态,对对象象不不能能从从该该状状态态转转移移出来。出来。 n例:用状态机图表现项目与资源管理系统例:用状态机图表现项目与资源管理系统PRMS和备和备份系统的总体系统状态与子状态,如图份系统的总体系统状态与子状态,如图10.21 、图、图10.22所示所示 。 Home10.2 状态机图的应用状态机图的应用n例:例: PRMS总体系统状态机图,如图总体系统状态机图,如图10.21所示。所示。Home10.2 状态机图的应用状态机图的应用图图10.10.21 PRMS系统总体状态机图系统总体状态机图 n例:例: PRMS系统子状态机图,如图系统子状态机图,如图10.22所示。所示。Home10.2 状态机图的应用状态机图的应用图图10.10.22 PRMS系统子状态机图系统子状态机图