Javaでカプセル化
カプセル化とは
クラスの中にデータ(フィールド)とメソッドをまとめ、保護したいメンバにprivateをつけて勝手にアクセスできなくすること。
外部クラスやメソッドからフィールドにありえない値が代入されるのを防いだりできる。
また、メソッドとそれを利用する部分を別の人が設計しても間違いが起きにくいという利点がある。
外部からいじられたくないデータをprivateに、それらの値を設定するためのメソッドをpublicにする。
カプセル化してみる
人口と面積がprivateになっている。
それらを定義するためのメソッドがsetNumでpublic。
//都市クラス class City { private int population; // 人口 private int area; //面積 //人口と面積が0より大きいならセットできる public void setNum(int p, int a) { if (p > 0 && a > 0) { population = p; area = a; } else { System.out.println("error"); } } //人口密度を計算するメソッド public void calDens() { Double dencity = new Double(population / area); System.out.println("Population dencity is " + dencity + "/km^2"); } } public class CapselTest { public static void main(String[] args) { //インスタンス作成 City Tsukuba = new City(); Tsukuba.setNum(-1000, 1000); Tsukuba.setNum(227000, 284); //人口密度計算 Tsukuba.calDens(); } }
実行結果
error Population dencity is 799.0/km^2
最初は人口に負の値を代入しようとしたのでエラーに。
2回目はどちらの正の値だったのでインスタンスが作成できた。
カプセル化というのはオブジェクト指向の言語において重要な概念らしい。使いこなしたいね。