使用 Association Class 或仅使用 Association 箭头

Using Association Class or just Association arrow

我目前正在一起学习 OOP 和 UML,对于使用 association class 或仅使用 plain association[=35] 感到困惑=].假设 Company 雇用 Person,据我所知有两种关联方式,第一种方式只是常规类型的关联(我认为这是聚合)像这样。 Regular association

第二种方法是使用关联 class,有点像 ER 图,但是 Company class 不再有雇用任何 .

的责任

我的问题是:

  1. 哪个是正确的? (好像第二个比较有道理,但是第一个也没有错)
  2. 如果第一种方式没有错,那么公司不会对个人了解太多吗?
  3. 在什么情况下我会考虑使用 关联 class 而不是常规 关联

你的关联不是一个聚合,一个聚合有一个空的菱形(<>),所以它是一个简单的关联。

关联端的

None 即使在可导航时也有一个名称,那么如果您不想要 属性 为什么要使用关联而不是可能是依赖项?当然如果不是协会就不能有协会-class.

在classCompany中我们可以看到属性Employees,你确定你不想:

您将关联命名为操作(hire),当然可以,但是关联只是表示一种语义关系,所以hire不代表操作

正如@Axel Scheithauer in his in case of an association-class the name of the class and the name of the association are common properties and must not be duplicated so cannot be different, from formal/2017-12-05 § 11.5.3.2 协会 类 第 200 页所说:

Both Association and Class are Classifiers and hence have a set of common properties, like being able to have Features, having a name, etc. These properties are multiply inherited from the same construct (Classifier), and are not duplicated. Therefore, an AssociationClass has only one name, and has the set of Features that are defined for Classes and Associations.

关于使用关联还是关联-class这是一个选择。

如果您想知道公司雇用员工的日期和员工薪水(雇用时/当前),那么肯定关联-class 是一个很好的选择,清楚地表明您想要什么。

但您也可以将 Onboarding 作为关联 class 中的第三个 class 并在 3 个 class 之间建立关联:

你还可以将日期和薪水作为 Person 的属性,假设一个人是雇员所必需的 :

否则,您可以让 class Employee 继承 Person 并具有这些附加属性:

你有Java和C#作为标签,none这些语言支持association-class,所以即使你在实现时在UML中使用association-class在 Java / C# 中,您可能会使用其他两种解决方案之一。


因为没有双向导航,公司知道他的员工,但员工不知道 he/her 工作的公司,你真的想要吗?

我同意布鲁诺在他的回答中所说的一切。但是,我会添加第三种可能性:一个简单的 Class.

如果两个 class 之间的关系具有 属性 ,您有两个选择:关联 class 或与两个 class 关联的简单 class。采用关联 class 的唯一优势是,您可以指定两个关联 class 的每对实例只能链接一次。也就是说,每个人只能为同一家公司工作一次。这不太现实。为了允许多个链接,您需要为关联 class 的关联端指定 {non unique}{unique} 是默认值)。因此,只有在 {unique} 的情况下,关联 class 才添加语义。如果不需要,我会避免使用它。

补充说明:关联class是一个元素,但它在图中显示了两次,一次是矩形,第二次是一条线。由于它们表示相同的元素,因此名称必须相同。