麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

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

2019-11-18 14:02:45
字體:
供稿:網(wǎng)友

  來自:http://www-106.ibm.com/ 作者:Joe Verzulli


異常行為


前面給出的行為規(guī)范要求調(diào)用peek() 和 pop()方法時隊列不能為空,但其實當(dāng)隊列空時是有可能會調(diào)用這兩個方法的。假如發(fā)生這種情況,這兩個方法就會拋出一個NoSUChElementException.異常。我們必須修正我們前面制定的行為規(guī)范,答應(yīng)這種可能的發(fā)生。在這種情況下,我們要使用JML的exceptional_behavior語句。



到目前,我們的行為規(guī)范還是以public normal_behavior打頭的。這里normal_behavior要害字表示這是一個正常行為,方法不會拋出任何異常。使用public exceptional_behavior標(biāo)記可以用來描述拋出異常的行為。下面的代碼段顯示了類PRiorityQueue中peek()方法的行為規(guī)范中的異常部分:



代碼段9 exceptional_behavior標(biāo)記





/*@

@ public normal_behavior

@ requires ! isEmpty();

@ ensures elementsInQueue.has(esult);

@ also

@ public exceptional_behavior

@ requires isEmpty();

@ signals (Exception e) e instanceof NoSuchElementException;

@*/

/*@ pure @*/ Object peek() throws NoSuchElementException;





像我們前面看到的所有例子一樣,這個規(guī)范的第一部分也是以public normal_behavior開頭,表示正常行為;不同的是,這個規(guī)范還有第二部分,以public exceptional_behavior開頭,描述了異常行為。與normal_behavior 語句一樣, exceptional_behavior 語句也有一個 requires 語句。這個requires 語句表示當(dāng)拋出signals 語句中所列的異常時必須滿足的條件。在上面的例子中,假如isEmpty()方法返回真的話,peek()就會拋出一個NoSuchElementException異常。



signals 語句


signals 語句是形如signals(E e) R的語句,其中E是Exception類本身或其一個子類,R是一個表達(dá)式。JML 用如下方式解釋一個signal 語句:假如有一個類型為E的異常拋出的話,就檢查是否為R真。假如是,就執(zhí)行既定規(guī)范;否則,拋出一個unchecked exception(譯者注:unchecked exception又叫做RuntimeException,關(guān)于這兩個概念,請參考java語言中關(guān)于異常的描述),用以表示我們的程序代碼違反了exceptional_behavior規(guī)范的要求。



上面peek()方法中的signals語句的意思是假如隊列為空,就拋出一個NoSuchElementException異常。假如peek()方法在運行中拋出不是NoSuchElementException的其它異常的話,那么JML就會把這當(dāng)成一個錯誤,因為e instanceof NoSuchElementException不是true。假如你既想處理NoSuchElementException異常又想處理其它運行期異常,我們可以修改上面的signals語句,改為signals (NoSuchElementException e) true; 。這個意思是說,假如peek()方法拋出一個NoSuchElementException異常的話,那條件true必須為真,而true是一個常量,總是可以滿足條件,所以對于NoSuchElementException異常的處理可以正常進(jìn)行。不過我們這里并沒有提及關(guān)于其它異常的信息,而peek()方法可以拋出它的簽名(譯者注:方法的簽名是指,方法聲明的各個部分,具體來說,是方法名稱、參數(shù)類型、返回類型和拋出異常的總稱)答應(yīng)的任何異常。它的簽名說它可以拋出NoSuchElementException異常,這就意味著它既可以拋出NoSuchElementException異常,又可以拋出RuntimeException。



假如隊列中存在一些元素而且當(dāng)我們調(diào)用peek()方法時還是拋出一個NoSuchElementException異常(或者其他異常),JML運行期斷言檢查就會拋出一個unchecked exception,這表示正常的后置條件失敗。



結(jié)論


本文簡單介紹了JML的概念,說明了它對面向?qū)ο笙到y(tǒng)的分析和設(shè)計的貢獻(xiàn),通過實例演示了如何在Java程序中使用JML標(biāo)記。你可以從下面所列的資源中下載本文中所使用的完整的代碼,還可以從中找到更多的關(guān)于JML的信息。



