トップページ⇒tech
1001コメント374KB

〔隔離〕デザインパターンは本当に必要か?〔スレ〕

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/06/21(火) 19:09:56
そもそもデザインパターン自体どうなのよ?って話はここでやれ。
0263デフォルトの名無しさん2005/06/25(土) 01:30:31
まぁ文字列渡すよりは、
・コンフィギュレーション選択用の定数か、
・コンフィギュレーションを表すオブジェクト
を渡すべき
0264デフォルトの名無しさん2005/06/25(土) 01:32:54
>>260
それは「グローバル変数」だ。悪。

シングルトンでは「状態のないもの」を表現する。
たとえば、「ストラテジーパターン」で使うストラテジーオブジェクトとか、
「ステートパターン」で使うステートオブジェクトとか。
「ファクトリー」もそうだ。
0265デフォルトの名無しさん2005/06/25(土) 01:34:21
>>257
オブザーバーパターンとのかみ合わせを考えてみて。
public class Enemy {
 addObserver(ScoreSystem ss) {}
}
↑こうなってた場合、継承が必要。

public interface Observer {}
public class Enemy {
 addObserver(Observer observer){}
}
↑こうしとかないオマイが馬鹿と言われれば、だよね〜
としか言い様がない気もするが・・・・・・
02662342005/06/25(土) 01:34:27
>>254
え?
ぼくの認識では、メンバ変数はすべからく「状態」だと思っているのですが
間違いですか?

なんか、ちょっとはつみみな所見です。
02672342005/06/25(土) 01:36:31
>>265
いやその、共存する必要が無いのであれば、インタフェースを変えずに
スコアシステムの「実装」を変えればいいだけなのではないかと。

なにか勘違いしていますか?ぼくは
02682342005/06/25(土) 01:37:33
>>262

それはちょっとSingletonといいつつFactory風でもありますね。
そういうニーズがある場合には、確かに意義がある気がします。


あまりそういうケースが多くは無い気はしますが。
0269デフォルトの名無しさん2005/06/25(土) 01:40:49
デザパタ役に立って無いよ。
そろって馬鹿だな。
デザパタとか別にしても。
0270259NGNG
>>260
いまいちやりたいことが分からないなぁ…。
Singletonが1種類のオブジェクトしか返さなくて、
将来その仕様に変更がないと言い切れるなら
いっそ状態もstatic管理でいいと思う。要するにSingleton不要。

デザパタは仕様変更に柔軟に対応するための手段だと思うから。
0271デフォルトの名無しさん2005/06/25(土) 01:42:57
>>264
このスレ読んでると、どんどん悪い癖、迷信に染まっていく傾向があるな。
状態はグローバル変数だから駄目?
それはあんたの信念であって、広く認められているSingletonの定義より狭いやん。
例えばアプリケーションの設定を Singletonに置くとして、
設定を変更する事は充分ありえる。つまり、Singletonに状態を持たせる事は充分有り得る。

GoF日本語版 p138
◎結果
Singletonパターンの効果を次にあげる。

1.インスタンスへのアクセスを制御する。(詳細略:唯一のインスタンスなのでアクセスチェックが簡単)
2.名前空間を減らす。Singletonパターンはグローバル変数の改良である。唯一のインスタンスを格納するグローバル変数 (注: C++, Smalltalk)を宣言する必要はなくなる。
3.オペレーションや内部表現を詳細化できる。(詳細略:Singleton のサブクラス化に関する話)
4.インスタンスの数を変えることができる。(詳細略:インスタンス数を2つ以上に変更する事も容易)
5.クラスオペレーションよりも柔軟である。(詳細略)
0272デフォルトの名無しさん2005/06/25(土) 01:43:38
>>270
Visitorが状態を持たないとき、
それでもオマイさんは
Visitorをnewしますか?
02732342005/06/25(土) 01:43:59
>>270
いやその、「仕様変更」に対するデフォルトの対応が「継承」である、
というほうがぼくにとっては不自然なのですが。

たとえばオブジェクトのシリアライズ方式がv1とv2で変わっていて
両者に対応しなければならない、とかいうケースであれば、継承を
使うのは理解できます。

