俺にとって、オブジェクト指向「分析」「設計」「プログラミング」において最も重要なものは「オブジェクト」だ。オブジェクトとは、複数の処理と値を1つにまとめたデータ構造の事だ。
みんなで分担して実装できるとか、継承する事で無駄がなくなるとか、カプセル化とかは大したことではない様に俺は思う。なぜならC#やFlashやPHPやPerlやJavaなどオブジェクト指向の言語を使っていても、「俺C#とサーバ用意するから、君Flashと電子工作やってね」という風に分担してしまうから。俺がやっている、コンピュータが入っている物体を作る「インタラクションデザイン」というのが、オブジェクトの単位で仕事分担をするよりも、処理系単位で分担をした方が良い分野だからかもしれない。
話を戻すと、そういう処理系やプログラミング言語のレベルで分担してしまうような人にとって、なぜ「オブジェクト」が1番重要か?というと、その「処理と値を1つにまとめたデータ構造」という考え方が、俺達が普段生活している世界に近いからだ。
ビデオを見て欲しい。
このビデオを、普段使っている言葉で記述するとこうなる。
2人の男性がMacBookを振り、ライトセイバーの音を出しながら戦っている
このように、言葉にする時、名詞と動詞とがある。
それはオブジェクトとそのメソッドとプロパティとして表す事ができる。
オブジェクト指向で書かれたプログラムは、実行される時には機械語として実行されている。それは電子をあっちからこっちへ動かしている、よくわからない世界だ。プログラミングというのは、コンピュータにそういうよくわからない動作をさせるための「手順」を書く事だ。
しかし、俺達がモノの仕組みを考えて、現実的な問題を解決しようとしている時、シーンを頭に思い浮かべたり、実物大のモックアップを前に「ここはこうなんじゃないか?」と議論したりする。そしてその試行錯誤を、頭の中で完結させないために、すぐにプロトタイプを作って動かしてみる様にしている。
つまり、チーム内で議論したりシナリオやシーンを試行錯誤する事と、手を動かして作る事はセットとして反復する必要がある。
でも、実際にプログラミングする時になっていきなりよくわからない電子の世界に行きたくはない。シナリオを頭に残したままの状態でプログラミングしたい。そしてちょっと動いたら見せ合って、また話し合って、またプログラミングに戻りたい。
そういう時の、コンピュータに動作手順を指定しつつ、シーンとかシナリオとか使い心地を考えながらやるのに一番向いているのがオブジェクト指向なんだと思う。
なぜなら、変数と関数をひとまとめにしたオブジェクトというモノが、名詞や動詞や主語述語で認識している、俺達が普段生活している世界にかなり近いから。
オブジェクト指向という考え方において、「メソッドとプロパティを1つにまとめたオブジェクト」が一番大事だと俺が感じている理由は、この日常世界のデザインを試行錯誤している時の考え方とオブジェクト指向という考え方かなり近い為だと思う。
モノを作る時は、直感で閃いて論理的に設計実装している。
論理的にマーケティングして直感で設計実装するのが、つまらなくて動かないモノを量産してしまうパターンらしいが、とにかく俺は今年度「直感で閃いて論理的に設計実装」する事を心がけてみた。
もう少し詳しく、「直感で閃いて論理的に設計実装する」とはどういうことか?
「日常生活の中の現象に対する新しい視点を得て、面白く意義深いモノをデザインしていく」という事だと思う。
ここまでモノを作るプロセスを分解した後に論理的に考えたら、もっともっと面白いモノをたくさん作ることが方法がわかった。
ポイントは2つある。
1.日常の中の現象に対する新しい視点を得る方法
2.面白く意義深くデザインしていく方法
技術のエクササイズ、テクササイズの第9回課題でArduinoボードを作った。テクササイズのサイトはパスワードかかってますが。
Arduinoは何度も書いてるけど、Atmel ATmega8/ATmega168を使いやすくする開発環境で、基盤の仕様やブートローダーも全部オープンソースになっているプロジェクトです。
なのでArduinoボードを購入せずに、部品買ってきてゼロから自分で作る事もできる。
オープンっていうか、RS232C-UART変換と16MHzの発振子を使うことを守れば、基本的に何でも良い。Arduinoのサイトにパーツリストや回路図があるが、今回は日本で入手しやすいパーツ(秋月や千石など。DigiKeyは小ロットだと高いので使わない)で作った。