1

Eclipse MDT/OCL実装を使用して、UMLモデルでOCLクエリをプログラムで実行する方法の例を誰でも提供できますか? Eclipse のドキュメントを読みましたが、動作する例が見つからず、さまざまな例外やエラーが発生し続けています。

ご協力いただきありがとうございます。

4

1 に答える 1

1

以下は、ocl クエリをインスタンス化する方法の例です。OCL には 2 つの環境ファクトリが存在します。1 つはこの例で使用される Ecore 用で、もう 1 つは UML 用です。UML は Ecore で実装されているため、UML モデルを評価する場合は Ecore ファクトリを使用することもできます。

private final OCL<?, EClassifier, ?, ?, ?, EParameter, ?, ?, ?, Constraint, EClass, EObject> ocl;
private final OCLHelper<EClassifier, ?, ?, Constraint> helper;

this.ocl = OCL.newInstance(EcoreEnvironmentFactory.INSTANCE);
this.helper = ocl.createOCLHelper();

OCLおよびオブジェクトをインスタンス化したらOCLHelper、OCL クエリのコンテキスト オブジェクトを設定することが重要です。

helper.setContext(UMLPackage.eINSTANCE.getClass_());

UMLPackage.eInstanceClass_PropertyOperationおよびその他の UML クラス用の getter がいくつかあります。Ecore 用の同様のオブジェクトがありますEcorePackage.eINSTANCE。次に、OCLExpression を作成し、それからクエリを作成する必要があります。

OCLExpression<EClassifier> expression = helper.createQuery("self.attribute->size() > 0");
Query<EClassifier, EClass, EObject> query = ocl.createQuery(expression);

これで、いくつかの要素でクエリを確認できます。

boolean success = query.check(myElement);

check メソッドが true を返す場合、クエリは指定されたモデルに対して有効です。そのコードでは、 myElement はタイプ を持つ ECore モデルのオブジェクトになりますClass。check メソッドに渡すオブジェクトは、ヘルパーで設定したコンテキスト タイプと一致する必要があります。

于 2014-06-25T11:23:17.140 に答える