継承の使い所がわからない
この前の Ruby/Rails 勉強会で TA をしたとき、図の派生クラスをインスタンス化して standup() メソッドを呼ぶという演習で、C++ や Java のプログラミング経験のある人に、次のような質問を受けた。
-
- 派生クラスをインスタンス化して、直接それぞれの派生クラスのメソッドを呼んでも面白くない。
- 基底クラスに対してメソッド呼び出しすると、実際の派生クラスのメソッドが呼ばれるようにできないか。
Ruby の変数には型がないので、「この変数は基底クラスの型で……」というのはできない。
コンテナの中身も同じ型である必要がないので、ひとつのコンテナに別々の派生クラスのオブジェクトを入れても構わない。(派生クラスじゃないオブジェクトを入れても構わない)
この前の私の解答は、まさにそんな感じで、コマンドラインから指定された複数のクラスのオブジェクトを、ひとつの Array に格納していた。
継承なんてしなくても、それぞれのオブジェクトに standup() というメソッドがあればいいだけ。
Java なら Interface を用意するところだけど、Ruby にはそれもいらない。
ダック・タイピング万歳。
この辺が Ruby の良さなんだろうけど、うまく伝えられなかったかなぁ。
(つづくかも)