kokaさんのこのエントリを読んでいて・・・。
先日の私のセッションでもお話していたんですが、オブジェクト指向がなぜ難しいのかというのは、オブジェクト指向に何を期待するかが非常にあいまいだからじゃないかなと思うわけです。
つまり、目的が定まっていないというところが一番の問題点なんじゃないかなと思うわけです。
で、オブジェクト指向が拡張性が高いだとか、再利用性が高まるだとかという話を耳にします。
ざっくり聞く、オブジェクト指向の効能って、どれも主語がないのであいまいなんですね。
なんで、再利用性が高まるか、なんで拡張性が高まるか。 また、どういう風に再利用できるのか、どういう風に拡張できるのか・・・などなど。
主体となる方法論が抜けちゃっているので、やはり説明が宙に浮いてるように思えます。
つまり、この方法論にたどりつかないことには、きっと、それが自分にとって必要なものなのかどうかもわからなくなってしまうのではないかと思います。
セッションでもお話しましたが、私はオブジェクト指向をある整理術のための道具として捕らえています。
オブジェクト指向(もっと具体的言えば、オブジェクト指向言語などのオブジェクト指向を支援する技術)はあくまで道具ですので、使うことも使わないこともできます。 つまり、オブジェクト指向言語と呼ばれる言語を使用していても、それがオブジェクト指向の方法論に則って記述されなければオブジェクト指向とはなり得ないと思うわけです。
オブジェクト指向と名のついた整理術を利用して、日々整理整頓することによって、結果的に再利用しやすかったり、拡張しやすかったりする技術だと捕らえています。
なので、日々整理整頓する気のない人はオブジェクト指向そのものは、まったく役に立たないと言ってもいいんじゃないかと思うわけです。
オブジェクト指向にはその支援技術である「情報隠蔽(カプセル化)」「継承」「多態性」という3つの道具があって、これをうまい具合に利用すれば整理整頓に一役買ってくれると考えれば非常に素直に理解できるように思います。
その道具を利用しつつ、「オブジェクト指向」で定められたある整理方法があって、これらを理解して使うことが「オブジェクト指向的」といわれる使い方となるのではないかと思うのです。
ただ、オブジェクト指向自体も突然沸いて出てきた技術ではなく、それまでの方法論でなし得なかった、なんらかの必然性があって登場したワケで、この背景を理解していないと、オブジェクト指向自体もなかなか理解しずらいものになってしまうんじゃないかなと思うわけです。
簡単な例で言うと、なにもなかった時代に必然性があってラジオが登場し、ラジオでなし得なかった必然性があり、テレビが登場し、テレビでなし得なかった必然性があってカラーテレビが登場し・・・・という感じでその経過があるワケで、それぞれがどういうものか理解していると、その中身を知るまでもなく必然性は理解できますが、それまでの、基点をアセンブラだとして、アセンブラではなし得なかった必然性があって、高級言語が登場し、当時の高級言語でなし得なかった必然性があって、構造化プログラミングが登場し、構造化プログラミングだけでなし得なかった必然性がありオブジェクト指向が登場したと。
まま、かなり大雑把なフローとなってしまいましたが、最低限、これらがどういうものかが詳細でなくとも理解できることでオブジェクト指向の効能も理解できるんじゃないかなと。
すでに目の前にある、ハイスペックなコンピューターしか知らない技術者は過去にあった基盤がむき出しになったようなコンピューターや紙テープやJCLカードなどになっているコンピューターを知っている技術者のように、そのハイスペックなコンピューターのありがたみが理解できないというのと似ているような気もします。
なので、たたき上げで来た技術者は、過去にあったそれらの経験からどういった操作をすればいいということがおおよそ理解できても、いきなり渡されたハイスペックなコンピューターがどのようにハイスペックなのか、またそのスペックを使いこなすには、やはり、紙テープやJCLは知らないまでも、それらがどのような技術をたどってハイスペックとなっているのかがわからないのではないかと思います。
まま、だらだらと書いてきましたが、結局言いたかったのはオブジェクト指向を理解するためには、オブジェクト指向だけ勉強しようとしても理解しずらいんじゃないかなということですね(^^; その目的を知るには過去の経緯を知る必要があって、それらを理解してオブジェクト指向のよさもわかるんじゃないかなということですね(^^;