オブジェクト指向ってなに?メリット・デメリットを具体例と共に分かりやすく徹底解説!

プログラミングの勉強をしていると、必ずと言っていいほど出てくる「オブジェクト指向」。オブジェクト指向は難しく「オブジェクト指向って意味あるの?」といろんな疑問が出てきてしまい、学習が進まないこともあります。この記事ではオブジェクト指向について、具体例を挙げつつ解説していきますので、ぜひチェックしてくださいね。

 

【具体例で分かる】オブジェクト指向とは?

 

 

オブジェクト指向とは、プログラミングの際に活用される考え方、概念のこと。「オブジェクト指向とはこれのこと!」というはっきりした形は無いため、プログラミング初心者の方は難しく感じるかもしれません。

 

オブジェクト指向の手法

 

オブジェクト指向は、プログラミングの対象となる手順を一つの「モノ」としてとらえる手法のことを指します。例えばポーカーゲームのシステムを作る際、ポーカーのカードを配る人(ディーラー)とプレイヤー、そしてカードをそれぞれ一つの「モノ」として定義し、「モノ」一つ一つがどのように動作するかをプログラミングしていくのです。

オブジェクト指向を使わない手法もありますが、一度「モノ」を作りルール付けをすれば後で簡単に変更できるので、最近ではオブジェクト指向を利用して行うプログラミングが主流となっています。

 

オブジェクト指向にまつわる用語の意味

 

 

オブジェクト指向で出てくる代表的な用語は、「クラス」「カプセル化」「継承」「ポリモーフィズム」などです。オブジェクト指向について理解を深めるため、これら4つの用語の意味を押さえておきましょう。

 

クラス

 

オブジェクト指向で言うクラスとは、設計図のこと。モノ(オブジェクト)を作るための基礎となるものです。具体的に言うと、クラスで定義するのは、オブジェクトがどんなことをするのか、どんなことを覚えておくのか、といった事柄です。

作りたいオブジェクトが「ポチ」という名前の犬型ロボットだとすると、クラスで定義するのは「吠える」「座る」「眠る」などの動作に加え、「ポチ」という名前を記憶しておくこと、となります。

オブジェクトは指示がなければ自分で動けませんので、クラスを設定し「オブジェクトが何をするのか」を最初に決めておくのが肝心なのです。

 

カプセル化

 

カプセル化とは、モノを単純な形にして抽象化すること。オブジェクトの中には、様々な処理が入っていますが、その一つ一つを全ての人が理解して利用するのは非常に難しいことです。例えば時計。時計の中には様々な部品が入っていますが、私たちはボタンを何回か押すだけで時計の針を操作できます。

しかし時計の中の部品が全部操作できるようになっていて、時計の設定を自分で一からするのは大変です。カプセル化は、このように複雑な処理をまとめ、抽象化することで分かりやすいものを作る作業のことだと言えます。

 

継承

 

オブジェクト指向で言う「継承」とは、クラス(オブジェクトの設計図のこと)定義に共通している部分を別のクラスとしてまとめる仕組みのこと。具体的に言うと、すでにあるクラス(スーパークラス、親クラスと言います)から、新しく作ったクラス(サブクラスと言います)に移す作業のことを言います。

イメージでいうと、ゲームでいうセーブデータ引継ぎに近い概念かもしれませんね。もちろん継承を使わず、新しいクラスを作ることもできます。しかしすでにあるオブジェクトAに近いクラスを新たに作る際、一から作り直しをする必要がないので継承を使うメリットは大きいと言えるでしょう。

 

ポリモーフィズム

 

ポリモーフィズムとは、オブジェクト指向の性質の一つです。具体的に言うと、様々なクラスの動き方を、同じ方法で指示できるようになること。

例えばキャラクターAとキャラクターBがいたとして、バトルシーンではAは手、Bは足を使って敵と戦う動きをするとします。ポリモーフィズムなしではそれぞれのクラスごとに「手を動かす」「足を動かす」と指示を変える必要がありますが、ポリモーフィズムがあれば「戦う」という指示だけでそれぞれのギャラクターが行動してくれます。

ポリモーフィズムを利用すると指示が少なくて済むので、処理を簡略化できるようになるのです。

 

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

 

 

ここまでオブジェクト指向や用語の基本について解説してきましたが、「オブジェクト指向を知る意味ってあるの?」と感じている方もいるでしょう。

しかしオブジェクト指向を理解することで、得られるメリットはたくさんあります。ここからは「なぜオブジェクト指向が便利なのか」という点に着目しつつ、オブジェクト指向のメリットについて解説していきます。

 

オブジェクト指向のメリット①プログラミングの書き換えが楽

 

例えば、プログラミングを使いボタンを押すと「おはよう」という文字がweb上で打たれるプログラムを作る場合、オブジェクト型を使わず「手続き型」という方法を使うと

 

1,ボタンが押されたことを感知する

2,ボタンが感知されたら、「おはよう」という文字を打つ

3,「おはよう」という文字を画面上に表示する

 

といった内容でプログラムを書くことになります。一方、オブジェクト指向の場合、

 

1,押されたことを感知する役割のもの

2,「おはよう」という文字を打つ役割のもの

3,文字を画面上に表示するもの

4,1~3のものに指示を出す役割のモノ

 

と4つのものに分けて考えます。実際に行う手順は同じですが、もし「おはよう」という文字を「こんにちは」に変更したい場合、「手続き型」では2番目と3番目の手順で書き換えが必要ですが、オブジェクト型の場合「おはよう」という文字を打つ役割のもの、だけ変更すれば済みます。

後々変更する可能性があるプログラムであれば、オブジェクト指向で作っておいた方が良いのです。

 

Geekly Media ライター

oume

3+