【问题标题】:UML constraint across three associations?跨三个关联的 UML 约束?
【发布时间】:2017-08-21 15:30:07
【问题描述】:

假设我的 A 类分别与 X、Y 和 Z 类关联。我需要指出,对于任何给定的 A 类实例,只能实例化这些关联中的一个(因此,一个异或约束)。如果约束只是跨两个关联,我知道该怎么做。显然,我可以只制作三个单独的异或约束(X-Y、X-Z、Y-Z),但我想知道是否有更好/更清洁/正确的方法来做到这一点?

edit:各个关联的多重性约束不一样。使用抽象类或接口将不起作用。此外,一个注释是不够的。我需要使用某种形式化的结构,最好是标准化的(例如通过 OMG)来表达这一点,因为我正在以编程方式处理模型元素(即它不仅仅是一张图片)。我了解 UML 的底层模型是如何为这个工具提供的。它还指定(虽然有点模糊)它应该如何表示。事实上,我想我的主要问题是找到一个允许我制作这种符号的工具。我不认为 MagicDraw 这样做。我应该早点说这些事情的。

FWIW,我正在使用 MagicDraw。如果我能以 MagicDraw 真正理解的方式做到这一点,那将是一个很好的奖励。如果不可能,我可以忍受它。

【问题讨论】:

    标签: uml ocl magic-draw


    【解决方案1】:

    xor 约束只是 2-way 情况下的一个程式化且指定不足的约束。

    您可以将显式约束(在 Complete OCL 中)定义为:

    context A
    inv OnlyAorBorC: A->size() + B->Size() + C->size() <= 1
    

    MagicDraw 可能允许您在 A 上指定类似的上下文约束。

    【讨论】:

      【解决方案2】:

      如果“X”、“Y”和/或“Z”可以以某种方式概括(我的意思是,如果你不是为了条件流控制而这样做),你可以创建一个接口(或抽象类)“以I”为例,让“X”、“Y”、“Z”实现这个接口。然后,在 A 和接口 I 之间建立一个多重性 1 的关联。 见下图:

      编辑: 上面的示例不适用于 A 在 X、Y 和 Z 之间具有不同基数的情况。对于这种情况,我能看到的唯一方法是使用 UML 约束来限制这些关系。您可以在 UML 中定义一个约束,在大括号之间放置一些 OCL 表达式。例如

      这里,帐户所有者是个人或公司,并且此 {xor} 是预定义的 UML 约束。

      我不确定你的基数要求的细节,但是这个 {xor} 和我给出的接口示例之间的组合可能就足够了。至少它给了你更多的选择,比如:

      如果您需要了解有关 UML 约束主题的更多信息,我从 uml-diagrams.org 获得了这个示例:http://www.uml-diagrams.org/constraint.html

      【讨论】:

      • 这并未涵盖所有情况。请查看已编辑的问题。
      • “接口”是一种结构,用于为支持接口的平台/语言(如 Java 和 C#)制作实现模型,但不适用于逻辑设计建模,这是所要求的模型类型。因此,您最好删除这部分答案。
      • 我同意你的观点,专业化不应纯粹用于为逻辑条件建模,但由于问题没有具体说明现实世界中的 A、X、Z 和 Y 是什么,我认为为他指出这个替代方案会很有用,因为也许 X、Y 和/或 Z 可能是通用的。无论如何,我会更新我的答案以明确这一点。
      猜你喜欢
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多