オブジェクト指向プログラム、世界の捉え方

オブジェクト指向プログラム

プログラムには多くの言語があります。C, Java, Python, 私が使っているTouchdesigner等もそのうちも一つです。言語が様々であってもコンピュータ内では最終的にはマシン語になって実行されます。コンピュータが早いとか、高性能というのはこの実行される計算能力を指します。そうすると、どんな言語もコンピュータの性能が上がれはあがりますが、どれかを使えば高性能になるというものではありません。つまり言語は性能ではありません。では何故多くの言語があるのでしょうか。それは、端的に言えば、世界をどのように捉えるのかの違いです。人でいうなら、いろんな人種がいていろんな言葉を話すのと同じでしょう。人の性能が違っているわけでありません。東洋思想は非常に早くから心の問題を扱っています。一方西洋思想はモノを発展させることにたけた思想でした。これによって異なる発展のしかたをしました。このようにとらえ方の問題なのです。何でも性能や効率を重視するのが現代ですが、言語では性能は同じです。違うのは捉え方なのです。捉え方で実社会を大きく変えている例として、プログラム言語を考察するのは興味深いことです。

構造化プログラミングが論理的な流れを重視し、オブジェクト指向が事物や関係性をモデル化し、関数型がデータ変換を中心に考えます。私が使っているTouchdesignerやMAXはオブジェクト指向プログラムに属します。インターラクションはモノとモノ、モノと人との関係性を扱うので、自然とオブジェクト指向を使うことになったと思います(工学的には関係性はプロシーシャルに当たります。このプロシーシャルの組みやすさがカギです)。blenderはプログラム言語というより形状を描くアプリケーションプログラムですが、ジオメトリーノードと言うオブジェクト指向プログラムに属するような機能を備えています。アプリケーションからプログラム言語のほうへも拡張してきたと言えるでしょう。このようなことで、様々な言語がありますが、オブジェクト指向プログラムについて考えたいと思います。

オブジェクト指向プログラムとヴィトゲンシュタイン

オブジェクト指向プログラムはヴィトゲンシュタインの思想とよく似た世界観をしていると思います。しかし、オブジェクト指向プログラムの開発者がヴィトゲンシュタインを参考にしたという話を読んだことはなく、これは偶然かもしれません。ただヴィトゲンシュタインをかじっていると理解の助けになります。ヴィトゲンシュタインの論理哲学論考で有名な言葉に、「語りえぬものについては、沈黙しなければならない」がありますが、もう一つ「世界とは事物と出来事の集合の総体と定義する」、というのがあります。彼のいう事物と出来事とは、「実体が現実にそうなっていること」です。世界は、リンゴとか、机とか、川とか、そうしたモノの総体ではありません。世界は、リンゴを食べる、青い空、川で泳ぐ、等の事物の間の関係や状態でできていると言ったのです。世界を構成するのは、単に物がそこにあるだけではなく、それらがどのように相互に関係しているかということを、そしてその総体が世界だと言っています。この考えは、オブジェクト指向プログラムのクラスの概念とそっくりです。クラスというのがオペレータ(ノードという場合もあります)のことで、人、リンゴ、机、等対象のことです。そして、クラス中には、赤い、青い、冷たい、とかいう対象の属性(プロパティ)と、食べるとか泳ぐといった動詞にあたるメソッドからなります。クラスの集合(オペレータの集合)、クラスの関係性によってモノ(プロジェクト)ができるという構成を取ります。まったくヴィトゲンシュタインと同じです。

pythonもTouchdesignerもオブジェクト指向プログラムですが、ビジュアルプログラミング(ブロックベースで書く、コードで書かない)であるTouchdesignerはいったん決めた属性やメソッドに自由に追加できません。犬は走る、吠える、というメソッドを最初与えていて、あとから噛むというメソッドを追加したいときできません。別のクラスを追加して接続する、新たにオペレータを作る等になります。柔軟性と言う意味ではコードで書くタイプのほうが高いですが、構成のしやすさが特徴です。MAXもTouchdesignerと同じくビジュアルプログラムです。

