カテゴリー
Ruby

クラスについて知ろう

この章ではクラスについて説明します。
今までのプログラムでは変数と関数を扱ってきましたが、クラスという機能を使うことで多くの変数と関数を1つの機能体として働かせてデータを処理することができます。
クラスとは物を作る設計図に例えられます。
設計図は車や家や鉛筆をつくる場合に必要ですが、この設計図に当たるものがクラスです。
ではクラスについて詳細に説明します。
車や家や鉛筆の中には色々な部品が含まれていますが、それらの部品には「状態」や「ふるまい」があります。
例えば、鉛筆であれば「状態」は鉛筆の形、芯、線の濃さなどで、「ふるまい」は線を引く、削るなどの動作です。
その「状態」や「ふるまい」をクラスという設計図に書いていきます。
「状態」を変数で書き、「ふるまい」をメソッドで書くことになります。
その「状態」や「ふるまい」に指示を出すのはオブジェクトです。
例えば鉛筆の「線を消す」など具体的な指示をオブジェクトという司令塔から出します。
オブジェクトの詳細はこの後に説明します。
ではクラスの基本形から説明します。9 〇クラス名は大文字で付けることが慣習になっていますが、自由に付けていただいて結構です。
〇クラスの中に変数やメソッドを書いていきます。
メソッドは関数の別名だと思ってください。9 〇この引数はクラスの中で使われるデータです。
〇引数は必要な場合には記述しますが、省略もできます。
ではクラスの例を見てみましょう。99 この例のクラスにはBankと言う名前が付いています。
そして、このBankクラスを使うためにはオブジェクトを作成しなくてはいけません。
クラスはただの設計図なので、これを動かすのがオブジェクトです。
それが9の箇所です。
オブジェクトを作った後は、そのオブジェクト変数を使って、クラスの中の変数やメソッドにアクセスすることができるようになります。9 「クラス名(引数)」という形式で引数が 書かれていますが、この引数はオブジェクトを作成した時に実行するinitメソッドに渡されます。
このinitメソッドの中で設定した変数にオブジェクトで設定したデータを入れます。9 initメソッドの構文は次の通りです。9 〇 initメソッドの第一引数は引数があっても無くてもselfと書いてください。
selfはオブジェクト自身を意味します。
〇注意点はinitの前後の下線は2つ連続で繋がっています。
この例では下線が1本に見えますがテキストエディタの表記のせいです。
〇 initメソッドはPythonで機能が与えられているメソッドですが、nyuukinメソッドやshukkinメソッドは自分で作成したメソッドです。
ではプログラムの説明をします。
banks=Bank(1200000)のようにオブジェクトを作成すると同時に引数である1200000がinitメソッドの引数であるaにセットされ、self.zandakaに代入されます。
initメソッドやnyuukinメソッドなどのメソッドの中の第一引数には必ずselfを設定します。
また、メソッドの中にクラス内で設定した変数がある場合はその変数にも9と言う形式でselfを付けます。
この例では9の箇所です。9 「self.zandaka」のようにselfに関連づけられている変数をインスタンス変数と言います。
次はメソッドにデータを入れる方法について説明します。9 「オブジェクト.メソッド(引数)」と いう形式でクラスの中の以下のnyuukinメソッドを呼び出して、9に15000を足す動作を行っています。9 このようにオブジェクトから呼ばれるメソッドをインスタンスメソッドと言います。
次に以下の説明をします。9 クラスの中のshukkinメソッドを呼び出して、zandakaからkの値である10000を引く動作を行っています。9 そして最後に9 の箇所で、以下のshowメソッドを実行しています。9 showメソッドはzandakaの値をreturnで呼び出し元に返すだけのメソッドです。
結果は以下の通りです。9 先ほどの例ではzandakaという変数が初めから定義されていますが、実はこれらの変数は初めからクラスの中で定義しなくても、後からでも付け加えることができるのです。
例えば「ginkou」という変数を付け加えようとする場合には9と言う形式で付け加えることができます。
例えば以下のように書きます。9 では例をみてみましょう。999 このginkou変数はshowメソッドで使われているのが分かります。
次の例に進みます。
インスタンス変数は前の例の9の代わりに以下のようにクラスの中に初めから設定しておくことも出来ますので次の例をみてください。999 この例のようにクラスの中にインスタンス変数を初めから設定することができます。
クラスの中で変数を設定する時には変数の前にオブジェクトを付ける必要はありません。9 次の箇所の説明をします。9 このようにオブジェクトからクラスのインスタンス変数の値を取得することもできます。
クラスの中の変数の値を取得するには9という形式で書きます。9 これまでの例ではオブジェクトは1つだけでしたが、以下のように複数のオブジェクトを作成することができます。
以下の例では複数のオブジェクトごとにzandaka変数に値を入れていますが、これらのオブジェクト間で値の共有はありません。
つまり、新しくオブジェクトを作ったら、前のオブジェクトで使われていた変数の値は使われることはありません。999999