俺にとって、オブジェクト指向「分析」「設計」「プログラミング」において最も重要なものは「オブジェクト」だ。オブジェクトとは、複数の処理と値を1つにまとめたデータ構造の事だ。
みんなで分担して実装できるとか、継承する事で無駄がなくなるとか、カプセル化とかは大したことではない様に俺は思う。なぜならC#やFlashやPHPやPerlやJavaなどオブジェクト指向の言語を使っていても、「俺C#とサーバ用意するから、君Flashと電子工作やってね」という風に分担してしまうから。俺がやっている、コンピュータが入っている物体を作る「インタラクションデザイン」というのが、オブジェクトの単位で仕事分担をするよりも、処理系単位で分担をした方が良い分野だからかもしれない。
話を戻すと、そういう処理系やプログラミング言語のレベルで分担してしまうような人にとって、なぜ「オブジェクト」が1番重要か?というと、その「処理と値を1つにまとめたデータ構造」という考え方が、俺達が普段生活している世界に近いからだ。
ビデオを見て欲しい。
このビデオを、普段使っている言葉で記述するとこうなる。
2人の男性がMacBookを振り、ライトセイバーの音を出しながら戦っている
このように、言葉にする時、名詞と動詞とがある。
それはオブジェクトとそのメソッドとプロパティとして表す事ができる。
オブジェクト指向で書かれたプログラムは、実行される時には機械語として実行されている。それは電子をあっちからこっちへ動かしている、よくわからない世界だ。プログラミングというのは、コンピュータにそういうよくわからない動作をさせるための「手順」を書く事だ。
しかし、俺達がモノの仕組みを考えて、現実的な問題を解決しようとしている時、シーンを頭に思い浮かべたり、実物大のモックアップを前に「ここはこうなんじゃないか?」と議論したりする。そしてその試行錯誤を、頭の中で完結させないために、すぐにプロトタイプを作って動かしてみる様にしている。
つまり、チーム内で議論したりシナリオやシーンを試行錯誤する事と、手を動かして作る事はセットとして反復する必要がある。
でも、実際にプログラミングする時になっていきなりよくわからない電子の世界に行きたくはない。シナリオを頭に残したままの状態でプログラミングしたい。そしてちょっと動いたら見せ合って、また話し合って、またプログラミングに戻りたい。
そういう時の、コンピュータに動作手順を指定しつつ、シーンとかシナリオとか使い心地を考えながらやるのに一番向いているのがオブジェクト指向なんだと思う。
なぜなら、変数と関数をひとまとめにしたオブジェクトというモノが、名詞や動詞や主語述語で認識している、俺達が普段生活している世界にかなり近いから。
オブジェクト指向という考え方において、「メソッドとプロパティを1つにまとめたオブジェクト」が一番大事だと俺が感じている理由は、この日常世界のデザインを試行錯誤している時の考え方とオブジェクト指向という考え方かなり近い為だと思う。