ヴィトゲンシュタインは「世界は言語の限界内にある」とも言っています。言語は世界を描写する手段と考えてました。しかし、言語で世界のあらゆることが描写でき「未知」はないとは言っていません。言語は時代によって変化し曖昧なものとして、どう変化していくのは予測ができないと考えていました(工学的な言葉でいうなら、言語は非線形ということです)。これまのでブログでいうと「未知」が存在しているのです。形而上学的な「真理とは」、「愛とは」・・・・等のようなことは、事実の総体として表すことができず、それらは沈黙しないといけない、と述べています(語りえぬものについては、沈黙しなければならない)。しかしそうしたことを考えることが無意味だ、とは一言も言っていません。ただ言葉ではいい表せないといっただけです。恐らくですが、そうした形而上学的なことを言葉にする場合に使うのが、メタファーです。例えば、「人生とは」と言ったとき、それは言葉で定義することはできませんが、「川のようだ」というように答えることはできます。こういう点もまた、プログラムと同じです。「愛とは」というプログラムは書けませんが、愛をイメージする映像やメタファーで示すことになります。更にインターラクションについていうなら、暖かさとか、抱きしめるとかの体験を提示して感じさせることになるのです。このヴィトゲンシュタインの形而上学的な問いに対する態度は、釈迦の「不記(無記ともいう)」の態度を思い出させます。これは次のような話です。生命とは、肉体とは、というような形而上学的な問題の質問に対して、釈迦は答えないと言いました。毒矢に刺さっている人に、毒矢の本質について語っても何の意味もない、自分は毒矢を抜く事を教えるだけだ。というような回答をしたという話です。釈迦は大変現実的な方です。単に考えてもしかたがなことは考えるな、と言っているのではありません。「本当に知ることは行うことだ」と言っているのです。「現実に接地すること」を重視しているのです。ヴィトゲンシュタインも似たようなことを思っていた方のように思います。そして現実に接地させることを指向するとどうなるのか、それは工学になるというのが私の考えです。

もう一つ私の考えを述べておきます。それはヴィトゲンシュタインの「語れるモノ」には拡張が必要でないかという意見です。ヴィトゲンシュタインは19世紀から20世紀の方ですので、コンピュータを知りません。かれの言語にはプログラム言語は入っていません。これまでのブログで述べてきたように、プログラムでは非線形を描くことができます。これらは未知であり言葉では具体的に語ることができません。つまり、現在は語りえぬものを描くことができる具体的な例が登場してきたということです。ここで、言語と言っているモノをプログラム言語も含めて拡張すると、非線形現象もプログラム言語で書いているわけですので、プログラム言語を含めて語り得るモノになるということです。勿論、それを見て体験してどう感じたかという感性は、いぜん人によって違い、他者が理解できない、語りえないモノです。

オブジェクト指向プログラムとハーマン

もう一人、オブジェクト指向プログラムと関係しているような思想の持主を紹介したいと思います。グラハム・ハーマンです。彼は現役の哲学者です。ハーマンの哲学はオブジェクト指向存在論と呼ばれていて、名前からして似ています。彼を解説するほど私は理解できていません。こんな感じなのかな、という程度で聞いてください。彼は、人とモノとの関係を実在のレベルと感性のレベルと分けています。実在のレベルと言っているのが、下方解体、上方解体と呼ばれている内容だと思います。下方解体は物事をその構成要素やパーツに分解するプロセスです。例えば人間なら細胞とか、DNAとか、分子とかに分けて分析する考えです。上方解体は、その要素がどういうように活用されていくかを述べる合成的な考えです。リンゴはアップルパイが作れるとか、リンゴジュースにできるとか、ケーキに使うとかです。これは活用あるいは合成ですが、なぜか上方解体と呼ばれています。これらは一般に科学が行っている方法です。ハーマンはこうした科学的な思考では物事の本質は理解できないとしています。もう一つの感性のレベルが必要だというわけです。感性のレベルと言っているのは、モノとのコミュニケーションあるいはインターラクションによって生じる関係性や体験による相互作用のことのように思います。全体的には私は賛同しております。彼が挙げているモノが感性のレベルで人の影響を受けるという内容は、以下のようなことです。

