对象流

对象tokens流经对象流,通过它们的值携带数据,或者不携带数据(空tokens)。空token也可以流经对象流并且与其它的token一样使用。举个例子,一个动作可以输出一个空token以显式地指出它没有产出一个可选的值,并且下游的决策节点(参见15.3)可以对此进行检测并相应做出分支。

对象流可以有一个transformation(转换)行为,它有一个输入参数和一个输出参数。如果规定了转换行为,那么对于每个提交给该边的token,都会调用该行为,使用token中的值作为它的输入(对于空token,该行为也被调用但无值传递)。该行为输出一个对象token交付给目标活动节点,替代原始的对象token。如果输出参数的multiplicity上限大于1,并且转换行为产生了多个值,那么每个值都放于一个单独的对象token,它们都被传递给目标活动节点(如果输出参数是有序的,这个次序也被保持)。如果输出参数的multiplicity下限为0并且没有产生值,那么就向目标节点交付一个空token。

对象流可以有一个selection(选择)行为,它有一个输入参数和一个输出参数。输入参数必须是无序的、非唯一的,并且multiplicity为0..*;输出参数的multiplicity上限为1。如果规定了选择行为,它用于从源对象节点向对象流交付一个token,而不使用对象节点的次序。每当对象流被提交一个新token、或者提交被撤销时,选择行为被调用,所有当前正在提交给对象流的对象tokens都传送给该行为做人输入参数。选择行为应该从中选择一个值作为输出。这个输出值被放于一个对象token中交付给目标活动节点。如果选择行为没有产生一个输出,那么传送给目标节点一个空token。

如果对象流既有转换行为又有选择行为,那么当有新token提交给对象流时先调用转换行为,产生的结果值用于选择行为的调用。

由于转换或选择行为用于tokens提交给目标节点,相同的token在被目标节点所接受之前可能多次参与行为。这意味着这些行为不能有副作用。它不应该修改对象,但是转换行为可能,举个例子,遍历对象,从一个对象获取一个属性值,或者用另一值替换一个数据。

多播和多收与ActivityPartitions(活动分区)联合使用来建模行为间的流,这些行为是一个由发布-订阅机制决定的对象的职责。然而,本标准没有规定特定的发布/订阅语义。(因此,为了支持执行,模型必须被精化以规定所使用的特定的发布/订阅机制。)这在图15.7中说明。

results matching ""

    No results matching ""