![見出し画像](https://assets.st-note.com/production/uploads/images/54425669/rectangle_large_type_2_16082e4f085fbbd78d1e858da3c2c3a1.png?width=1200)
キッチンでプログラミング(13)
【いろいろなものをザックリとらえよう】
ビットさんが言いました。「今日は多態性(たたいせい)を紹介したいと思うの。多態性はポリモーフィズムとも言うわ。」
かなたちゃんが言いました。「わーっ、むずかしそう。」
「そうね。言葉がむずかしそうよね。でも、内容はそんなにむずかしくないし、とても便利な考え方なの。」
「例えば、レストランに来た4人のお客さんが、2人はクリームシチュー、1人はチキンカレー、1人はトマトシチューを注文したとするでしょう。そうすると、次のように書かなければなりませんね。」
~作り方~
料理ロボA1 ← 『クリームシチューを作るロボット』インスタンスを新しく生み出す。
料理ロボA2 ← 『クリームシチューを作るロボット』インスタンスを新しく生み出す。
料理ロボB ← 『チキンカレーを作るロボット』インスタンスを新しく生み出す。
料理ロボC ← 『トマトシチューを作るロボット』インスタンスを新しく生み出す。
(省略)
料理ロボA1.味付けする()
料理ロボA2.味付けする()
料理ロボB.味付けする()
料理ロボC.味付けする()
(省略)
~~~~~~~~~~
ビットさんが言いました。「でも、どの料理もザックリと煮込み料理ととらえると、次のようになるわ。」
~作り方~
料理ロボA[] ← 『煮込み料理を作るロボット』インスタンスを新しく生み出す。
料理ロボA[0] ← 『クリームシチューを作るロボット』インスタンスを新しく生み出す。
料理ロボA[1] ← 『クリームシチューを作るロボット』インスタンスを新しく生み出す。
料理ロボA[2] ← 『チキンカレーを作るロボット』インスタンスを新しく生み出す。
料理ロボA[3] ← 『トマトシチューを作るロボット』インスタンスを新しく生み出す。
(省略)
繰り返す{
料理ロボA[n].味付けする()
}
(省略)
~~~~~~~~~~
ビットさんが言いました。「こんな風に書くと、みんな親クラスの『味付けする()』を呼んでいるのに、それぞれ違った味付けをしてくれるのよ。便利だと思わない。」
はじめ君が言いました。「うーん、よくわからないや。」
ビットさんが言いました。「どの料理も煮込み料理の一種だってことはわかるわよね。」
はじめ君が言いました。「うん、わかるよ。この前、継承(けいしょう)っていうのを勉強したからね。」
ビットさんが言いました。「そうね。例えば、
料理ロボA[0] ← 『クリームシチューを作るロボット』インスタンスを新しく生み出す。
では、料理ロボAっていう配列の0番目にクリームシチューを作るロボットのインスタンスが入っているの。料理ロボAは煮込み料理を作るロボットだけど、これはただの箱で、中身はクリームシチューを作るロボットだから、『料理ロボA[0].味付けする()』は実体であるクリームシチューを作るロボットの味付けする()が実行されるのよ。わかったかしら。」
はじめ君が言いました。「なんとなくわかった気がするよ。」
ビットさんが言いました。「同じ呼び出し方なのに、呼び出される側はきちんと自分にあった動作をするから多態性って言うの。」