0

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

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返回类型,[*]设置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).

于 2012-11-25T12:14:50.157 回答
0

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

于 2012-09-29T00:25:01.920 回答