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

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





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

#こちらはクラスメソッドと関数についてです。

Kazuya Maebashi <maebashi@xxxxxxxxxx> wrote:
at [Wed, 28 Apr 1999 11:51:22 +0900]
> # でも、鳥頭なので、少なくともX上のMuleで1画面に収まらないプ
> # ログラム間で相互に副作用があると、私の理解の範囲を超えます。

それは非常にもったいないです。
多くのクラスを活用してコードを書く量を減らしていくという
オブジェクト指向の恩恵を受けづらいですね。


> 「算出ロジック」なら、やっぱり、「これとこれを与えると、これ
> を返す」というロジックになっていると思うのですよ。
>
> この場合、たとえば、publicにするのは最終的な給料を返すメソッ
> ドだけで良いとして、4のメソッドを実現するときに、privateな
> 2, 3のメソッドを呼ぶわけですが、そいつらの作り方として 2案あ
> りまして、
> 
> (1)引数なしのメソッドにする。プライベートメンバの勤続年数・等
>   級などを参照する。
> (2)引数として勤続年数・等級などを受け取るようにする。
> 
> (2)の方が、「算出ロジック」という趣旨に合致しているのではな
> いかと。

ここが、前橋さんとの考えのギャップですね。
前橋さんは関数の形が一番、使う場合に見通しが良いという考え
なのですね。
このあたりの理解をお互いに深めるのは時間がかかりそうですね。

#以下、このギャップに終始してしまってます(^^;)


> >うーん、関数の感覚はJavaではあまり必要ないと私は思いますが
> >他の皆さんはどうなんでしょう?
> 
> たとえば、sin() やcos() は、文句の付けようもない関数ですよね。

関数っぽい、というか昔から関数としてあった名称なので関数と呼んでも
でも間違いではないでしょうが、私は関数ではないと思います。
ユーティリティクラスのクラスメソッドと関数はイコールというのは
ちょっと気が引けます。


> で、それが、Javaでは、Mathクラスのメソッドとして実現されてい
> るわけですが、これはやっぱりstaticです。
> 
> 関数といえば、引数を与えて、戻り値を返すモノであり、同じ引数
> を与えれば必ず同じ値を返します(Cの関数はそうではないですが)。
> 関数が状態を持たないものであるなら、それはオブジェクトと結び
> 付いているべきではないだろう、と思うわけです。

なるほど。
ここが前橋さんのクラスメソッド=関数の考えなのですね。
確かに、関数といえば引数を与えて戻り値を得ますね。
でも、Javaには関数はないから、Mathクラスはとりあえず1つのクラス
としてまとめただけのような気がします。

私は sin()や cos()は Numberクラスのインスタンスメソッドとして
実装されていた方が自然だと思ってます。


> sin()や cos()は、誰がどう見ても文句の付けようのない関数だと
> 思いますが、今回の「給与計算」みたいなのも、お客さんからもら
> う仕様書には、たぶんしっかり計算式が書いてあると思うのです。
> 
> よって、それを「関数」だと見倣すのは、自然なことであるように、
> 私には思えます。

関数から一度離れて考えてもらえるには、どうすれば良いのか
ちょっとわかりません。。。(^^;)
遠藤さんが書かれている、オブジェクトの気持ちになるというのが
良いのかもしれません。


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