def : Collection(OCLType //コレクション内部の型) = expression //コレクションを返す式
EclipseのOCLプラグインだとこうなる
OCL ocl = OCL.newInstance(ECoreEnviromnmentFactory.INSTANCE);
OCLHelper helper = ocl.createOCLHelper();
helper.defineAttribute("collection : Collection(Integer) = OrderedSet{1,2,3}"); //OrderedSet型で要素が1,2,3が作られCollection(Integer)型のcollectionという変数が定義される
//helper#define*で定義された属性や操作はこのhelperから作られたQueryでしか有効にならないので注意
属性だけじゃなく操作も定義できるのですっごい複雑なOCLを毎回書くのが面倒な場合でかつ、モデルに直接持たせるほどでもない属性であった場合、エイリアスとして定義して使うことができる。
でも、渡されたオブジェクトがCollection型であるか調べる方法がわからなず。
// 上の続きでcollectionはInteger型が入ったコレクション
collection.oclIsTypeOf(OrderedSet(Integer)) // これはダメだった
Collectionとして見るよりは、要素の集合として見てて、要素の属性もそのまま使えるから、Collectionの型を意識する必要は無いのかな?
ところで、この辺りを触ってて、OCLHelper#defineOperation()で二つ以上パラメータを持った操作を定義しても、すべてのパラメータの値が必ず最初のパラメータになるバグに遭遇して困っている。
Bugzillaで検索しても出てこず、最新版でも直ってなかったので気付いてないのかなぁ?
どなたかBugzillaで発見したら教えてください。
0 件のコメント:
コメントを投稿