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購入🗒️、他の方へのチップ代💰に使わせていただきます。
いつも応援ありがとうございます!