JML postcondition包含类方法调用

时间:2012-11-28 10:32:59

标签: java contracts jml post-conditions

类方法的JML后置条件是否包含对另一个方法调用的调用

例如我有这个课程:

public class A
{
    public int doA(x)
    { ... }

    public int doB(int x, int y)
    { ... }
}

对于doB的后置条件,我可以:ensures doA(x) = doA(y)吗?

1 个答案:

答案 0 :(得分:3)

是的,前提是被调用的方法不包含副作用并声明为纯粹:

  

/ @pure @ / comment表示peek()是一个纯方法。一个   纯方法是没有副作用的方法。 JML只允许   断言使用纯方法。我们声明peek()是纯粹的,所以它可以   在pop()的后置条件中使用。如果JML允许非纯方法   在断言中,我们可能会无意中编写规范   有副作用。这可能导致代码在编译时起作用   断言检查已启用但在断言时不起作用   检查已禁用。

http://www.ibm.com/developerworks/java/library/j-jml/index.html

public class A
{
    public /*@ pure @*/ int doA(int x)
    { ... }

    //@ requires ...
    //@ ensures doA(x) == doA(y)
    public int doB(int x, int y)
    { ... }
}