【问题标题】:Model OCL evaluation vs Object evaluation模型 OCL 评估与对象评估
【发布时间】:2017-03-24 17:40:30
【问题描述】:

我需要检查模型是否触发了一个或多个 OCL 约束。 模型存储在 XMI 中,加载了 EMF。 OCL 约束是自动生成的(字符串等)。

我找到了一种检查 EObject 约束的方法

helper.setContext(ecClass);
query = helper.createQuery(expression);
Object o = ocl.check(eo, invariant);

o 然后包含结果:真或假。

我是否必须“手动”检查模型的每个对象,或者是否有方法、方法或类可以直接(而且可能更有效)?

请注意: - 没有建模信息是硬编码的:元模型、模型和 OCL 以最通用的方式进行操作, - 我在一个独立的软件上工作:所有的罐子都是专门添加的。我尝试过使用 DresdenOCL,但我不知道为什么包的注册很麻烦。

【问题讨论】:

  • 你的意思是“违反”通过“火灾”?您是否需要从 Java 代码触发 OCL 验证?后一个问题是因为如果您不介意使用 Eclipse,那么验证很容易实现,并且您可以使用 OCL 中的通用量化来测试给定类的所有实例。
  • 是的,我的意思是“违反”(但这个词有点重)。而且,不,我不介意不使用 Eclipse。单机听起来更容易在计算器上执行(不过我可能错了)。
  • 我不明白您在原始问题中所说的“注册软件包很麻烦”是什么意思。另外,我不明白您所说的“更容易在计算器上执行”是什么意思。你会详细说明吗?我可以写一个答案,展示如何使用 Eclipse 评估 Ecore 模型实例的 OCL 约束,使用一个简单的虚拟示例(例如检查所有汽车实例是否有 4 个已安装的轮胎)。另一种选择是让您分享您拥有的一些模型(和相应的 Ecore 模型)以及一些 OCL 约束——我可以根据它写一个答案。
  • 以编程方式自动学习 OCL 规则,我不使用 GUI 插件或 Eclipse“集成”来允许我独立执行。个人卫生问题。
  • 以编程方式自动学习 OCL 规则,我不使用 GUI 插件或 Eclipse“集成”来允许我独立执行。个人卫生问题。关于“注册包”,在 Eclipse 中寻找建模框架中的“注册元模型”按钮是一个运行噱头。以编程方式,我做到了,但我仍然不完全确定它是如何工作的——但这工作正常并且经受住了测试台的考验。为了回答我的问题,我在可以应用它们的地方执行 OCL 规则(我对使用高阶模式所做的信息)。希望你明白我的意思。

标签: java emf ocl


【解决方案1】:

根据您的要求(检查对象的时间和地点),您可以尝试使用通知和/或向您自己的扩展 EMF EObject 的 EObject 实现添加一些逻辑。

【讨论】:

  • 这或多或少是我所做的:对象上的一个循环,一个接一个地检查它们。由于我不一定需要全部检查,所以这个版本实际上效果很好。
猜你喜欢
  • 2020-06-03
  • 2020-03-06
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
相关资源
最近更新 更多