これはあなたの質問に対する直接の回答ではありませんが、あなたが尋ねている質問に関してより多くの洞察を提供できることを願っています:
オブジェクト (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の専門家に任せていますか?しかし、おそらく最初のアプローチが役立つでしょう!
お役に立てれば!