下图:状态中包含的 入口动作、出口动作、活动;
下图:转换中包含的 事件、监护条件、动作;
重点讲:
1,状态:内部活动、内部转换、入口和出口动作;
2,转换;3,判定;4,同步;
一,状态
1,内部活动:(1)在进入动作完成后开始;(2)活动结束状态完成,转换被触发;
(注意:如果活动正在执行时转换触发,那么活动被迫结束并退出动作被执行)
2,内部转换:(1)只有原状态没有目标状态,所以内部转换不改变状态本身;
(2)激发一个内部转换和外部转换条件相同;
(3)优先级大于外部转换;
(4)与自转换的不同:自转换可以强制从嵌套状态退出,内部转换不能。
当状态向自身转换时,就可以用到内部转换。
例子:一个网站后台管理程序,管理员登陆后处于登录状态。它的入口动作是验证账号密码,出口动作是清除登录记录。当管理员在登录状态编辑资源时,可以使用内部转换,不触发动作和出口动作的执行。
3,入口动作和出口动作:
(1)目的:封装状态,这样就可以不用知道内部状态而在外部使用它;
(2)原则上依附于进入和出去的转换;(将其声明为特殊动作就可以不依赖于转换)
(3)入口动作:进入状态时执行。在转换上的动作之后,状态上的内部活动之前执行;
(4)出口动作:状态退出时执行。在内部活动完成后,离开转换上的动作之前执行;
二,转换
1,事件:触发事件引起状态转换;
2,监护条件:(1)一个布尔表达式;
(2)触发转换的必要条件;
(3)执行过程:事件被触发,监护条件被赋值;值为真,转换被激发;值为假,转换不被激发;
3,动作:
三,判定:一个事件依据不同的监护条件有不同的影响,产生了判定;相当于一个IF语句,情况分支;
四,同步:(1)工作流的分支与合并;
(2)先完成的工作要等待未完成的,直到所有工作流到达后(所有工作完成后)才能继续执行以下的工作流;
同步与判定的区别:
(1)判定根据监护条件分支,监护条件的取值最终只会触发一个分支的执行;
(例如:统计旅游报名人数,如果人数>60,则筹划省外旅游;如果人数<60,则筹划省内旅游;只能执行一个分支。报名人数不是大于60,就是小于60,不可能既大于又小于60)
(2)同步的不同分支是并发执行的,所有分支分支事件全部执行完后,合并。不会因为一个分支的执行造成其他分支的中断。