Contents
Ruby – クラスとオブジェクト
この章ではRubyのクラスとオブジェクトの考え方についてまとめます。まずですがオブジェクト指向には4つのファクターがあります。
オブジェクト指向プログラミング言語の特徴には、
- データカプセル化
- データ抽象化
- 多型
- 継承
これらの機能については、のちの章で説明するとしてまずはザックリとクラスとオブジェクトというこの考えかたを学んでください。
クラスとオブジェクト
オブジェクト指向プログラムには、クラスとオブジェクトが含まれます。クラスは個々のオブジェクトが作成される設計図です。
車を例に見てください。車には車輪、馬力、および燃料またはガスタンク容量を含みます。これらの特性は、クラスVehicleのデータメンバーとして形成されます。これらの特性を使い、車両を他の車両と区別することができます。
同じ車です。ハンドルがありタイヤがあり、車体があるということはわかるんですが、そこから違いを持たせる為にはってところを勉強します。
車両には、ブレーキ、運転、および速度などの特定の機能を持たせることもできます。これらの関数さえもVehicleクラスのデータメンバーを形成します。したがって、クラスを特性と関数の組み合わせとして定義することができます。
クラスVehicleは –
Class Vehicle { Number no_of_wheels //標準機能 Number horsepower //標準機能 Characters type_of_tank //標準機能 Number Capacity //標準機能 Function speeding { //スピード } Function driving { //運転性能 } Function halting { //ブレーキ } }
これらのデータメンバーに異なる値を割り当てることによって、Vehicleクラスのいくつかのインスタンスを作成できます。
例えば、飛行機は3つの車輪、1,000の馬力、タンクのタイプとしての燃料、および100リットルの容量を有する。
同じように、車には4つの車輪、200の馬力、タンクの種類としてのガス、25リットルの容量を有する。
つまるところ、vehicle(車クラス)クラスの値をいじって色々なものができるよということが言いたいわけです。これを一台一台設定したらめんどうですよねってのが言いたいことです。同じフェラーリを作るのに型枠組みなく別々の枠組みでいちいち作りますか?そうではないですよね。
そう、このクラスからできたものがオブジェクトなんです。
Rubyでクラスを定義する
Rubyを使ってオブジェクト指向プログラミングを実装するには、まずRubyでオブジェクトとクラスを作成する方法を学ぶ必要があります。
Rubyのクラスは常にキーワードclassとそれに続くクラスの名前で始まります。名前は常に最初の大文字にする必要があります。顧客クラスは、
class Customer end
キーワードendを使用してクラスを終了します。クラス内のすべてのデータメンバーは、クラス定義とendキーワードの間にあります。
Rubyクラスの変数
Rubyは4種類の変数を提供します。
- ローカル変数 – ローカル変数は、メソッドで定義される変数です。ローカル変数はメソッド外では使用できません。
- インスタンス変数 – インスタンス変数は、特定のインスタンスまたはオブジェクトのメソッド間で使用できます。つまり、インスタンス変数はオブジェクトごとに変化します。インスタンス変数の前にはアットマーク(@)と変数名が続きます。
- クラス変数 – クラス変数は、異なるオブジェクト間で使用できます。クラス変数はクラスに属し、クラスの特性です。記号@@の後に変数名が続きます。
- グローバル変数 – クラス変数はクラス間で利用できません。1つの変数をクラス間で使用できるようにするには、グローバル変数を定義する必要があります。グローバル変数の前には必ずドル記号($)が付きます。
例
@@ no_of_customersというクラス変数を使用して、作成されているオブジェクトの数を判断できます。これにより、顧客数の導出が可能になる。
class Customer @@no_of_customers = 0 end
新しいメソッドを使ってRubyでオブジェクトを作成する
オブジェクトはクラスのインスタンスです。Rubyでクラスのオブジェクトを作成する方法を学習します。Rubyでオブジェクトを作成するには、クラスのnewメソッドを使用します。
メソッドnewは、Rubyライブラリにあらかじめ定義されている固有の型のメソッドです。新しいメソッドはクラスメソッドに属します。
ここでは、Customerクラスの2つのオブジェクトcust1とcust2を作成する例を示します。
cust1 = Customer. new cust2 = Customer. new
ここで、cust1とcust2は2つのオブジェクトの名前です。オブジェクト名の後ろに、等号(=)を付けてから、クラス名の後に続けて記述します。次に、ドット演算子とキーワードnewが続きます。
Rubyオブジェクトを作成するためのカスタムメソッド
メソッドnewにパラメータを渡すことができ、これらのパラメータを使用してクラス変数を初期化することができます。
パラメータを指定して新しいメソッドを宣言する場合は、クラス作成時にメソッドを初期化する必要があります。
初期化メソッドは、ときに実行されるメソッドの特殊なタイプであり、新クラスのメソッドは、パラメータと呼ばれています。
ここでは、メソッドの初期化を作成する例です –
class Customer @@no_of_customers = 0 def initialize(id, name, addr) @cust_id = id @cust_name = name @cust_addr = addr end end
この例では、ローカル変数としてid、name、およびaddrを使用してinitializeメソッドを宣言します。ここで、defとendは、Rubyメソッドの初期化を定義するために使用されます。メソッドの詳細については、以降の章で学習します。
で初期化方法、あなたは@cust_name、および@cust_addr、@cust_idインスタンス変数にこれらのローカル変数の値を渡します。ここでローカル変数は、新しいメソッドと一緒に渡される値を保持します。
これで、次のようにオブジェクトを作成できます。
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")
Rubyクラスのメンバー関数
Rubyでは、関数はメソッドと呼ばれます。クラス内の各メソッドは、キーワードdefとそれに続くメソッド名で始まります。
メソッド名は、常に小文字で優先されます。あなたは、キーワードendを使ってRubyでメソッドを終了します。
Rubyメソッドを定義する例 –
class Sample def function statement 1 statement 2 end end
ここで、ステートメント1とステートメント2は、クラスSample内のメソッド関数の本体の一部です。これらのステートメントは、任意の有効なRubyステートメントにすることができます。
class Sample def hello puts "Hello Ruby!" end end
次の例では、Sampleクラスの1つのオブジェクトを作成し、helloメソッドを呼び出して結果を確認します。
#!/usr/bin/ruby class Sample def hello puts "Hello Ruby!" end end # Now using above class to create objects object = Sample. new object.hello
このようになる
Hello Ruby!