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

[jfriends] Re: staticの使い方(メソッド)





こんばんは。
西沢@xxxxxxxxxxイーサー・プラニックです。

ENDO Yasuyuki <yasuyuki@xxxxxxxxxx> wrote:
at [Tue, 27 Apr 1999 14:14:24 +0900]
> >> 実は dも参照していたり、a や bを破壊していたり、cに何の影響
> >> も与えていなかったりしていない、ということを、コード上で保証
> >> してくれていない、という心地悪さがあるのです。
> 
> もし破壊しているなら、何らかの方法で通知すべきだと思います。
> 
> その前に、暗黙に破壊してしまうという設計がいけないわけですが。

私はものぐさなので、他のクラス内で起こったことまで気にしません。

#まあ、そうできるように実装しますが。

たくさんのクラスの海(森とか都市と表現する方もいますね)の中で、
いちいち他のクラスまで気にしていたら、泳ぎ疲れます。:-)


> >そのクラスが責任を持つという責任範囲が明確になっていれば、
> >気にならないと思います。
> 
> この場合のクラスの責務として以下のようなものがあると思います。
> 
> クラス内部の状態が変化しているなら、
>  ・外部に通知する
>  ・状態変化を外部から知る手段が用意されている

本当に必要なサービスってこのパターンぐらいですよね。


> 最初の発言にあった、
> public な変数やメソッドを static として宣言しろという意見は
> かなり無理があると思います。

用途が明確になっていないのでなんとも言えませんけど、無理な
感じはしますね。
気持ちはわからないでもないですが、どのクラスでも使うメソッドや
変数なら抽象クラスに実装する方がスマートですね。

ex.
クラスメソッドの場合 => int c = MyClass.calc(a, b);
抽象クラスに実装済みの場合 => int c = calc(a, b)

ちょっと強引な例ですがクラス名を書かなくて済みます。


> Java の static は C の static とは意味がまったく違うからです。
> 
> たとえばインスタンスの個数を管理しているクラスがある場合、
> インスタンスの個数とかを保持しておく変数を static 変数に
> することが考えられます。

そうですね。
クラス変数(staticな変数)はJavaVM上に1つ、インスタンス変数は
インスタンス毎に1つという性質を生かした使い方ができれば
いいんじゃないかなぁと思います。
そうすると、自然とクラス変数はSingletonパターンとかに使ったり
するようになったりしますしね。


> クラス全体の責務となるようなメソッドは static メソッド
> (わたしはクラスメソッドと読んだ方がしっくりします)として

同じく。(^^;)
staticメソッドって、ちょっと言語依存的な表現でイマイチですね。


> 定義します。たとえば上の例なら、個数を取得するメソッドとか。
> あるいは、すべてのインスタンスに作用するようなメソッドとかです。

まあ、用途は色々あると思うのでクラスメソッドとしての特性を
生かせれば良いのかなぁと思います。(java.lang.Mathなど)

#あとはセンス?


----------------------------------------
西沢 篤行 <anishi@xxxxxxxxxx>
株式会社イーサー・プラニック
Tel 03-5822-1330 / Fax 03-5822-1338