From: matz@... (Yukihiro Matsumoto) Date: 1999-11-24T04:05:25+09:00 Subject: [ruby-list:18871] Re: Why Mix-in? (Re: [book] $*, etc.) まつもと ゆきひろです In message "[ruby-list:18852] Re: Why Mix-in? (Re: [book] $*, etc.)" on 99/11/23, Toyofuku writes: |> Ruby本、p.175図4-5と、p.178図4-9の周辺ではいかが? | | ダメです。:-) そうですか。 |というか。多重継承も Mix-in も使ったことないので |実感がわきません。 うーん、「使ったこと無いんで実感がわかない」んですから、使っ てみていただかないことにはどのような説明も無効のように思いま す。やっぱり経験によって学んでいただかないと。:-) ともあれ、まず最初に理解していただきたいのはMix-inは多重継承 のサブセットだと言うことです。つまり、「多重継承にできないこ とがMix-inにできる」というのではないということです。逆に「多 重継承ではまずい設計ができてしまう可能性があるが、Mix-inが強 制されればそれはできない(まずい設計になりにくい)」ということ ですね。引き算の発想。 gotoであらゆる制御構造が構成できるが現代の言語の多くにgotoが 採用されていないようなものですね。 |どういう流れでこう出力されるのかよくわかって |ないのですが多重継承にはこの仕掛は入れられ |ないのでしょうか。またこの仕掛が入れている |ことによる Mix-in のデメリットはないので |しょうか。 仕掛けそのものは不可能ではないです、つーか、まったくおんなじ やり方が可能です。繰り返しますがMix-inは多重継承のサブセット ですから。が、多重継承はクラス関係の任意のDirected Acyclic Graph構造を許しますから、この仕掛けが直感に沿う保証はどこに もありません。一方、単純継承+Mix-inはそのかなり小さなサブセッ トですので、直感に沿わない可能性がかなり低いです。 Mix-inにおけるこの仕掛けのデメリットってのは思い付きませんね。 あるのかもしれませんが。 | 「複数回実行」以外の「クラスの挙動が予想しに |くくなる」具体例とそれを Mix-in で書いたときの |例の比較などもあるともっとぴんとくると思います。 うーん、実はかなり深いクラス階層が構成されないとこの問題は発 生しないのですが、この問題が発生するような深いクラス階層は、 ほとんどの場合そもそも問題のあるクラス設計ですから、Mix-inに よって「クラスの挙動が予想しにくくなる具体例」ってのはなかな か作りにくいんですね。 ちょっと無理矢理な例ですが Window TitledWindow ShadowedWindow TitledShadowedWindow TerminalWindow TitledTerminalWindow ShadowedTerminalWindow TitledShadowedTerminalWindow というクラス階層を、Mix-inを使わないで Window