で検索してみると、各人がいろんな表現や比喩を駆使して、いろんな説明をしています。たしかにどの説明も理解しやすく、そっくりそのままパクッて、生徒に教えちゃおう。なんて思ったりもしました。
・・・しかしまてよ。
私自身は、ある程度オブジェクト指向が何たるかは理解しているからこれらの説明に納得できるけど、まったく何も知らない人は、どうおもうんだろうか!?
というわけで、またもや、「オブジェクト指向とは何か」というとっても基本的なところで悩んでしまいました。やっぱし、人に教えるってのは、なかなか難しいです。
オブジェクト指向は、「理論」ではないような気がします。もうちょっと感覚的な何かだろうと。
で、こんな寸劇めいたことをやってみました。
これで、朝礼という立派なシステムが成立しました。
はい、これがオブジェクト指向です。
オブジェクト指向プログラミングとは、
「極力、実世界の会話をするようにプログラミングすること」。
継承や実装なんていうテクニックの話は、二の次なのではないでしょうか。こういうテクニックから教えてしまうと、肝心のオブジェクト指向の感覚が身につかない。そして、そういうエンジニアは、世の中に結構多いような気もしています。
人間には「あいさつを返す」というルールがあります。これがインターフェースです。
でも「どういう返し方をするか」までは決めてません。だから人それぞれの個性がでます。これがクラスです。
AくんやBくんが、私の「おはよう」を聴いてからそれぞれの返事をするに至るまで、彼らが何を考えたのか過去にどういう教育を受けてきたのかなんてことは私は知りません。これがカプセル化(隠蔽)です。
以上で、オブジェクト指向のほぼ全てを言い表しているのではないでしょうか?
この授業では、Javaの実習環境にEclipseを使っています。初めてEclipseを触らせるときに、「なんでもいいからJavaプログラムを作って実行しなさい」という課題を出しました。環境に慣れてもらうためには、実際動かすのが一番手っ取り早いですから。
すると彼らは、こういうプログラムを書きました。2つの引数を足した結果を標準出力に表示する。というものです。
はてさて、これは「会話しているようなプログラム」でしょうか?
とうてい「会話」には程遠いです。オブジェクト指向で同じことをするには、次のようなプログラムになるはずです。
このコードを書ける「感覚」を身につけることが、オブジェクト指向のスタートであり、ほぼ全て(と私は思います)。
ここまでの解説は、生徒さん達も良く理解してくれたようです。
しかし、どうやらCalculatorクラスやPrinterクラスの作り方がわからない模様。Appletは作れるのに、こんな単純なクラスの作り方がわからないとは・・・。Appletの方が100倍むずかしかろうにw
まるで、英語の読み書きはできるけど、会話はできない日本人(私のこと)のようです。・・・ちょと違うか・・・
そんなわけで次回の授業では、Java言語の特訓じゃ!
覚悟しとけよ、ごるぁ!