"ポリモーフィズム==ガチャピンチャレンジ"説

コラム「システムエンジニア 生き残りの極意」でちょっとした祭りになっている件 - babydaemonsの日記 コラム「システムエンジニア 生き残りの極意」でちょっとした祭りになっている件 - babydaemonsの日記

ポリモーフィズム多態性)を知らずにオブジェクト指向という単語を口にするなー!!!

という悲痛な叫びを読んでふと思い出したのでメモ。
以前、会社の技術者向け新人研修でJavaを教えたとき、ポリモーフィズムの概念を理解してもらうときに使った例え。

ポリモーフィズム==ガチャピンチャレンジ」説

要は、ガチャピンの着ぐるみ(Javaで言うインターフェイス)に"何かチャレンジしろ"というメソッドを定義する。「中の人」が入れ替わることで、"何かチャレンジしろ"というメソッドを実行したときの処理内容は変化するけど、視聴者(呼び出し元)から見れば「中の人」がスキーヤーだろうが格闘家だろうがレースドライバーだろうが、全てひとくくりに「ガチャピン」として扱うことが出来るので便利。ひたすらifで処理を分岐させるよりこうした方が楽だよね・・・という感じで説明して、大分納得してもらえたような記憶が有る。

追記

それにしても、ネタ元の@ITのコラム
システムエンジニア 生き残りの極意: 実はオブジェクト指向ってしっくりこないんです! システムエンジニア 生き残りの極意: 実はオブジェクト指向ってしっくりこないんです!
が、新人研修を受けていた頃の自分と重なってちょっと笑えないなあ。

特に「メンバー関数をstatic宣言すればインスタンス宣言をしなくてもいい」ということ知ってからは、メンバー関数を従来のファンクションのように使っている。共有変数も、pubulic static宣言していまう。したがってプロパティなんて作らない。

大真面目で同じこと主張してた頃を思い出す。「データの保持もデータの処理も全部ひっくるめて呼び出し先インスタンスに投げてしまう」ことの便利さに気づくまでは、無駄だと思うよねやっぱり。

また、コメントの

そうなんです。なぜいきなりstaticの話をしたか? それは非オブジェクト指向言語プログラマーがオブジェクト指向本を買い、最初のクラスとインスタンスの章を読んだだけで、今までの関数やグローバル変数が使えないのかと思って挫折してしまうのです。

も、「グローバル変数使えないって余りに駄目じゃないか」的なことを言ってた頃を思い出す。そうなんだよなあ、途方にくれたよなあプログラム初心者だった新人時代は