オブジェクト指向を何時学ぶ?

C++を使うだけでオブジェクト指向にはならない。オブジェクト指向を学んだ上でオブジェクト指向言語を使うべきである」とか「Cを学んでからC++に進むべきか、それともいきなりC++を勉強しても良いのか?」という質問に「いきなりC++でも構わない。それよりもオブジェクト指向が分かるかどうかが問題だ」というような意味の話や文章を見たことがあると思います。アドバイスをする人はCなどでプログラミング経験があり、C++で苦労し、最初からオブジェクト指向を知っていればしなくて良い苦労だった、と思っているかも知れません。

一方、私はプログラミング以前に大学の講義でオブジェクト指向を学び、その後、プログラミングを始めたという、当時では珍しいパターンでした。で、オブジェクト指向で苦労しなくて良かったか?というと、確かにオブジェクト指向で悩んだことはありませんが、動くプログラムを書くことでかなり苦労しました。当たり前です、オブジェクト指向は知っていてもプログラミングについては素人だったのですから。

では、その素人プログラマが何をするかというのを私の経験に基づいて紹介してみます。まず、クラスが多い。取りあえず問題領域に出てくる名詞がどんどんクラスになります。当時のオブジェクト指向分析が名詞に注目しろと言っていたので、その通りやります。そのくせ、問題領域に関するクラスしか作らないので、実装はプリミティブな型(intとかchar)のような粒度の細かいものばかり使う。次に、クラスにメソッドが少ない。クラスが公開するメソッドしか作らない。実装上必要なヘルパーメソッドなんか考えにありません。必然的にメソッドが長くなったり重複します。重複を無くす方法は汎化して親クラスにメソッドを移動させる方法しか思いつきません。すると、継承ばかりのクラス構造になる。で、メンテ不能・・・。ヒドイ話ですが、私のプログラマ1年目はこんな感じでした。

で、本題のオブジェクト指向を何時学ぶかですが、構造化プログラミングくらいは出来るようになって、データや関数を上手く管理出来ないとかグローバル変数を上手く管理する方法はないか?といったことを悩んでからの方が、オブジェクト指向の有り難みや向き不向きが分かると思います。学ぶ順番はともかく、オブジェクト指向だけというのは良くない気がしています。