[英]Subset notation between associations in UML class diagram
我有两个类Person
和Department
,它们之间有两个关联
works
和 manages
, 在这两个关联之间有一个{subset}
( manages
关联是works
关联的子集)。
我应该推断出对象图?
Person
都有两个指向他所在部门的链接(一个用于works
,另一个用于manages
),或者 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
具有两个引用managedDepartment
和department
,代表Person
和Department
之间相应的功能关联,约束
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 Deck
只contains {redefines contains}
0..10 Monster Cards
Deck
另一个子类叫Player Deck
只contains {redefines contains}
0..10 Player Cards
这对于表达需求和业务规则非常方便。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.