オブジェクト指向は難しくない!連載をフォローオブジェクト指向を正しく理解する混乱を招く落とし穴に注意しよう2006.11.16コピーしましたPRオブジェクト指向はしばしば,とっつきづらく難しい技術と言われます。その理由の一つには,対象とする分野が広く,それぞれに深みがあることが挙げられます。それ以上にこの技術を難しくしている落とし穴とも言うべき原因が二つあると筆者は考えています。それは比喩を乱用する説明の仕方の問題と,「もの中心」を意味するコンセプト自体の問題です。そこで本特集では,「オブジェクト指向という言葉をよく聞くけど,実際どんなものかよくわからない」という方のために,初心者/入門者が陥りやすい落とし穴を明確にしながら,オブジェクト指向の全体像を説明します。余計な先入観やまぎらわしいたとえ話に惑わされなければ,オブジェクト指向そのものはそれほど難しい技術ではないことを理解していただきたいと思います。オブジェクト指向プログラミング,デザインパターン,分析/設計といった個々の技術については特集2以降でそれぞれ解説します。oriented”であり,「もの指向」「もの中心」といった意味を持ちます。一言で表現するなら「オブジェクト(もの)中心に考えるソフトウエア開発手法」と言えるでしょう。従来の開発手法は,ソフトウエアが実現する「機能」に着目しました。最初に全体として実現する機能を定義し,それを徐々に細かい機能に分割していくのが基本的なやり方です。この手法は「構造化分析/設計手法」として体系化されており,長い間主流として使われてきました。オブジェクト指向では全体の機能を一枚岩ととらえずに,データと手続きを持った「オブジェクト」の集まりとしてとらえます。ソフトウエア全体として機能を実現するだけでなく,保守性や再利用性に配慮して,個々の部品の独立性も重視するわけです。した考え方が重要になった背景には,ソフトウエアが大規模で複雑になったことがあります。以前のソフトウエア開発では,毎回ほとんどゼロからプログラムを作り直していました。した方法では,品質の高いソフトウエアを短期間で作ることは困難なため,既存の部品を再利用することが重要になってきました。作ったソフトウエアに修正を加えて長く使い続けるケースも増えてきました。ソフトウエアを保守しやすくするには,個々の部品の独立性を高くして,全体の見通しを良くし,修正の影響範囲を局所化する必要があります。したニーズからオブジェクト指向が注目されるようになりました。正しい理解を妨げる落とし穴オブジェクト指向という考え方は,目に見える「もの」を中心に現実世界を識別する人間にとって,自然な考え方であると説明されることもあります。かかわらず,オブジェクト指向は難しい技術だと言われます。その理由の一つとして,オブジェクト指向がソフトウエア開発の幅広い分野を対象にしていることが挙げられるでしょう。抽象的な考え方が求められるから難しいのだという意見を聞くこともあります。筆者には,どうもそれだけが原因とは思えません。筆者は過去に,オブジェクト指向と哲学を対比する説明や,「オブジェクト指向を使えば現実世界をそのままプログラムに表現できる」といったちょっと不思議な説明を聞く機会が時々ありました。した聞き手の意表を突く話は,何かおかしいと感じながらも,思わず受け入れてしまいがちです。した経験から考えると,難しいというよりも混乱していると解釈するほうが適切に思えます。以降では,そうした混乱を引き起こしている原因として「比喩の乱用」と「強力過ぎるコンセプト」の二つの問題を説明します。この二つは,オブジェクト指向の正しい理解を妨げる落とし穴と言えるでしょう。「オブジェクト指向は難しくてよくわからない」と思っている方は,ぜひその先入観を捨てて,白紙の気持ちで読み進めてください。比喩の乱用が混乱を引き起こす一つ目の落とし穴は「比喩の乱用」です。これは,技術そのものと言うよりも,説明の仕方に起因する問題と言えるでしょう。オブジェクト指向プログラミングの仕組みは,しばしば現実世界と対比して説明されます。した説明が理解を助けるためのたとえ話であることを明示しないケースをよく見かけます。説明1-クラスとインスタンス「クラス」は種類で,「インスタンス」は具体的なものを表す。犬を例に取れば,一般的な“犬”が「クラス」で,“タロー”“ポチ”“マル”などの具体的な犬が「インスタンス」に相当する。犬が共通に持っている“名前”“年齢”などの性質を「属性」と呼び,“鳴く”“エサを食べる”“寝る”といった共通な振る舞いを「メソッド」と呼ぶ(図1)。図1●クラスとインスタンス。一般的な“犬”が「クラス」で,“タロー”“ポチ”“マル”などの具体的な犬が「インスタンス」に相当すると説明されることがある説明2-メッセージ・パッシングオブジェクト指向言語を使って書かれたプログラムは,インスタンス同士がメッセージを送り合って動作する。この仕組みは,飼い主が飼い犬に対して“鳴け”とメッセージを送ると“ワン”と応える様子に相当する(図2)。図2●メッセージ・パッシングのイメージ。飼い主が飼い犬に対して“鳴け”とメッセージを送ると“ワン”と応える様子に相当するというが,現実にはメッセージに応えない犬もいるだろうし,命令されなくても吠える場合もあるこうした説明は,オブジェクト指向プログラミングの仕組みを直感的に理解するのには適しています。実際にはこの説明は正しくありません。オブジェクト指向のプログラムの世界では,犬クラスにnew指令を送ることで個々のインスタンスが作られますが,現実世界の犬が生まれるのは妊娠したメス親が出産するからです。プログラムのインスタンスは,メッセージを受けると必ず仕事をします(反対に,メッセージを受けるまでは,ただじっと待ち続けています)。これに対して,現実世界の犬は,“鳴け”と命令されても機嫌が悪ければ飼い主を無視するでしょうし,命令されなくても鳴きたければ自分の意志で勝手に鳴くでしょう。このようにオブジェクト指向プログラミングの仕組みと現実世界は,実はずいぶん違います。いえ確かに共通する点もあります。そこで,混乱を避けるためには,両者を「よく似たもの」と考えずに「似て非なるもの」と割り切ったうえで,現実世界との対比による説明はたとえ話と解釈するのがコツです。現場の負担軽減を!医療界でのAWS活用法500万社が導入。き》データサイエンティスト育成で定評のある大阪ガスと、データ分析の専門家が共同で開発した特別プログラ...SEのための「システム営業力」養成講座SEとして仕事をする方が、顧客や経営層に対する提案力や会話力を身につけるための講座です。情報銀行の成り立ち、事例、現状課題やその行方を網羅。経営戦略である以上、「会計」の知識やスキルが欠かせません。