見出し画像

オブジェクト指向とは何なのか??1から説明してみました!

最近、オブジェクト指向に関して説明する機会がありましたので、改めてインプットしたことを載せておきます。

オブジェクト指向って何?って思うかもしれませんが、これはプログラムを「オブジェクト」っていう単位に分けて考える方法です。
オブジェクトは「データ」と「行動」を持っていて、それを組み合わせてプログラムを作ります。
今回は「勇者」を使って、もっと分かりやすく説明しますね。

1. クラス= 勇者の設計図

クラスは、勇者を作るための「設計図」みたいなものです。
この設計図には「名前」「レベル」「体力」とか、勇者が持ってる情報が書いてあります。また、「攻撃する」「回復する」といった勇者の行動も書かれてます。


例え:

設計図があれば、何人でも勇者を作れます。例えば「satou」って勇者を作って、そのあとに「tanaka」って勇者も同じ設計図から作ることができるんです。もしこの設計図がなかったら、毎回ゼロから作るのは大変ですよね。

class Hero {
  String name;
  int level;
  int health;

  Hero(String name, int level, int health) {
    this.name = name;
    this.level = level;
    this.health = health;
  }

  void attack() {
    System.out.println(name + "は攻撃した!");
  }
}

2. オブジェクト = 実際の勇者キャラ

クラスを元に作られる「実際の勇者」がオブジェクトです。
クラスが設計図だとしたら、オブジェクトはその設計図から生まれた「実際のキャラクター」ですね。


例え:

「satou」という名前の勇者を作ると、それがオブジェクトです。そして、同じ設計図を使って別の勇者「tanaka」を作ると、それも別のオブジェクトになります。どっちも設計図から作られているけど、それぞれ独立して動きます。

Hero hero1 = new Hero("アレックス", 10, 100);
hero1.attack(); // アレックスは攻撃した!

3. 継承 = 勇者のスペシャルバージョン

継承は、基本的な「勇者クラス」から少し進化させて新しい勇者を作ることです。例えば「魔法使い勇者クラス」を作って、魔法が使える特別な勇者を作ります。


例え:

普通の勇者は剣で戦いますが、「魔法使い勇者」は剣に加えて魔法も使える感じです。基本の勇者の能力(レベルや体力)はそのまま使って、ちょっとだけパワーアップさせたバージョンですね。

class WizardHero extends Hero {
  int mana;

  WizardHero(String name, int level, int health, int mana) {
    super(name, level, health);  // 親クラス(Hero)の部分を引き継ぐ
    this.mana = mana;
  }

  void castSpell() {
    System.out.println(name + "は魔法を使った!");
  }
}
WizardHero wizard = new WizardHero("メイ", 12, 90, 50);
wizard.attack();   // メイは攻撃した!
wizard.castSpell(); // メイは魔法を使った!

4. カプセル化 = 勇者の体力を守る

カプセル化は、オブジェクトの大事なデータ(例えば体力とか)を外から勝手に変えられないようにする仕組みです。これによって、勇者が壊されないように守られます。

例え:

例えば、他のキャラが勝手に「佐藤の体力をゼロにしちゃおう!」なんてことができないように、体力には鍵をかけて守ります。これで変なことが起きないようにしてるんですね。

class Hero {
  private int health;  // 外から直接いじれない

  public int getHealth() {
    return health;
  }

  public void setHealth(int health) {
    if (health > 0) {
      this.health = health;
    }
  }
}

5. ポリモーフィズム = 勇者ごとに違う攻撃の仕方

ポリモーフィズムは、勇者が同じ「攻撃する」というメソッドを持っていても、その攻撃方法がキャラごとに違うということです。


例え:

佐藤は剣で攻撃するけど、田中は魔法で攻撃します。どちらも「攻撃する」という行動は同じですが、やり方が違います。これがポリモーフィズムです。

Hero hero1 = new Hero("アレックス", 10, 100);
WizardHero wizard = new WizardHero("メイ", 12, 90, 50);

hero1.attack();   // アレックスは剣で攻撃した!
wizard.attack();  // メイは魔法で攻撃した!(でも両方「攻撃する」メソッド)

まとめ


クラスは、勇者を作るための「設計図」です。これがないと勇者を作れません。
オブジェクトは、その設計図から作られた「実際の勇者キャラ」です。アレックスやメイがそのオブジェクトです。
継承は、普通の勇者を元に「魔法使い勇者」といった特別なバージョンを作る仕組みです。
カプセル化は、勇者の大事なデータ(体力など)を守って、勝手にいじられないようにすることです。
ポリモーフィズムは、同じ「攻撃する」行動でも勇者ごとに違うやり方でできることです。

この記事が気に入ったらサポートをしてみませんか?