Send Actions
发送Action会向1个或多个目标对象异步地发送一个对象。由于发送Action总是异步的,它可能有argument 输入,但它没有result 输出。一旦对象被发送,Action就执行完毕,不管对象是否被收到。
发送Action有三类:
- SendSignalAction创建一个Signal实例并把它发送给通过target InputPin获得的对象。SendSignalAction必须具有能够与所要发送的Signal的所有属性(自身的和继承的)相对应的argument InputPins,类型、次序、multiplicity都要一致。目标对象对Signal实例的处理在13.2.3中的Behavior Features和Methods有介绍,以及13.3.3中的Message Events中有介绍。
- BroadcastSignalAction使用从argument InputPins中获得的值创建一个Signal实例,这与SendSignalAction类似,所不同的是,BroadcastSiganlAction不是把这个Signal发给一个目标对象,而是系统中潜在的所有可用目标对象。本规范没有定义如何鉴别一个准确的目标对象集合,然而,这可以是所有存在对象的某个子集。
- SendObjectAction可以把任意类型的对象发送给通过target InputPin获得的对象。要发送的对象通过一个单一的请求InputPin获得。如果这个对象是一个Signal实例,那么目标对象对它的处理方式与SendSignalAction或BroadcastSignalAction是相同的。否则,所发送的对象只能由AnyReceiveEvent(在13.3.3中的Message Events中有描述)来处理。
对SendSignalAction和BroadcastSignalAction来说,argument InputPins需要与所要发送的Signal的Properties按序匹配。Signal自身的Properties是有序的,但Signal可能继承了来自其它Signal的Properties。在这种情况下,自身的Properties要排在继承的Properties之前。此外,如果Signal的两个祖先之间存在泛化关系,那么更加特化一些的Signal的自身Properties要排在更加泛化的Signal自身Properties之前。然而,在多继承情况下,多个祖先之间可能没有泛化关系,该情形下祖先的Properties没有定义标准的次序。
发送Action的目标对象可能是本地的,也可以是远程的。已发送的对象可能是个拷贝,因此它的ID可能被变化。发送对象的方式、所需要的时间、到达目标对象的时序和路径都是未定义的。