初心者向け学習方法一覧はこちら
この記事では、オブジェクト指向について解説します。
オブジェクト指向とは
オブジェクト指向とは、プログラムを1つのまとまりのオブジェクト(物または対象)として扱い、オブジェクト同士の組み合わせを定義しようとする考え方・設計思想のことを指します。
プログラミングする上で、オブジェクト指向について知っておく必要はありますが、プログラミング言語に触れる前から完璧に理解しようとするのは、ハードルは高いように思います。
なぜなら、プログラミング言語を書いたり、チームでの開発経験がない状態では、オブジェクト指向のメリット・デメリットをイメージしずらいからです。そして、実際の開発現場でもオブジェクト指向が何かを常日頃から考えているわけではありません。読みやすくてわかりやすいコードを書くための取り組みが、オブジェクト指向の概念に関連しているというような感覚です。
そのため、オブジェクト指向について詳しく理解するには、プログラミング学習を継続しながら、いろんな開発手法、概念に触れ、オブジェクト指向についての知見を深めることをおすすめします。
ここでは、自然とオブジェクト指向に沿った考え方、開発ができるよう、まずは何となく、例え話でイメージできるようにしましょう。
オブジェクト指向でないプログラミング
あなたは何を説明しても、1から手順通りに話さないと理解してくれない人に料理を教えることになりました。
あなたは、調理開始から終了までの使う食材(データ)と手順(プロセス)を全て順番にそって説明する必要があります。手順の中に「包丁で切る」と言う行為が発生するたびに、「包丁で切って」と伝えても説明が通じず、
- 右手で包丁を持つ
- 左手の指先を軽く握り、人差し指と中指の第1関節を曲げ食材につける
- 包丁の刃を食材に切り込み、前に押す、手前に引いて切る
- ↑調理に必要な分量まで繰り返す
と言うような行為を毎回1つずつ説明する必要があります。
これをプログラミングに置き換えると、「包丁で切る」と言う行為を理解できないため、包丁で切る過程のプロセスを毎回、コードとして記載する必要があります。
もし、同じような処理を何度もコードに記載した場合、処理に誤りがあれば、記載した全ての箇所に変更を加える必要性が出てきたり、どの手順で何の処理をしようとしているかを判別するのは困難です。
オブジェクト指向のプログラミング
今度は1度説明したことを、理解してくれる人に料理を教えることになりました。一度包丁の切り方を教えれば、あとは「包丁で切って」と伝えるだけで、調理が進みます。
オブジェクト指向のプログラミングでは、「包丁で切る」と言う行為を1つのオブジェクトとして定義することで、何度も包丁を切るための手続きをプログラミングで書かずに、「包丁で切る」というオブジェクトを繰り返し呼び出す(再利用する)ことができます。
つまり、オブジェクト指向のプログラミングでは、同じデータやプロセスを何度も定義、記載する必要がないため、ソースコードの可読性やメンテナンス性に優れ、大規模なプログラムを書きやすいと言うメリットがあります。
オブジェクト指向の学習に頻出する用語
オブジェクト指向が難しく感じる要因の1つとして、初めて聞いた横文字が並び、説明がが難しいという理由があります。ただし、ここに記載する用語はプログラミング学習で必ず出てくる用語なので、今後の学習が苦しくならないよう理解できるようにしてください。
- クラス
- インスタンス
- メソッド
- クラスメソッド
- インスタンスメソッド
クラス
クラスとは、オブジェクトの設計図のことです。プログラミングはそれ自体がデータを持つわけではなく、データベースや、動作する環境を与えて初めてプログラムが動きます。クラスはあくまでも、こういうデータがきたらこう処理するなどを記載しただけなので設計図と理解するのがわかりやすいです。
インスタンス
インスタンスとは、データを投入して、クラスをもとに作成した実体のことです。ただし、目に見えないのに実体と呼ぶのは違和感があるので、クラスをもとに作られたものがインスタンスだと理解しておいて良いでしょう。
メソッド
メソッドとは、オブジェクト内での特定の処理内容をまとめたプログラムの実行単位のことです。(料理をするレシピの中の「包丁で切る」部分がメソッド)
そして、非常に分かりずらいのですが、クラスに紐づき、クラスから実行できるのがクラスメソッドで、インスタンスに紐付き、インスタンスから実行できるのが、インスタンスメソッドと呼ばれています。
両者の違いはRubyで記載するのであれば、大文字か小文字か、selfをつけるかどうか、newするかどうかなどで違いがわかるのですが、概念レベルで理解する上では、個別のデータをもとに実行するのがインスタンスメソッド、個別のデータを見なくても実行できるのがクラスメソッドと捉えておきましょう。
オブジェクト指向の3つの基本概念
オブジェクト指向の基本概念として、以下の3つがあります。
- 継承
- ポリモーフィズム
- カプセル化
初心者でも分かるように簡略化して説明するので、詳しいことは、オブジェクト指向の理解を深める過程で情報を補ってください。
継承
クラスが別のクラスの性質を引き継ぐことです。親クラスの持つメソッドや変数を子クラスでも再利用できるようになります。
ポリモーフィズム(多態性)
オブジェクトごとに共通する処理をまとめたメソッドを呼び出すと、呼び出し元のオブジェクトにあわせて異なる動作を実現することです。
例を挙げると、処理の内容(鳴くという行為)は共通しているけれども、対象(犬や猫)と鳴き方(わん、にゃー)が異なるような時に、メソッド(鳴く)を共通化することで、オブジェクト(犬、猫)ごとに、異なる動作(わん、にゃー)が実現できるということです。
カプセル化
オブジェクトが他のオブジェクトから干渉されないようにすることです。外部から意図しない操作やデータの書き換えが発生しないように必要な情報や機能のみを提供します。
まとめ
分かりやすくまとめると、重複するコードは再利用したり、共通化することでシンプルにプログラミングできるようにして、プログラミングした処理が不用意に書き換えられないようにするということが、オブジェクト指向の基本原則です。
オブジェクト指向に沿って開発すると、コードテストがしやすいことや、チームでのコミュニケーションが取りやすくなるといったメリットがあります。
開発現場では、チームでのアジャイル開発やテスト駆動開発、ドメイン駆動開発など、オブジェクト指向の概念の良し悪しを理解しつつ、時代にあった開発手法が発展していますので、プログラミグ言語の学習だけではなく、こういった概念や手法についても学んでみてください。
プログラミングスクールの選び方
転職を検討中の方向け
フリーランス・副業で活躍したい方向け
教養・キャリアアップしたい方向け
給付金について詳しく知りたい方向け
学習方法一覧
- オブジェクト指向とは
- オブジェクト指向の学習に頻出する用語
- クラス
- インスタンス
- メソッド
- オブジェクト指向の3つの基本概念
- 継承
- ポリモーフィズム(多態性)
- カプセル化
- まとめ
- プログラミングスクールの選び方
- 学習方法一覧