ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

小学生でもわかるように抽象クラス(Abstract)を説明する試み

はじめに

プログラミングをはじめて学校で勉強して

単純な計算が理解できるようになり、

やれメソッドだ、戻り値だと何となく理解できてきた、、そんな時期

f:id:namiton:20220411152927p:plain

突如訪れる謎の呪文、、抽象クラス(Abstract)

だいたい理解する頃には授業についていけなくなっていました。。。。

 

そんなことにならないように小学生でも理解できるように説明する試みです。

f:id:namiton:20220411153242p:plain



ズバリ

抽象クラスとは、くだものです!!

f:id:namiton:20220411153532p:plain

 

・・・・・・・?

 

解説

日常会話で抽象的な表現というものがあります。

f:id:namiton:20220411153736p:plain

 

例えば、あなたがこれから買い出しに行くとしましょう。

頼んだ人に

「なにか食べたいものはありますか?」

と質問します。

 

するとその人は

くだもの

と一言いいました。

 

あなたはスーパーへ行きましたが、果たしてくだものとはバナナのことなのか?リンゴのことなのか?はたまたパイナップルのことなのか?わからなくなってしましました。

 

これが抽象的な表現です。

 

よくある何食べたい?「なんでもいいよ!」もこれと同じ抽象的です(笑)

 

f:id:namiton:20220411154909p:plain

 

プログラムの中の抽象クラスも同じような意味合いです。

 

リンゴクラスやメロンクラスをゼロから作成して見た目や味や食感などを決めるよりも、

f:id:namiton:20220411170428p:plain

味や食感など変数を用意した果物クラスを作って、

 

そのクラスから具体的なリンゴやメロンなど、名前にあった見た目や味や食感を設定したほうが楽に作ることができます。

f:id:namiton:20220411163338p:plain

 

この果物クラスのことを抽象クラスといい、

 

そこから具体的なクラスにすること継承といい、

 

リンゴやメロンなど抽象クラスからできたクラスサブクラスといい、

 

見た目や味や食感を設定することオーバーライドといいます。

 

f:id:namiton:20220411165612p:plain

 

抽象クラスを用いることのメリットはいろいろありますが、

 

一番分かりやすいのは一括で変更できるというところです。

 

〈 鮮度 〉というパラメーターを追加するとき

 

100種類の果物すべて別クラスで作成されいたら、100種類クラスすべてに鮮度変数を追加する必要があります。

 

f:id:namiton:20220411165749p:plain

 

ですが、1つの抽象クラスから継承して作られた100種類の果物ならば、抽象クラスに鮮度変数を1つ追加するだけで、すべてのサブクラスに鮮度変数が追加されます。

 

抽象クラスはインスタンスを作れないというお約束があります。

f:id:namiton:20220411164509p:plain

はじめに話した例え話を思い出してみてください。

 

”果たしてくだものとはバナナのことなのか?リンゴのことなのか?はたまたパイナップルのことなのか?”

 

これはプログラムの中でも同じです。

 

あくまで定義として用意した抽象クラスを実体化することはできないとはこういうことです。

 

さいごに

いかがでしょうか?

何となくでも理解できるようになったらうれしいです。

 

周りで理解できてなさそうな人にこの記事のURLを送り付けていただけると幸いです。