オブジェクト指向が考えだされた,プログラミング言語
Simula67
は, シミュレーション言語であった(1967 年に発表されたので 67 がついている). 一般に
シミュレーション言語
(Simulation Language)とは,自然現象,人工的現象などを,コンピュー タ上で,模擬的に実行させ,実際のデータを知ることが難しい場合に,そのデー タを予測するための言語である.例えば「地下鉄の駅を作る場合に,どこに階段や,エスカレータを設置したらよいか,を決める時に,実際の人の乗降者 数を入力し,人の流れを模擬実行させてみる」など,いろいろなことが考えられ る.
シミュレーション言語の使命は,
物理現象をどのようにプログラミング言語で表現するか
である.
そのため Simula67 では,全てを
もの
(object, オブジェクト) として捕え,その「もの」と「もの」との
干渉
(interaction) で現象が進んで行 くと考えた.その干渉のことを
メッセージの受渡し
(message passing) という. 正確には Simula67 では,この「もの」に相当する概念をプログラミング言語のデータに近い「抽象データ型」と表現していた.その後の アーラン・ケ イ(現在はフリー,開発当時は,米国ゼロックス社) より 1970 年代に
Smalltalk
の開発が進み,1980 年に発表された Smalltalk-80 より「オブジェクト指向」の概念が確立された. その Smalltalk-80 は「オブジェクト指向」の概念を実際にコンピュータ上で表 現することができた最初のプログラミング言語である.
オブジェクト指向言語の基本は,その意味で「オブジェクト」をどう定義する か,である.
オブジェクトは,以下の 3 つの要素から成ると考える.
状態
(state) は,オブジェクト固有の値で,文字どおりオブジェクトの状態を示すものである.「状態を実行するプログラム」は,通常
メソッド
(method) といい,オブジェクトの状態を変更し,その目的のために,他のオブジェクト とのメッセージの受渡しを処理したりするプログラムである. 「計算を実行する主体」は,コンピュータそのもの,つまり
CPU
を指す.各 オブジェクトは,同じ計算機で実行することは仮定していない,いわんや,コ ンピュータ上で実行するとも仮定していないので,その計算主体をオブジェク ト自身が持つ(勝手に定義してよい)と考える. そのため,オブジェクト指向では,各オブジェクトが「並列に」処理または, 動作することが可能であることが前提であり,全く独立に処理が進むことを前提としている. ここで,オブジェクトを構成する上の 3 つは,オブジェクトにより
カプセル化
(encapsulation) されたという.この特徴により,オブジェクトに固 有な状態など(メソッド自体を変更することも考えられる)を変更するには,オブジェクトに直接メッ セージの受渡しをしなければならない.

オブジェクトは,以上 3 つからのみ成り立ち, 各オブジェクト間のメッセージの受渡しの通信規約 (protocol,プロトコル) を別途定めることにより,全体として現象が進むと考えることができる.例えば,メッセージの受渡しには,
が考えられるが,この違いを明確にしたオブジェクト指向に関する研究も盛ん に行われている.
例えば,簡単な物理現象を「オブジェクト指向」で表現してみよう. 登場するオブジェクトは,
を考える.「飛行機が空を飛ぶと,風が発生し木が揺れる.それを人間が見 ている」という現象をオブジェクト指向で表現してみよう.
簡単な物理現象
「オブジェクト飛行機」が飛び,「メッセージ風」を「オブジェクト木」に受 け渡し,結果「オブジェクト木」が揺れる.「オブジェクト人間」は, 「オブジェクト飛行機」にメッセージを受渡し,その状態(どのくらいの速度で 飛行しているか,何色かなど)を知ることができる.更に,「オブジェクト木」 にメッセージを受渡し,その状態を知ることができる. 次節では,以上の物理現象をプログラミングするための言語を定義してみよう.

このように,オブジェクト指向とは,一般の現象をより自然に捕らえ,オブジェ クトとメッセージという簡単な枠組みに当てはめる点に主眼がおかれている.