ネタつつき74-オブジェクト指向に対する誤解。OOvsDO?
誤解を解くためには、先ずオブジェクト指向とデータ指向について整理する必要がありますので、各理論を整理する事から始めます。
データ指向ことデータ中心アプローチは、データの安定性に注目して、データ基盤を共有資源として設計するアプローチ法です。このアプローチ法が考えだされた背景には、その時代の一般的な技法である構造化分析法(POA)が、データをあまり意識したものではなく、プログラム事にデータの操作が重複し、おまけにデータが分散してしまったので、保守性が低く変化に弱いシステムになってしまったという深刻な問題がありました。それを解消するために、データそのものは安定している事に注目してDOAが考えだされたのです。これにより、情報システムは以前に比べて変化に強くなりました。
それで、データの安定性とは何かと申しますと、会社は業務手順(プロセス)が変化しても、業務内容であるデータは、経営が変わらない限りそれ程変わらないという性質です。これは少し考えて頂ければ分かると思いますが、業務手順は結構変わります。その変化に合わしてシステムを作るとなると、それがどれ程大変なのか察しが付くかと思います。
しかし、データ中心な考え方もシステムが複雑化する事に従って、その弱点が露呈してきました。それは、生産効率が十分でないという点です。データ中心な考え方は、個々のシステムにとって安定性をもたらし、システムに柔軟性を生みましたが、システム開発という巨視的な視点から見ると同じことを繰り返している点で生産性は十分なものではあく、その状態では複雑化するシステムに対応しきれなくなりました。同じことを々していれば、十分なスピードで開発が出来ません。その弱点を解消するのがオブジェクト指向です。
オブジェクト指向は一言で表すのが難しい概念ですが、敢えて簡潔に表現するとすれば、物事を抽象的に扱い、それにより再利用性を高める技術となると思います。オブジェクト指向では、同じ事を繰り返すのを避けるための智慧が詰まっています。例えば、以前は画面の線画を毎回コーディングするか、コードをコピー・アンド・ペーストして、プロジェクト独自のロジックを追加していました。一方オブジェクト指向では、画面を継承する事によりそれに対応します。
また、プロセス(手順)とデータを一緒に使う事により、人間の思考を助けるのもオブジェクト指向の特徴です。データ中心アプローチを用いて変化に対応するために、データとプロセスを分離したのはいいのですが、それ故に情報が爆発的に増えました。例えば、商品データがあるとします。この時、商品を扱うプロセスは無数に存在し、関数を必要とされるだけ作っていけば、システム規模によっては数百個になるかもしれません。この様な状況が開発者にとってどれ程負担になるのかは想像がつくでしょう。これを避けるために、プロセスとデータを一体化させたのがオブジェクト指向です。
今まで述べた歴史的背景を鑑みれば、オブジェクト指向にとって、データ中心な考え方は切っても切れない関係である事が分かって頂けると思います。何故ならば、データの安定性を無視し、プロセスのみに注目して開発すれば、それはプロセス指向(構造化技法)であり、変化に弱いシステムが出来上がってしまうからです。ソフトウェア工学は学問であり、その産物であるオブジェクト指向もまた積み重ねで出来ているのです。ある日突然生まれてきた概念ではありません。
ところが、データ中心な考え方を踏まえないオブジェクト指向家?達が以外と多いのが現実です。その背景には、オブジェクト指向の宣伝が影響していると私は考えております。皆様も「オブジェクト指向は現実を反映するものであり全てをオブジェクトで表現できる」という内容の宣伝文句を見聞きした事があるでしょう。例えば、動物オブジェクトを継承し人間オブジェクトを表現できるなどといった事です。しかし、10年程実務で使っている自身の経験から私は断言できます。
オブジェクト指向は現実を全て実装できる万能の技術でありません!そんなの嘘です!!
この事実は冷静に考えれば分かると思います。人間オブジェクトはDNAを持ちます。だからと言って、ビジネス系のシステムで顧客オブジェクトにDNA情報を実装する人が居るでしょうか?商品オブジェクトと一言で言っても、林檎と魚は違う商品です。家ならばもっと違うでしょう。それらの情報をオブジェクトで表現しますか?(以下省略)・・・
これでお分かりだと思いますが、全てがオブジェクトで表現できるというのは過剰広告であり、システム開発をやりやすくするための一つの概念にしかすぎないのです。オブジェクト指向は万能ではありません。オブジェクト指向だけでシステム開発が出来るなんて甘い事はなく、開発するために色々な技術と知識が必要となります。その点を理解すれば、データ中心アプローチはオブジェクト指向と敵対するものではなく、足りない部分を補完する技術、もしくは包合された技術であると言う事が分かります。
人間がオブジェクト指向を考えだしても、依然としてデータは安定はしているのです。
その事実から目を背けてはなりません。