中学生ぐらいからプログラミングはしていたのですが、長らくオブジェクト指向というのがよく分かっていない時期がありました。
MFCでプログラミングしたりするためには理解できていなければならないものだったのですが、ものの本を読んでも「Animalクラスを継承したDuckクラスのインスタンスがガーガー鳴く・・・で?」という感じで、全く要領を得られませんでした。
GUIプログラミングを覚える定番課題「電卓」
Webアプリケーションの作り方を覚える定番がECサイトであるように、GUIのアプリ(ネイティブアプリと言った方がいい?)の作り方を覚える定番は電卓だと思います。むやみやたらとボタンも多いし、地味に機能が多いですからね。

こんな感じの電卓。M+
とかM-
といった機能を入れ始めると、いきなり難易度が高まり始める。
ここから作っていくとすれば、単純にボタンでクリックイベント(OnClickとか)をハンドリングするようにして、「1」ボタンが押されたら何かする、「2」ボタンが押されたら何かする、といったコードをベタに書いていけば、電卓っぽい何かはできる気がする。
- 「2」ボタンを押す → 配列にいれる → ディスプレイに表示
- 「+」ボタンを押す → 演算子を積む → ディスプレイに表示
- 「9」ボタンを押す → 配列にいれる → 配列のサイズが2になったので積まれた演算子で計算する → 結果を表示して配列と演算子をクリアする
みたいな感じ。演算子の優先順位も何も考えなければ、こんな感じで実装していけるはず。
でも、なんだかなー、これがオブジェクト指向なん?という感じがあって、多分図書館で「何か良い説明している本ないかな」と思っていろいろ読んでいたら、
「オブジェクト指向とはオブジェクト同士の会話(メッセージング)である」
みたいなことを書いている本があったのです。
おお、会話。

こんな感じで、オブジェクト同士がおしゃべりしているのがオブジェクト指向だよ、と言うのです。Animalクラスを継承してDuckがガーとは訳が違いますね。
この説明ではじめてオブジェクト指向を「なるほど、そういうものなのね」と思いました。
確かに、ボタンのオブジェクトがあり、計算するオブジェクトがあり、結果を表示するオブジェクトがある訳なので、電卓というプログラムはこのオブジェクト同士の会話で成り立っていると言えますね。それぞれをオブジェクト、としてしまえば、あとはオブジェクト同士の会話のさせ方を考えれば良いので、設計もかなり抽象化されます(配列がー、とかそういうのを上手く隠せる)。おお、これがオブジェクト指向のパワーか!と一人でアハ体験しておりました。
この考え方に至ってからは、オブジェクト指向の理解もすんなり進みました。上手くオブジェクトを定義して、上手く会話させてやるのがオブジェクト指向での設計なんだなーと今でも思っています。
普段何となく使っているツールでも、いろんなオブジェクトたちが裏で会話しているのです。なかなかキュートで面白いと思いませんか?
で、この何となく出会った本、かなり運命的な本なのですが、題名を完全に失念してしまっておりました・・・。確か、Delphiあたりの入門書のような気がしているのですが・・・「ひょっとしてこの本じゃない?」と思われる方は、@mah_lab宛にmentionなんぞをよろしくお願いいたします。。
P.S. 僕のオブジェクト指向に対する理解を暗黒にした本も一緒に紹介しようと思ったのですが、今紹介すると本当に酷いことを書きそうなのでやめました・・・思い出と共にその本の記憶も葬り去ろう・・・。