如何在 UML 中对互斥属性进行建模?
我正在 UML 中建立一个分析模型,当尝试在类图中表示对几个属性的约束时,我有点陷入困境。在下面的类中:
+-----------+
| SomeClass |
+-----------+
| isFoo |
| isBar |
| isBaz |
| isQuux |
+-----------+
所有列出的属性都是布尔类型,最后两个属性 isBaz
和 isQuux
是互斥的。我该如何表明这一点?我不想使用临时注释——更加混乱。
我能在 UML 中找到的关于约束的所有内容似乎都将它们应用于关联,而不是属性。我可以将属性分解为关联的类,但它们是简单的布尔类型,因此类似这样的事情看起来有些过分:
+-----------+
| SomeClass |
+-----------+ 0..1 isBaz 1 +-------------------+
| isFoo |------------------| ThereCanBeOnlyOne |
| isBar | | +-------------------+
| | |{NAND} | isBaz |
| |------------------| isQuux |
+-----------+ isQuux +-------------------+
在 UML 中建模互斥属性的“正确”方法是什么?
I'm working up an analysis model in UML, and I'm a bit stuck when trying to represent a constraint on a couple of attributes in a class diagram. In the following class:
+-----------+
| SomeClass |
+-----------+
| isFoo |
| isBar |
| isBaz |
| isQuux |
+-----------+
all the listed attributes are Boolean types, and the final two, isBaz
and isQuux
, are mutually exclusive. How do I indicate that? I'd rather not use an ad-hoc note -- more clutter.
Everything I can find about constraints in UML seems to apply them to associations, not attributes. I could break the attributes out into an associated class, but they're simple Boolean types, so something like this seems like overkill:
+-----------+
| SomeClass |
+-----------+ 0..1 isBaz 1 +-------------------+
| isFoo |------------------| ThereCanBeOnlyOne |
| isBar | | +-------------------+
| | |{NAND} | isBaz |
| |------------------| isQuux |
+-----------+ isQuux +-------------------+
What's the 'correct' way to model mutually exclusive attributes in UML?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只有两个选项:将属性建模为与布尔数据类型的关联或使用 OCL 约束。
简化和更正后的(OCL 中的等于仅带有一个“=”)可能是: context SomeClassinv not isBaz=isQuux
顺便说一句,我不确定“互斥”概念对您的确切含义。这通常会实现 XOR(标准中关联的预定义约束),但随后您会使用 NAND。在您的模型中,两个属性是否有可能具有错误值? (我假设这在我的 OCL 约束中是不可能的)
There are only two options, model the attributes as associations with the boolean data type or use an OCL constraint.
A simplified and corrected (equals in OCL goes with just one "=") could be: context SomeClassinv not isBaz=isQuux
Btw, I'm not sure about the exact meaning for you of the concept "mutually exclusive". This usually imples an XOR (predefined constraint on associations in the standard) but then you use a NAND. Is it possible in your model that both attributes have a false value? (I'm assuming this is not possible in my OCL constraint)
我会考虑使用对象约束语言来描述它。
除了几次讲座之外,我从未真正使用过它,但我相当确定这就是您所需要的。
像这样的东西可能会表达您想要的条件:
This 演示文稿可能会给您一个很好的起点。
I would look into using Object Constraint Language to describe it.
I've never really used it beyond a couple lectures, but I'm fairly sure this is what you need.
Something like this may express the condition you want:
This presentation may give you a good starting point.