コンテンツへスキップ

オブジェクト指向の哲学(改版その1)

先週のこのブログに掲載いたしましたオブジェクト指向の哲学ですが、あまりにも短い文章に内容を詰め込みすぎたため、非常にわかりにくい、誤解を招きやすいものであったように思われます。そこで、最初の部分を、以下にご紹介いたしますように、書き直してみました。


オブジェクト指向の哲学

0. 解題:哲学がオブジェクト指向することの意味合い

0.1. オブジェクト指向プログラミング

表題といたしました「オブジェクト指向の哲学」につきまして、誤解を受けませんように、まず、簡単な解説をしておきましょう。

「オブジェクト指向」ときますと、普通は「プログラミング」と続きます。もちろん、この表題はオブジェクト指向プログラミングを強く意識してつけております。

オブジェクト指向プログラミングでいう「オブジェクト」とは、内部構造を持つデータ、という意味です。複雑な内部構造をもつデータを、内部構造を隠蔽した、抽象的なデータであるオブジェクトとして扱うことで、プログラムを見通しの良いものとし、ソフトウエア作成の効率を上げる、というのがオブジェクト指向の考え方です。

ところで、オブジェクト指向プログラミング言語の一つ「C++」の聖典ともいうべき「注解C++リファレンスマニュアル(ARM)」には「オブジェクトとは記憶領域のことである」と書かれているのですね。この定義、「内部構造をもったデータ」とずいぶん違うとは思われませんか?

実はプログラムが計算機にロードされますと、プログラム自体も、そこで扱われるデータも、全ては主記憶装置(普通はランダムアクセスメモリ)の特定の領域のビットパターンとして存在します。主記憶装置は平坦で、どの部分も他に比べて変わった点を持たないのですね。つまり、抽象データ型とか内部構造、といったものは、計算機の主記憶装置のどこを探しても見出すことはできません。

一方、プログラマがプログラムを書くときには、オブジェクトがどのような形で主記憶装置に格納されるか、といったことはあまり意識されません。オブジェクト指向の一つのポイントは、抽象化であって、記憶装置がどうのこうのといった実装上の詳細は、プログラマからは見えなくしてしまう、という特徴があります。

もちろん、プログラマは、オブジェクトを抽象データ型として把握する一方で、プログラムが計算機にロードされて実行されるとき、オブジェクトは計算機の主記憶の特定の領域に配置されるであろうということを理解しています。

オブジェクトがあるサイズの記憶領域を占有するというこの理解を「延長(ひろがり)」と呼ぶこととして、オブジェクトが抽象的なデータ型であるという理解を「観念」と呼ぶこととしますと、オブジェクト指向でのソフトウエア理解は、デカルトの二元論的思想と見事に一致します。

今日の自然科学では、あらゆる存在は、相互作用するエネルギー粒子(素粒子なりクオークなりの意。物理学の進歩に伴う表現の陳腐化を避けるため、本論ではあえてこう呼ぶ)に還元して理解することができると考えられています。

相互作用するエネルギー粒子は無味乾燥の存在でして、物理法則に従って運動を続けます。一方、ソフトウエアのオブジェクトは主記憶装置に格納された、どれも似たようなビットで、あらかじめ定められた仕様に従い、CPUが機械的処理を施す。というわけです。

さて、プログラマが、実は主記憶装置の特定の領域であるオブジェクトを、内部構造をもつ抽象的なデータとして扱うように、人はエネルギー粒子のある広がりを、ある概念にあてはめて理解します。

そこにりんごがある、人がいる、机がある、と認識するとき、りんごなり、人なり、机なりは認識する人の心の中にある概念であって、実際にそこに存在するものは空間に広がるエネルギー粒子であるわけです。更にいうなら、エネルギー粒子という言葉も概念であって、エネルギー粒子という概念に対応するなにものかがそこに存在している、というしかありません。

さて、ソフトウエアにおけるオブジェクト指向と、人の世界認識が非常に類似したものである、ということをご理解いただけたかと思います。では、この類似にどのような意味があるのか、オブジェクト指向プログラミングのアナロジーで人の世界認識を語ることにどのような意味があるのか、という点について、次にご説明いたしましょう。

まず、第一に、オブジェクト指向プログラミングは、ソフトウエア開発の方法論として有用であり、成功しているということがあげられます。技術の世界は厳しいもので、有用でなければ誰も使わず、矛盾をはらむものであれば実施の過程で破綻いたします。オブジェクト指向プログラミングという方法論が成功を納めている、ということは、とりもなおさず、この考え方が有用であり、正しい(矛盾したものではない)ということを意味します。

