オブジェクト指向がなんかにぎやか
NZではデザインパターンやポリモルフィズムが理解できているかっていうテストされます、こんにちは。
何か最近オブジェクト指向が日本でにぎやかで、やっぱり日本って異世界だなーとか、別次元だなーとか、みんないつ寝てんだろうとか思ったりします。200年位進んだ国だと思います、いやマジで。
こっちの朝7時とかに元気にツイッター更新している日本人の皆さん、現地時間午前3時ですよね?と言いたくなるのはぐっとこらえています。
別に私はオブジェクト指向に何か物申すような立場じゃないんですけど、オブジェクト指向がなんでオブジェクト指向って言われなきゃならなかったのかっていうのは、多分オブジェクト指向なんて影も形もない時代に世界で初めてそのアイデアを何とか言語化しようとした人がオブジェクト指向といったんだと思いますがアラン・ケイがなんでObject Oriented Programmingという言い方をしなくてはならなかったのかっていうのに思いをはせると面白かったりするんだろうかと思ったりもしました。
技術的な話じゃなくて歴史の話ですね。
Wikipediaにれば、1967年にどうやら造語としてOOPといったのが始まりなようですがその場のひらめきで言った言葉ならその後何がOOPなのかなんて言う議論にアラン・ケイも答えようがなかったのかなとか、当時の常識や人々の感性からOOPという言葉がとっさに出たっていうのも歴史とかで紐解かないとわからなそうだなと思ったりもしました。
多分今同じ話をアラン・ケイがしたらOOPとは言わないと思います。
つまり1970年代なんて言う時代の感性で作られた言葉の周りでいまだに我々は踊っているのでなんかドッグイヤーとか言ってるけどもうなんだかわかんねーなっていう気分でもあります。
もっと言うなら今の人がOOPを見てなんでオブジェクト?とかそもそもOOPとか言われても言葉として全くぴんと来ないとか、今みたいに技術がだいぶ進歩した時代にOOP、それいる?ってなっても何の不思議もないです。
私はOOP、というかJavaで20代のころから仕事をしていて、まだ20代の若かったころにOOPって結局つまり何なんだろうと考えていた時に、「あぁ、まとめるっていう事なのかな」ってなんとなく思ったことがあります。
たとえばですが、カプセル化はデータへのアクセス方法をまとめる、っていう事になるし、継承は共通した処理をスーパークラスにまとめる、っていう事になるし、ポリモルフィズムは処理の呼び出し方をまとめるっていう事になるじゃないかと。
そんな感じに個人的に納得してすっきりしちゃってたんですが、勉強してこなかった人が自分なりに解釈したものでしかないので誰にも言ったことはありません。
ただ、最近のDDDとか関数型プログラミングとかそういったものを見ていても、「コードをどういう風にまとめればすっきりしていて拡張性や保守性が高いか」っていう事をプログラマの方々はずっと考えてきているんだろうなあなどと思いをはせたりもしています。
つまりOOPもそういった歴史の中で何らかのステップは踏んだけど、もはや時代遅れなのかもしれませんね。
OOPは何かの問題を解決して、何かの問題は解決していなくて、何か新しい問題を作ったけど全体的にはよりよく世界を変えたから主流になった、けどそんなOOPを踏まえた別の何かがOOPの利点はそのままに別の問題を解決したとか、OOPが新たに生み出した問題を解決した、という哲学的に言うならばアウフヘーベンが起きたのでそっちに行っている、という過渡期に今我々はいるのかもしれませんが、もうそれはずっと起こりっぱなしなんでしょう。
別にOOPは役割を終えたという話をする気はなくてOOPは安住の地を見つけたっていう感じなのかなあと思ったポエムでした。