繁体   English   中英

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

[英]Subset notation between associations in UML class diagram

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

  • works
  • manages

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

我应该推断出对象图?

  1. 作为经理的每个Person都有两个指向他所在部门的链接(一个用于works ,另一个用于manages ),或者
  2. 作为经理的每个Person只有一个链接到他的部门?

顺便说一句,除了{subset}{nand}{and}{xor} ,还有其他约束符号可以放在类图中吗?

由于您已定义了两个关联,因此对象将具有两个链接。 就那么简单。 你可能添加了一份说明, works是多余的情况下manages具有非零多重性(因为这将有一个0..1 )。

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

第111页的超结构2.5状态:

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

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

请注意,可以在关联端(引用属性)之间定义subsets约束,但不能在关联之间定义subsets约束。 所以,你的问题应该更好地陈述如下。 给定一个Person具有两个引用managedDepartmentdepartment ,代表PersonDepartment之间相应的功能关联,约束

managedDepartment subsets department 

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

p.managedDepartment subseteq p.department

或者,可以定义manages关联专门化worksAt关联,这意味着对于任何manages链接,存在相应的worksAt链接。

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

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

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

  • 一般来说, Deck contains 0..52张Cards
  • Deck一个子类叫Monster Deckcontains {redefines contains} 0..10 Monster Cards
  • Deck另一个子类叫Player Deckcontains {redefines contains} 0..10 Player Cards
  • 等等..

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM