0

UML で分析モデルを作成していますが、クラス図でいくつかの属性に対する制約を表現しようとすると、少し行き詰まります。次のクラスで:

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

リストされている属性はすべてブール型で、最後の 2 つの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 制約を使用するかの 2 つのオプションしかありません。

単純化され修正された (OCL の等号は 1 つの「=」のみである) は、次のようになります。 context SomeClassinv not isBaz=isQuux

ところで、「相互に排他的」という概念の正確な意味についてはわかりません。これは通常、XOR (標準の関連付けに対する定義済みの制約) を実装しますが、NAND を使用します。モデルで両方の属性が偽の値を持つ可能性はありますか? (私のOCL制約ではこれは不可能だと思います)

于 2009-11-14T08:58:14.203 に答える