日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JML起步---使用JML 改進你的Java程序(2)

瀏覽:31日期:2024-06-28 15:43:22
內容: 來自:http://www-106.ibm.com/ 作者:Joe Verzulli 量詞(Quantification)(譯者注:這里量詞的意思與邏輯學上的量詞意思相近,而不是普通意義上理解的量詞。)在上面pop()方法的行為規范中,我們說它的返回值要等于peek()方法的返回值,不過我們并沒有看到關于peek()方法的規范。PriorityQueue中peek()方法的行為規范請看下面的代碼: 代碼段3 PriorityQueue 中peek()方法的行為規范 /*@ @ public normal_behavior @ requires ! isEmpty(); @ ensures elementsInQueue.has(result); @*//*@ pure @*/ Object peek() throws NoSuchElementException; JML標記要求只有當隊列中至少含有一個元素的時候,才能調用peek()方法,同時他還要求方法的返回值必須在elementsInQueue之內,也就是說,這個返回值一定是這個隊列中的一個元素。 注釋/*@ pure @*/ 表明peek()方法是一個純方法(pure method),純方法是指沒有副作用的方法。JML中只允許使用純方法進行斷言確認,所以我們把peek()聲明為純方法,這樣我們就可以在pop()方法的后置條件中使用peek()方法。大家肯定想知道,為什么JML只允許使用純方法進行斷言確認?問題是這樣的,如果JML允許使用非純方法進行斷言確認的話,我們稍不注意就會寫出有副作用的行為規范。比如說可能會有這么一種情況,開啟了斷言確認以后,我們的代碼正確無誤,可是如果禁止了斷言確認后,我們的代碼卻不能運行了,或運行出錯了。這樣當然不行!后面,我們還會進一步討論副作用的問題。關于繼承 JML行為規范可以被子類(含子接口)或者是實現接口的類所繼承,這一點與J2SE1.4中斷言有所不同。JML關鍵字 also表示當前定義的行為規范與祖先類或被實現的接口中所定義的行為規范一起作用。因而,在 PriorityQueue接口定義的 peek()方法的行為規范同樣適用于 BinaryHeap類中的 peek()方法。這個就意味著,雖然在 BinaryHeap.peek()的行為規范中沒有明確定義, BinaryHeap.peek()的返回值也必須在 elementsInQueue當中。 大頂堆和小頂堆(譯者注:大頂堆和小頂堆是數據結構里面的概念,分別表示堆排序方法的不同實現方式。堆排序是一種通過調整二叉樹進行排序的方法。)上面我們給peek()定義的行為規范明顯缺少了一塊,那就是我們根本沒有要求它返回的那個元素具有最大的優先級。顯然,JCCC的PriorityQueue接口既可以用于大頂堆,也可以用于小頂堆。大頂堆和小頂堆的表現是有些差別的,在小頂堆中優先級最高的元素值最小,而大頂堆中優先級最高的元素值最大。因為PriorityQueue并不知道自己被用來進行大頂堆排序還是小頂堆排序,所以指定返回哪個元素的規范必須在實現PriorityQueue接口的類中進行定義。 在JCCC 中,類 BinaryHeap實現了PriorityQueue接口。BinaryHeap允許使用它的客戶代碼在構造函數中通過一個參數來指定排序方案,也就是通過參數來指定是通過大頂堆方式排序還是通過小頂堆方式排序。我們使用一個boolean模型變量isMinimumHeap來判斷BinaryHeap的排序方式是大頂堆還是小頂堆。下面的例子是BinaryHeap使用isMinimumHeap給peek()方法定義的行為規范: 代碼段4 BinaryHeap 類中peek()方法的行為規范 /*@ @ also @ public normal_behavior @ requires ! isEmpty(); @ ensures @ (isMinimumHeap ==> @ (forall Object obj; @ elementsInQueue.has(obj); @ compareObjects(result, obj) @ @ (forall Object obj; @ elementsInQueue.has(obj); @ compareObjects(result, obj) @>= 0)); @*/public Object peek() throws NoSuchElementException 使用量詞上面代碼段4中的后置條件包含兩個部分,分別用于大頂堆和小頂堆的情況。“==>符號的意思是包含(譯者注:這個包含與邏輯學中包含的意思一致)。x ==> y 當且僅當y為真或x為假時取真值。對于小頂堆排序來說,適用下面所列的代碼: (forall Object obj; elementsInQueue.has(obj); compareObjects(result, obj) @ (result == ((Comparable) a).compareTo(b)) && @ (comparator != null) ==> @ (result == comparator.compare(a, b)); @ @ public pure model int compareObjects(Object a, Object b) @ { @ if (m_comparator == null) @ return ((Comparable) a).compareTo(b); @ else @ return m_comparator.compare(a, b); @ } @*/ compareObjects方法的定義中使用了另外一個關鍵字model,它的意思是compareObjects方法是一個模型方法。模型方法是只能用在行為規范中的JML方法。模型方法定義在Java的注釋中,所以常規的Java代碼不能使用。 如果BinaryHeap類的客戶代碼指定了一個特殊的Comparator用來進行比較的話,m_comparator就指向那個Comparator,否則m_comparator的值就是null。compareObjects()方法檢查m_comparator的值,然后采用適當的方法進行元素間的比較。 模型域如何取值在代碼段4中我們討論了peek()方法的后置條件。這個條件保證peek()方法的返回值的優先級大于或者等于模型域elementsInQueue中所有的元素的優先級。那么有一個問題,像elementsInQueue這樣的模型域如何取值?前置條件、后置條件和不變量都是沒有副作用的,所以不能使用它們來設置模型域的值。 JML使用一個represents語句把模型域與具體的實現域關聯起來。比如下面的represents語句用來給模型域isMinimumHeap賦值: //@ private represents isMinimumHeap
標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
蜜臀av免费一区二区三区| 精品伊人久久| 国产 日韩 欧美一区| 精品久久电影| 欧美激情视频一区二区三区免费 | 午夜国产精品视频| 蜜桃av一区二区三区电影| 国产欧美日韩在线一区二区| 亚洲丝袜啪啪| 日韩高清成人在线| 久久激五月天综合精品| 久久久精品国产**网站| 日韩国产在线| 红桃视频国产精品| 婷婷综合国产| 色婷婷亚洲mv天堂mv在影片| 国产亚洲一区二区手机在线观看 | 成人在线视频区| 91精品国产乱码久久久久久久 | 亚洲高清毛片| 国产亚洲毛片在线| 在线亚洲人成| 久久只有精品| 亚洲精品乱码久久久久久蜜桃麻豆 | 丁香婷婷久久| 久久国产精品久久w女人spa| 你懂的亚洲视频| 久久av在线| 中文在线免费视频| 蜜臀av一区二区三区| 九九99久久精品在免费线bt| 国产一区二区精品| 日产午夜精品一线二线三线| 日韩三区四区| 国产美女精品视频免费播放软件| 日本在线一区二区三区| 国产亚洲一区| 亚洲天堂日韩在线| 91亚洲国产成人久久精品| 另类av一区二区| 首页欧美精品中文字幕| 精品久久久中文字幕| 欧美一区在线观看视频| 亚洲日本免费电影| 蜜桃伊人久久| 99国产一区| 亚洲一级影院| 亚洲福利国产| 欧美国产不卡| 日本在线高清| 国产一区日韩一区| 一区在线视频观看| 亚洲免费中文| 亚洲日产国产精品| 婷婷综合网站| 91一区二区三区四区| 99riav国产精品| 成人免费网站www网站高清| 国产毛片一区二区三区| 免费成人在线视频观看| 亚洲人成精品久久久| 国产精品精品国产一区二区| 亚洲精品在线影院| 中文字幕日韩欧美精品高清在线| 老司机免费视频一区二区| 亚洲综合不卡| 都市激情国产精品| 中文字幕亚洲影视| 久久精品国产网站| 亚洲永久精品唐人导航网址| 捆绑调教日本一区二区三区| 日韩高清二区| 午夜久久福利| 精品国产欧美日韩| 日韩动漫一区| 久久狠狠久久| 色婷婷色综合| 欧美日一区二区三区在线观看国产免| 亚洲一级淫片| 国产精品一区二区三区av麻| 国产精品xxx在线观看| 五月亚洲婷婷 | 亚洲毛片在线免费| 国产精品99久久免费| 日韩免费高清| 日韩一区二区三免费高清在线观看 | 欧美1区2区3| 久久国产高清| 国产主播一区| 亚洲区欧美区| 国产人成精品一区二区三| 欧美+日本+国产+在线a∨观看| 国产精品密蕾丝视频下载| 国产精品视区| 99久久亚洲精品蜜臀| 国产精品红桃| 日韩高清在线一区| 性一交一乱一区二区洋洋av| 国产色播av在线| 免费看一区二区三区| 日韩精品一区二区三区中文字幕| 99tv成人| 蜜桃精品在线| 日韩精品dvd| 久久久久久自在自线| 国产精一区二区| 久久精品 人人爱| 欧美一级网址| 欧美日韩1区| 91嫩草精品| 天海翼精品一区二区三区| 影院欧美亚洲| 欧美日韩精品免费观看视频完整| 九九色在线视频| 欧美三级网址| 久久久久午夜电影| 三级精品视频| 国产传媒av在线| 中文字幕高清在线播放| 国产精品yjizz视频网| 亚洲激情黄色| 视频一区视频二区中文| 免费人成网站在线观看欧美高清| 国产精品丝袜xxxxxxx| 国产精品色网| 午夜亚洲福利| 欧美久久一区二区三区| 久久狠狠久久| 精品美女久久| 999国产精品| 亚洲欧美日韩国产综合精品二区 | 亚洲成人精品| 欧美日韩中文一区二区| 久久久噜噜噜| 欧美va天堂在线| 亚洲一区日韩在线| 中文不卡在线| 国产精品亚洲四区在线观看 | 欧美日韩伊人| 牛牛精品成人免费视频| 黄色在线观看www| 亚洲成人不卡| 91久久午夜| 日韩一区免费| 精品国产亚洲日本| 亚洲综合在线电影| 亚洲欧洲午夜| 日韩精品亚洲aⅴ在线影院| 国产精品久久777777毛茸茸| 毛片在线网站| 在线视频精品| 日韩精品免费视频一区二区三区| 国产欧美在线| av高清一区| 日韩一区欧美二区| 国产精品一区三区在线观看| 精品欠久久久中文字幕加勒比| 欧美羞羞视频| 免费中文字幕日韩欧美| 久久精品99国产精品| av资源中文在线| 国产模特精品视频久久久久| 日韩激情一区二区| 久久男人av资源站| 免费欧美日韩| 欧美国产中文高清| 国产一区日韩一区| 欧美一级二级视频| 亚洲精品一级二级| 日韩精品一级| 日韩国产在线| 亚洲天堂免费| 日本一二区不卡| 日韩精品一区第一页| 免费在线欧美黄色| 伊人久久亚洲热| 美女视频免费精品| 亚洲一区二区免费看| 国产日韩一区二区三免费高清| 日韩中文在线电影| 日本在线成人| 亚洲不卡av不卡一区二区| 91亚洲精品在看在线观看高清| 香蕉成人av| 欧美偷窥清纯综合图区| 久久精品国内一区二区三区水蜜桃| 水蜜桃久久夜色精品一区的特点| 国产精品日本一区二区不卡视频| 久久免费高清| 亚洲黄色影院| 日韩精品一页| 国产精品99一区二区三区| 日韩黄色av| 精品国产欧美| 亚洲精品在线a| 国产理论在线| 老司机免费视频一区二区| 国产欧美一区二区色老头| 久久国产福利| 亚洲精品午夜av福利久久蜜桃|