【问题标题】:Started to learn UML and OCL and when to use Inv, pre, post开始学习 UML 和 OCL 以及何时使用 Inv、pre、post
【发布时间】:2015-11-26 18:19:36
【问题描述】:

所以,我大约在 3 小时前开始学习 OCL。我对何时可以使用inv 以及何时需要使用prepost 感到非常困惑。 所以我想知道你是否可以在这种情况下使用inv

context Service :: cost(d : double)
   inv result = workDone.cost -> sum()

这是对一个问题的回答: 编写一个 OCL 不变量,说明服务的总成本是成本的总和 对于在汽车上完成的所有工作,您必须假设存在一种方法 Service::cost() 并指定结果。

你可以看到它要求 ocl 不变量声明,这是否意味着我必须使用inv

干杯

【问题讨论】:

  • 我会用<<invariant>> 来定型约束。我仍然不会写 OCL,而且由于没有真正的 OCL 编译器,我想没有真正需要跟进。

标签: uml ocl


【解决方案1】:

我认为不变量是正确的使用方法。当该方法首次以某种实现语言启动时,在总和具有其最终值之前,将违反不变量。因此,我认为你想要一个后置条件。后置条件告诉您方法返回时应该为真。

【讨论】:

  • 整个 OCL 形成约束。并且是inv,pre或post是它适用的时间。因此,尽管我不是 OCL 专业人士,但我会说您的答案不正确。根据我在st.inf.tu-dresden.de/files/general/OCLByExampleLecture.pdf 中读到的内容,OP 的形式是正确的。
  • 可能约束应该命名为 totalCostSum 或类似名称,而不是 result
  • @ThomasKilian:即使那个讲座也说,“不变量是一个约束,在对象的整个生命周期内应该是正确的。”在方法完成之前,不变量将是错误的。我的答案怎么错了?
  • 如前所述:我不是 OCL 专家,我只是在猜测。但任务是编写一个假设命名条件的不变量。这是通过inv <constraint> = <condition> 完成的。我只是不确定如何写<condition>,上面可能是错误的。但这与不变量/post 无关。
  • 有时人们措辞马虎。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 2012-07-20
  • 2010-09-21
  • 2010-09-07
  • 2015-07-09
  • 1970-01-01
相关资源
最近更新 更多