Posted on 2009-09-03 23:42
leekiang 閱讀(637)
評論(1) 編輯 收藏 所屬分類:
架構設計
契約式設計的本意很簡單,就是在設計和編碼階段向面向對象程序中加入斷言(assertion)。而所謂斷言,實際就是必須為真的假設,只有這些假設為
真,程序才可能做到正確無誤。契約式設計的主要斷言包括先驗條件(precondition)、后驗條件(postcondition)以及不變式
(invariant):
● 先驗條件針對方法(method)1,它規定了在調用該方法之前必須為真的條件。
● 后驗條件也是針對方法,它規定了方法順利執行完畢之后必須為真的條件。
● 不變式針對整個類,它規定了該類任何實例調用任何方法時都必須為真的條件。
斷言應使用某種編程語言寫在代碼里(而不是僅僅通過文檔加以聲明),只有這樣:
1)對于程序員而言,它們才有意義,同時能夠提供優質的.有用的文檔.
2)能夠在運行時對它們進行檢測,更好地支持測試和調試工作.
charon的建議。如果你對斷言/防錯程序不怎么熟悉,而且也搞不到那本"編程精粹"。買《Design by Contract by Example》這本書看看。如果已經熟悉了,到書店看個半小時到一小時就夠了(例子只要挑個一個看,多了也沒用),權當擴充知識面了。使用的話,就當斷言了,設立若干前置條件后置條件就夠了,這樣足以有效提高對程序的置信度;什么不動點,Frame Rules,那是理論上的東西,吃力不討好,有閑工夫的才時候可以用用(得到的效果和付出的努力不成比例)。
我的總結:開始看了名字以為是按約定進行設計的意思,后來大概看了看,了解了一點點,但決定不再在上面花時間了,測試驅動開發明顯要更為成熟和實用。