SC review 5.2 設計可復用軟件
行為子類型與Liskov替換原則
Java 中編譯器執行的規則(靜態類型檢查):
? 子類型可以增加方法,但不可刪
? 子類型需要實現抽象類型中的所有未實現方法
? 子類型中重寫的方法必須有相同或子類型的返回值
? 子類型中重寫的方法必須使用同樣類型的參數
? 子類型中重寫的方法不能拋出額外的異常
Liskov Substitution Principle (LSP)即Liskov替代原則
1.更強的不變量
2.更弱的前置條件
3.更強的後置條件
LSP 是子類型關系的一個特殊定義,稱為(強)行為子類型化。在編程語言 中,LSP 依賴於以下限制:
? 前置條件不能強化
? 後置條件不能弱化
? 不變量要保持
? 子類型方法參數:逆變
? 子類型方法的返回值:協變
? 異常類型:協變
泛型的通配符
無界通配符類型使用通配符(?)指定,例如 List <?>,這被稱為未知類型 的列表。
委托與組合
如果你的 ADT 需要比較大小,或者要放入 Collections 或 Arrays 進行排序,可 實現 Comparator 接口並 override compare()函數。下面為具體例子
另一種方法:讓你的 ADT 實現 Comparable 接口,然後 override compareTo() 方法。與使用 Comparator 的區別:不需要構建新的 Comparator 類,比較代碼 放在 ADT 內部。下面為具體例子。
委派/委托:一個對象請求另一個對象的功能 。例如上面排序的例子,Sorter 委派了 Comparator 的功能。委派是復用的一種常見形式。分為顯性委派:將發 送對象傳遞給接收對象;以及隱性委派:由語言的成員查找規則。
SC review 5.2 設計可復用軟件