プログラミングの開発手法である「オブジェクト指向プログラミング」
ですが、PHPの初心者にとってオブジェクト指向の概念は分かりづらいですよね。
そこで今回はPHP初心者に向けて、
・そもそもオブジェクト志向って何?
・オブジェクト指向で作るメリットは?
を紹介します。
PHP初心者がつまづきやすいポイントを分かりやすく解説します。
オブジェクト指向っていまいち分からない方は、ぜひ最後まで読んで理解を深めてくださいね。
オブジェクト指向とは?
まずは、オブジェクト指向の概念から理解しましょう。
一言で表すなら、
変数(プロパティ)と関数(メソッド)を持ったクラスを作るプログラミングの手法
です。
これだけだと分かりづらいと思うので、動物に例えて説明してみましょう。
ここにペンギンがいるとします。
ペンギンには「名前」や「体重」などの情報があります。これらが「プロパティ」です。
また、ペンギンは「歩く」「食べる」などの行動をします。これらが「メソッド」です。
つまり、ペンギンとは「プロパティ」と「メソッド」を持った「クラス」と見ることができます。
これをPHPで表すと、
1 2 3 4 5 6 7 |
class Penguin{ //ペンギンクラス public $name; //名前 public $weight; //体重 public function eat(){ //食べる } } |
このように表すことができます。
クラスとインスタンス、オブジェクト
次に、個々のペンギンについて考えてみましょう。
ここに「ペン太」と「ペン子」というペンギンがいたとします。
どちらも「ペンギン」ではありますが、別々の個体です。
そこで、この2匹を区別するのに使うのが「インスタンス」です。
作られたインスタンスには、個々の「プロパティ」を設定することができます。今回は名前をつけてあげましょう。
1 2 3 4 5 6 7 |
$penta = new Penguin(); $penta -> name = "ペン太"; $penko = new Penguin(); $penko -> name = "ペン子"; |
これで「ペン太」と「ペン子」を区別することができました。
ここで、「クラス」「インスタンス」「オブジェクト」の関係について理解をしましょう。
クラス:プロパティとメソッドを持つもの
例)ペンギンとは何か?オブジェクト:クラスの仕様をもとに作られるもの
例)ペンギン全般インスタンス:クラスから作られたオブジェクト
例)ペン太やペン子
つまり、
「ペン太」や「ペン子」のインスタンスは、「Penguin」クラスから作られた、「ペンギン」というオブジェクト
ということができます。
メソッドとは?
メソッドとは、そのクラスが持つ機能と言えます。ペンギンの例で言えば、「食べる」という機能です。
例えば1回の食事で体重が0.5kg増えるとすると、
1 2 3 4 5 6 7 8 |
class Penguin{ //ペンギンクラス public $name; //名前 public $weight; //体重 public function eat(){ //食べる $this -> weight = $this -> weight + 0.5; //食事をすると体重が0.5kg増える } } |
このように書くことができます。
ここで、「ペン太」が1回食事をしたとすると、
1 2 3 4 5 6 7 8 9 10 |
$penta = new Penguin(); $penta -> name = "ペン太"; $penta -> weight = 15; var_dump($penta -> weight); //15 $penta -> eat(); var_dump($penta -> weight); //15.5 |
ペン太の体重が15kgから15.5kgに増えたのが分かります。
なぜオブジェクト指向で作るのか?
オブジェクト指向について、基本的な概念は理解できたでしょうか?
初めての方には、
なんでこんな面倒な書き方をするんだろう?
と思う方もいると思います。
では、そもそも「なぜオブジェクト指向で書くのか」を考えてみましょう。
オブジェクト指向で書く最大のメリットは、保守性の高さです。
先ほどの、「食べる」というメソッドについて考えてみましょう。
先ほどまではペンギンしかいませんでしたが、ここにイルカが増えたとします。
オブジェクト指向で書いている場合、「食べる」というメソッドは各クラスに紐づいています。つまり、
- ・ペンギンもイルカも「食べる」というメソッドは同じで、中身の処理が違う
(使うメソッドは「eat」で共通化できる)
ということを簡単に実現することができます。
オブジェクト指向と使っていない場合、
- ・ペンギンが「食べる」処理:function eatOfPenguin()
- ・イルカが「食べる」処理: function eatOfDolphin()
を別々に作らないといけなくなります。
ではライオンやキリン、ゾウが増えた場合どうなるでしょう?
動物の種類が増えれば増えるほど、処理が複雑になっていくのが想像できると思います。
まとめ
今回はオブジェクト指向について、
・オブジェクト指向とは何か?
・クラス、インスタンス、オブジェクトの関係
・メソッドの使い方
・オブジェクト指向のメリット
を解説しました。
オブジェクト指向は概念を理解するのが難しいですのが、しっかりと理解できるようにしておきましょう