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

Precise semantic of annotated associations with { bag } and multiplicity bound constraints

假设我在 UML class 图中有 A ---r1 {bag} [1..2]--> B(也就是说,r1 是从 A 到 B 的关联,并用 {bag} 和多重性 [1..2] 注释。

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

a.r1={(b1,1),(b1,2),(b2,1)} //collection contains two copies of b1 and one b2

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

UML 中的多重性约束在 UML document as I am referred to in 的第 7.5.3 章中进行了解释。

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

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

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

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

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

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