变量
对象流为活动中数据移动提供了主要的方法。变量为间接的数据传递提供了另一种选择。
在活动执行中,活动的每个变量都持有一个或更多的值。可以通过动作把值写到变量中并在之后从变量中读取值(参见16.9)。活动作为命名空间,其中的变量是ownedMembers,但是它们对于活动是本地的,外部不可见。
变量的使用为从向变量写入值开始到所有从变量中读取值之间有效地提供了一条间接的数据流路径。因为在变量的写动作和读动作之间没有预先订阅的关系,所以这些动作必须由控制流来做顺序化处理以防止变量读写之间的竞争条件出现。
变量时一种可连接元素(参见11.2)和类型化元素(参见7.5)。变量持有的任意值必须符合变量的类型。
变量也是一个MultiplicityElement(参见7.5)。如果变量的上限是1,那么该变量只能持有一个单一的值。如果变量的上限大于1,那么变量可以持有多个值,直到其数目达到上限给定的最大值(或者是无限的)。如果变量的下限不是0,那么它应该至少持有下限给出的数目个值。然而,由于活动中向变量写入值的唯一方式是通过动作,有时不可能使其满足multiplicity下限。(对于变量multiplicity语义的进一步讨论,参见16.9中使用动作来读写变量的相关描述。)
注意. 引入变量是为了简化普通编程语言向活动模型的转换,因为有些应用中对象流信息可能是不可访问的。然而,只对变量进行一次设置的源程序可以很容易地转换为从动作中使用对象流来决定动作使用的值。对于对变量进行多次设置的源程序可以通过引入一个把变量作为所包含的属性的本地对象,或者每个变量一个对象并联合数据存储节点使用来转换到对象流。