クラス・インスタンス・オブジェクトの違いは神の気分になるとわかる


クラス・インスタンス・オブジェクトの違いがしっくりこない!

プログラミングの初心者の方が勉強するとこんがらがるのが、

  • クラス
  • インスタンス
  • オブジェクト

の3つの違いだと思います。

僕自身、TECH::CAMPで初めてこの概念を学習した時はむちゃくちゃ混乱して、メンターの方に愚痴をこぼしていた記憶がありますからね笑

 

この「クラス・インスタンス・オブジェクト」は、Ruby などのオブジェクト指向のプログラミング言語を勉強する際に必ず出てくる重要な概念。

プログラミングを勉強したい方はまずこの言葉の違いを押さえておくといいでしょう。

僕自身、たぶん、100%わかっているわけではないんですが、ようやくしっくりき始めましたので、この3つの違いをまとめておこうと思います。

 

 

クラス・インスタンス・オブジェクトの違い

実はですね、クラス・インスタンス・オブジェクトの違いは、

神になった気分になるとわかりやすいんです。

クラス インスタンス オブジェクト

自分が神様になったとします。

そして、まだ動物が誕生していない地球に舞い降りたというシチュエーションを想像してください。

クラス インスタンス オブジェクト

 

オブジェクトとは何か?

まずはオブジェクトですね。

オブジェクトは

すべての物や事柄のこと

を指します。

舞い降りた地球で言うと、木とか川とか岩とか草とかですね。

クラス インスタンス オブジェクト

これらすべての物や事柄はすべてオブジェクトになるわけです。

 

人間を作る

さて。

ようやく、神に仕事が来ました。人間を作ることになったのです。

クラス インスタンス オブジェクト

神の力を存分に発揮して一人の人間を作ってみました。

 

うーんだいたいこんな感じですね。

クラス インスタンス オブジェクト

いやー、大変でした、作るの。

 

ただ、一人だけの人間だけじゃあまりにも寂しいですよね。

そこで、2人目を作ろうと思ったのですが、ぶっちゃけ、

面倒くさい!

クラス インスタンス オブジェクト

一人目で結構時間がかかったのに、二人目も0から作っていてはいくら時間があっても足りません。

同じことを0から決めないといけないのでだるすぎます。

神となった今でも時短が求められていて、NO残業を目指さないといけないんです。

 

クラスとは?

そこで出てきたのが「クラス」という概念です。

クラス インスタンス オブジェクト

これはオブジェクトの設計図のようなもの。

 

例えば、人を作るために「ヒトクラス」を用意したとしましょう。

この設計図には人をヒトとしてたらしめる、

  • 骨格の種類
  • 筋肉の種類
  • 髪の毛のポジション
  • 口の数
  • 鼻の穴の数
  • 内臓のポジションと機能
  • 手の指の数

などが記されているわけです。

この「ヒトクラス」という設計図を基に、2人目以降のヒトを量産していけば、0から人間を作る労力と比べて簡単に人をたくさん作ることができます。

これがクラスの威力です。

 

インスタンスとは?

そして、このクラスをもとに作った人間というオブジェクトを「インスタンス」と呼んでいるわけです。

クラス インスタンス オブジェクト

このクラスとインスタンスの仕組みがあるからこそ、いっぱい、簡単に、人を作れるようになったのです。

まさにイノベーションですね。

 

クラスには何が書いてある?

それでは設計図のクラスには何が書いてあるんでしょうか。

大まかに言うと、

  • プロパティ
  • メソッド

という2つのことが書かれています。

クラス インスタンス オブジェクト

 

プロパティ

まずプロパティですね。

これはデータや値と思っておけば良いです。

例えば、「ヒトクラス」の設計図には、

  • 身長
  • 体重
  • 体温
  • 髪の量
  • 目の色
  • 目の数

とか、「ヒトクラス」から生まれたインスタンス(ヒト)が持つ値が 書かれているのです。

このクラスの設計図のプロパティの記載のおかげで、いきなり巨人が生まれたり、目が三つぐらいある超人が生まれずに済んでいます。

 

メソッド

もう一つはメソッド。

これは関数と呼ばれるもので、クラスから生まれたインスタンスが持つことができるアクションとか機能だと思っておけばいいですね。

例えば「ヒトクラス」で言うと、

  • 走る
  • 笑う
  • ジャンプする
  • 食べる

とかの動作になります。

このようなメソッドが「ヒトクラス」に書いてあるからこそ、人種が違っても人類共通の動作が できるのです。

 

これらの「プロパティ」と「メソッド」はクラスからインスタンスを作った後に変更が可能です。

例えば、「肌の色」というプロパティを変更してやれば、様々な人種を作ることができます。

また、「スプーンを曲げる」と言うメソッドを持ったヒトインスタントを作ればユリ・ゲラーになるわけです。

 

ヒト以外の動物の作る

この時点で人をたくさん作れましたね。

クラス インスタンス オブジェクト

が、ちょっとそれだけだと地球が退屈ですよね。

そこで、人だけじゃなくて違う動物のオブジェクトも作ることにしました。

そこで、

  • 犬クラス
  • 猫クラス
  • 馬クラス

などの「ヒトクラス」以外のクラスの設計図をまずは作ります。

クラス インスタンス オブジェクト

もし、犬のオブジェクトを作りたい場合、犬クラスからインスタンスを作り、プロパティやメソッドを変更することで、チワワインスタンスやコーギーインスタンスを生成していきます。

これは猫クラスも馬クラスも同様ですね。

 

こんな感じでクラスを作ってインスタンスを作る、ということを新たにしていけば、地球に存在する動物の種類が増えていくわけです。

いやあ、賑やかになってきましたね。

 

インスタンスはオブジェクトの一種

この時点で、大体クラスとインスタンスオブジェクトの違いはわかってきたと思います。

ただ、最後にやはりしっくりこないのが、

オブジェクトとインスタンスの違い

ですよね。

 

実はこれは、

インスタンスの定義をはっきりすればしっくりきます。

インスタンスとは、

クラスを元に作り出したオブジェクト

なのです。

 

クラス インスタンス オブジェクト

 

つまり、インスタンスはオブジェクトの一種。

色々オブジェクトがある中、クラスを使って作ったオブジェクトをインスタンスというわけです。

 

つまり、

インスタンスはオブジェクトである

とえますが、

オブジェクトはインスタンスである

とは言えないのです。

 

クラス インスタンス オブジェクト

 

これはプログラミング言語によって、クラス以外からできるオブジェクトが存在しているためですね。

 

ちょっと若干話が飛躍しすぎて、何の記事を書いているのかわからなくなってきましたね笑

クラス・インスタンス・オブジェクトの違いがしっくりくるかわかりませんが、僕はこれで納得しています笑

是非、プログラミング学習の第一関門である「クラス・インスタンス・オブジェクトの違い」を自分の中で整理してみてくださいね。

それでは楽しんでプログラミングを勉強していきましょう!

 

Lin

 


コメントはこちらからお願いします!



もう1本読んでみる