11.5.3 语义

关联

关联规定了可以在类型实例间出现的语义关系。它有至少两个由属性所代表的memberEnds(成员端),每一个都具有端的类型。一个关联的多个端可能有相同的类型。

关联声明了在遵循或实现相关联的类型的类型实例间可能有的links(链接)。链接是一个元组,每个值用于关联中的每个成员端,其中每个值是类型遵循或实现了该端类型的实例。

并不是所有的链接都需要被关联所归类。

当关联的一个或多个端的isUnique=false时,可能会出现指向相同实例集的多个链接。在这种情况下,链接携带一个额外的来自它们的端值的标识符部分。

当关联的一个或多个端有序时,链接除了它们的端值外还携带排序信息。

对于有N个成员端的一个关联,选择任意的N-1个端,让组成另外一个端的属性称作oep,从而在所选定的N-1个端上的分类符就成为oep的上下文(参见9.5.3)。将特定实例与上下文端进行关联,那么指向这些特定实例的关联的链接集合将会在oep鉴别一组实例。oep所代表的值是一个从这组实例按照如下计算得出的集合(collection):实例组中的所有实例都出现在集合中,没有其它实例。如果oep被标记为唯一,每个实例在集合中只出现一次,不管有多少链接连接它。如果oep被标记为非唯一,对于每个链接到它的链接都会有一个实例出现在该集合中。如果oep被标记为有序,集合按照链接上的排序信息进行排序。这个集合的势是它的规模。oep的multiplicity约束这个势,或者在限定关联的情况下,约束关联到一个限定符值的集合分区的规模。

关联端的subsetting具有为属性规定的含义(参见9.5.3)。

相比subsetting,specialization是一个有意的语义范畴下的一个关系,也就是说它刻画了集合中成员关系被定义的条件,而不是通过成员关系。在关联的情况下,特化意味着被特化关联所分类的一个链接也被被特化的关联所分类。与以上,这暗示着从代表特化关联的集合中消除重复而得到的集合时从代表被特化关联的结合中消除重复而得到的集合的子集;这个subsetting的事实可能或可能不会再模型中显式的声明。

注意. 对于n元关联,通常一个端的multiplicity下限是0.n元关联的一端的multiplicity下限是1(或更大)意味着对于另一端值的每个可能组合都有一个(或更多)链接存在。

二元关联可能代表一个组合聚合(即,一个整体/部分关系)。组合是通过将关联的部分端的isComposite属性设置为真来表示的。参见9.5.3中组合的语义。如果关联是二元的并且在一端没有被标记为一个共享的或组合聚合。那么在另一个端可能只被标记为一个共享的或组合聚合。

关联的端属性被一个端类所拥有,或者它是关联的一个navigableOwnedEnd(指示该关联从对立端是可导航的);否则,关联不能从对立端进行导航。可导航性意味着在运行时参与连接的实例可以被关联的另一端的实例高效访问。这种高效性是如何实现的精确机制是实现特定的。如果一个端不可导航,那么可能不能从另一端来进行访问,或者如果可以访问的话,可能效率很差。

注意. 操作UML模型的工具不受关联可导航性的限制。

一个限定的关联端有限定符,它对与另一端进行关联的实例进行划分,即限定的实例。每个划分由一个限定符值所指定,它是一个元组,对于每个限定符都包含一个值。关联另一端的multiplicities决定每个划分中的实例数目。因此,举个例子,0..1意味着对于每个限定符值最多只能有一个实例。如果下限非0,限定符值必须是一个有限集合,举个例子,限定符是枚举。

关联的存在可能从模型中的其他信息衍生出来。这种关联的衍生和它的端的衍生之间的逻辑关系是特定于模型的。

关联类

AssociationClass(关联类)是一个关联,它有自身的一组特征。关联类既是关联又是类,它保留了两者的静态和动态语义。一个关联类描述了一组对象,它们共享该关联类作为类而拥有的相同的特征、约束和语义规约,以及该关联类作为一种关联所衍生的相应的唯一链接。

关联和类都是分类符,因此它们都有一组公共的属性,例如可以具有特征,有一个名称,等待。这些特征从相同的构造(分类符)多继承而来,但并不重复。因此,一个关联类只能有一个名称,并有一组为类和关联定义的特征。定义在类和关联上的约束也适用于关联类,这意味着,举个例子,关联类的属性、成员端,以及连接到该关联类的惯例的另一端必须具有唯一的名称。而且,用于定义类和关联上的特化和精化规则也适用于关联类。重定义可以应用于一个内嵌到一个分类符上下文的关联类因为它可以应用到一个内嵌类。

关联类继承了Class::ownedAttributeAssociation::ownedEnd组合属性。ownedAttribute的值是类中的属性,不包含该关联类通过Association::ownedEnd所拥有的端。Association::ownedEnd是该关联类所拥有的关联的端,不是该关联类的属性。作为关联端,它们可以像在关联中那样用于端对象之间的导航,这取决于它们是否可以导航(参见关联语义中的可导航性)。

关联类的实例具有它作为关联而代表该关联类的实例的链接的特点,也具有它作为类所代表的该关联类的实例的对象的特点。

注意. 即时当关联类中的所有端都有isUnique=true的时候,仍然有可能有多个实例关联端类的相同实例集合。

关联类不能是一个关联或一个类的泛化。

results matching ""

    No results matching ""