我不明白关联 class - UML class 图
I don't understand association class - UML class diagram
我似乎还没有完全理解关联 class 是如何工作的,为什么角色 class 属性不能只在人 class 内部?
例如:
人
- 名字
- 位置
- 描述
why the role class attributes can't just be inside the person class?
注意多重性 1..*
,如果将 position 和 description 移动到 Person 你必须管理它们的集合并将每个关联到相应的 Company.
[根据您的评论]
对于给定的人,职位和描述取决于每个关联的Compagny,所以不可能有你建议的字段,除非 position 和 description 都是一个集合,并有一个 way/rule 来知道 position 和 description 中的哪个条目对应于正确的 Compagny.
在 Person 中也移动这些信息你删除了对称性,也可以在 Compagny 中移动这些信息,与关于 Person
的备注
关联class既是class又是关系,当你用C++或Java等语言实现它时,当然这个概念不存在,所以一个方法是您建议移动两个 classes 之一中的字段,或者创建第三个 class 使预期字段更多一个到 Person还有一个给 公司。
第三个 class 的优点是将所有相关信息分组,相当于:
例如对象图可以是:
没有第三个 class 你需要知道如何关联所有分离的信息,例如 Person 中的所有信息使用三个向量来记住公司和职位和描述你可以对所有人使用相同的索引值,但这不太清楚,当你 add/remove a Company for a Person你必须更新所有这些向量。
假设我们生活在一个人必须在公司中担任角色才能生存的世界,而公司可能根本没有人存在。
如果这就是您想要了解的有关个人与公司之间关系的全部信息,即仅存在此类关系这一事实,仅此而已,您可以这样建模:
然后,如果您想要 另外 捕获 Person
的 角色的 position
和 description
你使用所谓的 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)
现在,回到你的问题,应该清楚 Person
具有 name
、position
、description
属性的实例实际上“缺少”Company
如果你“添加”一个 Company
你会得到 Role
,而不是 Person
!
那么你在问题最后提出的是 一个有效的设计,如果你对 Company
和 Role
进行建模并且一个人只是 [=14] 的一个属性=]:
内容如下:Company
的每个实例都有零个或多个Role
,而Role
的每个实例只有一个Company
。关联的两端都是可导航的,即 Role
知道它的 Company
并且 Company
知道它的 Role
s.
UML Specification 在条款 9.5.3 中给你以下建议:
A Property may represent an attribute of a Classifier, a memberEnd of an Association, or in some cases both simultaneously.
A useful convention for general modeling scenarios is that a Property whose type is a kind of Class is an Association
end, while a property whose type is a kind of DataType is not. This convention is not enforced by UML.
我似乎还没有完全理解关联 class 是如何工作的,为什么角色 class 属性不能只在人 class 内部?
例如:
人
- 名字
- 位置
- 描述
why the role class attributes can't just be inside the person class?
注意多重性 1..*
,如果将 position 和 description 移动到 Person 你必须管理它们的集合并将每个关联到相应的 Company.
[根据您的评论]
对于给定的人,职位和描述取决于每个关联的Compagny,所以不可能有你建议的字段,除非 position 和 description 都是一个集合,并有一个 way/rule 来知道 position 和 description 中的哪个条目对应于正确的 Compagny.
在 Person 中也移动这些信息你删除了对称性,也可以在 Compagny 中移动这些信息,与关于 Person
的备注关联class既是class又是关系,当你用C++或Java等语言实现它时,当然这个概念不存在,所以一个方法是您建议移动两个 classes 之一中的字段,或者创建第三个 class 使预期字段更多一个到 Person还有一个给 公司。
第三个 class 的优点是将所有相关信息分组,相当于:
例如对象图可以是:
没有第三个 class 你需要知道如何关联所有分离的信息,例如 Person 中的所有信息使用三个向量来记住公司和职位和描述你可以对所有人使用相同的索引值,但这不太清楚,当你 add/remove a Company for a Person你必须更新所有这些向量。
假设我们生活在一个人必须在公司中担任角色才能生存的世界,而公司可能根本没有人存在。
如果这就是您想要了解的有关个人与公司之间关系的全部信息,即仅存在此类关系这一事实,仅此而已,您可以这样建模:
然后,如果您想要 另外 捕获 Person
的 角色的 position
和 description
你使用所谓的 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)
现在,回到你的问题,应该清楚 Person
具有 name
、position
、description
属性的实例实际上“缺少”Company
如果你“添加”一个 Company
你会得到 Role
,而不是 Person
!
那么你在问题最后提出的是 一个有效的设计,如果你对 Company
和 Role
进行建模并且一个人只是 [=14] 的一个属性=]:
内容如下:Company
的每个实例都有零个或多个Role
,而Role
的每个实例只有一个Company
。关联的两端都是可导航的,即 Role
知道它的 Company
并且 Company
知道它的 Role
s.
UML Specification 在条款 9.5.3 中给你以下建议:
A Property may represent an attribute of a Classifier, a memberEnd of an Association, or in some cases both simultaneously.
A useful convention for general modeling scenarios is that a Property whose type is a kind of Class is an Association end, while a property whose type is a kind of DataType is not. This convention is not enforced by UML.