見出し画像

3分間プログラミング講座 第1回:オブジェクト指向って何?~クラスとメソッドの基本~


登場人物:

  • チャット先生(通称:先生): オブジェクト指向マスター。普段は優しく、たまにユーモアも交えながら解説。

  • ボット助手(通称:ボット君): プログラミングを始めたばかりの若手。素朴な疑問を投げかけるのが得意。


ボット君: 先生、今日から「オブジェクト指向プログラミング」を学ぶって聞いたんですけど、なんか難しそうで……そもそも「オブジェクト指向」って何ですか?

先生: やあ、ボット君!心配はいらないよ。実は、オブジェクト指向は私たちの身の回りにある「モノ」を考える感覚にすごく近いんだ。

ボット君: モノ、ですか?

先生: そう。例えば、目の前にある「車」を想像してみて。車って、「色」や「メーカー」っていう特徴(データ、または属性とも呼ぶ)を持ってるよね?

ボット君: はい、持ってます!

先生: そして、車は「走る」とか「止まる」とか「曲がる」とか、いろんな動き(行動)ができる。これもわかるかな?

ボット君: はい、できますね。

先生: オブジェクト指向では、この「色」や「メーカー」のようなデータ(属性)と、「走る」や「止まる」のような動き(行動)を、ひとつのまとまりとして考えるんだ。この「まとまり」を、プログラミングでは「オブジェクト」と呼ぶ。

ボット君: ふむふむ。じゃあ、その「オブジェクト」をどうやって作るんですか?



クラスは「設計図」、メソッドは「行動」


先生: いい質問だね、ボット君!オブジェクトを直接ポンと生み出すわけじゃないんだ。まず、オブジェクトを作るための「設計図」が必要になる。この設計図が「クラス」だ。

ボット君: クラスが設計図!なるほど、ますます分かりやすいです!

先生: その通り。「車」というクラス(設計図)があれば、そこには「色は赤色ですよ」「メーカーはトヨタですよ」といった車のデータ(属性、フィールドとも呼ぶ)をどこに書くか、そして「どうやって走るか」「どうやって止まるか」といった車の行動(メソッド)をどう書くかが定義されているんだ。

ボット君: じゃあ、その「メソッド」っていうのが、さっきの「走る」とか「止まる」ってことですね?

先生: その通り!メソッドは、クラスが持つ「行動」や「機能」を表す、プログラミングにおける「関数」のことだ。クラスという設計図の中に「このモノはどう動くか」という手順が書かれているイメージだよ。



クラスとメソッドの具体例(Java風)


先生: ちょっと簡単なコードを見てみようか。例として、車を表すクラスをJavaっぽい書き方で示すね。

Java

// 車というクラス(設計図)
public class Car {
    // 属性(データ、フィールドとも呼ぶ)
    String color;
    String maker;
    int speed;

    // コンストラクタ:オブジェクトを作る時に必ず実行される特別なメソッド
    public Car(String color, String maker) {
        this.color = color; // 引数で受け取った色を、このCarのcolorに設定
        this.maker = maker; // 引数で受け取ったメーカーを、このCarのmakerに設定
        this.speed = 0; // 初期速度は0
        System.out.println(this.maker + "製の" + this.color + "の車が作られました!");
    }

    // メソッド(行動)
    public void accelerate(int accelerationSpeed) {
        this.speed += accelerationSpeed; // 自身の速度を加速
        System.out.println(this.maker + "の車が加速して、現在の速度は" + this.speed + "km/hです。");
    }

    public void brake() {
        this.speed = 0; // 自身の速度を0にする
        System.out.println(this.maker + "の車が止まりました。");
    }
}

ボット君: うわ、なんか難しそう……でも、String color;とかが「色」っていうデータで、accelerate()とかが「加速する」っていう行動ってことですね?

先生: その通り!素晴らしいね。ところで、public Car(...)っていう部分、これは「コンストラクタ」と呼ばれる特別なメソッドなんだ。オブジェクトが作られるときに必ず実行されるんだよ。まるで「生まれたときに最初にする準備作業」みたいなものだね。

ボット君: なるほど!車を作るときの「組み立て作業」みたいなものですね!

