理由その2──比喩を使った説明による混乱

OOPの仕組みは、現実世界の様子になぞらえて、次のように説明することがよくあります。

「動物がスーパークラスで、哺乳類や魚類がサブクラス。卵を産みミルクで子供を育てるカモノハシは、は虫類と哺乳類を多重継承している」

「人は“生年月日”という属性を持つ。具体的な人である田中さんに“年令を教えてください”というメッセージを送ると、“28才です”と答えが返ってくる」

「病院で医師や看護師、薬剤師が連絡し合いながら仕事をするように、オブジェクトもコンピュータの中でメッセージを送り合いながら仕事をする」

たとえ話による説明で混乱している開発者

こうした説明をすることで、複雑なOOPの仕組みを印象的に伝えることができます。しかしこのような説明だけで終わらせてしまうと、比喩のほうが強い印象として残ってしまい、OOPが実際のプログラミングの場面でどう便利なのかは伝わりづらくなります。

理由その3──コンセプトが抽象的

OOPの仕組みはかなり複雑な一方で、「モノ中心」あるいは「モノ指向」というコンセプトはとてもシンプルなため、簡単に理解できます。そして、このコンセプトは応用範囲が広いため、現実世界の人や組織、物事や出来事、コンピュータシステムの機能、システムが管理する情報、プログラムの構成要素など、さまざまなものに当てはめることができます。(中略)

なんでもオブジェクトととらえることができる

こうした考え方にはまぎらわしい落とし穴がありました。それは、OOPの仕組みと現実世界の様子にはよく似ているところがあるものの、まったく同じではないことです。加えて、現実世界で人間が行う仕事の範囲と、コンピュータ上でソフトウエアが行う仕事の範囲も多くの場合は異なるため、人間が行う仕事をオブジェクト指向で整理し、それをそのままプログラミングしようとしても実際にはうまくいきません。

このように、現実世界の様子とOOPの仕組みが「似て非なるもの」であることのまぎらわしさや、哲学的な響きを持つ「オブジェクト指向」というコンセプトが魅力的だったことが、かえってこの技術の実態をわかりづらくし、混乱を招きやすくしています。

(『オブジェクト指向でなぜつくるのか 第3版』 21~28ページから抜粋)

×   ×   ×

以上の3点がオブジェクト指向を難しくみせている主な理由です。では、これらを踏まえ、どのようにすれば、「難しいソフトウエア開発を楽に行うための総合技術」であるオブジェクト指向を理解できるのでしょうか。

本書『オブジェクト指向でなぜつくるのか 第3版』では、次のような方針で説明しています。

・OOPの仕組みについては、プログラミング言語の進化の歴史を踏まえて、メリットを具体的に説明する
・比喩による説明は最小限に抑える。比喩を使う場合にはその旨を明示する
・プログラミングの仕組みと、「モノ中心」で汎用的に物事をとらえる考え方は別物として、分けて説明する。

ぜひ、この方針に基づいて分かりやすく説明している本書を読んで、プログラミング学習におけるハードルの一つ、オブジェクト指向を理解し、自信を持って「オブジェクト指向を理解しています」と言えるようになってみてはいかがでしょう。

(日経BP コンシューマーメディアユニット 田島篤)