伪状态和伪状态种类

伪状态是一种抽象,它包括状态机图中不同类型的瞬时顶点。伪状态通常用于把多个转变链接到更加复杂的复合转变中(参见下面)。例如,通过合并一个转变进入一个fork伪状态和一组转变离开这个伪状态,我们可以得到一个能够进入一组正交区域的复合转变。

伪状态的特定语义依赖于它们的种类,通过类型为PseudostateKind的kind属性值来定义。下面描述了不同的种类和它们的语义:

  • initial——代表了一个区域的起始点;也就是说,当区域通过缺省激活被进入时,它是区域所含行为开始执行的起点。它是最多一条转变的,该转变可以有关联的effect行为,但不能有关联的triggerguard。在一个区域中最多只能有一个初始顶点。
  • deepHistory——该类伪状态是一种变量,它代表了所属区域中最近活跃状态配置。按照之前的解释,终结在此类伪状态上的转变意味着恢复区域到之前的相同状态配置,但是进入状态的所有语义都要执行(参见描述状态进入的子条款)。在所复原的状态配置中所有状态的入口行为都要按顺序执行,最外层的先执行。深历史伪状态只能被定义在组合状态上,并且一个区域中最多只能有一个这样的伪状态。
  • shallowHistory——按照之前的解释,该类伪状态是一种变量,它代表了所属区域最近的活跃子状态,而不是那个子状态的子状态。终结在这个伪状态上的转变意味着将区域复原到那个子状态并执行所有进入一个状态的语义。可以从此伪状态定义一个流出的转变使其终结在组合状态的一个子状态上。这个子状态就是该组合状态的缺省浅历史状态。浅历史伪状态只能定义在组合状态上,并且每个区域最多只能有一个这样的伪状态。
  • join——此类伪状态为源自不同正交区域中顶点的两条或更多转变充当了一个公共的目标顶点。终结在join伪状态上的转变不能有guardtrigger。类似Petri网中的接合点,join伪状态执行了一个同步的功能,其中所有的到来转变都必须完成才能继续执行一个流出的转变。
  • fork——将一条到来的转变划分为两条或更多终结到正交区域中顶点的转变。从fork伪状态流出的转变不能有guardtrigger
  • junction——此类伪状态用于把多条转变连接到状态之间的复合路径上。举个例子,一个junction伪状态可以用于把多个到来的转变合并到一个单一的流出转变来代表一个共享的通信路径。或者,它可以用于将一条到来的转变划分为具有不同guard约束的流出转变。
    注意. 这些guard约束的计算在包含该伪状态的复合转变执行之前执行,这也是为什么它们被称为静态条件分支的原因。
    对于特定的复合转变,可能出现转变路径的配置和guard值导致复合转变不能达到一个有效的状态配置。这种情况下,整个复合转变被禁止即使它的触发器是使能的(作为避免出现此类情况的一种手段,可以在至多一条流出转变上附加一个指示为“else”的预定义guard。如果其它转变的所有guards为假,那么这条转变变为使能)。如果有多余一个的guard为真,只选择一个,选择算法没有定义。
  • choice——此类伪状态与junction类似,不同在于它的所有流出转变上的guard约束是动态计算的,在复合转变到达这个伪状态时才计算。因此,choice用于实现动态的条件分支。它允许把复合转变划分为多条可选的路径,对路径的选择决策依赖于到达该选择点之前相同复合转变上执行的行为的结果。如果多于一个guard计算为真,其中一个转变被选择,选择算法没有被定义。如果没有guards计算为真,那么模型被认为是错误的。为了避免错误,推荐为每一个choice伪状态定义一个带有“else”预定义guard的流出转变。
  • entryPoint——入口点伪状态代表了一个状态机或者对内部状态或状态机进行了封装的一个组合状态的入口点。对于拥有该入口点的状态机或组合状态的每个区域,至多有一条源自该入口点的转变转接到该区域的一个顶点上。
    注意. 如果所属状态有entry行为,这个行为在任何与流出转变相关联的行为之前执行。如果涉及到多个区域,该入口点充当一个fork伪状态。
  • exitPoint——离开点伪状态是状态机或为内部状态或状态机提供了封装的组合状态的一个离开点。终结在任意区域内的一个离开点的转变意味着离开这个组合状态或子状态机状态(执行与之关联的exit行为)。如果来自正交区域的多条转变终结在这个伪状态上,那么它充当一个join伪状态。
  • terminate——进入一个terminate伪状态意味着状态机的执行立即终止。状态机不离开任何状态也不执行任何exit行为。正在执行的所有doAcitivity行为都被终止。进入一个terminate伪状态等同于调用一个DestroyObjectAction。

results matching ""

    No results matching ""