匿名回答2号さんのコメント
材料 r = new 秋刀魚
調理器具 t = new 魚焼きグリル
t.焼く (r) # 旨っ
r = new 玉ねぎ
t.焼く (r) # まずっ!
t = new フライパン
t = (new 材料コンポジット).add (玉ねぎ、オリーブオイル)
t.焼く (r, 弱火) # 旨っ
r = (new 材料コンポジット).add (玉ねぎ、キノコ、バター)
r = (new アルミホイル).wrap (r)
t = new オーブン
t.焼く (r) # ホイル焼きの完成
匿名質問者さんのコメント
お二人とも早速のご回答ありがとうございました。
何か、もやが晴れる感じがしました。
ご回答もわかりやすく面白く(笑)、自分としてはよくわかったと思います。
Javaなどでオブジェクト指向プログラミングをしたことはまだないのですが、
教えていただいた差分を意識して勉強してみます。ありがとうございました。
匿名回答1号さんのコメント
ふむ。「焼く」を調理器具が持つメソッドと解釈してきましたか…
たしかに食材ごとの「焼く」、調理器具ごとの「焼く」がありえて、
つまり、食材と調理器具の組み合わせごとに別々の「焼く」があるってことになります。
このように、組み合わせごとに異なる処理の仕方がある状況は、一般的なオブジェクト指向プログラミングではやはり解決できません。多重ディスパッチといいます。
食材と調理器具のような2ジャンルの組み合わせまでなら2重ディスパッチといってオブジェクト指向の枠内でも面倒くさいながら表現は可能ですが(ダブルディスパッチパターンとか、Visitorパターンとか呼ぶ技法を使います)。
匿名質問者さんのコメント
入れ違いでまたまた回答ありがとうございました。
もはや呪文・・・。勉強始めたら1号さんの2度目の回答も
理解できるようがんばってみます^^;