オブジェクト指向(おぶじぇくとしこう)情報システム用語辞典

OO / object-oriented

» 2009年09月29日 00時00分 公開
[@IT情報マネジメント編集部,@IT]

 ソフトウェア開発を広範囲に支援する各種技法の総称で、分析/システム化の対象をオブジェクトの集まりとしてモデル化し、その相互作用としてシステムを記述・構成するアプローチをいう。

 その利点としては、人間にとって自然な思考法を用いるためにシステム化の対象(モデル)とプログラム構造の対応関係が分かりやすく、トレーサブルなシステムが開発できること、抽象化された“オブジェクト”を基本単位とするために保守性・再利用性に優れたソフトウェアを作成できることなどが挙げられる。

 オブジェクト指向の起源は1つではなく、諸分野で研究されてきたさまざまな概念や技法が合流(※)して、ソフトウェア開発を広くサポートする総合技術になったといえる。プログラミング言語が発展する中で登場した「オブジェクト指向プログラミング」が原形だが、やがて“オブジェクト概念を中心に考える”方法が上流工程にも適用されて「オブジェクト指向分析」「オブジェクト指向設計」の技法が確立された。

※ オブジェクト指向に影響を与えた技術・知見としては、プログラミング言語(手続き抽象/データ抽象、構造化手法、モジュール化)、ソフトウェア工学(情報隠蔽、型理論)、データベース/データモデル(ERモデル、概念データモデル)、人工知能/認知科学(記号論、フレーム理論)、数学(集合論)、哲学(モナド論、プラトンの会話)などが挙げられる。

 オブジェクト指向分析では分析対象となる世界が先にあって、その中で注目すべき事物をオブジェクトとして取り出し、これを分類するという概念操作を行うが、オブジェクト指向プログラミングではそれを逆転して、分類・整理した項目(クラス)から個別の事物(インスタンス)を生成して仮想世界(システム)を作り出す。思考の流れは逆になるが、これらは分析モデルとソフトウェア構造に一定の水準で共通性を持たせ、かつ基本的思考法が同一となるため、“シームレスな開発”が行えるとして一連のものとして扱われる。

 オブジェクト指向の本質や定義は論者によってまちまちだが、大まかには2つあると考えられる。1つはメッセージを強調する立場――すなわち、自律的機能単位であるオブジェクト同士が相互に会話(メッセージパッシング)することで処理を行うという計算モデルを重視する説明である。これは一種のシミュレーションと見ることができる。もう1つはクラスを協調する立場――すなわち、カプセル化、インヘリタンス、ポリモフィズムの“3点セット”を基本原理とするソフトウェアモジュール分割技法としての説明である。これは分析や設計においては概念の整理/分類法となる。

 「オブジェクト指向」という言葉を作ったのは、アラン・ケイ(Alan C. Kay)とされる。1966年末、ユタ大学の修士学生だったケイは、アイバーン・サザーランド(Ivan Sutherland)のグラフィックプログラム「Sketchpad」、ノルウェー生まれのプログラミング言語「Simula」などにインスパイアされ、単細胞生物のコロニーのようにソフトウェア・モジュール同士が協調動作するというプログラミング・アーキテクチャの着想を得た。ケイの回想によると、これを「オブジェクト指向プログラミング」と呼んだのは1967年だという。

 1971年、米国ゼロックスのパロアルト研究所(PARC)に移ったケイは、このアイデアを具現化するものとして、GUIベースのコンピューティング環境の開発に取り掛かった。このシステムは1980年に「Smalltalk-80」として公開され、「オブジェクト指向」の考え方がコンピュータ関係者に知られるようになった。

 Smalltalkは一部の専門家だけではなく、一般の人がコンピュータを自在に使えるようにすることを目標にしており、人間とコンピュータの間のコミュニケーションを強く意識している。プログラミングモデルとしても、メッセージがアクティビティ(オブジェクト)を駆動するという「メッセージ−アクティビティ・モデル」を採用し、数値、リスト、テキスト文字列、辞書、位置、領域、テキスト編集、処理、コンパイラ、デバッガなど、すべてのシステム要素がオブジェクトとして扱われる。

 1970〜1980年代、Smalltalkはその先進性が大いに注目を集めたが、実行速度や効率などの面から普及は限定的だった(その後の改良で実用レベルの開発も可能になっている。Cへのトランスレータを備えた処理系「Squeak」も発表された)。他方、実用性を重視して作られたオブジェクト指向言語が「C++」である。

 C++は、は手続き型言語「C」にクラス概念を採り入れた混成言語である。開発者のビョーン・ストラウストラップ(Bjarne Stroustrup)は英国ケンブリッジ大学のコンピュータ研究所に在籍中、分散システムの研究に使うシミュレータをSimulaで書いた。ストラウストラップはSimulaのクラス概念や並行性に感銘を受けたが、完成したプログラムの規模が巨大だったために実行面では使いものにならなかった。そのため同じものを、手続き型言語であるBCPL(Cの原型)を使って書き直したが、これは非常に難航した。この経験から実用性と開発効率を両立することを目的に、1979年に米国AT&Tのベル研究所で開発したのが「C with Classes」である。これが発展して1993年にC++となった。

 C++では、オブジェクトを「ユーザー定義が可能な抽象データ型」ととらえている。この抽象データ型を実現し、プログラムの組織化を支援する機構としてSimulaの階層クラスを採用した。Smalltalkには型付けはなかったが、C++ではこのクラスに基づいて強い型チェックを導入している。

 オブジェクト指向プログラミングを本格的に普及させたのが、1995年に登場した「Java」である。米国サン・マイクロシステムズのジェームズ・ゴスリング(James Gosling)らによって開発された。当初は「Oak」という名称で、組み込みソフトウェア開発のための言語として生み出されたものだったが、インターネット時代を見据えたマルチプラットフォーム対応言語として作り直され、爆発的に普及した。

 Javaではマルチプラットフォームを実現するため、Smalltalk同様に仮想マシン(インタープリタ)のアプローチを採用している。また、型状態と呼ばれる実行状態の型付けを導入し、プログラム実行の各種特性をチェックできるようになっている。

 オブジェクト指向プログラミングは、クラスによってプログラムの再利用を促進することで生産性を高められることが利点の1つだが、そのためには適切なクラス設計が必要で、上流工程に手間をかける必要がある。そうしたこともあって、システム設計や業務分析にもオブジェクト指向を適用するオブジェクト指向設計、オブジェクト指向分析が提唱されるようになった。

 オブジェクト指向開発方法論は、1980年代後半から1990年代初頭にかけて多くのものが提唱され乱立していたが、1994年に米国ラショナルソフトウェア(現IBM)のグラディ・ブーチ(Grady Booch)、ジェームス・ランボー(James Rumbaugh)らによって統一の試みが始まった。この動きの中から標準モデル表記法「UML」、開発プロセス「RUP」などが生まれ、オブジェクト指向の普及を促進した。

 オブジェクト指向分析/設計/プログラミングの作業は、問題解決の対象やシステム設計、プログラム構造を分かりやすく、使いやすいモデルとして記述・構成することが中心となる。モデル作りに正解はないが、利用シーンごとによくある構造をまとめたパターン(ソフトウェアパターン)が多数発表されており、広く活用されている。

