0

Comp オブジェクトの親を Set に収集することになっている "Comp" クラスのコンテキストで、oclInEcore エディターで次の操作を記述したいと考えています。

operation parents(): Set(Comp)
    {
        body: self.superComp->union(self.parents());
    }

問題は、ocl が Set(Comp) を戻り値の型として受け入れないことです。ただし、Comp[*] を受け入れますが、これは無効な呼び出しになります (戻り値の型に互換性がないためだと思います...)。

4

2 に答える 2

2

Set(Comp)確かに無効です。OCLInEcore では、戻り値の型を指定するための構文が異なります。問題は、モデル構造の定義 (クラス、機能、操作) が OCL 自体とは何の関係もないということです。それは、不変条件、派生機能、または操作本体の実際のロジックを定義するときにのみ発生します。

これを行う正しい方法は次のとおりです。

operation parents() : Comp[*] { <properties> derived }

Comp戻り値の型で、はを -1に[*]設定します。upperBoundこれ<properties>は、どのコレクション クラスを使用するかを正確に指定する操作の戻り値の型プロパティのリストです。

オプションは次のとおりです。

  • !unique ordered-->Sequence(Comp)
  • !unique !ordered-->Bag(Comp)
  • unique !ordered-->Set(Comp)
  • unique ordered-->OrderedSet(Comp)

例えば:

operation parents() : Comp[*] { unique !ordered derived }

になりSet(Comp)ます。

于 2012-11-25T12:14:50.157 に答える
0

oclInEcore はわかりませんが、基本の ecore では、EDataType を定義し、その「インスタンス タイプ名」を必要な Java 戻り値の型に設定してから、そのデータ型を EOperation で使用できます。HTH。

于 2012-09-29T00:25:01.920 に答える