轉(zhuǎn)載自微信公眾賬號:開點(diǎn)工作室(ID:kaidiancs)
Java程序中,程序員可以使用前置條件與后置條件,來控制是否執(zhí)行方法及判斷方法是否正確執(zhí)行。
前置條件(precondition)是一條條件語句,在方法執(zhí)行前必須為真。除非前置條件滿足,否則不應(yīng)該使用方法,也不能期待方法能正確執(zhí)行。前置條件可以與方法參數(shù)的描述相關(guān)。例如,計(jì)算x平方根的方法可以用x≥0作為前置條件。
后置條件(postcondition)是一條語句,當(dāng)前置條件滿足且完全執(zhí)行方法后,它為真。對于一個值方法,后置條件將描述方法返回的值。對于一個void方法,后置條件描述所做的動作及對調(diào)用對象的任何修改。一般地,后置條件描述方法調(diào)用產(chǎn)生的所有影響??紤]后置條件可以有助于弄清楚方法的目的。
注意:不能滿足后置條件的方法,即使符合前置條件,也可以拋出異常。
前置條件意味著職責(zé),要保證必須滿足特定條件。如果在調(diào)用方法前由客戶負(fù)責(zé)滿足條件,則方法不必檢查條件。或者,如果方法負(fù)責(zé)讓條件成立,則客戶不必檢查它們。例如,要規(guī)范說明一個求平方根的方法,可以在方法頭前面寫如下的注釋:
/** Computes the square root of a number.
@param x A real number >= 0.
@return The square root of x.
*/
這個注釋表明,方法假定客戶要提供一個非負(fù)數(shù)作為參數(shù)。
更安全的技術(shù)是讓方法承擔(dān)檢查參數(shù)的責(zé)任。例如它的注釋應(yīng)該如下:
/** Computes the square root of a number.
@param x A real number.
@return The square root of x if x >= 0.
@throws ArithmeticException if x < 0.
*/
雖然在前面的注釋中我們將前置條件和后置條件集成在一起,不過也可以將它們單獨(dú)分開。
程序設(shè)計(jì)技巧:在方法頭之前的注釋中充分說明每個公有方法。對于確保方法能正確執(zhí)行而必須滿足的條件,要說明是由方法還是由客戶來負(fù)責(zé)進(jìn)行檢查。以這種方式,既做了檢查又不會重復(fù)檢查。但在調(diào)試過程中,方法應(yīng)該檢查前置條件是否滿足。
當(dāng)使用繼承和多態(tài)來重寫父類中的一個方法時,子類中的方法可能會出現(xiàn)與父類中的方法不一致的問題。前置條件和后置條件可以幫助程序員避免這個問題。后置條件必須適用于子類中方法的所有版本。重寫的方法可以添加到后置條件中——即它能做的更多——但不能做的更少。不過重寫的方法不能增加其前置條件。換句話說,它不能比基類中的方法要求得更多。
由開點(diǎn)工作室編寫,清華大學(xué)出版社出版的《橫掃offer---程序員招聘真題詳解700題》一書已經(jīng)在天貓、京東等各大網(wǎng)上書店及實(shí)體書店開始發(fā)售。本書精心選取了700道各IT名企程序員招聘筆試面試的真題,書中內(nèi)容按照目前各主流IT企業(yè)技術(shù)類招聘考試試題所涉及到的專業(yè)知識領(lǐng)域,劃分為8章:第1章為C語言程序設(shè)計(jì),第2章為面向?qū)ο蟪绦蛟O(shè)計(jì),第3章為數(shù)據(jù)結(jié)構(gòu)與算法,第4章為計(jì)算機(jī)組成原理,第5章為操作系統(tǒng),第6章為計(jì)算機(jī)網(wǎng)絡(luò),第7章為數(shù)據(jù)庫系統(tǒng),第8章為數(shù)學(xué)與邏輯。各章直接對招聘考試真題展開解析,將試題涉及到知識點(diǎn)進(jìn)行精準(zhǔn)地歸納和深入地闡述,而省去了與之不相關(guān)教材內(nèi)容的堆砌,確保應(yīng)聘者的學(xué)習(xí)更加有針對性。我們希望本書的讀者能夠把書中每一道試題的解析讀懂、吃透,從而牢固掌握試題所涉及到相關(guān)知識的內(nèi)涵、外延和綜合應(yīng)用,真正做到舉一反三。同時,本書專注于計(jì)算機(jī)專業(yè)技術(shù)試題的分析講解,不涉及性格測試、智力測驗(yàn)、常識測試、英語測試以及面試禮儀等非技術(shù)領(lǐng)域內(nèi)容,真正做到“沒有雞湯,全是干貨”。
“撥開學(xué)習(xí)中的荊棘迷霧,指點(diǎn)探索中的靈感思路”,希望這本凝結(jié)了集體智慧和心血的教材,能夠充分體現(xiàn)開點(diǎn)工作室的創(chuàng)作主旨,為廣大IT求職者提供真正的幫助。希望每一名熱愛這個行業(yè),充滿熱情和力量的年輕人都能夢想成真。
更多計(jì)算機(jī)學(xué)習(xí)技術(shù)文章請關(guān)注微信公眾賬號:開點(diǎn)工作室(ID:kaidiancs)