OCL:为构造函数和析构函数指定前置条件和后置条件

OCL: Specify pre and postconditions for constructor and destructor

嗨,我是 OCL 的新手,想知道是否可以使用 OCL 完成以下操作:

  1. 在创建对象之前检查某些条件是否成立
  2. 指定对象被销毁后必须执行的操作

如果是,我们能否通过在构造函数中指定前置条件(对于 1)和在析构函数中指定后置条件(对于 2)来实现这一点,还是有其他方法?

谢谢!

OCL 是一种无副作用的语言,因此没有任何变化,因此没有对象构造或破坏。 UML 和 Ecore 均未提供构造函数或析构函数的任何建模。

基于 Pivot 的 OCL 通过引入影子对象来解决无类型构造限制的原型,OCL 表达式可以为其构造保护构造。但是为了避免副作用,阴影对象只是所有可能对象的惰性具体化,所以没有破坏。

Complete OCL 添加了使用@pre 或 oclIsNew() 推断两个系统状态之间变化的能力,因此您可以在某处使用 oclIsNew() 来检测是否发生了不良事件。

OMG OCL 标准定义了一个历史模型,允许对许多系统状态进行推理,但我不知道有任何实施它的尝试。最近,USE 小组发表了关于更有前途的胶片方法的论文。它可能会被详细说明以支持 construction/destruction.

非正式地,您可以在构造函数/析构函数的文档中自由使用 OCL 表达式。

我对编程的看法是,所有系统都是状态机,所有转换都是模型转换。因此,您可以在状态 transition/transformation 的保护条件下使用 OCL 以及执行状态突变的操作。