From: Hideto ISHIBASHI Date: 2000-06-10T20:10:08+09:00 Subject: [ruby-list:23142] Re: メソッドの中の動きを変える 石橋"rubyholic"秀仁です。 From: matz@netlab.co.jp (Yukihiro Matsumoto) Subject: [ruby-list:23129] Re: メソッドの中の動きを変える > まつもと ゆきひろです > それはFactoryメソッドを使うんでしょう。あるいはProxyパターン ぼくも Factory Method パターンだと思いました。 (snip) > という感じになります。データベースマネージャクラスはいくつか > のメソッドを理解することが要求されてますから、そのメソッドを > 実装するものであればなんでも差し替え可です。 いやー、含蓄に満ちたお言葉ですね。動的言語の Ruby では、 安易に継承を用いないことが良い設計の指針だと思います。 Ruby 本にも「継承は最後の武器だ」と書いてありますし :-) observer.rb では、#update を実装したオブジェクトであれば、 クラスを問わず Observer になれます。なんと継承を使っていません。 つきつめると、継承どころか Mix-in さえ「やりすぎ」だと感じる ようになってきました。これはおおげさですが、「安易に」継承や Mix-in の採用を決めるのは、悪い設計への落し穴だと思います。 自戒の念を込めて、思考停止せずに自分の頭で考えたいですね。 > ま、これはひとつの方法ですが、これも含めて『デザインパター > ン』って本はなかなか参考になります。 'must' 本ですね :-) しかし Pattern Hatching も指摘するように、静的言語に肩入れ しすぎな部分があります。Gang of Four のギャングは 3:1 で静的言語派が多いらしいので :-) あ、そういえば、アナリシスパターンを読んで「型」と「クラス」 の違いが分かりました。スーパータイプを実装するのに、必ずしも スーパークラスを使う必要はない。 Ruby 本の forwarding.rb を使うと、 「多重継承」も「Mix-in」も使わずに 「複数のスーパータイプ」を実現できます。 ぜひ標準添付にしていただきたいです (^^; -- Hideto "rubyholic" ISHIBASHI http://www.rr.iij4u.or.jp/~hideto-i/ blade clone (yaiba) development: http://www.rr.iij4u.or.jp/~hideto-i/rb/yaiba/index.html