先週末は、勉強会に行ってきました。
いまさらながら、スピーカーのみなさん、参加者のみなさん、お疲れ様でした。
参加者も過去最大級とのことで、ひとつ気になるのは Blue さんとこにあった話 みたいなことが起こりはしないかなーとか。
願わくば、「勉強させてくれると思ったのに」的な発言で水を差すやからが現れませんように。
んで、勉強会。シャノンさんの話で思ったこと。
他の方のツッコミにもありましたが、私も「え?『カーナビのついた車』って、『車』を継承してつくるの?」って思ったクチです。
でもなー、後からカーナビを追加する場合はどうするのよ? ← いまどきそんな奴はいねえってか?
その場合、インスタンスは『車』(もしくは『カーナビのついていない車』)クラスから『カーナビのついた車』クラスに移行することになるのだろうか?んー、でも、それは実装ベースで考えるから違和感があるだけで、概念としては動的にクラスを移動すること自体には問題ないのかなぁ?
やっぱり個人的には、継承でない方がすんなり納得できそうな気がします。
車ってそれ自体が拡張可能な形になってるはずだから、コードにすればこんな感じになるのかな、と。
#概念と実装は別の話です、ってな話がありましたが、混同しまくりですね。
Pulic Class 車 {
...
private Option オプション装備[];
....
Pulic addOption(Option オプション機器) {
オプション装備.add(オプション機器);
}
}
つーと、『カーナビのついた車』って、継承を使わなくても
車 car = new 車()
カーナビ navi = new カーナビ()
car.addOption(navi)
って書き方ができるし、その方がしっくりくるんですが。#いや、比喩的な話ってのはわかっちゃいますけどね。
……と、そこで話は終わらなかったりします。
そこでまた(今度は自分に対する)疑問。『カーナビのついた車』って毎回こんな風にして書くのか?それって面倒じゃないか?
最初からカーナビのついている車だったら、車クラスを拡張してコンストラクタでオプション機器を渡せるようにすればもう少しましになるけど、標準装備だったりするとそれをわざわざ引数として渡すのも変。
となると、結果的には継承を使って『カーナビのついた車』を定義してしまいそうな気もします。でも、それって単なる簡略表記だよなぁ。
うーん、継承って何かわからなくなってきました……。もう少し考え直してみます。
#というか、デレゲートって概念的には継承の一種だったりする?
……話は変わって。
勉強会にいくと、とにかく何かしなきゃあ、とか思ってしまうところは不思議。
#行ってから、オブ熱にかかってる奴。
んで、いっそのこと、クラスとかオブジェクトとか専門用語いっさい抜きでオブジェクト指向って語れんもんかなー、とか思ったり。
#もちろん、「類」も「対象」も抜き(笑)。
ターゲットは、(IT入門者どころか、)コンピュータもろくに触ったことのないような人、ということで。
あいも変わらず実用性皆無の方向で、ちょっと試行(思考)実験してみようかな、とか。
なにかまとまったら上げてみるかも。いつになるかわからないですけどね。