如何在UML中建模互斥属性?

时间:2009-11-12 00:26:12

标签: attributes uml mutual-exclusion

我正在使用UML编写分析模型,并且在尝试表示类图中的几个属性的约束时我有点卡住了。在以下课程中:

+-----------+
| SomeClass |
+-----------+
| isFoo     |
| isBar     |
| isBaz     |
| isQuux    |
+-----------+

所有列出的属性都是布尔类型,最后两个属性isBazisQuux是互斥的。我该如何表明?我宁愿不使用特别说明 - 更混乱。

我在UML中可以找到关于约束的所有内容似乎都将它们应用于关联,而不是属性。我可以将属性分解为关联的类,但它们是简单的布尔类型,所以像这样的东西似乎有些过分:

+-----------+
| SomeClass |
+-----------+ 0..1   isBaz   1 +-------------------+
| isFoo     |------------------| ThereCanBeOnlyOne |
| isBar     |      |           +-------------------+
|           |      |{NAND}     | isBaz             |
|           |------------------| isQuux            |
+-----------+        isQuux    +-------------------+

在UML中建模互斥属性的“正确”方法是什么?

2 个答案:

答案 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约束中是不可能的)