1. 程式人生 > >雨課堂知識點總結(九)

雨課堂知識點總結(九)

turn cli 課堂 private specific 知識點 case throws pri

3.2 Specification
1.兩個方法具有“行為等價性(behavior equivalence)”:
站在客戶端的角度看,它們實現相同的功能
站在客戶端的角度看,它們可能展現出不同的性能
它們具有相同的規約(spec)
其實是針對同一個spec來說是等價的。若對這個spec進行更改,這兩個方法也許就不等價了
2.關於方法spec的說法:
程序員針對給定的spec寫代碼,需做到“若前置條件滿足,則後置條件必須要滿足”
前置條件是對client端的約束,後置條件是對開發者的約束
若客戶端傳遞進來的參數不滿足前置條件,則方法可直接退出或隨意返回一個結果
3.在Java的語法中,使用@param表達一個方法的pre-condition,使用@return和@throws表達方式的post-condition
4.除非在post-condition中明確聲明過,否則方法內部代碼不應該改變輸入參數
方法的spec描述裏不能使用內部代碼中的局部變量或該方法所在類的private屬性
若在方法的post-condition中聲明“client端不能修改該方法所返回的變量”,不能減少該方法的潛在bug
若為某方法設計JUnit test case,在任何test case中對該方法的調用必須遵循其pre-condition
5.如果修改了某個方法的spec使之變弱了,那麽可能發生的是:
client調用該方法的代價變大了,即client需要對調用時傳入該方法的參數做更多的檢查
程序員實現該spec的難度降低了,自由度增加了
如果使用橢圓面積表示spec的強度,那麽該方法的橢圓面積增大了
該spec的實現方式變多了
6.spec的強度:
前置越強spec越弱,後置越強spec越強,後置比較需要在相同的前置條件下。若前置後置都更強則無法比較

雨課堂知識點總結(九)