15.4.3 语义

对象节点

在活动的执行过程中,ObjectNode(对象节点)持有对象tokens。除了输入的活动参数节点(后面介绍)外,对象节点所持有的tokens都是来自流入的活动边。除了输出的活动参数节点外,对象持有的tokens都要从流出活动边离开。一个token只能通过一个流出边。

一个对象节点可以持有具有相同值的多个对象tokens。这样的tokens通常不合并(但是请参见下面的数据存储节点的特殊语义)。

对象节点是类型化元素(参见7.3)。如果对象节点规定了类型,那么它所持有的任意对象tokens都应含有与此类型一致的值。如果没有规定类型,那么所含的值可以是任意类型。空tokens(不含值的tokens)满足所有对象节点的类型。

对象节点还可以指定一个状态集inState。如果规定了这么一个集合,那么该对象节点所持有的任意对象token所含有的值的类型应该拥有或继承了一个状态机作为其分类符行为,该状态机具有inState集合中所有的状态,并且它的给定值的实例应该处于一个包括inState集合中所规定的所有状态的一个状态配置(参见第14章状态机的意义)。

对象节点不能包含超过它的upperBound规定的更多tokens。如果对象节点有一个upperBound,那么这个值规约应该计算为一个无限自然数值。每当有token被交付或从对象节点中删除时就计算upperBound。如果对象节点已经含有的tokens数目大于或等于upperBound,那么它就不应该再接受任何tokens,直到它其中的一些被删除。如果它其中的一些tokens被移除导致tokens的数目小于upperBound,那么它就可以接受任何待定的交付直到达到upperBound。如果upperBound为*,那么对于该对象节点可持有的tokens没有数量上的限制。

对象节点的ordering规定了它接受tokens和把它们提交给流出活动边的次序。该属性具有如下的值:

  • unordered——没有定义次序。
  • FIFO——先进先出,tokens在提交给流出边时按照它们被节点所接受的顺序进行,在通过节点时不能反超。
  • LIFO——后进先出,tokens按照被节点所接受的相反顺序提交给流出边。
  • ordered——由建模者使用一个selection行为定义的次序(参见下面)。

当且仅当ordering=ordered时,对象节点可以有一个selection行为。该行为应用有一个输入参数和一个输出参数。输入参数的multiplicity必须是0..*、无序并且非唯一;而输出参数的multiplicity必须是1。如果对象节点没有规定类型,那么这些参数也应该为规定类型。否则,输入参数应该与对象节点的类型相同或者是它的超类,而输出参数的类型应该与对象节点的类型相同或是它的子类。

当要向流出边提交一个token的时候,执行对象节点的selection行为。对象节点上所有对象tokens含有的值都作为selection调用的输入。该行为选择其中一个值并将其返回。然后包含这个值的对象token被提交给对象节点的流出边。

对象节点上的选择行为可以被它的流出对象流上的选择行为所重载(参见15.2.3中关于对象流的选择行为)。

tokens由于次序的原因而反超与活动的每次调用都由一个单独的执行来处理(即isSingleExecution=false)是无关的。不同执行中的tokens没有交互,因为它们流经不同的执行,但是在单独执行中的多个tokens(可能是由于forks或是可执行节点的结果)可能由于次序而发生反超。

如果对象节点的isControlType=true,那么控制流可以成为对象节点的流入和从对象节点流出,其中的对象tokens可以沿控制流到达下游的对象节点。这些对象tokens中的值可用于影响对可执行节点的控制,但本规范没有定义这些值的特殊意义(参见15.5)。

results matching ""

    No results matching ""