見出し画像

プログラミング進化論(4)(2009)

4 オブジェクト指向プログラミング
 構造化プログラミングの方向性をより発展させたのが「オブジェクト指向プログラミング(Object-Oriented Programming)」である。従来、プログラムはアルゴリズムとデータに分離して処理を手順として捉えられてきたが、データとそれを操作するための「メッセージ」および処理を「オブジェクト」の単位で把握するのがこの新たなプログラミングのアイデアである。オブジェクトとは物として捉えるということで、これによりウィンドウ・システムが可能になる。オブジェクトはデータ構造とアルゴリズムを持っている。他のオブジェクトにメッセージを送って状態を変化させたり、調査したりすて、処理を行う。言ってみれば、コミュニケーション論の発想からプログラミングを構築する試みである。

 構造化プログラミング同様、オブジェクト指向プログラミングの登場にもそれにふさわしい個性的な人物がかかわっている。1970年代初頭、ゼロックスのパロ・アルト研究所のアラン・ケイは、大胆不敵な「ダイナブック(Dynabook)」構想をぶち上げる。コンピュータは一部の研究者やオタクだけのものではない。誰もが使えるものにすべきだ。未来のコンピュータは携帯性があり、高画質なディスプレイを持ち、通信機能を備え、対話可能で、手書き文字も認識できる。それはメディアを超えた最初のメディア、すなわち「メタメディア(MetaMedia)」である。彼が開発に加わった同社の試作コンピュータAltoはマウスの使用、GUI環境、ネットワーク機能などを備え、今日のインターフェースの原型を具現している。ウィンドウやブラウザ、ポップアップメニューなどもこの途上で生まれている。なお、「天下のゼロックスがネズミなんぞ消費者に売れると思うのか?」と判断を下し、商品化を見送った経営陣は、現在に至るまでまぬけの典型として語り継がれている。

 その過程でプログラミングにおける新たなパラダイム・シフトが生じる。この構想には、従来のプログラミングならびに言語では不十分であるとして、アラン・ケイはSmalltalkを開発する。そこでは、オブジェクトやクラス、インスタンス、メッセージ、メソッド、インヘリタンスなど数々の奇抜なタームが提唱される。この言語こそがオブジェクト指向プログラミングの先駆となっていく。

 Smalltalk以降、オブジェクト指向プログラミングをサポートする言語が次々登場し、近年、新たに生まれるものはこれを前提としている。何しろ、あのCOBOLにもオブジェクト指向機能が付け加えられているほどだ。代表的な言語としては、C++やJava、Rubyなどが挙げられる。中でも、1995年にサン・マイクロシステムズ社が開発したJavaは。gotoをまったく持たず、大規模のプログラムを大勢で書くのに最も適している。JVMを使うために動作が重いという欠点も、ウェブ・コンテンツを提供するサーバのように四六時中動かしっ放しの巨大なコンピュータ・システムであれば、問題とはならない。パパラッチ好みの華やかな主役と言うよりも、存在感のある実力派のバイプレーヤーといった具合だ。

 Javaは、”One Write, Run Anywhere”を宣伝文句として華々しく登場している。JVMのため、実際にはそうではなかったけれども、どんなハードウェア上でも実行できる言語が売り物である。当初、ブラウザの中で動作するアプレットの作成に用いられ、2001年以降、携帯電話の中に、ダーツ・ゲームやインベーダーゲームなどのJavaアプレットが楽しめる機種も販売されている。確かに、オブジェクト指向プログラミングの拡張性という利点は、ウェブ上で動作するグラフィック・プログラミングで効果的だ。もともとのソース・コードがなくても、プログラムを拡張できるからである。しかし、動作が重く、ウェブ作成にはFlashやAjaxがとって代わるようになる。そもそも、アプレットのような小さなプログラムをつくるのに、オブジェクト指向プログラミングを最も体現したJavaを用いるのは、その特性を生かしているとは言えない。

 オブジェクト指向プログラミングの特徴は三つに要約できる。それは「継承」・「カプセル化」・「ポリモーフィズム」である。

 オブジェクト指向の言語では、「クラス(class)」と呼ばれるプログラム単位から成り立っている。これは現代数学の集合論から拝借した概念であろう。クラスはオブジェクトの定義である。”class creature”とすれば、そのオブジェクトは「生物」と定義されたことを意味する。クラスの下位にサブクラスがあるというように、階層化されている場合もある。クラスの間に階層関係があり、サブクラスが上位のスーパークラスの機能・性質をそのまま持つことを「継承(inheritance)」と言う。

 他のオブジェクトに公開しない状態を「プライベート(private)」、公開する状態を「パブリック(public)」と区別して指定できる。ホテルの個室と廊下と思えばよい。プライベートの状態を外部から変えたり、調査したりする際には、オブジェクトに「メッセージ(message)」を送る。他の言語で手続きや関数、サブルーチンを記述した部分を「メソッド(method)」と呼び、このメッセージを送信するために使う。オブジェクトに変数とメソッドを閉じこめて、外部からのアクセスを制限できる。これが「カプセル化(capsulation)」である。

 オブジェクト指向プログラミングでは、いちいちクラスをつくり直さなくても、継承の機能を用いると、簡単に「拡張(extend)」が可能である。それは、「生物」というクラスがあったところに、新たに「水中生物」のクラスをつくると思えばよい。を「水中生物」にする。拡張はクラスの再定義を意味する。オブジェクトは自立的に動作するが、クラスという単位によって構成されているため、オブジェクトの型ではなく、クラス型で実装されたメソッドが起動する。クラスが異なれば、同じメソッド呼び出しを実行しても、それに応じたメソッドが起動される。これが「ポリモーフィズム(polymorphism)」である。

 これらの特徴により、多人数で書いた大規模なプロフラムを実行して、不具合が生じた場合でも、比較的、問題箇所を見つけやすい。プログラムが巨大になれば、ミスも増えるというものだ。それをどうしたら素早く見つけられるか、すなわち最悪に備えて最善を尽くすにはいかにしたらいいかの命題に対する解決法がオブジェクト指向プログラミングである。これなら、復旧するには、その担当者だけが汗を流せばいい。

 日々、新たなソフトウェアやオンライン・サービスが登場し、初心者が直観的に使えるように工夫されているものも少なくない。しかし、その裏には、斬新なプログラミング方式とそのサポート言語の出現という技術的革新がいくつか見られる。SNSの構成はオブジェクト指向プログラミングの概観によく似ている。国家による国民の盗聴・監視も実際にはプロフラムが実行している。サイバー戦争も実態はプログラム戦争である。「インターネットは今後どう進化していくか」という問いにしても、プログラミング理論のパラダイム・シフトを抜きには語れない。規模が拡大し続けるプログラムとそれにかかわるプログラマたちをいかに組織化すればいいかという命題への新しい解決策が見出されたときに、画期的なデジタル・テクノロジーが誕生するだろう。

 その一例として1998年にW3Cから勧告されたXMLが挙げられる。現在のワールド・ワイド・ウェブ上のコンテンツは、主にHTMLというマークアップ言語で記述されている。この言語では文書構造を伝えることはできるけれども、意味を伝達することは不可能である。そこで、ティム・バーナーズ=リーがWWWWの向上を目指して、「セマンティック・ウェブ(Semantic Web)」を提唱する。彼は、WWWで使用される各種技術の標準化を推進する団体「ワールド・ワイド・ウェブ・コンソーシアム(World Wide Web Consortium)」、通称W3Cに所属している。ウェブページの閲覧にデータの交換の機能を加えれば、意味の疎通が可能になる。この目的のために用いられるマークアップ言語がXMLである。XMLでは、自分の目的に応じてタグを定義することが可能である。XMLによって記述した文書にRDFやOWLを使ってタグを付け加えると、このデータの意味を記したタグが文書の持つ意味を形式化して、コンピュータによる自動的な情報の収集・分析が実行される。なお、セマンティック・ウェブはXMLの他にも、各種の標準およびツール群から構成されている。

 プログラミングの歴史を辿ってみると、数学を基礎にしながら、それがコミュニケーションとその組織化の問題に関する考えの発展だということが明らかになる。デジタル技術は、結局のところ、コミュニケーションの一つのあり方にほかならない。

