クラスとインスタンス
クラスとは簡単に言ってしまえばひな形となるものです。車で言えば車の設計図と考えてもらえばいいと思います。インスタンスとはクラスを元にして作られるデータのことです。車で言えば設計図から作られて実際に販売されている車よいう感じで考えてもらえばいいと思います。
つまり、クラスは設計図で、インスタンスは設計図をもとに作る実際のモノです。
クラス
共通の属性(プロパティ)と処理(メソッド)をまとめたオブジェクトのことで、クラスを使うことにより個別の属性と処理をクラスから作るオブジェクトごとに分けることができます。
共通の情報はクラスにまとめ、個別の情報はオブジェクトごとに分けられることで、開発・管理・保守がし易くなるという利点があります。
車で例えると、共通する部分が「車体、ハンドル、タイヤ」を持っていることや「アクセルで加速する、ブレーキで減速する」などです。クラスではこれらの共通している属性や動作をプロパティやメソッドと呼ばれるデータで定義することができます。
属性(プロパティ名)車体、ハンドル、タイヤ
動作(メソッド)アクセルで加速、ブレーキで減速
みたいな感じです。モノと動作ですね。
インスタンス
クラスの特徴を引き継ぐので車の設計図(クラス)から作られたベンツやフェラーリなどの車(インスタンス)も「車体、ハンドル、タイヤ」があり、「アクセルで進む、ブレーキで止まる」という特徴を持ちます。
しかし、「車体、ハンドル、ブレーキ」は車の種類によって異なります。すなわち、インスタンスによって詳細は異なります。
newメソッド
全てのクラスは、定義しなくてもnewという特別なメソッドをはじめから持っています。
このメソッドは、返り値として利用したクラスのインスタンスを返します。
【例】
変数名 = クラス名.new
オブジェクト
全てのデータは「オブジェクト」と呼ばれます。文字を表現するための文字列オブジェクト、数を表現するための数値オブジェクト、「オブジェクトを保管するオブジェクト」である配列オブジェクトやハッシュオブジェクトがあります。
メソッドと返り値
Rubyのオブジェクトは、メソッドを使用することができます。オブジェクトごとに、利用できるメソッドが決まっています。
例えばlengthメソッドは文字列オブジェクトなどが使えるメソッドです。
【例】文字列オブジェクト
オブジェクトが文字列:"Hello"=>メソッドがlength=>返り値が5という形になります。
オブジェクトをもっと噛み砕く
オブジェクトはそれぞれが固有の性質を持ち、固有の動作(メソッド)を使って返り値を返します。
現実世界で考えてみます。
人間は一人一人、車は一台一台、建物は一軒一軒、それぞれが別々の人やモノ(オブジェクト)となります。
その中で1人の人間「たかし」というオブジェクトがあるとします。人間なので、固有の名前や年齢や性別を持ち、話したり歩くこと(メソッド)ができます。「たかし」が実際に話したり歩いたり、また別の人間のオブジェクトが歩いたり話したり、また別の車「ワゴンR」のオブジェクトが走ったりすることで世界が動くという考えです。
それぞれの独立したオブジェクトが、「性質」と「メソッド」を持ちます。
車で簡単に考えると「性質」は車種、重量、生産国、などがあり、「メソッド」は加速、減速、クラクションを鳴らす、などがあります。
オブジェクト指向型
オブジェクト指向型は「それぞれの持つ共通の情報をまとめたものから個別の情報を持ったものを作る」ため変更に強いコードが書ける点がメリットです。
Rubyはオブジェクトを中心に考える変更に強い言語です。
共通をまとめた部分がABC(材料)XYZ(機能)があるとしてAを変えたいときに共通化されているのでAだけを書き換えればよい。ひとつひとつ変えなくて済みます。