三元关联相关的属性
Attributes related to ternary association
在 UML 中,属性 是关联端,可以由关联或参与分类器拥有,通常是 class。当 属性 由 class 拥有时,它被称为 属性 。例如,属性 Book::author
可以获得以下符号之一(其中应在右侧图表的作者关联端绘制一个点):
该属性可用于约束表达式,例如:self.author
或 mybook.author->count()
这对于二进制关联来说很简单。但我怀疑这如何与三元(或更一般的 N 元)关联一起使用,例如:
声明 Project
将具有属性 participant
和属性 role
是否正确,因为它们是关联的相反成员端?
并且考虑到 participant
和 role
不是独立的,如何在约束中利用它们的相关性,例如指代具有给定角色的贡献者,或者指代(participant,role)
-元组将其 ->count()
限制为小于 10?
当然,在您的示例中,Project::participant
或 Project::role
等属性对于表示三元链接没有任何意义。
UML 规范(在 11.4.3.1 类)指出
Attributes of a Class are Properties that are owned by the Class. Some of these attributes may represent the ends of binary Associations.
他们没有提到属性作为 non-binary 关联的末端的可能性。
在 11.5.4(第 202 页)中,正如@Christophe 所指出的,他们说
Ownership of Association ends by an associated Classifier may be indicated graphically by a small filled circle, which (...) we will term a dot.(...) The dot shows that the model includes a Property of the type (...). This Property is owned by the Classifier at the other end.
这里重要的概念是“另一端”,在规范的其他表述中也称为“对端”。这意味着关联必须有一个唯一的另一端。
因此,由于属性是对端分类器所拥有的关联端(=Properties),它们只能是二元关联的末端。
这意味着对于 n-ary 关联,参与的 类 不能拥有任何结束,因此不能具有(参考)属性,如 Project::participant
.
此外,使用常识:像 Project::participant
(或更好:Project::participants
)这样的属性的可能含义是什么?它可能旨在表示参与三元关联 Project
-Contributor
-Role
的 instance/link 的所有 Contributor
对象的集合。这可以使用 OCL 表达式定义为派生属性。但是不允许represent/implement/reconstruct三元关联。
在 OOP 中,您可以有一个像 Project::contributorByRole
这样的 属性,其值将从 Contributor
和 Role
的笛卡尔积中排序。这样一个属性represents/implements的三元关联。但是,据我所知,UML 没有定义 Cartesian Product 类型,因此不支持这样的 tuple-valued 属性。
对于 n-ary 关联,所有端点都必须由关联拥有,因此它们不是属性。
11.8.1.8 节有限制,所以,一目了然:
association_ends
Ends of Associations with more than two ends must be
owned by the Association itself.
inv: memberEnd->size() > 2 implies ownedEnd->includesAll(memberEnd)
在 UML 中,属性 是关联端,可以由关联或参与分类器拥有,通常是 class。当 属性 由 class 拥有时,它被称为 属性 。例如,属性 Book::author
可以获得以下符号之一(其中应在右侧图表的作者关联端绘制一个点):
该属性可用于约束表达式,例如:self.author
或 mybook.author->count()
这对于二进制关联来说很简单。但我怀疑这如何与三元(或更一般的 N 元)关联一起使用,例如:
声明 Project
将具有属性 participant
和属性 role
是否正确,因为它们是关联的相反成员端?
并且考虑到 participant
和 role
不是独立的,如何在约束中利用它们的相关性,例如指代具有给定角色的贡献者,或者指代(participant,role)
-元组将其 ->count()
限制为小于 10?
当然,在您的示例中,Project::participant
或 Project::role
等属性对于表示三元链接没有任何意义。
UML 规范(在 11.4.3.1 类)指出
Attributes of a Class are Properties that are owned by the Class. Some of these attributes may represent the ends of binary Associations.
他们没有提到属性作为 non-binary 关联的末端的可能性。
在 11.5.4(第 202 页)中,正如@Christophe 所指出的,他们说
Ownership of Association ends by an associated Classifier may be indicated graphically by a small filled circle, which (...) we will term a dot.(...) The dot shows that the model includes a Property of the type (...). This Property is owned by the Classifier at the other end.
这里重要的概念是“另一端”,在规范的其他表述中也称为“对端”。这意味着关联必须有一个唯一的另一端。
因此,由于属性是对端分类器所拥有的关联端(=Properties),它们只能是二元关联的末端。
这意味着对于 n-ary 关联,参与的 类 不能拥有任何结束,因此不能具有(参考)属性,如 Project::participant
.
此外,使用常识:像 Project::participant
(或更好:Project::participants
)这样的属性的可能含义是什么?它可能旨在表示参与三元关联 Project
-Contributor
-Role
的 instance/link 的所有 Contributor
对象的集合。这可以使用 OCL 表达式定义为派生属性。但是不允许represent/implement/reconstruct三元关联。
在 OOP 中,您可以有一个像 Project::contributorByRole
这样的 属性,其值将从 Contributor
和 Role
的笛卡尔积中排序。这样一个属性represents/implements的三元关联。但是,据我所知,UML 没有定义 Cartesian Product 类型,因此不支持这样的 tuple-valued 属性。
对于 n-ary 关联,所有端点都必须由关联拥有,因此它们不是属性。
11.8.1.8 节有限制,所以,一目了然:
association_ends
Ends of Associations with more than two ends must be owned by the Association itself.
inv: memberEnd->size() > 2 implies ownedEnd->includesAll(memberEnd)