2011/06/06

アクセサ( getter / setter)・不変クラス( immutable )・カプセル化( encapsulation )

public interface Radioactivity {
 /**
  * 年間放射線量を取得する。
  * @return ミリシーベルト
  */
 double getRadiation();
 /**
  * 設定されている線量が安全かどうか
  * @return true の場合、安全
  */
 boolean isSafe();
}
/**
 * 平常時
 */
public class Normal implements Radioactivity {
 private double radiation;
 public Normal(double radiation) {
  this.radiation = radiation;
 }
 /**
  * @see Radioactivity#getRadiation()
  */
 public double getRadiation() {
  return this.radiation;
 }
 /**
  * @see Radioactivity#isSafe()
  */
 public boolean isSafe() {
  return this.radiation < 1.0d;// ふつうはこのぐらい
 }
}
/**
 * 緊急時
 */
public class Emergency implements Radioactivity {
 private double radiation;
 public Emergency(double radiation) {
  this.radiation = radiation;
 }
 /**
  * @see Radioactivity#getRadiation()
  */
 public double getRadiation() {
  return this.radiation;
 }
 /**
  * @see Radioactivity#isSafe()
  */
 public boolean isSafe() {
  return this.radiation < 20.0d;// 緊急なので致し方なく
 }
}
  • アクセサを getter のみにすることで一度設定した年間の被曝線量を変更できなくする(不変クラス)( immutable )
  • #isSafe() メソッドは時の政府の都合により内部の処理を変更することができる(カプセル化)( encapsulation )
see also: Javaプログラマであるかを見分ける10の質問 5.フィールドのアクセス修飾子をprivateにしgetter/setterメソッドを提供する事でフィールドを参照する設計方針を取る主な理由を説明せよ

0 件のコメント :

コメントを投稿