Create Branch

インスタンスについて

Published on 2024年12月1日

つぶやき

背景

インスタンスを用いた実装を行う際、意識してインスタンスを使用したことがなかった。
1つの処理を通して、値の保持をどうするか考え、グローバル変数に持たせてて値を管理していいた。
その実装内容に対して、レビュー時にいただいた指摘内容で理解していないことに気づいたため、改めて実装を振り返ろうとし考えた

インスタンスとは?

クラスとオブジェクトという概念として分けると解釈してます。

「クラス」はよく説明で「設計図」として例えられていますが、私自身はうまくイメージができませんでした。
「クラス」とは、「1つの概念(もの・こと)において、共通して行える動作をまとめたもの」、「インスタンス」とは共通した動作を行える実態を持ったもの、という認識でイメージが大部しやすく足りました。

例えば「車」という概念では:

  • 共通の動作(クラス):走る、止まる
  • 個別の属性(インスタンス):車種名、ブランド

インスタンスの実装について

  1. インスタンスの値保持の説明:

    • 各インスタンス($A、$B、$C)は、独立した値を保持できます
  2. 例えば以下のように、それぞれの車に異なる情報を設定できます:

class Car {
    private $driver;
    private $passengers;
    private $luggage;

// セッターメソッド
    public function setDriver($driver) {
        $this->driver = $driver;
    }

    public function setPassengers($passengers) {
        $this->passengers = $passengers;
    }

    public function setLuggage($luggage) {
        $this->luggage = $luggage;
    }
}

// インスタンスごとに異なる値を設定
$A = new Car();
$A->setDriver("田中");
$A->setPassengers(["佐藤", "鈴木"]);

$B = new Car();
$B->setDriver("山田");
$B->setPassengers(["伊藤"]);

$C = new Car();
$C->setDriver("高橋");
$C->setPassengers(["渡辺", "小林", "加藤"]);

// 配列で管理し、一括処理が可能
$cars = [$A, $B, $C];

foreach ($cars as $car) {
// 各車の処理を実行
    $car->run();
}


このように、各インスタンスは:

  1. 同じクラスから作られても、それぞれ異なる値を保持できる
  2. 異なったデータを保持している同種類のオブジェクトを作成することができる。

これにより、複数の車の情報を個別に管理しながら、同じメソッドで一括処理することができます。

まとめ

実装をする際、さまざまなファイルに値を渡す必要があると、実装の影響範囲はとても大きいものとなります。
その時に、インスタンスと用いることで値の保持をして、コンストラクタを用いて値をインスタンスを渡してあげることで影響範囲を明確にすることもでき、値を保持したまま共有することも可能です。

hirotobeat