转移(Transition)

转移的标识符,带有开放箭头的实线,从源顶点画向目标顶点,源和目标是同一顶点。

源和目标顶点,可以是状态,可以是伪状态。

每个转换都可以指定三种可选的信息:触发器、守卫和影响,如果存在,这些信息会显示在一个字符串中,位于转换的上面或下面,

英文格式:<trigger>[<guard>] / <effect>

中文格式:<触发器>[<守卫条件>]/<影响>

转移可以有一个“名称”(Name)。如果有,会显示在最前面,如“名称:其它部分”。但似乎名称对一个转移来讲并不重要。

触发器(Trigger:一个转移可以有一个或多个触发器。如果有多个触发器,原则上这些触发器的事件类型应该相同的。

触发器的事件类型有五种:信号事件、调用事件、时间事件、变动事件和任何接收事件。事件在系统操作过程中的实例叫做事件发生,事件发生会触发状态之间的转换。

设置转移的触发器,通过转移连接节点的右键菜单“设置触发器”。点击菜单后,弹出如下界面:

注意:在转移的属性框中可以直接输入触发器的文字,或者在图中转移节点的文本框中直接输入文字。但是,如果你设置了触发器,则输入的文字是无效的;如果没有设置触发器,则按照你输入的文字。

守卫:守卫是一个布尔表达式,总是显示在方括号之间,那个表达式会在特定的时刻估值为真或为假,当状态机接受一个与触发器匹配的事件发生时,只有守卫在特定时刻为真,转换才会执行,如果为假,那么转换则不执行。但事件发生被消费,且不会对状态机产生任何改变。

影响:影响是在转换过程中执行的行为,和entryexitdo行为一样,或者是一个不透明表达式,或者是你在系统模型中某处定义的行为的名称,可以是一个活动,可以是一个交互,可以是一个状态机。

转换的影响是更大的行为序列的一部分,他们会在转换出发的时候执行,我们把那个行为序列叫做执行到完成步骤。执行到完成步骤从源状态的exit行为开始,接下来转换本身指定的effect行为,最后目标状态的entry行为。整个行为序列是原子和瞬时的,三个行为都是可选的。

外部转换:一个箭头从一种状态画到另一种(或者从一种状态回到本身),是外部转换。

内部转换:内部转换的字符串格式和外部转换一样,<trigger> [<guard>] / <effect>

标识法上的区别反映了内部转换和外部转换之间概念上的区别,当状态中的内部转换触发时,状态机并不会因为转换而脱离内种状态,这意味着内部转换和外部转换之间的另一个关键区别,当状态中的内部转换触发时,那个状态的exit行为和entry行为东渡不会执行,当内部转换触发的时候,惟一被执行的行为就是为那个内部转换指定的effect

成如上述,转移可能是一个复杂的过程,UML中提供了几个类型“动作”的符号,结合选择伪状态、控制流符号,可以说明一个复杂的转移过程。但是这些类似“动作”的符号,并非活动图中的动作元素,这些符号属于状态机而不是一个活动。

MBSES用户使用说明书