しかし、そもそも「唯一」であったものに、「継承」を適用するケース
って、そんなに多いのかな、と。普通、継承は、複数のものの差異を
選択的に無視したい場合に用いますよね。単純化のしすぎですが。
0274デフォルトの名無しさん2005/06/25(土) 01:45:29


  つまりさ、このスレの白熱議論っつうのは、
  すべからく >>264みたいな素人の迷信暴言が発端なわけ。

  くだらねぇんだよおまぃらの議論は
0275デフォルトの名無しさん2005/06/25(土) 01:45:47
>>271
GoF本にはそんなこと書いてなかったけど
一体いつ定義されたの?
02762342005/06/25(土) 01:45:57
ぼくのほうが知
0277デフォルトの名無しさん2005/06/25(土) 01:46:13
>>274
面白い議論キボン
0278デフォルトの名無しさん2005/06/25(土) 01:46:26
>>275
 恥を知れクズが
02792342005/06/25(土) 01:46:38
とぎれた
ぼくのほうが素人だもん

とか書こうとしたのに
0280デフォルトの名無しさん2005/06/25(土) 01:48:33
>>278
かかってこいよ厨房w
0281デフォルトの名無しさん2005/06/25(土) 01:48:39
>>266=>>234
おまぃは誤爆してる上、
>>234の定義で>>243するとNullPointerExceptionがおきるつう認識もない・・・
・・・Singleton書いた事あるぅ?(>>262を参照汁)
0282デフォルトの名無しさん2005/06/25(土) 01:49:13
>>267
差分プログラミングと開放/閉鎖原則で検索。
0283デフォルトの名無しさん2005/06/25(土) 01:49:47
>>280は底知れない白痴厨房。GoF本手元に置かずにそんな煽りやってるとは抱腹絶倒だな。
02842342005/06/25(土) 01:50:29
>>281
あ、>>234の例はただの非常に単純化した例ですので。

いいたいことは、メンバを全てstaticで実装し、初期化はstaticコンストラクタ
で行うようなクラスをSingletonの変わりにして何かまずいのか?
ということに過ぎません。
0285デフォルトの名無しさん2005/06/25(土) 01:51:10
>>271の該当ページを読んでみたらぁ?
02862342005/06/25(土) 01:52:42
>>282
メイヤー先生ですか。
私としては、もう使いもしないv1のコードが残っているのは違和感を感じますがね。

それに、元のデザインが非常によくできていて、適切なフックなどが容易されていない
限り、継承してメソッドをオーバーライドするより元のメソッドそのものを
書き換えることのほうが容易であることも多い気がします。
02872342005/06/25(土) 01:53:59
実際、バージョンアップの際に常に継承で対応するという開発手法は
どれぐらい一般的なんでしょうか?

もとのクラスを書き換えるのは、邪悪?
open/close原則を厳密に適用すれば、そういうことになってしまいますね。
0288デフォルトの名無しさん2005/06/25(土) 01:54:51
で?
好きにすりゃえーやん。
漏れは藻舞を説得するつもりはねぇ〜し
0289259NGNG
>>234はSingletonにこだわらないほうがいいと思われ。
もうこれは個人個人の開発スタイルなので。

それでも共同開発時はSingletonをお勧めしたい。
0290デフォルトの名無しさん2005/06/25(土) 02:00:01
>>287
アンチの俺から言わせると、
一般的なわけねーだろ。
あきらかに継承の使い方を間違ってる上に悪用としかいいようがない。
アホだアホ。マジで救いようがねー。
0291デフォルトの名無しさん2005/06/25(土) 02:03:49
哀れなもんだ
煽れる時に煽るだけで、
中身は空っぽだもんな、おまえ
0292デフォルトの名無しさん2005/06/25(土) 02:04:28
>>268
仮想コンストラクタはファクトリとシングルトンの合わせ技だから

