第六章 状态图
目录
1 状态图概述
2 状态图的基本符号
3 状态图的基本组成
状态的分类与描述
什么是状态(state)
对象生命期中的某个条件或状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。
理解
对象在任何时候都会处于某种状态中,所有对象都有状态。
对象所处的状态决定了它如何响应所检测到的事件或所接收的消息。
通常,事件使对象从一个状态转向另一个状态(即状态的转移)
状态分类
显示状态图执行的开始。一个状态图只能有一个初态。如果一个状态机用多张图描述,则多张图用同一个初态;嵌套状态中可以使用新的初态;
表示终端状态;
终态数目可以不确定。
一种特殊的事件,它是指该事件不会触发状态的转换,当对象处于该状态时事件不会丢失,但会被延迟执行。
例如,当E-mail程序中正在发送第一封邮件时,用户下达发送第二封邮件执令就会被延迟,但第一封邮件发送完成后,这封邮件就会被发送。这种事件就属于延迟事件
含有子状态的状态被称为嵌套状态。
一种伪状态。可以存储退出组合状态时所处的子状态,则返回组合状态时可以直接回到到相应的子状态。
状态迁移的触发与描述
某个特定事件发生或某些条件满足时,一个源状态下的对象完成一些特定动作,使得对象从源状态迁移到新状态。
格式: 事件[条件]/动作表达式 发送子句
事件(Event)
对一个时间和空间上占有一定位置的有意义的事情的规格说明。事件触发状态的转移
事件的描述格式: 事件名(参数表)
说明:
事件名:必须引用接收事件的对象类中的一个操
作或信号。
参数表:传送给该事件的形式参数,为任选项。
1)入(出)口事件
UML标准事件
以关键字entry(exit)说明,进入(退出)时执行
为隐式调用,不能中断执行
入(出口)为进入(退出)状态时最先(后)执行的动作序列,不带条件。
UML标准事件
以关键字do说明,在入口与出口事件之间执行
do引用嵌套子图的全部动作序列
执行可被中断。
UML标准事件
以关键字include说明,在入口与出口事件之间执行
标识内嵌子图的引用,后动作表达式含该子图名称
1)调用事件
对象之间,一个对象请求另一个对象的操作,标在迁移线上。
语法格式:事件名(参数表)
可以同步或异步调用
用发送/接收信号图符标识信号事件。
发出信号图符表明发出子句,接收信号图符含有事件名称。
时间事件,以“after(时间表达式)/动作” 说明。
括号内条件为真时执行
延迟事件,格式为“事件名/defer”。
本状态不处理,推迟到另一个状态才处理的事件。
改变事件,格式为“when(逻辑表达式)/动作” 。
条件为真时触发迁移。
迁移语法格式:
事件[条件] / 动作表达式 发送子句
条件是一个由方括号围起的关系或逻辑表达式。若状态迁移既有事件又有条件,则事件发生且条件成立时触发状态迁移。
迁移语法格式:
事件[条件] / 动作表达式 发送子句
动作表达式是一个触发状态迁移时可执行的过程表达式。表达式可引用该状态所表示的对象的属性、操作,或者事件参数。一个状态迁移可有多个动作表达式,但是必须用“/”隔开。动作表达式从左到右执行,不允许嵌套或递归。
例如: [计时器=超时]/下降(第一层)
状态迁移的分类
当进入一个状态时,执行某个动作;或当退出某个状态时,执行什么动作。这时就可以使用进入和退出转换来表示
状态图之间的通信联系
4 活动图与状态图比较
活动状态迁移不需要事件触发,活动执行完毕可以直接进入下一个活动状态。