昨日の続き

とにかく、オブジェクト指向、リレーショナルモデルとも、実際に今回開発しようとしたシステムにうまくはまって、いろいろと整理してくれるものではないと感じた。とにかく業務システムなので、まず大切なのは、値・情報としてのデータで、それをしまっておく箱としての構造、それを処理する機能があればいいわけだ。情報と構造と機能。データ構造というと、「構造」に着目しているが、当然構造と機能は切り離せるものではない。構造と機能は、同じものを別の側面から見ているにすぎない。たとえば、「引き出し」があったら、箱の中に出し入れできる中箱があって、中箱を「出す」操作と「入れる」操作、あと、出した状態の中箱に、ものをしまう操作、があるわけだ。これは、外箱は、側面が一面だけ開いていて、中箱は上面だけがあいている、という構造とセットになっているわけだ。つまり、まず材質としての木材の性質とか、重力とか、摩擦力とかの制約があって、そのような制約の環境のなかで引き出しになるような構造を木材に与えてやると、引き出しとして機能するものができるわけだ。
そして、「引き出し」そのものが、実体として物理的に存在するわけではない。もちろん頭のなかにはイメージというかモデルとして存在する。養老孟司がなにかの本で、「人体解剖を行う時、『肛門』を切り取って持ってくることはできない」といっていたが、引き出しとかデータ構造も似たような物だと思う。
現実には、木材が存在するだけだが、それを空けたり閉めたりしまってみたり、そとから眺めたり、しまった状態だと中身が取り出せないことを確認したりすることで、一度構造と機能に分解して頭に取り込んだものが、「引き出し」という機能と構造の結びついた一つの実体感のあるモデルとしてイメージされるわけだ。
 ここで大切なのは、「引き出し」というモデルは、実際にある木材の集まりを、どう構造と機能に分解して理解するかを規定する、という点だ。逆もまた同じで、実物をどのように構造と機能に分解整理して理解するか、というのが「モデル」であるともいえる。そして、道具とは、なんらかの「機能」をうみだすように「構造」を作為的に調整したものだと言える。
 さらに大切なのは、モデルは往々にして使いまわされる。いや、おそらくモデルは、パターンの繰り返しがあってはじめて存在するのかもしれない。モデルは抽象化によるパターンの抽出だから、原理的にはパターン=形を目にしたのが一度だけでも抽出はできそうな気もしてしまうが、それはおそらく気のせいで、人は何か2つ以上別の場所・時に、同じ形のパターンを見出したときに、はじめてモデルを作るのだと思う。たとえば他人というモデルを考えてみよう。他人というモデルは、他人が複数人存在しなければそもそもでてこないだろう。だが、他人が一人しかいなくても、その自分ではない個人に対してモデルを作るだろう。一人しかいなくてもモデルをつくるのなら、形があらわれるのが一度だけでもモデルを作ることができるということなのかと思いかけたが、そうではない。モデルを作り出すためには、その一人を、複数回、別の場所・時において見る経験が必要だろう。一度、ある瞬間、本当にちらりとみただけでは、すでに「人」というモデルがなければ、その映像を頭の中にすでにある、「どうぶつ」とか「物体・固体」というモデルに当てはめるだけで、その「人」専用のモデルを作り出すにはいたらないだろう。つまり、動きつづける木の葉でも小石でもなんでもいいが、動いている物に対しては、複数の映像が時がたつにつれて、べつべつに認知されるわけだが、その別の時間のなかでの複数の映像が会ってはじめて、「あの小石」と「この小石」は同じものだと認識するためのモデルが意味を成す。
別の場所・時に、なにかを目にしたときに、過去に見た「あの人」と同じだ、と思うときにこそ、パターンがマッチしたときであり、モデルが生成されうるときである。
 かなり脱線してしまった。が、言いたかったのは、モデルというのは、なにかを目にした人や経験した人が、勝手に頭のなかに作り上げるものだということだ。
 で、SIの話にもどるが、業務をすでにこなしているお客さんの頭のなかには、すでになんらかの「業務」のモデルがある、と考えられる。で、SIをするときは、その業務についての説明を受けて、それを開発側が理解するときには、開発する人もしくは設計する人の頭の中にお客さんのもっている「業務」のモデルと似たようなものができあがるわけだ。もちろんすべてを知る必要は普通ないから、モデルの一部に相当するモデルになる。
で、そのモデルを直接「ノイマン型コンピュータ」とか、「論理回路と記憶素子」とか「アセンブラとハードウェアとOS」とかのモデルに当てはめることは最近はあまり無くて、「オブジェクト指向」とか「リレーショナルデータベース」のモデルに、なんとかマッピングするわけだ。すると、それらのモデルの実装が「Java」とか「Oracle」というふうに用意されているので、それらが提供されているモデルになんとか落とし込めば、晴れてお客さんの欲しかったモデルの動く実装が得られました、ということになるわけだ。
また時間切れなので、今度。