与 { bag } 和多重边界约束的注释关联的精确语义

问题描述 投票:0回答:1

假设我在 UML 类图中有

A ---r1 {bag} [1..2]--> B
(即 r1 是从 A 到 B 的关联,并用 {bag} 和多重性 [1..2] 进行注释。

我的问题:如果a:A是A的实例,以下集合是否有效?

a.r1={(b1,1),(b1,2),(b2,1)} //集合包含两个b1副本和一个b2

换句话说,当关联纯粹解释为 r1:A --> B 时,多重界限(即 [1..2])适用于关联,或者适用于 r1: A --> Bag(B)?在前一种解释中,上述集合是有效的,因为 r1 最多包含 B 的两个实例,但在后一种解释中则不然,因为 r1 包含 Bag(B) 的三个元素!哪种解释是正确的?

UML 中的多重性约束在UML 文档的第 7.5.3 章中进行了解释,正如我在这个问题中提到的那样。

p.s.1:当我们用 {seq} 替换 {bag} 时,会出现类似的问题。

p.s.2:我添加了 haskell 标签,以按照 @xmojmr 的建议从大型 haskell 社区获取评论。感谢@peter 在他的回答中很好地画了图。

haskell uml associations class-diagram multiplicity
1个回答
3
投票

正如规格中所述,Bag 是无序的、非唯一的集合。 然而,这描述了您指向的元素之间的关系。

所以你的例子可以用任何一种方式表达: not the bees

这意味着 A 引用了 onetwo B 实例,并且这些引用存储在 Bag 中(或任何非唯一的、未排序的集合;但这是实现细节)。

回答你的问题:不可以,因为 Bag 包含三个 B 实例,而允许的最大数量是两个 B。

© www.soinside.com 2019 - 2024. All rights reserved.