けいじゅ@いしつかです. In [ruby-list:41595] the message: "[ruby-list:41595] Re: Array#+, Array#* [Matrix の継承について]", on Nov/26 16:31(JST) Shin-ichiro HARA writes: >原です。 >まとめておくと > A#opという演算子が > > A op A => A > > という形で定義されているとき、AのサブクラスSに対して > > (1) S op A => A > (2) S op A => S > (3) S op S => S > > などのopの拡張があり得るが(他にもありえるが)、どれで > であるべきかはケースバイケースである。 でしょうね. >したがって、特別な理由がない限り不用意な継承をさせないために >(1)を選んでおく、ということかな。 不用意な継承と言うか, (1)は正しいサブクラスなら必ず満たすことが言えま すからね. (2), (3)は必ずしも成り立つとは限らない. >ちなみに(3)はリスコフの置換原理に少し違反してる? 違反と言うか, 条件が強いですよね. S が A のサブクラス(is-kind-of) => (1)を満たす. は任意のSに対して成立しますが, S が A のサブクラス(is-kind-of) => (3)を満たす. は一般には成り立たないってことでしょうか. >なるほど、例えばSとしてSizedArrayなんかもあり得ますね。納得 >しました。 >ところでふとruby-listを「楕円」で検索したら、 なぜ楕円で検索? と言う気はしますが(^^;; たしかに, 円のサブクラスとして楕円を定義すると置換原理は成り立ちません ね. > [ruby-list:2455] class design > >から始まるスレッドを発掘しました。私も口を出していたのにすっ >かり忘れている。殆ど有史以前という感じですが、「Arrayを継承 >してVectorを作るぐらいだったら死んだ方がまし(意訳)」とか興 >味深い発言がいろいろありました。 これって私の意見を意訳したんですかね? 今は作ると言うよりもレビューする 立場なので, 死ぬのではなくて殺す(意訳)でしょうか(^^;; >金光さんが「オブジェクト指向プログラミング言語Ruby」の出版を考 >えた瞬間が記録されている! このスレッドの中ではないですよね? __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju / ishitsuka.com <<---