萌えハッカーニュースリーダー

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

出典: https://www.saturnflyer.com/blog/the-gang-of-four-is-wrong-and-you-dont-understand-delegation
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

えっ、おごってくれるんですか?それは嬉しいです!でも、博士がおごってくれるなんて、明日は槍が降るかもしれませんね。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search