« Rubyとオブジェクト指向についてアウトプットしてみる【Mixin(extend)】 | メイン | Apacheアクセスログで集中してアクセスのある時間帯がないか調べる »

Rubyとオブジェクト指向についてアウトプットしてみる【委譲】

9.委譲

require 'forwardable'

class Kuririn
  def kienzan
    print "気円斬!"
  end
  def mekuramashi
    print "目くらまし!"
  end
end

class Gohan
  extend Forwardable

  def initialize
    @q = Kuririn.new
  end

  #気円斬を Kuririnに委譲(任せる)
  def_delegator :@q, :kienzan
end

gohan1 = Gohan.new
gohan1.kienzan   #=>気円斬


悟飯(Gohan)は、クリリンではないので、気円斬を使えない。
しかし、悟飯(Gohan)に気円斬を使う依頼が来た!
悟飯は気円斬を使え!と言われたが、クリリンに任せた。
これが委譲。



詳しく説明すると・・・

オブジェクトの機能を再利用する手法の一つとして、Ruby では言語仕様としてクラスの継承とモジュールの Mix-in を提供しています。これらは、元になるクラスやモジュールの実装までもをそのまま取り込んでしまいますが、他の手段で機能の再利用を実現する手法として、委譲があります。

委譲では、再利用したい機能を自分に取り込むのではなく、その機能を持つオブジェクトに処理を依頼します。

Ruby では特に言語仕様として委譲がサポートされているわけではありませんが、委譲を実現するためのライブラリとして forwardable と delegate が用意されています。具体的には、これらのライブラリを使用することによって、あるメソッド呼び出しを他のオブジェクトのメソッドに「たらい回す」ということを簡単に記述することができます。

参考


○Rubyとオブジェクト指向についてアウトプットしてみる○
1.メッセージ ~オブジェクトは「問いかけたらきちんと返事をしてくれる」~
2.継承とは
3.メソッドの実行
4.特異メソッド
5.特異クラス
6.オーバーライド
7.Mixin(include)
8.Mixin(extend)
9.委譲


トラックバック

このエントリーのトラックバックURL:
http://synth.jp/pg/mt-tb.cgi/229

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

カレンダー


2007年06月
Su Mo Tu We Th Fr Sa
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Map

About

2007年04月12日 17:27に投稿されたエントリーのページです。

ひとつ前の投稿は「Rubyとオブジェクト指向についてアウトプットしてみる【Mixin(extend)】」です。

次の投稿は「Apacheアクセスログで集中してアクセスのある時間帯がないか調べる」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。