1.使用や体験による変化:長年使いこんだ家具や道具は、使用者の痕跡を残し変化しています。これは人がモノに対して影響を与えたことであり、それを見た人も新品のモノとは違う感情を持ちます。感性的ということです。
2.コンテキストの変化:モノを置く場所によってその意味や価値が変わります。どこに置くかは人がすることです。例えば寺の中に置かれている仏像と博物館に置いた場合の仏像です。寺の中ではその場所と文化と地域に密接で祈りの対象ですが、博物館では美術品のとしての側面が強く現れます。
3.物理的な変化:外に置くか屋内に置くかといったことが、モノの錆や腐食などの作用を起こします。置く場所を決めるのは人であり、モノと相互作用していると考えます。

私もモノとのコミュニケーションに関心を持っておりますが、私の場合はモノと接した、あるいは体験した時に生じるモノとのフィードバックに焦点を当てています。しかし彼の相互作用は上述したようにそうではありません。こんな風に考える方もいるんだ、と驚いたのを覚えています。

それでは、ハーマンの考えとオブジェクト指向プログラムとの関連を考察してみましょう。ハーマンが下方解体、上方解体問述べている範囲は、いわば科学技術の範囲で、ヴィトゲンシュタインの言う、語れるモノのことだと思います。そしてオブジェクト指向プログラムの属性とメソッドに分ける考えと上手く対応します。ハーマンが感性の例として挙げた上の項目は、現在はシェーダーという技術の発展によって、そのように見せることができるようになってきました(シェーダーについてもそのうち扱います)。それを見て、体験して、人は感性的なレベルに入ることになります。これはプログラムによるシミュラークル(シミュラークルについても取り上げる必要があります)です。シェーダーの技術そのものはオブジェクト指向プログラムとは関係がありません。しかしモノを「形」と「表現」というような異なる視点で分けて扱う視点は、オブジェクト指向的です。この場合「形」はデータでプロパティ(属性)になります。「表現」(光の当たり方、つや、陰の具合をどうするかというようなこと)はメソッドに対応します。このように考えると、オブジェクト指向的に捉えることができるということです。プログラムができるのはあくまで表現です。見て体験してどう感じるかは人によるわけですが、感性のレベルに対してオブジェクト指向プログラムでアプローチすることはできそうです。

ここまでをまとめると、オブジェクト指向プログラムは、非線形の未知を作ることができるし(これまでのブログも関係しています)、人によるモノの変化もシェーダーを使ってシミュラークルとして表現できる。これらが人に対する感性的なアプローチになります。また、これらの感性的なモノと人とのフィードバックを加えておきたいと思います。重要なことは、こうした技術によって、感性的というようなやや形而上学的な事柄を、現実の工学に接地させることができるという点だと思います。

オブジェクト指向プログラムとの対応、Touchdesignerを例にして

オブジェクト指向プログラムの解説はYoutubeに多くありますが、それでは自分が実際に使っているTouchdesignerやMAXに当てはめると、クラスが何で、継承はどの機能で、ポリモーフィズムがどれにあたるのか、と言った個別のプログラムに対する言及はありません。プログラムをはじめたころは、オブジェクト指向プログラムの抽象的な説明を何のためにしているのか、と思っておりました。言語が思考を規定する。ということを知るにつれて、プログラムの構造を少し知っていると、プログラムを書く場合も構造的に書くようになると思いました。それではTouchdesigenrを例にして具体的に検討していきましょう。Touchdesignerを使っていない方は何を言っているかわからないと思います。ご自分が使われているプログラムの何が対応しているのかを意識するきっかけになるといいと思っています。

