UML类图中关联之间的子集表示法

时间:2016-07-02 13:24:52

标签: uml class-diagram

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

  • works
  • manages

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

我应该推断出对象图?

  1. 作为经理的每个Person都有两个指向其部门的链接(一个用于works,另一个用于manages),或
  2. 每位Person经理只有一个链接到他的部门?
  3. 顺便说一句,除了{subset}{nand}{and}{xor}之外,是否还有其他约束符号可以放在类图中?

3 个答案:

答案 0 :(得分:0)

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

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

第111页上的超结构2.5状态:

  

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

     

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

答案 1 :(得分:0)

请注意,可以在关联结束(引用属性)之间定义subsets约束,但不能在关联之间定义约束。所以,你的问题应该更好地陈述如下。鉴于具有两个参考专长PersonmanagedDepartment的课程department,代表PersonDepartment之间的相应功能关联,约束

managedDepartment subsets department 

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

p.managedDepartment subseteq p.department

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

答案 2 :(得分:0)

这是我一段时间以来见过的最好的问题!直接回答你的两个问题:

  • 是的,使用Person manages {subsets works for} Department,作为管理员的每个Person都会有两个指向Department的链接:一个用于works formanages一个。
  • 您可以在类图中的属性上使用的另一个有用约束是{redefines}

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

  • 一般来说,Deck contains 0..52 Cards
  • Deck的子类Monster Deckcontains {redefines contains} 0..10 Monster Cards
  • Deck的另一个子类Player Deckcontains {redefines contains} 0..10 Player Cards
  • 依旧......

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