8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

クラスとオブジェクトの関係性

Last updated at Posted at 2017-09-29

プログラミング初学者がつまずくポイントの一つとして「クラス」という概念があります。

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は、同じたい焼きの型(クラス)から作られました。持っているあんこの量(機能)も一緒です。

しかし完全に独立した別個の存在(オブジェクト)というわけです。

#まとめ
「クラス」と「オブジェクト」の関係が、「たい焼きの型」と「たい焼き」に似ているのが伝わったでしょうか。

ちなみに僕はこの話を聞いた時は「何となくわかるけどフワッとしていてやっぱりわからん」という感想を持ちました。腑に落ちたのは、自分でソースコードを書き、クラスを定義してインスタンス化し、メソッドを実行するようになってからです。

クラスとオブジェクトの関係性を学ぶ中で学んだのは、さわりだけ理解できたら早速手を動かしてみることが、プログラミング習得の近道なのだということでした。

8
6
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?