1. 程式人生 > >SC review 5.2 設計可復用軟件

SC review 5.2 設計可復用軟件

RR .com 常見 新的 特殊 技術分享 AR 對象傳遞 可復用

行為子類型與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 設計可復用軟件