UML 中的 {XOR} 约束如何工作?

How works {XOR} constraint in UML?

我对我们在 UML 中使用 {XOR} 约束的正确程度有一些疑问。

我理解它是如何以两种不同的方式工作的。哪一个是正确的?

  1. 异或约束适用于关联。 (或者:A 类型的对象可能与 1 个 C 类型的对象相关联;或者:A 类型的对象可能与零个或 1 个类型 B 的对象相关联;或者:对象 A 可以单独存在,因为我们有 [ 0..1] 附近 B).

  2. xor 约束适用于 link(或者:类型 A 的对象必须恰好与类型 C 的一个对象关联;或者:类型 A 的对象必须关联正好是一个类型 B 的对象)。

多年后我不得不修正这个答案(尽管我得到了很多赞成票)。

{XOR} 意味着 class A 必须与 BC 有关联,但不能同时与两者或 none.这意味着在一种情况下你有 A * - 0..1 B 而在另一种情况下它是 A 0..1 - 1 C。两者本身都是法律结构。只是这里A将扮演两个专属角色。

这是一个纯粹的学术结构,所以它在实践中的意义是完全开放的。如果 tutorials/classes 中的此类示例与现实世界有一些联系,那将更有意义(也更有帮助)。


旧(错误)答案

这是完全错误的(或者说是一个谜题)。您只需要一个 CA 相关联。但是,由于 XOR 你可能无法关联 B。这意味着:B 关系始终是 0,您也可以将其保留。

也许 (!) 有人把多重性放在了错误的一边。如果你交换它们,那将是有道理的。如果您使用真实姓名而不是 A、B、C,您可以从上下文中猜测。

选项 2 要求 B 附近的重数恰好为 1。

方案一适用于以下情况:

  1. A 附近 1 个,B 附近 0..1 个
  2. A 附近 0..1,B 附近 0..1
  3. A附近0..1个,B附近1个

xor 是一个布尔运算符,只有当它的两个操作数一个为真另一个为假时,它的结果才为真。 该符号用于指定基 class 的实例必须恰好参与由 {xor} 约束组合在一起的关联之一。其中一个关联必须始终处于活动状态。