2012-05-04 63 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。