【问题标题】:I don't understand association class - UML class diagram我不懂关联类——UML类图
【发布时间】:2020-05-29 20:54:33
【问题描述】:

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

例如:

  • 姓名
  • 位置
  • 说明

【问题讨论】:

    标签: uml class-diagram


    【解决方案1】:

    为什么角色类属性不能只在人员类中?

    注意多重性1..*,如果您将 positiondescription 移动到 Person 您必须管理它们的集合并关联每个到相应的公司

    [根据您的评论]

    对于给定的 Personpositiondescription 取决于每个关联的 Compagny,因此不可能拥有您建议的字段,除非 positiondescription 都是一个集合,并且有一种方式/规则来知道 position 中的哪个条目和 description 对应正确的 Compagny

    将这些信息也移动到 Person 中会消除对称性,也可以将这些信息移动到 Compagny 中,与 Person

    关联类既是类又是关系,当您用 C++ 或 Java 等语言实现它时,当然不存在该概念,因此一种方法是您建议将字段移至两者之一类,或创建第三个类,该类的预期字段不止一个到Person,一个到Company

    第三类的优点是将所有相关信息分组,相当于:

    例如,对象图可以是:

    如果没有第三类,您需要知道如何关联所有分离的信息,例如在 Person 中使用三个向量来记住公司、职位和描述的所有信息,您可以使用相同的索引值总而言之,但这不太清楚,当您为 Person 添加/删除 Company 时,您必须更新所有这些向量。

    【讨论】:

    • 您能详细说明一下吗? :)
    【解决方案2】:

    假设我们生活在这样一个世界中,一个人必须在公司中扮演一个角色才能生存,而公司可能在没有人的情况下存在。

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

    然后,如果您希望另外捕获Person角色positiondescription,则使用所谓的AssociationClass(Role in我们的案例):

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

    1. 公司
    2. 位置
    3. 说明

    例如,假设一个名为 Scott Tiger 的人在两家公司担任职务 - Food IncWater Ltd,并且每个公司都知道 em>Scott Tiger 在其中发挥了作用。那么就会有Role的两个实例(显示为元组):

    (Food Inc., Scott Tigger, eater, eats here)
    (Water Inc., Scott Tigger, drinker, drinks here)
    

    现在,回到您的问题,应该清楚的是,Personnamepositiondescription 属性的实例实际上“缺少”Company,如果您“添加”@987654340 @你会得到Role,而不是Person

    所以你在问题末尾提出的是一个有效的设计,如果你对CompanyRole 建模并且一个人只是Role 的一个属性

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

    UML Specification 在条款 9.5.3 中为您提供以下建议:

    一个属性可以代表一个分类器的一个属性,一个协会的一个memberEnd,或者在某些情况下两者同时。

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

    【讨论】:

    • 不错的答案,紫外线
    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多