オブジェクト指向なんて今すぐやめてください
■ このスレッドは過去ログ倉庫に格納されています
0283デフォルトの名無しさん
2014/04/07(月) 11:37:39.15ID:LtIPC3gjBirdとPenguinがどうこうみたいな説明を読んで、わかったようなわからないような感じで通り過ぎたと思う。
>>194のコードの問題の本質は、具象クラスを継承したことにあるのではなくて、長方形と正方形が実は
is-a関係ではないということ。
何がis-a関係を壊しているかというと、長方形はwidthとheightを個別に設定出来なければならないが、
正方形は個別に設定されると正方形ではなくなるという性質。
これはよく知られた問題で、C++ FAQに"Is a Circle a kind-of an Ellipse?"という項目がある。
http://www.parashift.com/c++-faq/circle-ellipse.html
軽くググると、1996年に、故まさーる氏のNiftyでの発言が引っかかる。
http://objectclub.jp/community/memorial/homepage3.nifty.com/masarl/article/nifty-logs/circle-isa-rectangle.html
is-a関係に関しては、 リスコフの置換原則(LSP)というものが提唱されてて、LSPを破る例として「長方形-正方形」
問題が良く取り上げられる。知らなかった人は、このスレの議論より「LSP 正方形」でググった方がいい。
LSP違反になる危険性があるから具象クラスの継承は全て禁止というのは思考停止で、具象クラスを継承するなら
LSP違反にならないようにしようというのが正しいエンジニアの態度だと思うね。
■ このスレッドは過去ログ倉庫に格納されています