![]()
![]() オブジェクト指向と他者の声 ( 19980731 ) オブジェクト指向の参考書を読むと、かならず「オブジェクト指向は難しい」、「オブジェクト指向を理解できる技術者は少ない」などと書いてある。たしかに初めてオブジェクト指向の技術に触れる者にとって、オブジェクト指向はかなり大きなハードルである。 しかし、じゃあいったいなぜオブジェクト指向が難しいのか、その理由について納得のいく説明のある書物や記事に出会ったことがない。たぶんオブジェクト指向を理解してしまった人たちにとって、いかにして自分がそれを理解できるようになったのか、その道のりをはっきりとあとづけることができないのだろう。 そこで、この問題に対して僕なりの答えをここに出してみたい。その答えとは「オブジェクト指向において、技術者は他者の声に答えなければならないから」というものだ。 オブジェクト指向以前の情報システム開発は、どのような姿だったのか、まず思い出してみよう。 一口にオブジェクト指向といっても、オブジェクト指向分析・設計・プログラミングと、さまざまな位相があるが、ここではいちばん分かりやすいオブジェクト指向プログラミングに話を限定する。 3GLのコーディング経験があるSEは、ユーザが示した要求を満たすプログラムを作るために、文字どおり「すべて」を自分でコーディングしなけばならないことを知っている。 つまり、プログラムの始めと中と終わりをすべて自分で書かなければならない。プログラムの始めとは、レコード定義のことであり、中とは処理ロジックのこと、終わりとは帳票出力やデータの書き出しなどのアウトプットのことである。しかも、プログラマーは、始め〜中〜終わりという全体の処理の流れも自分ですべて書かなければならない。 この膨大な作業と引き換えに、プログラマーは大きな自由を手に入れる。たとえばGOTO命令による論理の流れの自由な制御。自分の思い通りにプログラムの流れを変更し、好きなところへ処理をジャンプさせることができる。頭の悪いプログラマがGOTOを多用して、解読不可能なプログラムを書きたがるのは有名な話だ。 完成したプログラムを一つの世界にたとえるなら、プログラマーはまさにその世界の創造主である。したがって、完成した世界の出来・不出来はプログラマー個人の能力に大きく依存する。 このように、手続き型プログラミングはプログラマーが全知全能であることを前提としているが、そんなプログラマーはめったに存在しない。 そこで、ソフトウェアの品質をできるだけプログラマー個人の資質に依存しないようにするために、構造化という「ルール」が決められた。構造化とは、プログラムをいったん細かな部分に分割して、再びそれを組み立てることで全体を作り上げる発想だ。 構造化のアプローチは、プログラマーの認識に限界があることを認めている。世界全体をくまなく記述することは事実上不可能であり、その代わりに部分をひとつずつ仕上げていこうというわけだ。 しかし、構造化アプローチもやはり、その限られた部分についてはプログラマーが全知全能であることを前提としている。構造化以前も構造化以降も、手続き型のプログラミングは、世界がプログラマーによって構成されるとみなす点で本質的に変わりはない。 他の誰でもなく、あくまで「私」であるプログラマーが、世界を語り、作り上げるのだ。プログラマーの作るプログラム(世界)は、あくまで私の見た目からのプログラム(世界)である。 そこへ、オブジェクト指向の登場となる。オブジェクト指向は、プログラマーを中心に回転していた世界に「他者」を導入する。自分が作り上げるはずの世界に、すでに「他者」が存在するのである。 たとえばオブジェクト指向にもとづいたGUIでは、「イベント駆動型」モデルが利用されている。「イベント駆動型」のルールは、よく言われるように「私を呼ばないで。私があなたを呼びますから」ということである。「イベント駆動型」では、すくなくとも世界の始めと終わりは「他者」(OS)が記述する。プログラマーが関わることを許されているのは「中」の部分だけである。 これはプログラマーという「主体」にとってはつまずきの石である。それまで自由に操ることのできた世界に、突然「他者」が介入してくるのだ。しかも他者の呼び声(メッセージループとイベントモデル)に答えなければ、世界を成立させることさえできなくなってしまった。 そしてオブジェクト指向はさらに、オブジェクトの再利用へと進展する。プログラマーは他のプログラマーが作成した部品を組み立てることでプログラムを作っていく。 また、自分で部品を作るときも、他人はその部品の内部がどのようなしくみになっているか無知であるという前提で作成しなければならない。私は他者が誰であるかを知ることはできないし、知る必要もない。他者も私が誰であるかを知る必要はない。他者が自分に公開する範囲の知識で、プログラムを作らなければならないのだ。 ここでは、「全知全能の造物主としてのプログラマー」というイメージは完全に崩れてしまっている。オブジェクト指向は、むしろ個々のプログラマーの認識を限定することによって成立する。 プログラマーは恣意的な自由を失ってしまったが、その代わりに世界のほとんどの部分に無関心でいることを許される。プログラムという世界が複雑になってくると、むしろそのほうが都合がよい。他者は必要ならば自分を呼び出してくるから、それに答えさえすればよい。また、他者どうしがおたがいを呼び合うように調整するだけでもよい。 このようなオブジェクト指向の世界で、仮にプログラマーが全知全能の神のように振る舞おうとすると、当然壁にぶちあたる。これが、オブジェクト指向が難しいと言われることの理由である。 オブジェクト指向を理解するために必要なこと、それは、他者の声、それも、誰だか知らない他者の声に耳を傾けることだ。 無断転載禁止
![]()
|