本篇blog的內容來源於對MIT課程中的readings 6 - Specifitions閱讀後的一些總結和我的的理解java
網址:http://web.mit.edu/6.031/www/fa18/classes/06-specifications/程序員
這篇reading詳細介紹了java程序編寫中的specifications的相關,通篇讀下來以爲酣暢淋漓,寫的十分精彩。web
Specification是一個至關嚴謹的概念。若是上課沒有仔細聽課,或者看書的時候沒有認真,很容易把specification直接理解成「就是給每一個方法寫一個大體的描述」。實際上,specification比這要複雜得多。編程
如下是我在閱讀過程當中,對重點內容的一些總結。工具
簡單來講,Specification就是在程序中方法的層層調用之間添加一層約定,已達到解耦和的目的。post
稍微詳細一點講:咱們在編程的時候會寫不少方法,不少類,這些方法與類層層調用,互相影響。程序越大,這個調用關係就越複雜,代碼就愈加臃腫和難以理解,程序的維護就變得至關困難,更是給全部嘗試理解代碼的人靈魂上的折磨。而Specification用來在不一樣方法之間劃清界限,寫下約定條件,對敲代碼的人來講是一種目標與約束,對閱讀代碼的人來講則是提示。測試
粗略的瞭解specification,大概須要掌握四個方面的內容:設計
若是說沒有specification的代碼是一大堆便便,那麼加入了specification,用pre和post condition限制了以後的代碼就是用許多塑料袋把便便按功能封裝起來,這樣,Client,也就是調用者,只可以看到塑料袋,條理天然要清晰明確不少。blog
兩者區別何在:
方法要有輸入與輸出,Precondition用於限制輸入,Postcondition用於限制輸出。ci
更進一步
Precondition規定了這個方法所接受的合法輸入,也就是在client調用這個方法時,要想使方法可以產生正確的結果,client所須要知足的條件(其實就是輸入的變量的條件)
Postcondition只會在Precondition被知足時纔有意義。Postcondition規定了在Precondition被知足的狀況下,調用當前方法所產生的影響。
分工明確,方法的調用者以知足precondition爲目標,方法的編寫者則默認precondition已經被知足,以知足postcondition爲目標。
specification只給出了知足precondition條件下,postcondition必須被知足。若是precondition沒有被知足,那麼方法就能夠隨心所欲。
舉個例子,某個方法要求輸入一個大於0的整數。若是輸入的整數小於0,咱們的方法能夠:
除非spec裏提到了輸入值小於0時方法應該怎麼作,不然方法能夠隨心所欲
null爲何要存在?
爲了給程序員找麻煩
readings裏面只介紹瞭如何避免null帶來的麻煩,卻沒有說明null存在的合理性,無需多言,你們都懂。
妙的是,readings說「null values are implicitly disallowed in parameters and retur values ... Avoid null」
在編程中應該時刻注意null的處理
如何保證給出的pre 和post condition是正確的?針對兩者設計測試用例
測試用例能夠分爲兩類:
兩者都必須遵循specification
black box很好理解,就是針對preconditon與postcondition,充分考慮各類邊界條件來設計測試用例便可。
可是glass box存在的理由是什麼?咱們設計測試用例是絕對不能踏出specificatioin一步的,雖然specification隱藏了方法的內部實現,可是並非說對方法內部設計測試用例就會跨越這條界限。
方法之間也許存在相互依賴。?留一個疑問在這裏,我仍然不能很好的理解glass box的意義
兩者的區別在於,checked Exception必需要被try catch語句包圍,或者要在外圍方法中添加throws語句即意味着:這個exception必須顯式地被處理掉。
checked exception通常用於處理意料之中的特殊狀況,好比說錯誤的輸入,這是徹底有可能的。那麼在這裏exception其實就是一個很方便的 fail fast的工具,是用來馬上對特殊狀況產生響應的。
unchecked exception則不須要被try catch 包圍,也就是說,不用去管。
unchecked exception用於處理錯誤狀況,通常會有兩種可能
specification的做用說來講去,仍是解耦和。把功能包裝起來,把問題產生的範圍縮小,不一樣的人能夠專心於不一樣的工做,不須要爲各類不肯定的條件所煩惱。