9.5.4 表示法

如下为Properties定义了一般性表示法。

注意. 一些属性的特化可能还有额外的表示形式。它们在各自章节的表示法中进行介绍。

<property> ::= [<visibility>] [‘/’] <name> [‘:’ <prop-type>] [ ‘[’ <multiplicity-range> ‘]’ ] [‘=’ <default>] [‘{’ <prop-modifier> [‘,’ <prop-modifier>]* ‘}’]

其中:

  • <visibility>是属性的可见性。(参见VisibilityKind——7.4
    • <visibility> ::= ‘+’ | ‘-’ | ‘#’ | ‘~’ (分别对应public、private、protected、package)
  • ‘/’指示属性是衍生的。
  • <name>是属性名字,如果没有名字就是空串。
  • <prop-type>是属性类型的分类符名称。
  • <multiplicity-range>是属性的multiplicity区间。如果该项省略,暗示multiplicity是1。(参见MultiplicityElement——7.5
  • <default>是计算属性缺省值的表达式。
  • <prop-modifier>指示属性的一个修饰符。
    • <prop-modifier> ::= ‘readOnly’ | ‘union’ | ‘subsets’ <property-name> | ‘redefines’ <property-name> | ‘ordered’ | ‘unordered’ | ‘unique’ | ‘nonunique’ | ‘seq’ | ‘sequence’ | ‘id’ | <prop-constraint> 其中:
      • ‘readOnly’意味着属性只读。
      • ‘union’意味着属性是它的子集的一个衍生联合。
      • ‘subsets’ <property-name>意味着属性是由<property-name>所指属性的一个适当子集,其中<property-name>可能是限定的。
      • ‘redefines’ <property-name>意味着属性重定义了由<property-name>所指的被继承属性,其中<property-name>可能是限定的。
      • ‘ordered’意味着属性是有序的,即isOrdered=true。
      • ‘unordered’意味着属性是无序的,即isOrdered=false。
      • ‘unique’意味着该多值属性没有重复,即isUnique=true。
      • ‘nonunique’意味着该多值属性有重复,即isUnique=false。
      • ‘seq’或‘sequence’意味着该属性是一个有序包(bag),即isUnique=false并且isOrdered=true。
      • ‘id’意味着该属性是分类符标识的一部分。
      • <prop-constraint>是一个应用到该属性的约束表达式。

限定符的表示定义在11.5 Associations中。

属性的聚合表示定义在11.5 Associations中。

在分类符中,类型、可见性、缺省值、multiplicity、属性串可能被抑制显示,即使他们在模型中有值。

在分类符中,一个attribute的不同属性可能以列的形式表示,而不是连续的字符串。

在分类符中,属性还可以使用关联的表示法来表示,其中只有一个聚合的修饰(中空或填充的菱形)显示在肩头的尾部。

通过一个Property来使用一个ConnectableElementTemplateParameter来参数化一个模板分类符的表示法如下:

<connectable-element-template-parameter> ::= <property-name> ‘: Property’

9.5.5 示例

图9.11 Examples of attributes

图9.11中的属性解释如下:

  • ClassA::name是一个String类型的属性。
  • ClassA::shape是一个Rectangle类型的属性。
  • ClassA::size是一个Integer类型的、multiplicity为0..1的公开属性。
  • ClassA::area是一个只读的Integer型衍生属性。
  • ClassA::height是一个缺省值为5的Integer型属性。
  • ClassA::width是一个Integer型属性。
  • ClassB::id是一个重定义了ClassA::name的属性。
  • ClassB::shape是一个重定义了ClassA::shape的属性,它的类型是Square,是Rectangle的一个特化。
  • ClassB将size以从ClassA继承的方式显示,由它前面的插入号(参见9.2.4)指示。
  • ClassB::height重定义了ClassA::height。对于ClassB的实例它的缺省值是7,重载了ClassA中的缺省值5。
  • ClassB::width是一个重定义了ClassA::width的衍生属性,后者不是衍生的。

图9.12展示了一个使用关联表示法表示的属性。

图9.12 Association-like notation for attributes

results matching ""

    No results matching ""