7.5.14 后置条件中的旧值

如7.3.4 前置和后置条件所述,OCL可以规定UML中操作和行为的前置和后置条件。在后置条件中,表达式可以引用对象的任何特征在两个不同时刻的值:

  • 该操作或行为在执行之前特征的值
  • 该操作或行为在执行完毕后特征的值

后置条件中操作调用或属性导航的值是该操作完成时的值。为了引用操作开始之前特征的值,建模者必须在属性名之后加‘@pre’关键字:

context Person::birthdayHappens()
    post: age = age@pre + 1

属性age引用了执行该操作的Person实例上的该属性。age@pre引用了执行该操作的Person对象在该操作执行开始时属性age的值。

对于操作调用的情况,‘@pre’附加到操作名后,在参数之前。

context Company::hireEmployee(p: Person)
    post: employees = employees@pre->including(p) and
          stockprice() = stockprice@pre() + 10

当特征的旧值(pre-value)是一个对象时,这个对象上的进一步属性访问时该对象的新值(操作完成时)。因此:

[email protected]        --取对象a的b属性的旧值,假设为x,然后取x上c的新值
[email protected]@pre    --去对象a的b属性的旧值,假设为x,然后取x上c的旧值

‘@pre’后缀只允许用在OCL后置条件表达式中,而且必须是在模型分类符的特征调用上。访问一个在操作中已经被销毁的对象的当前属性将产生null。同样,访问一个在操作中已经被销毁的对象的旧值也产生一个null。

results matching ""

    No results matching ""