7-1-1 クラスとオブジェクトの関係性を改めて学ぼう

これまで、オブジェクトの型のことをクラスと呼ぶことを紹介しました。

本章では、Rubyの世界で表現される、クラスの実態についてもう少し深掘りして学びます。

クラスの種類

1章 Rubyの世界へようこそ!」で学んだように、Rubyでは取り扱う全てのデータをオブジェクトとして表現されています。

また、「6章 メソッドを使ってプログラミングする」で学んだように、オブジェクトには様々なメソッドがあらかじめ備わっています。

このメソッドは、あらかじめクラスに定義されています。

Rubyではオブジェクトの型となるクラスが階層的に定義されており、クラス1つ1つに内部的に名前付けされています。

たとえば、1などの整数型であれば英語で整数という意味のIntegerというクラス名です。

つまり、1というオブジェクトはIntegerクラスの実態(インスタンス)であるといえます。

その他にも1.08などの小数はFloatクラス、文字列はStringクラスなどの名前がついています。

これまで扱ってきたオブジェクトのクラス名をまとめると以下の通りです。

オブジェクト例 クラス名 説明
1 Integer 整数を表すクラス
1.08 Float 小数を表すクラス
'a' String 文字列を表すクラス
[1, 2] Array 配列を表すクラス
{a: 1} Hash ハッシュを表すクラス

クラスの継承

Rubyでは全てのオブジェクトがまずBasicObjectクラスから始まっており、その後Objectクラスに派生した後、細分化されています。

たとえば、Integerクラスは、BasicObjectクラス→Objectクラス→Numericクラスに派生して存在しています。

このように、クラスが順番に派生して実装されていることをクラスの継承と呼びます。

また派生元のクラスを親クラス、派生先のクラスを子クラスと呼びます。

Rubyではオブジェクトに備わっているclassメソッドで、オブジェクトのクラスを確認することができます。

さらに、クラスに備わっているsuperclassクラスメソッドで、そのクラスから見た場合の親クラスを確認することができます。

クラスは、様々なデータの集まりを分類し、それらのデータに特化した便利なメソッドを提供してくれる存在であるといえます。

クラスを継承することのメリット

クラスを継承することで、類似のデータに共通するメソッドをまとめることができます。

たとえるなら、動物というクラスを親クラスとし、犬というクラスと猫というクラスを子クラスと定義した場合、「寝る」というメソッドは犬も猫も共通の動作なので動物クラスに定義できます。

一方で、「尻尾を振る」のは犬特有の行為なので犬クラスに定義したり、「毛玉を吐く」のは猫特有の行為なので猫クラスに定義することで、振る舞いを適切に整理整頓することができます。