- - PR -
静的メソッドとインスタンスメソッド
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-09-01 12:39
それってインスタンスメソッドか静的メソッドかの問題じゃなくて オブジェクト指向設計か否かの問題じゃないですか? 最初の方法が、Iさんの推す方法ならば、Iさんはオブジェクト指向を全く取り入れようとしていないんじゃないですか? それとも、Iさんもオブジェクト指向を取り入れようとしているけど、方向性が間違ってるんでしょうか? オブジェクト指向設計なら、ログインユーザーはオブジェクト化できるのだから 未記入さんの言うとおり、ログインユーザークラスにログインIDというフィールドを用意してやって、 3つのメソッドにはログインID引数は不要(ログインIDフィールドを利用)とするのが正しいです。 | ||||
|
投稿日時: 2006-09-01 12:56
んー…?認証がらみの話なんでしょうか。
User user = new User(ID, PASS); 認証.Login(user); : 認証.Logout(user); こんな感じかなあ、私は…。 もっとも、staticかinstanceかは場合によりますが。 #Open/CloseをLogin/Logoutに修正。フォームでOpenメソッドを…とか空目してたあ。 [ メッセージ編集済み 編集者: mio 編集日時 2006-09-01 17:06 ] | ||||
|
投稿日時: 2006-09-01 12:57
私もけんじさんの書かれた内容に同意で、設計思想的な話題だと思います。
オブジェクト指向設計として「ログインユーザーを表すクラス」があるならば そのクラスには特定の振る舞いとして3つなりメソッドが用意されるというのは 間違っていないと思います。 Iさんという方が考えているのがオブジェクト指向設計としてという話なのか、 構造化としての観点からの話なのかによって説得するための材料も 変えた方がいいのではないでしょうか。 個人的には、Iさんという方はオブジェクト指向設計ではない設計思想だと思います のでメソッドのメリット、という観点からの説得は難しいのではないでしょうか。 | ||||
|
投稿日時: 2006-09-01 13:34
たぶんIさんは
オブジェクト指向を取り入れたいが、方向性が間違っている。 クラス設計を理解していない。 そして私は クラス設計やオブジェクト指向をIさんに説明できるほど理解していない。 静的メソッドにするかいなかは クラス設計の段階で「どのクラスにも含むことができない者達が静的メソッドになる。」と私は理解しております。 | ||||
|
投稿日時: 2006-09-01 13:53
class DataClass {
string GetName() { // このインスタンス内のフィールド変数などを使って処理 } static string GetName(DataClass data) { // 指定されたインスタンスのプロパティなどを使って処理 } } 同じクラスに書いてしまうとかえって紛らわしいかもしれませんが、 そのメソッドが引数だけで処理ができる内容であれば静的でOK、 インスタンスの状態などに依存した処理をするならインスタンスメソッドかな。 ただ、静的にするとオーバーライドしたくなったときに困ります。 そのクラスの役割などが重要なので、 一般論ではどちらがよいという答えにはたどり着かない気がします。 | ||||
|
投稿日時: 2006-09-01 14:09
それはちょっと違うのではないでしょうか。 実際、.NET Frameworkの中にはインスタンスメソッドと静的メソッドの両方を持ったクラスが沢山ありますよね。 FileやDirectory系のようにインスタンスメソッドと静的メソッドを別々に両方用意しているクラスなんてのもありますね。(ここら辺はインスタンスを作るコストと単発で使うか連続して使うかによるんですかね) [ メッセージ編集済み 編集者: minminnana 編集日時 2006-09-01 14:10 ] | ||||
|
投稿日時: 2006-09-01 14:10
そのコンストラクタと3つのメソッドを持つクラスは、なんという名称でしょうか?どんなことを担うクラスでしょうか? オブジェクトとして意義のある分担があり、分かりやすい名前が付けられるなら、クラスにしたほうが良いと思います。 しかし、名称が思い浮かばず、ただ、3回呼ばれるというという性格のものならば、「関数」を「乱立」させたほうが良いと思います。 #というようなことを伝説の鈴木さんから聞いたことがあります。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||
|
投稿日時: 2006-09-01 15:11
呼び出し側からみて、1機能として1度呼び出すだけということなら、僕も I さんに賛成です。 逆に、あなたがインスタンスメソッドに拘る理由は何ですか? |