2012-01-10 9 views
2

「サブタイプはその基本タイプのための置換でなければならない」Liskov Substitution Principleを適用できますか(PHPの例)?

のは、私はすでに鳥のクラスを持っている、と言ってみましょう:

A鳥が私はオウムを代用することはできませんので、話すことはできません
class Parrot extends Bird { 
    public function Talk() { 
    echo 'Talk'; 
    } 
} 

鳥。

これは単なる基本的な例ですが、通常、拡張クラスは基本クラスよりもはるかに多くを処理できます。私は何が欠けていますか?

答えて

11

オウムはすべての点で鳥のように行動すべきであるため、一般的に鳥を扱う計画を持っている人は、彼らが走っているオウムには驚かないでしょう。もし、オウムが話をすることができるようであれば、彼らの計画は鳥に話すことを要求するものではないので、問題ではありません。

例えば、おそらく彼らは彼らが手に入れたすべての鳥に$bird->fly()を呼び出します。つまり、オウムの話す能力はその活動を妨害しないので、彼らのアルゴリズムはまだ機能します。しかし、飛行できないような鳥(ダチョウと言う)を発明すれば、その原理に違反し、彼らの一般的な鳥の取り扱いアルゴリズムは、もはやあらゆる種類の鳥には当てはまりません。