类方法的JML后置条件是否包含对另一个方法调用的调用
例如我有这个课程:
public class A
{
public int doA(x)
{ ... }
public int doB(int x, int y)
{ ... }
}
对于doB的后置条件,我可以:ensures doA(x) = doA(y)
吗?
答案 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)
{ ... }
}