はじめてのJavaオブジェクト指向｜クラスとオブジェクトってなに？


## はじめに

Javaを学び始めるとよく聞く「オブジェクト指向」という言葉。  
でも、  
「オブジェクトって何？」  
「クラスってどんな役割？」  
「オブジェクト指向って何が便利なの？」  
と疑問に思う方も多いはず。

この記事では、Javaのオブジェクト指向の基本である「クラス」と「オブジェクト」について、やさしく解説します。  
後半では、簡単なコード例を使って実際にクラスとオブジェクトを使う場面を見ていきましょう！

## 1. オブジェクト指向ってなに？

ざっくり言うと、現実のモノをプログラムの中で表現する考え方です。  
たとえば、現実の「車」には次のような特徴があります。

- 色、スピード、車種 → データ（フィールド）
- 車の車種・性能・仕様を決めること → コンストラクタ
- 走る、止まる → 動作（メソッド）

Javaでは、こうしたモノの情報や動きを1つの「まとまり」として管理します。  
この「モノ」をオブジェクトと呼び、オブジェクトを作るための「設計図」がクラスです。

```java
public class Car {
    // 🚗 車の「特徴」（＝フィールド）
    private String color;
    private int maxSpeed;
    private String type;

    // 🏗️ 車をつくるときに使う「組み立て工程」（＝コンストラクタ）
    public Car(String color, int maxSpeed, String type) {
        this.color = color;
        this.maxSpeed = maxSpeed;
        this.type = type;
    }

    // 🚙 車の「動き」（＝メソッド）
    public void drive() {
        System.out.println("この " + color + " の " + type + " は、時速 " + maxSpeed + "km で走ります。");
    }

    public void stop() {
        System.out.println("ブレーキを踏みました。車が止まりました。");
    }
}
```

## 2. クラスとオブジェクトの違い

| 用語       | 例え         | 意味                              |
|------------|--------------|-----------------------------------|
| クラス     | 設計図・型   | モノの情報や動きをまとめたもの   |
| オブジェクト | 実体・完成品 | クラスを元に作られた具体的なモノ |

🔧 **イメージで理解しよう！**

- クラス：パンの型（テンプレート）
- オブジェクト：その型から作った実際のパン

## 3. クラスとオブジェクトを使った簡単な例

🏟️ **テーマ：野球のポジション変換プログラム**

以前は守備番号を入力するとポジション名が出るメソッドを作りました。  
今回はその逆、「ポジション名 → 守備番号」を調べる機能も追加して、  
オブジェクト指向を使い、1ファイルで収まるよう管理しやすくしてみましょう。

### 💻 PositionConverter.java

```java
public class PositionConverter {
    private int number;
    private String positionName;

    public void setNumber(int number) {
        this.number = number;
    }

    public void setPositionName(String name) {
        this.positionName = name;
    }

    public void convertNumberToName() {
        String result;
        switch (number) {
            case 1: result = "ピッチャー"; break;
            case 2: result = "キャッチャー"; break;
            case 3: result = "ファースト"; break;
            case 4: result = "セカンド"; break;
            case 5: result = "サード"; break;
            case 6: result = "ショート"; break;
            case 7: result = "レフト"; break;
            case 8: result = "センター"; break;
            case 9: result = "ライト"; break;
            default: result = "不明な番号です"; break;
        }
        System.out.println("番号 " + number + " は「" + result + "」です。");
    }

    public void convertNameToNumber() {
        int result;
        switch (positionName) {
            case "ピッチャー": result = 1; break;
            case "キャッチャー": result = 2; break;
            case "ファースト": result = 3; break;
            case "セカンド": result = 4; break;
            case "サード": result = 5; break;
            case "ショート": result = 6; break;
            case "レフト": result = 7; break;
            case "センター": result = 8; break;
            case "ライト": result = 9; break;
            default: result = 99; break;
        }

        if (result == 99) {
            System.out.println("ポジション「" + positionName + "」は存在しません。");
        } else {
            System.out.println("ポジション「" + positionName + "」の番号は「" + result + "」です。");
        }
    }
}
```

### 💻 BaseballPosition.java

```java
public class BaseballPosition {
    public static void main(String[] args) {
        int num = 4;
        String name = "キャッチャー";

        PositionConverter converter = new PositionConverter();
        converter.setNumber(num);
        converter.setPositionName(name);

        converter.convertNumberToName();
        converter.convertNameToNumber();
    }
}
```

### ✅ 実行結果

```
番号 4 は「セカンド」です。
ポジション「キャッチャー」の番号は「2」です。
```

### ✅ 解説

| 要素               | 内容                                               |
|--------------------|----------------------------------------------------|
| クラス             | PositionConverter（機能やデータをまとめた設計図） |
| オブジェクト       | converter（設計図から作られた具体的なインスタンス） |
| フィールド（データ） | number, positionName（番号や名前を保持）           |
| メソッド（機能）   | convertNumberToName(), convertNameToNumber()（変換処理） |

### 🎯 どうしてクラスでまとめるの？

- データと機能を1つにできる
- 再利用しやすい
- 管理しやすい

## まとめ

| 学んだこと            | 内容                                          |
|-----------------------|-----------------------------------------------|
| オブジェクト指向とは？ | 現実のモノをプログラムで表現する考え方        |
| クラスとは？          | 設計図・テンプレート                          |
| オブジェクトとは？    | クラスから作られた実体                        |
| なぜ使うの？          | データと機能をひとまとめにできて、管理しやすい |