先日、東京勉強会#10にて「コードを使わないオブジェクト指向の説明」を試みてみました。好評だったようでなによりです。
あの場ではあまりにディープ過ぎるために端折ったいくつかのことを、この機会にまとめてみます。
オブジェクト指向とは何か
オブジェクト指向という呼び名を初めて使ったのはSmalltalkという言語ですが、それ以前のSimulaという言語で、クラスや継承、多態性といった、現代のオブジェクト指向言語が持つメカニズムは既に実現されていました。
Simulaの名前の由来は「Simulation Language」であり、「現実世界のシミュレーションのための言語」であると言われます。
この「現実世界のシミュレーション」というのが、まさにオブジェクト指向の目的なのです。
極論すれば、プログラムとは、現実世界に存在する何らかの問題を、コンピュータを使って解くためのものだと言えるでしょう。
そのプログラムの構造が、現実世界により近ければ、より自然な形で記述できるはずです。
現実世界の事象を、コンピュータの中により自然な形で再現すること。それがオブジェクト指向です。
発表の中で、「オブジェクト指向は、突き詰めると、数学、言語学、哲学、心理学などとも関係している」と言ったのは、それらの学問はすべて、「現実世界のモデル化」を行うものだからです。
アリストテレスの形而上学
オブジェクト指向が使われ始めたのは、Simulaが登場した1960年代ですが、現実世界の研究という観点で見れば、それは哲学という形で、何千年も前から行われてきたことです。
古くは紀元前の哲学者、アリストテレスの言葉に、この始まりを見ることができます。
アリストテレスはその著書「形而上学」の中で、第一実体と第二実体という言葉を使っています。
第一実体とは、具体的な事物、例えば「このペン」だとか「あの馬」だとか「アリストテレス」だとかによって言い表される単一のモノであり、第二実体とは、それらの集合である「ペン」だとか「馬」だとか「人間」だとかのことを指す、と言っています。
また、第一実体のことを「個物」、第二実体を「形相」とも呼びます。この他に「質料」という概念もあります。質料とは、個物の材料であり、個物とは、質料と形相が組み合わさったものです。
例えば、質料が木、形相が家だとすると、個物は木造の家になります。質料が鉄筋コンクリートなら鉄筋コンクリート造りの家になります。
そしてアリストテレスは、形相は、質料と一体化した形でしか存在しない、と言いました。形相それ単体、つまり、木造でも鉄筋コンクリート造りでもない「家」という概念は、概念上のものでしかなく、実在はしないと言ったのです。
イデア論
アリストテレスの師匠であったプラトンは、イデアというものの存在を考えました。
例えば、道端で拾った石が三角形に見えたとします。しかし、この石の辺はでこぼこしているし、角は丸まっています。数学的な三角形の要件は全く満たしていません。
にも関わらず、これが三角形に見えたのは何故か。それは、この石が「三角形のイデア」を持っているからである。プラトンはそう結論しました。
三角形のイデアとは、徹底的に抽象化された完全な三角形であり、永遠不滅の存在とされます。
そして、このイデアばかりが集まった「イデア界」という世界があり、我々の現実世界は、このイデア界が不完全に投影された影でしかないというのです。
アリストテレスの哲学は、師匠であるプラトンのイデア論の否定から始まりました。
実在論と唯名論
アリストテレスは、第一実体の集合を第二実体と呼びました。
この第二実体というものが、確たる実体を持っているのか、持っていないのか。これは哲学の問題として、千年以上もの間、長く議論されてきました。
プラトンが主張するように、三角形に見える各々のモノとは別に、「三角形というモノ」が存在するという立場を「実在論」、アリストテレスが言うように、それは実在しない、ただそう呼んでいるだけであるという立場を「唯名論」と言います。
ソシュールの言語学
スイスの言語学者、フェルディナン・ド・ソシュールの「一般言語学講義」という本(ソシュールが書いたのではなく、ソシュールが大学で行った講義をもとに、彼の没後、受講した生徒たちがまとめたもの)は、その後の思想に大きな影響を与えました。
ソシュールは、言語を「ランガージュ」「ラング」「パロール」の三つの構成要素に分け、そして、言語学の研究対象をラングに絞りました。
ランガージュとは、人間が持っている言語能力、分類能力のことです。人間はこれによって、異なるものに異なる名前を付けることができるのです。
ラングとは、ランガージュの上に構築される言語体系のことです。例えば、日本語とか英語という言語はラングの一形態です。
ここで注意すべきは、ラングは言葉ではないということです。ラングはランガージュという分類能力によって構築された分類そのものです。
そして、ラングに付けられた名前、ラングの表現、ラングを指し示す記号がパロールということになります。
ラングが概念的な存在であるのに対し、パロールは観測できる物理現象です。
例えば、「海」という文字や「うみ」という音はパロールです。対して、それらによって表現される海そのものがラングです。
ソシュール以前の言語学は、文字や発音や文法がどのように変化していったのかというようなことばかり研究していました。これは、パロールに主眼を置いた研究だったと言えましょう。
ソシュールは、言語は二つの意味で「恣意的」だと言いました。
ひとつは、ラングとパロールの対応が恣意的であるということです。あるラングが、あるパロールで呼ばれる必然性はありません。
例えば、日本語で「海」と呼ばれるものは、英語では「sea」と言います。
同じもの(ラング)を指すのに、書き方も発音も複数あり得ます。海は「海」という文字で書かれ「うみ」と発音しなければならないという決まりはどこにもありません。これが第一の恣意性です。
第二の恣意性は、ラング自体の恣意性です。
例えば、日本人は蝶と蛾を区別します。蝶と蛾が「蝶」と「蛾」という異なる名前を持つのは、日本語ではこれらが異なるラングだからです。ラングが異なるから、パロールも異なるのです。
一方、フランス語は(生物学的に論議する場合は別として、日常会話では)蝶と蛾を区別しません。どちらもまとめて「パピヨン」と言います。これは、フランス語においては、蝶と蛾のラングが同じだからこそ起きる現象です。
この第二の恣意性こそが、ソシュールの言語学の大切な部分です。
ソシュールの言語学は、長く続いた実在論と唯名論の戦いに決着をもたらしました。
なぜなら、実在論とは、それを蝶と呼ぶかバタフライと呼ぶかはさておいて、そう呼ばれるモノが確固として存在するという主張だったからです。
ソシュールは、プラトンが言うイデア、アリストテレスが言う形相は、各々の言語があって初めて確立されるラングであり、言語なくしては存在しないものであると断定しました。
また、ソシュールの言語論によれば、「蝶とは何か?」という質問には答えることができません。その言葉は指し示されるべき実体を持たないからです。
しかし、「蝶とは何でないか?」になら答えられます。蝶は蛾ではありません。蝶は猫ではありません。蝶は石ではありません。蝶は蝶以外の何物でもないのです。
ある言葉は、それが何であるかではなく、それが何でないか、何とは違うものかということしか言えない。
このことを指して、「言語は『差異の体系』である」などという言われ方をすることもあります。
レヴィ・ストロースと構造主義
プログラミング言語Simulaが登場した1960年代は、構造主義という考え方が生まれた時代でもありました。ひょっとするとSimulaは、構造主義をいち早く取り入れた言語だったのかもしれません。
ソシュールの成果を受けて、フランスの文化人類学者であるレヴィ・ストロースが「構造主義」という手法をまとめ上げました。
レヴィ・ストロースは、ブラジルのいくつかの部族を研究しました。特に大きな功績は、「近親相姦はなぜいけないのか」ということをはっきりさせたことだと言われます。
レヴィ・ストロースが体系化した構造主義とは、
- まず「ヴァリアント」と呼ばれるいくつかのサンプルを集め
- ヴァリアントをいくつかの区分けに分類し
- その区分けの間の関係性を研究する
という手法です。
何かに似ていませんか? そう、オブジェクト指向です。
- まず「オブジェクト」を集め
- オブジェクトをいくつかのクラスに分類し
- クラス間の関係性を記述することでシステムを構築する
と言いかえれば、実にそのままであると言えるでしょう。
構造主義以前の科学は、世界の「真理」を探究するものだったと言われます。
神は存在するのか、私は何者なのか、絶対的に正しいことは何なのか…
構造主義はそうした問いを「そんなこと知ってどうすんの?」と切り捨てます。
構造主義は「分類」と「分類間の記述」です。
対象としたヴァリアントをどう分類し、その分類間にどのような関係性を見出すか。
そうして作り上げた枠組みを「構造」と言います。
構造主義における「正しさ」とは、その構造がどれだけ役に立つかという有用性によって定められます。
構造主義的研究に、絶対的な正解はありません。ただ、それが自分にとって、そして、より多くのケースにとって有用でありさえすれば、それは正しいのです。
いくつかの例外的なケースに対応できなかったからといって、間違いだということにはなりません。
なお、レヴィ・ストロースが分析したある部族の婚姻の法則は、後に、数学で「クラインの四元群」と呼ばれるものと同一の構造を持っていることが明らかにされており、これによって、文化人類学のようなアナログな学問にも、数学の光が当てられる可能性が生まれたと言えましょう。
マッハの原理
音速の単位にその名前を残す物理学者のエルンスト・マッハは、後にアインシュタインの相対性理論に大きな影響を与えることになる「マッハの原理」を発表しています。
オリジナルのマッハの原理は「物体の慣性力は、全宇宙に存在する他の物質との相互作用によって生じる」というものですが、これは物理学以外にも、実に多様な分野において、「モノの性質は、そのモノと他のモノとの関係を論じて初めて意味を持つ」という形に一般化できます。
以前にもこのBlogで、命名におけるマッハの原理というのを取り上げました。
ここで挙げた「モノの名前は、それが何であるかではなく、それが他の何物でもないことを示す」というのは、まさにソシュールの言語学です。
仏教思想に見る構造主義
フランスで構造主義が生まれたのは1960年代のことですが、驚くべきことに、インド仏教では2000年も前から、似たような思想があったと言われています。
数字のゼロを発明したのがインド人であるという話は有名ですが、これが可能だったのは、インドは仏教の発祥の地であり、仏教には「空(くう)」という概念があったためだとも言われています。
古代インドの僧であった龍樹は、「全ての事象は互いの因果関係の上に存在しており、他の何物とも関係を持たずに、それ自体で存在しているものなどあり得ない」と説きました。
そして、「それ自身で存在すること」を「自性」と呼び、「ものには自性が無いこと」を指して「空」と言ったのです。
これはまさにマッハの法則であり、ソシュールが打ち立てた構造主義と共通する考え方です。
また、龍樹が否定した「自性」には、プラトンが説いた「イデア」に近しいものが感じられます。
まとめ
オブジェクト指向は、現実世界を抽象化して、コンピュータの中に再現するというプログラミング手法です。
この新しさは、「コンピュータの中に再現する」という部分だけであると言えましょう。「現実世界を抽象化して理解する」ことは、このように、遥か紀元前の昔から行われて来たことだったのです。
オブジェクト指向が、いかに人間とのかかわりの深いものであるか、ご理解いただけたでしょうか。