プログラミング初学者がつまずくポイントの一つとして「クラス」という概念があります。
Rubyをはじめとするオブジェクト指向型プログラミング言語では、クラスという入れ物が全ての基本になっています。ソースコードに登場するあらゆるオブジェクトは、実は全てが何らかのクラスに属しているのです。
Rubyにおいて、クラスという入れ物にメソッドという装備をくっつけ、オブジェクトを作り出して装備を使ってもらうのが一般的な流れになります。
#たい焼きの型(クラス)を作ってみる
クラスTaiyakiを定義してみると・・・
class Taiyaki
def atama
puts "たい焼きの頭の方にはあんこがいっぱい入っている"
end
def shippo
puts "たい焼きの尻尾にはあんこがほとんど入っていない"
puts "しかしカリカリしていて美味しい"
end
end
クラスを指して「たい焼きの型」や「設計図」と表現したりします。これはクラスという概念に基いて、インスタンス化させ、実体のあるオブジェクトを作り出すためです。
このクラスから出来上がるたい焼きは全て「頭の方にはあんこがいっぱい入っているが、尻尾の方にはほとんど入っていない」たい焼きになるわけです。
#たい焼き(オブジェクト)を作ってみる
たい焼きの型(クラス)からたい焼き(オブジェクト)を作ってみると・・・
class Taiyaki
def atama
puts "たい焼きの頭の方にはあんこがいっぱい入っている"
end
def shippo
puts "たい焼きの尻尾にはあんこがほとんど入っていない"
puts "しかしカリカリしていて美味しい"
end
end
taiyakikun_1gou = Taiyaki.new
taiyakikun_1gou.atama
taiyakikun_1gou.shippo
taiyakikun_2gou = Taiyaki.new
taiyakikun_2gou.atama
taiyakikun_2gou.shippo
Rubyでは「 クラス名.new 」とすることで実体のあるたい焼き(オブジェクト)を作ることができます。これをインスタンス化といいます。
また、「 オブジェクト名.メソッド 」とすることで、クラス内で定義されたメソッド・機能を実行します。
taiyaki_1gouとtaiyaki_2gouは、同じたい焼きの型(クラス)から作られました。持っているあんこの量(機能)も一緒です。
しかし完全に独立した別個の存在(オブジェクト)というわけです。
#まとめ
「クラス」と「オブジェクト」の関係が、「たい焼きの型」と「たい焼き」に似ているのが伝わったでしょうか。
ちなみに僕はこの話を聞いた時は「何となくわかるけどフワッとしていてやっぱりわからん」という感想を持ちました。腑に落ちたのは、自分でソースコードを書き、クラスを定義してインスタンス化し、メソッドを実行するようになってからです。
クラスとオブジェクトの関係性を学ぶ中で学んだのは、さわりだけ理解できたら早速手を動かしてみることが、プログラミング習得の近道なのだということでした。