12.3.3语义

12.3.3.1 Profiles

如下所述,一个Profile是一个用于扩展UML的受限元模型。它的主要扩展结构体是Stereotype。

12.3.3.1.1 限制UML元素的可用性

metaclassReference元素引入和metamodelReference包引入可以用来规定Profile的过滤规则。该过滤规则决定了当该Profile被应用的时候哪些UML元素可用,哪些被隐藏。

注意:在模型上应用一个Profile并不会改变模型;它只是定义了一个底层模型视图。

元类被隐藏(不可用)的效果如下:

  • 不能创建该元类(或它的子类)的新实例。
  • 该元类(或它的子类)的现有实例不能在图中被看到或在列表中被选中,包括浏览器面板。
  • 该元类(或它的子类)的现有实例相关的联系不能在图中被看到或在列表中被选中,包括浏览器面板。

对于如何实现上述要求,工具可以有不同的选择——例如,工具可以把元类/实例在选择列表中完全隐藏起来或者把它们变灰不可用。

为了激活Profile中的过滤规则(进一步的描述如下),该Profile必须在严格模式(Strict)下被应用:把ProfileApplication的isStrict属性置为true;否则过滤规则会被无视。

最常见的情形是当一个Profile使用一个metamodelReference引入UML自身时。遵循本规范的工具可以在用户创建一个Profile时提供一个预置的功能来对此提供支持。此时,每个UML元类都是可用的。或者通过metaclassReferences来引入特定的元类,从而只有这些元类是可用的。更进一步的选择是使用一个或多个指向包含元素引入的包的metamodelReference来限定UML的元类子集。这使得该集合可以在多个Profiles重用而不用每次都指定单独的metaclassReferences。

当ElementImports被用做一个metaclassReference时,它的visibility和alias属性会被无视。

当既有metaclassReference又有metamodelReference在一个profile中出现时,后者会被无视而只有特定的元类是可用的。

细节上,如下的规则来用于决定当一个Profile被应用后某个模型元素是否可用。元类和它们的实例在如下情形可用:

  1. 通过一个显示的metaclassReference来引用,或
  2. 在没有metaclassReference的情况下,通过一个显示的metamodelReference直接或间接引用的包中的成员,或
  3. 被所应用的profile中的一个成员(Stereotype)所扩展(即使被扩展的元类不可用)。

在严格模式下,所有其它的模型元素都被隐藏(不可用)。

这使得对不重叠可用元类集合的profiles的组合应用是无效的。

如果Proflie P1引入了另一个Profile P2,那么所有metaclassReference和metamodelReference关联将会在P1级别被合并,过滤规则也应用在这个联合体上。使用ElementImport或PackageImport从另一个Profile引入的Stereotypes也加入到引入profile.profile内容的命名空间成员中。

Profile可以定义或引入类、关联、数据类型、基本类型、枚举,以及Stereotypes。遵循CMOF的元模型的所有约束都可以应用到一个UML Profile。这在MOF核心规范的14.4章节被定义。这些约束的效果是,除了Stereotys和Extensions,一个profile中定义的或引入的所有类型都必须是上述显示提到的类型,不允许有该集合之外的特化。术语Profile定义的类型(Profile-defined Type)对应于一个Profile中定义的或引入的遵循CMOF的类、关联、数据类型、基本类型或枚举。

Profile定义的类型只能用作属性的类型或者是另一个Profile定义的类型的泛化分类符。它们不能用作所应用到的模型中的类型,例如作为一个TypedElement的类型、一个实例规范的分类符或一个泛化关系中泛化的或特化的分类符。然而,可以把这些类型在单独的包中定义,然后在所需的Profiles和模型包中引入来使用它们。

Stereotypes只能参与二元关联。另一端的类可以是另一个Stereotype、一个非Stereotype类(是一个Profile的直接或间接的可打包元素),或一个UML元类。对于这些关联,必须有一个类型为另一端类的ownedAttribute属性。当另一端不是一个stereotype时,该属性必须是该关联自身的一个ownedMember,而不是另一端类/元类的。这些规则的效果是,Profile中的关联不必涉及一个Stereotype,不能同时拥有两个端。根据遵循CMOF元模型的约束,Profile定义的二元关联至多可以有一个端的聚合类型=AggregationKind::composite;其它端的聚合类型应该=AggregationKind::none。此外,Stereotype或Profile定义的类的属性只有在它的类型是一个Profile定义的类时才能具有组合聚合,而当它的类型是Profile定义的数据类型、基本类型或枚举时,Stereotype或Profile定义的类或数据类型的属性的聚合应该=AggregationKind::none。

工具能够提供的Profile功能的最直接实现是提供一个基于元模型的实现,类似Profile元模型。然而,这不是当前标准所必需的,当前标准只需要支持规范和基于XMI的标准的互换能力。Profile功能被设计为可以被一个没有基于元模型实现的工具所实现。实际上,任意在模型元素上附加新值的机制都可以作为一个有效的profile实现;然而,创建类似的值需要一个有限的类似元模型的功能来创建和引用Profile定义的类和数据类型和类型是这样的类或数据类型的值,以及引用Profile定义的类的实例和创建Profile定义的关联的链接实例。例如,UML1.4 profile元模型可以作为实现一个遵循UML2 proflie工具的基础。

results matching ""

    No results matching ""