UML 中的用户组聚合关系
user-group aggregation relationship in UML
如果一个用户可以是多个组的一部分,并且一个组可以包含多个用户,那么在 UML 中,这种关系必须表示为聚合关系吗?或者我们可以只使用一个简单的关联 ?
在大多数情况下,关联就足够了。您很可能会在任一端添加多重性,以表明用户(应该)至少属于一个组或可以属于多个组(当然这取决于域),因此您会看到 1..*
多重性。反之亦然,一个组将有 0..*
个用户。
可以用Aggregation
(群边的空心菱形)表示一个群是由多个用户组成的。使用组合通常(在用户管理上下文中)没有意义,因为这意味着一个组只有在有用户属于它时才能包含。
无论如何,在用户管理上下文中我不会使用 Aggregation
。原因是用户和组都是几乎同一级别 (YMMV) 的概念,而使用 Aggregation
会告诉 reader 聚合元素处于比聚合元素更低的级别。
在这种情况下,很明显 "composite" 不是一个选项,所以 "shared" 或 "none" 都不是。 OMG 规范这样定义共享:
"Precise semantics of shared aggregation varies by application area and modeler. "
因此您可以从任何一个选项中进行选择。如果你想用UML图表示这个,,,,,
("1..*" 可能是正确的多重性..)
我的回答基于 UML 规范 2.4.1 - [7.3.2 AggregationKind]
AggregationKind 是以下文字值的枚举:
none
表示属性没有聚合。
共享
表示属性有共享聚合。
复合
表示属性是组合聚合,即组合对象负责组合对象(部分)的存在和存储。
语义变化点
共享聚合的精确语义因应用领域和建模者而异。
未定义创建部件实例的顺序和方式。
如果一个用户可以是多个组的一部分,并且一个组可以包含多个用户,那么在 UML 中,这种关系必须表示为聚合关系吗?或者我们可以只使用一个简单的关联 ?
在大多数情况下,关联就足够了。您很可能会在任一端添加多重性,以表明用户(应该)至少属于一个组或可以属于多个组(当然这取决于域),因此您会看到 1..*
多重性。反之亦然,一个组将有 0..*
个用户。
可以用Aggregation
(群边的空心菱形)表示一个群是由多个用户组成的。使用组合通常(在用户管理上下文中)没有意义,因为这意味着一个组只有在有用户属于它时才能包含。
无论如何,在用户管理上下文中我不会使用 Aggregation
。原因是用户和组都是几乎同一级别 (YMMV) 的概念,而使用 Aggregation
会告诉 reader 聚合元素处于比聚合元素更低的级别。
在这种情况下,很明显 "composite" 不是一个选项,所以 "shared" 或 "none" 都不是。 OMG 规范这样定义共享:
"Precise semantics of shared aggregation varies by application area and modeler. "
因此您可以从任何一个选项中进行选择。如果你想用UML图表示这个,,,,,
("1..*" 可能是正确的多重性..)
我的回答基于 UML 规范 2.4.1 - [7.3.2 AggregationKind]
AggregationKind 是以下文字值的枚举:
none
表示属性没有聚合。
共享
表示属性有共享聚合。
复合
表示属性是组合聚合,即组合对象负责组合对象(部分)的存在和存储。
语义变化点
共享聚合的精确语义因应用领域和建模者而异。
未定义创建部件实例的顺序和方式。