オブジェクト指向プログラミングを理解するためのちょっとした知識について


「オブジェクト指向プログラミング」は大切な概念ではあるが、今ひとつ理解にしにくい概念である。なぜ理解し難いかといえば、「オブジェクト指向プログラミング」と言う言葉は殆どの場合、「手続き指向プログラミング」との対比において、初めて意味を持つからである。

よって、「オブジェクト指向プログラミング」そのものを単体で勉強しても今ひとつピンと来ない。多くのテキストや教本は、「手続き指向プログラミング」との対比をすっ飛ばし、「オブジェクト指向とは何か」から勉強するので分かりにくいのである。

勉強しなければならないのは、2つの指向のちがいである。

 

それでは、2つを対比してみよう。

純粋なオブジェクト指向純粋な手続き型
メソッド関数(サブルーチン)
オブジェクトモジュール
メッセージ呼び出し
メンバ変数

 

(出典:Wikipedia)

 

これを見ると、プログラム上、どちらかだけにあるというものはない。オブジェクト指向プログラミングと、手続き指向プログラミングは、見た目においてはあまり変わらないのである。

では、この2つの間の決定的なちがいは何か。

一言で言えば、「オブジェクト指向」は、オブジェクトの中身を、その外から触ることが出来ず、「手続き指向」は、モジュールの中身を外から触ることができる、というちがいである。

実際、「オブジェクト指向」と言う概念は、「プログラムの中身を外から触ることができないようにするために生まれた」のである。

 

例えばあるオブジェクト Hogehoge を作ったとする。オブジェクト指向ではオブジェクトの中に入っているメンバやメソッドは外部から守られる。メンバが持つ値は、特定のインターフェースを通じてのみ行われ、勝手に値を変えられたりすることはない。

しかし、手続き指向プログラミングにおいてあるモジュール Hogehoge を作った時、手続き指向では内部の変数や関数は守られない。どこかで同じ名前を持つ変数が定義されたり、勝手に外部の関数が、内部の値を書き換えてしまうかもしれない。

そのため、手続き指向は、大きなサイズのプログラムになればなるほど、どこでバグが発生するか、わからなくなってしまいがちである。「こんなところからアクセスされていた、気付かなかった」ということが、内部の変数や関数を守れない以上、ありえるのだ。

 

Javaなどで、グローバル変数、すなわちpublicかつ、staticな変数を作ってはいけない、と教えられるが、要はこのような変数を使うと、「オブジェクト指向プログラミング」の意味が無いからなのである。

この点を理解していると、オブジェクト指向プログラミングにおける、ポリモーフィズムやオーバーライドなどの考え方も、すんなり理解できるようになる。

 

 

 

 


関連記事一覧

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

we love develop
アプリやシステムの開発を通じて、お客様のビジネスを成長させることが私たちのビジネスです。お気軽にお問い合わせください。
 お問い合せ

お電話でのお問い合わせはこちらから
TEL:03-5297-2871

メールマガジンの登録

キャパでは誰かに話したくなるようなIT小ネタを、週に一回メルマガで配信しています。
ぜひ購読してみませんか?
 購読する

ホワイトペーパーの入手

ITブログ月間20万PV達成!自社オウンドメディアの運用ノウハウを無料公開しています。
 ダウンロード

記事カテゴリ記事カテゴリ

月別投稿記事

PAGE TOP