第二に、ソフトウエアの世界は、明確に定義がなされており、全貌を掴みやすいという点があげられます。人の世界認識などといいますものは曖昧模糊としており、何をどう議論してよいのか、判断に苦しみます。一方、オブジェクト指向プログラミングでは、そのために作られた言語仕様、たとえばC++の言語仕様という形で、全てが明確に定義されています。その言語がオブジェクト指向プログラミングに有用な言語として認められているなら、その言語の仕様について考察することで、オブジェクト指向のソフトウエア理解についての知見が得られ、そのアナロジーから人の世界認識に対する知識を深めることができるでしょう。

と、いうわけで、表題に掲げました「オブジェクト指向の哲学」、まずは、オブジェクト指向プログラミングの方法論で人の世界認識に迫ろう、という試みであるわけです。

0.2. オブジェクトのもう一つの意味「客観」と、その再定義

さて、オブジェクトという言葉には他の意味合いもあります。まあ、オブジェクト指向プログラミング、などという文脈でのオブジェクトなど、むしろ特殊な意味合いでして、その他の意味の方が一般的ですらあるのですね。

で、オブジェクトの意味ですが、第一に対象物、といった意味合いがありまして、文法でいいます目的語、などもこの意味です。英語で「I read a book.」 などと言いますときの「book」がオブジェクトになるわけで、読む対象がbook、文法的には目的語、というわけです。まあ、こちらの意味合いは、本稿におきましてはどうでも良い意味合いではあります。

さて、オブジェクトの第二の意味は、少々捨ててはおけません。つまり、「客観」という意味なのですね。

で、この「客観」ですが、実は哲学の用語でして、主観に対する客観、つまり、人の主観とは無関係な普遍的・絶対的な世界を意味するものでして、人は主観を客観に一致させようと努めるのですが、その一致は永遠に叶わない、という意味での「客観」です。

まず、このような意味での「客観」であれば、客観の概念は捨て去るしかありません。何しろ人間の能力は有限であり、誤りをしでかす存在ですから、絶対的に正しいことなど知りえようがないのですね。

ところが、日常生活の世界でも、「客観」という言葉は幅広く使われています。「きみきみ、そんな主観的考え方ではなく、客観的に説明してくれないかね」などという台詞、そこらじゅうで使われていますね。そうなりますと、「客観という用語、使うことあい適わん」などと強権的に断言することも憚られます。

そもそも、客観という用語が普遍的・絶対的真実を示す、なんて定義は偏屈な哲学者が勝手に行っている定義であって、市井の人々の意識からは、かけ離れているのではないでしょうか。

日常的な意味での客観は、常識と基礎を同じくしており、その人達の属する社会で共有されている概念に基づくものの見方、という程度の意味ではないかと思われます。つまり、現象学者の言う「間主観性」ないし「相互主観性」に近い概念なのですね。

本論では「客観」という用語を、「社会(の成員)が共有する概念」という意味で用いることにします。これは日常世界における「客観」の意味合いに近いものと、私は、考えています。また、社会にはさまざまな切り方がありますので、客観も一つではありえません。

さて、上のパラグラフで、「の成員」という言葉をかっこに入れたのには、実は深い意味があります。概念を持つことができるのは精神的存在でして、社会が概念を持つことができるなら、社会はそれ自体精神的存在であるわけですね。もちろん、社会の成員は人間であるわけですから、精神的存在であることは確かであるわけです。

しかし、社会が、その成員共通のものとしてであっても、共通の概念を持ちえるのなら、社会は精神的存在である、と考えることに何の不思議もありません。つまり、「(の成員)」という言葉は除去しても構わないわけですね。
社会が精神的存在である、といいますと、少々違和感を覚える方が多いかとは思います。しかし、どのような社会であっても、その内部では、人々がコミュニケーションを日常的に行っており、概念の共有化を図っています。このような働きは精神的活動となんら変わるものではなく、それを行っている主体は社会である、としか言いようがありません。

と、なりますと、社会が共有する概念を客観、というという定義を受け入れるなら、社会という精神的存在にとっての主観がすなわち、成員にとっては客観である、ということになるのではないでしょうか。

社会といいますもの、実は重層的な構造をもっておりまして、それも非常に複雑な包含関係にあります。まず、二人以上の人間が何らかの集団を形成していれば社会であると考えますと、恋人なり家庭なり、友人なりが最小の社会となります。で、この社会は、地域社会の一部かも知れないし、学校組織の、とあるクラスの内部に含まれるのかもしれません。で、地域社会は行政単位で更に大きな社会を形成してますし、大きなところでは国家、民族で作られる社会もありますし、更に大きな極限では全人類を包含する地球社会があるわけですね。

これらのそれぞれの集団は、その内部で密度がさまざまに異なるコミュニケーションを行っており、さまざまな形で概念を共有しているわけです。つまり、それぞれが精神活動を行っており、それぞれの社会が、構成員からみれば客観を、上位社会から見れば主観をもっている、というわけです。

まず、ここでいたしました「客観」の再定義、「そんな重要な決定を勝手にすること、まかりならん」との抗議が出ること、重々承知しているのですが、日常世界の常識から、まず、このように考えるしかない、と思っている次第です。