ニーズは普通にあると思うよ。
オセロの例に戻ると、プレーヤーを動的に変更したいというのは自然でしょ?
02932342005/06/25(土) 02:04:40
ぼくは、あおりじゃないんだもん(; ;)
0294デフォルトの名無しさん2005/06/25(土) 02:05:42
>>291
オマエモナーw
0295デフォルトの名無しさん2005/06/25(土) 02:06:35
>>284
1つのクラスが複数のstaticメンバ変数を管理するのはいくない。
02962342005/06/25(土) 02:07:54
>>292
ニーズは、あるでしょうね。
ぼくは、実はSingletonでなくていいのに
「いまどきSingletonじゃないと、女のコにモテないぞ」
「グローバル変数はダサ!Bjarne stroustrupが何と言おうと絞め殺せ」
「static記憶クラス?そんなん、石器時代の遺物でしょ?」

とかそんな理由でSingletonにされているケースも、結構おおいんじゃないの?

と、そういいたかっただけです。
02972342005/06/25(土) 02:08:21
>>295
それは、なぜでしょうか。
0298デフォルトの名無しさん2005/06/25(土) 02:08:44
>>291
文体と主張だけで彼は特定できる。
だから、スルーして淡々と進めてるだろ?お前さんもスルーするよろし。
0299デフォルトの名無しさん2005/06/25(土) 02:10:45
デザパタ信者は巣に帰れよ。
http://pc8.2ch.net/test/read.cgi/tech/1119158274/l50

ここでデザパタを使う前提の話をするな。
ここはデザパタの存在の可否を決めるスレだ。

#大体、デザパタなんて誰も使ってないんだから過疎スレで
#まとまってろってのw
#アンチをこっちに隔離したとかほざいてたくせにアンチ追い出したら
#ただの過疎スレになってやんのwバーカw
0300デフォルトの名無しさん2005/06/25(土) 02:11:45
>>298
ここじゃ荒らしはお前の方なのw
わかったらさっさと過疎スレ帰れよw
0301デフォルトの名無しさん2005/06/25(土) 02:12:20
>>297
クラスの役割が訳わかんなくなるから。
0302デフォルトの名無しさん2005/06/25(土) 02:13:14
>>299-300
哀れな奴
0303デフォルトの名無しさん2005/06/25(土) 02:13:38
>>302
ヒント:スルー
0304デフォルトの名無しさん2005/06/25(土) 02:14:54
>>302-303
本気で帰ってよ。
デザパタ語るなら向こうが本スレだからw
03052342005/06/25(土) 02:15:01
>>301
ぼくは頭が悪いので、やはりそれでは理解できませんね。

確かに全てをstaticで実装すれば、クラスはただのグローバル変数+関数と
それをつつむnamespaceに同等のものになるでしょう。

で、それが何か問題なのですか?
0306デフォルトの名無しさん2005/06/25(土) 02:16:01
>>305
>何か問題なのですか?
だからここはデザパタの可否を決めるスレだっつってんだろ!
荒らしが!
0307デフォルトの名無しさん2005/06/25(土) 02:18:16
>>305
だいたい、何、頭に血上らせて必死におばかな議論してんだ、厨房。
グローバル変数を1つも使わないプログラムとかみたことないのか?
使ってる時点でレベル低すぎだってのにいらいらすんだよ。
お前みたいな馬鹿みてると。
0308デフォルトの名無しさん2005/06/25(土) 02:18:25
>>296の発言で、もう>>234はネタ決定だな。
わざわざSingletonが当てはまらない想定を持ち出して煽ってるんだから、
別にSingleton勧めるいわれはないじゃん。

>>234もそろそろ初心者プログラミング相談室にでも相談してみたらどう?
03092342005/06/25(土) 02:19:24
>>295さんの主張で一番よく分からないのは、
「1コのstaticメンバならOKだが、複数だとNGになる」
という理由です。

そこのところをもう少し分かりやすく説明していただけませんか。
寡聞にして聞いたことの無い主張なものですから。
0310デフォルトの名無しさん2005/06/25(土) 02:19:33
>>307も変な奴だな。
Singletonはグローバル変数の代わりをスコープに入れている。
つか、Javaじゃグローバル変数なんてないし。
0311デフォルトの名無しさん2005/06/25(土) 02:19:46
>>305
そういうことすると、そのクラスが何してるか(何を管理しているクラスなのか)、
後から見た人はわかんないでしょ。コード追っていかないと。
だからクラスの役割ははっきりさせる必要がある。
0312デフォルトの名無しさん2005/06/25(土) 02:19:53
>>287
利点もあるし、難点もあるな>継承
Javaなんかだと、最近は継承よりも委譲とインターフェイスを
優先する風潮がある。

