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.委譲