热门问题
时间线
聊天
视角
Java建模語言
来自维基百科,自由的百科全书
Remove ads
Java建模語言(英語:Java Modeling Language,縮寫JML)是一種用於Java程式碼的規約語言,使用 Hoare風格的前置條件、後置條件和不變式,並遵循契約式設計(英語:design by contract, DbC)範式。[1]由於JML是為Java專門定製的,其基本語法結構以及編程風格都跟Java語言十分相似。[2]
語法
JML規範以注釋的形式添加到Java代碼中。
requires- 定義緊隨其後方法的前置條件。
ensures- 定義緊隨其後方法的後置條件。
signals- 定義當指定異常被方法拋出時的後置條件。
signals_only- 定義在滿足給定前置條件時允許拋出的異常。
assignable- 定義方法可以修改的字段。
pure- 聲明方法無副作用(等同於
assignable \nothing,但也可拋出異常)。此外,純方法應始終正常終止或拋出異常。 invariant- 定義類的不變量屬性。
loop_invariant- 為循環定義循環不變量。
also- 組合規範案例,也可聲明方法繼承自其超類型的規範。
assert- 定義 JML 斷言。
spec_public- 將受保護或私有變量對規範公開。
\result- 表示緊隨其後方法的返回值標識符。
\old(<expression>)- 引用方法開始時 <expression> 的舊值。
(\forall <decl>; <range-exp>; <body-exp>)- 全稱量詞。
(\exists <decl>; <range-exp>; <body-exp>)- 存在量詞。
a ==> b- 表示 a 蘊含 b。
a <== b- 表示 b 蘊含 a。
a <==> b- 當且僅當 a 與 b 等價。
優勢
發展
Rebêlo等人提出並實現了一種新的JML編譯器,稱為ajmlc(AspectJ JML Compiler),利用了面向方面編程(AOP)機制來處理JML契約的運行時斷言檢查。結果表明該編譯器生成的代碼大小的開銷非常小,適合Java ME應用程序使用。[1]
參考文獻
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads