gpt4 book ai didi

eclipse - 覆盖派生的 Ecore 类 (EMF) 中的属性值

转载 作者:行者123 更新时间:2023-12-04 23:55:20 26 4
gpt4 key购买 nike

我知道这样一个事实,当涉及到继承时,我无法在基于 ecore 的模型中整体覆盖或重新定义属性。但是我可以以某种方式为现有的继承属性分配一个新值吗?

例如。 A 类定义了属性名称,它是一个字符串,默认值设置为 'defaultA'。 B 类继承自 A 类,名称应具有值“defaultB”。

我试图在 B 类中重新实现具有相同名称和数据类型的属性,但我无法从中创建 genmodel(“可能没有两个名为 'name' 的特征”)。

甚至无法更改继承属性的值吗?

最佳答案

不能在普通 EMF 中覆盖属性,但通过 OCL 有一种解决方法。
(当然,您可以根据需要生成 Java 代码并实现属性,但它不会在您创建元模型的 Eclipse 实例中工作。)

诀窍是可以在 EMF 中覆盖操作 通过 OCL,您可以根据需要实现操作。

下面是一个最小的例子(用 OCLinEcore 编辑器编写),它定义了一个由类组成的元模型 AB .类(class)A引入一个属性 label这只是重定向到操作 computeLabel() . “B”类为 computeLabel() 提供了不同的实现。手术。

package workaround : workaround = 'workaround' {
class A {
operation computeLabel() : String {
body: 'labelA';
}
attribute label : String {
derivation: computeLabel();
}
}
class B extends A {
operation computeLabel() : String {
body: 'labelB';
}
}
}

您可以通过创建类 B 的动态实例来测试它。并打开 B.xmi标准中的文件 Sample Reflective Ecore Model Editor .然后你会看到:

enter image description here

关于eclipse - 覆盖派生的 Ecore 类 (EMF) 中的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com