「オブジェクト指向は分かりにくい」…。登場から30年余り経っても,未だにオブジェクト指向に対する敷居は高いままだ。ここではオブジェクト指向がなぜ難しいのか,習得するにはどうすればよいのかを見ていく。カギは「人間にとって自然な考えであること」の認識だ。
「どう?例題はできた?」
「う~ん,問題の意味は分かるんですけど…」
「ああ,ここはメソッドの実装が違うんだよ。つまり,このメソッドを呼び出すと…」
「えーっと,ここは継承でいいわけ?」
「まだ混乱してる人とか一部分だけ分かってる人とか,いろいろみたいですね」。 中堅インテグレータ,三菱電機ビジネスシステムの会議室。若手の有志が集まって,オブジェクト指向の勉強会を開いていた(写真1[拡大表示])。
同社がシステム開発に使うプログラミング言語は,Visual BasicとCOBOLが中心。昨年ごろからJavaの開発案件を意図的に増やし始めた。
「Javaを使う上でオブジェクト指向の知識は必須。そこで勉強会を始めることにした。みんな熱心だが,VBを使い慣れたSEやプログラマがオブジェクト指向を理解して,Javaを使いこなせるようになるのは,けっこうハードルが高いと感じている」。講師役を務める同社の田中隆治東日本SEセンター計画グループサブグループマネージャーは,こう話す。同様に,オブジェクト指向にハードルを感じているプログラマやITベンダーは,決して少数派ではないだろう。
オブジェクト指向花盛り
今やIT関連製品や技術は,オブジェクト指向抜きには語れないと言ってよい(図1[拡大表示])。JavaやC++をはじめとするプログラミング言語は言うに及ばず。パソコンのユーザー・インタフェースは,1つひとつのプログラムをアイコンで表し,直感的な操作を可能にするGUI(グラフィカル・ユーザー・インタフェース)が主流である。GUIは言うまでもなくオブジェクト指向の考え方で作られたものだ。
CORBA注1)やWebサービスといったネットワーク経由でのアプリケーション連携技術には,アプリケーション呼び出しやデータ送受信の方法にオブジェクト指向を採用している。オブジェクト指向に基づくシステム開発方法論も出そろって来た。OSや各種のミドルウエアも,オブジェクト指向に基づくものが増えている。登場から30年余り経過したオブジェクト指向は,ITエンジニアにとって,もはや「常識中の常識」と言って差し支えないだろう。
だが,自分自身に問いかけてみてほしい。「私はオブジェクト指向をきちんと理解し,他人に理路整然と説明できる。オブジェクト指向に沿ったシステムの分析・設計や,プログラミングをこなせる」——。あなたはこの問いに自信を持って「イエス」と言えるだろうか。
富士通の白鳥茂男ソフト・サービス事業推進本部EJB事業センター担当部長は,「関連製品や技術が普及しているとはいえ,残念ながら,大半のITエンジニアにとって,オブジェクト指向は,いまだに敷居が高いと言わざるを得ない」と見ている。「分かっているようでいて,人によってオブジェクト指向の理解度に大きな差がある」(日本ラショナルソフトウェアの渡辺隆マーケティンググループプロダクト担当マネージャー)という意見も非常に多い。
今やオブジェクト指向は,システム開発における“共通の土台”となりつつある。1人ひとりのITエンジニアがオブジェクト指向を正しく理解することが,円滑にシステム開発プロジェクトを進める上で欠かせない。にもかかわらず,「オブジェクト指向は十分に理解されているとは言えない」(テクノロジック アートの長瀬嘉秀社長)ようなのだ。
そこで本特集では,改めてオブジェクト指向にスポットを当てた。この章では,まずオブジェクト指向の難しさを整理し,いったいなぜオブジェクト指向の習得につまずいてしまうのかを明らかにする。その上で,オブジェクト指向の基本概念である「カプセル化」,「メッセージ・パッシング」などを,それが登場した理由とともに解説する。
耳慣れない用語にとまどい
まずオブジェクト指向の難しさは,一体どこにあるのか。30人近い若手やベテランのエンジニアに取材した結果,それは2つに集約できる。1つは耳慣れない用語,もう1つはオブジェクト指向の考え方である(図2[拡大表示])。オージス総研の山口健オブジェクトテクノロジー・ソリューション部マネージャは,「そもそもオブジェクト指向という言葉自体がよく分からないという声をよく聞く」と話す。
オブジェクト指向には「継承」や「抽象化」,「メッセージ」,「振る舞い」など,“ITらしくない”言葉が数多く登場する。これらの言葉が災いして,「慣れていない人からすれば,なんでそんな言い回しをするのかと,不思議に思えてくるようだ」(同)。
オブジェクト指向の定義もまちまちである。表1[拡大表示]を見てほしい。オブジェクト指向やJavaに関する参考書から,オブジェクト指向の定義を抜き出したものだ。「オブジェクトに着目した考え方の姿勢」,「実世界のことがらや仮想的な事象の1つひとつを対象にしてモジュール化するパラダイム」…無理もない面もあるが,どの解説文も微妙に表現が異なっているのが分かるだろう。用語がとっつきにくいのに加えて,定義がまちまちでは混乱するのも当然である。