一から組み立てて、初めてわかることって多いよね

例えば、オブジェクト指向を知りたくてJavaを覚える。抽象化とか、カプセル化とかの解説を読む。クラスの作り方、継承の仕方、コンストラクタって?とかいろいろ覚える。
よくある言い回し「現実の「物(オブジェクト)」を作るイメージでそのまま作れる。」の意味が一応はわかったつもりになるんだけど、人から「オブジェクト指向って何?」って聞かれると、答えに詰まってしまう。もやもやな理解。
結局残るのは「オブジェクト指向って、たくさん関数があって便利なものなんだなぁ」くらい。
いやいや、それはJavaのクラスライブラリが充実しているしてるだけで、それが直接オブジェクト指向じゃないから!(オブジェクト指向の結果としてライブラリが充実しているだけで、充実してるからオブジェクト志向なわけじゃない。)

でも、オブジェクト指向と関係ないと思われているC言語で、オブジェクト指向のプログラミングを試みる。
オブジェクト指向を支援する機能が一切ないなかで、0から本当に必要なものだけ作っていく。
余計なものがないから、Javaではいろんな機能がありすぎてわからなかった、オブジェクト指向の本質が見える。
そのなかで、C言語で継承を実装しようとするとめんどくさいな、とか多重インクルードの問題も意識しなきゃいけないのか、とか非効率的なことが出てくる。
そこで気付く。
あぁ、Javaのあの機能はこの問題をスマートに書けるようについていたんだ!

構造化プログラミング←→オブジェクト指向プログラミング
と、「!比較対象!」があると、それぞれの特徴がよく見えてそれぞれに理解が深まる。
Myファゴットと借りたファゴットみたいな。
歴史の勉強もばかにしちゃいけないね。(昔←→今)

あと、オブジェクト指向の言語を考えた人の気持ちになって、オブジェクト指向を支援する機能のないところから(0から)作ってみるのも、理解が深まる。

と、「C言語によるオブジェクト指向プログラミング入門:坂井 弘亮」を読んで思った。
なんかこの坂井 弘亮さんがよさそうなのでほかの本も読んでみたい。

でもそのまえに今日中に1つ、明日中に3つレポートを終わらせないと・・・泣