01オブジェクト指向とは
オブジェクト指向が考えだされた,プログラミング言語 Simula67 は, シミュレーション言語であった(1967 年に発表されたので 67 がついている). 一般にシミュレーション言語とは,自然現象,人工的現象などを,コンピュー タ上で,模擬的に実行させ実際のデータを知ることが難しい場合に,そのデー タを予測するための言語である.例えば「地下鉄の駅を作る場合に,どこに階 段やエスカレータを設置したらよいか,を決める時に,実際の人の乗降者 数を入力し,人の流れを模擬実行させてみる」など,いろいろなことが考えられ る.シミュレーション言語の使命は,
物理現象をどのようにプログラミング言語で表現するか
である.
そのため Simula67 では,全てを もの(object, オブジェクト) として捕え,その「もの」と「もの」との 干渉(interaction) で現象が進んで行 くと考えた.その干渉のことを メッセージの受渡し(message passing) という1. 正確には Simula67 では,この「もの」に相当する概念をプログラミング言 語のデータに近い「抽象データ型」と表現していた.その後の
アーラン・ケ イ(米国アップルコンピュータ社,開発当時は,米国ゼロックス社) より 1970 年代に Smalltalk の開発が進み,1980
年に発表された Smalltalk-80 より「オブジェクト指向」の概念が確立された. その Smalltalk-80 は「オブジェクト指向」の概念を実際にコンピュータ上で表
現することができた最初のプログラミング言語である.
オブジェクト指向言語の基本は,その意味で「オブジェクト」をどう定義する か,である.
オブジェクトは,以下の 3 つの要素から成ると考える.
- 状態
- 状態を変更するプログラム(命令の集まり)
- 計算を実行する主体
オブジェクトは,以上 3 つからのみ成り立ち, 各オブジェクト間のメッセージの受渡しの 通信規約 (protocol, プロトコル) を別途定めることにより,全体として現象が進む と考えることができる.例えば,メッセージの受渡しには,
- 同期通信
- 非同期通信
例えば,簡単な物理現象を「オブジェクト指向」で表現してみよう. 登場するオブジェクトは,
- 人間
- 飛行機
- 木
簡単な物理現象
「オブジェクト飛行機」が飛び,「メッセージ風」を「オブジェクト木」に受 け渡し,結果「オブジェクト木」が揺れる.「オブジェクト人間」は, 「オブジェクト飛行機」にメッセージを受渡し,その状態(どのくらいの速度で
飛行しているか,何色かなど)を知ることができる.更に,「オブジェクト木」 にメッセージを受渡し,その状態を知ることができる. 次節では,以上の物理現象をプログラミングするための言語を定義してみよう.
![]() |
このように,オブジェクト指向とは,一般の現象をより自然に捕らえ,オブジェ クトとメッセージという簡単な枠組みに当てはめる点に主眼がおかれている.
