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

您的位置:首頁技術(shù)文章
文章詳情頁

JML起步---使用JML 改進(jìn)你的Java程序(3)

瀏覽:226日期:2024-06-28 17:43:53
內(nèi)容: 來自:http://www-106.ibm.com/ 作者:Joe Verzulli 副作用請大家回憶一下代碼段2中pop()方法的后處理代碼: ensureselementsInQueue.equals(((JMLObjectBag) old(elementsInQueue)) .remove(result)) &&result.equals(old(peek())); 這里我們說有一個副作用,那就是在從elementsInQueue刪除一個元素的時候會有副作用。事實(shí)上,這里還可能有其他的副作用。比方說,一個pop()方法的具體實(shí)現(xiàn)中如果修改了m_isMinHeap的值,那么就把排序方法從一個小頂堆變成了大頂堆。只要這種修改能夠返回正確結(jié)果,就不會引起運(yùn)行期間的斷言檢查異常,可是這個卻事實(shí)上削弱了JML行為規(guī)范的作用。我們可以加強(qiáng)后置條件,不允許除了修改elementsInQueue以外的任何改變,請看下面的代碼: 代碼斷7 加強(qiáng)的后置條件 ensureselementsInQueue.equals(((JMLObjectBag) old(elementsInQueue)) .remove(result)) &&result.equals(old(peek())) &&isMinimumHeap == old(isMinimumHeap) &&comparator == old(comparator); 從中我們可以看出,通過加入形如x == old(x)的語句,我們可以消除變量x發(fā)生改變的副作用。可是有一個問題,如果用這種辦法,每一個方法在它的后置條件都要為每一個變量加上這么一句,這樣就會導(dǎo)致行為規(guī)范的混亂。而且如果我們給一個類增加一個成員的變量的話,那么我們就得在這個類的所有方法的后處理規(guī)范中增加一句,這將讓維護(hù)變得異常困難。 JML通過引入assignable語句提供了一種更好地解決方案。 assignable 語句使用assignable語句,我們可以這樣完成pop()方法的后置條件: 代碼段8 在方法的行為規(guī)范中使用assignable語句 /*@ @ public normal_behavior @ requires ! isEmpty(); @ assignable elementsInQueue; @ ensures @ elementsInQueue.equals(((JMLObjectBag) @ old(elementsInQueue)) @ .remove(result)) && @ result.equals(old(peek())); @*/Object pop() throws NoSuchElementException; 只有在assignable語句中列出的變量才能在一個方法的實(shí)現(xiàn)中修改。上面pop()方法的assignable語句的意思是在pop()方法的實(shí)現(xiàn)中可以修改elementsInQueue的值,除此之外的其他變量,比如isMinimumHeap、comparator等等都不可以修改。如果你在pop()方法的實(shí)現(xiàn)中修改了m_isMinHeap的值,那么編譯的時候就會產(chǎn)生一個錯誤。(不過當(dāng)前的JML編譯器尚沒有支持這個,也就是沒有檢查在方法的實(shí)現(xiàn)中,是否只修改在assignable語句中指定的變量。) 修改規(guī)則我們前面說只有在assignable語句中列出的變量才能在一個方法的實(shí)現(xiàn)中修改,這其實(shí)是有點(diǎn)簡化的說法。事實(shí)上,如果以下任意一個條件是 true,該規(guī)則就允許方法修改一個變量(loc):assignable語句中顯式列出loc 。 assignable語句中列出的變量依賴于loc。(比如說如果我們聲明“assignable isMinimumHeap; ,因?yàn)槟P陀騣sMinimumHeap依賴于具體域m_isMinHeap,所以該 assignable語句意味著方法不僅可以修改顯式聲明的isMinimumHeap,而且還能修改m_isMinHeap。) 方法開始執(zhí)行時loc尚沒有分配。 loc 是方法的局部變量或者是方法的形式參數(shù)。最后一種情況允許一個方法修改它的參數(shù),即使這個參數(shù)沒有顯式地出現(xiàn)在assignable語句中。粗略一看,這個好像允許一個方法通過參數(shù)傳遞允許它的調(diào)用者修改變量的值。比方說,有一個方法foo(Bar obj),它里面有一個語句obj = anotherBar。不過雖然這個語句修改了obj的值,卻不會影響到foo()的調(diào)用者,因?yàn)殡m然這兩個obj都是指向一個Bar對象,而且具有一樣的名字,foo()方法中的此obj實(shí)際上與foo()的調(diào)用者中的彼obj是不同的(譯者注:關(guān)于這一點(diǎn),請參考Java中索引與對象的概念)。 現(xiàn)在我們考慮如果方法foo(Bar obj)里面有一個語句obj.x = 17會怎么樣?這個將顯式地改變調(diào)用者中的變量。這是有問題的。assignable 語句的規(guī)則允許一個方法不需要在assignable 語句中聲明就可以修改傳入?yún)?shù)的值,不過它并不允許修改參數(shù)的成員變量,具體在這里來說,就是不允許修改obj.x的值。如果你希望在foo()方法中修改obj.x的值,你就必須在assignable 語句中聲明,你可以寫assignable obj.x; 。 assignable 語句中可以使用兩個JML關(guān)鍵字,nothing和everything。 我們可以通過assignable nothing 語句來表明一個方法沒有任何副作用;同樣,我們可以通過assignable everything語句來表明我們的方法可以修改一切變量的值。早先我們使用了一個JML關(guān)鍵字pure,它就等同于使用assignable nothing; 。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩综合精品| 高清一区二区三区av| 国产精品蜜芽在线观看| 国产精品麻豆成人av电影艾秋 | 日韩av在线播放网址| 欧美国产不卡| 麻豆久久久久久| 国际精品欧美精品| 日韩成人免费| 久久蜜桃精品| 性感美女一区二区在线观看| 99久久久国产精品美女| 香蕉久久国产| 天堂精品久久久久| 国产精品a级| 国产精品专区免费| 精品一区在线| 免费精品视频最新在线| 视频一区日韩精品| 国产欧美一区二区三区国产幕精品| 国产麻豆精品| 国产a亚洲精品| 日韩精品诱惑一区?区三区| 久久久影院免费| 三级亚洲高清视频| 日本少妇一区二区| 精品女同一区二区三区在线观看| 日韩精品1区| 亚洲免费观看| 天堂av一区| 久久中文字幕一区二区| 日韩中文在线播放| 丝袜美腿一区二区三区| 国产情侣久久| 97精品中文字幕| 亚洲欧美久久久| 国产乱码精品| 久久婷婷亚洲| 亚洲色图国产| 精品美女久久| 一区在线观看| 国产探花在线精品一区二区| 久久久久97| 欧美日韩在线网站| 亚洲三级毛片| 国产一区二区三区四区五区 | 91大神在线观看线路一区| 精品国产日韩欧美精品国产欧美日韩一区二区三区| 婷婷综合六月| 婷婷亚洲成人| 色在线视频观看| 蜜桃一区二区三区在线观看| 久久久免费人体| 99久久亚洲精品| 日韩欧美激情电影| 国产福利片在线观看| 中文无码日韩欧| 国产精品毛片一区二区在线看| 性色av一区二区怡红| 精品视频一区二区三区在线观看| 五月天久久网站| 欧美黄色精品| 另类国产ts人妖高潮视频| 精品高清久久| 日本v片在线高清不卡在线观看| 日韩在线观看一区| 日欧美一区二区| 亚洲福利一区| 国产日韩一区| 中文在线一区| 黄在线观看免费网站ktv| 日本亚洲视频在线| 久久一区二区三区喷水| 国产精品国产三级在线观看| 亚洲综合国产| 欧美三区四区| 欧美成a人片免费观看久久五月天| 视频一区二区三区在线| 91精品国产调教在线观看| 国产精品一区免费在线| 首页亚洲欧美制服丝腿| 欧美三级网址| 免费在线播放第一区高清av| 男人操女人的视频在线观看欧美| 亚洲综合在线电影| 蜜桃久久久久| 日韩精品中文字幕一区二区| 91久久视频| 激情婷婷欧美| 日韩伦理福利| 精品亚洲精品| 国产精品一线| 日韩精品亚洲aⅴ在线影院| 性一交一乱一区二区洋洋av| 国产91精品对白在线播放| 国产91在线精品| 国产精品毛片aⅴ一区二区三区| 亚洲香蕉久久| 亚洲国产一区二区在线观看| 激情国产在线| 精品久久久久中文字幕小说| 国产精品国码视频| 国产日韩欧美在线播放不卡| 综合激情网...| 老司机免费视频一区二区三区| 另类小说一区二区三区| 久久国产精品成人免费观看的软件| 久久久精品日韩| 精品国产一区二| 国产精品15p| 国产欧美日韩精品高清二区综合区 | 婷婷精品在线| 蜜臀va亚洲va欧美va天堂| 亚洲精品中文字幕乱码| 久久影院一区| 伊人久久大香线蕉av不卡| 青青国产91久久久久久| 亚洲日产国产精品| 五月亚洲婷婷 | 国产精品亚洲综合久久| 欧美一区二区三区免费看| 亚洲精品极品| 日韩专区视频网站| 国产欧美在线| 国产麻豆一区| 老色鬼精品视频在线观看播放| 久久成人福利| 激情综合婷婷| 肉色欧美久久久久久久免费看| 美女久久久精品| 国产91欧美| 国产v日韩v欧美v| 肉色欧美久久久久久久免费看 | 精品视频一区二区三区四区五区| 精品久久电影| 欧美激情日韩| 国产中文在线播放| 99精品视频在线| 99视频+国产日韩欧美| 国产精品美女久久久| 影音先锋久久精品| 日本三级亚洲精品| 精品福利久久久| 美女av在线免费看| 91tv亚洲精品香蕉国产一区| 99精品视频在线| 影音国产精品| 婷婷精品在线| 久久精品国产亚洲一区二区三区| 日本а中文在线天堂| 国产精品普通话对白| 91成人在线网站| 日本а中文在线天堂| 麻豆精品网站| 国产日韩一区| 久久九九99| 综合一区在线| 久久精品国产亚洲一区二区三区| 激情黄产视频在线免费观看| 性欧美69xoxoxoxo| 日韩福利视频网| 91综合网人人| 视频一区国产视频| 精品中国亚洲| 国内精品99| 欧美日本久久| 久久精品主播| 欧美自拍一区| 久久久夜精品| 日韩激情av在线| 日韩免费在线| 免费成人在线观看| 精品久久在线| 日韩午夜电影| 国产精品三级| 久久精品高清| 欧美一级一区| jiujiure精品视频播放| 欧美在线黄色| 91精品国产成人观看| 青青草91久久久久久久久| 日韩国产一区二区| 日韩超碰人人爽人人做人人添| 蜜桃av在线播放| 婷婷综合国产| 欧美亚洲国产一区| 国产日韩欧美一区二区三区| 国产综合色产| 欧美精品影院| 韩日一区二区三区| 麻豆精品久久| 亚洲精品四区| 亚洲国产专区校园欧美| 久久99久久人婷婷精品综合| 日韩亚洲国产欧美| 久久免费影院| 日本免费一区二区视频| 欧美va天堂在线| 精品久久97| 日本v片在线高清不卡在线观看|