2011-03-27

オブジェクト指向・ディバイド(3)

オブジェクト指向のコンサルタントを行う人がいます。彼らがどのような能力を持っているのかは不明ですが、世の中(日本限定)にそれが知られ始める頃、既に彼らは存在していました。

いったい彼らは何を教えてくれるのでしょう?

彼ら自身、オブジェクト指向開発の現場をいったいどれだけ体験してきたのだろう?
ひょっとすると、英文法を知っているだけの人が英会話を教えようとしているようなものではないのだろうか?

偏見かも知れませんが、以前はそんな疑念とうさんくささを感じていました。
(日本の情報通信技術はアメリカより常に何年か遅れているので、ひょっとするとアメリカで多くの経験を積んできた人たちだったのかもしませんが)

オブジェクト指向は訓練によってのみ身につく技術です。宣教師のような存在であるなら役には立たないと思われます。



ところで、オブジェクト指向の教科書や聖書ではよくモデルという概念が出てきます。これがオブジェクト指向の解りにくさや誤解を助長しているように思います。

オブジェクト指向設計の入り口は、まずできるだけオブジェクトになるものを挙げるところから始める、とあります。たとえば名刺管理ソフトの設計では、「人物」が中心的なオブジェクトになるのかもしれません。

えっ! 「人物」がオブジェクト!?

早くも仰天してしまう人もいるかもしれません。その人はきっと、現実の人間をオブジェクトに喩えると勘違いしてしまったからでしょう。
でも、無理もありません。モデルという概念の説明ではそのような誤解をする人がいても当然だと思うのです。

そして、更にその誤解を助長するオブジェクト指向に関する説明があります。

 「世の中の事象をオブジェクト指向によって解析すれば、そのまま置き換えが可能である」

といった内容です。

この説明はある意味大きな間違いなのです。現実をオブジェクトに置き換えるという考え方はオブジェクト指向開発のプロセスでは実際には分りきっていてほとんど意味がないからです。逆に、当たり前のことをさも意味ありげに尊大に説明するのがモデルを使った説明、と理解しておけばあながち間違いではありません。

名刺管理に話を戻すと、「人物」というオブジェクト、これはクラス化することが望ましいとします。しかし、コンピュータの中に人間が存在する訳ではありません。クラスからインスタンス化されたものはメモリー上のデータでしかありません(シリアライズして媒体に保存、という形態もありますが)。

もっとシンプルな設計なら、「人物」ではなく、「名刺」というクラスを作った方がいいかもしれません。
しかしそれでも、名刺をスキャンした画像データはあるかも知れないけれど、名刺そのものがコンピュータの中にある訳ではありません。


つまり、オブジェクト指向で扱うオブジェクトとは、それはメモリー上にあるデータでしかないということなのです。

逆に、コンピュータの中には現実世界にはないオブジェクトがいっぱいあるともいえます。メモリーそのものだってオブジェクトであり、クラス化の対象になるし、ハードディスクやディスプレイ等のデバイスだってオブジェクトとして扱います。ファイルもそうだし、ネットワークだって。

そんなコンピュータ世界の中にいきなり現実社会を比喩したオブジェクトが入ってきたら、それは違和感があって当然なのです。

モデルを使った説明から、それをコンピュータ上に置き換えたときにどうなるのか、一番欲しいその部分を説明した聖書を僕はまだ見たことがありません(あるかもしれませんが)。


モデル化という中間的なプロセスが不要になることは希で、名刺管理ならば人の名前や連絡先、住所といったデータが必要であることをまず考えます。それらをコンピュータ上でどのように表現するのか、つまりどのように扱うかという考え方が先にあり、それをプログラミングで具現化する際にオブジェクト指向というものが介在する、という考え方が最も現実的で自然なのではないか、ということです。

コンピュータ上でデータを合理的に扱う方法を考え、プログラミングの都合でその合理性を損なわないようにする、それがオブジェクト指向のテクノロジーです。現実世界を模すという考え方は現場ではあまり役に立ちません。
コンピュータ内部での構造設計を行い、その後それをクラスやオブジェクトに分類して行くことが基本なのです。


だから、オブジェクト指向でよく登場するキーワード、「デザインパターン」も、これはある意味本末転倒しているといえるのかもしれません。


0 件のコメント:

コメントを投稿