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

[jfriends] Re: staticの使い方




前橋です。

ついでに便乗質問です。

OOP言語を使い慣れないので、初心者の質問ですが...

たとえば、aとbからcを算出する関数があったとして、Cで書けば、

 c = calcC(a, b);

ですが、Javaの場合、

 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();

でも書けることになっちゃいます。

でも、Cに慣れた身には、これはとてもとても読みにくいというか、
何やってるかわからんというか、まるでグローバル変数渡しばっか
りやってた(しかできなかった)BASICプログラマの頃に戻ったよう
だ、と感じてしまうのです。

こういうパターンは、a, b, cの関係に制約を付けたい場合など、
よくあると思うのです。

こういうとき、calcC()を、以下のようにstaticメソッドにすれば、

  private static int calcC(int a, int b)

thisがないのでインスタンスメンバは全部見えないわけで、calcC
がそういうメンバにアクセスしていないことが保証できて、安心で
きるように思います。

でも、こういうstaticの使い方って、少なくとも入門書とかでは、
あんまり聞かないような気がするのですが...

こういう使い方は、間違ってるのでしょうか?

こういう使い方が間違っているのなら、上記のようなメソッドは、
どう書けば良いのでしょうか?

それとも、ひとつのクラスの中で、データメンバの参照や破壊に気
を使っている時点で、オブジェクトの粒度が大き過ぎるのでしょうか?
# ...とは言ってもねえ。

------------------------------------------------------------
  前橋 和弥                             maebashi@xxxxxxxxxx
  中部ソフトエンジニアリング(株)
    〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
    Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------