クラスとは
- データと処理をまとめたもの(教科書P.58)
- 構造体に関数がついたもの(C言語がきちんとわかっている人向けの説明)
- 型の定義
- etc..
クラスはメンバーによって構成される。メンバーにはフィールド(データ、変数)とメソッド(C言語における関数)の2種類がある。
身体データ(身長と体重)からBMIを計算するプログラムを作ってみよう(ソースコード全体)
クラスを使わない例
4 5 6 7 8 9 10 11 12 13 14 |
double taro_height = 1.7; // タローの身長 double taro_weight = 70.0; // タローの体重 double jiro_height = 1.9; // ジローの身長 double jiro_weight = 80.0; // ジローの体重 double taro_bmi = taro_weight / (taro_height * taro_height); System.out.println("タローのBMIは" + taro_bmi + "です。"); double jiro_bmi = jiro_weight / (jiro_height * jiro_height); System.out.println("ジローのBMIは" + jiro_bmi + "です。"); |
クラスを使う例
まずはクラスを作る(定義する)。まずは身長と体重を格納するフィールドだけのクラスを考えよう。
- クラス名はBodyとする。クラス名は英語の大文字から始めることに注意。
- weightとheightというフィールドを持つ。
1 2 3 4 |
class Body { double weight; // 体重を表すフィールド double height; // 身長を表すフィールド } |
クラスは「型の設計図」なので、設計図から実体を作る必要がある。その実体のことを「インスタンス」という(教科書では「オブジェクト」という言葉を使っている「オブジェクト」は文脈によって意味が違ったりするので本講義では「インスタンス」という言葉を使う)。クラスからインスタンスを作ることを「インスタンス化」という。
mainメソッドの中でBodyクラスをインスタンス化しよう。インスタンス化はnew演算子で行う。
17 |
Body taro = new Body(); // タローの身体データを表すBodyクラスのインスタンスを生成 |
インスタンスのフィールドは「インスタンス名.フィールド名」で利用することができる。それぞれのフィールドに値を代入してみよう。
18 19 |
taro.height = 1.7; // インスタンスのheightフィールドに代入 taro.weight = 70.0; // インスタンスのweightフィールドに代入 |
これでタローのデータをフィールドに格納することができた。クラスを使わない例と同様にBMIを計算できる。ジローについても同様。
1 |
double taro_bmi = taro.weight / (taro.height * taro.height); |
次にBMIを計算するメソッドをBodyクラスに加えてみよう(5-9行目)。メソッド名はgetBmiとする。メソッドからはフィールドにアクセスすることができる(C言語における「グローバル変数」のように見えるが、クラス内でならアクセスできるということと、インスタンスごとにフィールドができるという点で大きく違う)。
1 2 3 4 5 6 7 8 9 10 |
class Body { double weight; // 体重を表すフィールド double height; // 身長を表すフィールド // BMIを計算するメソッド double getBmi() { double bmi = weight / (height * height); return bmi; } } |
メソッドを使ってBMIを取得するには、例えば、次のよう呼び出すことができる。フィールドと同様に「インスタンス名.メソッド名(引数)」で呼び出せる。
1 |
double taro_bmi = taro.getBmi(); |
最終的に表示するコードは次のようになる。
25 26 27 |
System.out.println("タローのBMIは" + taro.getBmi() + "です。"); System.out.println("ジローのBMIは" + jiro.getBmi() + "です。"); |
ポイント
- クラスは設計図で、設計図から実体(インスタンス)を作る必要がある。
- クラスはメンバーからなる。メンバーにはフィールド(データ、変数)とメソッド(処理、C言語における関数)がある。
- インスタンス化はnew演算子で行う。
- インスタンスのメンバーを使うにはドット演算子を使う。