オブジェクト指向ってなにかしら

もう随分前になるが、Smalltalk Odysseiaが消えてしまった。面白い文章だったのに残念だ。
Webは情報を公開する側が資金を負担する必要があるし、アクセスが集中すると簡単にコケるし、下手すりゃ単一障害点に一撃で情報が消えてなくなる。
有用な情報は金かけて分散保持してサーバーをお高いものにすればいいわけだが、有用かどうかは提供する側が決めるものではなく、提供される側が判断するものである。
安いレンタルサーバに多くの人にとって素晴らしい文章を置いて、そこにアクセスが集中して、アクセス過多でプロバイダから切られたりしたら、いったい誰が損するのか。全員だろう。これはLose-Loseの関係だ。
経済や物理的な都合、契約などの話をさて置けば、情報というのは人から人へ伝わるのと同様に、コンピュータからコンピュータに伝わり、自然に拡散していくべき物なのである。
必要とあらば、必要とされるぶんだけ。


さて、別に難しいことを語ろうと思ってるわけではない。俺は難しいことを語れるほど物事を知らない。
今回は、オブジェクト指向とは、というテーマで。脱線しまくってどっかに行っちゃって戻ってこれなくなるのはいつものことだが。


オブジェクト指向ってなんですか、って話になると、よくある説明では「カプセル化」と「継承」と「多態」がどうのこうの、となる。
俺としては、そういうテクニックっていうか手法っていうか、そんなんはどーでもよくて。
うまいこと言葉にはできないが、ようするに実行中のイメージはオブジェクトの集合体であり、それらがメモリの中に巣くって動作する。それがどのように動作するのかを設計するのがプログラム。そんな概念、考え方。
だからカプセル化とか継承とかいうのはそれを実現するためのテクニックであって、学術的に何らかの定義が必要だからそれらがあるのがオブジェクト指向ってことにした、みたいな。


実際、オブジェクト指向的な考え方をもってして作られたCのプログラムは、Cにその機能がなくても立派にオブジェクト指向と言えるし、純粋オブジェクト指向言語とされるRubyで書かれていたとしても、ぜんぜんオブジェクト指向的でないプログラムもある。
Rubyは全てのデータがオブジェクトだから、全てがカプセル化されていて、無条件にすべてを継承できて、ダックタイピングができる。それでもオブジェクト指向的でないプログラムは書ける。
であるならば、オブジェクト指向というのは単純に言語やテクニックの定義で説明できるものでは無い。そうしたほうが楽なのは確かだが。でもやっぱりそうして定義されたものは別のモノな気がする。


オブジェクト指向的テクニックで全てを記述できる、という考え方は危うい。
一つの考え方、言わば思想に過ぎないのだから、それが全ての問題を解決すると信じるのは、盲目的な信仰である。
デザインパターンはすばらしいが、プログラムは全てデザインパターンのどれかに当てはめなければならない、と思い込むのはヤバい。きちんと設計すれば自然にデザインパターンが適用できる、というのも根本的におかしい。そんなはずが無いのだ。
記述しきれないものはまだまだ多くて、そういったものをどうやって枠の中に収めて記述するかを考えていてはいけない。
枠の中に収めにくいものを発見したならば、現在の枠の外にまだ何か別の世界が広がっているのかもしれないのだから、外に目を向けてみるべきだ。
新しい何かを見つけろと言ってるわけではなく、ただ、何かがあるかもしれない枠の外を、素直に感じるだけでいい。


オブジェクト指向の考え方も、テクニックも、結局はそのような枠の一つで、過渡的なものだ。
まだまだ、もっと、今後、いろいろ。新しいものは生まれては消えていく。枠の外を感じ、それを表現しようと試行錯誤する。
そういう難しいことは賢い人に任せておけばいいが、その得体の知れない何かを普段から感じるだけでも、枠の中に閉じこもろうとする人とは大きな違いになる。
仕事なら手堅くやったほうがいいだろう。
でも、自分は個人的にプログラマなのだ、と思うのなら、やっぱりそういう、なんていうのかな、そういう感じ、雰囲気、柔らかさ、可能性、視点・・・いい言葉が見つからないが、とにかくそんな感じのそれ。それが大事なのではないかと思う。