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>是一个应用到该属性的约束表达式。
- <prop-modifier> ::= ‘readOnly’ | ‘union’ | ‘subsets’ <property-name> | ‘redefines’ <property-name> | ‘ordered’ | ‘unordered’ | ‘unique’ | ‘nonunique’ | ‘seq’ | ‘sequence’ | ‘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