2015-07-01 72 views
0

里氏替換原則要求里氏替代原則(LSP)與代碼示例

  1. 前提條件不能在亞型得到加強。
  2. 後代不能在子類型中被削弱。
  3. 超類型的不變式必須保存在子類型中。
  4. 歷史約束(「歷史規則」)。對象被認爲只能通過它們的方法來修改(封裝)。由於子類型可能會引入超類型中不存在的方法,因此這些方法的引入可能允許超類型中不允許的子類型狀態更改。歷史約束禁止這一點。

任何人都可以發佈違反這些要點的例子和解決這些問題的另一個例子嗎?

+1

您是否檢查了[此問題](http://stackoverflow.com/q/56860/4519059)或[此問題](http://stackoverflow.com/q/4428725/4519059)的答案? )。 –

+1

[也提供使用車輛的示例](http://stackoverflow.com/a/20861211/4519059);)。 –

+0

我檢查了車輛的例子。我認爲第一和第三條件在其中有很好的解釋。但是第二條和第四條仍然不清楚。 – Sam

回答

1

你知道ICollection接口嗎? 想象一下,您正在編寫一個獲取ICollection並通過使用其Add方法來操作它的方法,或者更好的方法是使用Clear方法 如果有人傳遞ReadOnlyCollection(實現ICollection),您將獲得使用Add的異常。 現在你永遠不會期待,因爲接口定義的是好的,因此ReadOnlyCollection違反了LSP。