ソースの書き換えは、規模が大きくなると変更が他の部分に
影響を与えてドタドタドタっとドミノ倒しになる事がある。
それじゃあ継承ならそうならないかって言うと、まぁそうとも言
い切れんわけだが・・・・・・
まっ、それでinterfaceを多用する風潮が生まれたんだろう。
これならインターフェイスのみを残して新しく書き起こす場合
でも、継承を利用する場合でも、変更部分を局所化できる。
03132342005/06/25(土) 02:20:50
>>308
いやその、パラメタライズされていないgetInstance()を使う
Singletonの例は多いと思うのですが。
パラメタライズされている場合については、了解しました
と言っておきましょう。
0314デフォルトの名無しさん2005/06/25(土) 02:21:03
>>312
>Javaなんかだと、最近は継承よりも委譲とインターフェイスを
>優先する風潮がある。

Java「なんかだと最近」?はぁ?
最初っからそうだよ厨房
0315デフォルトの名無しさん2005/06/25(土) 02:21:24
>>310
はぁ?デザパタ信者ってのは、
グローバル変数の何がまずいのか知らないのか?
アホだな。レベルが低すぎる。
もうちょっと勉強してきてくださいよw
03162342005/06/25(土) 02:22:28
>>311
>>309に答えていただけませんか。やはりよくわからないんですが。
なぜstatic変数が吹く数字なると
「後から見た人はわかんない」ようになるのか。
0317デフォルトの名無しさん2005/06/25(土) 02:23:05
語尾ダブリューの人、なんか話題がtoo oldで哀れ
0318デフォルトの名無しさん2005/06/25(土) 02:24:00
>>316
俺も聞いておきたい。つか、ネタかローカルルールだと思っている。
0319デフォルトの名無しさん2005/06/25(土) 02:24:11
>>311が逃げてるのがよくわかるなw
ほら、本スレに逃げ込めよw
03202342005/06/25(土) 02:24:23
>>312
ぼくがinterfaceに対するプログラミングの一番の恩恵を認識したのは
実はC++のリンク互換性なんですがね。

COMの発想のベースはそこにあります。大変汚いものですが。
0321デフォルトの名無しさん2005/06/25(土) 02:25:20
なんかかなりネタ臭いスレになってきたな。
0322デフォルトの名無しさん2005/06/25(土) 02:26:15
>>321
お前は速く>>309の質問に答えてやれよw
0323デフォルトの名無しさん2005/06/25(土) 02:26:57
>>311, >>316
実は、Singletonってインスタンスが2つ以上あってもいいんだよね。
つか2つ以上生成した時点で、狭義のSingletonとは見なされない傾向があるが。
例えば某所で話題になっていたInstance PoolとかConnection Poolみたいなパターンになっちまう。
0324デフォルトの名無しさん2005/06/25(土) 02:27:55
>>323
だからどうしたんだよ。余計なレスつけんなアホ。
03252342005/06/25(土) 02:28:33
>>323
Poolのようなものならば、PoolManagerが欲しい気がしますね。Singletonの。
0326デフォルトの名無しさん2005/06/25(土) 02:31:24
>>325
お。冴えてるやん。
すると、ダンマリ決め込んでる>>311が回答すべき内容が見えてくる・・・はず・・・なんだが・・・なんともはや
0327デフォルトの名無しさん2005/06/25(土) 02:32:05
>static変数が
デザパタとか関係なく好き嫌いの問題でしょ、単に。
漏れは嫌だけど。
↓こんなコード書いてくるチームメンバがいたらはったおしてやるけどね。

class Sigleton
{
 private static Object A;
 private static Object B;
 ・・・
 private static Object Z;

 static{
  A = new Object();
  B = new Object();
  ・・・
  Z = new Object();
 }

 static public Object getA(){ return A;}
 static public Object getB(){ return B;}
 ・・・
 static public Object getZ(){ return Z;}
}
0328デフォルトの名無しさん2005/06/25(土) 02:32:55
一向にまとまる気配が無いよ>デザパタ
こんなのがコミュニケーションツールでいいんですか?>デザパタ
人によって使い方違ってるじゃないですか?>デザパタ
職場でもこんな戦いをしなきゃいけないんですか?>デザパタ
03293262005/06/25(土) 02:33:17
あぁーあ。せっかく回答が見えかけた(つか見えた)のに、
また訳わかんない主張系の人が、スレを混沌に導く・・・・・・もう飽きたから寝る。
0330デフォルトの名無しさん2005/06/25(土) 02:33:49
>>327
つか、マジで本スレ帰れってw
0331デフォルトの名無しさん2005/06/25(土) 02:34:50
>>329
 お れ の せ い に な る の は な に か ち が う き が す る ! (笑)
03322342005/06/25(土) 02:40:17
>>327
ただの好き嫌いの問題であれば、ぼくの>>296の主張はあながち
ウソでもなかったようですね。

ちなみにそれによっていちいちgetInstance()を書かなければならないことを
あなたは面倒であると考えたことはないのでしょうか?
0333259NGNG
>>329
何に対する回答だ??回答以前に問題が明確でないんだよ。論点あちこち行ってるじゃん。
0334デフォルトの名無しさん2005/06/25(土) 02:42:40
こっちの方が盛り上がってるのがウケル。
こっちをデザパタスレにしようよ。
0335寝ぼけまなこでレス2005/06/25(土) 02:44:06
>>333
 >>311
0336寝ぼけまなこでレス2005/06/25(土) 02:45:15
>>334
 偽デザパタスレ
0337寝ぼけまなこでレス2005/06/25(土) 02:49:49
 
0338デフォルトの名無しさん2005/06/25(土) 02:51:09
厨房の行動パターン
・メール欄に文章
0339259NGNG
>>335
static管理したらクラスの役目がわかりにくくなるって?
インターフェースが同じなら変わらないだろ。論点にもなりゃしないさ。
0340 2005/06/25(土) 02:52:01
 
0341259NGNG
ム板にもIDキボンヌ
0342デフォルトの名無しさん2005/06/25(土) 02:53:21
>>339
 >>323, >>325-326
0343デフォルトの名無しさん2005/06/25(土) 02:54:48
>341
お前そんなんだからいつまでたっても0ポイントなんだよ。
0344デフォルトの名無しさん2005/06/25(土) 02:55:58
で、アンチの反証は?
03453342005/06/25(土) 02:56:29
シングルトンで盛り上がってるのね。
↓static的としてこうするのがいいのか
Singleton.invoke();
↓シングルトン的にこうするのがいいのか
Singleton s = Singleton.getInstance();
s.invoke();
って話ね。

正直、シングルトンだとインスタンスを途中でいじれるぐらいしかメリットないんじゃないかな。
↓例えば、デコレータでシングルトンのインスタンスにちょっと加工するとか、
Singleton s = Singleton.getInstance();
s = new TuikaKinouSingleten(s);
// なにか処理〜
s.invoke();
// なにか処理〜

↓または途中で中身すり替えをするとか。
Singleton s = Singleton.getInstance();
s = new TestYouSingleten(s);
// なにか処理〜
s.invoke();
// なにか処理〜

staticだとそれができなくなるぐらいではないだろうか。
まあ個人の好みで使い分ければよいのではないかと。
0346デフォルトの名無しさん2005/06/25(土) 02:58:56
>>345 GJ.
0347デフォルトの名無しさん2005/06/25(土) 03:00:55
>>334
だからデザパタスレなんて本来はその存在の可否に関する
議論の方がもりあがってたんだってば。

デザパタ自体はシングルトン1つとっても意見はバラバラ。
コミュニケーションツールなんて夢のまた夢。

掲示板じゃ自由に言えるけど、会社じゃ適用に至る明確な理由が必要になる。
そこでデザパタが必要である理由なんて説明できる奴がいるわけが無い。
昔からずっとこんな調子なんだよ。
信者とアンチの聖戦が一番盛り上がるんだから叩きだしたって誰かが追撃してくるんだよ。