人間の命も海から来たんだ

JAVA JAVA いにしえの
この海に癒される
JAVA JAVA とこしえの
この空に癒される

生き物の命は海から来たんだ

JAVA JAVA いにしえの
この海に癒される
JAVA JAVA とこしえの
この空に癒される
(Godiego “JAVA WA JAVA”)

5 デジタルネイティブとWeb2.0
 2008年11月11日、NHK総合テレビは『NHKスペシャル デジタルネイティブ~次代を変える若者たち~』を放映している。今のティーンエージャーは、子供の頃から、インターネットを始めとするデジタル・テクノロジーに囲まれて育ち、言ってみれば「デジタルネイティブ」である。彼らは「自ら情報を発信し共有することで成立するネット・コミュニティ」を自由自在に使いこなし、多くの匿名の人々と瞬時にコネクトして、新たな「価値」を創出している。既存の限界をブレーク・スルーし、世界を変える可能性があるのではないかとさえ思われている。最近、彼らに関する各種の研究が進み始めている。

 デジタルネイティブの時代が真の意味で「Web2.0」と言えるだろう。2004年、アイルランド出身のティム・ライリーがこの概念を提唱する。ただ、彼の定義は明確ではない。その後の展開を踏まえて、それを要約するならば、インターネットが社会を変えた時代から脱却して、それが双方向になったということである。社会の方がウェブに影響を及ぼしているというわけだ。「ソーシャル・グラフ」をオンラインに形成しようとするFacebookがその典型である。この「グラフ」はグラフ理論の場合と同様の意味である。ウェブ2.0は、現実社会に見られるコミュニケーションの多様性をネット上でも発展的に実現させようとする。残念ながら、日本の文学や映画、テレビは依然としてこのウェブ2.0の意味について理解しておらず、依然として古めかしいネットの社会に及ぼす影響という認識の作品が発表され続けている。

 ネイティブは、暗黙知によって、自分で直感的に適不適を判断できる。しかし、往々にして、それを説明するための言語化、すなわち明示化することができない。一方、ノンネイティブは明示知を通じてそれを理解し、習得しているので、その理屈を語れる。前者が言語を体得するのに対し、後者は習得する。

 日本語のネイティブ・スピーカーは「こそあど言葉」を巧みに使い分けるが、それがどのような場面にふさわしいかについて論理的に説明することは難しい。ところが、日本語を外国語として習得した場合、「これ」が話者のテリトリー内にあるものを指し、「それ」が相手の領域、「あれ」がいずれにも属していないものに用いると理解している。人生の先輩とも言える老夫婦が「これ」や「それ」でなく、「あれ」で会話をしているのも、こうした理由による。ただ、ノンネイティブは理解が習得した範囲に限定されてしまう。

 ネイティブは暗黙のうちにできる。そうして行っていることの中に明示化されていない何ものかが見つかるかもしれない。デジタルネイティブに期待されるのはそういった点だろう。反面、ネイティブはリテラシーから認識することが不得手である。コミュニケーションは、いかなるものであっても、リテラシー、すなわち共通理解に基づいている。ネイティブは、しばしばノンネイティブからの問いかけによって、暗黙知を明示化すべく意識化しようとする。ノンネイティブは、ネイティブにとって、他者である。人は他者として接するとき、普段はどんなに情緒的であったり、一貫性がなかったりしていても、論理的になる。他者はたんなる懐疑主義者ではない。論理主義者である。

 ネイティブ・スピーカーであっても、実際には、ノンネイティブの感覚をよく体験している。それは敬語表現である。敬語にネイティブは存在しない。誰もが体得ではなく、習得しなければならない。口にした後で、「これでいいんだっけ?」と心の中で自問することも少なくない。

 1990年代半ば、秋本治虫は、『こちら葛飾区亀有公園前派出所』において、デジタル機器を使いこなす「+(プラス)」という名前の小学生を登場させている。このサイバー・ボーイはインターネットを駆使して、グローバル規模で交友し、ビジネスを始めるなどまさにデジタルネイティブである。デジタルネイティブの出現は、当時でさえ、すでに時間の問題である。しかし、そのデジタルネイティブの親たちも、かつてはビデオの録画予約もできない先行世代を「機械音痴」と馬鹿にしていたものである。

 最新テクノロジーを使いこなせること自体は、必ずしも、将来性を期待させるものではない。最新のものは、流行語が教えてくれるように、概して、すぐに陳腐化する。基本原理を十分に踏まえ、本質的な理解を目指す方が有望である。デジタルネイティブに見るべきはその行動力と社交力であろう。

 デジタルネイティブであったとしても、新たなソフトウェアやウェブ上のサービスを創出しようとしたら、画期的なプログラムを書く必要がある。けれども、プログラム言語にネイティブ・スピーカーは存在しない。その用法の適不適は入門者や解説書の類で確認しなければならない。エスペラントにおけるラザロ・ルドヴィコ・ザメンホフに相当する開発者と習得者がいるだけである。言語習得のみがあり、言語体得はない。ソフトウェアを見ると、ついついプログラミングから考えてしまうプログラマもいることだろう。プログラム言語はすべての人にとって外国語であり、あくまで明示知の世界である。暗黙知だけではなく、この明示知とどのように向き合っていくかは依然としてデジタル技術の課題である。

 プログラムというのはおかしい世界でして、ミスがいっぱいあるのです。特に大型のプログラムになると、ミスがありながらも、なんとなくつじつまがあえばいいという。前にコンピューター屋さんと話していまして、いいプログラムはどういうものかというと、ミスのないプログラムではない、と。プログラムのミスのことを虫(バグ)と言うが、虫がウロウロ動き回らないようにおとなしくすみ分けしていて、虫が異常発生すると、それにすぐに気がつくようなプログラムだ、と言うのです。
