クラス
設計図みたいなものだよ
オブジェクト指向の話で出てくるよ
簡単に書くよ
クラス(英:class)とは
オブジェクト指向
(「モノ」に注目した考え方)で出てくる概念のひとつ
であり
「それが、どんなものか」を表した設計図のこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「オブジェクト指向」について結構ガッツリ説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
オブジェクト指向は「『モノ』に注目した考え方」です。
「どんなやつで、どう動く」に注目した考え方です。
例えば、そうですね。
あなたがシューティングゲーム(射撃ゲーム)を作ろうとしているとしましょう。
シューティングゲームの基本的な登場人物は
1.自分
2.敵
3.弾
です。
そして、それぞれの登場人物には「どんなやつ(属性)」と「どう動く(操作)」が設定されます。
例えば
・「自分」は3回「弾」に当たると爆発する(どんなやつ)
・「敵」は左に動ける(どう動く)
・「弾」の色は威力と対応している(どんなやつ)
などが「どんなやつ」と「どう動く」です。
あとは、用意した
1.自分
2.敵
3.弾
を組み合わせて、あれやこれやする処理を たくさん作ればゲームは完成します。
例えば
「1」の「3」が「2」に当たったら「2」が消える
(「自分」の「弾」が「敵」に当たったら「敵」が消える)
のような処理を必要な分だけ作り込めば良いでしょう。
ここまでを振り返ってみてください。
「自分」「敵」「弾」といったモノ(オブジェクト)に注目して、あれこれ考えていますよね。
このような考え方がオブジェクト指向です。
誤解を恐れずに言えば、オブジェクト指向のイメージは人形劇です。
人形劇をやるときは、まず人形を用意します。
そして、人形同士を関わらせることで1つの物語を作り上げます。
人形劇の中心は人形です。
物語は「人形に何をするか(どう動かすか)」によって決まります。
オブジェクト指向では、まずモノ(オブジェクト)を用意します。
そして、オブジェクト同士を関わらせることで1つの処理を作り上げます。
オブジェクト指向の中心はオブジェクトです。
処理は「オブジェクトに何をするか」によって決まります。
人形劇は、人形を用意して、その人形同士をあれこれすることで物語を作ります。
オブジェクト指向は、モノ(オブジェクト)を用意して、オブジェクト同士をあれこれすることで処理を作ります。
似ていますよね?
まずはオブジェクトを用意して、そのオブジェクトをあれこれしちゃうぜ!
なのがオブジェクト指向です。
以上を踏まえて、オブジェクト指向の話で出てくる用語のひとつで
「設計図」に相当するもの
が「クラス」です。
プログラミング的な話をすると「属性(プロパティ)と操作(メソッド)を定義したもの」を指します。
……と、いきなり言われても「なんのこっちゃ?」ですかね。
おそらく、クラス単体で考えるよりもクラスとインスタンスとオブジェクトの関係性で考えた方が理解しやすいと思います。
本ページでも、クラスとインスタンスとオブジェクトをまとめて説明します。
専門家の人からは怒られそうですが、ものすごい大雑把に説明すると
クラス:設計図
インスタンス:実際に作った物
オブジェクト:モノ(クラスとかインスタンスとかを、ふんわりと表現したもの)
です。
例えば、そうですね。
ピヨ太君がオリジナルのピヨピヨ時計を作ることにしました。
まずは、どんな時計にするか考えます。
ピヨ太君は頭の中でピヨピヨ時計の設計図を作りました。
次に、頭の中の設計図をもとにして実際のピヨピヨ時計を作りました。
この話における「設計図」が「クラス」です。
「ピヨピヨ時計」が「インスタンス」に相当します。
「設計図」と「ピヨピヨ時計」(と「ピヨ太君」もかな?)が「オブジェクト」です。
クラスは設計図です。
「そいつは、どんなモノだよ」が書いてあります。
インスタンスは設計図をもとにして実際に作った物です。
クラスを現実世界に召喚するとインスタンスになります。
オブジェクトは、クラスとかインスタンスとかの「モノ」をまとめてふんわりと表現したものです。
設計図は「モノ」です。
実際に作った物も「モノ」です。
ということは、設計図も実際に作った物も「モノ」です。
クラス(設計図)もインスタンス(実際に作った物)もオブジェクト(モノ)です。
あるいは
クラス:概念
インスタンス:物体
オブジェクト:概念や物体をふんわりと表現したもの
と捉えるのもアリかもしれません。
こちらは例えば
クラス:スマートフォン
インスタンス:iPhoneやAndroidの実機
オブジェクト:ケータイ
のイメージでしょうか。
クラス「スマートフォン」は「それがどんなものかって概念」です。
インスタンス「iPhoneやAndroidの実機」は「実際に使える物体」です。
オブジェクト「ケータイ」は「それらを、ふんわりと表現したもの」です。
クラスとインスタンスは何となくイメージできると思いますが、オブジェクトが分かりにくいですかね。
例えば、ピヨ子さんがピヨ太君に「あなたの『ケータイ』何?」と聞いたとします。
ピヨ太君は「iPhoneだよー」と答えるかもしれません。
「へっへっへ、この前、ガラケーからスマホに変えたんだー」と答える可能性もあります。
この会話で登場した「ケータイ」に相当するものがオブジェクトです。
クラスを指していることもあれば、インスタンスを指していることもあります。
文脈によっては、それ以外を指している場合も あります。
ふんわりとしたやつなのです。
せっかくなので、もう少しプログラミングちっくな説明もしておきましょう。
クラス:属性(プロパティ)と操作(メソッド)を定義したもの
インスタンス:クラスをnewしたもの
オブジェクト:クラスとかインスタンスとかのこと
です。
例えば、Javaで書いた以下のソースコード(人間語で書いたプログラムの元ネタ)が あったとしましょう。
//ピヨピヨ族クラス
class PiyoPiyoZoku{
//---------------------
//属性(プロパティ)
//---------------------
// 年齢
private int age;
//---------------------
//操作(メソッド)
//---------------------
// 年齢設定
void setAge(int age){
this.age = age;
}
// 年齢取得
int getAge(){
return this.age;
}
}
//主処理
public class test{
public static void main(String[] args){
//PiyoPiyoZokuクラスのインスタンス「piyota」を生成
PiyoPiyoZoku piyota = new PiyoPiyoZoku();
//年齢を設定
piyota.setAge(18);
//年齢を表示
System.out.println("ピヨ太の年齢:" + piyota.getAge());
}
}
このソースコード内の
//ピヨピヨ族クラス
class PiyoPiyoZoku{
//---------------------
//属性(プロパティ)
//---------------------
// 年齢
private int age;
//---------------------
//操作(メソッド)
//---------------------
// 年齢設定
void setAge(int age){
this.age = age;
}
// 年齢取得
int getAge(){
return this.age;
}
}
の部分がクラスです。
「PiyoPiyoZoku」という種類の何かの設計図です。
この設計図を見ると、PiyoPiyoZokuは
1.「age(年齢)」がある
2.「age(年齢)」を設定できる
3.設定されている「age(年齢)」を取得できる
ということが分かります。
ただし、これはあくまで設計図です。
実際の「PiyoPiyoZoku」という種類の何かは、この世のどこにも存在しません。
「PiyoPiyoZoku」という種類の何かを実際に見て、触って、動かしたければ、実際に作ってあげる必要があります。
それなら作ってあげましょう。
//PiyoPiyoZokuクラスのインスタンス「piyota」を生成
PiyoPiyoZoku piyota = new PiyoPiyoZoku();
の部分で「PiyoPiyoZoku」という種類の何かを実際に作って、それに「piyota」という名前を付けています。
いわゆる「newする」というやつです。
この「piyota」がインスタンスです。
あとは
//年齢を設定
piyota.setAge(18);
で「piyota」の「age(年齢)」として「18」を設定して
//年齢を表示
System.out.println("ピヨ太の年齢:" + piyota.getAge());
で「piyota」に設定されている「age(年齢)」を表示しています。
ポイントは、これらの操作は実際に作った物(インスタンス)である「piyota」に対してやっていることです。
設計図(クラス)である「PiyoPiyoZoku」に対してやっているわけでは ありません。
何となく分かりますかね?
クラス(設計図、概念)とインスタンス(実際に作った物、物体)は何となくイメージできるのではないでしょうか。
オブジェクト(モノ)は、あまり気にしなくても大丈夫です。
ベテランの人たちも感覚的な理解で何となく使っています。
「クラスとかインスタンスとかのこと」くらいの理解でも困ることは少ないと思います。
一言でまとめるよ
まぁ「クラス」って単語が出てきたら「設計図なんだな~」と お考えください。






