9.4.3 语义

Features

每个特征都与一个称之为它的featuringClassifier的分类符相关联。除了用作qualifiers(限定符,参见9.5.3)的特征外,特征代表了它的featuringClassifer的一些结构化或行为特点。

isStatic属性指明该特征是与分类符的单独示例相关(isStatic=false)还是和分类符自身相关(isStatic=true)。与特征相关的所有语义除非显示的说明都应该被视为指的是非静态特征。对于静态特征,如果没有显示的语义说明,它们的语义就是未定义的。

Structural Features

StructuralFeature(结构化特征)是分类符的有类型Feature,指明分类符实例的结构。

对于分类符的每个实例,每个直接或继承的非静态属性(attribute)都有一个值或一组值:

  • 如果属性的multiplicity是0..1,应该最多有一个值,其类型遵循属性的类型。
  • 如果属性的multiplicity是1..1,应该有一个单值,其类型遵循属性的类型。
  • 如果属性的multiplicity是j..k其中k不是1,应该有一组值,其数目不小于j且不大于k,每个值的类型遵循属性的类型。
  • 如果属性的multiplicity是0..0,不应该有值。

如果一个StructuralFeature是静态的(isStatic=true),那么上述点号所指的是在某些执行区域内可以独自区分的分类符自身,而不是独立的实例。(参见6.3.1对执行区域的讨论。

在一个语义上遵循本规范的工具中,每个被继承的静态结构化特征应该具有如下二者之一的语义:

  1. 在一个执行区域内,任意继承分类符过和拥有该特征的分类符的结构化特征的值都是相同的。该语义对应Java和C#中的静态成员。
  2. 在一个执行区域内,拥有该特征的分类符和每个继承的分类符都有一个独立的该结构化特征的值。该语义对应Ruby和SmallTalk中的类实例变量。

如果一个结构和特征被标记为只读(isReadOnly为真),那么一旦它被赋一个初始化的值后就不可再修改。相应的,当isReadOnly为假时,值可以被修改。

Behavioral Features

非静态的BehavioralFeature(行为特征)指明它的featuringClassifier的实例可以通过执行一个特定的行为相应来对该行为特征的调用做出反应。行为特征的子类对分类符的行为方面进行建模。

当行为特征被调用时,ownedParameters列表描述了所需参数的次序、类型和方向,以及调用完成后哪些是输出和返回参数。

具有in或inout方向的ownedParameters是需要在行为特征调用时提供给它的。具有out、inout方向或return的ownedParameters应该可以从一个成功的调用输出和返回。

行为特征在调用过程中可能会抛出一个异常。可能的异常类型可以通过使用raisedException关联把它们附加到行为特征上来指定。

定义行为特征的行为响应的一个方法是指定1个或多个行为作为实现该行为特征的方法(methods)。从而对该行为特征的调用会导致1个与之关联的方法的执行(参见13.2中对行为的进一步讨论)。isAbstract属性为真指明该行为特征没有实现它的方法,从而期望通过一个更加具体的元素来提供一个实现。

concurrency属性指明对相同实例并发调用的语义。它的类型是CallConcurrencyKind,是一个具有如下字面量的枚举:

  • sequential:该行为特征没有与之关联的并发关联机制,因此,可能会发生并发冲突。调用该行为特征的实例需要协调以保障目标对象上对行为特征的调用一次只能有一个。
  • guarded:可能在1个实例上有一个行为特征的多个调用在时间上是重叠的(overlap),但只允许1个开始。其它的被阻塞直到当前执行的行为特征执行完毕。由系统的设计者来确保阻塞不会导致死锁。
  • concurrent:在一个实例上对一个行为特征的多个调用可以在时间上是重叠的,它们可以并发进行。

    Parameters

    参数是调用一个行为特征是需要传入或传出的信息的规约。参数的类型和multiplicity限定了允许传输的值、数目以及它们是否有序。Multiplicity定义了参数运行时传递值个数的下限和上限。下限为0意味着该参数是可选的。使用该参数的Actions可以在可选参数没有值的情况下执行。下限大于0意味着参数值是必需的。

如果参数指定了缺省值(defaultValue),那么在该行为特征被调用的时候,如果没有为该参数提供一个值,那么就会采用该缺省值。

参数可能给定了一个名字,它用于在相同的行为特征的参数中唯一的鉴别该参数。如果没有给出名称,那么只能通过它在有序参数列表的位置来区分。

direction属性指明参数是传入、传出,或二者兼而有之。它的类型是ParameterDirectionKind,具有如下字面量的枚举:

  • in:由调用者传入
  • inout:由调用者传入,并传出给调用者
  • out:传出给调用者
  • return:作为返回值返回给调用者

一个行为特征至多有一个return参数。

效果(effect)属性用来指示作为参数传递的对象上产生的效果。它不适用于数据类型的参数,因为它们没有标识来检测变化。它是建模者意图的一个声明,该意图必须与具有该效果的行为相一致。不管是否指定了一个效果,在执行时可以出现多个效果。举个例子,一个更新效果并不排除在当前的执行中进行读取;没有指定效果并不阻止当前执行发生的任何效果。效果通过使用类型为ParameterEffectKind的枚举来指定,它具有如下字面量:

  • create:对象作为参数值从行为的执行传出,在执行开始之前该值不存在。
  • read:作为参数值的对象在行为执行过程中读取了它们的属性值,或它们参与的链接,或它们的分类符。
  • update:作为参数值的对象在行为执行过程中改变了它们的属性值,或者它们参与的链接,或者是它们的分类。
  • delete:作为参数值的对象在行为执行后不存在。

只有in和inout参数可以具有delete效果。只有out、inout和return参数可以具有create效果。

isException属性应用于输出参数。一个带有isException为真的输出在提交给一个参数时会阻止相同执行的其它输出被提交。这样一个异常参数的类型可以被加入到raisedException集合,但这不是必须的。

isStram属性指示参数是个流。一个流参数表达了一种期望,那就是任意实现了该特征的行为都会在该参数上表现出一种流行为——参见13.2。当参数被指定为流而实现的行为没有表现出流行为,这样的语义是未定义的。

行为特征所拥有的参数集(ParameterSet)为实现了该行为特征的行为提供了可能使用的、不同的输入或输出集合。一个参数集中的参数要么都是输入要么都是输出:都是输入的参数集称为一个输入参数集,都是输出的参数集称为输出参数集。

具有输入参数集的行为在每次调用中可能只接受来自其中一个输入集的参数集。具有输出参数集的行为在每次调用时可能只向一个输出集中的参数进行输出。行为特征的输入和输出参数集上的conditions的语义与操作的前置条件和后置条件的语义是相同的,但它们只应用于从具有condition的参数集接受输入或向其返回输出的调用。 参数集更具体的语义和示例在16.3中。

results matching ""

    No results matching ""