参考文献

▼『オブジェクト指向への招待――思考表現のための新しい技法』 春木良且=著/啓学出版/1995年3月

▼『オブジェクト指向でなぜ作るのか――知っておきたいプログラミング、UML、設計の基礎知識』 平澤章=著/日経BP社/2004年6月

▼『いちばんやさしいオブジェクト指向の本』 井上樹=著/技術評論社/2007年2月

▼『オブジェクト指向概論〈第2版〉』 イアン・グラハム=著/MISCOオブジェクト指向研究会=訳/トッパン/1996年2月(『Object-Oriented Methods, second editon』の邦訳)

▼『パソコン創世「第3の神話」――カウンターカルチャーが育んだ夢』 ジョン・マルコフ=著/服部桂=訳/NTT出版/2007年10月(『What the Dormouse Said』の邦訳)

▼『SMALLTALK-80――対話形プログラミング環境』 アデール・ゴールドバーグ=著/相磯秀夫=監訳/及川一茂、神代誠一郎、久保木孝明=訳/オーム社/1986年2月(『Smalltalk-80: The interactive programming environment』)

▼『アラン・ケイ』 アラン・C・ケイ=著/鶴岡雄二=訳/浜野保樹=監修/アスキー/1992年3月

▼『C++の設計と進化』 B・ストラウストラップ=著/エピステーメ=監修/岩谷宏=訳/ソフトバンクパブリッシング/2005年1月(『Design and Evolution of C++』の邦訳)

▼『The Early History of Smalltalk』 Alan C. Kay=著/ACM SIGPLAN Natices v.28 n.3/1983年3月


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