2

こんにちは、私たちは現在 MagicDraw 17.0 を使用しています。そして、次の問題が発生しました。オブジェクト ダイアグラム内のオブジェクトに接続されたオブジェクトがあるかどうかを検証したいと考えています。

たとえば、オブジェクト「man」が別のオブジェクト「address」へのリンクを持っているとします。気圧 私たちはこれを試しています

self.address->isEmpty() 

ここで、address は、2 つのオブジェクトを接続する関連付けにおける address オブジェクトの役割であり、人間に制約が課せられます。動作しません。

4

2 に答える 2

1

これはあなたの質問に対する直接の回答ではありませんが、あなたが尋ねている質問に関してより多くの洞察を提供できることを願っています:

オブジェクト (Man のインスタンスなど) が別のオブジェクト (Address のインスタンスなど) へのリンク (アドレスなど) を持たない場合、self.address自己が Man である場合のトラバースは、自己に対してまったく定義されません! (アドレスは参照であり、アドレスはタイプであることに注意してください)。

操作はこの目的に使用できるようですoclIsUndefined()(gefei が述べたように) self.address -> oclIsUndefined()

OCL 仕様の 16 ページには、次のように記載されています。

... 式の値が未定義かどうかをテストするための明示的な操作があります。oclIsUndefined() は OclAny に対する操作で、引数が null または無効な場合は True になり、それ以外の場合は False になります。

しかし、別の視点があります:

self.addressコレクションを表します。したがってisEmpty、空の場合、関数は true を返す必要があります。(これは、おそらく を使用するようになると思われる方法ですself.address->isEmpty)

isEmpty 関数に関する OCL 仕様の 175 ページには、次のように記載されています。

isEmpty() : ブール値

self は空のコレクションですか?

  post: result = (self->size() = 0 ) 

注: null->isEmpty() は、null から Bag{} への暗黙的なキャストにより「true」を返します。

しかし、あなたが言ったように isEmpty はあなたのために働いていませんでした!

違いについてコメントするために、これをOCLの専門家に任せていますか?しかし、おそらく最初のアプローチが役立つでしょう!

お役に立てれば!

于 2014-09-01T16:47:33.277 に答える
0

試してくださいoclIsUndefined()(OCL仕様2.3.1 p.16を参照)

于 2012-08-01T14:56:48.837 に答える