iPhoneアプリ作成までの道のり2

2. オブジェクト指向を理解する

オブジェクト指向の本を読んで、オブジェクト指向の概念だけを勉強するというのは、ひどく退屈なものだ。私は、オブジェクト指向を理解するにあたっては、概念を把握するための読書はほどほどにして、実際にオブジェクト指向っぽいプログラムを書いてみることが大事だと思う。C言語にきちんと取り組んできた人は、ここでも経験が生きるはずだ。関数分解だけに頼って、プログラムを綺麗に設計するのは難しいし、コード量が多くなってくると、追うのが大変になってくる。それを実際に自分の作成したプログラムで体験した人ならば、オブジェクト指向設計のメリットを理解しやすい。特に良い例は、Cの標準ライブラリのFILE構造体と、それを受け取るI/O系の関数だ。ああいった疎結合な設計をプログラミング言語レベルでサポートするのがまさにオブジェクト指向言語である。

オブジェクト指向を解説している書籍やWebサイトは山ほどあるので、自分の分かりやすいと思うものを参考にするのが一番良い。
要点を挙げるならば、

・クラスとは何か
・オブジェクトとは何か
・属性とメソッド(Objective-Cではメッセージ)
・継承とポリモーフィズム

この辺を理解すれば良いだろう。
簡単に言ってしまえば、オブジェクト指向とは、「クラスの実体であるところのオブジェクトが、互いにメッセージを送信し合うことによって、プログラムとして動作する」というものである。

初学者が一番理解に苦しむのがポリモーフィズムだ。なぜ理解に苦しむのかというのは、おそらく、「仕組みが不透明で、得体が知れない。よくわからないものを自分で使うのは気持ちが悪い」ということなんじゃないかと思う。だとすれば、その意味不明なものに対する警戒的姿勢は、プログラマとしてひどく正しい。ポリモーフィズムについては、デザインパターンを使うようになれば、だいぶ抵抗がなくなるはずである。それまでは、まずは仕組みとして、C++の仮想関数を覚えてしまう、というのが良いような気がしている。最初から機械の仕組みとして覚えてしまえば、とりあえず「気持ち悪さ」については緩和されるんじゃないだろうか。ポリモーフィズムなんていうのは、ただコンパイラが持っている1つの機能であり、ルールの1つだ、としてしまえばいい。実際、自分の時がどうだったかを振り返ってみると、C→C++と学んだ私は、Visual C++に付属していた薄っぺらいマニュアル*1で学習したわけだが*2、「オブジェクト指向」なんてものは大げさな感じがして、なんだかよく分からなかった(そもそもオブジェクト指向の解説はほとんどなかったと思う)。それでも、仮想関数の仕組みはすぐに覚えられたし、「こりゃ便利だ」と、すぐに使い始めていた記憶がある。

オブジェクト指向というのは、使いこなせるようになれば便利なのだが、覚えるまでの間が退屈すぎるのだ。どの本もどの解説も、話が抽象的で、読む方からすると煙に巻かれているように感じるのだ。かといって、そう思っている私がオブジェクト指向の本を書いたとしても、また同じようなものになってしまう。だから、こんなものは時間をかけて学ぼうとする必要はない。1日本を読めば十分だ。次の日から、1時間ずつオブジェクト指向の勉強の時間を減らしていって、1日1時間を割ったら、2日に1回1時間とかにしていけばいい。Objective-Cで、まっとうな設計でプログラムを書いていこうという姿勢が少しでもあるならば、オブジェクト指向なんていうものは自然と身に付くはずだ。

*1:いわゆる「薄い本」というやつではない。ちゃんとしたプログラムの解説書だ。

*2:今はもう手元にはないが、今まで私が読んだプログラミングの入門書の中で、あのVC付属のぺらぺらマニュアルが一番の良書だったように思える