Ruby クラスとオブジェクト
Ruby は完璧なオブジェクト指向プログラミング言語です。オブジェクト指向プログラミング言語の特徴は次のとおりです:
- データのカプセル化
- データの抽象化
- ポリモーフィズム(多態性)
- 継承
これらの特徴はオブジェクト指向 Rubyで説明します。
オブジェクト指向プログラムには、クラスとオブジェクトが関わります。クラスは個々のオブジェクトを作成するための青写真(設計図)です。オブジェクト指向の用語では、あなたの自転車は自転車クラスのインスタンスです。
車両を例にとると、車輪(wheels)、馬力(horsepower)、燃料またはガスタンク容量(fuel or gas tank capacity)が含まれます。これらの属性は車両(Vehicle)クラスのデータメンバーを形成します。これらの属性によって、ある車両を他の車両と区別することができます。
車両には、停止(halting)、運転(driving)、速度超過(speeding)などの特定の関数も含めることができます。これらの関数は車両(Vehicle)クラスのデータメンバーを形成します。したがって、クラスを属性と関数の組み合わせとして定義できます。
クラス Vehicle の定義は次のとおりです:
インスタンス
これらのデータメンバーに異なる値を割り当てることで、クラス Vehicle の異なるインスタンスを作成できます。例えば、飛行機には車輪が3つ、馬力が1,000、燃料タンク容量が100リットルあります。同様に、自動車には車輪が4つ、馬力が200、ガスタンク容量が25リットルあります。
Ruby でクラスを定義する
Ruby でオブジェクト指向プログラミングを実装するには、まず Ruby でオブジェクトとクラスを作成する方法を学ぶ必要があります。
Ruby では、クラスは常にキーワードclassで始まり、その後にクラス名が続きます。クラス名の最初の文字は大文字にする必要があります。クラスCustomerは次のようになります:
キーワードendを使用してクラスを終了できます。类内のすべてのデータメンバーは、クラス定義とendキーワードの間にあります。
Ruby クラスの変数
Ruby には4種類の変数があります:
- ローカル変数:ローカル変数はメソッド内で定義される変数です。ローカル変数はメソッドの外では使用できません。後の章で、メソッドに関する詳細を説明します。ローカル変数は小文字または _ で始まります。
- インスタンス変数:インスタンス変数は、特定のインスタンスまたはオブジェクト内のメソッドをまたいで使用できます。つまり、インスタンス変数はオブジェクトごとに異なる値を持つことができます。インスタンス変数は変数名の前に記号(@)を置きます。
- クラス変数:クラス変数は異なるオブジェクトをまたいで使用できます。クラス変数はクラスに属し、クラスの属性の1つです。クラス変数は変数名の前に記号(@@)を置きます。
- グローバル変数:クラス変数はクラスをまたいで使用できません。クラスをまたいで使用できる変数が必要な場合は、グローバル変数を定義する必要があります。グローバル変数は常にドル記号($)で始まります。
インスタンス
クラス変数 @@no_of_customers を使用すると、作成されたオブジェクトの数を判断でき、これにより顧客数を特定できます。
インスタンス
Ruby でnewメソッドによるオブジェクトの作成
オブジェクトはクラスのインスタンスです。ここでは、Ruby でクラスのオブジェクトを作成する方法を学びます。Ruby では、クラスのメソッドnewを使用してオブジェクトを作成できます。
メソッドnewは、Ruby ライブラリであらかじめ定義されている特別なメソッドです。new メソッドは类メソッドに属します。
次のインスタンスは、クラス Customer の2つのオブジェクト cust1 と cust2 を作成します:
ここで、cust1 と cust2 は2つのオブジェクトの名前です。オブジェクト名の後に等号(=)が続き、等号の後にクラス名が続き、その後にドット演算子とキーワードnew。
カスタムメソッドで Ruby オブジェクトを作成する
メソッドにnewパラメータを渡すことができます。これらのパラメータはクラス変数の初期化に使用できます。
パラメータ付きのnewメソッドを宣言する場合、クラスの作成と同時にメソッドを宣言する必要がありますinitialize。
initializeメソッドは特別な種類のメソッドで、パラメータ付きのクラスのnewメソッドが呼び出されたときに実行されます。
次のインスタンスは initialize メソッドを作成します:
インスタンス
このインスタンスでは、id、name、addrをローカル変数として持つinitializeメソッドを宣言できます。ここで、defとendは Ruby メソッドの定義に使用されinitialize。後の章では、メソッドに関する詳細を学びます。
にinitializeメソッド内で、これらのローカル変数の値をインスタンス変数 @cust_id、@cust_name、@cust_addr に渡します。ここでは、ローカル変数の値は new メソッドとともに渡されます。
次に、以下のようにオブジェクトを作成できます:
Ruby クラスのメンバー関数
Ruby では、関数はメソッドと呼ばれます。类内の各メソッドはキーワードdefで始まり、その後にメソッド名が続きます。
メソッド名は常に小文字で始まります。Ruby では、キーワードendを使用してメソッドを終了できます。
次のインスタンスは Ruby メソッドを定義します:
ここで、statement 1とstatement 2はクラス Sample 内のメソッドfunctionの本体の構成要素です。これらのステートメントは、有効な Ruby ステートメントであれば何でも構いません。例えば、メソッドputsを使用してHello Rubyを出力します。次のようになります:
次のインスタンスは、クラス Sample のオブジェクトを作成し、helloメソッドを呼び出します:
これにより、次の結果が生成されます:
Hello Ruby!
簡単なケーススタディ
クラスとオブジェクトについてもっと練習したい場合は、こちらのケーススタディがあります:
その他の拡張