Actions

Action是由一个Behavior所直接或间接包含的基本可执行功能单元。Action代表了所建模系统(不管是计算机系统还是其它的系统)中的一些转换或处理。Action的执行可能会导致调用另外一个Behavior(参见16.3中的调用Actions)。因此,从包含Action的Behavior的角度看,Action是简单的,但从实际的效果看,它可能是复杂且非原子的。

如果包含Action的Behavior有一个上下文BehavioredClassifier(参见13.2),那么此BehavioredClassifier也是Action的上下文Classifier。当Action执行时,它在一个该上下文Classifier的实例中执行,或者,如果没有上下文Classifier,那么就直接在所属Behavior的实例中执行。(参见13.2.3中对BehavioredClassifiers中上下文对象的讨论)

Action可以接受由InputPins指定的输入和生成由OutputPins指定的输出。每个Pin都为特定的输入或输出指定了类型和multiplicity。

Action的执行时机和所需的输入由Action的类型、InputPins的特征,以及所属Behavior来决定。一旦Action要执行,一般化的执行步骤如下:

  1. Action在所有的InputPins上接受输入数据直到达到每个InputPin的multiplicity上限。对于结构化的Actions(StructuredActivityNodes,参见16.11),数据可以在Action执行中仍然存留于InputPins,其它的会立即被ActionExecution消费并移除掉。如果该Action是一个使用流参数(参见13.2.3)的Behavior调用,那么该Action的执行会持续地消费由通过相关流InputPins提供的额外数据。否则,一旦Action开始执行,InputPins上的任何额外数据都对执行毫无效果。
  2. Action执行直到结束。Action执行的详细语义以及它对结束的定义取决与正在执行的Action的特定类型。
  3. 当执行完毕,Action将输出数据到OutputPins,然后终结。但如果Action是一个具有流参数的Behavior调用,那么Action也会在执行结束之前将数据以流的形式输出至相应的OutputPins(参见16.3.3关于InvocationActions的语义)。

  4. 注意.在Action执行终结后,它所占用的任何资源都会被执行引擎回收。但是,资源管理的详细内容是实现相关的,并未在本规范中定义。

在Actions的语义规范中,Behaviors可以多次复用同类的Action,Action的语义独立的适用于每一次。例如,Activities可能有多个具有相同Action元类的实例节点,每一个实例有自己的属性(下面介绍)值,它们只影响本次的Action使用。这与Interactions中使用具有相同Action元类的多个actions实例是一样的。

如果Action不是本地可重入的(isLocallyReentrant=false,缺省的),那么在任意时刻在所属Behavior的每次执行中至多只有Action的一个执行。即使Action通常可能要准备执行,这个新的执行在相同的Behavior执行中已经存在一个正在执行的该Action执行的时候,它可能不会开始,直到当前正在执行的Action终结。另一方面,如果Action是本地可重入的(isLocallyReentrant=true),那么新的执行可以在任意规则允许的情况下开始执行,即使当前相同的Behavior执行中已经有1个或多个该Action的执行。

对于不可重入Behavior的CallAction(isReentrant=true),其行为如同该CallAction是本地不可重入的,而不管它的isLocallyReentrant属性值为何。此外,当所指向的Behavior当前有正在运行的执行时,该Action将不会执行,不管这个Behavior是不是由这个Action还是其它的所调用(参见13.2.3关于isReentrant的语义和16.3.3中的CallAction)。

localPrecondition和localPostcondition是Action在开始执行时和结束时分别要满足的约束。由于localPreconditionlocalPostcondition是建模者定义的约束,违反了这些约束并不意外着Action执行的UML语义是未定义的。它们只是说明包括该Action的Behavior的执行轨迹没有符合建模者的预期(尽管大多数情况下这预示着严重的建模错误)。如何保证localPreconditionlocalPostcondition被满足并不在本规范中定义。执行引擎可以通过静态分析来进行检测(如果可以的话),或者是在运行时。运行时中的约束违反可能是一个错误,导致执行停止;亦或是一个警告,又或是没有任何效果,完全由执行引擎决定。

results matching ""

    No results matching ""