我不知道';不理解关联类-UML类图

我不知道';不理解关联类-UML类图,uml,class-diagram,Uml,Class Diagram,我似乎还没有完全理解关联类是如何工作的,为什么角色类属性不能只在person类中 例如: 人 名字 位置 描述 为什么角色类属性不能只在person类中 请注意多重性1..*,如果将职位和描述移动到Person中,则必须管理这些职位和描述的集合,并将它们与相应的公司关联 [你的评论] 对于给定的人员,位置和描述取决于每个关联的公司,因此不可能有您建议的字段,除非位置和描述都是一个集合,并且有方法/规则知道位置和描述中的哪个条目对应于正确的公司 当你移动这些信息的时候,你就消除了对称性,你也可

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

例如:

  • 名字
  • 位置
  • 描述
为什么角色类属性不能只在person类中

请注意多重性
1..*
,如果将职位和描述移动到Person中,则必须管理这些职位和描述的集合,并将它们与相应的公司关联

[你的评论]

对于给定的人员,位置和描述取决于每个关联的公司,因此不可能有您建议的字段,除非位置和描述都是一个集合,并且有方法/规则知道位置和描述中的哪个条目对应于正确的公司

当你移动这些信息的时候,你就消除了对称性,你也可以移动这些信息,用和移动人一样的方式

关联类既是一个类,也是一个关系,当你用C++或java等语言实现它时,当然这个概念不存在,所以一种方法是建议你在两个类中的一个字段中移动字段,或者创建一个第三个类,其中一个字段是一个给一个人的,另一个是给一个公司的。p> 第三类的优点是将所有相关信息分组,并具有以下等效信息:

例如,对象图可以是:

如果没有第三类,您需要知道如何关联所有分离的信息,例如,让所有人亲自使用三个向量来记忆公司、职位和描述,您可以对所有人使用相同的索引值,但这一点不太清楚,当你为一个人添加/删除一家公司时,你必须更新所有这些向量

为什么角色类属性不能只在person类中

请注意多重性
1..*
,如果将职位和描述移动到Person中,则必须管理这些职位和描述的集合,并将它们与相应的公司关联

[你的评论]

对于给定的人员,位置和描述取决于每个关联的公司,因此不可能有您建议的字段,除非位置和描述都是一个集合,并且有方法/规则知道位置和描述中的哪个条目对应于正确的公司

当你移动这些信息的时候,你就消除了对称性,你也可以移动这些信息,用和移动人一样的方式

关联类既是一个类,也是一个关系,当你用C++或java等语言实现它时,当然这个概念不存在,所以一种方法是建议你在两个类中的一个字段中移动字段,或者创建一个第三个类,其中一个字段是一个给一个人的,另一个是给一个公司的。p> 第三类的优点是将所有相关信息分组,并具有以下等效信息:

例如,对象图可以是:


如果没有第三类,您需要知道如何关联所有分离的信息,例如,让所有人亲自使用三个向量来记忆公司、职位和描述,您可以对所有人使用相同的索引值,但这一点不太清楚,当你为一个人添加/删除一家公司时,你必须更新所有这些向量。

假设我们生活的世界中,一个人必须在一家公司中扮演一个角色才能生存,而一家公司可能根本没有人

如果这就是你想知道的关于个人和公司之间关系的全部信息,即只有这样一个事实,即存在这样的关系,仅此而已,,你可以这样建模:

然后,如果您希望另外捕获
人员的角色的
位置
描述
,您可以使用所谓的AssociationClass(
角色
):

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

  • 公司
  • 位置
  • 描述
  • 例如,假设一个名叫Scott Tiger的人在两家公司——Food Inc和Water Ltd——中担任角色,而两家公司都知道Scott Tiger在其中担任角色。然后将有两个
    角色的实例(显示为元组):

    现在,回到您的问题,应该很清楚的是,具有
    姓名
    职位
    描述
    属性的
    人员的实例实际上“缺少”
    公司
    ,如果您“添加”一家
    公司
    ,您将获得
    角色
    ,而不是
    人员

    因此,如果你对公司和角色进行建模,并且一个人只是角色的一个属性,那么你在问题的最后提出的是一个有效的设计:

    其内容如下:
    公司
    的每个实例有零个或多个
    角色
    s,而
    角色
    的每个实例只有一个
    公司
    。关联的两端都是可导航的,即
    角色
    知道其
    公司
    公司
    知道其
    角色
    s

    在第9.5.3条中,您可以得到以下建议:

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

    对于一般建模场景,一个有用的约定是,类型为类的属性是关联 end,而类型为数据类型的属性则不是。此约定不是由UML强制执行的


    假设我们生活在这样一个世界里,一个人必须在一家公司中扮演一个角色,才能获得成功
    (Food Inc., Scott Tigger, eater, eats here)
    (Water Inc., Scott Tigger, drinker, drinks here)