【问题标题】:Subset notation between associations in UML class diagramUML 类图中关联之间的子集表示法
【发布时间】:2016-07-02 13:24:51
【问题描述】:

我有两个类 PersonDepartment,它们之间有两个关联

  • works
  • manages,

在这两个关联之间有一个{subset}manages 关联是works 关联的子集)。

我应该从对象图推断什么?

  1. 作为经理的每个Person 都有两个与其部门的链接(一个用于works,第二个用于manages),或者
  2. 每个经理Person只有一个链接到他的部门?

顺便说一句,除了{subset}{nand}{and}{xor},还有什么其他的约束表示法可以放在类图中吗?

【问题讨论】:

  • 欢迎来到 StackOverflow,@tomiliJons。如果您找到了问题的答案,请考虑accepting it(通过单击复选标记),并考虑对其进行投票(通过单击向上箭头)。接受答案向更广泛的社区表明您找到了解决方案,给自己一些声誉积分,并给回答您问题的人一些声誉积分。如果您的问题没有找到满意的答案,请发表评论。

标签: uml class-diagram


【解决方案1】:

由于您定义了两个关联,因此对象将具有两个链接。就那么简单。如果manages 具有非零多重性(因为它将具有0..1 之一),您可能会添加注释works 是多余的。

您可以在关联之间放置您喜欢的任何约束 - 只要它们有意义。

第 111 页上的上层建筑 2.5 状态:

<prop-modifier> 表示适用于属性的修饰符。

<prop-modifier> ::= ‘readOnly’ | ‘union’ | ‘subsets’ <property-name> | ‘redefines’ <property-name> | ‘ordered’ | ‘unordered’ | ‘unique’ | ‘nonunique’ | ‘seq’ | ‘sequence’ | ‘id’ | <prop-constraint>

【讨论】:

  • 谢谢,但在这种情况下 {subset} 的含义是什么?是不是想说管理两个对象之间的链接也意味着它们之间的工人链接? (考虑到每个关联端有 0..* 多重性)。
  • 如果是副手。 A 子集一个关联。 B(具有多重性)那么它只能容纳 B 中的那些。所以manage 必须是works 之一。
  • "是不是想说管理 2 个对象之间的链接也意味着它们之间的工人链接?" - 是的,这正是它所说的。
【解决方案2】:

请注意,subsets 约束可以在关联端(引用属性)之间定义,但不能在关联之间定义。因此,您的问题应该更好地表述如下。给定一个类Person,它有两个引用属性managedDepartmentdepartment,代表PersonDepartment之间对应的函数关联,约束

managedDepartment subsets department 

意味着对于任何人对象p,p 管理的部门集是p 工作的部门集的子集或等于。这正式确定了一个人只能是他工作的部门的经理的业务规则。象征性地,

p.managedDepartment subseteq p.department

或者,可以定义manages 关联专门化worksAt 关联,这意味着对于任何manages 链接都有一个对应的worksAt 链接。

【讨论】:

    【解决方案3】:

    这是我最近看到的最好的问题!直接回答您的两个问题:

    • 是的,通过使用Person manages {subsets works for} Department,每个作为经理的Person 将有两个指向Department 的链接:一个用于works for,一个用于manages
    • 可以在类图中的属性上使用的另一个有用的约束是{redefines}

    重新定义属性允许您更改属性的名称并在其所属类的上下文中(以及在子类的上下文中)收紧约束。例如,您可以说以下内容:

    • 一般来说,Deck contains 0..52 Cards
    • Deck 的子类仅称为 Monster Deck contains {redefines contains} 0..10 Monster Cards
    • Deck 的另一个子类仅称为 Player Deck contains {redefines contains} 0..10 Player Cards
    • 等等..

    这对于表达需求和业务规则非常方便。

    【讨论】:

      猜你喜欢
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 2023-03-30
      相关资源
      最近更新 更多