1.クラス:すでに上述してきましたが、これが一番重要かと思います。Touchdesignerではオペレータにあたります。このオペレータの中には、属性とメソッドが記載できます。OP Create dialogを出したとき、沢山のオペレータが並んでいますが、この一つ一つがクラスで、このテンプレートから引っ張ってきでパラメータを入れた状態がインスタンス化にあたります。例えばTransform SOPというオペレータがあります。OP Create dialogに在る状態はクラスで、画面に配置すると初期値が入っておりインスタン化されたことになります。x, y, z軸に対してどのぐらい移動するかという値を入れることができます。この値はプロパティです。このプロパティに従って移動する行為はメソッドになります。Math CHOPというオペレータで計算が行えます。足し算するための値はプロパティですが、足し算はメソッドにあたります。

2.継承:継承とは、あるクラスが持つ特性や機能を別のクラスが引き継ぐことを指します。例えばRectangle TOPという四角形を描くオペレータ(クラス)で、色のパラメータに値(プロパティ)を入れて赤に設定しました(赤になった行為はメソッド)。これをtansform TOP(クラス)につないでスケールの値(プロパティ)を変えてサイズを変えました。この時transform TOPは赤色を保っています。最初に設定した特性が継承されたわけです。似たものに参照があります。これは別のクラスの値をそのまま持ってきて使うことです。例えばTable DATには行と列に数字が入っています。これの行の数を知りたい場合、op(‘table1’).numRowsと書きます。行の数を利用するため、Constant CHOPの値に書くと、行の数がConstant CHOPに表示されます。これは別のオペレータの値を参照したことになります。

3.ポリモーフィズム(多態性)とは、一つのインターフェイスで異なる型のオブジェクトを操作できる性質を指します。例えば、2次元の形状を移動させる機能にTransform TOPがあります。そして3次元形状を移動させるのが、Transform SOPです。LFO CHOPでサイン波を発生させてx軸を動かす場合、LFO CHOPはTransform TOPにもTransform SOPにもつなげます。LFO CHOPの同じ信号を使って(共通のインタフェース)、異なるオペレータを動かしたわけです。

その他:継承のところで、op(‘table1’).numRowsという表示をしました。一定値を示すConstant CHOPの値を得るには、op(‘constant1’).par.const0valueと書きます。このドットで繋げていくやり方が、python等のオブジェクト指向プログラムと共通していると気づかれたかと思います。同じ構造です。op(‘constant1’)というクラスの中に、par(パラメータ)の分類があって、その下にconstant0valureというプロパティがある。という記述の仕方です。これをみてもオブジェクト指向だな、と感じていただけると思います。MAXも同じです。例えば、例えばjit.gl.textureと書く場合、「jit」は「Jitter」の省略で、Maxの映像を扱うモジュールの一つです(親クラスにあたります)。その中の汎用グラフィックスライブラリーOpenGLを利用します。そしてtextureを操作します。というように階層的な構造を表しています。

absTime.frame(TouchDesigner全体のフレーム数を返します)や、me.time.frame(実行されているオペレーターのローカルタイムのフレーム数を返します)等、特定のオペレータや階層に依存せず、使える命令があります。これがグローバル変数です。

このように、Python等を扱うのと同じことがTouchDesignerでお起こっています。それは当然で、TouchDesignerはPythonとGLSLというプログラムで作られています。GLSLはシェーダ―を扱うプログラムで別の機会に取り上げます。

世界とは事物と出来事の集合の総体と定義し、世界を描写する手段として言語を捉えた実世界の言葉と、その捉え方を仮想空間にもってきたオブジェクト指向プログラムとを並べて考察してみました。オブジェクト指向プログラムは関係性を扱うのにたけており、これは工学でいうとプロシージャルにあたります。そして「未知」も表現できます。工学的には背後に非線形性があるとして扱えます。そして人によるモノの変化については、シェーダーとして扱うことができます。言葉は実世界を映す鏡ですが、仮想世界を映す鏡としてオブジェクト指向プログラムがあるようです。ということで、今回のブログの表紙は鏡を2枚描いております。現実を映す鏡としての言葉と、仮想空間を映す鏡としてのオブジェクト指向プログラムを象徴しています。私は古代史が好きなので、三角縁神獣鏡とか、方格規矩鏡とかをイメージして作製しました。この作り方は、未知を生み出す方法ではないかと思っているもので、発展の可能性を感じています。もう少し検討してから紹介したいと思っております。

コメント