【问题标题】:OCL: Specify pre and postconditions for constructor and destructorOCL:为构造函数和析构函数指定前置条件和后置条件
【发布时间】:2021-03-27 02:31:08
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: ocl


    【解决方案1】:

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

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

    完整的 OCL 增加了一种使用 @pre 或 oclIsNew() 来推断两个系统状态之间变化的能力,因此您可以在某处使用 oclIsNew() 来检测发生了不好的事情。

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

    您可以在构造函数/析构函数的文档中随意使用 OCL 表达式。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 2017-01-14
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      相关资源
      最近更新 更多