让我们说我的A类与X,Y和Z类有关联。我需要指出,对于任何给定的A类实例(因此,xor约束),只能实例化其中一个关联。如果约束只是跨越两个关联,我知道如何做到这一点。显然我可以制作三个单独的xor约束(X-Y,X-Z,Y-Z),但我想知道是否有更好/更清洁/正确的方法来做它?
编辑:各个关联的多重性约束不一样。使用抽象类或接口将不起作用。此外,说明不足。我需要使用某种形式化的结构,最好是标准化的(例如由OMG)来表达这一点,因为我在编程上处理模型元素(即它不仅仅是一张图片)。我理解UML的基础模型如何为此工具提供。它还指出(虽然有点模糊)应如何标注。事实上,我想我的主要问题是找到一个允许我制作符号的工具。我不认为MagicDraw会这样做。我应该早点说明这些事情。
FWIW,我正在使用MagicDraw。如果我能以MagicDraw实际理解的方式做到这一点,那将是一个很好的奖励。如果不可能,我可以忍受它。
答案 0 :(得分:2)
如果" X"," Y"和/或" Z"可以某种方式推广(我的意思是,如果你没有为条件流控制做这个puraly),你可以创建一个接口(或抽象类)"我"例如,并制作" X"," Y"和" Z"实现这个接口。然后,在A和接口I之间放置一个多重性为1的关联。 见下图:
编辑:如果A在X,Y和Z之间具有不同的基数,则上述示例不起作用。对于这种情况,我能看到的唯一方法是使用UML约束来限制这些关系。您可以在UML中定义约束,在花括号之间放置一些OCL表达式。 E. g。
此处,帐户所有者是Person或Corporation,此{xor}是预定义的UML约束。
我不确定您的基数要求的详细信息,但是,此{xor}和我提供的界面示例之间的组合可能就足够了。至少它为您提供了更多选项,例如:
如果您需要了解有关UML约束主题的更多信息,我从uml-diagrams.org获得了这个示例:http://www.uml-diagrams.org/constraint.html
答案 1 :(得分:2)
xor约束只是一个风格化而且未明确指定的双向约束条件。
您可以将显式约束(在完整OCL中)定义为:
context A
inv OnlyAorBorC: A->size() + B->Size() + C->size() <= 1
MagicDraw可能允许您在A上指定类似的上下文约束。