Pins

Pin代表了Action的一个输入或输出。InputPin代表输入,OutputPin代表输出Action拥有的输入和输出的每个集合都是有序的。Action的InputPins和OutputPins由Action的种类决定。

Pin是一种ObjectNode(参见15.4),因此它持有包含了特定类型值的对象tokens(参见15.2关于tokens)。InputPins中的tokens所持有的值为Action的执行提供输入数据,Action执行所产生的数据被封装在对象tokens中并放置于OutputPins。Pin还是一个MultiplicityElement。Pin的multiplicity约束了Action输入或输出中全部值的个数,而不是它所包含的tokens的数目(参见由ObjectNode继承而来的upperBound属性)。Pin可以持有不包含任何值的空tokens。Pin的multiplicity不具备唯一性,因为它可以持有具有相同值的多个tokens。

Pin从ObjectNode继承了ordering属性,从MultiplicityElement继承了isOrdered属性。这些属性值可以被独立地进行设置。但是,如果isOrdered为真,那么这些值的顺序就是他们被放置到Pin的顺序。ordering的值决定了以何种次序使用这些值。举个例子,如果isOrdered为真并且ordering是FIFO,那么这些值就以它们在MultiplicityElement中的次序被使用。如果ordering是LIFO,那么这些值就以MultiplicityElement次序的倒序进行使用。另一方面,如果isOrdered为假,那么这些值的使用次序是无法决定的,不同的ordering下的效果也是未定义的。

InputPin持有Action所需要的输入值。如果InputPins中的值少于multiplicity下限所定义的数目,那么Action就不能开始执行。multiplicity的上限决定了一次执行Action最多可以从InputPin消费的值的个数。被Action消费的Tokens会在Action启动执行后被立即从它的InputPins移除(除非是StructuredActivityNodes的情形,那里tokens可以在Action执行期中被一直保留在InputPins,参见16.11)。

OutputPin持有Action产生的输出值。对每一次执行来说,Action必须在OutputPins产生足够多(由其multiplicity的下限所需)的输出值后它才能终止自己。由之前的执行所产生的仍然存留在OutputPins的值不在本次计数之内。

ValuePins和ActionInputPins是InputPins,但是它们不用于决定是否Action能够执行。如果Action没有其他办法来执行,只是具有ValuePins或是ActionInputPins这样的输入是不会让它执行的。如果Action可以通过其他办法启动,那么在Action开始启动的时候,由ValuePins和ActionInutPins所指定的计算结果值作为输入提供给Action。

ValuePin通过运算一个ValueSpecification(例如,可以作为指定常数输入的简单方法)来提供值。当Action能够通过其它方法启动时,ValePin的ValueSpecification被求值,结果用作Action的输入。

ActionInputPin通过执行另一个Action来提供值。当Action可以通过其他方式启动时,其AcitonInputPins的fromActions也可以被启动。fromActions必须要在拥有该ActionInputPins的Action启动之前执行,并将自己的输出放置于相应的ActionInputPins。这个过程可能是(嵌套)迭代的。

results matching ""

    No results matching ""