作成日 2009/11/14
最終更新日 2010/7/4
[ Japanese | English ]

オブジェクト指向のメリットとデメリット

 このページではオブジェクト指向のメリットとデメリットをその理由とともに説明します
 だるまは、オブジェクト指向というのはソフトウェアを作る上での1つの道具(もしくは方法)という気がしています。
 ならば、そのメリット、デメリットを理解したうえで使用した方がより、適切に使えると思います。

※理由については、ソフトウェア工学プロジェクトマネジメントについて多少知っていないと理解が難しいかもしれません。
(なぜかと言うと、これらを知らないと、「プログラムは動きさえすればOK」のような考えを持ってしまうためです。でも、この考えは間違っているんです。その他の品質(保守性など)や開発工数だって大事なんです。)
 でも、これらについて知らなくても、結論だけでも頭に入れておくと良いと思います。
 もし、ソフトウェア工学について勉強するのであれば情報処理技術者試験の基本情報技術者や応用情報技術者を勉強してください。 (残念ながら受験経験が無いのでわからないのですが、ITパスポートだと、内容が足りないかもしれません)

1.オブジェクト指向のメリットとデメリット
2.オブジェクト指向のメリットの詳細とその理由
3.オブジェクト思考のデメリットの詳細とその理由
4.参考文献など


1.オブジェクト指向のメリットとデメリット

 まずは、オブジェクト指向のメリットとデメリットを以下に挙げます。
 ※メリットについては、オブジェクト指向を正しく使用した場合のメリットです。デメリットについては正しく使用した場合はもちろん、それ以外の場合についても載せてます。

■オブジェクト指向のメリット:
  1. 強度(凝集度)が高くなり、結合度が下がる。
  2. プログラムが仕様変更に強くなる
  3. プログラムの再利用がしやすい
  4. プログラムが理解しやすくなる場合がある
  5. プログラムのテストにかかる時間が減らせる
  6. デスマーチになる確率を減らせる(多分)
■オブジェクト指向のデメリット:
  1. 設計にかかる時間が増える
  2. プログラムの処理時間が増大する
  3. プログラミングが理解しにくくなる場合がある
  4. オブジェクト指向を正しく理解している技術者が少ないので、オブジェクト指向設計ができない場合がある。

このページのトップへ

2.オブジェクト指向のメリットの詳細とその理由

 オブジェクト指向のメリットの詳細とその理由を説明します。
  1. 強度(凝集度)が高くなり、結合度が下がる。
     まず、強度(凝集度)や結合度に対して注意が払われていないオブジェクト指向はオブジェクト指向ではないと言っていいと思います。
     ということは、オブジェクト指向で正しく設計されたものは、強度(凝集度)が高く、結合度が低いです。

  2. プログラムが仕様変更に強くなる
     データ中心的な考えがあることが関係しています。データは処理よりも変更がかかりにくい性質があるため仕様変更に対して影響を受けにくくなります。
     あ、「受けにくい」というのは仕様変更による影響箇所を減らせたり局所化できるという意味ですので。

  3. プログラムの再利用がしやすい
     強度(凝集度)が高く、結合度が低いためです。

  4. プログラムが理解しやすくなる場合がある
     強度(凝集度)が高く、結合度が低いためです。情報隠蔽+カプセル化により不正なデータが入らない・余計なデータを理解しなくて済むことも関係しています。
     ただし、「場合がある」と書いたとおり、絶対ではないと思います。  例えば、継承するとサブクラスを理解するためにそのスーパークラスも理解しなければならなくなるため、理解するのにかかる時間が増えます。
     また、情報隠蔽+カプセル化も、理解しやすさ向上に役立つとは思いますが、しかし、クラスで保持しているデータ・ソースが見えなくなることによって、ソースが理解しにくくなる原因になる場合があると思います(例えば、処理速度が問題になる場合がある)。

  5. プログラムのテストにかかる時間が減らせる
     これも結合度が低いためというのと、情報隠蔽+カプセル化によるためなのですが、設計時やプログラミング時にテストについて考えておくとさらにテストにかかる時間を減らすことができます。
     「オブジェクト指向設計と試験性 - だるまのエクセルVBA」でも説明していますので必要であれば是非とも読んでください。

  6. デスマーチになる確率を減らせるかもしれない(多分)
     デスマーチはプロジェクトマネジメントに問題があることが多いので、オブジェクト指向で解決できることはほとんどないと思います。
     しかし、オブジェクト指向で設計、プログラミングすると、プログラムの品質(理解のしやすさなど(JIS X 0129 で定義される品質の保守性))が良くなり、 バグによる手戻りが減ることで工数が削減されますので、もしかしたら、デスマーチ予防になるかもしれません。
     あ、そうそう、既にデスマーチになっている場合、オブジェクト指向でそれを解決することはできません。
