クラスとオブジェクトの概念 – オブジェクト指向の入り口

docs

Javaプログラミング、楽しんでる? 今回は、Javaの肝とも言える「オブジェクト指向」の世界に足を踏み入れてみよう。特に「クラス」と「オブジェクト」という、最初のハードルになりがちな概念を、できるだけ分かりやすく説明するからね!

オブジェクト指向って何?

まず、オブジェクト指向って聞くと、なんか難しそうって思うかもしれないけど、簡単に言えば「現実世界をプログラムで表現しようぜ!」って考え方なんだ。

例えば、僕らが普段使っているスマホやPC、車なんかも、それぞれ「モノ」として存在しているよね? オブジェクト指向では、これらの「モノ」をプログラムの中で作り出して、それぞれがどんな「情報」を持ってて(属性)、どんな「行動」ができるのか(振る舞い)を定義していくんだ。

クラスって何? オブジェクトの「設計図」だよ!

オブジェクト指向の主役の一つが「クラス」だ。クラスは、例えるなら**「モノを作るための設計図」**だと思ってくれればOK。

例えば、車を作る工場を想像してみて。工場でいきなり車がポンと生まれるわけじゃないよね? まずは車の「設計図」があるはずだ。その設計図には、「タイヤは4つ」「エンジンがある」「ハンドルがある」みたいな情報が書いてある。これが「クラス」にあたるんだ。

Javaでクラスを定義する時は、こんな感じで書くよ。

Java

class Car {
    // 属性(情報)
    String color;    // 色
    String model;    // モデル名
    int speed;       // スピード

    // 振る舞い(行動)
    void startEngine() {
        System.out.println("エンジンがかかりました!");
    }

    void accelerate() {
        speed += 10;
        System.out.println("加速しました!現在のスピード:" + speed + "km/h");
    }

    void brake() {
        speed -= 10;
        if (speed < 0) {
            speed = 0;
        }
        System.out.println("減速しました!現在のスピード:" + speed + "km/h");
    }
}

このCarクラスは、「車」という設計図を定義しているんだ。

  • colormodelspeedは、車の「属性」だね。色が何色か、どのモデルか、今のスピードがどれくらいか、みたいな情報を持たせることができる。
  • startEngine()accelerate()brake()は、車の「振る舞い」だ。エンジンをかけたり、加速したり、ブレーキをかけたりする操作を表しているよ。

オブジェクトって何? 設計図から作られた「実体」だよ!

次に「オブジェクト」だ。クラスが「設計図」なら、オブジェクトはその**「設計図から実際に作られたモノ」**だよ!

さっきの車の設計図から、実際に赤い車や青い車、セダンやSUVなど、いろんな車が作られるよね? これらの「実際に作られた車」が、プログラミングの世界でいう「オブジェクト」なんだ。

Javaでオブジェクトを作るには、「new」というキーワードを使うよ。

Java

public class CarFactory {
    public static void main(String[] args) {
        // Carクラスのオブジェクトを作成(インスタンス化と呼ぶ)
        Car redCar = new Car(); // 赤い車オブジェクトの作成
        Car blueCar = new Car(); // 青い車オブジェクトの作成

        // それぞれの車の属性を設定
        redCar.color = "赤";
        redCar.model = "スポーツカー";
        redCar.speed = 0;

        blueCar.color = "青";
        blueCar.model = "セダン";
        blueCar.speed = 0;

        // それぞれの車に振る舞いを実行させる
        System.out.println("--- 赤い車の操作 ---");
        redCar.startEngine();
        redCar.accelerate();
        redCar.accelerate();
        redCar.brake();

        System.out.println("\n--- 青い車の操作 ---");
        blueCar.startEngine();
        blueCar.accelerate();
        blueCar.brake();
    }
}

このコードでは、Carという設計図から、redCarblueCarという2つのオブジェクトを作っている。

  • redCarは「赤いスポーツカー」という特徴を持ったオブジェクト。
  • blueCarは「青いセダン」という特徴を持ったオブジェクト。

同じCarクラスから作られたんだけど、それぞれ独立した存在として、別々の色やモデル、スピードを持つことができるんだ。そして、それぞれがstartEngine()accelerate()といった振る舞いを実行できるのが分かるかな?

このように、クラスからオブジェクトを作り出すことを「インスタンス化」と呼ぶよ。そして、作られたオブジェクトのことを「インスタンス」とも言うんだ。

paizaで実行した結果

なぜクラスとオブジェクトを使うの?

クラスとオブジェクトを使うメリットはたくさんあるけど、主なものとしては、

  1. プログラムの見通しが良くなる(カプセル化): 関連するデータ(属性)と処理(振る舞い)をひとまとまりにできるから、コードが整理されて、どこに何があるか分かりやすくなるんだ。まるで部品を作るように、プログラムを構成できる。
  2. 同じようなものを簡単に量産できる: 一度クラス(設計図)を作ってしまえば、そこからいくつでもオブジェクト(実体)を作り出すことができる。上の車の例みたいに、いちいち全く同じコードを何回も書かなくて済むんだ。
  3. 変更に強くなる: 例えば、車の速度を扱う部分の処理を変更したい場合、Carクラスの中だけを修正すれば、そのクラスから作られた全てのオブジェクトに反映される。バラバラに書かれたコードを全部探して直す必要がないんだ。

まとめ

今回は、オブジェクト指向の入り口として「クラス」と「オブジェクト」について解説したよ。

  • クラス: オブジェクトの設計図。どんな情報(属性)を持ってて、どんな行動(振る舞い)ができるかを定義する。
  • オブジェクト(インスタンス): クラス(設計図)から作られた実体。個別の情報と行動を持つ。

最初はちょっと難しく感じるかもしれないけど、この「設計図」と「実体」の関係をしっかり理解しておくと、今後の学習がグッと楽になるはずだ。そして、オブジェクト指向にも色々な考え方があるんだなってことも知っておいて損はないよ。

コメント

タイトルとURLをコピーしました