- PR -

静的メソッドとインスタンスメソッド

投稿者投稿内容
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2006-09-01 23:09
引用:

R・田中一郎さんの書き込み (2006-09-01 18:55) より:
それなら、僕はログインクラスを作って、必要な時にオブジェクトを生成して、ログインさせる方法をとるでしょうね。


私の場合、例えばログイン先がシステム内で唯一無二な場合なんかは、スタティックなメンバのみを公開するログインクラスを使用したりしてます。シングルトンでもいいけど。

コード:

Public Shared Property Server() As String
Public Shared Property Port() As Integer
Public Shared Function Login(ByVal ID As String, ByVal PASS As String) As UserClass


みたいな。

ログイン先が複数、必要であったり、継承とか多態とかを考慮するならインスタンスメソッドですけどね。

引用:

未記入さんの書き込み (2006-09-01 17:02) より:
現状はログインクラスはなく、静的メソッドであるということでToolクラスなるものに
いろいろな静的メソッドが入っております。


スタティックメソッドのオンパレードにするのであっても、せめて機能単位で名前空間やクラスでグルーピングしといた方が判りやすいような気がします。
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-09-01 23:20
「ログイン」というものをどう捉えるか、という点で基準が分かれると思います。

・ログインを一つのオブジェクトとして捉える(未記入さん式)
→クラスとしてログインを用意しそのクラスのメソッドを用意する

・ログインはオブジェクトでなく振る舞いに近い物として捉える(Iさん式)
→汎用クラスなりモジュールなりにメソッドとして用意する

個人的には、どちらを採ったとしてもそれだけで
「オブジェクト指向ではない」
というところまではいかないと思っています。オブジェクト指向設計かどうかまでは
私には判断つきませんが、オブジェクト指向プログラミングではあると思います。

もし自分が設計するということであれば「ログインはオブジェクトではない」と考えますので
クラスとしては作成せずに、何か別のクラスのメソッドとしてログイン行為を行う
メソッドを用意する・・・と考えます(ユーザークラスとか)。そのメソッド内部で、
ある種ユーティリティクラス的なものに用意した実際にログイン処理を行うメソッドを
利用する形でしょうか。

この辺りはかなり人によって意見は分かれるところと思いますので、
あくまでも個人的な意見としてコメントさせてもらいました。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2006-09-02 01:36
ふと思ったんですけど、Webアプリの場合、静的メソッドだとまったく同時に
2台以上の端末からログインしたら大変なことになりませんか?

デスクトップアプリの場合なら、あまり関係ないのでしょうけど…。
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2006-09-02 01:44
引用:

未記入さんの書き込み (2006-09-01 16:48) より:
・すべてをオブジェクト指向にする必要はない
(VB時代の構造化プログラミング半分。オブジェクト指向半分)


「オブジェクト指向半分」というのは有り得ないです。
あるのは、すべてオブジェクト指向か、すべて(不自然な書き方の)構造化プログラミングです。

オブジェクト指向型の言語で、わざわざ構造化を徹底させるのも無理があるので、
やはりここはオブジェクト指向で記述するのが自然なんでしょうね。

なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-09-02 01:46
引用:

ひらさんの書き込み (2006-09-02 01:36) より:
ふと思ったんですけど、Webアプリの場合、静的メソッドだとまったく同時に
2台以上の端末からログインしたら大変なことになりませんか?


なんでですか??
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-09-02 06:27
引用:

ひらさんの書き込み (2006-09-02 01:36) より:
ふと思ったんですけど、Webアプリの場合、静的メソッドだとまったく同時に
2台以上の端末からログインしたら大変なことになりませんか?


なりません。メソッドがリエントラント(再入可能)か否かと、静的メソッドか否かは全く関係ありません。静的メソッドでも実装が適切なら、リエントラントに出来ます。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2006-09-02 09:20
るぱんです。

ログイン後の状態を持つクラスに
静的(staticな)メソッドをつけたら、問題にはなるでしょうけどね。
まぁ、ログインが静的(staticな)ゆえに、触れるフィールドも
staticになるのでは?

個人的には、それきついなぁ・・・なんて考えたり(笑)

個人的な判断基準を以下に提示(間違ってるかも? 笑)
つっこみお願いします。

個人的なpublic static なメソッドの使用方針:
1.共通部品的な関数クラス
2.外部クラスから、呼びたい意味のある関数
(総務部.書類作成・・・みたいな。)

今回のログインのケースで考えると、
ログインするのがユーザーで、
ログインメソッドを持つユーザークラスを作るのであれば、
インスタンスメソッドになりませんか?

いわゆる、webアプリで、
webサービスとしてのログインクラスであれば、
認証する関数クラスと言う位置づけになるような気がするのですが・・・。

いかがでしょう?
_________________
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-09-02 09:33
う〜ん。情報が小出しにされるから、どんどん長引く典型的なスレッド。。。


 他人の言葉を借りて説得しようとしても、その言葉に力はありません。おそらく徒労に終わります。
Iさんではなく、まず自分を説得する(納得させる)ほうがいいと思います。
 プログラミング スタイルの変遷を紐解けば、あるいは、理解できるかもしれません。
必要があって、変遷しています。
なぜ必要なのか。何が違うのか。
どういう要望があって、オブジェクト指向が生まれたのか。
その辺が理解できれば、説得できるだけの知識が得られると思います。

 いまだに「構造化 "以前" の状態でもいいじゃないか」という人はいますから。


 で、「クラス メソッドでなくてもいいじゃん」と考える人がいるなら、設計(役割や責務の切り分け)がまずいのかもしれません。

スキルアップ/キャリアアップ(JOB@IT)