このページのトップへ

3.オブジェクト思考のデメリットの詳細とその理由

 デメリットの詳細は以下の通りです。
  1. 設計にかかる時間が増える
     データ中心の考えと強度(凝集度)、結合度に慣れれば、多少減りますが、やはり設計時間は多くなると思います。
     理由ですが、考慮すべきことが多くなればなるほど設計に時間がかかるのは当然のことです。はい。
     ただ、設計にかかる時間は増えても、その後の工程にかかる工数は減るので許してください。

  2. プログラムの処理時間が増大する
     まず、オブジェクトの生成(ヒープメモリの確保)に時間がかかることが挙げられます。多分、メモリの使用効率も悪くなるんじゃないでしょうか?
     さらに、特にJavaの場合、ガベージコレクションのオーバーヘッドが大きいという理由もあります。
     カプセル化だけど、引数のチェックなどを行うことによりその分遅くなる気がします。
     まあ、でも最近のコンピュータは性能が高いので、作るプログラムが組み込み向けだったり、科学技術計算向けなどでない限りは、問題にならないこともある。処理時間が問題になったらそのときに調べるという方法で良いと思う。

  3. プログラミングが理解しにくくなる場合がある
     メリットでも書いたけど、継承するとサブクラスを理解するためにそのスーパークラスも理解しなければならなくなるため、理解するのにかかる時間が増えます。
     それから、情報隠蔽+カプセル化も、クラスで保持しているデータが見えなくなるため、ソースが理解しにくくなる原因になると思います。

  4. オブジェクト指向を正しく理解している技術者が少ないので、オブジェクト指向設計ができない場合がある。
     一番の問題。
     そもそも、オブジェクト指向以前にソフトウェア工学をちゃんと勉強していない人が非常に多い。これだと、オブジェクト指向をいくら説明しても理解してもらえない。
     例えば、20人のプロジェクトの中にオブジェクト指向について詳しい人が1人しか居なかったとする。この場合、オブジェクト指向設計など無理です。その1人がOJTで他のメンバを教育し、立ち上がるまでその人がオブジェクト指向に関係する設計を1人で行ったりすることは現実的には不可能だと思います。
     オブジェクト指向自体、理解するのに時間がかかるという問題もある(※理解のポイントは強度(凝集度)、結合度、それからデータ中心アプローチです)。
このページのトップへ

4.参考文献など

 このページを作成するのに参考にしたページです。

番号

リンク先の名称

リンク先の説明

リンクした日

1 凝集度 - Wikipedia 凝集度についてかなり詳しく説明しています。 2009/11/14
2 ソフトウェア品質 - Wikipedia ソフトウェアの品質について書かれています 2009/11/14
3 デスマーチ - Wikipedia デスマーチについて簡単に説明しています。
こういうプロジェクトに就いたら本当に悲惨です。
2009/11/14
4 オブジェクト指向とモジュールの凝集度、モジュールの結合度 - だるまのエクセルVBA 強度(凝集度)と結合度について説明しています。 2009/11/14
5 POA、DOAとオブジェクト指向 - だるまのエクセルVBA 処理中心的な考えと、データ中心的な考えの説明。 2009/11/14


 
Prev Up Next  Top
このページのトップへ

このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方はメールをお願いします。

Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
OMG、UML、Unified Modeling Languageは、Object Management Groupの商標または登録商標です。
JavaおよびJavaに関する商標は、米国およびその他の国における米国Sun Microsystems, Inc.の商標または登録商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。

このホームページの作成者はこれらの会社とはいっさい関係がありません。