オブジェクト指向は様々な概念が融合してできたものだ。その成り立ちを知っておくことは,オブジェクト指向を正しく理解する上で欠かせない。Part2ではプログラミング言語と開発手法に焦点を合わせ,オブジェクト指向の成立と今日までの歴史を説明する。

 ここではオブジェクト指向の「起源」を辿ってみよう。最初にお断りしておくが,正確に辿ることは非常に難しい。誰かが作り出したものではなく,過去30年ほどの間に提唱された様々な概念や技術が発展・融合してオブジェクト指向と呼ばれるようになったからである。例えば,

・哲学(記号論など),認知科学
・人工知能に関する研究
・データモデル(E-Rモデルおよび意味データモデル)
・ソフトウエア工学の基本概念(モジュール,情報隠蔽,型理論)
・コンピュータ・アーキテクチャ(OS,GUI,デバイス)

などである。ここではITエンジニアに最も関係が深いプログラミング言語と開発方法論に着目して,オブジェクト指向の歴史を辿ってみる(図1)。

図1●オブジェクト指向の歴史<br>オブジェクト指向言語の歴史は意外と古く,その起源は30年以上前にさかのぼる。一方,オブジェクト指向分析・設計手法が登場し始めたのは1980年代後半である
図1●オブジェクト指向の歴史
オブジェクト指向言語の歴史は意外と古く,その起源は30年以上前にさかのぼる。一方,オブジェクト指向分析・設計手法が登場し始めたのは1980年代後半である
[画像のクリックで拡大表示]

元祖はシミュレーション言語

 プログラミング言語の側面から見ると,オブジェクト指向は1967年にノルウェーのO.J.ダールらが発表した「Simula」という言語が元祖と言っていい。Simulaはコンピュータ・シミュレーション専用の言語であり,現実のモノを表現するのに,「オブジェクト」や「クラス」,「継承」といった主要な概念を用いていた。

 5年後の1972年にはオブジェクト指向の普及に重要な役割を果たした「Smalltalk」が登場する。ただしSmalltalkは,単なる言語ではなかった。「子供から老人まで,誰もが簡単に使えるコンピュータを創る」という考えのもと,米ゼロックス社のパルアルト研究所において開発された「ALTO」用の,OSと言語処理系を兼ねたプログラミング環境である。

 ALTOは,当時としては極めて先進的なGUIを備え,マウスの操作やアイコン,ウィンドウなどによって,全てのデータやプログラムをオブジェクトとして統一的に作成したり,扱うことができた。それを可能にしたのがSmalltalkというわけだ。

 同時期には様々なプログラミング言語が登場した。オブジェクト指向につながる抽象データ型を実装した「CLU」,同じく抽象データ型を実装しソフトウエアの部品化・再利用を可能にすることを狙った「Ada」,複数のクラスの性質を継承する多重継承を実装した「FLAVORS」などである。FLAVORSはもともと数式処理や人工知能に用いられる関数型言語であるLispに基づいている。ただしこれらの言語は用途特化型だったり,処理系の移植が進まなかったり,といった様々な理由から広く普及するには至らなかった。

Smalltalkのインパクト

 そんな中,IT業界に広く影響を与えたのが1980年に登場したSmalltalkの後継版,Smalltalk-80である。現在のJavaにつながる「MVCモデル」を実装していたのに加え,操作環境自体がオブジェクト指向だった。「手続き指向のOSで動作するオブジェクト指向言語」とは一線を画す,洗練された統合環境だったのである。

 IT業界で活躍しているオブジェクト指向の専門家には,この時期にSmalltalkに触れてのめり込んだ人が多い。実際,現在でもSmalltalkのファンは少なくない。

 しかし,プログラミング言語としてのSmalltalkは,その特徴ゆえに広く普及するには至らなかった。Javaと同様に仮想マシン上で実行する方式だったため当時のコンピュータでは性能が出なかった,操作環境まで含めているため他のOSやミドルウエアとの相性が良くない,といったことである。オブジェクト指向言語としての完成度は高いが,実用性に欠けていたと言えるだろう。

“ソフトの危機”が普及を加速

 一方,80年代半ばに世界的に叫ばれたのが,「このままではソフトウエアの需要に対して供給が圧倒的に不足する」という,いわゆる“ソフトウエア危機(クライシス)”である。プログラムコードを一行ずつ書き,新しいプログラムを作るたびにテストする開発方法はもう限界というわけだ。

 「危機を解消するには家内工業的な作り方を脱し,部品化・再利用による工業生産に移行するしかない」――これを具現化するものとしてオブジェクト指向は,普及の速度を速めた。90年代以降,多くのOSで稼働するプログラミング言語として,C++やJava,そしてC#などが開発された。

 これらの実用的な言語と並行して,オブジェクト指向開発のための方法論の整備も進んだ。本格的な情報システムを開発するには,それなりの期間とマンパワーがいる。多くのエンジニアが協調して,再利用可能で保守性の高いオブジェクトを作るには,洗練された分析手法や設計手法が欠かせないからだ。

方法論は乱立から一本化へ

 その確立に大きく寄与したのは,次の2つだと筆者は考えている。1つは,Shlaer&Mellor手法。本格的なオブジェクト指向分析の先駆けとなった手法で,ドキュメントの種類が豊富であり非常に体系的という特徴がある。もう1つはCoad&Yourdon手法だ。オブジェクト指向言語における様々な概念を分析設計手法に取り入れている。モデルの記法が簡潔で分析と設計との一貫性が高い。

 しかし1990年代前半には,これらに限らず,多くのオブジェクト指向手法が乱立。開発者にとっては,どれを選ぶかが悩みとなるほどだった。それを収拾したのが,他でもないUML(Unified Modeling Language)だ。

 UMLは,3人の著名なオブジェクト指向手法提唱者(ヤコブソン,ブーチ,ランボー)がそれぞれの分析・設計手法の表記法を統一することによって成立し,現在は米OMGが標準化にあたっている。