オブジェクト指向は難しいという固定観念があります、オブジェクト指向の恩恵と難しさを考えてみよう

フリープログラマへの道

Home > プログラミング > オブジェクト指向

オブジェクト指向はプログラマの最も大切な基本概念です。

Sponsored Link

オブジェクト指向

オブジェクト指向の普及

いろいろ会社、現場でプログラミングの仕事をしてきましたが、 「オブジェクト指向」の考え方が以外にも広まっていないことを実感することがよくあります。

私がこの業界に入ったころには盛んに「オブジェクト指向」を意識したプログラミングって、 言われていたのですが、なかなか浸透せず、オブジェクト指向は難しいという固定概念が定着していました。

あれから10年以上も経った今、とっくに誰でも「オブジェクト指向」という言葉使わなくても 当たり前の概念となっているものと思っていましたが、実はそうでもないのです。

私は、OSがまだDOSの時代MSC7.0で始めてC++という言語を学び、クラスというものを初めて使用して プログラミングをしました。

それから、オブジェクト指向、クラスの考え方に惹かれ、プログラミングがいっそう好きになっていったのを 覚えています。

その後、DOSからWindowsへとOSが変わり、とりあえずということで、プログラミング言語もVisualBasicを選択しました、 その時代のVBにもクラスの機能は存在したのですが、とても使えるような状態ではなく、モジュール主体のプログラミングとなってしまいました。

しかし、VisualBasic6.0からはほぼ問題なくクラスの使用ができるようになり、VisualBasic6.0以降全てクラス単位でのプログラミングを行なっています。 ということで、オブジェクト指向と一番縁遠いVisualBasicでさえVer6.0以降では、オブジェクト指向的なプログラミングが可能となっているわけです。

しかし、VisualBasic、さらにVisualC++でさえクラスを使わなくてもプログラミングは可能です。 このことがプログラマーにとっていいことなのか、考えさせられる問題です。

なぜオブジェクト指向なのか

ではいったいオブジェクト指向のどこが優れていて、どこが魅力的なのでしょうか

まずは一般的いわれているオブジェクト指向の恩恵について羅列してみましょう、

  • 再利用可能なモジュールを生産できる
  • オブジェクト単位でのテストが可能なため、システム全体での不具合を減少させることができる
  • 継承の機能を利用することで、拡張が容易である
  • オブジェクト間通信のためのメッセージ協約は外部とのインターフェイスの記述、保守を容易にする
  • カプセル化されたオブジェクト型をベースにシステムを分割することでスケーラビリティの問題の解決に寄与する

などです。

実際はこれが全てではないし、全てのケースにこれらの事が全てあてはまるわけでもありません。 このようなプログラミングが可能なモデルであるということです。

私にとって一番の「オブジェクト指向」の恩恵とは、想像の容易さだと考えています。

1つのシステムを沢山のオブジェクトに分割し、それぞれの役目、外部とのメッセージのやりとりなどを容易に 頭の中で組み立てていくことができるからです。

このことは、文章で説明することはとても難しいのですが、例えていうなら、 システムを1つの会社組織であると考えてみます、そして、必要な機能やデータを部署ごとに割り当てていき、 最小の単位をそこで働く社員であるとしてみます。

ある機能を実現するには、どのような部署を作ればいいか、そしてその部署に対してどんな情報を渡せばいいのか、 想像してみます、そう、部署、会社員をひとつのオブジェクトと考えていけばいいのです。

なぜオブジェクト指向は難しいのか

多くの書籍では、オブジェクト指向を説明するためにモデルを使用しています。

その書籍事態を理解することは、さほど難しいことではありません。

よく使われる、モデルに航空機と飛行場というものがあります、 「オブジェクト= 物」ですから、航空機も飛行場もオブジェクトです、そして一般的な航空機のオブジェクトから継承し固有の航空機のオブジェクトが作られ、 ある航空機オブジェクトは現在ある飛行場オブジェクトに存在しているなどと説明することができます。

では、実際これから自分が設計するシステムの仕様書をみてみると、ほとんどの場合航空機も飛行場の文字はありません^^

そうなのです、いくら書籍で勉強しても、実際のシステム上で何をオブジェクトとするべきなのかは、すべてケースバイケースなのです。 ここが一番悩むところです。

私の経験上、オブジェクト指向といっても別に物にこだわる必要はありません、物などひとつもないシステムだってありえるわけですから。 それより、システムをどのように分割するかということを考えてください。

分割の仕方次第で、先ほど書いたオブジェクト指向の恩恵をうけることができるかどうかが決まるのです。

そして、上手に分割できた時はとてもすっきり気持ちのいいものです。 その気持ちのよさはきっと、カプセル化、再利用、システムの拡張性に繋がっていくと思います。

Sponsored Link


Copyright (C) Breath.All right reserved