初心者にもわかる!? クラスとオブジェクト指向の基礎
はじめに
みなさん、初めまして。エンジニア歴1.5年のエンジニアです。
最近、後輩からプログラミングの基礎的な質問をよく受けるようになりました。
「オブジェクト指向ってなに?」
「クラスってなんだよ?」
こういった質問に対して、分かりやすく説明できるよう自分なりにまとめようと思います。
では、レッツスタート!
オブジェクト指向プログラミング(OOP)
オブジェクト指向プログラミング(OOP)は、効率的で再利用可能なコードを書くことを目的としています。
まずは、OOPの基本である「クラス」について説明していきますね。
クラスとは?
クラスは、オブジェクトの設計図とよく言われます。
「設計図? なんやねんそれ」と思った方、落ち着いてください。
私たちは日常的に、人間を表現することがあります。
例えば、友人や家族の情報を他人に説明したり、新入社員の紹介文を書いたりする際です。
そんな時、クラスが役に立ちます。
クラスの中には、人間を表現するための項目(プロパティ)と、人間らしい動作(メソッド)が書かれています。
プロパティとは、オブジェクトの状態を表す値のことです。
人間なら名前や年齢、出身地といった情報がプロパティになります。
一方、メソッドとは、オブジェクトの振る舞いを表すものです。
人間なら挨拶したり自己紹介したり、趣味を話すような動作がメソッドに相当します。
このプロパティとメソッドを組み合わせて、クラス(設計図)を作ります。そしてそのクラスからオブジェクト(実体)を作成できます。
具体例を見てみましょう。あなたの会社に、Aさんという人がいるとしましょう。
例
Aさんは、いつもプログラミングに夢中で人の話は聞きません。
仕事が終わるといつもお酒を飲みに行くようです。
Aさんのプロフィールを表現する
class Person {
// プロパティ(オブジェクトの状態)
public $name;
public $birthPlace;
public $job;
public $hobby;
public $favoriteFood;
// コンストラクタ(インスタンス化時にプロパティを設定)
public function __construct($name, $birthPlace, $job, $hobby, $favoriteFood) {
$this->name = $name;
$this->birthPlace = $birthPlace;
$this->job = $job;
$this->hobby = $hobby;
$this->favoriteFood = $favoriteFood;
}
// メソッド(オブジェクトの振る舞い)
public function introduce() {
return "こんにちは、" . $this->name . "です。出身地は" . $this->birthPlace . "。職業は" . $this->job . "で、趣味は" . $this->hobby . "です。好きな食べ物は" . $this->favoriteFood . "です。";
}
}
// Personクラスのインスタンスを作成し、プロパティを設定
$person_a = new Person("A", "北海道", "エンジニア", "飲酒", "鮭とば");
// introduceメソッドを呼び出し
echo $person_a->introduce();
// 出力: こんにちは、Aです。出身地は北海道。職業はエンジニアで、趣味は飲酒です。好きな食べ物は鮭とばです。
なんとここで、新入社員のBさんも入社することになりました。
Bさんはガジェット狂で、最新のガジェットを手に入れると夜通し遊んでしまうそうです。
Bさんのプロフィールを表現する
$person_b = new Person("B", "大分県", "デザイナー", "ガジェット", "ラーメン");
echo $person_b->introduce();
// 出力: こんにちは、Bです。出身地は大分県。職業はデザイナーで、趣味はガジェットです。好きな食べ物はラーメンです。
このように、Personクラスを作成し、その中にAさんやBさんの情報を設定することで、簡単にオブジェクトとして表現できます。
そして、この設計図があれば何人分でも同様に表現することができます。
つまり、クラスを使えば何個でも新しいオブジェクトを作れるということですね。
クラスはこのように、モノを表現する際の設計図として活用できます。
さて、Aさん、Bさん、早く仕事終わらせて飲みに行きましょうか。
終わりに
続編に乞うご期待。
※登場人物はフィクションです(?)
Discussion