(森毅『数学と人間の風景』)
〈了〉
参照文献
朝日新聞社編、『100人の20世紀下』、朝日新聞社、2000年
梅田望夫、『ウェブ進化論』、ちくま新書、2006年
奥村晴彦他、『Javaによるアルゴリズム辞典』、技術評論社、2003年
木下淳二、『夕鶴・彦市ばなし』、新潮文庫、1954年
金田一秀穂、『「汚い」日本語講座』、伸張新書、2008年
寺坂英孝編、『現代数学小事典』、講談社ブルーバックス、1977年
道家達将=赤木昭夫、『科学と技術の歴史』、放送大学教育振興会、1999年
長岡亮介=岡本久、『新訂数学とコンピュータ』、放送大学教育振興会、2006年
本間之英、『社名の由来』、講談社、2002年
森毅、『数学的思考』、講談社学術文庫、1991年
同、『数学と人間の風景』、NHKライブラリー、1995年
同、『時代の寸法』、文藝春秋、1998年
E・W・ダイクストラ、『構造化プログラミング』、野下浩平訳、サイエンス社、一九七五年
アラン・C・ケイ、『アラン・ケイ』、鶴岡雄二訳、アスキー、1992年
DVD『エンカルタ総合大百科2008』、マイクロソフト社、2008年

O'Reilly. ‘What Is Web 2.0’. ”O'Reilly.com”
http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html
Miliband, David. ’”War on Terror” was wrong’. “The Guardian” 15, Jan, 2009
http://www.guardian.co.uk/commentisfree/2009/jan/15/david-miliband-war-terror
株式会社豊田自動織機
http://www.toyota-shokki.co.jp/
トヨタ自動車株式会社
http://www.toyota.co.jp/
W3C Semantic Web
http://www.w3.org/2001/sw/

いいなと思ったら応援しよう!