7.5 Types and Multiplicity

7.5.1 概要

Types和multiplicity用于对元素所包含的值的种类和数目进行约束。

7.5.2 抽象语法

图7.10 Abstract syntax of types and multiplicity elements

7.5.3 语义

Types and Typed Elements

Type指明所允许的值(即Type的实例)的集合。根据Type的种类,Type的实例可以随时间被创建或销毁。然而,Type实例的组成规则在特定的Type定义下是固定的。UML中的所有Types都是Classifiers(参见第9章)。

TypedElement是一个NamedElement,在某种程度上,它代表了特定的值。根据TypedElement的种类,它所代表的实际值可以随时间改变。TypedElement种类的例子包括ValueSpecification(它直接指明值的集合,参见第8章)和StructuralFeature(它代表了拥有它的Classifier实例的机构化部分的值,参见9.4)。

如果TypedElement有关联的Type,那么该TypedElement所代表的值(在任意时刻)都应该是给定Type的实例。没有关联Type的TypedElement(注:规范中写的是TypeElement)可以代表任意值。

Multiplicities

MultiplicityElement是一个可以被实例化为代表一组值的元素。根据MultiplicityElement的种类,该集合的值可以随时间而改变。MultiplicityElement种类的例子包括StructuralFeature(它具有拥有它的Classifier实例上下文的值,参见9.4)和Variable(具有在Activity执行上下文的值,参见15.2)。

集合的势(cardinality)是集合中所含值的数目。MultiplicityElement的multiplicity指明它所代表集合的有效的势。multiplicity是一个势约束,势不应该小于multiplicity的下限,也不应该大于其上限(除非multiplicity是无限的,此种情形下,对于上限没有约束)。

MultiplicityElement的multiplicity的上下限由ValueSpecifications(参见第8章)来定义,它们计算的结果必须是整数值(对于下限/lowerBound)和UnlimitedNatural值(对于上限/upperBound)。如果上限值是“*”,那么MultiplicityElement是无限的。如果上限大于1,那么MulitiplicityElement是多值的。如果MulitiplicityElemement最多只能代表一个单值,那么它就不是多值的。

MultiplicityElement可以定义上下限都是0。这限制势为0,即该元素的实例不包含值。这在范化(Generalizations,参见9.2)上下文下约束一个更加范化的Classifier的势是有用的。它适用于(但不限于)重定义更加一般化的Classifiers中已有的属性(properties)。

如果MulitiplictyElement被设置为有序(即isOrdered为真),那么该元素实例化的值集合是有序的。这种次序暗示了有一个从正整数到集合元素值的映射。如果MultiplicityElement不是多值的,那么isOrdered的值没有语义效果。

如果MultiplicityElement是无序的(即isOrdered为假),那么不能对该元素实例所含值的次序作假设。

如果MultiplicityElement被设置为唯一的(即isUnique为真),那么该元素实例所含的值必须唯一。也就是说,集合中的两个值不能相等,对象(Classes的实例)的相等性给予对象标识来判定,数据值(DataTypes的实例)和信号(Signal)实例的值基于值来判定(参见10.2/DataTypes,10.3/Signals和10.4/Classes)。如果Multiplicity不是多值的,那么isUnique的值没有语义效果。

isOrderedisUnique结合起来可以确定四类集合值。表7.1给出了它们的传统名称。

表7.1 MultiplicityElements的集合类型

isOrdered isUnique Collection Type
false true Set
true true OrderedSet
false false Bag
true false Sequence

7.5.4 表示法

Mulitiplicity Element

MultiplicityElement的特定表示法由每个具体的类型来定义。通常,它的表示法包括用于指明multiplicty边界和用于指示是否有序和唯一的文本规约。

multiplicity边界可以按如下格式展示:

<lower-bound> ‘..’ <upper-bound>

其中<lower-bound>是一个整型ValueSpecification,<upper-bound>_是一个UnlimitedNatural型ValueSpecification。规约中的星符号(*)用于代表一个无限的上界。

如果multiplicity与一个表示为文本字符串的MultiplicityElement(例如一个属性/attribute)关联,那么multiplicity字符串括在方括号([])中作为整个文本字符串的一部分。

如果与multiplicity关联的MultiplicityElement显示为一个符号(例如一个关联端),那么multiplicity字符串不需要方括号,靠近元素符号显示。 如果上下限相同,那么一种替代的表示是只显示上界字符串。例如,“1”与“1..1”是语义相同的。以0为下限上限未指定的multiplicity可以使用一个单一的星“”而非“0..”来表示。

次序&唯一性规约随特定类型的MultiplicityElement而不同。一种一般化的表示是使用“ordered”或“unordered”来定义次序,使用“unique”或“nonunique”来定义唯一性。

如下的BNF定义了multiplicity的一般性语法,包括对次序和唯一性指示符的支持:

<multiplicity> ::= <multiplicity-range> [ [ ‘{’ <order-designator> [‘,’ <uniqueness-designator> ] ‘}’ ] | 
                                          [ ‘{’ <uniqueness-designator> [‘,’ <order-designator> ] ‘}’ ] ]
<multiplicity-range> ::= [ <lower> ‘..’ ] <upper>
<lower> ::= <value-specification>
<upper> ::= <value-specification>
<order-designator> ::= ‘ordered’ | ‘unordered’
<uniqueness-designator> ::= ‘unique’ | ‘nonunique’

还可以参见[第8章]中ValueSpecification的文本表示。

7.5.5 示例

图7.11展示了在一个类符号中作为属性规约一部分的两个multiplicity字符串。

图7.11 Multiplicity within a textual specification

图7.12展示了两个作为关联端一部分的multiplicity字符串。

图7.12 Multiplicity as an adornment to a symbol

results matching ""

    No results matching ""