[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: [jfriends] Re: staticの使い方




高橋です。

> class Hoge {
>     private int   a;
>     private int   b;
>     private int   c;
>     public void  doHoge() {
>         ...
>     }
> }
>の、doHoge()メソッドの中で、ひょいとcを算出したいとき、C流に
>  private int calcC(int a, int b)
>というメソッドを定義してもいいですが、
>この場合、a, b, c 共にHoge自身のデータメンバなので、
>  private void calcC();
>でも書けることになっちゃいます。
 :
>こういうパターンは、a, b, cの関係に制約を付けたい場合など、
>よくあると思うのです。

制約を付けたいと思ったら、そのようにクラスを設計するとよさそうです。
cが、aとbから導き出される場合、aやbを変更するメソッドの中でcを更新
すれば、a,b,cの間の制約が表現できます。
class Hoge {
    :
   pubilc void setA(int val) {
      a = val;
      retainABC();
   }
   public void setB(int val) {
      b = val;
      retainABC();
   }
   public int getC() {
      return c;
   }
   private void retainABC() {
      c = a + b;
   }

}
こうしておけば、aやbを変更すればcが自動的に更新されるようになります。

>こういうとき、calcC()を、以下のようにstaticメソッドにすれば、
>  private static int calcC(int a, int b)
>thisがないのでインスタンスメンバは全部見えないわけで、calcC
>がそういうメンバにアクセスしていないことが保証できて、安心で
>きるように思います。
モジュールの情報隠ぺいの単位はクラスになります。ここでいう保証や安心は
モジュールの作成者と利用者の間で生じるのではないでしょうか?(つまり
クラスの作成者と利用者)




------
Toru Takahashi
torutk@xxxxxxxxxx
NIFTY: GHE00470
http://www.alles.or.jp/~torutk/