- - PR -
JAVAにおけるstaticメソッド
| 投稿者 | 投稿内容 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-05-08 14:35
>これも一つの方法ですが、適切なモデリングとは思えません。
「適切なモデリング」ねえ.... 何を持って「適切」という単語を使っているのやら. >AListのようなクラスを定義して >class AList extends ArrayList { >... ここで実装の継承を使うことは,クラス間の依存性を増やすだけで メリットはまずないと考えます. そもそも「モデル化」と「実装の継承」と,一体なんの関係があるのやら. | ||||||||||||||||||||
|
投稿日時: 2003-05-08 14:36
こういう、特定のCollection実装を継承して機能を追加するのは、 小回りがきかず、うまくいかなくなることの方が多いです。 Aというクラスがあるとき、A(もしくはそのサブクラス)のインスタンスを 格納するCollectionに対する操作は、基本的にstaticメソッドとして 私は実装するようにしています。
こうしておくと、
とか、
とか、
のように、コレクションフレームワークを最大限に活用することができます。 ArrayListを継承するやり方だと、ここまでの柔軟性は得られません。 [ メッセージ編集済み 編集者: yamasa 編集日時 2003-05-09 00:23 ] | ||||||||||||||||||||
|
投稿日時: 2003-05-08 15:35
どうして理解してくれないのか・・・
継承自体に意味はありません。 あくまで実装例でしょ。 そういう機能を追加したいのであれば、
例外処理はおいといて・・こういう実装とHashMapを拡張したAMapを別に作るべきでしょう。 #Collection.copyはマズイので修正 [ メッセージ編集済み 編集者: zaxx_MD 編集日時 2003-05-08 16:46 ] | ||||||||||||||||||||
|
投稿日時: 2003-05-08 16:27
それは、貴方の意見の中に、その根拠についての記述がないからです。 「〜だと思います」「〜すべきです」と言うだけで、何故そう考えたのか という根拠が示されていなければ、その発言に説得力はありません。 私は、getSum()のようなメソッドはstaticにすべきだということを述べるにあたり、 その根拠としてコレクションフレームワークとの親和性の高さを 実例を挙げながら説明しました。 貴方がArrayListやHashMapを拡張する実装のほうが良いと考える理由はなんですか? | ||||||||||||||||||||
|
投稿日時: 2003-05-08 16:55
たしかにコードを交えながら説明していませんが、
元もとの意図は2レス目から書いていますので、 あえて再度同じ文章を書くことはしていません。 コレクションフレームワークと親和性が高いとは何を指していますか? それこそ根拠の無い言い訳だと思います。 どちらの実装が優れているかという問題はstaticであるべきかどうかとは別問題です。 Aというクラスに対してモデリングをする努力を放棄していませんか? AのリストであるというモデリングをされたAListという実装をする努力を放棄していませんか? | ||||||||||||||||||||
|
投稿日時: 2003-05-08 17:53
いやー、皆さんお熱い意見ありがとうございます(笑)
えっと、何回かこのスレッドを読み直しているのですが、最初に知りたかったことがいまいちはっきりしないので(私の理解力が無いせいかもしれませんが。あ、最初の質問の仕方が悪かったかな?)質問し直させていただきます。 アプリケーションの規模や、他のクラスとの関わり、etcなど条件はいろいろあるのでしょうが、staticメソッドを作成する再にそのメソッドをstaticにした境界線みたいなものってなんでしょうか? この質問も「これが正解!!」というものは無いかと思いますが、皆さんの意見をお聞かせ願えませんか? 余談ですが、なぜこのような質問をするかといいますと、もともと私はVBオンリーの開発者でしたのでコーディングを行う際には手続き型チックなソースが浮かびやすいのです(ただいま、一生懸命オブジェクト指向的な考えに修正中です)。 VBをやっていた方にはわかっていただけると思いますが、私のように手続き型にかたよった人間がオブジェクト指向言語に入ると、staticメソッドがとても便利な物に見えてしまいます。 staticメソッドは極力使用しないほうがいいということは「わかって」はいますが「理解」はしてい無いように思います。 最初のほうにご指摘があったように「クラス変数とインスタンス変数とメソッド変数の挙動」について学習はしますが、皆さんの経験(あ、もちろん裏づけのある)からくる意見をお聞かせいただけると幸いです。 | ||||||||||||||||||||
|
投稿日時: 2003-05-08 18:43
>元もとの意図は2レス目から書いていますので、
>あえて再度同じ文章を書くことはしていません。 あいも変わらず「適切なモデリング」「モデリングが崩れるから良くない」etc. つまり根拠は「モデリング」ということですかね. 一体どんな勉強をしたのか知りたいものです. | ||||||||||||||||||||
|
投稿日時: 2003-05-08 18:54
>VBをやっていた方にはわかっていただけると思いますが、私のように手続き型に
>かたよった人間がオブジェクト指向言語に入ると、staticメソッドがとても便利な >物に見えてしまいます。 私もN88-Basic,Cを経てJavaに来てますからその辺は分からなくもないですよ. 多分,問題なのはstaticメソッドかnon-staticメソッドかではなく, 「より適切なOOPらしい,良い設計はどんなものか」 だと思います. #決してモデリングじゃありません. 設計さえ決まれば,どの部分がインスタンスになり,どの部分が インスタンスメソッドになり,どの部分がstaticメソッドになるか,概ね決まって きます.最後までどちらにするか悩む部分もありますが,こういう部分はどちらで 実装しても構わない場合が多かったりします. で,どうすれば良い設計ができるかですが,これについては一言では 説明できません.(それができるなら,私はOOPの講習会を開いて大金持ちに なれるでしょう.(^^) )GoFのデザインパターンとかリファクタリングとか そう言った良書でも読みながら,少しずつ真似をして理解を深めていく 他ないと思います. | ||||||||||||||||||||
