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