fc2ブログ

ネタつつき74-オブジェクト指向に対する誤解。OOvsDO?

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

オブジェクト指向は現実を全て実装できる万能の技術でありません!そんなの嘘です!!

この事実は冷静に考えれば分かると思います。人間オブジェクトはDNAを持ちます。だからと言って、ビジネス系のシステムで顧客オブジェクトにDNA情報を実装する人が居るでしょうか?商品オブジェクトと一言で言っても、林檎と魚は違う商品です。家ならばもっと違うでしょう。それらの情報をオブジェクトで表現しますか?(以下省略)・・・
これでお分かりだと思いますが、全てがオブジェクトで表現できるというのは過剰広告であり、システム開発をやりやすくするための一つの概念にしかすぎないのです。オブジェクト指向は万能ではありません。オブジェクト指向だけでシステム開発が出来るなんて甘い事はなく、開発するために色々な技術と知識が必要となります。その点を理解すれば、データ中心アプローチはオブジェクト指向と敵対するものではなく、足りない部分を補完する技術、もしくは包合された技術であると言う事が分かります。
人間がオブジェクト指向を考えだしても、依然としてデータは安定はしているのです。
その事実から目を背けてはなりません。
スポンサーサイト



テーマ : 情報処理技術
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター