十七日目はクラスの機能について

進行ペースが落ちてきた気がする今日この頃。暑さか、暑さが悪いのか!?(きっと違う)

今日学んだこと

  • メンバへのアクセス制限
  • privateメンバとpublicメンバ
  • カプセル化

この中でカプセル化だけよくわからなかった。本から転載すると…

このように、クラスの中にデータ(フィールド)と機能(メソッド)をひとまとめにし、privateメンバにアクセスできないように保護する機能をカプセル化といいます。

…うーん。サンプルではフィールドをprivateにしてるから…データには勝手に触らせず、引数を使って受け取った値を入れるようにして、このとき値が不正でないことをチェックすることで不正な値が入らないようにする、のかな。
ものすごいわかりにくい文になってる気がするorz


いいや。今日はサンプルプログラムを少しいじってみた!

import java.io.*;
//車クラスを設定
class MyCar
{
	//ナンバー、ガソリン量はプライベートメンバとする
	private int num;
	private double gas;
	
	public void setNumGas(int n,double g)
	{
		if(0 < g && g < 101){
			num = n;
			gas = g;
			System.out.println("ナンバー" + num + "の車に"
					+ gas + "L給油します");
		}
		else{
			System.out.println("ガソリン量が不正です");
			System.out.println("1-100の範囲で入力して下さい");
		}
		}
	public void cashier()
	{
		int sum;
		sum = (int)(gas*112);
		System.out.println("ガソリン代は" + sum + "円になります");
		System.out.println("毎度ありがとうございます!");
	}
}

class GasStation {

	/**
	 * レギュラーガソリン112円という夢を見た
	 * 車のナンバーとガソリン量を入力してもらう
	 */
	public static void main(String[] args) throws IOException
	{
		// TODO Auto-generated method stub
		//クラスへアクセスする準備
		MyCar MC = new MyCar();
		//変数の宣言
		String str;
		int nm=0;
		double gs=0;
		
		System.out.println("いらっしゃいませ!");
		System.out.println("車のナンバーと給油量を教えて下さい");
		
		BufferedReader br = new BufferedReader
				(new InputStreamReader(System.in));
		
		//車のナンバーを取得
		str = br.readLine();
		nm = Integer.parseInt(str);
		//ガソリン量を取得
		str = br.readLine();
		gs = Double.parseDouble(str);
		
		MC.setNumGas(nm,gs);
		MC.cashier();
	}

}

ナンバーが4桁以下であることを判別させたり、ガソリンもレギュラー・ハイオクを選択できるようにしたかったけど、今日はここまで。