[739] Re:オブジェクト指向「初」入門
投稿者:CES
2007/02/20 02:13:25
>実はオブジェクト指向に限らず、ジェネリックプログラミングとも
>通じる真理だと思うんですが…
ジェネリックプログラミングに通じるのはわからなくもないですが、だから何です?
ジェネリックプログラミングがそうだからといって、オブジェクト指向プログラミングもそうだという理由にはなりません。
>Webで公開されている文書であっても、原文の方で確認をすれば
> then S is a subtype of T.
>と書かれていますから、後者の意味であることは明らかなんですけどね。
なるほど。
件の本はまだ読んでいませんが、であるにしても、長方形と正方形の例をあのように用いているのであれば、どれほど信用が置けようか、という気はしますね。
>「完全に互換性のある属性と振舞いを示すのであれば、それは一見関係ないよ
>うに見えても、実は関係があるのだ」というのが正解でしょう。
>CES さんは、この考え方を、一貫して拒否されているようですが…
属性や振る舞いに互換性があろうがなかろうが、何らかの関係はあります…と言うのも語弊がありますね。
関係は「ある」のではなく「作る」のです。作ろうと思えば、どんな関係だろうと作ることができます。これは、その気になればいくらでも互換性を持たせることができる、とも言えます。互換性は「示す」のではなく「持たせる」のですから。
問題は、その関係をプログラム上に表現することにメリットがあるのかどうかです。
そして、メリットがない関係は「関係ない」としても問題ありません。むしろ、そのような関係を徒に表現することは無駄であり害悪でしょう。
>> 俺は「LSP に照らすまでも無く、継承関係にしてはいけない場合がある」
>> と言う。
>
>これも繰り返しになりますが、「照らすまでもなく」のような暗黙の知識は、
>法則としては役に立たないんですよ。だからこそ、明文化された LSP に
>意味があるわけです。
俺は法則の話はしていません。
kit さんは「どういう関係を継承関係にすればいいのかという法則」を欲しているようですが、そんなものはありませんから。
LSP は満たすべき継承関係の指針ですが、使うべきところが違うと思うのです。
一応言っておくと、経験を否定しているわけではありません。
特定の案件に直面した時、「過去の経験から、こうすればうまく行くと思う」という提案は(最適ではなかったとしても)有意義です。
そのような場合でも「最適な選択肢は毎回違うのだから、経験などに頼らず、一から分析しなおすべきだ」と発言するのはバカです。
しかし、そのような特定の場面に依存しない、普遍的なガイドラインはない、と言っているのです。