C言語、PHP、Pythonなどでも採用されているオブジェクト指向についてまとめてみます。
一応私がPHPのエンジニアなのでPHPにおけるオブジェクト指向の解説です。
オブジェクト指向とは
「ある役割を持ったモノ」ごとにクラス(プログラム全体の設計図)を分割し、モノとモノとの関係性を定義していくことでシステムを作り上げようとするシステム構成の考え方のことです。
オブジェクトは「モノ」を意味します。
冒頭にも軽く触れましたがオブジェクト指向はPHPに限らないプログラミングの手法です。
オブジェクト指向の基本用語5つ
ざっくりですがオブジェクト指向の基本用語を5つ解説して行きます。
オブジェクト(モノ)
プログラミングにおいてはデータと処理の集まりを意味しています。
クラス(設計書)
変数と関数でできた共通機能の集まりを言います。いわゆる、データと処理を一つにまとめる機能です。
クラス内で定義する変数はプロパティ、関数はメソッドと呼ばれます。
クラス内に記述したプログラムを実行するにはインスタンスに変更する必要があります。
プロパティ(データ)
クラスの中で定義された「変数」のことをプロパティと呼びます。オブジェクトが持つデータ・オブジェクトを表す状態のものもあります。
メソッド(処理)
クラスに所属する関数のようなもの。オブジェクトが持っている処理のことを指します。
インスタンス
クラスを個別具体的に実体化したものを言います。設計書にあるクラスを利用して、実際に「オブジェクト」を作成したものを指します。
クラスからインスタンスを作ることをインスタンス化といいます。一つのクラスからインスタンスを複数作ることも可能です。
オブジェクト指向を図で解説
文字で説明されても想像しにくいと思うので、図で解説していきます!
枠で囲んであるものは全て「オブジェクト」です!
「ランクルプラド」というインスタンス(オブジェクト)を作るために「エンジン(クラス)」と「ランクルプラド(クラス)」を組み合わせてインスタンス化します。
「ハイエース」というインスタンス(オブジェクト)を作るために「エンジン(クラス)」と「ハイエース(クラス)」を組み合わせてインスタンス化します。
このようにオブジェクト指向は、「プロパティ(データ)」と「メソッド(処理)」を一つにまとめたオブジェクトの定義ごとにクラスを分類し、クラス同士を組み合わせてシステムを組み立てる、システム設計やコーディングにおける考え方です。
オブジェクト指向の三原則
継承
クラスをコピーして拡張することを言います。
同じようなコードをまとめて再利用性を高め、すでに作られているクラスを元に、新しいオブジェクトを作るのに利用します。
カプセル化
プログラムをまとめることで中身を隠し、外の影響を受けないようにすることです。
保護したプログラムをカプセル化することで、外からのアクセスや他のプログラムからの干渉を防ぐことができます。
ポリモーフィズム
「モノ」特有の動きを可能にする概念のことで、多様性などの意味を持ちます。
同じメソッドを複数のクラスで利用して、その動作が異なることを指したりします。
オブジェクト指向のメリット・デメリット
メリット
ライブラリ開発や複数人での開発に向いている
⇨分業がしやすくなる
大規模になってきてもメンテナンスがしやすい(修正や変更が簡単)
効率的な開発を行えるようになる
⇨同じような「もの」を作りたいときに、元のコードを再利用できるため一からプログラムをする必要がありません
デメリット
コードが複雑になる(既存のコードの理解が必要)
明確な答えがないため、理解するまでに時間がかかる
まとめ
オブジェクト指向とはプログラミングを「モノ」として捉える概念のことを指します。
参考になれば嬉しいです。
コメント