プログラミング学習をしている人の中には、「クラスとインスタンスがわからない!」という人も多いのではないでしょうか?
そう、何を隠そう勉強を始めたばかりの私も、この壁に直面しました。
そんな経験から、クラスとインスタンスをできるだけわかりやすく解説してみました。
クラスは設計図、インスタンスは設計図をもとに作られたモノ
クラスとインスタンスは、次のように設計図と設計図から作成される実物体と言われています。
クラスとは同じ特徴を持ったものを生み出すための設計図みたいなものです。 その設計図から生まれたものをインスタンスと言います。
例えば ペットボトル飲料を考えてみましょう。
ペットボトル飲料って、どのペットボトルも同じ材料で作られていて形もみんな同じですよね?
それをいちいち職人さんが設計図も見ずに自分の感覚・経験に頼って作っていくとなるととてつもなく大変ですよね。
どうせ同じ形にするなら、設計図をもとに作れば簡単かつ効率的に自動車を作れますよね。
その設計図に当たるのがクラスで、実際に完成したペットボトル自身がインスタンスです。
クラスの定義は、次のようにします。
Class クラス名(頭文字は大文字)
#後々設計図の中身を書いていく場所
end
ただペットボトル飲料は見た目は同じですが、商品によって中身(味)に違いができますよね。
例えば中身がミネラルウォーターのペットボトル飲料、中身がお茶のペットボトル飲料、中身がスポーツドリンクのペットボトル飲料などです。
そして中に人気の飲み物や限定味であれば値段も変わるかもしれません。
今回で言えば、ペットボトル飲料は、名前、値段、味といった情報を持っています。
これら共通に持っている情報を属性、個々に持っている情報を属性値と言います。
どういう属性を持っているかはクラスという設計時に書いておきます。
そしてペットボトル飲料が作られるときに属性値をセットします。
こういったインスタンスごとに異なる情報はインスタンス変数というもので管理します。
インスタンス変数は@から始まる名前で作成します。
Class Drink
# インスタンス作成の時に実行される
def initialize(name, price, taste)
# インスタンス変数には@をつける
@name = name
@price = price
@taste = taste
end
end
クラスを元に新しいモノをつくると、それがインスタンスになります。
Rubyにおいては、newメソッドを使用することで新しいインスタンスを生成できます。
クラス名.new
例えば生まれてきたペットボトル飲料に名前が「アルプスの天然水」、値段は100円、中身(味)はミネラルウォーターといった情報をセットしたいとします。
クラスとう設計図には、インスタンスというペットボトル飲料を生成するために、name, price, tasteの3つの情報が必要だと書かれています。
なので、newメソッドでインスタンスを生成しようとするタイミングで、それぞれの情報を渡します。
Drink.new(”アルプスの湧き水", 100, "ミネラルウォーター")
#実行結果は以下の通り
#=> <Drink:0x007fd9489cdb18 @name = "アルプスの天然水"、@price = 100、 @taste = "ミネラルウォーター">
その際は@name = “アルプスの湧き水”、@price = 100、 @taste = “ミネラルウォーター”といったようになります。
このような感じで、設計図(クラス)を元に、実体(インスタンス)を作り出すのです。
クラスは使い回すことが可能
ちなみに設計図を使いまわした上で異なった情報を渡すことで、同じ特徴を持った別のものを創り出すことができます。
例えば、ペットボトル飲料の一つである「スポーツドリンク」を作りたいとします。
Class Drink
# インスタンス作成の時に実行される
def initialize(name, price, taste)
# インスタンス変数には@をつける
@name = name
@price = price
@taste = taste
end
end
Drink.new(”爽快ドリンク", 120, "スポーツドリンク")
一から別の情報を作っていては時間がいくらあっても足りません。
ましては、100、200作成するとなるといかがでしょうか?
でもこの時にクラスとインスタンスを使えば、問題は解決します。
最初に1度だけクラスの定義をしておけばよいのです。
あとは、作りたいものがあるたびに
クラス名.new(作成に必要な情報)
とするだけで、ポンポン実体を作ることができます。
このように同じ特徴を持ったものを作り出すときに、クラスというとても便利です。
この記事のまとめ
- クラスは設計図、インスタンスは設計図から生み出されたモノ
- クラス名.new(設計図に書いてある、作成に必要な情報) でインスタンスを作れる
- ことなる情報をクラスに渡せば、同じ特徴を持った異なるインスタンスを生成できる
コメント