プログラミング講座トップ ひつじTOWN デジタルシープラーニング

ひつじのJAVA言語入門への道 いろんなオブジェクト指向言語


Java以外にもいろんなオブジェクト指向プログラミングがあります。各々の歴史的なつながりを知るのも学習には有意義なので、この回ではそれを紹介します。
「オブジェクト指向」という言葉を使い始めたのはアラン・ケイだと言われています。アラン・ケイは、まだ現役ながら、伝説の人でもあります。詳しくは別途。
アラン・ケイ達が開発したオブジェクト指向環境Smalltalkでは、表現、実現するすべてのものを、『オブジェクト』とそれらの間で交わされる『メッセージ送信』によって表わしていました。
一方、後に、C++の設計者として知られるビャーネ・ストロヴストルップが発表した考え(カプセル化、継承、多相性)が定着しています。
現在では、オブジェクト指向については、両者が渾然した抽象的な概念として語られることが多く、はっきりとした定義はありません。
JavaはC++の流れを汲んでいますので、ビャーネ・ストロヴストルップの概念が適用されています。

正直なところ、筆者個人としてはJavaやC++の「メソッドを呼び出す」という言い方よりも、Smalltalkやflavorなどの「メッセージを送る」「相手がそれに答える」という感じの方がしっくりします。

以下のいくつか重要な言語について説明します。一般常識として知っておいてもいいほどの重要な項目です。登場する人物については、極力、現況を載せるようにしました。伝説的な人々なのでうっかりしますが多くの人は現在も活躍中です。 
前述のアラン・ケイさん(さんづけ^^;)はしばしば来日しており、日本のIT技術者の育成に大きく貢献しています。講演や取材記事などで知っている方も多いと思います。筆者も数年前講演を聞いたことがあります。Squeakのデモが印象的でした。

下記の言語のリストの説明には、はしばしば、マサチューセッツ工科大学(MIT)が出てきます。 コンピュータの黎明期に活躍した人々の多くが米国マサチューセッツボストン周辺に集まっていて、その拠点がMITでした。MITは世界最高峰の大学の1つで、同じケンブリッジ地区にハーバード大学があり、狭い地区に最高峰の大学が2つあるのも面白いところです。コンピュータサイエンスの発祥地ともいえます。
ケンブリッジにしばらく滞在したことがあって(勿論学生ではありませんでしたが)、MITの食堂には何度かお世話になりました。廊下に、X−windowを作ったアテナプロジェクト(Project Athena)のスタッフ募集の紙が貼ってあり、わけなく感心したことを覚えています。みんな賢そうな顔つきなので恐縮しながらうろうろしてました。
現在のコンピュータやソフトウェアやネットワークなどの技術は、この頃に登場し完成され現在に至っています。特に1980年以降はなんら新しいイノベーションが起っていないというのが多くの見方です。
図:プログラムの歴史

■Lisp(リスプ。1958年)

MITにいたジョン・マッカーシー(1927-)によって開発。LISPはFORTRANに次ぐ2番目に古い高級言語であり、現在でも広く使われています。ジョン・マッカーシーは、マービン・ミンスキーとともに人工知能の父と呼ばれています。
Lispはこの時点ではオブジェクト指向言語ではありませんが、その表現力と柔軟性によって、人工知能のコミュニティで人気を持つようになり、多くの言語に影響を与えています。
ジョン・マッカーシーは、現在、スタンフォード大学の教授です。

■LOGO(ロゴ。1960年代後半)

シーモア・パパート(1928-)によって開発。児童向け教育用として作成されたプログラミング言語です。豊富なグラフィック関連のコマンドが特徴で、画面に出てくるタートル(亀)に簡単な動きの命令を与えて、その軌跡を図形として描いたり、さらに色を塗ったりして楽しむ事が簡単に出来ます。交流のあった心理学者のジャン・ピアジェの構築主義という独創的な学習法の成果をもとに作成したものです。
シーモア・パパートは南アフリカ出身のアメリカの数学者、計算機科学者、発達心理学者。アメリカに移住してマサチューセッツ工科大学(MIT)でMedia Labの創設に関わっています。2006年にハワイで交通事故に会い、現在はボストンの自宅で療養中です。

■Simula(シミュラ、1960年代中期)

ノルウェーのクリステン・ニガード(1926年-2002年)とオルヨハン・ダール(1931年-2002)が設計/実装しました。主に北欧圏で使われて、広く普及することはありませんでしたが、その後、後続言語に与えた影響は大変大きいです。
Simulaはクラスや継承、動的束縛の機能をもち、オブジェクト指向プログラミングの基本概念はすべてここで発案されています。

■Smalltalk:(スモルトーク。1970年代)

XEROXのパロアルト研究所 (PARC) で1970年代に約10年かけ整備されました。主な開発者は Alan Kay(アラン・ケイ)、Dan Ingalls、Adele Goldberg,、Ted Kaehler、Scott Wallace等。
豊富で整備されたクラスライブラリは、特にオブジェクト指向プログラミングの手本とされ、デザインパターンの宝庫と称されるまで洗練されたものになっています。また、後世の多くのオブジェクト指向プログラミング言語に直接的、間接的に多大な影響を与えています。
「オブジェクト指向」という言葉は、1970年代にアラン・ケイがSmalltalkの概念として使い出したので、Smalltalkが世界最初のオブジェクト指向言語となりますが、実質的にはSimulaにその原型が現れています。Smalltalkは、Simulaの他、Lisp、LOGOの影響を受けています。

■Flavors(フレーバーズ。1979年)

MITのD.ワインレブ、D.ムーンらが設計したLispマシン上のシステム記述言語であり、Lispに基づいた最初のオブジェクト指向言語でもあります。オブジェクト指向言語を指すだけでなく、ウインドウシステム、ネットワークも含めた完全なオブジェクト指向で作られたソフトウェアシステムの総称を指します。
その特徴はflavor(フレーバー)と呼ばれるプログラムモジュールにあります。
flavorはSimulaやSmalltalkでいう『クラス』に相当します。これを多重継承させる機構やメソッドを組み合わせて使うメソッド結合などの機構によって、様々な事象を定義できるようになっています。
flavorとは風味のことであり、いろんな風味のアイスクリームを混ぜ合わせる、というところから命名されたといいます。MITで作られ、後にSymbolics社でNew flavorsとなり進化していきました。

■CLOS(クロス。1990年頃)

Common Lisp Object System.の略。Common Lispにオブジェクト指向プログラミングのための追加した機能で、Flavorsと LOOPS等の影響を強く受けています。

■C++(シープラスプラス。1983年)

n AT&Tベル研究所でB.ストロウストゥルプによって開発されたオブジェクト指向言語。その原形は、1980年に発表された『クラスを持ったC』であり、その名のとおりC言語の機能拡張版と言える仕様となっています。
B.ストロウストゥルプは「The Programming Language C++」の序章に、この言語仕様の目的を
@よりよいC。
Aオブジェクト指向プログラミングが可能であること。
B抽象クラスを実現する。
と記しています。
それまでにオブジェクトとメッセージで表現していたオブジェクト指向のモデルとはやや異なっており、カプセル化、継承、多相性という概念が適用されています。
C++はCのコンパイラでもあるので、普通にCとして利用することも可能です。このため、これがプログラマの自由度を高くしており、自由度が高いということはプログラマにとってはかえって難しく感じさせる要因になっているように思います。(筆者)


[←] 第4回へ | [↑] プログラミング講座トップへ | [→] 第6回へ