你可以使用開源的JML編譯器來編譯你含有JML標(biāo)記的代碼,所生成的類文件會在運行時自動檢查JML規(guī)范。假如你的程序沒有實現(xiàn)規(guī)范中規(guī)定的事情,JML就會拋出一個unchecked exception 來說明你的程序違反了哪一條規(guī)范。這可以幫助我們捕捉程序中的bug,而且能保證我們的代碼與文檔(JML格式的文檔)高度一致。



JML運行期斷言檢查編譯器是第一個JML工具,其他相關(guān)工具還有jmldoc和jmlunit等等。Jmldoc與javadoc工具相似,不同的是它在生成的Html格式文檔中包含JML規(guī)范;jmlunit可以成生一個Java類文件測試的框架,它可以讓你很方便地使用JUnit工具測試含有JML標(biāo)記的Java代碼。你還可以從下面所列的資源中找到其他關(guān)于JML各個方面的相關(guān)內(nèi)容。



在此請答應(yīng)我向 Gary Leavens 和 Yoonsik Cheon表示深深的謝意,是他們幫我解決了一部分關(guān)于JML的疑問并且審閱了你所看到的這篇文章。



資源

下載本文中所用的源代碼 。
Sourceforge是JML規(guī)范、開源JML工具如JML編譯器、jmldoc、jmlunit以及相關(guān)信息的主頁。
PriorityQueue 接口和 BinaryHeap 類是開源項目 雅加達(dá)通用集合組件(JCCC)的一部分。
Gary T. Leavens、Albert L. Baker和Clyde Ruby的 "JML設(shè)計起步" (愛荷華州立大學(xué)計算機(jī)科學(xué)系,2003年1月) 是對JML的更為具體地介紹。
Bertrand Meyer在面向?qū)ο筌浖?gòu)造,第二版一書中關(guān)于通過契約(JML最基本的概念)進(jìn)行設(shè)計的討論(Prentice Hall, 1997)。
Granville Miller在介紹面向?qū)ο笙到y(tǒng)建模中關(guān)于 Java建模 部分(developerWorks, 2002)。
Eric Allen在"Diagnosing Java code: Assertions and temporal logic in Java programming" (developerWorks, July 2002)一書中討論了一些斷言檢查限制的問題。
Kyle Brown在"A stepped approach to J2EE testing with SDAO" (developerWorks, March 2003)一文中討論了如何把模擬數(shù)據(jù)對象與分層測試聯(lián)合起來。
Java程序設(shè)計的各個方面的信息請參考IBM developerWorks Java專區(qū)。


<完>

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 色视频在线播放 | 久久久久一区二区三区四区五区 | 男男啪羞羞视频网站 | 毛片免费视频网站 | 国产一区二区三区四区五区加勒比 | 少妇一级淫片免费放正片 | 免费黄色小网站 | 成人做爽爽爽爽免费国产软件 | 国产免费成人 | 精品国产一区二 | 越南一级黄色片 | 蜜桃视频在线观看视频 | av电影在线网站 | 成片免费大全 | 国产麻豆交换夫妇 | 精品一区在线视频 | 免费一级毛片观看 | 成人三级电影网 | 久久9色 | 视频一区 日韩 | 看免费一级毛片 | 免费一级毛片观看 | 亚洲人片在线观看 | 欧美雌雄另类xxxxx | 国产一区二区三区手机在线 | 91九色福利 | 亚洲综合视频网 | 久草在线观看资源 | 国产免费一区二区三区在线能观看 | 日本中文高清 | 亚洲精品在线观看网站 | 精品国产一二区 | 免费一级特黄欧美大片勹久久网 | 国产69精品久久久久孕妇黑 | av在线免费观看网 | 中文日韩欧美 | 日韩毛片免费观看 | 在线亚洲播放 | 国产精品久久久久久久久久10秀 | 精品一区二区久久久久久久网精 | 亚洲网在线观看 |