芋出し画像

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賌入🗒、他の方ぞのチップ代💰に䜿わせおいただきたす。 い぀も応揎ありがずうございたす