16.4.3 语义

Create Object Actions

CreateObjectAction创建一个给定Classifier的直接实例,并把该新实例放于result OutputPin,除此之外,无其它效用。特别的,没有Behavior被执行,缺省值的表达式不会被计算,StateMachine的transitions也不会被触发。该新实例的StructuralFeatures没有值,也不参与任何链接。

如果被实例化的Classifier是一个Behavior,那么实例化的对象就是该Behavior的一个执行。但该执行不会立即自动开始,它必须显式地由一个StartObjectBehaviorAction启动(参见16.3.3)。

Destroy Object Actions

DestroyObjectAction把一个位于target InputPin的对象销毁。这个对象可能是一个链接(link)对象,此种情况下,应用DestroyLinkAction(参见16.6)的语义。当对象被销毁后,它不再属于任何Classifier。除了下面要描述的isDestroyLinksisDestroyOwnedObjects外,该Action没有其它效用。特别的,没有行为被执行,没有状态机的transitions被触发,对已销毁对象的引用也不会改变(除了下面的isDestroyLinks)。引用一个已经被销毁的对象未在本规范中定义。

如果isDestroyLinks为真,那么对象参与的链接按照DestroyLinkAction的语义随对象一起被销毁,除非对象是link对象,它将按照DestroyObjectAction的语义被销毁,所有的属性值不发生改变。如果isDestroyOwnedObject为真,那么对象所包含的对象也会按照DestroyObjectAction的语义被销毁,该过程属性值不发生改变。

销毁一个已经销毁的对象没有任何效用。

Test Identity Actions

TestIdentityAction比较位于它的InputPins的两个值是否是同一个对象。如果这两个值表示相同的对象,则会在result Output产生一个布尔值true,否则false。

如果一个对象是1个或多个Classes的实例,那么检测它与另一个对象是否是相同的对象只取决于该对象的identity,而与对象当前StructuralFeatures的值和它所参与的链接无关(参见11.4.2)。

如果一个对象是1个或多个DataTypes的实例,那么检测它与另一对象是否是相同的对象取决与它们是否具有相同的值(参见10.2.3)。对于PrimitiveType,只是否相等取决与类型的定义,这超出UML的范围。对于Enumeration,EnumerationLiteral是否相等取决于是否是相同的EnumerationLiteral。除此之外,DataType的实例与另一个实例是否相同取决于它们是否是相同DataType的直接实例,并且在相应的属性上是否具有相同的值。

其它类型的实例(比如既是Classes,又是DataType的)间的相同性比较是未定义的,但不论何种情况,TestIdentityAction都会产生一个布尔值结果。

Read Self Actions

ReadSelfAction把当前Action执行的上下文对象放于它的result OutputPin。(关于上下文对象参见16.2.3

举个例子,如果ReadSelfAction被包含在一个Operation的方法Behavior中,那么它返回的上下文对象就是Operation宿主Classifier的实例。然而,如果ReadSelfAction被包含在一个不是BehavioredClassifer所拥有的Behavior中,那么上下文对象将会是这个Behavior的实例。

Value Specification Actions

ValueSpecificationAction计算一个ValueSpecification,并将结果值放置于result OutputPin。在ValueSpecificationAction中,可以使用一个LiteralSpecification来产生一个常量。在ValueSpecificationAction中使用一个InstanceValue与使用一个CreateObjectAction来创建一个实例类似,所不同的是可以使用InstaceValue的InstanceSpecification上的slots来给实例的StructuralFeatures赋值。

Read Extent Actions

ReadExtentAction读取一个Classifier的当前范围内的对象,并把它们放于result OutputPin。Classifier的当前范围是指任一时刻所存在的Classifier的所有实例(包括特化类的实例)。

通常,对于要实现读取分布在多处的Classifier的所有实例是不现实的。执行引擎通常只管理一小部分实例,但它可以为任意一个Classifier管理多个分布式的范围。对于ReadExtentAction读取的是哪一个范围内的实例是未定义的。

Reclassify Object Actions

ReclassifyObjectAction改变来自object InputPin对象所属的Classifier。它可能向对象添加贺移除一些Classifiers。一次可能添加或移除多个Classifiers。

Action执行后,输入对象将从属于每个newClassifier,而非oldClassifier。如果对象之前从属的任何Classifier不是一个oldClassifier,那么对象仍从属该Classifier。设置一个已从属的Classifier为newClassifier、设置一个输入对象不从属的Classifier为oldClassifier,或者设置一个既是newClassifier、又是oldClassifier的Classifier都不会产生任何效果。每个newClassifer都不应该是抽象的。

输入对象的ID在此过程中是保持不变的,此过程不执行任何行为,缺省值也不会被计算。newClassifiers在一个原子过程中替换现有的classifiers,因此如果oldClassifiers和newClassifiers具有相同的结构化特征和关联,它们的值(或链接)不会丢失。

如果isReplaceAll为真,那么对象所有现有的Classifiers在newClassifiers被添加之前都会被移除,除非输入对象的某个newClassifier已经是输入对象所从属的classifier,此种情况下该Classifier不会被移除。

移除一个对象的所有Classifiers而不添加任何新的效果是未定义的。

Read-Is-Classified-Object Actions

ReadIsClassifiedObjectAction判断从object InputPin输入的对象是否从属于某个给定的Classifier。如果从属,那么result OutputPin将会输出一个true,否则是false

如果isDirect为真,那么该对象是指定Classifier的直接实例;如果isDirect为假,那么该对象是制定Classifier(或其特化的Classifiers)的实例。

Start Classifier Behavior Actions

StartClassifierBehaviorAction启动来自object InputPin的对象的classierBehavior的执行。只要该Behaivor一启动,那么这个Action就会结束,此后该Behavior异步执行。如果该Behavior已经在运行,或者给定的对象没有一个classifierBehavior,那么StartClassifierBehaviorAction没有效果。

注意. 提供StartClassifierBehaviorAction是为了与之前版本的UML保持兼容。通常推荐使用StartObjectBehavior而不是StartClassifierBehaviorAction,因为前者允许传递参数来实现同步调用(参见16.3)。

results matching ""

    No results matching ""