先生: いい例えだ、ボット君!そして、this.っていうのが出てきてるのがわかるかな?

ボット君: はい、気になりました!あれは何ですか?

先生: いい質問だ!thisは英語で「これ、この」という意味だよね。プログラミングでも同じで、「この車」「この自分自身」を指すんだ。

ボット君: この自分自身?

先生: そうそう。例えば、君が「私の名前はボット君です」って言うとき、「私の」って部分があるでしょう? thisも同じで、「この車の色」「この車の速度」というように、「どの車の話をしているか」を明確にするために使うんだ。

ボット君: なるほど!じゃあ、もし「赤い車」と「青い車」をこの設計図から作ったとして、accelerate()メソッドを呼んだときに、

  • 「赤い車」が呼べば、赤い車の速度だけが変わる。

  • 「青い車」が呼んでも、赤い車には影響しない

ってことなんですね!?

先生: その理解がまさに核心だね!そう、それぞれが独立した「モノ」として自分のデータを持つんだ。



実際に動かしてみよう!


先生: じゃあ、実際にこのCarクラスの「設計図」から「オブジェクト」(実体)を作って動かしてみようか。

Java

// 使用例
public class CarShowroom {
    public static void main(String[] args) {
        // 設計図(Carクラス)から「赤いトヨタの車」というオブジェクトを作る
        Car redCar = new Car("赤", "トヨタ"); // この時、コンストラクタが呼ばれる!

        // 設計図(Carクラス)から「青いホンダの車」という別のオブジェクトを作る
        Car blueCar = new Car("青", "ホンダ"); // こちらもコンストラクタが呼ばれる!

        System.out.println("\n--- 車を動かしてみよう ---");

        // 赤い車を加速させる
        redCar.accelerate(50);

        // 青い車を加速させる
        blueCar.accelerate(30);

        // 赤い車を停止させる
        redCar.brake();
    }
}
/* 実行結果:
トヨタ製の赤の車が作られました!
ホンダ製の青の車が作られました!

--- 車を動かしてみよう ---
トヨタの車が加速して、現在の速度は50km/hです。
ホンダの車が加速して、現在の速度は30km/hです。
トヨタの車が止まりました。
*/

ボット君: おおー!redCarって呼ぶと赤い車だけが動いて、blueCarって呼ぶと青い車だけが動く!同じaccelerate()やbrake()なのに、操作する対象が違うんですね!

先生: そうなんだ!それがオブジェクトの独立性。クラスという共通の設計図から作られたオブジェクトたちは、それぞれが独自のデータを持つ、個性的な「モノ」なんだよ。



今日のまとめ!


  • オブジェクト:データ(属性)と行動(メソッド)をまとめた「モノ」の単位。

  • クラス:オブジェクトを作るための「設計図」。

  • メソッド:クラスが持つ「行動」や「機能」を表す関数。

  • コンストラクタ:オブジェクトが作られる時に必ず実行される特別なメソッド(初期設定を行う)。

  • this:メソッド内で、そのメソッドを呼び出した自分自身のオブジェクトを指す。

  • 重要なポイント:同じクラス(設計図)から作られたオブジェクトでも、それぞれが独立したデータを持つため、同じメソッドを呼んでも異なる結果になる。


ボット君: なんとなく、オブジェクト指向の入り口が見えてきた気がします!クラスが設計図で、メソッドが行動、そしてthisで自分自身のデータにアクセスする!そして、同じ設計図から作っても、それぞれが違う「モノ」として動くんですね!

先生: その調子だ、ボット君!よく理解できたね。次回は、この「設計図」から実際に複数の「モノ」が作られたときに、もっと深く「個性」について掘り下げていこうと思う。

ボット君: 楽しみです!ありがとうございました!

次回:第2回: 「設計図」から生まれる「個性」~オブジェクトの独立性~

いいなと思ったら応援しよう!

ナオユキ|物語と知識のコンシェルジュ もしこの記事が少しでも役に立ったり、楽しんでいただけたりしたら、チップをいただけるととても嬉しいです! いただいたチップは、今後のより良いコンテンツ制作のための書籍代📚とnote購入🗒️、他の方へのチップ代💰に使わせていただきます。 いつも応援ありがとうございます!