できるだけ分かりやすくオブジェクト指向について解説していくよ。
目次
オブジェクトとは
オブジェクトとは、プログラムに存在するもの全てのことです。
例えばサインインのために入力された「アカウント名」や「パスワード」・それらを処理して出された結果のデータ・(これから出てきますが)クラスとインスタンス、これら全てがオブジェクトです。
プログラムには、データのオブジェクトとそのデータを処理するメソッドの2種類しかありません。
オブジェクト指向とは
オブジェクト指向とは、データ処理(オブジェクトとメソッド)のまとまりを細かく分ける考え方のことです。
データ処理を細かく分けることで、プログラムのコードを読みやすく管理や修正が容易になります。
また、プログラム設計も容易になり、開発を効率化できるメリットがあります。
プログラミングスクールや学習サイトでは、”モノ”に例えるとよく言われますが、実際にプログラムを書いていくと分からなくなってしまいます。
12本と少し長い動画(Javaで説明)ですが、以下の動画が分かりやすくおすすめです。
私は勉強し始めたときに見ましたが、よくわかりませんでした。
しかし、実際にプログラムを書いているときに見直してみると「なるほどな」と納得しました。
オブジェクト指向で作成したプログラムの特徴
オブジェクト指向で作成したプログラムには3つの特徴があります。
1つ目は独立性です。
システムを構築していくと各プログラムが干渉して、1つの仕様を変更したら、他のプログラムにエラーが生じる「エラーの連鎖」のようなものが起きます。
まさにこのツイートのような状態です。
クソコード動画「共通化の罠」 pic.twitter.com/MM750CNXc2
— ミノ駆動 (@MinoDriven) 2019年5月12日
オブジェクト指向で作成したプログラムは独立性が高くなります。
2つ目は再現性です。
再現性とは、様々なプログラムの構築に利用(再利用)できるプログラムの事です。
つまり、共通部分を抜き出し、他のアプリケーションでも使える汎用性の高い要素を多く持っているプログラム作成できます。
3つ目は拡張性の高さです。
仕様の変更・追加・削除に柔軟に対応できるプログラムの事です。
classとは
classとは、1つの「仕様 /(働き)」ごとに分けたプログラムのことです。
classでまとめるメリットは、1つの仕様ごとに分けてあるため、バグが発生した時に被害を最小限に抑えることができます。
また、コードが短くなるため、どこに何のプログラムがあるか把握しやすくなります。
classの役割
classには、大まかに3つの役割があります。
1つ目は、隠す役割です。
アプリケーションの設計でMVCモデルがあります。
MVCはModel(データの処理・保存)・View(見た目)・Controller(ModelとViewのデータの受け渡し)の略です。
ユーザーが見れるのはViewのみで、内部の重要なコードやデータベースへのアクセスを防ぐ事ができます。
2つ目が性能の向上です。
各classで、得意な仕事に分けられているため、1つの処理を行うのに無駄な処理を一切しません。
これにより、1つ1つのプログラムが高いパフォーマンスを発揮する事ができるのです。
3つ目が量産です。
多くのアプリケーションの共通部分をまとめて雛形にしているため、様々なアプリケーションを量産する事が可能です。
classは設計図
クラスは設計図に例える事ができます。
車を作る時、1台1台を白紙の状態から設計していったら、時間がいくらあっても足りません。
そこで、「タイヤが4つ付いている」「右にハンドルを回したら右に回る」など、共通している部分を抽出し、まとめた設計図を作る事で効率をあげることが出来ます。
この設計図が「class」です。
実際にプログラムを開発する時も、設計図を作ってから始めます。
この考え方のメリットは「完成品=設計図」であるため、計画を立てやすく、何が必要か分かりやすいことです。
また、上記でも説明してあるように共通部分を抽出しているため、再現性が非常に高いです。
オブジェクト指向の基本構造
オブジェクト指向でプログラムを構築する時、どのような構造になるか解説します。
まず車(class)を例にコードで書くと
Ruby サンプル
car = Car.new
となります。
- car・・・インスタンス(完成品)
- Car.new・・・Carがクラス、newがメソッド(設計図から車を作れ)
「設計図に車を作れとメッセージを送り車が完成」という意味です。
補足ですが、プログラミングの「=」は等しいという意味ではなく、右辺のものを左辺に移動することを表しています。
クラスとインスタンスの関係
インスタンス化は「Car.new(クラス.メッセージ)」の事です。
まとめ
プログラムの処理のまとまりを小さくすることで、バグが発生した時の被害を最小に抑えたり、プログラムを再利用しやすいなどメリットがたくさんあります。
あと、Classはプログラムの設計図のようなもので、処理のまとまりです。
ここは、他のサイトでも解説しているような実際のものを作るイメージで考えると理解しやすいですね。
このサイトが分かりやすくおススメです。
【図解】「オブジェクト指向とは何か」をカレー作りに例えて分かりやすく解説! | ワカテク【犬でもわかるITテクノロジー用語集】
実際に私もプログラミングスクールに通ってエンジニアになりました。
興味がある方は、こちらの記事をご覧ください。