トップページ > プログラム > 2014年04月07日 > LtIPC3gj

書き込み順位&時間帯一覧

31 位/161 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000020000000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
オブジェクト指向なんて今すぐやめてください

書き込みレス一覧

オブジェクト指向なんて今すぐやめてください
283 :デフォルトの名無しさん[sage]:2014/04/07(月) 11:37:39.15 ID:LtIPC3gj
OOの勉強を始めた頃、たいていの人はis-a関係なら継承できるということを知り、AnimalやDogがどうこうとか
Birdと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違反にならないようにしようというのが正しいエンジニアの態度だと思うね。
オブジェクト指向なんて今すぐやめてください
284 :デフォルトの名無しさん[sage]:2014/04/07(月) 11:42:56.92 ID:LtIPC3gj
で、>>260で
> ・安易な具象クラス継承(>>194)には、問題(>>207前段,210)がある
という微妙な表現になっているが、これは安直ではない具象クラスの継承ならやってもOKということなのかな?

大きく戻るが、元スレの以下のコードに問題があるなら、それを指摘して欲しい。

class Person
 def work
  # 具体的なコード
 end

 def eat
  # 具体的なコード
 end

 def sleep
  # 具体的なコード
 end
end

class Japanese < Person
 def sleep
  # Japanese特有なコード
 end
end


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。