プログラミングの勉強、お疲れ様です。
今回は、Rubyの学習をしている際に、分かりにくい分野である「クラスとインスタンス」についての話をしていきます。
この記事を読み終えたとき「こういうものか、大体分かった」と思っていただけたら幸いです。
クラスとは何か
オブジェクト指向の考えにおける、「属性」と「メソッド」を定義しているものになります。
「・・・なんのこっちゃ?」と思われたかもしれません。
よく挙げられる例としては、「設計図」になりますね。
設計図(クラス)には「これから作る物(インスタンス)」には、「どんな特徴があって(属性)」、「共通もしくは個別にどんな働きをするのか(メソッド)」が記されています。
もうちょっと詳しく説明していきますね。
オブジェクト指向についてざっくりと説明
オブジェクト指向とは、ざっくりと言うと「物(オブジェクト)によって働き(コード)を分ける考え方」ことを言います。
たとえば、音楽プレイヤーがあったとしましょう。
音楽プレイヤーには電源ボタン、再生ボタンなど、ボタンがいくつかありますね。
オブジェクト指向とは、このようにボタン1つに対して1つの仕事を持たせているようなものです。
これによって、「あれ、再生ボタンを押しても再生されない。再生ボタンが壊れているかも」と故障(エラー)の原因が分かりやすくなるという特徴があります。
もし、ボタンが1つしかなくて、1回押したら電源オン、2回押したら再生、…回押したら、という設定になっているのが、オブジェクト指向を用いない考え方になります。
属性についてざっくりと説明
属性とは、ざっくり言うと、「その物(オブジェクト)がもつ性質」を言います。
例えば、「車」というクラスでしたら、考えられる属性は「車の色」「乗車定員」といった、「車がもつ性質」を表します。
メソッドについてざっくりと説明
メソッドとは、ざっくり言うと、「そのクラスができる動き」を言います。
例えば、先に説明した「車」というクラスでしたら、「走る」「クラクションを鳴らす」といった、「車が共通して行う動き」を表します。


インスタンスとは何か
インスタンスとは、クラスの説明でお話しした「設計図を元に作られた実物」を指します。
「車」というクラスでしたら、インスタンスは「パトカー」「フェラーリ」「ワゴンR」などでしょうか。
言い換えると、「車」というカテゴリに属する「実物」というイメージでしょうか。
具体的なコードを用いて説明
下記のコードは「Car」という設計図(クラス)を元に、「pato」と「wagonR」という具体物(インスタンス)を作成しています。
Carクラスではインスタンスを作成する際に、属性として、名前(car_name)、色(car_color)、音(car_sound)を入力するように設定しています。
そしてメソッドとして、Carクラスに共通している「車は走るもの」を表す、self.runメソッド(ここでいうselfはCarのこと)、そして作成したインスタンスそれぞれの特徴を調べるためのcar_characterメソッドを作成しています。
class Car
def initialize(car_name, car_color, car_sound) #インスタンスの属性(特徴)を設定
@car_name = car_name
@car_color = car_color
@car_sound = car_sound
end
def self.run #クラスに共通したメソッド(動き)
puts "全ての車は走ります"
end
def car_character #インスタンス用のメソッド
puts "#{@car_name}は#{@car_color}で#{@car_sound}と音をならします"
end
end
pato = Car.new("パトカー", "白黒", "ウーウー") #インスタンスの作成
wagonR = Car.new("ワゴンR", "シルバー", "プップー") #インスタンスの作成
pato.car_character #インスタンスのメソッドを呼び出す
wagonR.car_character #インスタンスのメソッドを呼び出す
Car.run #クラスのメソッドを呼び出す
patoとwagonRというインスタンスをCar.new
で作成し、〇〇.car_character
とすることで、それぞれのインスタンスメソッドを呼び出しています。
そして最後に、Car.run
とすることで、クラスメソッドを呼び出しています。
上記内容をターミナルで呼び出すと、以下のようになります。
パトカーは白黒でウーウーと音をならします ワゴンRはシルバーでプップーと音をならします 全ての車は走ります
以上がクラスとインスタンスの説明になります。


コメント