0

我正在 UML 中建立一个分析模型,当我试图在类图中表示对几个属性的约束时,我有点卡住了。在以下课程中:

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

所有列出的属性都是布尔类型,最后两个isBazisQuux是互斥的。我该如何表示?我宁愿不使用临时笔记——更混乱。

我能找到的关于 UML 中约束的所有内容似乎都将它们应用于关联,而不是属性。我可以将属性分解为一个关联的类,但它们是简单的布尔类型,所以这样的事情似乎有点过头了:

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

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

4

2 回答 2

1

我会考虑使用对象约束语言来描述它。

除了几堂课外,我从未真正使用过它,但我很确定这就是您所需要的。

像这样的东西可能会表达你想要的条件:

{context SomeClass
inv isBaz==True implies isQuux==False
inv isQuux==True implies isBaz==False}

演示文稿可能会给您一个很好的起点。

于 2009-11-12T01:01:32.293 回答
1

只有两个选项,将属性建模为与布尔数据类型的关联或使用 OCL 约束。

一个简化和更正的(OCL 中的等于只有一个“=”)可能是: context SomeClassinv not isBaz=isQuux

顺便说一句,我不确定“互斥”概念对您的确切含义。这通常实现 XOR(标准中对关联的预定义约束),但随后您使用 NAND。您的模型中是否有可能两个属性都具有错误值?(我假设这在我的 OCL 约束中是不可能的)

于 2009-11-14T08:58:14.203 回答