《數據結構與抽象:Java語言描述(原書第4版)》一P.2.2 前置條件和後置條件
本節書摘來華章計算機《數據結構與抽象:Java語言描述(原書第4版)》一書中的第1章 ,第1節,[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學 新英格蘭理工學院 辛運幃 饒一梅 譯 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。
P.2.2 前置條件和後置條件
前置條件(precondition)是一條條件語句,它在方法執行前必須為真。除非前置條件滿足,否則不應該使用方法,也不能期待方法能正確執行。前置條件可以與方法參數的描述相關。例如,計算x平方根的方法可以用x≥0作為前置條件。
後置條件(postcondition)是一條語句,當前置條件滿足且完全執行方法後,它為真。對於一個值方法,後置條件將描述方法返回的值。對於一個void方法,後置條件描述所做的動作及對調用對象的任何修改。一般地,後置條件描述方法調用產生的所有影響。
考慮後置條件有助於弄清楚方法的目的。注意,從前置條件到後置條件沒有提到如何做,即我們將方法的規格說明與它的實現分離。
程序設計技巧:不能滿足後置條件的方法,即使符合前置條件,也可以拋出異常。(關於異常的討論見Java插曲2和4。)
職責。前置條件意味著保證必須滿足特定條件的職責。如果在調用方法前由客戶負責滿足條件,則方法不必檢查條件。或者,如果方法負責讓條件成立,則客戶不必檢查它們。用語句明確誰必須檢查給定的條件,這樣既提高了檢查的概率,又避免了重複勞動。
例如,要說明前麵提到的求平方根方法,可以在方法頭前麵寫如下的注釋:
在這個例子中,方法假定客戶要提供一個非負數作為參數。
更安全的技術是讓方法承擔檢查參數的職責。在此例中,它的注釋應該如下:
雖然在前麵的注釋中我們將前置條件和後置條件集成在一起,但也可以將它們分開。
程序設計技巧:在方法頭之前的注釋中充分說明每個公有方法。對於確保方法能正確執行而必須滿足的條件,要說明是由方法還是由客戶來負責進行檢查。以這種方式,既做了檢查又不會重複檢查。但在調試過程中,方法應該檢查前置條件是否滿足。
當使用繼承和多態來重寫父類中的方法時,子類中的方法可能會出現與父類中的方法不一致的問題。前置條件和後置條件可以幫助程序員避免這個問題。後置條件必須適用於子類中方法的所有版本。重寫的方法可以添加到後置條件中(即它能做得更多),但不能做得更少。不過重寫的方法不能增加其前置條件。換句話說,它不能比基類中的方法要求得更多。
自測題3 假定類Square有一個數據域side及設置side值的方法setSide。這個方法的方法頭和注釋是什麼?寫這個時要牢記前置條件和後置條件。
最後更新:2017-06-26 14:02:15