構図はいつも
「オブジェクト指向が理解できなくて、デザパタに逃げてきた馬鹿」VS「オブジェクト指向原理主義者」
0348259NGNG
>>342
Poolはわからんが、
インターフェースとドキュメント見りゃ動作が分かるってのが、あるべきクラス設計の姿だろ、
実装に複数のstatic変数使ったからって、それが崩れることがあるのか?
0349259NGNG
>>347
>オブジェクト指向が理解できなくて、デザパタに逃げてきた馬鹿

アンチデザパタ派は何故いつもそう言う。
たとえば>>345がオブジェクト指向を理解できていないように見えるのか?
オブジェクト指向を理解しないとデザパタ理解できないぜ。
0350デフォルトの名無しさん2005/06/25(土) 03:04:55
>>347
 頭悪い議論で盛り上がるのはもう沢山。
 だから隔離されてるんだよおまぃは
03512342005/06/25(土) 03:06:06
>>345
ああなるほど、そういう用例を考えると便利ですね。
でも、加工前にgetInstance()しなきゃいかんのはちょっとカッコ悪いですね。
普通のオブジェクトよりその点がちょっとダーティ。でも逃げ道は在るよ、
というところでしょうか。


>>347
> 構図はいつも
> 「オブジェクト指向が理解できなくて、デザパタに逃げてきた馬鹿」
> VS「オブジェクト指向原理主義者」

ぼくはどっちでもないとおもいます。
0352デフォルトの名無しさん2005/06/25(土) 03:07:27
構図はいつも、「自作自演するアンチ」vs「自作自演するアンチアンチ」
03532342005/06/25(土) 03:07:55
そろそろ
イマドキDIだからSingletonなんかつかわないぜ(プ

とか誰か言うのかと思ってたらそうでもなかったですね
03542342005/06/25(土) 03:08:24
>>352
ぼくは自作自演なんかしてないもん(; ;)
0355デフォルトの名無しさん2005/06/25(土) 03:08:50
基本的に意味不明。
説明汁。
0356デフォルトの名無しさん2005/06/25(土) 03:09:47
なんだServiceLocatorの話か。
0357259NGNG
>>351
待て待て、>>273 で継承を否定しておきながら、それはないだろ。
>>345 は継承なくては実現し得ないんだぞ。
0358デフォルトの名無しさん2005/06/25(土) 03:11:21
template<typename T>
calss singleton
{
static T ret;
public:
static T& get(){return ret;}
template<typename X1>
static T& set(const X1& x){ ret=T(x); return ret;}
template<typename X1,typename X2>
static T& set(const X1& x1,const X2& x2){ret=T(x1,x2);return ret;}
//... X3 X4 X5 ...
};
template<typename T> T singleton<T>::ret;
...
...
singleton<hoge> x;
hoge y = x.set("username");
...
...
vector vec;
...
singleton<vector<char> > v;
v.set(vec.begin(),vec.end());
vector vv=v.get();
...
v.set(1024,'\0');
read(fp,&v.get()[0],v.get().size());
...
class hoge2 : public singleton<hoge2> {}
...
テンプレートかますとそれなりに便利だが。
使い道がいまいち謎だ。
0359デフォルトの名無しさん2005/06/25(土) 03:11:41
どーでもいいですよ。
>>273と>>351で同じ仮定をしなければならない義理があるわけでもなし。
つか、同じ仮定をしつこく主張しつづけたら、議論は進まない。
0360259NGNG
>>345 は継承による仕様変更の典型例だってことを言ってるのよ。

仕様変更に継承を用いることを肯定するなら、この問題は終結するはずなのだが。
0361デフォルトの名無しさん2005/06/25(土) 03:13:10
>>358
 >>271
03622342005/06/25(土) 03:13:46
>>357
ぼくはべつに継承を常に否定してるわけじゃないんですが。
不要な継承を否定してるだけです。

>>345は、インタフェースを合わせるために必要な継承を巧みに使っている
例ですね。
まあ、実際にこういうtechniqueが実際にどれだけ必要になるかといえば、
疑問ですが。
■ このスレッドは過去ログ倉庫に格納されています