Invocation Actions and Ports

CallOperation、SendSignalAction和SendObjectAction可以通过目标对象的一个Port向目标对象发送一个请求,后者通过Action的onPort属性鉴别到这个Port。其它类型的InvocationActions的onPort属性应该没有值。

如果设置了onPort,那么这个Port应该是Action的target InputPin 的类型所自有或继承的feature。当Action执行时,不是把消息发送到目标对象自身,而是通目标对象所给定的Port发送消息,然后按照11.3.3的方式来处理。这样的一条消息可以是通过Port的一个provided接口从外部被发送到目标对象内,也可以是通过Port的一个required接口从目标对象的内部发送出去。

说Action在一个对象内运行,指的是Action运行所从属的运行中的Behavior的上下文对象要么与该对象相同,要么直接或间接地(通过组合链接)被该对象所拥有。举个例子,这包括Action在给定对象或者该对象的一部分的某个methodclassifierBehavior中运行。

对于CallOperationAction,所给定的Port的providedrequired接口应该有所访问的Operation feature。对于object InputPin以Signal为类型的SendSignalAction或SendObjectAction来说,给定Port的providedrequired接口可以有一个既定Signal的Reception,但这不是必须的。不论何种情况,下面的规则中把相关的Operaiton或Reception(如果有的话)称为被调用的BehavioralFeature

  • 如果被调用的BehavioralFeature在一个provided接口上而不是在required接口上,那么当InvocationAction执行后,产生的调用通过指定的Port发送给由target InputPin指定的对象,对于该调用的处理参见11.3.3
    • 注意 这使得一个在目标对象内部执行的InvocationAction可以通过其自身Ports的一个provided接口向目标对象发送消息。
  • 如果被调用的BehavioralFeature发生在一个required接口而不是provided接口上,那么InvocationAction在由target InputPin指定的对象中运行的时候,调用按照11.3.3描述的那样通过给定的Port从目标对象转发出去。如果InvocationAction不是在目标对象内运行,那么该语义是未定义的。
  • 如果被调用的BehavioralFeature发生在一个既是provided又是required 接口上,或者就没有被调用的BehavioralFeature,那么当InvocationAction在由target InputPin指定的对象中执行时,调用通过给定的Port发生在目标对象之外。否则,调用通过给定的Port发生在目标对象内。
    • 注意. 此种情况下,如果InvocationAction在目标对象内执行,它不能向目标对象回发消息,因为这样的消息不能通过requried接口。然而,可以通过在给定的Port上建立一个与其自身相连的Connector来达到相同的效果。

还可以使用一个“交互点”对象(在Port中实例化的对象)作为CallOperationAction、SendSignalAction,或者是SendObjectAction的目标对象,而不用指定onPort。此种情况下,请求直接发送给了交互点,然后再Port的宿主中进行路由(参见11.3.3)。请求通过Port的一个provided接口进入交互点的宿主。

results matching ""

    No results matching ""