在UML中,什么是一元关联?

3

我在搜索理解一元关联时,得到了以下两个解释:

第一个解释是:

一元关系是指关系中的两个参与者是同一实体。例如:某些课程可能是其他课程的先修课程,或者一个员工管理着多个员工。

第二个解释是:

B类知道A类。

A类不知道B类。

现在让我们看下面的例子:

您可以在下面看到“人”和“地址”的关系。我们将这种关系称为具有关系,因为人具有地址。所以人知道地址,但地址不知道任何关于人的信息。

我是否有什么误解?


你的第二个解释与一元关联根本没有关系。 - Geert Bellekens
@GeertBellekens,非常感谢您的评论。我看了几个SlideShare和YouTube视频,使用第二种解释来说明一元关联关系,所以让我感到非常困惑。 - ralhanani
1
一元的定义:具有、由或作用于单个元素、项或组件。因此,这显然是关于仅涉及单个元素的关联的。不要与单向混淆。 - Geert Bellekens
1
UML中的关联可以是二元或n元的。什么是一元关联?是指连接到空无一物的连接器吗? - qwerty_so
2个回答

3

常用语言

一个关联的 arity 指与多少个类相关联。这是一个模糊的概念,因为有些人理解不同的类,而另一些人则理解实例。

当应用于单元时,第一种解释意味着反射关联(或自我关联,即一个与其自身相关联的类),而第二种解释意味着一个与任何东西都没有关联的类(并不是很有用:任何类都可以与其他类没有关联)。

UML 视角

幸运的是,UML 规范比常用语言更加精确:

一个关联指定了可以在类型化实例之间发生的语义关系。它有 至少两个成员端点,由属性表示,每个属性具有端点的类型。关联的多个端点可以具有相同的类型

在UML中没有"一元关联"的概念,只有二元、三元或者n元(规范中使用的术语)。在UML中没有特定的术语用于描述两端均为同一类的二元关联。但是自反或自关联是比一元更常用的术语。
E/R建模中,“一元”这个术语在描述关系型数据库中的关系时很常见。关系与UML中的关联类似,实体与类相似,但是存在一些微妙的语义差异。 E/R建模基于集合论。如果一个关系是在相同的实体之间,则实际上只涉及到一个集合。这可能是为什么在这个上下文中“一元”更常用的原因。

2

韦氏词典将Unary定义为:

仅有一个元素、项目或组件的,由一个元素、项目或组件组成的或作用于单个元素、项目或组件的

因此,第一个解释是正确的,因为这种关联只作用于一个类。然而,在UML中并不使用术语“Unary”,这可能会让人感到困惑。
UML使用术语binary来表示关联具有两个端点,ternaryn-ary则表示关联具有多个端点。 你所谈论的Unary关联实际上是一种二元关联,也称为reflexive关联。

enter image description here

不要与Unidirectional关联混淆,后者是一种只能从一个方向导航(有箭头)的关联。

enter image description here


1
我认为第一个不能被称为一元的。它仍然是二元的,因为它有两个端点。就像香肠(著名的德国笑话歌曲)。 - qwerty_so
@qwerty_so 是的,但是“unary”似乎有时用于描述与同一类的二元关联。 - Geert Bellekens
@GeertBellekens,“一元”这个术语在ERD上下文中很流行。然而,即使在那里,它也是具有误导性的;为了解释这一点,可以举一个类比:+是一个二元操作,但是没有人(我希望)会声称1 + 1是一种一元操作,只是因为两边都是相同的数字。在UML上下文中,该术语与规范相矛盾(并且没有单独提到一元)。对于图形说明和消歧义,给予加分。 - Christophe
@Christophe 感谢您的建议。我已经添加了更多关于“一元”的解释。 - Geert Bellekens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接