クラスとオブジェクトの理解(超入門)
まず初めに
新しくアルベに未経験入社し、少しずつ学ぶ上でアウトプットしようと考え、この記事を書きました。
クラスとは
クラスとは設計図です。
設計図の中には、動作をあらわす関数(メソッド)や状態を書くプロパティがあります。
例を出すと、人というクラスを作成すると「歩く」「走る」等の動作を表すのが関数やメソッドと呼ばれる物で、「年齢」「身長」等の状態を表すのがプロパティと言われます。
それらをまとめて書くのがクラスであり、クラスを使用することで何度も同じコードをかいたり、改修する際にどこのコードを変えれば反映されるのかを見やすくすることができます。
オブジェクトとは
上記で作成したクラス(設計図)を元に作られた物をオブジェクトと言います。
オブジェクトは同じクラス(設計図)から複数作られ、それぞれのオブジェクトには作られる際にプロパティや関数に渡す引数を入れてやることでクラス自身は変わらないですが、性格や動きに変化が生まれます。
上記の例を引き継いで書くと、人というクラスに「何分歩く」や「何歳」という引数を受け取れるようにしておいてオブジェクトを作成する際に「10分歩く」「26歳」や「20分歩く」「30歳」と言ったようにクラスを元に作成された物をオブジェクトと言います。
コードで書いてみよう
PHPで書いてみます。
<?php
// クラスの定義(設計書だと表現する決まり文句)
class Person {
// プロパティ(状態を入れておく入れ物)
public $age;
// コンストラクタ(引数で受けとった値を $ageに代入している)
public function __construct($age) {
$this->age = $age;
}
// メソッド
public function walk($minutes) {
echo "I walked for {$minutes} minutes.\n";
}
}
// オブジェクトの作成
$person1 = new Person(26);
$person2 = new Person(30);
// メソッドの呼び出し
$person1->walk(10);
$person2->walk(20);
コンストラクタ __construct(引数) とは、オブジェクトが作成される際に自動的に呼び出され、初期化と生成に必要な初期設定を行うメソッドです。
上記のコードで言うと、$person1 = new Person(26);でオブジェクトが作成された時に__construct($age)の$age部分に26が代入され、$this(今回生成されたオブジェクト)のageに26という情報が入ったということになります。
こうすることで$person1は「26歳」「10分歩く」、$person2は「30歳」「20分歩く」という情報を持ったオブジェクトになりました。
ちなみに
$変数名 = newクラス名([引数,…])
という形はインスタンス化とも言われています。
実際、会社のシステムでは複数のクラスやオブジェクトを作成していく為、この話を理解していないと話についていけなかったりするので、これから目指したい人や迷っている人の参考になればと考えます。
参考
- Laravel-Times Laravelにおけるオブジェクト指向とその使い方 – Laravel-Times
- Zenn 【入門】オブジェクト指向言語とクラス設計の超簡単まとめ (zenn.dev)