2012-05-04 59 views
0

我想在“Comp”类的上下文中编写oclInEcore编辑器中的以下操作,该类应该将Comp对象的父项收集到Set中。OclInEcore:操作返回类型问题

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

问题是,ocl不接受Set(Comp)作为返回类型。然而,它接受Comp [*],但这将最终在一个无效的调用(由于不兼容的返回类型,我想...)

回答

2

Set(Comp)确实无效。在OCLInEcore中,指定返回类型的语法是不同的。问题是模型结构定义(类,特性,操作)与OCL本身无关。只有在为不变式,派生特征或操作主体定义实际逻辑时才会出现。

这样做的正确的方法是如下:

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

Comp是返回类型和[*]设置upperBound为-1。 <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)

0

我不知道oclInEcore,但在基础ecore中,您可以定义一个EDataType并将其“实例类型名称”设置为所需的Java返回类型,然后在您的EOperation上使用该数据类型。 HTH。