假设我们生活在一个人必须在公司中发挥作用才能生存的世界,而公司可能根本没有人而存在。
如果这就是您想了解的关于人与公司之间关系的全部内容,即仅存在这种关系这一事实,仅此而已,您可以将其建模如下:
然后,如果您还想捕获的 position角色description,Person您可以使用所谓的 AssociationClass (在Role我们的例子中):
每个 的实例Role都有四个属性(属性和关联的结尾都是 UML 中的属性):
例如,假设一个名叫Scott Tiger的人在两家公司( Food Inc和Water 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 不强制执行此约定。