【发布时间】:2021-03-27 02:31:08
【问题描述】:
您好,我是 OCL 新手,想知道是否可以使用 OCL 完成以下操作:
- 在创建对象之前检查某些条件是否成立
- 指定在对象被破坏后必须执行的操作
如果是,我们是否可以通过在构造函数中指定前置条件(第 1 个)和在析构函数中指定后置条件(第 2 个)来实现这一点,还是有其他方法?
谢谢!
【问题讨论】:
标签: ocl
您好,我是 OCL 新手,想知道是否可以使用 OCL 完成以下操作:
如果是,我们是否可以通过在构造函数中指定前置条件(第 1 个)和在析构函数中指定后置条件(第 2 个)来实现这一点,还是有其他方法?
谢谢!
【问题讨论】:
标签: ocl
OCL 是一种无副作用的语言,因此没有任何变化,因此没有对象构造或破坏。 UML 和 Ecore 都不提供任何构造函数或析构函数的建模。
基于 Pivot 的 OCL 原型通过引入 OCL 表达式可以保护构造的阴影对象来解决无类型构造限制的问题。但是为了避免副作用,阴影对象只是来自所有可能对象的宇宙的惰性具体化,因此没有破坏。
完整的 OCL 增加了一种使用 @pre 或 oclIsNew() 来推断两个系统状态之间变化的能力,因此您可以在某处使用 oclIsNew() 来检测发生了不好的事情。
OMG OCL 标准定义了一个历史模型,可以对许多系统状态进行推理,但我不知道有任何实现它的尝试。最近,USE 小组发表了有关一种更有前途的幻灯片方法的论文。它可能会被详细说明以支持构造/破坏。
您可以在构造函数/析构函数的文档中随意使用 OCL 表达式。
我对编程的看法是,所有系统都是状态机,所有转换都是模型转换。因此,您可以在状态转换/转换的保护条件中使用 OCL,并使用执行状态突变的操作。
【讨论】: