2012-11-28 127 views
3

一個JML後置條件的一類方法可以包含調用另一個方法調用JML後置條件包含類的方法調用

例如,我有這個類:

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

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

對於DOB的後置條件,我可以有:ensures doA(x) = doA(y)

回答

3

是,所提供的稱爲方法不包括副作用和被聲明爲純:

的/ @純@ /註釋指示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) 
    { ... } 
} 
相關問題