我正在使用UML编写分析模型,并且在尝试表示类图中的几个属性的约束时我有点卡住了。在以下课程中:
+-----------+
| SomeClass |
+-----------+
| isFoo |
| isBar |
| isBaz |
| isQuux |
+-----------+
所有列出的属性都是布尔类型,最后两个属性isBaz
和isQuux
是互斥的。我该如何表明?我宁愿不使用特别说明 - 更混乱。
我在UML中可以找到关于约束的所有内容似乎都将它们应用于关联,而不是属性。我可以将属性分解为关联的类,但它们是简单的布尔类型,所以像这样的东西似乎有些过分:
+-----------+
| SomeClass |
+-----------+ 0..1 isBaz 1 +-------------------+
| isFoo |------------------| ThereCanBeOnlyOne |
| isBar | | +-------------------+
| | |{NAND} | isBaz |
| |------------------| isQuux |
+-----------+ isQuux +-------------------+
在UML中建模互斥属性的“正确”方法是什么?
答案 0 :(得分:1)
我会研究使用对象约束语言来描述它。
我从来没有真正使用它,除了几个讲座,但我很确定这是你需要的。
这样的事情可能表达你想要的条件:
{context SomeClass
inv isBaz==True implies isQuux==False
inv isQuux==True implies isBaz==False}
这presentation可能会给你一个很好的起点。
答案 1 :(得分:1)
只有两个选项,将属性建模为与布尔数据类型的关联或使用OCL约束。
简化和更正(在OCL中等于只有一个“=”)可能是:context SomeClassinv not isBaz = isQuux
是的,我不确定“互斥”概念对你的确切含义。这通常实现XOR(标准中关联的预定义约束),然后使用NAND。您的模型中是否有可能两个属性都具有错误值? (我假设这在我的OCL约束中是不可能的)