- - PR -
静的メソッドとインスタンスメソッド
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-01 23:09
私の場合、例えばログイン先がシステム内で唯一無二な場合なんかは、スタティックなメンバのみを公開するログインクラスを使用したりしてます。シングルトンでもいいけど。
みたいな。 ログイン先が複数、必要であったり、継承とか多態とかを考慮するならインスタンスメソッドですけどね。
スタティックメソッドのオンパレードにするのであっても、せめて機能単位で名前空間やクラスでグルーピングしといた方が判りやすいような気がします。 | ||||||||||||
|
投稿日時: 2006-09-01 23:20
「ログイン」というものをどう捉えるか、という点で基準が分かれると思います。
・ログインを一つのオブジェクトとして捉える(未記入さん式) →クラスとしてログインを用意しそのクラスのメソッドを用意する ・ログインはオブジェクトでなく振る舞いに近い物として捉える(Iさん式) →汎用クラスなりモジュールなりにメソッドとして用意する 個人的には、どちらを採ったとしてもそれだけで 「オブジェクト指向ではない」 というところまではいかないと思っています。オブジェクト指向設計かどうかまでは 私には判断つきませんが、オブジェクト指向プログラミングではあると思います。 もし自分が設計するということであれば「ログインはオブジェクトではない」と考えますので クラスとしては作成せずに、何か別のクラスのメソッドとしてログイン行為を行う メソッドを用意する・・・と考えます(ユーザークラスとか)。そのメソッド内部で、 ある種ユーティリティクラス的なものに用意した実際にログイン処理を行うメソッドを 利用する形でしょうか。 この辺りはかなり人によって意見は分かれるところと思いますので、 あくまでも個人的な意見としてコメントさせてもらいました。 | ||||||||||||
|
投稿日時: 2006-09-02 01:36
ふと思ったんですけど、Webアプリの場合、静的メソッドだとまったく同時に
2台以上の端末からログインしたら大変なことになりませんか? デスクトップアプリの場合なら、あまり関係ないのでしょうけど…。 | ||||||||||||
|
投稿日時: 2006-09-02 01:44
「オブジェクト指向半分」というのは有り得ないです。 あるのは、すべてオブジェクト指向か、すべて(不自然な書き方の)構造化プログラミングです。 オブジェクト指向型の言語で、わざわざ構造化を徹底させるのも無理があるので、 やはりここはオブジェクト指向で記述するのが自然なんでしょうね。 | ||||||||||||
|
投稿日時: 2006-09-02 01:46
なんでですか?? | ||||||||||||
|
投稿日時: 2006-09-02 06:27
なりません。メソッドがリエントラント(再入可能)か否かと、静的メソッドか否かは全く関係ありません。静的メソッドでも実装が適切なら、リエントラントに出来ます。 | ||||||||||||
|
投稿日時: 2006-09-02 09:20
るぱんです。
ログイン後の状態を持つクラスに 静的(staticな)メソッドをつけたら、問題にはなるでしょうけどね。 まぁ、ログインが静的(staticな)ゆえに、触れるフィールドも staticになるのでは? 個人的には、それきついなぁ・・・なんて考えたり(笑) 個人的な判断基準を以下に提示(間違ってるかも? 笑) つっこみお願いします。 個人的なpublic static なメソッドの使用方針: 1.共通部品的な関数クラス 2.外部クラスから、呼びたい意味のある関数 (総務部.書類作成・・・みたいな。) 今回のログインのケースで考えると、 ログインするのがユーザーで、 ログインメソッドを持つユーザークラスを作るのであれば、 インスタンスメソッドになりませんか? いわゆる、webアプリで、 webサービスとしてのログインクラスであれば、 認証する関数クラスと言う位置づけになるような気がするのですが・・・。 いかがでしょう? _________________ | ||||||||||||
|
投稿日時: 2006-09-02 09:33
う〜ん。情報が小出しにされるから、どんどん長引く典型的なスレッド。。。
他人の言葉を借りて説得しようとしても、その言葉に力はありません。おそらく徒労に終わります。 Iさんではなく、まず自分を説得する(納得させる)ほうがいいと思います。 プログラミング スタイルの変遷を紐解けば、あるいは、理解できるかもしれません。 必要があって、変遷しています。 なぜ必要なのか。何が違うのか。 どういう要望があって、オブジェクト指向が生まれたのか。 その辺が理解できれば、説得できるだけの知識が得られると思います。 いまだに「構造化 "以前" の状態でもいいじゃないか」という人はいますから。 で、「クラス メソッドでなくてもいいじゃん」と考える人がいるなら、設計(役割や責務の切り分け)がまずいのかもしれません。 |