「オブジェクト」とは? Alan Kayより、3つのメッセージ
講演冒頭、羽生田氏は「リ・オリエンテーション」と題した本セッションの意図を、以下のように説明した。
「一つは『オブジェクト指向ってこんなもんだよ』というオリエンテーションをするということ。もう一つは、そうは言っても『AI時代にオブジェクト指向いらないんじゃないの』という声もあるので、単純にオブジェクト指向にどういう方向性があり得るのか『向き直る』という意味をかけています」
まずは、オブジェクト指向をソフトウェア工学の歴史から捉えていく。1970年代の構造化プログラミングの時代を終えて、1980年代はCASEツールの時代だった。その後、1990年代にオブジェクト指向が始まるが、日本は米国の動向から10年ほど遅れて2000年代に一般的になった。
オブジェクト指向という言葉を生んだのはAlan Kayだ。彼はこの分野に限定した人物ではなく、ハッカーかつギタリスト、人文教養主義者と多くの肩書きを持っていた。羽生田氏は、「『オブジェクト』という言葉をプログラミングの世界に閉じて提唱したわけではない」と言い、以下のAlan Kayの「3つのメッセージ」を紹介した。
1つ目の主張は、一見今のオブジェクト指向と違って見えるが、ここでのメッセージとはアブストラクション(抽象)の仕組みのことを指す。「クラスだけで抽象化するのは不合理で、メッセージも抽象化の仕組みである」という考え方として捉えられる。「そういうわけで、カプセル化だけにこだわった抽象化に対するアンチテーゼだと理解するといいかもしれません」と羽生田氏は指摘した。
2つ目は、ダイナブックについての言及。羽生田氏によると「ダイナブック=パソコンと考えて、Alan Kayはパーソナルコンピュータの父と言われることも多いが、その言い方は半分間違い」。真のダイナブックとは社会の中でみんなが一緒に考え、仕事をしたり、発信したりできる環境のことだ。その環境を作り上げることの大切さを主張しているのである。
3つ目の「未来を予測する最も確実な方法は、自分たちの手でそれを作り出すことである」というメッセージについては、「これとオブジェクト指向がどうつながるのか、講演の最後にお示しします」と予告した。
ただし、オブジェクト指向という発想は、Alan Kayだけでなく、コンピュータに関わるさまざまな分野で同時多発的に生まれたとも言える。Simulaという言語やAlan Kayの発想を理論として発展させたActor理論、フレーム理論、OSのケイパビリティの考え方などもその一種である。
「抽象データ型」はどのような歴史の中で生まれたのか
また、重要な考え方として「物事を捉える時にデータ的な観点と、機能的な観点、どちらを軸にしても正しい。よって両方のマトリクスで捉えるのが一番妥当だ」という話を紹介した羽生田氏。
「ただ、マトリクスだと複雑でどこに注目すればいいかわからないので、列と行をシャッフルして、できるだけ真ん中に意味の塊が来るように変換をしようという発想が生まれる。それが抽象データ型であり、オブジェクトの考え方の根本です」
さらに、抽象データ型をプログラミング言語の歴史から捉えると、以下のように説明できる。
ビット列をそのまま扱うのは大変なので、記号・ラベルを付けたのがアセンブラだ。しかし、これでも人間が管理するのは難しいので、頻繁に使用される記号のシーケンスをサブルーチンの形でコールできるようにしたのが手続き抽象である。また、この手続きを3つのパターン(順次、分岐、反復)で構造化した。それでも大規模なシステムには対処しきれず、手続きをまとめたモジュールが生まれた。さらに、手続きを意味的に扱うために生まれたのが「抽象データ型」だ。
羽生田氏いわく「オブジェクト指向では抽象データ型をクラスと言うが、本来の意味の抽象データ型は定義しきれていない」そうだ。本来の抽象データ型は、実装と仕様を切り離し、操作の意味をシグニチャと操作どうしの関係性(一種の代数)として定義する考え方である。
羽生田氏は、PythonのStackを例に出し、「Stackのサイズがわかれば、中をarrayで実現していようが、linked listで実現しようが関係ない。pushを2回やって、popを2回やったらis Empty Trueになる。このように、操作の間の関係でデータ型を定義できるということ」と説明した。「気持ちとして、抽象データ型的な発想で操作定義しようというのが、クラスを使った抽象データ型の実装」だと述べた。
そして、オブジェクト指向が登場したことで「問題領域で、意味のある重要な概念に対してクラスを割り当てて、それを使ってプログラミングができる」ようになった。これによって、人間はビットなどの「文字列」ではなく、「概念」を使ってプログラミングできるようになったわけだ。