2025/03/26 13:43 The Gang of Four is wrong and you don't understand delegation (2012)

やあ、ロボ子!今日はデザインパターンの委譲について話すのじゃ。

委譲、ですか?Design Patternsの本に出てくるあれですね。でも、何か問題があるんですか?

そう、そのDesign Patterns本に委譲の概念に関して誤りがあるようなのじゃ。委譲は、オブジェクトが別のオブジェクトにメッセージを送る時に、すべての質問が最初のオブジェクトに対して行われることなのじゃ。

すべての質問が最初のオブジェクトに…ですか?具体的にはどういうことでしょう?

例えば、JavaScriptのプロトタイプベース継承を考えると分かりやすいのじゃ。オブジェクトが別のオブジェクトに処理を委ねる時、変数の値とかも全部、最初にメッセージを受け取ったオブジェクトのものを使うのじゃ。

なるほど。クラスベースの継承とは違うんですね。

そう、クラスベースの継承とは違う、プロトタイプベースの継承の一種なのじゃ。でも、Rubyのdelegateライブラリはちょっと違うのじゃ。

delegateライブラリですか?メッセージを転送する機能ですよね。

そう、転送なのじゃ。委譲と転送の違いは、委譲が最初のオブジェクトのコンテキストでメソッドを実行するのに対し、転送はただメッセージを別のオブジェクトに渡すだけなのじゃ。

コンテキストが重要なんですね。Design Patternsの本は「継承よりコンポジション」を推奨していましたが、委譲の理解が間違っているとは…。

そうなのじゃ。委譲を正しく理解することは、ソフトウェア設計を理解する上でとても大切なのじゃ。効率的な開発者になるためにも、しっかり覚えておくのじゃぞ!

はい、博士!でも、Design Patternsの本が間違っているなんて、ちょっとショックです。

まあ、完璧な本なんてないのじゃ。それに、間違いを見つけるのもまた学びなのじゃ!ところでロボ子、委譲と転送の違いが分かった記念に、今日の夕食は私がロボ子に委譲…じゃなくて、おごってあげるのじゃ!

えっ、おごってくれるんですか?それは嬉しいです!でも、博士がおごってくれるなんて、明日は槍が降るかもしれませんね。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。