【プログラム初心者必見】誰でも分かるオブジェクト指向についてのお話

電子工作・プログラミング

こんにちは、しがなです!

プログラミングの勉強し始めたけどオブジェクト指向が理解できん。

というように、プログラミングを学び始めた人にとってオブジェクト指向という概念はなかなか理解がしづらいものですよね。

かく言う筆者も、最初は意味不明すぎてオブジェクト指向について理解しないままプログラミングの勉強をしていました…

しかし、プログラミングを学ぶ上でオブジェクト指向は避けては通れない道であり、読者の皆さんには、それがなんなのか理解してプログラミングを学んでいってほしいです!

そこで今回は、大学や研究でプログラミングを4年間学んできた筆者が、オブジェクト指向について分かりやすく説明していこうと思います!

はじめに

初心者の方がオブジェクト指向を理解するのになぜつまずいてしまうかというと、

オブジェクト指向が考え方や概念といったイメージがしにくいもの

であるからです。

なので、オブジェクト指向を理解するときは完璧に理解しようとするのではなく、ざっくりこんな感じなのかなと雰囲気で理解するようにしましょう。

あとはプログラミングについて学んでいくうちに、自分の中で説明は難しいけどこういうものだという理解が深まっていきますよ。

それでは本題のオブジェクト指向とはなんなのかについて説明していきたいと思います!

オブジェクト指向とは?

オブジェクト指向とは、コンピュータプログラムの設計や実装についての考え方の一つで、互いに密接に関連するデータと手続き(処理手順)をオブジェクト(object)と呼ばれる一つのまとまりとして定義し、様々なオブジェクトを組み合わせて関連性や相互作用を記述していくことによりシステム全体を構築していく手法。
出典:IT用語辞典|オブジェクト指向

つまりどういうこと?

他のサイトでこのように説明されていることが多いんですが、正直何を言っているかよくわかんないですよね。

前提として知っておいてほしいこととして、

オブジェクト指向とは、「開発を行うためにどのようにプログラミングをしたら効率が良くなるかを追求した考え方」のことです。

プログラミングをしていく上で、プログラムが分かりやすく使いやすいというのは非常に効率が良さそうですよね。

さて、オブジェクト指向はその名の通り、オブジェクト(モノ)が重要であり、モノ同士の関係性を構築していく考え方なんですが、その構築する過程のことを「設計」と言います。

設計とは、皆さんが普段聞くような何かを開発する上での設計と同じで、これがないと簡単で効率が良い開発を行えません。

設計を行わないと、後に修正や不具合が生じ開発に支障が出ます。

そして設計をする上で気をつけなければならないこととして以下の事が挙げられます。

・モノの定義や振る舞いが明確か?
・利用者が増えても理解しやすく、拡張性が高いか?
・ほかのモノとの関係性でバランスが崩れないか
→バラバラに考えることができているかという観点で設計して行く必要がある。

また、この設計をする際に、「カプセル化」、「継承」、「ポリモーフィズム」という3つの要素の理解が大事になってきます。

それでは、オブジェクト指向におけるこれらの3つの要素がなんなのかについて見ていきましょう!

3つの重要な考え方

カプセル化

カプセル化とは、他のプログラムから影響をできるだけ受けないように作る考え方のことです。

例えば、自動車のプログラムを作った時に船のプログラムの影響を受けて、動作の邪魔をしあったら問題ありですよね?

なので、一つ一つのプログラムをカプセルのように分けて作るようにしましょうというのがカプセル化です。

継承

継承とは、同じようなプログラムを引き継いで使う考え方です。

例を挙げて説明をすると、自動車には救急車や消防車、トラック、レーシングカーなど色々な種類がありますよね?
これらを別々の物として作っていくよりも、自動車という共通部分があるベースから派生させて、種類を増やしていく方が楽ですよね?

また、似たようなプログラムを複数作成した場合、一つのプログラムを改良したり修正したりすると、他の似たようなプログラムも全てに変更を施さなければなりません。

継承という考え方を使っていくことで、同じ機能を簡単に実装し変更も時間がかからずできるのです。

ポリモーフィズム

ポリモーフィズム(多様性)とは、汎用的な形で扱えるようにしようという考え方です。

継承の説明で、自動車の例えで共通部分があるベースから派生させていくと言いましたが、これに非常に近い考え方ですね。

同じ自動車というくくりでベースは同じだけど、救急車には救急車の機能、消防車には消防車の機能があるように汎用的な形に利用できるようにしようという考え方のことを言います。

おわりに

いかがでしたでしょうか?

オブジェクト指向の理解は、プログラミング初学者にとってはかなり難しいと思います。

私も最近やっと理解できたところです(笑)

なので、今完全に理解できなくとも、ざっくりこんな感じかと軽く理解することで、プログラミングを学んでいくうちに理解が深まっていくことでしょう!

焦らず一つ一つ積み上げていきましょうね。

以上、オブジェクト指向についてのお話しでした!

コメント

  1. 名無し より:

    数回に分けても良いぐらいの内容をとてもわかりやすくまとめられていてためになります。
    なぜオブジェクト指向を用いるのか(プログラムの歴史と比較して等)や、今回書かれている独立性、再利用性、拡張性それぞれプログラム例をつけて目的、手法、利点をより具体的に記事にしても面白いかなと思います。
    毎日投稿をされているのであればクイズを加えて翌日の記事で正解発表などもおもしろいかもしれませんね。
    筆者の狙っているターゲット層に合ってない意見でしたらすいません。

    • しがな より:

      非常にタメになるコメントをありがとうございます!
      オブジェクト指向を用いる理由やプログラム例などの内容があると、たしかにより分かりやすくなりますね。
      また、毎日投稿を利用してクイズをするというアイデアはかなりおもしろいなと思いました!
      今回の意見をぜひ参考にさせていただき、より良いコンテンツ作りに応用させていただきます。