[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/