[738] Re:オブジェクト指向「初」入門
投稿者:kit
2007/02/20 02:13:25
「オブジェクト指向における is-a の関係は、オブジェクトの振舞い
によって定義される」というのが、件の文献が言ってることなわけ
ですが、どうも CES さんには受け入れられないみたいですね。
実はオブジェクト指向に限らず、ジェネリックプログラミングとも
通じる真理だと思うんですが…
どうも CES さんとの溝は埋められそうにないわけですが、一応、
直接的な疑問には答えておきます。
> 件の文献も言っているではありませんか。
> 「サブタイプならば同じ振る舞いをすべきである」と書かれています。
> 「同じ振る舞いをするならサブタイプである」とは書かれていません。
訳が分かりづらくて、CESさんを誤解させてしまったのかもしれませんね。
Robert C. Martin の「アジャイルソフトウェア開発の奥義」をお持ちだ
そうですから、そちらの該当箇所を参照されてみてはどうでしょうか。
144ページから引用します。
ここで望まれるのは、次に述べるような置換可能な性質である。
S型のオブジェクト o1 の各々に、対応するT型のオブジェクト
o2が1つ存在し、Tを使って定義されたプログラムPに対して
o2の代わりにo1を使ってもPの振る舞いが変わらない場合、
SはTの派生型であると言える。
Webで公開されている和訳では、確かに
> 「サブタイプならば同じ振る舞いをすべきである」
と書かれているように読めるかもしれませんが、本当は
> 「同じ振る舞いをするならサブタイプである」
と書かれているんです。Web の和訳のこの部分は誤訳に近いですね。
Webで公開されている文書であっても、原文の方で確認をすれば
then S is a subtype of T.
と書かれていますから、後者の意味であることは明らかなんですけどね。
> あるクラスと互換性のある属性と振る舞いを持つクラスは、そのクラスと何
> らかの関係があるクラスと見るべきです。
ここまでは合意します。
> 逆転させて言えば「関係の無いクラスに、互換性のある属性と振る舞いを持
> たせるべきではありません=継承関係にすべきではありません=LSP が成立
> してはいけません」となるのではないでしょうか。
違いますね。
「完全に互換性のある属性と振舞いを示すのであれば、それは一見関係ないよ
うに見えても、実は関係があるのだ」というのが正解でしょう。
CES さんは、この考え方を、一貫して拒否されているようですが…
> 小文字の is-a ってどこで使ってますか? ひょっとして原文?
> 提示された日本語版には見当たらないのですが…
ええと、小文字ではじまるのは「is-a」ではなく、「名詞」です。
また、ここで書いているのは原文の話です。日本語版を読んでいるだけでは、
何のことをさして書いているのか、分からないと思います。
> 俺は「LSP に照らすまでも無く、継承関係にしてはいけない場合がある」
> と言う。
これも繰り返しになりますが、「照らすまでもなく」のような暗黙の知識は、
法則としては役に立たないんですよ。だからこそ、明文化された LSP に
意味があるわけです。