我不懂关联类——UML类图

Mos*_*hma 4 uml class-diagram

在此输入图像描述

我似乎还没有完全理解关联类是如何工作的,为什么角色类属性不能只在人员类内部?

例如:

  • 姓名
  • 位置
  • 描述

zer*_*dge 7

假设我们生活在一个人必须在公司中发挥作用才能生存的世界,而公司可能根本没有人而存在。

如果这就是您想了解的关于人与公司之间关系的全部内容,即仅存在这种关系这一事实,仅此而已,您可以将其建模如下:

在此输入图像描述

然后,如果您还想捕获position角色descriptionPerson您可以使用所谓的 AssociationClass (Role我们的例子中):

在此输入图像描述

每个 的实例Role都有四个属性(属性和关联的结尾都是 UML 中的属性):

  1. 公司
  2. 位置
  3. 描述

例如,假设一个名叫Scott Tiger的人在两家公司( Food IncWater Ltd)中担任职务,并且每家公司都知道Scott Tiger在其中担任职务。然后将有两个实例Role(显示为元组):

(Food Inc., Scott Tigger, eater, eats here)
(Water Inc., Scott Tigger, drinker, drinks here)
Run Code Online (Sandbox Code Playgroud)

现在,回到你的问题,应该清楚的是,带有 , , 属性的实例实际上Person“缺少” ,如果你“添加” an你会得到, not !namepositiondescriptionCompanyCompanyRolePerson

因此,如果您建模Company并且Role一个人只是 的一个属性Role,那么您在问题末尾提出的建议是一个有效的设计:

在此输入图像描述

其内容如下: 的每个实例Company都有零个或多个Roles,并且 的每个实例Role只有一个Company。关联的两端都是可导航的,即Role知道它Company并且Company知道它的Roles。

第 9.5.3节中的UML 规范为您提供了以下建议:

属性可以表示分类器的属性、关联的memberEnd ,或者在某些情况下同时表示两者。

对于一般建模场景来说,一个有用的约定是,类型为 Class 的 Property 是关联端,而类型为 DataType 的属性则不是。UML 不强制执行此约定。