オブジェクト指向ってなに?メリット・デメリットを具体例と共に分かりやすく徹底解説!
プログラミングの勉強をしていると、必ずと言っていいほど出てくる「オブジェクト指向」。オブジェクト指向は難しく「オブジェクト指向って意味あるの?」といろんな疑問が出てきてしまい、学習が進まないこともあります。この記事ではオブジェクト指向について、具体例を挙げつつ解説していきますので、ぜひチェックしてくださいね。
目次
【具体例で分かる】オブジェクト指向とは?
オブジェクト指向とは、プログラミングの際に活用される考え方、概念のこと。「オブジェクト指向とはこれのこと!」というはっきりした形は無いため、プログラミング初心者の方は難しく感じるかもしれません。
オブジェクト指向の手法
オブジェクト指向は、プログラミングの対象となる手順を一つの「モノ」としてとらえる手法のことを指します。
例えばポーカーゲームのシステムを作る際、ポーカーのカードを配る人(ディーラー)とプレイヤー、そしてカードをそれぞれ一つの「モノ」として定義し、「モノ」一つ一つがどのように動作するかをプログラミングしていくのです。
オブジェクト指向を使わない手法もありますが、一度「モノ」を作りルール付けをすれば後で簡単に変更できるので、最近ではオブジェクト指向を利用して行うプログラミングが主流となっています。
オブジェクト指向にまつわる用語の意味
オブジェクト指向で出てくる代表的な用語は、「クラス」「カプセル化」「継承」「ポリモーフィズム」などです。オブジェクト指向について理解を深めるため、これら4つの用語の意味を押さえておきましょう。
クラス
オブジェクト指向で言うクラスとは、設計図のこと。モノ(オブジェクト)を作るための基礎となるものです。具体的に言うと、クラスで定義するのは、オブジェクトがどんなことをするのか、どんなことを覚えておくのか、といった事柄です。
作りたいオブジェクトが「ポチ」という名前の犬型ロボットだとすると、クラスで定義するのは「吠える」「座る」「眠る」などの動作に加え、「ポチ」という名前を記憶しておくこと、となります。
オブジェクトは指示がなければ自分で動けませんので、クラスを設定し「オブジェクトが何をするのか」を最初に決めておくのが肝心なのです。
カプセル化
カプセル化とは、モノを単純な形にして抽象化すること。オブジェクトの中には、様々な処理が入っていますが、その一つ一つを全ての人が理解して利用するのは非常に難しいことです。例えば時計。時計の中には様々な部品が入っていますが、私たちはボタンを何回か押すだけで時計の針を操作できます。
しかし時計の中の部品が全部操作できるようになっていて、時計の設定を自分で一からするのは大変です。カプセル化は、このように複雑な処理をまとめ、抽象化することで分かりやすいものを作る作業のことだと言えます。
継承
オブジェクト指向で言う「継承」とは、クラス(オブジェクトの設計図のこと)定義に共通している部分を別のクラスとしてまとめる仕組みのこと。具体的に言うと、すでにあるクラス(スーパークラス、親クラスと言います)から、新しく作ったクラス(サブクラスと言います)に移す作業のことを言います。
イメージでいうと、ゲームでいうセーブデータ引継ぎに近い概念かもしれませんね。もちろん継承を使わず、新しいクラスを作ることもできます。しかしすでにあるオブジェクトAに近いクラスを新たに作る際、一から作り直しをする必要がないので継承を使うメリットは大きいと言えるでしょう。
ポリモーフィズム
ポリモーフィズムとは、オブジェクト指向の性質の一つです。具体的に言うと、様々なクラスの動き方を、同じ方法で指示できるようになること。
例えばキャラクターAとキャラクターBがいたとして、バトルシーンではAは手、Bは足を使って敵と戦う動きをするとします。ポリモーフィズムなしではそれぞれのクラスごとに「手を動かす」「足を動かす」と指示を変える必要がありますが、ポリモーフィズムがあれば「戦う」という指示だけでそれぞれのギャラクターが行動してくれます。
ポリモーフィズムを利用すると指示が少なくて済むので、処理を簡略化できるようになるのです。
オブジェクト指向のメリット
- プログラミングの書き換えが楽
- 認識を共有しやすい
ここまでオブジェクト指向や用語の基本について解説してきましたが、「オブジェクト指向を知る意味ってあるの?」と感じている方もいるでしょう。
しかしオブジェクト指向を理解することで、得られるメリットはたくさんあります。ここからは「なぜオブジェクト指向が便利なのか」という点に着目しつつ、オブジェクト指向のメリットについて解説していきます。
オブジェクト指向のメリット①プログラミングの書き換えが楽
例えば、プログラミングを使いボタンを押すと「おはよう」という文字がweb上で打たれるプログラムを作る場合、オブジェクト型を使わず「手続き型」という方法を使うと
1:ボタンが押されたことを感知する
2:ボタンが感知されたら、「おはよう」という文字を打つ
3:「おはよう」という文字を画面上に表示する
といった内容でプログラムを書くことになります。一方、オブジェクト指向の場合、
1:押されたことを感知する役割のもの
2:「おはよう」という文字を打つ役割のもの
3:文字を画面上に表示するもの
4:1~3のものに指示を出す役割のモノ
と4つのものに分けて考えます。実際に行う手順は同じですが、もし「おはよう」という文字を「こんにちは」に変更したい場合、「手続き型」では2番目と3番目の手順で書き換えが必要ですが、オブジェクト型の場合「おはよう」という文字を打つ役割のもの、だけ変更すれば済みます。
後々変更する可能性があるプログラムであれば、オブジェクト指向で作っておいた方が良いのです。
オブジェクト指向のメリット②認識を共有しやすい
「AをしたらBをして、BをしたらCをする。Cをしたら…」といった手続き型のプログラムでは、他の人と話す際どこから話していいか分からなくなってしまい、プログラムが長いほど認識の共有が難しくなってしまいます。
一方オブジェクト指向では「○○という役割のモノ」単位で話せます。「オブジェクト指向のやり方とは?」で紹介したポーカーの例だと、「プレイヤーが掛けられるお金を100円増やしたい」「デューラーがカードを配る動きを逆にしたい」など、自分の希望を明確に伝えられます。
特に大人数で協力する大きなプロジェクトでは、オブジェクト指向を使い情報を共有することが非常に大切になるのです。
オブジェクト指向のデメリット
一見いいことづくめのオブジェクト指向ですが、いくつかデメリットも存在しています。オブジェクト指向について知るため、初心者の方はぜひチェックしてくださいね。
- 完璧に理解するのが難しい
- コードが複雑になってしまう
オブジェクト指向のデメリット①完璧に理解するのが難しい
ここまでオブジェクト指向について説明してきましたが、「いまいちよく分からないな」「実際のプログラミングでどう生かすのか見えない」と悩んでいる方も多いでしょう。特に初心者にとってこのオブジェクト指向は分かりづらく、実際に仕事でプログラミングを始めてもなかなか理解できないこともあります。
きちんと指導してくれる人さえがいれば、オブジェクト指向がよく分からなくても何とか仕事は成り立つでしょう。しかし「10年くらいプログラミングをやっていてもオブジェクト指向がよく分からない…」、という人もいますので、オブジェクト指向を使いこなすにはかなりの経験と勉強が必要だと言えます。
また初学者がオブジェクト指向で挫折してしまい、プログラミングの勉強を進められないケースもあるでしょう。
オブジェクト指向のデメリット②コードが複雑になってしまう
プログラミングのコードを書くなら、なるべく簡単で分かりやすい方が有難いですよね。しかしオブジェクト指向でコードを書くと、クラス別に処理をする必要がありますので、クラスを細かく分けてしまうと「AのクラスとBのクラスでほとんど同じ処理をしている」といった事態になります。
もしオブジェクト指向を使わない場合は、クラス別に処理する必要がないため、まったく同じコードであれば関数で共通にすることもできます。
一方どれだけ共通の処理であっても、オブジェクト指向で定義された設計図は共通化できないので、コードが無駄に長くなったり、複雑になったりすることも少なくありません。もちろん冗長なコードにならないよう、対処する方法もありますがその方法をチーム全体で共有するのは難しいでしょう。
オブジェクト指向を理解するには
オブジェクト指向を完全に理解するのは非常に難しいですが、プログラミングをするうえで少しでも理解を進めておくことは非常に重要です。
「オブジェクト指向についてもっと理解したい」という方はオブジェクト指向に関する書籍を読んで勉強してみるのがおすすめ。また、会社でプログラミングをやっているのなら頼れる先輩や上司に聞いてみるのもよいでしょう。
オブジェクト指向の勉強をするときは「完全に理解しなきゃダメだ」と自分を追い込む必要はありません。オブジェクト指向は非常に難しい考え方。「なんかよく分からないなあ」と感じつつ働いている人もいますので、「なんとなく理解できたかも」という体験を繰り返し、自分なりに正しい知識を身に着けていってくださいね。
まとめ
- オブジェクト指向とは、プログラミングの対象となる手順を一つの「モノ」として捉える手法のこと
- メリットはプログラムの運用がしやすくなる。
- デメリットはコードが複雑化し難しくなる可能性がある。
オブジェクト指向を完全に理解するには、長い時間がかかるかもしれません。しかし現在多くのプログラムがオブジェクト指向で作られている以上、自分なりに少しずつ理解をしていくことが大切です。
オブジェクト指向に悩んだ際は本を読んで勉強したり、詳しい先輩に聞くなどしてに勉強を続けていきましょう。
\ IT転職のプロが無料でサポート! /
あわせて読みたい関連記事
この記事を読んでいる人におすすめの記事