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

デザインパターンの単純そうな質問

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
GoFのデザインパターンを読んだけど、分からない事があるよ〜
という人のためのスレ。
0002デフォルトの名無しさんNGNG
PROTOTYPEパターンの適用可能性の最初の項目が何をいいたいのか分かりません。
そもそもダイナミックローディングとは、どういった操作の事をいっているのでしょうか?

ちなみに、本は、日本語版の初版です。
0003デフォルトの名無しさんNGNG
>>2
俺なんか結城さんの本を読んでもプロトタイプわからん。
0004デフォルトの名無しさんNGNG
あれれ?デザパタスレって、まだ無いんだっけ!

本の話は…持ってない人が辛いんで、
該当部分を引用するとか、もしあればURLを書くとか
(英語しかなくてもとりあえずないよりはマシ)
してくれると助かる。
00052NGNG
>>4
大昔にはあったのかも知れないけれど、探したら無かった。

で、該当する箇所を引用します。

インスタンス化されるクラスが、例えば、ダイナミックローディングにより、
実行時に明らかになる場合。
(p128、デザインパターン初版、SOFTBANK社)

これだけじゃ、分からないかなぁ。やっぱり。
0006適当にNGNG
[ja]
Java言語で学ぶデザインパターン入門
http://www.hyuki.com/dp/
Javaプログラマのためのデザインパターン入門
http://objectclub.esm.co.jp/DPforJavaProgrammers/DPforJavaProgrammers.html
デザインパターンの骸骨たち
http://www11.u-page.so-net.ne.jp/tk9/ys_oota/mdp/

[en]
Patterns Home Page
http://hillside.net/patterns/
00072NGNG
>>6
見た事の無いWebページもありますので、読んでみます。
ありがとう。
0008追加NGNG
[ja]
デザインパターン with JAVA
http://www.ff.iij4u.or.jp/~ahirusan/Java/patterns/patternIndex.html
Javaなページ
http://home.catv.ne.jp/dd/chiba/ken/Java/JavaMain.html
デザインパターン入門 (ちとわかりずらい…)
http://www.netlaputa.ne.jp/~hijk/study/oo/designpattern.html
0009デフォルトの名無しさんNGNG
>>5
>インスタンス化されるクラスが、例えば、ダイナミックローディングにより
>実行時に明らかになる場合。
>これだけじゃ、分からないかなぁ。やっぱり。

…わかっちゃった(^^;

インスタンス1号を作るとき、そのクラスとして
後からロードされるクラスを使いましょう、って場合だ。

で、インスタンス2号を作りたくなった辺りのソースでは
インスタンス1号は(Scopeとか的に)見えているんだが
そのクラスは見えないようになっている、という場合だ。

じゃあインスタンス1号に2号を(本人と同じクラスで)
作らせちゃえばいいじゃん、という話。

喩え1:
謎の悪の組織デスト某に作られた仮面ライダ1号は
戦いに疲れて仲間が欲しくなったのだが、
いまさら謎の悪の組織に再びのこのこ出向くわけにもいかない。
しかたがないので自分の体を真似して自力で2号を作った。

喩え2:
ゲイツのソフトだろうがLinuxだろうが
元ファイルがあればピーコするのは同じ手順でできる!(わら

うーん。でもこれだと、Factory系のパターンとの違いが
際立たないというか、なんか変だな。
俺間違いかも。突っ込み歓迎。
0010さらにNGNG
デザインパターン
http://piza.2ch.net/tech/kako/976/976074878.html
「デザインパターンって、○○のようなもんだよ」
http://piza.2ch.net/test/read.cgi?bbs=tech&key=994690114

mogura (2chLinuxer氏に敬礼!)
http://2ch.dyn.to/
00112NGNG
>>9
私もわかったかも。

Cloneオペレーションを定義を定義してある、Prototypeがまずある。
で、Prototypeの派生クラスConcretePrototypeA、ConcretePrototypeB
と言ったクラスがある。

ロードをする部分(メッソドやクラス)は、具象クラスの名前なりがわかっているわけだ。

でも、実際にロードされたクラスを使うクラスでは、具象クラスを知らない。
けれど、新たにインスタンスが欲しい。
しかし、具象クラスについて知らないから、コンストラクタを呼べない。

結果、複製すればいいということになる。
ポリモルフィズムで適切なCloneメソッドが呼ばれるから。

という感じ?
00122NGNG
 ただ、クラスをダイナミックローディングする仕組みを使ったことが
無いから、根本的なところが間違っているかも。
0013デフォルトの名無しさんNGNG
>>8
>>10
親切な人だ。
ありがとうございます。
00149NGNG
書き方がいまいち悪かったと反省。

>インスタンス1号を作るとき、そのクラスとして
>後からロードされるクラスを使いましょう、って場合だ。

ここでいう「後」とは、そのプログラムが起動された後という意味のつもり。
動的ロードがあたりまえのように出来る言語では、
大騒ぎするような話じゃあないわな。
C++だと標準では出来ない(VCやC++Bみたいに
色々手を尽くしてそれっぽく実現してる奴はいるが)。
rubyみたいな動的でインタプリタな言語なら
とーぜんのように(すまんmatz氏)ついている機能。

喩え1や2は、そういう意味では悪くないと思う。
インスタンス1号を作る時点では、間接的にせよClassを使えたわけだ。
で、2号の辺りでは間接的だろうがなんだろうがそのClassを
「再びソース上で」呼ぶことが出来ない、という状態。
00159NGNG
ごちゃごちゃ言うまでもなく11で既に判ってるようなんで
まぁいいか。

>ポリモルフィズムで適切なCloneメソッドが呼ばれるから。

それそれ。

ただ、蛇足だがObjectiveCやDelphiだと
「クラスメソッドのポリモルフィズム」を使えるので、
そーいう意味でのCloneは、あんまり必要なかったりする。

#もちろん、インスタンス1号(の状態)を2号に含めたい場合は、
#ピーコ(Clone)のほうがずっと自然なやり方だが。
#今回の話はやっぱりどっちかってーとBuilder系パターンの話が
#微妙に混線してるような気がする。

Smalltalkやrubyなんかでも指摘されていることだが、
デザパタのいくつかは、対象言語の柔軟性の低さ
(つまりあるパターンを直接ライブラリ化できないこと)を
パターンということにしてカバーしている(わら)という節もある。
00162NGNG
>>15
ありがとうございます。
どうにか分かりました。

>デザパタのいくつかは、対象言語の柔軟性の低さ
>(つまりあるパターンを直接ライブラリ化できないこと)を
>パターンということにしてカバーしている(わら)という節もある。
みたいですね。
 私はSmalltalkは知らないのでよくわからないのですが、
「Smalltalkではあまりこの使い方に意味は無い」といった感じの
記述を、デザインパターンの本の中でしばしば見かけます。
00171NGNG
たまには上げてみる。
かなり人気無いな、このスレ。
ターゲットを絞りすぎたのかも。
「パターンを全般的に扱うスレ」とかにした方が、良かったかなぁ…。
0018うむNGNG
さいきんデザインパターンを勉強しはじめたが・・・・

ククク・・・・
       まったくわからんよ・・・
0019デフォルトの名無しさんNGNG
Singletonパターンしか使ってないなぁ・・・・。
SingletonDialog便利(笑) 
0020デフォルトの名無しさんNGNG
AbstractFactory
の工場は、
いろんな部品をまとめて提供するもの
て解釈でいいですか?
0021デフォルトの名無しさんNGNG
>>20 全然違う。
0022デフォルトの名無しさんNGNG
>>20
ナニ(1つでも複数でも)を作るかが、
大筋は決まってるんだけど、
完全に具体的というほどにはまだ
決まってない(=Abstract)、という工場だ。

たとえばプラモ自動車用に
10種類くらいの部品を作る工場で
その設計とかも大抵出来ているし
金型まで用意済んでるんだが、
その金型にナニ色の樹脂を流しこんで製品作るか?は
まだ決まってない、みたいな工場(のクラス)。

で、その工場クラスを継承(カスタマイズ)して、
赤プラモ製造工場や、青プラモ製造工場を、作るわけな。

ところで結城氏の本。
「自分の言葉」で語っている(しかもドキュじゃない)のは
素晴らしいが、それ故なのか、時折過不足を感じる記述も有るなあ。
90点以上の出来(=並大抵のもんじゃない)なのは確かだが。
0023デフォルトの名無しさんNGNG
ありがとう!
ぜんぜん違うっていわれたけど、そうでもなかったみたい
0024名無しさんNGNG
Javaをつかったデザインパターンの本は3冊読んだけど
結城氏の本は簡単でネチっこく説明してくれてるので一番良いと思った。

ところで、結城氏の本のPrototypeの説明(P75)にある
「種類が多すぎてクラスにまとめられない場合」
にProtptypeを使えと言うのが良くわかんない。
0025デフォルトの名無しさんNGNG
>>24
「デザインパターン(英語版)」のP119-120に、
Specifying new object by varying valuse.
(中略)
This kind of design lets users define new "classes" without programming.
って書いてあり、これのことを言っているのだと思う。

で、何がいっている文章かというと、例えば楽譜エディタがあった時に、音符を
表すクラスがたくさん必要になる。
二分音符クラスやら、四分音符クラスとか。

そこで、「音符クラス」を用意しておいて、異なる「長さ」と「ビットマップ」で
初期化したインスタンスを用意しておいて、それのクローンを作るようにすればいい。

…っていうようなことが書いてあるように俺には読めるのだけど、二分音符クラス
やら、四分音符クラスをまとめて「音符クラス」にするのって普通の発想だよなぁ…。

うーん。
ということで、結局俺もよく分からなかったり。
0026デフォルトの名無しさんNGNG
>>25
なるほど。prototypeの使い道がようやく見えた。
四分音符が楽譜上に置かれているとして、ユーザーがその音符をコピーしたいとき、
単純に四分音符を生成するのではなく、
とある(種類不明の)音符をコピーした結果として四分音符が生成されると。
そういうときに使うのか。
0027dNGNG
めめんと!
めめんと!
0028デフォルトの名無しさんNGNG
>>27
おれもめめんとなんて単語、あの本読むまで知らなかったよ
0029デフォルトの名無しさんNGNG
Prototypeって、「インスタンスのコピーをして何が面白いんだろう?」って
思っていたけど、「具象クラスを知らなくても、インスタンス化ラインスタンスが
生成できる」って側面に注目すべきだったみたいだな。
ちょい、納得。
0030デフォルトの名無しさんNGNG
GoF本(和訳第二版)を読んだけど、Prototypeパターンは

ちょっとずつ違う似たような図形をいっぱい並べて使うようなアプリで、
仕様のホットスポットが「図形のバリエーションが今後も追加されると思われ」
だった場合に、図形ひとつづつをいちいちサブクラスとして定義しようとすると
クラスの数が爆発してしまう。

という場合に使うと思った。
0031dこういNGNG
ソースみただけで
これは○○パターンだな とかわかるものなのでしょーかー
0032デフォルトの名無しさんNGNG
>>31
というか逆に、ソースコードを説明する時に、
「これは○△パターンを使って×□を処理してます」とか
設計についてミーティングする時に、
「この部分は□○パターンを使って管理しよう」とか
コミュニケーションのために使うんじゃない?

あとコードの中では意識してイディオム的なクラス名やメソッド名、フィールド名を使って
後から読む人(含む自分)に、そのコードがどういうパターンを使っているか伝わりやすい
ように工夫するとか
003330NGNG
ちょっと補足
つまり、ちょっとずつ違うたくさんのオブジェクトを扱う時に、
それぞれの違いをサブクラスとして表現するのではなく、
同じクラスのインスタンスなんだけど状態が異なるものとして表現すれば、
without programming で種類を増やせるってことね。

だから clone() は状態もコピーするってところが重要になってくる。
0034デフォルトの名無しさんNGNG
出遅れっぽいけど、

>四分音符クラスをまとめて「音符クラス」にするのって普通の発想だよなぁ…。

というかサブクラスの4分音符クラスとかを「作らない」のがあのパターンの味噌。

でも当然だが4分音符を意味するインスタンスは作れなきゃならない。

そういうインスタンスを、クラス定義レベルじゃなくて、実行時の
インスタンスいじり(属性を設定したり他のインスタンスと組み合わせたり)で
作ってしまって(ここまでならBuilderパターンだな)、
しかもそれをピーコすれば同じ「種類」のものがばんばん作れるぞ、
という話。

「種類」を「クラス」で表現しないとならん義務なんか無いよ、ってことね。
勿論、クラスで表現したほうがスッキリする場合はクラスでやるべきだけど。

-----
蛇足。ちょっとひねった使い方だと、作った二代目instanceに
prototype「元」へのポインタを持たせておいて、
共通する属性とかはそっちに委譲しちゃって
二代目は差分しか持たない、なんて手もある。
ProxyパターンやFlyweightパターンとも通じるものがある。

というか、ここまでやったら「Class」の仕掛けを自分で作っているようなもんだ。
なにせ差分プログラミングなのだから(わら
003529NGNG
わけの分からん誤字をやってしまった。
>「具象クラスを知らなくても、インスタンス化ラインスタンスが
インスタンスからインスタンスが、
の間違い。

話の流れからして、どうでも良さそうだけど一応直しておきます。
003629NGNG
>>33
>だから clone() は状態もコピーするってところが重要になってくる。
なるほど…。
じゃあ、本質的には、「コピーする」っていうのが、やはり重要なのか。
0037デフォルトの名無しさんNGNG
age
0038デフォルトの名無しさんNGNG
良スレ保全age
0039デフォルトの名無しさんNGNG
Singletonってよく使うけど、C++だと、誰がDeleteするんだろって
思ったりしない?
特に途中で
if (singleton == 0)
singleton = new Singleton();
return singleton;
なんてインスタンスを作る場合は、使わなくなったら消したくなるような
0040デフォルトの名無しさんNGNG
>>39
やっぱ、プログラム終了時じゃない?
もしくは、メモリが一時的にでも足りなくなった時
0041>39NGNG
namespaceのコンストラクタ・デストラクタ
0042デフォルトの名無しさんNGNG
>>39
>>40の言う通り、普通はプログラム終了時なんだろうね。
でも、「好きにSingletonオブジェクトを消したい」という要望もあるようで、
「パターンハッチング(ピアソン社)」に一つの答えが載っている。

Singletonオブジェクトを消すためのクラスを作って、Singletonのfriendにするんだそうな。
0043>39NGNG
インスタンスの廃棄・再生成時に副作用が無ければこんなのもありかも
これならインスタンスを参照しない限り生成されることも無いし

C++なら安全の為に、最後にClearSingletonする
SingletonDestructorクラスでも作っておけばいいかな

interface

type TSingleton = class(xxx) ... end;
function Singleton: TSingleton;
procedure ClearSingleton; // キャッシュをクリアするくらいの感覚で使う

implementation

// インスタンスの参照を管理するローカル関数
var TSingleton_Instance: TSingleton;

// singletonインスタンスの参照を取得する関数
function Singleton: TSingleton;
begin
 if TSingleton_Instance <> nil then
  // 既に生成されていたらそのまま返す
  Result := TSingleton_Instance
 else
 begin // 生成されていなければ生成して返す
  TSingleton_Instance := TSingleton.Create;
  Result := TSingleton_Instance;
 end;
end;

// 既に生成されていたら廃棄
procedure ClearSingleton;
begin
 if TSingleton_Instance <> nil then
 begin
  TSingleton_Instance.Free;
  TSingleton_Instance := nil;
 end;
end;
0044デフォルトの名無しさんNGNG
ある日の、FactoryMethodパターンに関する私と教授のやりとり。
クラス名は、デザインパターン日本語版、初版のP116の図のもの。

教授「FactoryMethodパターンを使うとどの部分の再利用性が上がるの?」
私 「CreatorクラスとProductクラスの組です。
   Creatorクラスの責務の一部をProductクラスに委譲する構造に
   します。
   するとConcreteProductで、CreatorクラスとProductクラスの
   組の動作をカスタマイズ(なんて言うのが適切なんだろう?)
   する事が出来ます。
   よって、CreatorクラスとProductクラスの組を
   様々なプログラムで使い回すことが出来ます」
教授「それだけ?」
私 「え?」
教授「Clientクラス(図にはないけど、Creatorを使うクラス)と
   Creatorクラスの関係に注目してみなよ」
私 「ClientクラスはCreatorで宣言されているインターフェースしか
   使わない。
   だからConcreteCreatorを差し替えてもClientの変更はしなくて
   良い(実際はConcreteCreatorの生成部分を書き換えないといけないけど)。
   だからClientの再利用性が上がる。ってことですか?」
教授「うーん。分かってないなぁ…」
私 「??」

と、言うやり取りがあったのですけど、教授の真意が分かる人は
いますか?
かなり長い間悩んでいるのだけど、私には分からない…。

その後いくつか質問した結果、
「Clientの再利用性が上がる、という事を教授は言いたいのでは
ないらしい」
と言うところまでは分かったのですが、行き詰まってます…。
0045デフォルトの名無しさんNGNG
>>44
> 「ClientクラスはCreatorで宣言されているインターフェースしか
は「Productで宣言されている…」の方がしっくりくるけど…

そんな言葉尻つかまえて「分かってないなぁ」って訳じゃないよね。
ちゃんと他に再利用性が上がる部分があるんだよね?
うーんなんだろ、帰省の長旅用に丁度良いな、これ。
>>43
くぅ、興味あるのに読めない…smalltalk?
0046デフォルトの名無しさんNGNG
>>45 Delphi。
0047デフォルトの名無しさんNGNG
>>45
PL/SQL
0048デフォルトの名無しさんNGNG
delphiならユニットのfinalizationに解放処理かいてるけど。
004943>48NGNG
Delphiならそうだね。まあC++向けの説明ってことで。
Delphiの場合unit=namespaceだから
finalizationは>41のいうデストラクタにあたると言えるのかも。
0050デフォルトの名無しさんNGNG
age
0051デフォルトの名無しさんNGNG
> > 「ClientクラスはCreatorで宣言されているインターフェースしか
>は「Productで宣言されている…」の方がしっくりくるけど…
ClientはProductのインターフェイスを直接使用する必要は無いよ。
(元の記述のほうが正しい)
普通はCreatorの固定実装部分がProductのインターフェイスを使うね。
もちろんGoF本の「結果」の2で書かれているように、Productのインスタンスを
Client側に返すようなことがある場合はその限りじゃないけど。

> Clientの再利用性が上がる
これは変でしょ。いやある意味正しいかもしれんけど。ConcreteProductを
差し替えることでClientの変更なしに振る舞いを変えた別のアプリケーションを
作るみたいな文脈ではそういえるし。

明らかに再利用されるのは、Creatorの固定実装部分と思うけどどうよ。
大体Creatorって名前は適切じゃないかもしれんね。anOperation内部に
あるStrategyのような構造こそ重要と思う。
乱文ゴメソ
0052Delphiを知らない名無しさんNGNG
>>51
> ClientはProductのインターフェイスを直接使用する必要は無いよ
スマソ。仰るとおりパラレルなの(邦訳GoF本P118)が頭にあったから…。

「Creatorの固定実装部分」ってのはanOperationの実装部を受け持つ
productのことだよね?そうなら漏れも激しく同意。(anがAnじゃ無いのも同意(w

狭義で再利用って言葉使うなら、適用箇所はProductの抽・具部分のみだと思う。
というか広義で再利用って言ったら、なんでも再利用できるからなぁ(w

ただ44教授の意図は分からずじまいか。…直接、訊いて教えてくれ〜
005351NGNG
このスレは意外と厨房の目に止まりにくいのかもしれないので気楽かも(藁

>「Creatorの固定実装部分」ってのはanOperationの実装部を受け持つ
>productのことだよね?
「実装部を受け持つproduct」ってのはちょっと意図を汲みかねるけど、
漏れの言うのはanOperationの実装そのものが直接的な再利用対象で、
Productの実装は差し替わるわけだから「再利用」とはちょっと違う。
Productは実装無し(interface)であっても構わないことに注目。

なお、こんなことが教授が言いたかった事であるかは疑問なので
(なぜならこのことは「それだけ?」で切り捨てられた主張に含ま
れるとも考えられるから)、漏れ的には教授が解って無い可能性
に+1(藁
デザインパターンって誤解/曲解+宗教的なのが多くなりがちなので。
漏れが解っていない「最も重要な再利用性」があるならそれを知
ることができれば万々歳なので煽っとく(藁
ちなみに「再利用」には実装の再利用とインターフェイスの再利用、
そして構造の再利用があると考えるが、教授はどの「部分」と言っ
てるので「構造」のことじゃないんだろう。じゃ、ここまでにでて
きた事以外に後何があるかねぇ。
005444NGNG
「Creatorの固定実装」部分を使いまわす、っていうのはTemplateMethodパターン
と似た感じの話でいいのでしょうか?
>>51さんの言うようにStrategy的というのと、ほぼ同等の話であるとは思うのですが。

デザインパターン日本語版(P349)の図で言うと、AbstractClassの持つメソッド、
PrimitiveOperation1、PrimitiveOperation2をProductクラスに
持たしてしまいます。
CreatorはTemplateMethod(anOperationに相当)で
Productクラス(の派生クラス)のPrimitiveOperation1、PrimitiveOperation2を
使う、ってつもりで私は理解しています。


>漏れ的には教授が解って無い可能性 に+1(藁
実は、その可能性を私も疑っていたりします(笑)。
他の可能性としては、
1.私が教授の質問の意図を誤解している。
  実は、言葉通りの質問ではなくて遠まわしに別のことを言っているのかも。
2.実はFactoryMethod特有のことと、あんまり関係ない質問である。
  もっと、シンプルなことを聞いているのかもしれない。

>そして構造の再利用があると考えるが、教授はどの「部分」と言っ
>てるので「構造」のことじゃないんだろう。
教授は気がつくと話が勝手に展開しているので、もしかすると「構造」なのかも
しれません。
けど、私は「教授はクラス単位の再利用について、私に聞いているのだろう」と
思ったのですけどね。


>>52
>ただ44教授の意図は分からずじまいか。…直接、訊いて教えてくれ〜
教授が基本的には、「あっている」「間違っている」としか言わない人なので、
いつになったら教授の意図が掴めるのやら…。
また、進展があったら書きます。
0055デフォルトの名無しさんNGNG
デザインパターンを意識しないと設計できないような奴は, センスなし.
まとめること自体に価値があるだけで, その成果物に価値はなし.
ありがたがってるような奴は, それだけの奴.
0056Delphiを知らない名無しさんNGNG
>>53
パラレルじゃ無い場合、Creatorはコンポジションとしてもっているproductインター
フェイスを使ってanOperationを実装する……のじゃないのか…、うーん曲解してるかも
>>54
ウチの教授は質問すると延々と語るタイプだよ。頭のいい人に質問するのは骨だよね
>>55
うはぁ、まさに漏れのことだ。でも自分で設計したのも、大体において主要
デザインパターンのいずれかに収束しない?やっぱなかなかの車輪だと思うけど…

いずれにせよこのスレもう少し賑わって欲しいなぁ。それこそウワベのパターンだけでなく
本質を見抜く手がかりになるし。頭のいい人達でパターン毎に議論してくれないかな。
…私はDOMに戻るので
0057デフォルトの名無しさんNGNG
>>55
うっ。耳が痛いです。
でも、逆に「デザインパターンを使う事で、センスの無い人もそれなりの設計が
出来る」なら、私はデザインパターンに意味はあると思います。

「デザインパターンを意識する事で、うまく設計できる人が増えるのか?」って
聞かれると、私はなんとも言えませんけれども。
005851NGNG
>パラレルじゃ無い場合、Creatorはコンポジションとしてもっているproductインター
>フェイスを使ってanOperationを実装する……のじゃないのか…、うーん曲解してるかも
あってるけど?誤解があるとしたら、56はCreatorのサブクラスでanOperation
をオーバライドすることを前提としているような気がするけど、GoF本定義の
Factory Methodパターンではそうじゃないって事かな。

>>54
教授が「間違っている」としか言わないのだとしたら、44の問い方に自信
がなかったからかもしれないね。
自分がどこまで理解してこのような回答に行き着いたかをきっちり説明
できているなら、その誤りの理由を説明するのが教師の義務と思うし。
こっちがちゃんと説明できている自信があるのに、納得できる説明をし
てくれないようなら、俺ならふーんその程度かぁって判断するなぁ。

>>55
デザインパターンはコミュニケーションの為のものだから、「デザイン
パターンを意識しないと設計できない」のは駄目だが、デザインパターン
を知らない/曲解しているのも困り者。
Factory Methodパターンはその典型なんだけど、今時はGoF自信も
A a = B.create();
なんてのをFactory Methodパターンと呼ぶ事を認めているらしいから…。
0059デフォルトの名無しさんNGNG
a,b,c,d,e,f,g,h,i,j
ってクラスが10個あって、各々のインスタンスの数を10個に制限した
いけどどうやんの?

class a
{
 private static a[] = new a[]
 {
  new a(), new a(), new a(), new a(), new a(),
  new a(), new a(), new a(), new a(), new a(),
 };
 private a(){}
}

ってのを各々のクラスに書かないとだめ?
(インスタンスを識別するのにintを使いますがここでは省略しました)
0060デフォルトの名無しさんNGNG
>59
private static int instance_count

a(){ instance_count++; }
~a(){ instance_count--; }

ってやってinstance_countが10超えたらコンストラクタ内で例外をthrowする
0061デフォルトの名無しさんNGNG
>>59です。
質問すら満足にできなくてすみません。

>>60
10個に制限するにはそうしますよね。

>>59で、
>各々のインスタンスの数を10個に制限した いけどどうやんの?
とか言っておきながら聞きたかったのはこれではなく、

10個のクラスにほとんど同じコードを書かないとだめなのか
なーと疑問に思ったので。

たとえば、bクラスは、
class b
{
 private static b[] = new b[]
 {
  new b(), new b(), new b(), new b(), new b(),
  new b(), new b(), new b(), new b(), new b(),
 };
 private b(){}
}

これが延々と続く・・・(クラス10個・・・)。
結局、最初の段階でおかしいのかな・・・。
OOわからない・・・。
・・・。
0062デフォルトの名無しさんNGNG
>>59
お帰りはこちら
http://www.mycgiserver.com/~phpmona/zoids0/ch_list.php4
0063デフォルトの名無しさんNGNG
>>61

staticフィールドやstaticメソッド「の」overrideを
サポートしてない言語が多いんで、こういう場合はウザイよね。

仕方ないから小技を使おう。
俺なら(言語に拠るが)こうするね。

10個のクラスの上位にクラスxを作る。

そのクラスのstaticフィールドとしてHashを作る。

Hashには、KeyとしてそのClassObject(またはその代用として
Class名やClass番号)を、Valueとして長さ10の配列Objectを、突っ込む。
勿論そのHashのエントリはここでは10個になるわけだ。

で、Instanceを作るたびに、自分のClassをKeyにしてHashを参照し、
Valueである配列に、InstanceをAddする。
配列が予定したN個を越えていたら、例外で蹴る。

どうよ?
0064デフォルトの名無しさんNGNG
>>60
どっちかというと、コンストラクタはprivateにして、Singleton
のようにgetInstance()で制御する方がなんとなくいいような気がする。
別にいいけど。
0065デフォルトの名無しさんNGNG
>>60

   λ
   ( ヽ  / ̄ ̄ ̄ ̄ ̄
  ( ゚Д゚ )< Rubyはクソです。ゴミ箱逝きです。 いじょ
 (____) \_____
   ヽ(´ー`).ノ
     (  へ)
      く



                      - = ≡三  λ
                  _ = ≡三     ( ヽ  / ̄ ̄ ̄ ̄ ̄
       (´ー`)          = ≡三    ( ゚Д゚ )< この発言をコピペしていただければ幸いです。
      ( ヽ ヽ)         - = ≡三   (____) \_____
      /  >             - = ≡三
0066デフォルトの名無しさんNGNG
>>61
そういう風にしたいなら、親クラスで

class Parent
{
  public Parent getInstance() {
    //instanceNumberを参照して10個以内に抑える
  }
  public static int MAX_INSTANCE_NUMBER=10;

  private int instanceNumber;
  private Parent(){}
}

んで、他はこのクラスを継承させる、ってのがいいような気がする。
0067Ruby!NGNG
OOPならRubyだね。
Java

なにかと話題のオブジェクト指向言語であるJavaとRubyを比較すると:

* Rubyはインタプリタ型言語。
* Rubyではすべてのデータがオブジェクトである。
* Rubyではモジュールを使って実装を共有できる。
* Rubyの変数や式には静的な型がない。
* Rubyでは正規表現が文法としてサポートされている。


http://www.ruby-lang.org/ja/compar.html

Rubyを知ってもらうためにもこの文をコピペしてください。
0068デフォルトの名無しさんNGNG
>>66
大嘘だった。継承するには継承もとのコンストラクタがprivateじゃ
まずいか。getInstance()にしたって、親クラスのインスタンス
そのものが返されるのじゃ意味ないし。。。

こりゃ、親クラス作らずにそれぞれのクラスで実装するしか
ないか?
0069たぶんNGNG
61が何のために10x10のインスタンスを生成したいのかを
もっと詳細に書かない限り最適解は出ないに一票
0070デフォルトの名無しさんNGNG

           
――――――――――――――――――――――
番組の途中ですが、臨時ニュースです。
「Rubyはクソです。ゴミ箱逝きです。 いじょ 」
この発言をコピペしていただければ幸いです。
___________   __________
             ‖ \|________   
             ‖ | ON AIR.|
             ‖  ̄ ̄ ̄ ̄
        ./ ̄ ̄θ Λ_Λ
      .../   //(´∀` )/|
     ./      ̄/⊂    ||_/
     | ̄ ̄ ̄ ̄ ̄|  (  ━┳┛
     |_____| /ヽ」┘┻
0071デフォルトの名無しさんNGNG
――――――――――――――――――――――
番組の途中ですが、臨時ニュースです。
「Rubyはクソです。ゴミ箱逝きです。 いじょ 」
この発言をコピペしていただければ幸いです。
___________   __________
             ‖ \|________  
             ‖ | ON AIR.|
             ‖  ̄ ̄ ̄ ̄
        ./ ̄ ̄θ  ∧_∧
      .../   //(´∀` )/|
     ./      ̄/⊂    ||_/
     | ̄ ̄ ̄ ̄ ̄|  (  ━┳┛
     |_____| /ヽ」┘┻
 
0072デフォルトの名無しさんNGNG
Javaの場合、同packageにインスタンスを管理するクラスを用意して、そこから
インスタンスを獲得するようにします。
0073デフォルトの名無しさんNGNG
インスタンスを一個にしたいときSingletonを使わずに
staticメソッドを使うのはだめでしょうか?
初期化の順序が重要なときに使えないのは分かりますが、
他にどんなデメリットがありますか?
0074デフォルトの名無しさんNGNG
>>73
言いたいことが理解できない(というか、何通りかに解釈できる)ので、サンプル
コードを希望。

C++ に関して言えば static メソッドは virtual 指定できないので、微妙に使いづ
らい。
0075デフォルトの名無しさんNGNG
> C++ に関して言えば static メソッドは virtual 指定できないので、微妙に使いづ
> らい。

何かが根本的に間違ってる気がするが。
0076デフォルトの名無しさんNGNG
まず、それがインスタンスである必然性があるかどうか、だ。
初期化の順序ってどういうこと?(Java屋には無縁?)
007773NGNG
>>74
言いたいことが分からないと言われても…
Cならグローバル関数になるような場合でもSingletonにしたほうが
よいのかな?と。
virtualを使いたいときに困るというのは分かりました。
Singletonでvirtualを使うときってどういう場合があるか思いつきませんが。

>>76
>まず、それがインスタンスである必然性があるかどうか、だ。
なるほど。ただSingletonの説明用サンプルってその必然性が
あまり感じられないんですけど。

>初期化の順序ってどういうこと?(Java屋には無縁?)
C++での話です。
class Hogeがあったときに、トップレベルで、

Hoge theHoge;

とかすると、コンストラクタが起動する順序を制御できない
という話だったと思います。

オブジェクト指向に不慣れなもので何か間違っているかもしれません。
0078デフォルトの名無しさんNGNG
>>76
A global_a;
B global_b;

これで global_a, global_b の間に依存関係がある場合(たとえば global_b の
コンストラクタ中で global_a を使ってる場合)、本来は

1. まず global_a を初期化
2. 次に global_b を初期化

とならないと困る。

C++ の仕様では、同一の翻訳単位にある非ローカルオブジェクトに関しては
定義順に構築されることが保証されているけど、翻訳単位が異なる場合には
初期化順序は保証されないので、まずい。

常套手段としては、グローバルスコープでインスタンスを宣言せずに、関数
ローカルに宣言することかな。

A& GetSingletonA()
{
  static A a;
  return (a);
}

こうすると、初めて GetSingletonA() が呼ばれた直後に、関数内で定義された
インスタンス a が構築されることが保証される。

あとは、処理系独自の拡張機能で、初期化順序を指定できる場合もある。

>>73
- インスタンスが解体される順序を指定できない。
- インスタンスの解体は main() から抜けた後に行われるため、エラー回復
 は絶望的。デバッグするのも不可能な場合がある。
007974=78NGNG
>>77
static メソッド/グローバル関数と Singleton を対比しているのが謎なんだけど。

- データが絡まない単純な手続きだけなら、普通に関数にしておけば良い。
- データが絡むなら Singleton にすれば? 具体的な方法は >>78 で書いた通り
008076NGNG
Singletonパターンは普通グローバルな実体インスタンスにはしないと思ってたから、
初期化の順序なんていくらでも制御できると思ってたけど。GoF本の「実装」節もまさにそのとおりだし。
グローバル変数で実体が作れるならSingletonであることを保証できないんじゃないの?
ま、>>78にある通り後処理の問題もあるから単にGoF本通りの実装にもならないかもしれんけど、
その辺のC++流儀までは知らないや。
>>77
インスタンスである必然性とは、GoF本の「結果」の5に書いてある通り、インスタンス数を1以外に
したい場合と、サブクラス化の可能性がある場合のみ。
そうでなければ全部グローバルな関数(static)として実装してもかまわない。そのへんはもう趣味
の範疇だよ。(というのはJava屋だからいえる。C++では後処理の考慮はいるね)
0081デフォルトの名無しさんNGNG
っていうかコンストラクタで依存関係がからむ初期化をするのはどうかと思うが。
普通、そういうときは別途初期化関数を用意しないか?

コンストラクタでなんでもやりすぎなだけじゃないかな。
008276NGNG
そだね。でも後処理の問題は結局あるけど。
取り敢えずグローバルな実体オブジェクトは違うかなと。
0083DelギコNGNG
| | ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| |Д゚) <   聞いてもいい?
| ⊂|   \________
| | |
| |U
 ̄ ̄ ̄ ̄ ̄
結城先生タンのJavaデザパタ入門読んでるんだけど

ガベコレのない言語では

  Iterator it = bookShelf.iterator();
  while (it.hasNext()) {
   Book book = (Book)it.next();
   System.out.println("" + book.getName());
  }
  bookShelf.deleteiterator();

この最後のdeleteiteratorが必要って事でいいのですか?
0084DelギコNGNG
                ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                (゚Д゚ ,,)<  なるほど!
             _φ_⊂)__ \_______________
           /旦/三/ /|
        | ̄ ̄ ̄ ̄ ̄|  |  Javaのトークナイザを実装するためには
        |愛媛みかん |/ ,  DelphiのCommaTextをAdapterに当てはめるとイイのか...
          ̄ ̄ ̄ ̄ ̄
        GUI部品については委譲によるAdapterは不可能だぞっと。
        Interfaceがあってヨカタヨカタ...

 デザパタってInterfaceが無いと実践が難しくないですか?
008576NGNG
>>83
それをやるなら、bookShelf.deleteIterator()ではなく、delete it; (C++の場合)でしょう。
Iteratorのインスタンスはiterator()メソッドが呼ばれるごとに生成するのが普通であり、
返されたIteratorオブジェクトはbookShelfの手を離れます。

ただ、どっちにしてもクライアント(呼び出し元)に削除の責任を負わせるのは大変なので、
GoF本ではIteratorPtrという実装例が紹介されていますね。(SmartPtrみたいなもの)
>>84は何言ってるかよくわかんなかったよ。
0086DelギコNGNG
___  ヽ
_ /⊂ `∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | |  \( ゚Д゚)< ありがとございます。>>85さん
  | /   ∪ ∪  \_____________
 ̄
その結城さんのJavaデザパ本には"deleteIteratorメソッドはJavaの場合必要ない"
と書かれていたので,bookShelfのメソッドかと思ったのですが
そういえば it を削除した方が話が早いですね。

>>84ではちょっと意味不明の事言ってしまいすいません。
このスレのログを見るとDelphiの人もいらっしゃるのですね。

>GoF本ではIteratorPtrという実装例が紹介されていますね。(SmartPtrみたいなもの)
auto_ptrみたいなものでしょうか?
ガイシュツだったらすいません。
008776NGNG
そう。それ>auto_ptr 鬱氏(藁
スコープはずれたら自動的にデストラクタ呼ばれるようにする仕組みね。
おれ本読んでないんだけどそんなこと書いてんのか>有機本
008876NGNG
>>84
おいらはDelphi知らないけど、interfaceが無いと難しいってのはデザインパターンで行われているような
構造を発案するのが難しいって意味かな?それはあると思う(interfaceという言語の仕組みがあると頭
を整理しやすいという意味)。
でも「実践」が、デザインパターンの適用のことを指しているのだとしたら、それはinterfaceという仕組み
がなくても大した問題じゃない。これはSmalltalkを考えれば解るかと。
多重継承なしでinterfaceも無し、おまけにstrongly typeだったりしたら、さすがに「実践」も難しいだろうね。
0089デフォルトの名無しさんNGNG
>>88
> 多重継承なしでinterfaceも無し、おまけにstrongly typeだったりしたら、さすがに「実践」も難しいだろうね。
off topic だけど、C 言語で多態を実装する手段として、関数ポインタを並べた構造体
が使われてますね。

下のコードは UNIX Version 6 からの抜粋ですが、今の UNIX も基本的な考え方は
変わってないです(もっとも機種やバス依存性を抑えるために、高度に抽象化されて
ますけど)。

struct bdevsw {
  int  (*d_open)();
  int  (*d_close)();
  int  (*d_strategy)();
  int  *d_tab;
} bdevsw[];


OOPLを使うと、従来はコールバック関数や関数ポインタを使って書いてた部分が
スマートに書けるのが便利。構造体を埋める代わりに継承、Enum*() でコールバッ
ク関数を呼び出す代わりに iterator と、ね。
0090DelギコNGNG
  アリガト ゴザイマス
   ∧∧   / ̄
( _(,,゚Д゚) < サンクスです。
⊂,,__つつ.  \_

このスレはsage進行なんですね。

>そんなこと書いてんのか>有機本
deleteiteratorのこと書いてありますが、たかだか3行で
タブンC++知っててJavaをあまり知らない人に
ちょこっとせつめい程度に書かれたもののようなので、問題ないです。

>スコープはずれたら自動的にデストラクタ呼ばれるようにする仕組みね。
これをDelで実践するのは出来なくはないらしいですが面倒みたいです。
C++のauto_ptrも実装した人は面倒だったのかな。

>多重継承なしでinterfaceも無し、おまけにstrongly typeだったりしたら、さすがに「実践」も難しいだろうね。
strongly typeっていうのがよくわかりませんが
Delは多重継承なしで
interfaceはサイキンのVersionになってから実装され
COM周りにからんでGUIDというみょうちくりんな数字が入るので、あまり使われていないみたいっす。

デザパタをやるにはInterfaceは積極的に利用しなければいけなさそうですね。

上の>>43などであがってますが
Singletonなんかも、DelにはコンストラクタのStatic宣言が出来ない(と思う)ので
なんか変な実装になってしまうなあ。
デザパタを勉強していても、妙に実装依存してしまう気がする…
0091デフォルトの名無しさんNGNG
>>90
>>スコープはずれたら自動的にデストラクタ呼ばれるようにする仕組みね。
>これをDelで実践するのは出来なくはないらしいですが面倒みたいです。
Delphiでもinterface相手だとスコープ抜けるだけで確実にRelease呼んでくれるから
interfaceにしてReleaseを自分で実装しちまえばいいってかんじ?

>C++のauto_ptrも実装した人は面倒だったのかな。
C++はもともとスタック上オブジェクトはスコープ出るときにdestructor呼ばれるから
スタック外オブジェクトもスタックオブジェクトで包むだけでいいから比較的簡単だね。
0092DelギコNGNG
>Delphiでもinterface相手だとスコープ抜けるだけで確実にRelease呼んでくれるから
 ∧ ∧     /
 ( ゚∀゚)  <  そういう仕組みでしたか。
  | つ[|lllll]).\ ニャルホド
〜|   |
  ∪∪

>C++はもともとスタック上オブジェクトはスコープ出るときにdestructor呼ばれるから
  そうか。おっしゃるとおりでゴザイマス。

 ∧ ∧   / Prototypeを勉強しました。
 (,,゚Д゚) <  CloneメソッドなんてのはDelphiでどやって実装しますでしょう。
  |つ つ  \ サブクラス側で実装しておく必要があるのでしょうか。
@|  |    JavaでもCloneをオバライドするのと一緒かな??
  ∪∪
     あと、interface変数にオブジェクトを代入したりも出来ないような
     気がするのですが・・・
     Prototypeの実装ってDelで出来るものなんでしょうか。
0093デフォルトの名無しさんNGNG
デザパタをありがたがっているような奴はクズ。
あれぐらいモデリングをしっかりすれば自分で考え出せるだろう。
デザパタの意義は、カタログにしたその取り組みにあるだけ。
0094デフォルトの名無しさんNGNG
>>93

その「自分で考え出す」手間を省くためのデザパタだろう。
さらに「自分で考え出したパターンを他人に説明する」手間も省ける。

そのためのデザインパターンだ。

もしかして車輪の再発明大好きな人デスカ?
0095デフォルトの名無しさんNGNG
そのうち俺的デザパタなんかつくって
同僚にでも読まそうとするのかモナ。
0096デフォルトの名無しさんNGNG
「え?それって○△のこと?」
と、自分の知らない有名なパターン(非GoF)を挙げられる。
に200オクタット。
0097デフォルトの名無しさんNGNG
>>93
コピペしてる人間に言われたくないね。
0098デフォルトの名無しさんNGNG
非GoFな有名なパターンどっかにまとまってない〜?
0099デフォルトの名無しさんNGNG
>>98
PLoP Japan
http://www.kame-net.com/jplop/

「プログラムデザインのためのパターン言語」
http://www.amazon.co.jp/exec/obidos/ASIN/4797314397/ref=pd_sim_b_dp_1_2/250-7533692-1453818
0100デフォルトの名無しさんNGNG
>>99
「プログラミングデザインのためのパターン言語」
はACEフレームワークに使われているパターンが中心やね。
分散処理のパターンとかネットワーク関連の人には
結構参考にはなると思われ。
010199NGNG
>>100
そうですね。GoF本のような一般的なデザインパターンはそれほど多くはない
ですね。今本が手元にないのですが、Null ObjectパターンとActive Object
パターンくらいしか思い出せません。

後半には開発プロセスのパターンとかフレームワーク進化のパターンとか、
面白いけどこっちが期待しているのとは異なるものも入ってたりします。
0102デフォルトの名無しさんNGNG
結城さんとこにもいくつかあるね。
NullObjectパターンもあった。これはすぐにでも使えそう・・・。
http://www.hyuki.com/dp/dpinfo.html
0103_NGNG
結城さんのJava言語で学ぶデザインパターン入門はいい本ですか?
具体的なプログラムがのってたりしますか?
買おうか迷ってるので教えてください。
0104デフォルトの名無しさんNGNG
>>103

あなたがどうしようもないぐらいプログラマに向いていない場合は、いい本と
感じるでしょう。
0105デフォルトの名無しさんNGNG
>>103
私はわかりやすいと思いますよ。

>具体的なプログラムがのってたりしますか?
とりあえず、短い動かせるプログラムが載ってます。
0106デフォルトの名無しさんNGNG
>>103
サンプルコードは(本を持ってなくても)著者のホームページから
ダウソロードできるよ。
0107デフォルトの名無しさんNGNG
>>103少し読んでみました
僕が、OOを知って2,3ヶ月の頃ならすごく分かりやすいだろうなと感じました
ただ、どうしても、GoFに比べ内容が不十分なため、
読む人がどういうレベルであるかで「分かりやすさ」が違うと思います

とはいっても、GoFでさえStrategyやAdapterのような
非パターンに属するものもデザパタとして含まれていたりするので、
どんな本を読む場合でも、考えながら読むようにしたほうが良いと思います
0108デフォルトの名無しさんNGNG
結城本を買うかどうかの簡単な自己診断法。
GoFを読んで「こりゃちんぷんかんぷん、歯が立たん」と思ったら結城本。
0109デフォルトの名無しさんNGNG
>>108
分かりやすくていいな、その判断法。
0110デフォルトの名無しさんNGNG
GoFを買わずに済ます方法。ET++を眺める。
0111デフォルトの名無しさんNGNG
本書くといくらお金もらえますか?
0112デフォルトの名無しさんNGNG
>>111確かに、知りたいよね
1冊につき、どれくらい貰えるのかなぁ
それ以前に、どうやったら著者に選ばれるんだろ?
0113デフォルトの名無しさんNGNG
1600円の本を5000冊刷って
6%なら48万円。

刷る数、印税率は実力次第。
0114デフォルトの名無しさんNGNG
数人の共著ならさらに安くなる。
時給にすれば数百円と思われ。
0115デフォルトの名無しさんNGNG
>>112
コンピュータ関係だと、印税は 8% 程度だと思います。(私はそうだった)

あと印税は売れた数ではなくて、刷った数で支払われる。だから初版で 5000 部
出れば、売れ残ってもそれだけ支払われる。また増版がかかれば、その時点で
追加の印税が入る。

> それ以前に、どうやったら著者に選ばれるんだろ?
ほんとに書きたいなら、原稿持ち込めば? 俺は最初は会社経由で仕事がきた
んだが、それで成果を上げたら直に話が振ってきた。まずは企画案を出すのが
スタートで

1 企画案を作って編集者に連絡
2 編集者が出版社の企画会議を通す
3 執筆開始

となる。

あと知り合いでは、出版されていた書籍の山のような間違いにうんざりして、レポー
ト用紙10枚分ぐらいの修正、分かりにくいからこう書き直せという訂正を送りつけた
ら、編集者から

「うちで書いてみません?」

と誘われた人間がいましたね。

いずれにせよ、コンピュータ関連の書籍だけで十分な収入を得るのは難しいです。
ただし、人に合ったときに名刺代わりに著書を渡せるのは、コンサルタント屋さんな
んかには直接的な収入以上の価値があるかもしれません。
0116デフォルトの名無しさんNGNG
>>112
自分が本書くのに向いているかどうか、試してみたことあるYO。
雑誌の連載記事を書くという想定で、企画案作って、記事の連載計画作って…、
とやってみたが、記事の本文書き始める前に飽きて挫折。不向きと分かってウマー。
0117デフォルトの名無しさんNGNG
>>110
GoFのデザパタにでてくる例、ET+がやたら多いよね。
なぜなのだろう?
0118110NGNG
ETの初期設計をしたのはGoFのEricだから。でもeXtremeProgrammingと
DesignPatternは、なぜ反することが多いのだろう。同じ人なのに...

最終形態としてPatternを織り成すように構成される。(はいはい。
それはTestCodeを変更しないという前提だ。TestCODEを境界設計に
依存させないようにするってことですか?(無理ですぅー。)
0119でむぱNGNG
織り成して組み立てるのではない。生成されたものを括り取る。
全ての末裔を定め、多重なる混沌を、不正集約された委譲を。
そうして空虚になったNullObjectの刃を入れる。彫刻の様に
R.U.OK?
0120117NGNG
>>118
なんと。同じ人が関わっていたのですか。
知らなかった…。
0121デフォルトの名無しさんNGNG
デザパタを学ぶのに適しているライブラリはET++以外にどんなものがあるのかなぁ
あと、Smalltalkは、やっておくべきなのかなぁ
0122デフォルトの名無しさんNGNG
>>121
>あと、Smalltalkは、やっておくべきなのかなぁ
どうだろう?
でも、C++とはまた毛色が違う言語らしいから、オブジェクト指向プログラミングを
理解するという面では、面白いかもしれないぇねぇ。
0123デフォルトの名無しさんNGNG
ピンクのXP本にあるペアプログラミング例を読むと思わず使いたくなる。
といいつつ使ってないけども。
0124デフォルトの名無しさんNGNG
AbstractFactoryパターンと、FactoryMethodパターンの違いがいまいち理解できません。
構造的に違いはそれほど無く、
生成するものが複数か、単数かの違いという理解でいいんでしょうか?
0125デフォルトの名無しさんNGNG
自分が本書くの不向きだと気づかずに、編集者に企画投げて、
OKもらったのはいいが、今書いててめんどくさくて泣きそう。
マズー
0126デフォルトの名無しさんNGNG
>121
Mac畑の経験でいえばMacApp(藁

SmallTalkもいいと思うよ、
Objective-C(Smalltalk風C)+Cocoa(openstep?nextstep?)を
つかってみて目から鱗がぼろぼろ落ちたもん>俺
0127デフォルトの名無しさんNGNG
SmallTalkはマカーの証。
0128デフォルトの名無しさんNGNG
Q.SmallTalk と Smalltalk はどちらが正しいか?

A.後者。(理由:SystemDictionary にそう登録されているから。)

"Class SystemDictionary represents a special dictionary that supports
protocol for asking questions about the structure of the system. The
default instance is Smalltalk. Currently the programming environment
does not support having more than one instance."
0129デフォルトの名無しさんNGNG
HyperTalkとタイプする癖がついてるみたいだな。
0130デフォルトの名無しさんNGNG
>>124

あるクラスが必要とするパーツをそのクラスの中で生成してしまうのが
FactoryMethod。パーツの生成のために別のクラスを立ててしまうのが
AbstractFactory…と理解しているけど。

FactoryMethod から、パーツ生成以外のメソッドを削ると、
AbstractFactory と同じ形になっちゃう。
0131デフォルトの名無しさんNGNG
>>130
FactoryMethodは、生成メソッドを
サブクラスでoverrideすることによって、
生成物が変わる。つまり「継承」「クラス」が
基本となるパターン。

AbstractFactoryは、>>130の言う通り、
生成するオブジェクトを外に持つことが本質。
そのオブジェクトを切り替えると生成物が
変わる。つまり「コンポジション」「オブジェクト」
が基本となるパターン。

Javaだと例えばFactoryMethodは、
interface Document { ... }
abstract class ApplicationFramework {
 DocumentList docList = ...
 public void newDocument() {
  // 「新規文書」操作を行うTemplate Method
  Document doc = CreateDocument();
  docList.add(doc);
  doc->open();
 }
 protected Document createDocument();
}

class MyApp extends ApplicationFramework {
 protected Document createDocument() {
  return new MyDocument();
 }
}
のように、TemplateMethodパターンと組み合わせることが
多くなる。
0132131NGNG
プログラム一部おかしいけど気にしないで。
0133124NGNG
ありがとうございます。
AbstractFactoryの方は、C++のSTLで使われてる
アロケータみたいな用法のこと、でいいんですよね?
0134デフォルトの名無しさんNGNG
サーバーからメッセージを受けて処理するクライアントを作ってるのですが
デザインパターン的にはどれがいいのでしょう。
スレッドでパケットを受けて、そのパケットの処理をして
メッセージを仕分けしてイベントを通知してデータ処理をするって
具合にしたいのですが。
すっきりと整理できたらなと思っています。
0135デフォルトの名無しさんNGNG
>>134

そういう場合は、

「スレッドでパケットを受けて、そのパケットの処理をしてメッセージを仕分
けしてイベントを通知してデータ処理パターン」

を使いましょう。
0136長いのはいやづらNGNG
>>135
名づけて?
0137デフォルトの名無しさんNGNG
>>136
「スレッドでパケットを受けて、そのパケットの処理をしてメッセージを仕分
けしてイベントを通知してデータ処理パターン」
0138長いのはいやづらNGNG
>137
頑固者め
0139デフォルトの名無しさんNGNG
>>135-138
ワラタ
0140134NGNG
>>135-138 ありがとうございました。
0141デフォルトの名無しさんNGNG
>>134
SOFTBANKから出てる「プログラムデザインのためのパターン言語」の
2章にそこらへんのパターン載ってるよ。翻訳が難しげだけど。
http://books.softbank.co.jp/bm_detail.asp?sku=4797314397

これ読んだらACE使ってみたくなった。
0142134NGNG
>>141 貴重な情報ありがとうございます。早速買ってみたいと思います。
0143デフォルトの名無しさんNGNG
似たような目的で「パターン言語」読んだけど、
正直いまいちだと思ったさ。
0144デフォルトの名無しさんNGNG
あげ
0145デフォルトの名無しさんNGNG
age
0146デフォルトの名無しさんNGNG
GoF本の訳って信じても良いのでしょうか?
なんかもー、いきなり定義されてない言葉を使ってくるので参ってます。

しばしば出てくる「責任」の明確な定義だけでも教えていただけませんか?

あとガイシュツっぽいけどワラタので…
「ギコ猫とデザインパターン」
http://www.hyuki.com/dp/cat_index.html
0147デフォルトの名無しさんNGNG
責任ってResponsibilityの訳でしょ?
一般的な言葉だからわざわざ説明するようなもんでもないと思うけど。
0148デフォルトの名無しさんNGNG
>>147
レス有り難うございます。ほんの一例ですが…
「クラスが責任をいくつかのサブクラスの中の1つに委譲するときに、
どのサブクラスに委譲するのかに関する知識を局所化したい場合。」(p116)

「生成の責任」だとは思うのですが…私見ながら、技術書ならきっちり明示して欲しいなぁ、と
原書をお持ちのようですが、ここはthe responsibilityとa responsibilityのいずれなのでしょうか?
0149通りすがりNGNG
想像だけど、'its responsibility'じゃないの。>>148
0150デフォルトの名無しさんNGNG
>>149
おお!ならばこの「責任」はプログラマならば
知っていなければならない様なテクニカルタームではなく、
単に「何かに対する」責任を示しているだけなのですね。
…うーん、それなら簡単にでも修飾語が欲しかった。

レスありがとうございました。何だか、こんな箇所ばかりですが
こういうもんだと割り切って、読み進むことができそうです。
0151デフォルトの名無しさんNGNG
クラスが責任を委譲といえば、本来そのクラスが担うと思える責任を他のクラスが果たすってことだから、
「責任」を「機能(を実現する為の実装)」のように受け止めれば?、とおもう。
0152デフォルトの名無しさんNGNG
責任をうまく説明するのは難しいが…

例えば、method(x)を実行する時、x>0という条件がつく場合、
実行元のコードにx>0を確かめるコードを書くか、
method(x)の中にx>0を確かめるコードを書くか…ってこと
つまり、どっちに「責任」を持たせるかはっきりさせようってこと

どちらにも書いた場合(責任をはっきりさせなかった場合)の弊害
 1.x>0の確認が2回実行される
 2.同じ責任を実行するコードが分散する
 3.(2)のせいで、もし、x>=0に仕様変更があった場合、
  すべてを直すのが面倒臭いし、直し忘れるかもしれない
0153デフォルトの名無しさんNGNG
>>150
テクニカルタームでない、とはいえない。OOにおいて責任(責務と訳す場合も
ある)というのは重要なタームだから。

>>151
機能というより「役割」では?
システムのある機能を実現するために果たすべき役割をどのオブジェクトに
割り振るか、ということですね。で、割り振られたオブジェクトはその役割
について責任をもつ、と。
0154デフォルトの名無しさんNGNG
>>148
CRCカードの"R"であることにも留意されたし。
0155デフォルトの名無しさんNGNG
>>154 CRCカードって何?よく聞くんだけど…。
0156154NGNG
>>155
Class-Responsibility-Collabolation
ttp://c2.com/doc/oopsla89/paper.html#cards
0157デフォルトの名無しさんNGNG
GoF23パターン以外の基本的なパターンってどんなのがありますか?
0158デフォルトの名無しさんNGNG
int main()
{
return 0;
}

NULLプログラムパターン
0159デフォルトの名無しさんNGNG
23個しかねえの?
あのなー。
0160デフォルトの名無しさんNGNG
あんなので良ければ、俺でさえ300は出せるから
世間のを全部合わせりゃ1000は逝くだろ。
デザパタヲタ信で良し。
0161デフォルトの名無しさんNGNG
>>160
その 300 個をとりあえず書いてみ?
0162デフォルトの名無しさんNGNG
int main()
{
  char buf[32];
  scanf("%s", buf);
  printf("%s", buf);
  return 0;
}

ノーガードパターン
0163デフォルトの名無しさんNGNG
>>162
ネタは sage で書け。
0164デフォルトの名無しさんNGNG
少ない数にまとめたってところがミソなんでしょ
0165デフォルトの名無しさんNGNG
int main()
{
  int c;
  c = getchar();
  if (c >= 'A' && c <= 'Z') {
    printf("Large\n");
  else (c >= 'a' && c <= 'z') {
    printf("Small\n");
  }
  return 0;
}

キャラクタセット依存パターン
0166デフォルトの名無しさんNGNG
全然デザインレベルじゃないし。
0167Kusakabe YouichiNGNG
>>165: デフォルトの名無しさん wrote:
>   else (c >= 'a' && c <= 'z')

Cではできないですね :)
0168デフォルトの名無しさんNGNG
誤植ですね。編集部に伝えておきます。
0169デフォルトの名無しさんNGNG
>>157
developer.java.sun.comにJ2EEパターンってあるよ。
Webアプリを5層に分けて考えて中間3層で、いろんなパターンを考えてる。
基本的かどうか知らんけど、なかなか面白かった。
0170157NGNG
>>162,165
デザパタというよりイディオムに近いですね
>>160
GoF以外の「有名な」パターンに質問を少し変えます
開発時にパターンネームを共有することも目的の1つなので
>>158
ネタに埋もれようとしているが、考えてみると含蓄深いパターンかもしれない…
0171デフォルトの名無しさんNGNG
>>170
Null パターンというのは、実際にあるよ。
0172157NGNG
>>171
NullObjectパターンなら知ってますが…
それ以外のNullxxxは初めてなんですよ
0173デフォルトの名無しさんNGNG
デザインパターンFAQ
http://www.hyuki.com/dp/dpfaq.html
0174デフォルトの名無しさんNGNG
age
0175commandNGNG
コマンドパターンについて、詳しく教えてほしいのですが。
できれば簡単な例とともに。
ジャヴァでも、シープラスプラスでも、
オブジェクトパスカルでも良いです。
0176デフォルトの名無しさんNGNG
>>175
google 逝きましょう。いくらでもサンプルあるぞ。
0177ageNGNG
age
0178デフォルトの名無しさんNGNG
うちの同僚に、どこかで権威から承認された"パターン"になった
瞬間に盲目的にありがたがるくせに、今までそれと同じような事を
やっていたのにそれは糞味噌言うアホがいますが、こういうやつ
はどのように扱うべきでしょうか?

創造的作業が嫌いならPGなんかやらなきゃいいのに、と思っている
のですが…
0179デフォルトの名無しさんNGNG
糞味噌...

例挙げて、冷静にメリット/デメリットを討論できないのが問題。
0180デフォルトの名無しさんNGNG
>>178
日本語がおかしいYO!!
えー、権威に弱いタイプは、詐欺に引っかかりやすい
傾向があります。壺でも売りつけるのが良いでしょう。
…いや真面目な話、その気持ち良く分かります。で、これ↓

会社のPCをたたき壊した後、同僚を机上に押し倒す
  ↓
「パターンは方法じゃ無い!あくまで伝達の手段だ!」と、言い放つ
  ↓
机の上、同僚の顔すれすれに、マウス突き刺す
  ↓
「行くあてはありません」と、何故かベレー帽をかぶった上司に言う
  ↓
(゚д゚)ウマー
0181デフォルトの名無しさんNGNG
>>180
ランボーかよ、オレも見てた(w
ま、確かにパターンの意味をはき違えてるわな >同僚
0182デフォルトの名無しさんNGNG
>>180
マウス突き刺す…どんなマウスだよ!w

そういや、多機能マウスってあってもいいよな
定規・温度計・ドライバ付きみたいな
0183デフォルトの名無しさんNGNG
マウスに付いた定規やドライバを何に使うのか小一時間(省略)
リモコン付きマウスなら欲しい気がするが・・・・・・
0184デフォルトの名無しさんNGNG
電話つきマウスは持ってるぞ。
うちダイヤル回線だからつかえねぇ・・・。
0185C屋NGNG
遅ればせながら結城本買いました。
GoF本が本棚の奥の奥に眠っている漏れには
ありがたい本です。

激しくガイシュツですが、結城さんのギコ猫頁には
ワラタ。漏れはクリスチャンではありませんが、その
他の頁もよい感じですね。

ただ、今使っているのがCなので、実践で活用
するにはいろいろ障壁がありそうです。構造体
+関数へのポインタでクラスを実装している程
度のところに持ち込むのは難しいのかなぁ?
どなたかやられた方はいらっしゃいますか?
0186デフォルトの名無しさんNGNG
age
0187デフォルトの名無しさんNGNG
>185
http://www.sage-p.com/process/cool.htm
こんなのはあるけどCでOOPはあんまりお勧めしないな。
N88BASICで構造化プログラミングするのと同じくらい空しいよ。

俺も今はCのプロジェクトやってるけどあえて無理にOOではやらない。
Cでself->set_value(self, 10)なんて珍妙なコードは書きたくない。
0188デフォルトの名無しさんNGNG
coolってMSが捨てたやつを思い出した・・・
0189デフォルトの名無しさんNGNG
C#の(初期の)開発コードネームじゃないの?Coolって
0190デフォルトの名無しさんNGNG
>>189
そうらしいけど MS は否定してなかった?
“COOL は C++ のライブラリだ!”っていうのが MS の主張していた事だったと
思う。結局 C# になったんだと思うんだけど。

とすると WFC For C++ ≒ COOL かな?
0191デフォルトの名無しさんNGNG
age
0192デフォルトの名無しさんNGNG
おっす。おら、デザパタ初心者だ。

で、みんなに聞きたいんだけど、いわゆるデータベースのフロントエンド
となるアプリを作るときに使えるパターンってないもんかね?

MVCとかBCEを使って(これ、アーキテクチャパターンか)M→Vのところに
Observerとか、データベースとのコネクションをSingletonとか、追加、訂正、
読取専用とかの状態を示すのにStateとか考えたんだけどどうよ?
0193JPLoPとは無関係な名無しNGNG
>192
良い考えだと思います。ただし良くまとめ親しみやすい命名をすると
Persister(Entity?)とかTransactionContextとかあるようです。
また、QueryIteratorは良く使いますが、ほとんど正規化できない
RDBの表定義にSQLUtilityはいい考えだと思いません。
TransactionContextはSingletonとかFlyweightとかに似ていますが
目的が違いますね。PoolingはFlyweightですが。
ちなみにデザインパターンはトランザクションとかスレッドとかが絡むと
今までのGoFのパターンとは違う扱いになる場合が多いいような気がするの
は気のせいでしょうか?>お前等べ
0194デフォルトの名無しさんNGNG
>>192
>追加、訂正、 読取専用とかの状態を示すのにState

ってもうちょっと具体的に教えて。
0195デフォルトの名無しさんNGNG
SQLUtilityって、アホかと思ったね。どこかで自画自賛してるマヌケ
を絞め殺したい。システムの規模が小さくて、SQLのスタイルをかなり
限定して規則化出来るような時にしか、意味がない。

副問い合わせとか、複雑な条件節設定とか、ベンダ毎のSQL仕様の差異
とか、テーブル側の激しい仕様変更(藁とか、結局吸収できないっしょ?

つうか、そんな簡単にどうにかなるんだったら、今までインピーダンス
ミスマッチで苦労していた技術者がみんなアフォだということになるな。

SQL一本を、SQL本体とバインドパラメータでパラメータ化して、
Persister(用語と概念との対応がよくワカランが…多分これでしょ)
のインスタンス一個を割り当てるというほうが、すっきりする気がする。
0196デフォルトの名無しさんkNGNG
ModernC++Design的なパターンがこれからは常識になっていくんでしょうか?
0197デフォルトの名無しさんNGNG
>>194

追加、訂正、読み取り専用とかの状態によって、初期化とかエラーチェック
とか変わるでしょ? そのときに、State で隠してあげるといいのかな? と。

エラーチェックとかのビジネスロジックを、Strategyにしたほうがいいのか
悩み中。
0198デフォルトの名無しさんNGNG
>>197
そういえば、StateとStrategyの違いってよくわからん。
0199デフォルトの名無しさんNGNG
>>198
おもに内部の情報をもとに振る舞いを決めるのがState。
おもに外部からの情報をもとに振る舞いを決めるのがStrategy。

「おもに」というのが曲者で、Stateパターンでは、
外部からのイベントと内部の現在の状態、あるいはそのオブジェクトが
置かれている状況のある状態をもとに次の状態が決まる。
で、次の状態になるとき、あるいはなった直後
に振る舞いに相当するアクションが実行される。
そういう意味で「おもに内部の情報をもとに…」と表現した。

Strategyパターンでは、Strategyオブジェクトが置かれる状況
(GoFではContextといっている)によって、どのような振る舞いを
するかを決める。この場合はStateパターンがコンテキストの内部
状態の違いを見ているのに対して、Strategyパターンではコンテキスト
そのものの違いを見ている。だから「おもに外部…」。

というのはどうだ?
ちょっとこじつけっぽいかもしれんが。
0200199NGNG
>>197
エラーというのは状態なんではないだろうか。
だからStateパターンだと思う。

ビジネスロジックそのもの、もしくはその一部が
切り替わるのに応じて振る舞いが違ってくるような
ところではStrategyパターンということになると思う。
0201デフォルトの名無しさんNGNG
『Core J2EE Patterns』<http://www.phptr.com/corej2eepatterns/>;を
読み始めようとしているんですが、読み進めていくうえでのポイントとか
ってありますか?>読んだひと
0202デフォルトの名無しさんNGNG
デザインパターンに慣れる
第1章 Iterator ― 1つ1つ数え上げる
サブクラスにまかせる
第2章 Adapter ― 一皮かぶせて再利用
第3章 Template Method ― 具体的な処理をサブクラスにまかせる
インスタンスを作る
第4章 FactoryMethod ― インスタンス作成をサブクラスにまかせる
第5章 Singleton ― たった1つのインスタンス
第6章 Prototype ― コピーしてインスタンスを作る
第7章 Builder ― 複雑なインスタンスを組み立てる
第8章 Abstract Factory ― 関連する部品を組み合わせて製品を作る
分けて考える
第9章 Bridge ― 機能の階層と実装の階層を分ける
第10章 Strategy ― アルゴリズムをごっそり切り替える
同一視
第11章 Composite ― 容器と中身の同一視
第12章 Decorator−飾り枠と中身の同一視
構造を渡り歩く
第13章 Visitor ― 構造を渡り歩きながら仕事をする
第14章 Chain of Responsibility ― 責任のたらい回し
シンプルにする
第15章 Facade ― シンプルな窓口
第16章 Mediator ― 相手は相談役1人だけ
状態を管理する
第17章 Observer ― 状態の変化を通知する
第18章 Memento ― 状態を保存する
第19章 State ― 状態をクラスとして表現する
無駄をなくす
第20章 Flyweight ― 同じものを共有して無駄をなくす
第21章 Proxy ― 必要になってから作る
クラスで表現する
第22章 Command ― 命令をクラスにする
第23章 Interpreter ― 文法規則をクラスで表現する

yuki本より
0203デフォルトの名無しさんNGNG
GOF のp25 最後の行からなんだけど、
「型(TYPE)はインターフェイスを表現するのに使われる・・・」
ってあるんだけど、ここで言ってる型ってのが意味不明なんだが、クラスのタイプって
ことなのかな?????
0204デフォルトの名無しさんNGNG
>>203
その文脈だと TYPE は C++ なら class, struct のことだと思われ。

インターフェースは、そのメソッドが受理できるメッセージの集合を規定する
わけだが、C++ ではそのために

1. 純粋仮想関数から構成される struct, class を作る。
2. 実装クラスに 1 で作った struct, class を継承させ、実装を与える。

という手段をとるよね。Java だと interface/implements だし、そもそも型
チェックがない言語だと、この手間は不要なわけだが。
0205デフォルトの名無しさんNGNG
保存age
0206デフォルトの名無しさんNGNG
StateとStrategyの一番大きな違いは、StateはStateオブジェクト自身が、
他の状態に遷移する方法を持っているところにあると思ってるけど、ちがう?
0207デフォルトの名無しさんNGNG
大きな違いというかそもそも別物じゃん
クラス図は似ているが用途・発想はぜんぜん違う
0208デフォルトの名無しさんNGNG
用途も発想もぜんぜん違うものを、共通項を出して同じパターンを適用するのも、
デザインパターンなのでは?
0209デフォルトの名無しさんNGNG
・・・
0210デフォルトの名無しさんNGNG
>>207
どう違うのか言え
0211デフォルトの名無しさんNGNG
>>210
どう似ているのか言え
0212デフォルトの名無しさんNGNG
>>207 でクラス図が似てるって書いてるけど
0213デフォルトの名無しさんNGNG
だめだこりゃ
0214デフォルトの名無しさんNGNG
ファウラーなんかは、どっちでも同じだと述べてるね、「リファクタリング」の中で。
現場だと実際判別つかんぞ!!
0215sageNGNG
第24章 すっかり頭が固くなって自分では何も発想できなくなる。
     また、問題点を自ら発見する事もできなくなる。 
0216デフォルトの名無しさんNGNG
Strategy...仕方なく変える。あるいは変えたほうが望ましいので変える。
State...変わっていくことが前提。

うーん大雑把すぎるなあ。

ロジックを変更するのがStrategy。
状態の変化をロジックに内包してるのがState。

こんな感じではどう?
0217デフォルトの名無しさんNGNG
直訳
Strategy 戦略
State 状態
0218デフォルトの名無しさんNGNG
State 状態遷移図をコードに落としたもの
Strategy State以外の多態を使って実行時にコードを差し替えたいもの

>クラス図は似ているが用途・発想はぜんぜん違う
同意。

>現場だと実際判別つかんぞ!!
それだと「デザパタ使うと話が早い」という
メリットがなくなってしまいますが?
0219デフォルトの名無しさんNGNG
>>214
「リファクタリング」P227 動機 を見るとしっかり使いわけてるようですね。

Strategy 単一のアルゴリズムを単純化しようとしている場合。
State   状態に特有なデータを移動しようとしており、オブジェクトの状態が変わるものと考えられる場合。
0220デフォルトの名無しさんNGNG
age
0221|D゚)NGNG
         ____________
         | まずアレ作れ。アレ。    ,____________
         | 次はこれだ。         | が、
  Director  | つーかチンタラすんなゴルァ! |  がんばらせて頂きます…
.          ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄)ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ∧∧             ∧_∧  Builder  ∧_∧             _
     (#゚Д゚)  ))         (´∀`;,)       (,;´∀`)    ∧_∧  //L__
  ,_(_う  つ<i           と_  と )  ΞΞ (  つ つ  ヾヽ(;´∀`)  | ̄|_/|
  ト-人 , 〉   ハヤクシロヤ! .   ヽY ノ    .Ξ   ) ) )    ,( つ づ「 |    |/|
  ヽ_(/ J              (__)_)      (__)_)    (__)_ソ `|__|/
                            アクセク     アクセク             Product

0222|D゚)NGNG
    < ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ゙゙>
    < げっと りざ〜〜〜〜ると!!!>
    <_ ____________.>
       |/
      ∧∧                           ビクッ!            _
     (#゚Д゚)  ))                            Σ ∧_∧  //L__
  ,_(_う  つ<i                            Σ  (;´∀`)  | ̄|_/|
  ト-人 , 〉                                    ,( つ づ[] .「   . |/|
  ヽ_(/ J ケッカモッテコイ!                            (__)_ソ `|__|/

0223|D゚)NGNG

               | 結果です… どうぞ
               |____  _____
      ∧∧           _ ヽ(  .∧_∧
     ( ゚Д)          //L__  (´∀`;) ))
  ,_(_う  つ<i       | ̄|_/| と と  ) "
  ト-人 , 〉           .「   . |/|  〈 ( (
  ヽ_(/ J           |__|/  (_(__)
     ____|\______
      | あ、やっぱそれイラネ。
      |
0224オワリNGNG
         | はりきって次逝くぞゴルァ!
         | も一度、アレ作ってくれ
          ̄ ̄)ノ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ∧∧                               .::;;| ブツブツ…
     (;゚Д)   …ッテ キイテルカ?                   ::;;|  ∧_∧ ガンバッテ
  ,_(_う  つ<i                           ::;;|_(三三 )  ツクッタノニ…
  ト-人 , 〉                           ::;;;/  (三0三)
  ヽ_(/ J                          :::;;;/    ゞ三(__ソ  ブツブツ…

0225デフォルトの名無しさんNGNG
>>224
結城さんですか(藁
0226デフォルトの名無しさんNGNG
ワラタ
0227デフォルトの名無しさんNGNG
Visitorパターンの質問です。
ElementとVisitorがこんな感じでたくさんあるとき、
    ____             ______
    | AbElem |            | AbVisitor |        
   .  ~∧ ̄ .iヽ~           .  ~∧ ̄ .iヽ~        
   __|____ \___     ___/__ \_____
   |CnElem1.| |CnElem2| …  |CnVisitor1| |CnVisitor2| …
    ̄ ̄ ̄ ̄   ̄ ̄ ̄ ̄      ̄ ̄ ̄ ̄ ~   ̄ ̄ ̄ ̄~
AbVisitorに全Elementの受け皿を大量に書かなくてすむ方法はないでしょうか?

class AbstructVisitor {
   virtual void Visit(ConcreteElement1* e){ };
   virtual void Visit(ConcreteElement2* e){ };
   virtual            .       3
                         :
};

ConcreteVisitorの方は、CnElemの一部しか使わないので。。。

class ConcreteVisitor1{
   virtual void Visit(CncreteElement1* e){ e->Hoge(); };
   virtual void Visit(CncreteElement2* e){ e->Hoge(); };
};
class ConcreteVisitor2{
   virtual void Visit(CncreteElement2* e){ e->Hoge(); };
   virtual void Visit(CncreteElement3* e){ e->Hoge(); };
};

0228|D゚)NGNG
           ウフフ、わたしは遂にやったわ …

      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
       |  モナ影さま::いんすた〜んす! |
      \__  __________/
    ∧_∧   |/
    Xノ ハヘ X
    |゚ノ*^∀^)                     シュッ
   §、]つとノ                 .|
.   !!| | |                   .| |
    (__)_)                 || |l

0229|D゚)NGNG
                | あれ、ここは…?   |
                \__  _____/
    ∧_∧            \(
    Xノ ハヘ X                ∧_∧_∧
    |゚ノ  ∀ )             Σ (´Д`三´∀`)
   §、]つとノ ウフフ            と[  y  ]つ
.   !!| | |                  / ,〈 〈
    (__)_)               (__) 、_)
               /(
         / ̄ ̄ ̄   ̄ ̄ ̄\
         |  ってレモ菜!!! .|
         \________/
0230|D゚)NGNG
         そう … モナ影さまを しんぐるとん にしてやったの …
         これでいつでも …

    ∧_∧        
    Xノ ハヘ X                   アワワワ ∧_∧
    |゚ノ  ∀ )                      (;(´∀`)
   §、]つとノ                 三   / ]つy]つ
.   !!| | |                  三   ノ ヽ 〈
    (__)_)   .|\                (__)、_)
      / ̄ ̄ ̄   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
       |  モナ影さま::いんすた〜んす! |
      \_____________/

        唯一の実体を呼べるわ …
0231オワリNGNG
        もう分身の術でわたしを ごまかすことはできないわよ … ウフフ
                                   ウフフ
     
       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|  … よっぽど楽しい夢見てるんだろうな …
       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::\ ________________/
       ;;;;;;;;;;;;::::::::::::::::::::::....|/:::....
       ___∧_∧___________
      __(;(´Д`)__________
     __( 」つ',」つ /_ウフフ______
    ____と_)_ソi /_________ [天井裏]
   ____________ウフフフ____
    ̄ ̄|| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ ̄ ̄
       ||
       |          ウフフフ
 
            \  シングルト〜ン   / /

0232デフォルトの名無しさんNGNG
ウザッ
0233デフォルトの名無しさんNGNG
面白いので期待age
0234デフォルトの名無しさんNGNG
はぁ?

class AbVisitor{
   virtual void Visit(AbElem* e)=0;
};
class AbElem{
   virtual void Hoge()=0;
}

これでええやん。
ポリモルフィズム分かってる?
0235デフォルトの名無しさんNGNG
おおもりよしはる=ロリペドオタ、アニオタ、モツオタ、ベトオタ、ブルオタ、セガ信者
ひまわりと幼女のすじまんこに異様な執着心を燃やしているロリペド絵描き
2浪して九州大学歯学科に進むがプロのイラストレーターになるために大学を中退、
同人活動とUOに専念する日々を送るが、その生活は苦しいらしい(藁
自らを画家と呼び、ともすれば不真面目なものと見られかねないアニメ絵を「芸術」
の域にまで高めようとしている(らしい)。  もう、死ねよ…と。
UOではKanaeというテイマーと、SASAWOという斧戦士(赤キャラ)を持っている。@Izumo
【すじ】 おおもりよしはる
http://yasai.2ch.net/test/read.cgi/doujin/1016348976/
オリジナルキャラ七瀬香奈恵抱き枕(すじ丸出し抱き枕)
http://www.p80.co.jp/p/k_sinki/yoshiharu/kanae2002.html
http://mentai.2ch.net/test/read.cgi/otaku/1016198191/

どっかのスレに上がってた写真(藁
tp://blake.prohosting.com/ccsakura/img-box/ccsakura20020405055756.jpg
tp://blake.prohosting.com/ccsakura/img-box/ccsakura20020405055901.jpg
0236デフォルトの名無しさんNGNG
>234
スマソ、Visitor側ではCnElement個別のメソッドを呼び出すことがあるので
わざわざ分けてるのでした。書き忘れw
呼び出すのがHoge()共通ならそれで良いね。
とりあえず力技で解決しときます。ありがとう。
0237デフォルトの名無しさんNGNG
>>236
そこを共通化してしまうと、あとで困るような・・・。
たとえ面倒でも、いまのままでいいと思うよ。
0238デフォルトの名無しさんNGNG
デザインパターンってGOFとやらの23個を覚えればとりあえずは良いわけ?
0239デフォルトの名無しさんNGNG
他にもいろいろあるけど、通じない可能性大。
ヘタに使わない方がいいかも。
0240デフォルトの名無しさんNGNG
>>238
実践を伴わないアンキは、うざい厨房の第一歩。
「俺はできる!オブジェクト指向もわかってるぜ!」という
新入社員は大抵このパターン。氏ねおまえら。
0241デフォルトの名無しさんNGNG
この業界って実践よりお勉強の方が高度だよね。
0242デフォルトの名無しさんNGNG
>>241
実践との賜っている連中が、体力勝負の非効率な作業に何の疑問も
懐いてない馬鹿ばかりだから。
0243242NGNG
ただ、大学講義レベル程度の、「入り口」だけのぞいて理解した
気になっているアホには、偉そうな事をいわれたくない。
0244デフォルトの名無しさんNGNG
実践も勉強も、上を見ると果てしなく続いてるよ。
どっちが高度か、なんて(以下略)
0245デフォルトの名無しさんNGNG
「ファイナライザガーディアン」パターンよりも
カッコいい名前のデザパタがあったら教えてくだちい。
0246デフォルトの名無しさんNGNG
Facadeって何て読むの?
0247デフォルトの名無しさんNGNG
ふぁさーど
0248デフォルトの名無しさんNGNG
>>246-247
確かフランス語だったっけ
0249デフォルトの名無しさんNGNG
ばんぺい君
0250デフォルトの名無しさんNGNG
>>238
初期設計よりもリファクタリングで使った方がよいかな。
そんときに Observer や Command、State/Strategy Templete Method はあったりまえのように使う。
0251デフォルトの名無しさんNGNG
センチネルっていうとカコイイ>>249
0252デフォルトの名無しさんNGNG
>>251
そういや GOF本に書いてあったが、解説用の言語にC++やSmalTalk使わんかったら
カプセル化や継承・ポリモーフィズムもパターンに入れるつもりだったといってたな。
0253デフォルトの名無しさんNGNG
>>251
あさのまさひこ叩きは模型板で。
0254デフォルトの名無しさんNGNG
「再帰みたいなことをしたいんですけどどんなデザインパターンを使ったらいいですか?」
という質問を見たことがある。何ですなおに再帰使わないのかおれにはわからなかったよ。
0255デフォルトの名無しさんNGNG
>>254
???再帰構造のクラス関連とかの話じゃなくて???
0256デフォルトの名無しさんNGNG
>>254
もしも適用するとスッキリする形なら、Compositeパターンを適用。
再帰1レベルをツリーノード1個に対応させる。
…単純な再帰なら単なる無駄かも知れんけど。
0257デフォルトの名無しさんNGNG
>>251
センチネルもデザインパターン?
0258デフォルトの名無しさんNGNG
>>256
単純な再帰ならパターンでなくてアルゴリズムの話になんだろ。
しかし、クイックソート内の比較を様々なデータ・・・
単純型からレコード、さらにはクラスのメンバでできるようにしたいというなら
話は全く変わってくるが。。。
0259デフォルトの名無しさんNGNG
>>257
いやデザインのつかないパターンでしょう。
日本語で言うと「定跡」ってか。
0260デフォルトの名無しさんNGNG
今まで見てると「パターン」と「アルゴリズム」の問題を混同してるのが多くないか?
0261デフォルトの名無しさんNGNG
Java言語で学ぶデザインパターン入門 結城 浩 著

の次は何を読めばいいのですか?
0262デフォルトの名無しさんNGNG
>>261
デザパタの本を読むより普通にプログラミングの経験値を積んだ方がいいと思うよ。
無理矢理にデザパタを使おうとしないほうがいい。気がつかないうちに
いつの間にかデザパタを使っていた、というのが理想的なのかもしれない。
でも本を読みたいならC++プログラマならGoF本が王道。
JavaプログラマならEffective Java(値段の割りに薄いが間違いなく良書)に
デザパタが登場するので選択肢としてはありかもしれない。
この本は初心者向けじゃないけど。
0263デフォルトの名無しさんNGNG
デザインパターンってフローチャートが新しい名前になったものなの?
0264デフォルトの名無しさんNGNG
>>263
違う。
ソフトウェアの典型的構造に名前を付けたもの。
0265デフォルトの名無しさんNGNG
フローチャートって実際使われてたりするんすか?
俺は試験以外見たことないのですが
0266デフォルトの名無しさんNGNG
>>261
すでに >>262 でレスついてるが、後は「パターンハッチング」もお勧め。
パターンをどう実際の現場での設計に導入するか?その基本的な考え方(?)というかポイント(?)というかを、
GOFの一人がうまく解説している。薄いし安いがこれも間違いなく良書。
0267デフォルトの名無しさんNGNG
>>266
もひとつは 「リファクタリング」。 これでしょ、やっぱ。。。
「デザインパターンはリファクタリングの目標を提供する」
0268デフォルトの名無しさんNGNG
>>265
フローチャートみたいな図は書くけど、
情報処理技術者試験で出るような
プログラムをそのまま引き写すようなのは無駄なので使わない。
0269デフォルトの名無しさんNGNG
>>267

はげどう。

「リファクタリング」をよんだとき、
デザインパターン、ユニットテスト(XP)、リファクタリング
がおれのなかで激しく結合して世界が変わる音が聞こえました。

0270デフォルトの名無しさんNGNG
言ってることわかんない。
0271デフォルトの名無しさんNGNG
ここはパソコン詳しい人多いのか?
0272デフォルトの名無しさんNGNG
>271 多くないので質問は他の板でしてください。
0273デフォルトの名無しさんNGNG
くぅ、そんなこと言われると読みたくなるなぁヽ(;゚∀゚)ノ=3ハァハァ
明日にも買ってきたいのですが、この本で合ってますか?

パターンハッチング
http://www.pearsoned.co.jp/washo/prog/wa_pro18-j.html
リファクタリング
http://www.ogis-ri.co.jp/otc/hiroba/ogisbooks/Refactoring.html

GW、これ読んで潰れそうな予感…。
0274デフォルトの名無しさんNGNG
>>273 桶
0275デフォルトの名無しさんNGNG
>>269
でしょうでしょう!!

0276デフォルトの名無しさんNGNG
>>269
GOFや結城さんの本だけだとデザパタホントに使いモンになるんかて疑問だらけだったけど
これ読んで漏れも世界が全く変わりました。
いまじゃファウラ-まんせー!!
0277デフォルトの名無しさんNGNG
「リファクタリング」はともかく
「パターンハッチング」は買って損した
0278デフォルトの名無しさんNGNG
>>277 同意。
「アナリシス・パターン」もつまらんかった。
0279デフォルトの名無しさんNGNG
>>278
そうか??第二章のファイルI/Oクラスの設計における Composite や Proxy、Visitorの効果的な
使用例を通して、デザパタの運用法がより立体的につかめると思うが?
0280273NGNG
>>274
thx!!!

これからこっそり抜け出して買ってきまさぁ!!
……とりあえずリファクタリングだけにしようかなぁ(;´Д`)
0281デフォルトの名無しさんNGNG
>>280
リファクタリングだけで取り敢えずはいいでしょ。
パターンハッチングの方は、ある程度パターンわかった時点で読んで
初めて「なるほど!」て唸らせられるもんだし。。。
0282デフォルトの名無しさんNGNG
>>269
漏れも試しに読んでミターヨ。
しばらくじーと読んでたら・・・・・・・・・・・・

キタ━(°∀°)━( °∀)━(  °)━(   )━(´  )━(∀´ )━( `.∀´)━!!!!!

これ、イイ!!イイ!! 頭の中でモリモリとアイディアが回り始めてキターヨ!!
0283デフォルトの名無しさんNGNG
漏れも読んでみようかな・・・
0284デフォルトの名無しさんNGNG
質問です。
ファイルを読み込んで、その情報にあったインスタンスを作成したいと思っています。
ファイル名を指定して、ファイルのヘッダ部分を読み、
ヘッダ情報から生成すべきインスタンスを判別し、
具象インスタンスを作成し返す。という一連の操作をきれいにまとめたいのです。

Factory Method が良いのではないかなと思い GoF本を見たところ、
実装の2の所で「Unidrawの図形編集フレームワークでは…」という部分で
どうやら私の考えている事にぴったりの事が書かれていました。

しかし、よく読んだつもりなのですが、イマイチ理解できない部分があります。
「フレームワークはその識別子をパラメータとして Create オペレーションを呼び出す。」
という部分なのですが、
Create オペレーションは Creator::Create() でしょうか?
それとも (Some)ConcreteCreator::Create() でしょうか?

Creator の Create() だとした場合、Creator が識別子について
一元管理していないといけないので Creator を
具象クラスとして作成(Creator を一切継承しない)した方がいいのでしょうか?

それとも ConcreteCreator の Create() なのでしょうか?
だとすると 識別子から具体的な Creator を探すのはこのパターンと
関係ない所で行うのでしょうか?

(だとするとGoF本の
「Create オペレーションはその識別子に対応するクラスのコンストラクタを探して…」
という部分の説明がおかしいですよね…?)

私の勘違いしている部分に対するご指摘、そうでなくても
よくありがちなコードだと思うので、皆様の
「私の場合はこうしているよ」的なものでもよいので
教えていただけないでしょうか?
(どういう実装がいいのか↑の説明では不足 or 「お前の文章は理解不能じゃ」という場合はご指摘願えればもっと詳しく書きます)

どなたかよろしくお願いいたします。
0285デフォルトの名無しさんNGNG
できるインスタンスは、全部(例えば)Productのサブクラスで良いんだな?
だったらたぶんFactoryMethodの節にあるParameterized Factory Methodがぴっ
たりだろう。

フレームワークが呼び出すのは
Creator::Create(ProductID id)
だろう。

実装は言語によっていろいろ。
C++やJavaなら、識別子からFactoryオブジェクトへの表を引くとか。
0286デフォルトの名無しさんNGNG
>>284
>「フレームワークはその識別子をパラメータとして Create オペレーションを呼び出す。」
は、まんまParameterized Factory Methodのところの文だね。
ちゅーことは、>>285の言うとおり、つか、そこのサンプルコードの通り、
Product* Creator::Create (ProductId id);
つーことだろう。

>Creator の Create() だとした場合、Creator が識別子について
>一元管理していないといけないので Creator を
>具象クラスとして作成(Creator を一切継承しない)した方がいいのでしょうか?
GoF本では、一元管理できるのがメリットだって説明されてると思う。
それから、Creatorは識別子とConcreteProductクラスの対応は、Creator クラス
にデフォルトの実装を与えて、必要ならオーバーライドしれ、って書いてあるようだ。
だから、具象クラスはフレームワークとして用意して、具体的なアプリケーションの
実装時にはCreate()をオーバーライドする(ってことは当然サブクラスを派生する)
っていうのがGoF本に書いてあることだと思う。
(ここでいうフレームワークは、GoF本で図形編集のフレームワークって書いてあるそれね)

Parameterized Factory Methodは、あくまで、*Factory Methodの変形*として
解説されているので、違いに注意して読んだほうがいいかも。
とくに、Factory Methodが実装時のフレームワークなのに対して、
Parameterized Factory Methodは、実行時に複数のConcreteProductオブジェクトを
生成する拡張が入ってるところとか。

どでしょ?
0287Delphi使いNGNG
Factory の場合、GOFとか見てると CreateメソッドがどうしてもDelphiのコンストラクタメソッド名と
かぶさって少々混乱気味(爆
0288Delphi使いNGNG
>>283
烈しくお勧め!!
「実装しながら設計する」という概念が、ある意味革新的。
0289デフォルトの名無しさんNGNG
>>286
「フレームワーク」という言葉の使い方がカナーリ混乱してるみたいだが
どうよ?

フレームワークって実装するときにオーバーライドしたりいじったりは
しないもんだと思うが。(実装に依存しないところだけくくり出したもので
あるはず。)
0290284NGNG
ね、眠れなかったよぉ…(昨日昼まで寝てて、夕方にまた昼寝?したからな…)

>>485-486
ありがとうございます。
おかげでやっと GoF本に書いてある事の意味が理解できました!!
↓のような形(まぁほとんど GoF 本のサンプルそのままみたいなものですが)
にしようと思います。
ありがとうございました。

// FactoryMethod::Product
class Polygon{...};

// FactoryMethod::ConcreteProduct
class Triangle : public Polygon {...};
class Rectangle : public Polygon {...};

// FactoryMethod::Creator
class StandardObjectLoader
{
 public:
  virtual Polygon* LoadFromFile(const char* fileName)
  {
   FILE* pFileI = fopen(fileName, "rb");
   fseek(pFileI, 0, SEEK_SET);
   HEADER header;
   fread(&header, sizeof(header), 1, pFileI);
   Polygon* pResult;
   switch(header.ID){
    case POLYID_TRIANGLE:
     pResult = new Triangle(pFileI); break;
    case POLYID_RECTANGLE:
     pResult = new Rectangle(pFileI); break;
   }
   fclose(pFileI);
   return pResult;
  }
};
0291286NGNG
てにをはがヘンだけど、通じたみたいだから、いいや。
0292デフォルトの名無しさんNGNG
パターンハッチングは訳が一部変なので注意が必要。
0293デフォルトの名無しさんNGNG
>>292
逆に「リファクタリング」の日本語訳はこなれてるから読みやすいよね。

#最近リファクタリング厨になりつつある(w
0294デフォルトの名無しさんNGNG
Singletonの様に生成するインスタンスが一つだけではなく、
有限個のインスタンスを生成する場合に適用するパターンってありますか?

たとえば、コマンドキューにコマンドを流し込んで、
それを受理する実体が複数個(可変)ある場合など。
0295デフォルトの名無しさんNGNG
>>294
それも Singleton だと思うが。。。
記憶違いかも試練が単数もしくは有限個にインスタンスの生成を限定するパターンが Singleton だと。
0296デフォルトの名無しさんNGNG
>>294はn個以上インスタンスを作らない、っていう制限がありそうに見えないんだが…
0297デフォルトの名無しさんNGNG
>>296
時間のかかる処理をスレッドで走らせて、
ユーザーが設定により走らせるスレッド数を決定できるんだけど、
現実的に2,3個同時に走らせる位が限界なので、
限界といえば一応あります。
0298デフォルトの名無しさんNGNG
蝿の重さ。。。
0299デフォルトの名無しさんNGNG
>>294
そのものずばり、というパターンはないけどMediatorパターンでコマンドと
スレッドの仲介をやってやるのがいいかな、とは思う。

並行動作するオブジェクトの協調パターンは「プログラムデザインのための
パターン言語」にいくつか載ってるので参考になるかも。
0300デフォルトの名無しさんNGNG
age
0301デフォルトの名無しさんNGNG
>>277
激しく同意。
漏れの精進が足りないだけかもしれん、
日を改めてもう一度読んでみよう。
0302デフォルトの名無しさんNGNG
リファクタリング
目からうろこが落ちたーよ。
リファクタリングしている間は一切機能の追加はしてはいけないって言うの。
言われてみればそのせいで収拾がつかなくなったプロジェクトがイパーイ。
0303デフォルトの名無しさんNGNG
いてれたパターンの存在意義おせーて。
yuki本読んだけど意味わからず。
0304デフォルトの名無しさんNGNG
>>277
ハッチングは,訳が下手なので×.原書をあたったほうが良い.
この本の監訳者の本は訳の具合を品定めして原書を買うかどうか
を判断した方が吉.
0305デフォルトの名無しさんNGNG
>> 303
同じところで悩んだよ。サンプル見ても単一の走査パターンなので、
まったく存在意義が感じられなかったよ。走査パターンを増やしてみて
はじめて存在意義が感じられたよ。
0306デフォルトの名無しさんNGNG
>>303
C++のSTLのコンテナクラスなんかだと、データ構造が違っても
同じ方法でアクセスできるね。
0307デフォルトの名無しさんNGNG
>>303
一つの集約オブジェクトに対していっぱい走査位置を持てる
0308デフォルトの名無しさんNGNG
>>303
実装がツリーだろうがハッシュ表だろうが
線形リストだろうが配列だろうが
同じ方法でスキャンできる。
0309デフォルトの名無しさんNGNG
質問です。
現在3Dのラッパークラス(D3D/OpenGL)を作ってるのですが、
下のような感じになりますよね、これだけ見るとAbstractFactoryっぽいのですが、

class Driver {
public:
 Texture* createTexture();
 Mesh* createMesh();
 ...
};

当然レンダリングはドライバの機能なので、Render()というメソッドも用意することになります。
そうすると、AbstractFactoryとしては微妙なクラスになっちゃいますよね。
で、次に考えたのが、

class Factory {
public:
 Driver* createDriver();
 Texture* createTexture();
};

こうなるのですが、テクスチャはドライバに依存するので、
Texture* createTexture(Driver*);
このようにせざるを得なくなります。
どっちの方がスマートな設計と言えるのでしょうか?
個人的には前者かな、と思っているのですが。
0310309NGNG
どこのAbstractFactory/FactoryMethodの解説を読んでも、
ツールキットや部品を提供するフレームワークは決定されている前提で、
その状態からのConcreteProductを生成する解説しかなく、
フレームワークから選択自由な状態での解決手法がよく分からないんです。
0311デフォルトの名無しさんNGNG
class DriverFactory
{
public: static Driver* create();
};

class ObjectFactory
{
public:
Texture* createTexture();
Mesh* createMesh();
}

class Driver
{
public: ObjectFactory* createObjectFactory();
};

こう。
031281NGNG
デザインパターンってノストラダムスの大予言みたい。
あいまいでなんとでも解釈できる。
そして事件が起こった後で「これは予言されていた」とか言うの。
0313デフォルトの名無しさんNGNG
>>81
がんがれよ、応援してるよ。
0314デフォルトの名無しさんNGNG
http://www-6.ibm.com/jp/developerworks/java/020524/j_j-bitterjava.html
「Bitter Java」の味
アンチパターンによってプログラミングはどのように改善されるか
面白かったのでage
0315デフォルトの名無しさんNGNG
今更だけど、やっぱりIBMはすごいな。
いい人を抱えてるよ。MSDNの記事より資料価値も高い
0316デフォルトの名無しさんNGNG
IBMの人じゃなくて独立コンサルタントと書いてあるけど。

あと、アンチパターンはデザインパターンほど役に立つとはどうしても思えない。

デザインパターンはコードの形で明確に定義されて、誰でも学ぶことのできる技
術だけど、開発プロセスにおけるアンチパターンはなんだか曖昧で、単に「あり
そうな話」を羅列しただけの気がする。たしかにもっともらしいけど、具体的に
は役に立たない精神論というか。

「人に迷惑をかけないように気をつけましょう」「常に積極的に学ぶ姿勢を大切
にしましょう」とかの標語と同レベルに思える。

記事にあったバグパターンまで細分化すると、これはずいぶん明確ではあるけれ
ど、「パターン」と名をつけるまでもなくありがちなバグ類型の収集はそれこそ
何十年も前から行われていたわけで、パターン化したこと自体に価値があるデザ
インパターンとは大きく異なる。

だいいち、こういうバグパターンを挙げていったらそれこそ何千にもなるに違い
ないが、それを暗記して避ける努力をすることに価値があるかというと甚だ疑問
だ。
0317デフォルトの名無しさんNGNG
>>316
あんたみたいな人がありがちな罠に陥らないようにするためのアンチパターンだろ。
0318316NGNG
>>317
意味わからん。デザインパターンみたいにカタログに整理したら
全200巻くらいになるんじゃないか、といってるんだが。
0319デフォルトの名無しさんNGNG
縦読みなんで間違ってるかも知らんが、
成功例をパターン化したものがデザインパターンで、
失敗例をパターン化したものがアンチパターン?
0320デフォルトの名無しさんNGNG
>>318
あなたのケースを「「「アンチパターンは具体例として有効である」症候群」アンチパターン」として、私のアンチパターンに登録しますた。
0321デフォルトの名無しさんNGNG
抽象的なお話なら当然役にたたんし、具体例も役に立たないのか。
アンチパターンは役に立たないというアンチパターンか。
パラドックスだね。
0322320NGNG
ま、印象だけで語ってないで、「アンチパターン -ソフトウエア危篤患者の救出-」の
第四章「アンチパターン使用上の注意」だけでも、読んでみれ。
8ページしかないから、立ち読みでも頭に入るよ。
したら、アンチパターンっていうのは、役に立つ、しかも抽象的な事だってわかるよ。
それから、アンチパターン本は網羅するのが目的じゃない、ってことも。

それから、プログラミングで「抽象」といったら、abstractで、
「事物や表象を、ある性質・共通性・本質に着目し、それを抽(ひ)き出して把握すること。」
の意味で使うこと、わかっといてね。
0323322NGNG
「abstractの意味の中でも」だ、
0324デフォルトの名無しさんNGNG
結城さんの本読んでるけど
Factory Method パターンの Factory class の
create メソッドがどうして (String owner)
なんていう argument を取るか小一時間考えても
わからない漏れはダメかもわからんね(;´Д`)
0325デフォルトの名無しさんNGNG
>>322
『全社的おんぼろ煙突システム』パターンなら結構みかけるぞ。
某社では、部署ごとに使ってるシステムやソフトが全く違うので、部署間のデータのやり取りは殆どアナログ。
デジタルデータもネットワーク組んでるにも関わらず、フロッピーでやり取りしてる!(大藁)
0326デフォルトの名無しさんNGNG
>>324
カードの持ち主(=owner)でしょ。
なにが引っかかるの?
0327デフォルトの名無しさんNGNG
>>326
もしかして実装ベースで考えすぎて、抽象的に考えられないのかも知れんね。
0328デフォルトの名無しさんNGNG
保守age
0329デフォルトの名無しさんNGNG
http://www.hyuki.com/dp/dpfaq.html
「デザインパターンFAQ」有名だとは思うけど念のため
一番面白いと思ったのはこれ↓

>結局のところ、うちのおばあちゃんに聞けば教えてくれるような
>アドバイスになるだけなのに、手間ひまかけてパターンを書くのは
>どうしてですか?
>
>パターンの中には、あなたのおばあちゃんですら知っているくらい
>とても良くて役に立つものがあるからです。
>パターンを書くことによって、そのアドバイスのコンテキスト、
>価値(value)、そしてその意味(implications)が
>おばあちゃんのアドバイスよりも明確になるのです。
0330デフォルトの名無しさんNGNG
Builderパターンで、Directorの存在意義が分からないのですが、教えてもらえませんか?
Builderパターンはそれ自身でProductの生成をラップしているので、
Clientが直接Builderをいじればいいと思うのですが。

たとえば、以下のページで解説されている様な例の場合、
ttp://www.seto.nanzan-u.ac.jp/~amikio/NISE/member/yamada/Builderhtml/Builder.html
DirectorもほぼBuilderと同一のメソッドを持つので、
Directorの定義の分だけ余分な手間がかかるだけで、メリットは皆無な気がします。

複雑な生成を一つのメソッドで行える以下の様な形式なら、
ttp:/\www.dmz.hitachi-sk.co.jp\Java\Tech\pattern\gof\builder.html
Directorの存在意義もあると思うのですが、
これだとコードに記述したとおりのみの静的な解決になってしまうと思います。

勿論、Directorがそれ自身パラメータを見ながら生成手順を変える事も出来るだろうけど、
それならやっぱりClientがBuilderを直接操作しても良いじゃないかという気になってしまいます。

・ClientがBuilderを直接操作する(ClientがDirectorを兼ねる)のはよくないやり方ですか?
・Directorクラスに、生成に関するメソッドを持たせるというのは、よくないやり方ですか?
0331デフォルトの名無しさんNGNG
2番目のURLは
ttp://www.dmz.hitachi-sk.co.jp/Java/Tech/pattern/gof/builder.html
です。

ローカルに保存したままの形式だった物で。
0332デフォルトの名無しさんNGNG
Builder = 単体でオブジェクトを生成する者
Director = Builderを使用して一つのオブジェクトを作り上げる者

それぞれ分けて抽象化することで再利用性を高めてるんだと思われる。
ただ、Builderに限った話じゃないがデザパタはかなり丁寧に
汎用化されているので状況に応じてステップを省略したり
融合したりするのはよくある事だと感じてる。
というか完全に当てはまるパターンはそんなには出てこない。
が、変形してでも役に立つならそれでいいと思ってる。
0333デフォルトの名無しさんNGNG
『Java言語で学ぶデザインパターン入門』 マルチスレッド編
(結城浩著)が6/26に発売されるとのこと。
目次がウェブに公開されてるので買うかどうかの判断材料になるだろな。
http://www.hyuki.com/dp/dp2.html
0334逝って良しの1NGNG
>>324
多分動的に呼び出したいんじゃない?
メソッドで分けると静的なのしか書けないし、数値ーラベルは割り当てやら
名前やらで2段階必要になるので面倒。
0335デフォルトの名無しさんNGNG
protoype ベースの OOP では、
Singleton パターンも Prototype パターンも
意味が無いと言うかパターンとして成り立たないのだが、
GoFの再利用のためのデザパタはクラスベースが前提なのだろうか?
0336デフォルトの名無しさんNGNG
デザインパターンって何よ?
0337デフォルトの名無しさんNGNG
>>336
google 逝け
0338デフォルトの名無しさんNGNG
>>336
とりあえず>>329のリンク先のデザパタFAQを嫁
0339デフォルトの名無しさんNGNG
>>335
それはGoFも触れてたと思ったけど。
言語によっては特定のパターンはそもそも不要な場合もある、みたいな感じで。
0340デフォルトの名無しさんNGNG
ほらほら!読んで見れ!
http://www2.gihyo.co.jp/books/bookinfo.asp?ID=4-7741-1490-1
0341デフォルトの名無しさんNGNG
>>340(←ちなみにコイツはマルチ野郎)のリンク先の
「Java開発者のためのアンチデザインパターン 〜失敗を回避する秘訣」
(安藤 利和 著)は本屋で読んだがはっきりいってクソ。
デザパタの悪い面として、
・デザパタを知らない人にデザパタの言葉でしゃべっても通じない云々
などと書いてある。わざわざイラスト入りでだ。そりゃあ通じないだろう。
でもな、そんなのデザパタに限った話じゃないだろ。もうアフォかと(略
あと、何ページも渡って
・コーディングをする時にコピペを使うと良くない云々
とも書いてある。そりゃその通りだけどさ、だからなんだってんだ?
今さら金払って読みたいようなことではない。
普通にGoF本か、Java使いのデザパタ初心者なら結城本あたりを
買うべきだろう。頭を悪くしたい人にはこの本をお勧めするが。
0342デフォルトの名無しさんNGNG
>>341
当たり前のことが書いてある本って入門者にはとても良いと思われ。
その狭い視野もデザインパターンのおかげかい?
0343デフォルトの名無しさんNGNG
>>342

> その狭い視野もデザインパターンのおかげかい?

実は結城タンのレスだったりしてね(藁
0344デフォルトの名無しさんNGNG
デザインパターンはかなり有用。
age
0345デフォルトの名無しさんNGNG
>>344
結城タンの本も、確かに判りやすい事は判りやすいのだが、イマイチ実戦でどう使いこなすのかが
見えてこないのよね。『デザインパターン』を勉強するための本であって、実戦向きではないと思我。
その点 http://www2.gihyo.co.jp/books/bookinfo.asp?ID=4-7741-1490-1 はじっくり読んでくと
「おいお前ら!この手は使えるじゃねーか!ゴルァ!!」てのが学べて結構(・∀・)イイ!
0346デフォルトの名無しさんNGNG
>>345
それならいいんだ。ただデザインパターンがすべてで工夫しないアフォに困ってるんだ。
0347デフォルトの名無しさんNGNG
本を読まねばならない。
お金が無い。

↓くれ
0348デフォルトの名無しさんNGNG
AIをあげます。
0349デフォルトの名無しさんNGNG
>>346
「アンチデザ・・」にも書いてあったね。確か「デザパタ症候群」って。(・∀・)
0350347NGNG
病気になるほど使えるものなのか?
かーやってみてぇなぁ
0351デフォルトの名無しさんNGNG
>>349
アンチデザって何?アンチパターンのこと?
0352デフォルトの名無しさんNGNG
>>350
って言うか死ぬほど考えてクラス設計してたらデザインパターンの一つに行き着くみたいな。
じゃあ、初めから知ってた方が速いと。
0353デフォルトの名無しさんNGNG
>>351
>>340
0354デフォルトの名無しさんNGNG
>>353
サンクス
面白そうな本だね。
買ってくるよ
0355デフォルトの名無しさんNGNG
>>352
その過程を大事にしなよ。。
0356デフォルトの名無しさんNGNG
>>355
いや、わかってる。

その課程でデザパタを知ってた方が良いなと思った。

自分が思いつきもしない問題点があるかも知れないし。
それに固執する気はさらさら無いけどね。
0357デフォルトの名無しさんNGNG
C++のキチンとオブジェクト指向で書かれた大規模なソースみたいんだけど
いいのない?
0358デフォルトの名無しさんNGNG
デザパタは飲んでも飲まれるな。
0359デフォルトの名無しさんNGNG
>>358
デザパタを有効に使う場面は、リファクタリングしてる時が一番いいね。(・∀・)
0360デフォルトの名無しさんNGNG
>>358
なんつうか当たり前
そんな議論しても無駄
0361デフォルトの名無しさんNGNG
http://hccweb1.bai.ne.jp/tsune-1/
VB.NETでデザパタ
0362デフォルトの名無しさんNGNG
デザパタママ〜♪デザパタママ〜♪デザパタ〜♪

七時〜朝もデザパタ イテレェタ〜♪
八時〜みんなお出かけ早くも シングルト〜ン♪





替え歌しようにも原曲と歌詞が思い出せない…誰か後を頼む……ぐふっ!
0363デフォルトの名無しさんNGNG
最後は死ぬんだっけ?
0364デフォルトの名無しさんNGNG
8時〜今日もかたかたコーディング〜♪
0365デフォルトの名無しさんNGNG
パタパタママくらい、ぐぐれよ(w
0366デフォルトの名無しさんNGNG
●C++で読むデザインパターン
http://www.tomozo.ne.jp/yamazaki/download/doc_design_pattern.htm
>パターンの解釈の仕方が間違っているかもしれません

と本人も言っているようなのでここに晒す。
あってる?>有識者ら
0367デフォルトの名無しさんNGNG
囚人のジレンマについてお尋ねしたいがいかがなものか。
0368デフォルトの名無しさんNGNG
いかがなものかというのはいかがなものか。
0369デフォルトの名無しさんNGNG
スレ違いだ確信犯め(w
0370デフォルトの名無しさんNGNG
>>366
本人なら正直にそう名乗れよ
別にダレも叩きはしないから
0371デフォルトの名無しさんNGNG
>>366
とりあえず、1 ページに全部書くのはいかがなものか。
0372デフォルトの名無しさんNGNG
すみません、デザパタ初心者なんですが、gofパターン、
一度に全部は無理なので、役に立ちそうなものから順々に
やっていきたいと思ってます。
どこいらへんから手を付ければいいでしょうか?
0373デフォルトの名無しさんNGNG
役立たず
0374デフォルトの名無しさんNGNG
>>372
プログラム初心者ならプログラムの勉強から手をつける
プログラム初心者でなければ、デザパタにあてはまるコードを
すでに知らないうちに書いている
0375デフォルトの名無しさんNGNG
デザインパターンの勉強をして、知らないうちに書いていた記憶のない
俺はまだプログラム初心者ですか?
0376372NGNG
>>374
それはなんとなくわかるんですが、一応知識として
整理しておこうと思っていまして。
なんか、重要な4つとかいうのがあるとかという話を
きいたこともあるんですが。
0377デフォルトの名無しさんNGNG
結城本の目次を見れ。
多分あの順序が一番わかりやすかろうて。
0378デフォルトの名無しさんNGNG
>>372
体系的(というほどのものでもないが)な知識を身に付けるのに
つまみぐいという根性が気に食わん(藁
端からガリガリ読んでけよ。

もし飽きっぽいなら全体を一読して馴染み深い
(=自力で開発済みの)パターンから攻略してけば
気分的には楽かもね。

どうしても有用有名にこだわるんなら
googleのヒット件数の多いものからやっとけ。
0379デフォルトの名無しさんNGNG
どうでもいいが、ファサードって読めなかった人何人くらいいますか?
わしだけですか?
0380デフォルトの名無しさんNGNG
読めなかたヨ
0381デフォルトの名無しさんNGNG
わしだけじゃなかったか。安心しますた。
0382デフォルトの名無しさんNGNG
今の今までファケイドって読んでたよっ!ヽ( `Д´)ノ

おや、結城さんとこのギコ、新作がでてるね。禿ガイ?
0383逝って良しの1NGNG
あげ
0384デフォルトの名無しさんNGNG
オブザーバー って、イベントリスナー と同義だよね?
ちょっと違う?
0385デフォルトの名無しさんNGNG
デザパタってあんまり流行らないうちに時代遅れになっちゃったね
0386デフォルトの名無しさんNGNG
※デザパタをオブジェクト指向に置き換えて読んでみよう
0387デフォルトの名無しさんNGNG
何が流行ってんの?
0388逝って良しの1NGNG
夏風邪
0389デフォルトの名無しさんNGNG
>>387
「どの言語にしたら」系スレ
0390デフォルトの名無しさんNGNG
デザインパターンってよく知られたアルゴリズムとかと同じでしょ?
0391デフォルトの名無しさんNGNG
…お父さん、390がかわいそうだよ…。
0392デフォルトの名無しさんNGNG
どこが違うんですか?
0393デフォルトの名無しさんNGNG
どこが同じなの?
0394391NGNG
>>392
デザパダの勉強しなおし。
GoFってデザパタ≠アルゴリズムって書いてなかったっけ?
他の本で見たのかな…失念してしまった。
0395デフォルトの名無しさんNGNG
やっぱり2ちゃんて低レベル・・・。
0396デフォルトの名無しさんNGNG
これだけ大きな掲示板になると、厨から神まで
いろんな人間が来るから仕方ないだろ。ただ、
厨が目立つだけだよ、恥ずかしげもなく書き込むから。

…まぁ俺も人のこと言えないけど
0397390NGNG
すいません先生(´Д ⊂ヽ
でもそういう意味で逝ったんじゃないんです。
0398デフォルトの名無しさんNGNG
>>382
同じくヽ( ´Д`)ノ
フランス語が語源なのね・・・それなら仕方あるめぇ、てやんでえぇ、ばろめ。
0399デフォルトの名無しさんNGNG
        ∫
   ∧,,∧ ∬       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ミ,,゚Д゚ノ,っ━~  < フサーど。
_と~,,,  ~,,,ノ_. ∀  \_________
    .ミ,,,/~),  .| ┷┳━
 ̄ ̄ ̄ .し'J ̄ ̄|... ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄   .┻
0400デフォルトの名無しさんNGNG
ふぇけいど
0401デフォルトの名無しさんNGNG

おい、おまいら
           ___ 00        /
|__ __  ____         /
|    __|   |   ____  /|
|__ __|   /              | 

を流行らすのじゃ!

参考スレッド 森恒二ホーリーランド拳闘暗黒伝セスタス技来静也4
http://comic.2ch.net/test/read.cgi/comic/1025843878/551-591

0402デフォルトの名無しさんNGNG
>>681
hyoderi pattern ですか?
0403デフォルトの名無しさんNGNG
デザインパターンを駆使したオープンソースのプロジェクトってありますか?
ある程度大きいソースを見たいのですが。
0404682NGNG
>>402
違うよ。
0405デフォルトの名無しさんNGNG
>>403
Java 製なら大体はデザインパターン使ってる。
適当に探してみ。
0406デフォルトの名無しさんNGNG
|-`).。oO(>>403 xUnitなんてどうかな・・・)
0407デフォルトの名無しさんNGNG
State パターンって、それぞれの状態ごとに固有のデータとか持たないもんなんですか?
↓のソース(C++)の State_1::counter みたいなやつのことです。

class State {
public:
  virtual ~State(){}
  virtual State* Update( Context& c ) = 0;
};
class State_1 : public State {
private:
  int counter;
public:
  State_1( int a ) : counter( a ) {}
  State* Update( Context& c ){
    if( counter > 0 ){
      --counter;
      return 0;  // 状態を維持
    }
    else
      return new State_2;  // State_2 へ移行
  }
};
struct State_2 : public State {
  State* Update( Context& c ) { return new State_1( 10 ); }  // State_1 へ、初期値 10 で移行
};
0408403NGNG
>405 >406
ウオーサンクスコ
さがしてみます
0409デフォルトの名無しさんNGNG
まことに勝手ながら、ただいまからこのスレは

「デザインパターンは戦場では必要なし」

となりました。よろしこ。
0410デフォルトの名無しさんNGNG
本当に勝手だな
0411デフォルトの名無しさんNGNG
デザインパターンをマスターするとどうなるの?
0412デフォルトの名無しさんNGNG
パターンに合ったコードをすんなり読めるようになるだろ
0413デフォルトの名無しさんNGNG
Producer-Consumerパターンというのを聞いたことがあるんだけど
これはObserverパターンの別名って事でいいのかな。
0414デフォルトの名無しさんNGNG
想像だと違う。むしろストリームのパイプとかじゃないかな。
Producerは適当に生産しつづけるんだけど、
在庫がいっぱいなったら倉庫に空きができるまで待つ。
Consumerも気まぐれに消費するんだけど、
在庫がなくなったら、入荷するまで待つ。
そんなんじゃない?同期しないのがポイントとか
0415デフォルトの名無しさんNGNG
>>413
デザパタより、マルチスレッドプログラムのモデルで使われる単語だと思うが。
0416デフォルトの名無しさんNGNG
有限バッファ問題とかいうやつかな
0417デフォルトの名無しさんNGNG
http://www.hyuki.com/dp/dp2.html#contents
0418413NGNG
解答ありがとう。その後結城浩のデザパタ本のマルチスレッド編も読みました。
ところが、質問を間違えてしまいました。非常に申し訳ない。
Publisher-SubscriberパターンというのはObserverパターンの別名ですか?
ぐぐってみたら
http://www.google.co.jp/search?q=%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3+Publisher+Subscriber+Observer&ie=UTF-8&oe=UTF-8&hl=ja&lr=
このページには別名であるかのように書いてあり
http://objectclub.esm.co.jp/observer-multithread/
このページにはObserverはPublisher-Subscriberの一種のように書かれています。
http://www.freeml.com/ctrl/html/MessageForm/[email protected]/1199/
0419デフォルトの名無しさんNGNG
>>418
それを読む限り、後者の「Publisher/Subscriber」は分類名であって、
パターン名ではないよな。なぜ言葉の使い方の違いと気がつかないのか君は
0420デフォルトの名無しさんNGNG
簡易HTTPサーバを作るため、
GET DELETE POST PUT 等のリクエストを処理するクラスを書こうと思っています。

そこでお伺いしたいのですが、どのパターンを参考にすれば良いでしょうか。
アドバイスください。
0421デフォルトの名無しさんNGNG
コマンドパターン
0422デフォルトの名無しさんNGNG
>>420
その

パターンいくつかくっつければプログラムかんせーい!

と言うのが一番怖いと。

その人のデザインによってどのデザインパターン使うかって変わってくる気がした。
0423デフォルトの名無しさんNGNG
>>421
的確な回答ありがとうございます。非常に参考になりました。
>>422
勝手にデザパタ房扱いしないでくれ。
それに後半の意見には賛同しかねる。
パターンとは目的に応じた定石なのだから。

…と質問した分際で言い放ってみるテスト。
0424デフォルトの名無しさんNGNG
>>423
その目的(簡易HTTPサーバを作りたい♪は大きな目的ではあるがココデハそれを指してはいない)がはっきりしてないのにデザインパターン?笑止千万。
と、火蓋を切ってみる。
0425名無しさん@XEmacsNGNG
>>424

> はっきりしてないのにデザインパターン?笑止千万。

もとの質問では 「リクエストを処理するクラスを書こうと思っています」
ってあるからある程度ははっきりしてるのでは?
ある程度やることが決まってるんなら、適用できそうなデザインパターンを
列挙して、イメージしてくのが普通では?
0426デフォルトの名無しさんNGNG
GOF以外で良いのはないすか?
0427426NGNG
マルポスになっちまった失礼
0428デフォルトの名無しさんNGNG
つうか、デザパタってそんなに使う?
Singleton, Flyweight, Composit, Observerは
考えなくてもやるから置いといて、他に普通使うのあるか?
0429デフォルトの名無しさんNGNG
Flyweightなんて使うか?
0430デフォルトの名無しさんNGNG
>>428の他に
Adapter,Bridge、Proxy、TemplateMethod、State、
Strategy、Chain of Responsibility、Mediator、Facade
もそいや使ってるよ普通に
0431デフォルトの名無しさんNGNG
実際に使われているプロジェクトのソース見てみたいな。
昔のような目から鱗ソースをみる感激がほしい。
0432デフォルトの名無しさんNGNG
デザパタのStateパターンって、無理矢理作りましたって感じで
エラく汚い気がするんだがどうよ。
0433デフォルトの名無しさんNGNG
>Chain of Responsibility
使うのか・・・
0434名無しさん@XEmacsNGNG
>>433
たまにChain of Responsibilityだ!!と思って設計始めるけど
やっぱやーめたってなる事が多いな。
フィルタとか、リカバリ処理とかに使えると思うのだが。
0435デフォルトの名無しさんNGNG
>>433
パケット処理でswitchの分岐が複雑になる場合につかうなぁ。
0436デフォルトの名無しさんNGNG
>>432
パターンありきで無理矢理作ると、どんなパターンも汚くなりがち。
そうじゃなくて、既存の汚い(または汚くなりつつある)コードに
ほどほどにパターンを適用すると良い効果がでてくる。
0437デフォルトの名無しさんNGNG
「ツリー構造のノードから値を取得する」状況ってよくあるはずだけど、
必ずといっていいほどChain of Responsibility になるだろ
0438デフォルトの名無しさんNGNG
>>437
Visitor。




                           …漏れは使わんが。
0439デフォルトの名無しさんNGNG
>>437
ノードへのアクセスって、それ程メッセージのフォワーディングが
発生するかな。

>>438
>>437のいう条件だけだと、マルチディスパッチを要するとは言えない。
この時点でVisitorを持ち出すのは早すぎる。


              …どっちにしろ漏れは使わんが。
0440デフォルトの名無しさんNGNG
いや、ノードへの順次アクセス(=Visitor)じゃなくて、
ノードから値をとる→値が設定されてない→デフォルト値の提供 っつー形で
0441デフォルトの名無しさんNGNG
背伸びしてAlexanderの原書購入してみたが、
文体も構文も難しくて理解できそうにない。

敗北age。
0442デフォルトの名無しさんNGNG
結局デザパタ知っていても使わないねー。

使うのは、イレテータと、プロキシくらいか。ビジターもちょっと使ったけど。
とにかく要らないのが多すぎ。実用度が低い。所詮ブームの1つだったって感じ。
0443デフォルトの名無しさんNGNG
>>442
http://homepage2.nifty.com/rohizuka/ka/pa_003_a.htm
0444デフォルトの名無しさんNGNG
>>442がVisitorを理解していないに一票。

>>443が今夜金縛りにかかるにもう一票。
0445デフォルトの名無しさんNGNG
>>443が呪われるに一票。
0446デフォルトの名無しさんNGNG
パターンそのものの有用性より、そのパターンに名前がつけられてることに意味がある
、、、と思ってる俺は厨房?
0447デフォルトの名無しさんNGNG
>>446 所詮、その程度のものでしたってこった。
0448デフォルトの名無しさんNGNG
>>446 厨房ではない
>>447 厨房
0449名無しさん@XEmacsNGNG
>>446
名前だけじゃなく、適用することにも意義がある。

デザインパターンを適用している場合、クラス名からどんなクラスか
想像できるし、hogehoge役はどれかな〜って想像しながらソースを読
めるので、ソースの解析が楽になる。
0450デフォルトの名無しさんNGNG
同意。
使っていかなきゃ意味が無い罠。
0451デフォルトの名無しさんNGNG
VB.NET は屑!!
0452デフォルトの名無しさんNGNG
>>449
そんなもんコーディング規約で解決することも出来ると思うが。
0453名無しさん@XEmacsNGNG
>>452
ハァ?コーディング規約で何が解決するの?ハンガリアン記法とかアフォ
事言わないよね?
デザインパターンを使ってれば、「クラス名」から「デザインパターン名」
が連想できて、さらに、「デザインパターン名」から「UML図」まで連想
できますが。
0454デフォルトの名無しさんNGNG
>>452
どこまで踏み込んだコーディング規約作ってんだ?
0455デフォルトの名無しさんNGNG
>>452
煽ってばかりなのもつまらんので、ちょっとまじめに書いて見るけど、
コーディング規約とデザインパターンが互いに置き換えられないのは、
抽象度が違うから。

パターンと言われてるものを、抽象度の高い順に有名どころを並べて見ると、
・アナリシスパターン(ドメインの話)
・デザインパターン(デザインの話)
・イディオム(言語の話)
・コーディング規約(書き方の話)
って感じ。
# ちょっと作為的なんだけど突っ込まないでください。

書き方の問題に対する解法でデザインの問題を解くことに無理があるの
は分かってもらえると思うんだが。
もしオブジェクト指向が苦手な人だったらデザインパターンをアルゴリズム
に換えて考えて見ても、納得してもらえるんじゃないでしょうか。
0456デフォルトの名無しさんNGNG
「デザインパターンを使う理由」
→>>267

じゃいかんのか?
0457デフォルトの名無しさんNGNG
>>456
Gof本の最終章のやつね。

でもあれって、「一度テストを通ったプログラムは決していじってはいけない。」
って思ってる人(今でも結構多いと思いませんか?)にはなかなか通用しない
ところが難しい。
0458デフォルトの名無しさんNGNG
>>457
目的もよく理解出来ずに手段だけ取り上げて
「こんなの使えない」「こんなパターンなんて俺でも知ってる」
とか言ってる程度の奴には使えるようにはならんよ。

デザインパターンを有効に使える場面がある訳だから
分かってる人が有効に使えばいい話だよな。
0459デフォルトの名無しさんNGNG
他のものはともかく、テンプレートメソッドパターンも使わないやしっているんだろうか?
0460デフォルトの名無しさんNGNG
俺はシングルトンとテンプレートメソッドしか使えない
氏んでくる・・・
0461デフォルトの名無しさんNGNG
>>460
実装側じゃなくて抽象側でテンプレートメソッドが使えるとしたら
大丈夫です。氏ななくて良いです。
きっとオブジェクト指向の基本は既に理解できていると思うんで、
これから必要に応じて語彙を増やしていくのは割と簡単なはず。

まあ遅レスですけど。
0462デフォルトの名無しさんNGNG
>>458
禿同。パターンを侮るとパターンに泣くね。
0463デフォルトの名無しさんNGNG
Java 最 高 !!
0464デフォルトの名無しさんNGNG
質問す。
アグレゲーションとコンポジションの違いがわかりません。
絶対必要な部品とそうでない部品というように思うんだけど、
それって主観の問題っていうか、微妙な当落ラインがある
んじゃないかと思うのですが、どうなんでしょう。
それとも、ビチッと決まるのでしょうか。

解答、あながいしますねー。
0465デフォルトの名無しさんNGNG
>>464
微妙にスレ違いな気がするが…

compositionはaggregationの一種で、aggregationは
associationの一種。
生成と消滅のタイミングが部分と全体で共通なのがcomposition。

c++の実装レベルなら「ビチッと決まる」けど、分析・設計レベルだと
グレーゾーンはある。ってかcompositionをふくめたaggregation自体、
「気休め」「使うべきでない」と言う人もいる。
0466464(あげます)NGNG
>>465
だめもとで聞いてみたんですが、レスありがとうございます。
なんか、前半のお話は勉強になりました。

ただ、
>生成と消滅のタイミングが部分と全体で共通なのがcomposition。
だと、compositionでないaggregationは、C++の実装レベルでは
何になるのでしょう?それと、
>「気休め」「使うべきでない」と言う人もいる。
俺の勘違いだと思うんすけど、コンポジションを使うべきでない?
というのは、まったくわかりません。メンバ変数を使うなというように
聞こえるのですが。。。

スレ違いならすみません。
でも、できたら教えてください。
お願いします。(今度はマジです。)
0467464NGNG
>>465
連続質問ですが。。。
そもそも「C++の実装」とUMLの書き方の対照がわかるような
本かサイトか資料をご存知でしたら、教えてください。
お願いします。
0468デフォルトの名無しさんNGNG
465 ではないが。

>>466
>だと、compositionでないaggregationは、C++の実装レベルでは
>何になるのでしょう?それと、
なんにせよ実装レベルでは関連はメンバ変数になる。

>俺の勘違いだと思うんすけど、コンポジションを使うべきでない?
>というのは、まったくわかりません。メンバ変数を使うなというように
>聞こえるのですが。。。
単なる関連として記述した方が、記述者による解釈のゆれが少なくて済む、
ということかと。

>>467
分析・設計と実装は分けて考えよう。
UML はどっちかというと分析・設計に用いるのがメイン。
0469464 == 466NGNG
一夜明けてみると、やっぱりスレ違いであることに気が付きました。
すみません。

>>468
にもかかわらず親切なレス。ありがとうございます。
0470デフォルトの名無しさんNGNG
Bridgeの意義を誰かわかりやすく教えてください
0471デフォルトの名無しさんNGNG
機能を提供する側が実装を提供する側のオブジェクトを使って
何かやっているようなケースは、みんな Bridge じゃないのかなあ?

たとえばプログラム中にデバッグ用のオブジェクトダンプルーチンを
組み込んだとして、ostream& なんかを引数にとって、状況に応じて
コンソールに出力したりファイルに出力したりできるようにすれば、
これは立派な Bridge だと思うんだけど、どうかな。
0472 NGNG
>>470
デザパタは名前からイメージしてみるのが吉。
Bridgeなら何か二つのものが橋渡しされてる構造を思い浮かべる。

とは言え、既にある二つの何かに橋を架けるイメージより、むしろ
何となく一枚板っぽい何かを、一方通行の橋だけ残して二つに
切り離すイメージに近い。

「Bridgeの意義」の中にはオブジェクト指向を使う意義と、
パターンを適用する意義が自動的に含まれるわけだが、それらを
置いといて敢えて一言で言うと「片側ごとの拡張」だと思うんだが。
どうよ?
0473 NGNG
>>471
それはBridgeじゃないのでは。
Implementorは外には見せない。
ちなみにBridgeの別名はHandle/Bodyという罠。

カタログ記載の構造はある程度大事にしてしかないと、パターンの
良さが失われるなり。
0474デフォルトの名無しさんNGNG
・Bridgeの(超かんたんな)具体例
・その具体例でBridgeを使うことでどういうメリットが得られるたのか。

を教えてください。
1割くらいはなんとなくわかってるつもりなんですが、残りの9割が
どうしてもわかりません。
0475デフォルトの名無しさんNGNG
・JDBC
・インタフェイスと実装が分離でき、実装の入れ替えができる
0476デフォルトの名無しさんNGNG
>>471
>>475
実装をクライアントが選択できればBridgeなんですか?
単なる多態とはどうちがうんでしょう?
0477デフォルトの名無しさんNGNG
>>476
クライアントをコンパイルしなおさなくても実装を入れ替えられる。
場合によっては(言語によっては)実行時に実装を選択できる。
0478 NGNG
>>476
手元に何かDesignPatternのクラス図とかある?
無かったら用意した方がいいし、あったらじっくり眺めてみるといい。
それを飛ばしてメリデメだけ考えてもいつまでたっても理解できない。

単なる多態との違いもクラスの構成を見れば分かる。
例えば単なる多態をこんな風に表現するとする、
 クライアント→抽象クラス⇒実装クラス
Bridgeにはこんな関係が二つ出来る。
 クライアント→Abstract抽象クラス⇒Abstract実装クラス
 Abstract抽象クラス→Implementor抽象クラス⇒Implementor実装クラス
(これは、多態との違いを示しただけで、Bridgeの構成には
まだ他にいつかのポイントがある。自分で確認してみてください。)

ある程度、基本を理解していないと具体例を示されても結局ピンと
こないんじゃなかろうか。
0479デフォルトの名無しさんNGNG
抽象クラスって必要か?
実地じゃ絶対に使わないんだが
0480デフォルトの名無しさんNGNG
使わなくて済むところもあれば、使わないと済まないところもある。
どんな技術でもそんなもんでしょ。
0481デフォルトの名無しさんNGNG
>>479
インターフェースも絶対に使わない?
>>480
抽象クラス使わないと済まないところってある?
0482480NGNG
>>481
俺の場合もう6年以上プログラマやってるけど、オブジェクト指向の
仕事しかしたことが無いから、当然OOD/OOPは飯の種だし、抽象クラス
なしに仕事はできない。

だけどプログラマの仕事といってもいろいろいる。
汎用機でCOBOLやってる人も、まだまだたくさんいるよ。
Webの仕事でもPerl4を使い続けてるとこともいまだに多い。
0483479NGNG
抽象クラスっていっても
実際にコード書くときは最初にスタブでラップしない?
作りこみを後回しにするなら当然そうするし
それなら抽象クラスじゃなくて
最初から適当なスタブでいいじゃんと思った。
まあそれだけです。
結局抽象的な意味としては変わらないか。
0484デフォルトの名無しさんNGNG
>>483
おれの場合、仮コード書くとしたら実装クラスに書くなあ。
つまり、抽象クラスは最初に書くわけだが。
0485デフォルトの名無しさんNGNG
>>484
いや、仮コードをわざわざ書くのが面倒ってことで。
0486デフォルトの名無しさんNGNG
ちょっとずれますがJavaのabstract classって中途半端な気がしませんか?
interfaceがあればいらない気がするのだけど。
「interfaceとclassをいっぺんに定義したいときの手抜き用」みたい。
0487デフォルトの名無しさんNGNG
>>486
昔、c++の仕事してたので、interfaceがあるだけ
進歩に思えるけど、そう言われるとそうかもしれん。

とはいっても手を抜けるとこは抜けるようになって
た方が実用的には良かったりする。

デメテルなんかも一理はあるけど、こだわり過ぎる
と無理が生じたり。
0488名無しさん@XEmacsNGNG
>>486
Interfaceはpublicな物しか定義できないけど、abstractなら、
非publicな物を定義できる。
ある事をするメソッドを、複数クラスに持たせたいが、public
にはしたくないって時とか。

まぁ基本的には、テンプレートとしての使い方がメインだが。
0489デフォルトの名無しさんNGNG
>>488
>Interfaceはpublicな物しか定義できないけど、abstractなら、
>非publicな物を定義できる。
それはpublicでないinterfaceを別に作ればよいのでは。

>ある事をするメソッドを、複数クラスに持たせたいが、public
>にはしたくないって時とか。
それは実装の問題で、インターフェースや抽象クラスの使い道とは
ずれるのでは。
0490U ◆CZtFsGiu0c NGNG
抽象クラスはTemplate Methodパターンを実装する時は当たり前の
ように使うし、そうでなくても共通の実装を基底クラスに抜き出して
共通化して、その基底クラス自体はインスタンス化したくない場合には使う。
0491デフォルトの名無しさんNGNG
ホワイトボックス再利用のTemplateMethodなんかより
ブラックボックス再利用のStrategyの方がイイじゃない。
0492U ◆CZtFsGiu0c NGNG
>>491
Template MethodパターンとStrategyパターンって単純に置き換えられる
ものじゃないでしょ。もちろん、Template Methodを使わなくても同様の
実装はできる。Template Methodのサブクラス実装部分を外に出して
コールバックオブジェクトとして渡すとか。その方が柔軟性はあるけど、
どっちがいいかはケースバイケースでしょう。
0493名無しさん@XEmacsNGNG
>>489
勘違いしてるようだが、
Interfaceで、protected なメソッドやフィールドが作れますか?
という話をしてる。
0494デフォルトの名無しさんNGNG
>>492
TemplateMethodからStrategyへは
カナーリ単純に置き換えられると思うが。逆は困難かも。

>>493
protectedなメソッドを使ってコードを共有するというのは実装法の話でしょ。
abstract classを使えばインターフェース定義と実装の一部が同時に書けて
「手抜き」ができるというのは>>486で既出。
フィールドも実装の話ね。フィールドを公開したりしちゃいかんでしょ。
0495デフォルトの名無しさんNGNG
interfaceとabstractの使い方って明らかに違うと思うけど。
0496デフォルトの名無しさんNGNG
>>493 未確認だが C# ではできるらしい
0497デフォルトの名無しさんNGNG
こんなの見つけた。

『Synthesizing Object-Oriented and Functional Design to Promote Re-use』
http://www.ifs.uni-linz.ac.at/~ecoop/cd/papers/1445/14450091.pdf

やってることは、Visitorパターンをエンハンスしてるだけっぽいけど、薀蓄は
たくさん書いてあるんで、デザパタと関数型言語の両方興味ある人はどうぞ。
0498U ◆CZtFsGiu0c NGNG
>TemplateMethodからStrategyへは
カナーリ単純に置き換えられると思うが。逆は困難かも。

それって、

>Template Methodのサブクラス実装部分を外に出して
コールバックオブジェクトとして渡すとか。

このコールバック部分をStrategyで実装するって事?
確かにできるけどその分複雑になるでしょ。だからケースバイケースだと:-)

>逆は困難かも。

困難っていうか、ロジックの枠組みを基底クラスで共通化できないと
Template Methodにする意味ないよね。
0499デフォルトの名無しさんNGNG
>>494は単に、間接層は増やすより減らすほうが難しいっていう事を、
一般論として言ってるだけと思われ。
0500デフォルトの名無しさんNGNG
だからシンプル設計で作っておいて、
必要が生じてから複雑にするのが望ましいのれす。

# UML PRESS vol.2 で似たような趣旨の記事があったな。
0501デフォルトの名無しさんNGNG
>>498
Javaで書けば、
this.template_method1(...)をstrategy.method1(...)に変えるだけだろ。
0502U ◆CZtFsGiu0c NGNG
>>501
派生クラスが基底クラスのprotectedメンバを参照していなければね。
0503 NGNG
TemplateMethod VS Strategy・・・アフォか。

と思ったけど、割とティピカルな継承 VS 委譲の図式でも
あるわけで、結構まともなテーマなのね。
0504デフォルトの名無しさんNGNG
>>490
C++ だと template method には template class 使っちまうな、俺。
0505デフォルトの名無しさんNGNG
属性文法の実装にビジターパターンを使うのって当り前でしょうか?
自分では画期的な思いつきのような気がしてるんですけど。
0506デフォルトの名無しさんNGNG
test
0507デフォルトの名無しさんNGNG
VisitorはCommandの拡張みたいな気がする。
呼び出したクラスへの参照をもたないのは、Commandナリ。しかし、
呼び出したクラスへの参照をもっていて、呼び出したクラスのメソッドを呼ぶことでVisitorになる。

Controller --> Command

Controller --> Visitor
Controller <-- Visitor

この解釈って、あってる?
0508デフォルトの名無しさんNGNG
>>507
ぜんぜん違うと思う。
0509 NGNG
>>507
Visitorはいいんだけど、Commandがちょっと・・・
GoF本にCoplienのFunctorとCommandパターンの違いが
書いてあるんで参照してみてはいかがでしょうか。

というかそのCommandと対比してVisitorを理解してるとすると
Visitorの方の理解もちょと怪しいかも。
0510デフォルトの名無しさんNGNG
age
0511デフォルトの名無しさんNGNG
ジャンに散々恥をかかされ復讐に燃える大谷は
偶然、キリコが自分の手先が経営している店で
食事をしているのを見かけた。
「げへへへ・・・おい、あの女の食べるものに
これを混ぜて来い・・・」
大谷の手先の店長はキリコの食べる食べ物の中に
大谷に指示された薬を混入した。
キリコは何の疑いも無く食べ始めた。
それは、五行に作らせた強力な睡眠薬の一種だった。
しばらくするとキリコは意識が無くなり始め食堂
の机に倒れこんでしまう。
「げぇへへへおい、あの女をを奥の部屋まで運べ」
店長は大丈夫ですか?といいつつ奥の部屋にキリコを
連れ込んだ。
全ては大谷の指示だった。
「さぁて、このクソ生意気な女をどう調理してやろうか
・・・ぐふふっ考えるだけで唾ができそうじゃわい」
意識を失っているキリコを目の前に大谷の目が妖しく光る・・・
                           続く
0512デフォルトの名無しさんNGNG
クラスをどうやって設計するのかがわかるような気がする<GoF本で
まだ全然読んでないけど有用な予感。
0513デフォルトの名無しさんNGNG
>>512
自分の5年前を見てるようだ。
ガンガレ
0514デフォルトの名無しさんNGNG
デザインパターン必死こいて学ぶヤシはチンカス
0515デフォルトの名無しさんNGNG
>>511
自分の5年前を見てるようだ。
ガンガレ
0516デフォルトの名無しさんNGNG
>>515
ジャン? 大谷? キリコ? 店長? 五行?
0517デフォルトの名無しさんNGNG
0518デフォルトの名無しさんNGNG
0519デフォルトの名無しさんNGNG
0520デフォルトの名無しさんNGNG
自分もまだ全部読んでいないのですが、
オブジェクトコンポジションが
何のことか具体的に良く分かりません。
文法用語なのでしょうか?
0521デフォルトの名無しさんNGNG
>>520
ガイシュツ。このスレを検索せよ。
0522デフォルトの名無しさんNGNG
>>521
すいません。
すべて読んではいませんが検索してから書き込みました。
またさらっと見てみたのですがありませんでした。
オブジェクトコンポジションというのは
compositionとなにか関係あるということでしょうか?
0523デフォルトの名無しさんNGNG
しょうがないなぁ。ほれ >>464-468
0524デフォルトの名無しさんNGNG
>>523
ありがとう。
オブジェクトコンポジションてこれのことなんですか?
0525U ◆CZtFsGiu0c NGNG
>>524
どういう文脈で出てきたのかわからないと誰も答えられないと思うぞ。
0526デフォルトの名無しさんNGNG
サーバー・クライアントソフトでサーバーはクライアントの出来る行為を
アカウント情報参照して許可・不許可するソフトの場合

if( アカウント情報参照結果が許可の時 ){
クライアントの要求を実行して結果を送信}
else{
その行為は許可されていない旨をクライアントに送信}

って感じのコードがあちこちに散在することになるんだけど、
なにかうまいデザインパターンはないでしょうか。
不許可の時に例外飛ばせばif文はなくなるけど例外ってコスト的に問題あるし・・
皆さんならどうしますか?
0527U ◆CZtFsGiu0c NGNG
>>526
「クライアントのできる行為」とやらをCommandパターンまたはStrategyパターン
でカプセル化。実行許可されている場合にはその処理を実行するオブジェクトを
生成し、不許可の場合は不許可時の処理を行うオブジェクトを生成して実行する。

Null Objectパターンと似てるけど、多分どっかで誰かがやってて名前がついて
そうな気がする。
0528デフォルトの名無しさんNGNG
>>525
失礼しました。
GOF本改訂版にてオブジェクト指向において機能を再利用する
技法としてクラス継承とオブジェクトコンポジションがある
とありました。

JAVAにおけるインタフェース実装のような技術で
文法用語なのかと思ったのですが、調べてみても
よく分かりませんでした。
0529デフォルトの名無しさんNGNG
>>527
レスありがとうございます。
なるほどNull Objectパターンですか。こうやって指摘されてみると
用途にぴったりのようです。
これをヒントに設計してみたいと思います。
ありがとうございました。
0530デフォルトの名無しさんNGNG
アナリシスパターンってプログラム設計には必要なんでしょうか?
DB設計には使えそうかなとも思うんですが。。。
0531U ◆CZtFsGiu0c NGNG
>>528
それは要するに、コードの再利用を実装継承で実現するか、集約+委譲で実現
するか、ということだよね。シンプルに説明すれば、既存のクラスインスタンスを
プライベートメンバとして持ち、そのインスタンスのメソッドを実行することで
再利用する方法です。

このスレッドで出てきたcompositionの説明は(現バージョンの)UMLにおける
composition(とaggregation)の定義ですね。
0532U ◆CZtFsGiu0c NGNG
>>530
その名の通り「分析」のパターンなので、プログラム設計レベルの話ではない
です。難解で有名な本なので、あまりお薦めしません。
0533デフォルトの名無しさんNGNG
オブジェクトコンポジションを利用した設計は継承を利用した設計よりも
柔軟性があります。

カプセル化という考え方からすると継承はメソッドのオーバーライドなどにより、
既存の設計を大きく変えれてしまいます。
また、コンパイル時に仕様が確定しないなど、セキュリティ上大きな欠点があります。

ただし、継承はプログラミング時にオブジェクト生成のための冗長なコードを書く必要が無かったり、
スーパークラスでメソッドを書き換えれば全てのコードにその影響を反映させることが
できるなど、メンテナンス性においてはオブジェクトコンポジションより優れています。
また既存の優れたデザインパターンを利用できるというメリットもあります。

どちらをとるかは要件により決定します。
0534528NGNG
>>531,533
ありがとうございます。
なんとなく分かりました。
0535デフォルトの名無しさんNGNG
jdkのソース読むとデザインパターンの勉強になりますか?
0536デフォルトの名無しさんNGNG
>>526-527
例外をそんなに嫌うこともないとは思うけど。

Command を実行する時点で例外を出したかったら、
Command + Proxy + Delegate で。

interface Command {
  void invoke();
}

class CommandProxy implements Command {
  private Command cmd;

  CommandProxy(Command c) {
    this.cmd = c;
  }

  void invoke() {
    /* security check */
    thic.cmd.invoke();
  }
}

// client code
Command targetCommand = new CommandProxy(new CommandImpl() );
targetCommand.invoke();
0537デフォルトの名無しさんNGNG
アナリシスパターンはよいよ〜。
1回目はちいとも分からんけど、通読だけはしておくことを薦めるよ。

ある時はたと悩んでアナリシスパターンをパラパラめくったら
「あらやだ!こんなところに解決策が」ということも多い。

>>530
DB設計というよりはモデル設計に使うよ。
モデルを作ってからDBの論理設計を行う人には役立つはず(自分はこっち)。
DB設計してからアプリを設計する人は使わないと思う。
0538デフォルトの名無しさんNGNG
質問いいスか?結城本の次に何読もうかなと思ってるんですけど、
>>273の書籍って「買い」ですか?
もっといいのが出てるよ、とかあるのかな?
0539デフォルトの名無しさんNGNG
『リファクタリング』は、あたりまえのことがあたりまえに書いてある。
そういうのは、実はなかなか無い。
「何がよいこととされているか」という価値観を知るのにも役立つ良書だと思う。
お勧め。結城本の次くらいのレベルなら、間違った癖をつけて欲しくないからなおさらお勧めだよ。。

『パターンハッチング』は、まあ暇があったら読んでみたら程度。
0540デフォルトの名無しさんNGNG
>>537
アナリシスって、ひと言でいうとどんな感じ?
0541デフォルトの名無しさんNGNG
>>540
分析
0542デフォルトの名無しさんNGNG
書籍名は忘れたが、たしか会計システムの設計例みたいな本が出てたな。
そこでパーティとかの概念使われてたから、アナリシスパターンがよう分からんという人にはいいかも


スレ違いにつきsage
0543542NGNG
ごめん、"企業情報システムの一般モデル"だった。
0544デフォルトの名無しさんNGNG
ちょっと違う話なんですが、GOF読んだあとに
憂鬱なプログラマ〜って本読んでみようと思うのですが、
よんだ人いますか?
0545デフォルトの名無しさんNGNG
>>504
読む順序が逆っぽい(w
0546デフォルトの名無しさんNGNG
>>545
やはりそうですか。
JAVAを使うことでオブジェクト指向がわかるか的に思って
きてしまったのできちんと本を読もうと思っています。
憂鬱な〜以外によいOOの本教えてください。
0547デフォルトの名無しさんNGNG
http://www.dmz.hitachi-sk.co.jp/Java/Tech/pattern/gof/list.html
既出だがここが一番わかりやすいと思う
0548デフォルトの名無しさんNGNG
>>546
初心者にとってはそれが一番いい本だよ。

>>547
お礼にいいページ見つけたんで紹介。
http://www.jahis.jp/about/katsudou/ki-gihou/2001/giho/giho2001-12.pdf
0549デフォルトの名無しさんNGNG
メリクリ!!
0550デフォルトの名無しさんNGNG
メリクリ!とかアケオメ!とかで女体の一部を連想してしまう私は
病気でしょうか?
0551Delフサギコ ◆A6VzDeLphI NGNG
               ________
      ∧,,∧    /
     ミ   彡  <  あなたさては
     (ミ   ミ)    \
      ミ   ミ      ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ∪ ∪


               ________
      ∧,,∧ サッ /
     ミ,,゚Д゚ミ  < やらしい人ですね。
    ⊂   Om   \
     ミ、,, ミ,       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      .しヾJ
0552デフォルトの名無しさんNGNG
あけオメコとよろ〜
0553デフォルトの名無しさんNGNG
パターンのリファクタリング前、リファクタリング後の良いソースとかないかなぁ
0554デフォルトの名無しさんNGNG
デザインパターンをCで書いたサンプルのコードはないかな?
0555デフォルトの名無しさんNGNG
>>553-554
ぐぐれ。あるいは書籍購入。
海外にいろいろある。
0556デフォルトの名無しさんNGNG
http://www.malib.net/api/ja/node2.html
これを参考に自分で書いてみるとか
0557名無し@沢村NGNG
ヌヒ等よ、俺はプログラムで使う全ての変数を基底クラスにprivateで宣言し、それにアクセスするメソッドをpublicで基底クラスに宣言することがよくあるよ。
そして派生クラスではそれらを操作するメソッドをそのクラスに応じて定義するわけだ。
そして必要に応じてそれからクラスをさらに派生したりコンポジションで包含したりするわけだ。
こうすると基底クラスですべての変数を管理できるとても見通しのよいOOになるよ。
俺はこの方法を自己流だが、もっともすぐれたデザインパターンのひとつだと思っているね。
0558デフォルトの名無しさんNGNG
>>557
これはたぶん沢村本人のものでは無い。
この昼休み時間中に、どこかのヒマなアフォがコピペして回っている模様。

オリジナル:
http://pc3.2ch.net/test/read.cgi/tech/1041658161/255

コピペニマジレス、カコワルイ。
0559デフォルトの名無しさんNGNG
>>638
こらっ!しんのすけ。
0560デフォルトの名無しさんNGNG
いよいよ終焉か
0561デフォルトの名無しさんNGNG
ID:ZBsKvw39さん

宿題終わった?
お風呂に入った?

湯冷めしないようにね・・・
0562デフォルトの名無しさんNGNG
217 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:49 ID:rLfxQ17l
   一定期間でログは消しますです。

249 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:52 ID:rLfxQ17l
   >荒らしとか犯罪のためなの?
   そす。

246 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:52 ID:BH998yxV
   >ひろゆき
   俺のお気に入りのスレとか荒されてるんだがそういうのにも有効?

257 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:53 ID:rLfxQ17l
   >>246
   いずれは。
0563デフォルトの名無しさんNGNG
2ちゃんねるはボランティアの削除人が書き込みをチェックして、
好ましくない書き込みを一所懸命削除している、
ということになっているが、あれはウソ。

削除人には給料が支払われ、その給料の原資となっているのが、
まずいことを書き込まれた企業が削除要求とともに渡す裏金。
0564デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0565デフォルトの名無しさんNGNG
>>493
いくらなんでも、無差別にIP公開はしないと思うが。
0566デフォルトの名無しさんNGNG
>>578
誰でもみれる様になるの?
0567デフォルトの名無しさんNGNG
http://www.shitaraba.com/cgi-bin/read.cgi?key=991158920_1&bbs=robi&res=122
プロフィールです(^_^;)

>>171
今かかってきたのお前か!お前か!
0568デフォルトの名無しさんNGNG
なんか急速にスレのレヴェルが落ちたな
0569デフォルトの名無しさんNGNG
>ある程度の人が集まって

それが重要だよね。
残念だが故郷を離れる、ミンゾク大移動の日は近いのだろう。
DQNも厨房も1人残らず移住できる箱舟が現れるのか・・・
0570デフォルトの名無しさんNGNG
どうしてmitutoとオカヤンのサイトのURLだけNGワードなのですか。
商用でもないのに。
0571デフォルトの名無しさんNGNG
正直、S/N比が改善されると思うのは俺だけ?
別にIP表示されるわけでなし。責任とれないような書き込みせにゃいいだけやろ?
0572デフォルトの名無しさんNGNG
ヤフーの投票文、「2ちゃんねるがアクセスログ記録を始めましたが何か?」にしてホスイ。
0573デフォルトの名無しさんNGNG

上のスレでは★付きボランティアの発言原則禁止。
ボランティアである事を匂わせる発言も同様。
こことは趣旨が正反対のウォッチスレ。
 
のはずだった。
0574デフォルトの名無しさんNGNG
各板「のトップに「当インターネットはフィクションであり・・・・」ってのせとけばそれで良くない?
0575デフォルトの名無しさんNGNG
実況・番組chには無意味ですな
0576デフォルトの名無しさんNGNG
>>705
来週も番組が無事でありますように
0577デフォルトの名無しさんNGNG
【2ちゃんねる七厨板】

1 :水先案名無い人 :02/08/02 02:14 ID:uMrNSS+/
2ちゃんねる七厨板【にちゃんねるななちゅういた】[名]
2ちゃんねるの中でも特に厨房の多い7つの板のこと。
どの板のことを指すのかは人のよって意見がわかれる。
例えばLeaf・key板、ハングル板、学歴板、厨房板、ペット大嫌い板、ネット事件、政治思想板など。
<<2典より>>

って、曖昧じゃん!明確に決まってないんかい!
なんか、だれが最初に言ったか知らんが『七厨板』って響きの良い言葉だけが先走って、
内容がおろそかになっている様子。
ガイドライン公認の『七厨板』を定めてはどうだろ

投票所
http://cgi.members.interq.or.jp/snake/watanabe/y/anc/main/anc/ancmulti.cgi?mode=enquete&number=21

【2ちゃんねる七厨板のガイドライン】 本スレ
http://ton.2ch.net/test/read.cgi/gline/1028222092/

2典
http://freezone.kakiko.com/jiten/
0578デフォルトの名無しさんNGNG
今からこのスレッドは87氏を応援するスレッドになりました(^_^;)
0579デフォルトの名無しさんNGNG
コマンドって結局スイッチ文の嵐になるだけだよね?
Cみたいにメソッドを配列にできないもんかな?
0580デフォルトの名無しさんNGNG
>579
> Cみたいにメソッドを配列にできないもんかな?
C++ でもメンバ関数へのポインタはとれるけど。そういう話じゃなくて?
0581デフォルトの名無しさんNGNG
Command パターンの話?
switch 文なんて使わないけど。
0582デフォルトの名無しさんNGNG
>>579
使用言語はいったいなにを?
ファンクションへのポインタが使えるC,C++や、
メソッドをオブジェクトとしてあつかえるJavaとかなら楽そう
0583デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0584デフォルトの名無しさんNGNG
111 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:33 ID:rLfxQ17l
   >datの書いた内容とIPが対になってることを証明すんのもめんどくさいもんな。
   そゆことです。

114 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:34 ID:ZxrhkN5z
   幼女をレイプします

119 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:35 ID:rLfxQ17l
      携帯電話からご苦労様です。

139 名前: ◆FruitsMIpE [sage] 投稿日:03/01/08 17:38 ID:s/ESWpsO
   「携帯から」とか公開しないでほすぃ。。

150 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:40 ID:rLfxQ17l
   みたいなことを書いたらそうなりますです。さん

170 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:42 ID:rLfxQ17l
   負荷が高そうなサーバにも入れて見ます。

217 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:49 ID:rLfxQ17l
   一定期間でログは消しますです。
0585デフォルトの名無しさんNGNG
な〜〜んか怪しいな・・・
0586デフォルトの名無しさんNGNG



       言いたいことも言えないこんな世の中じゃーー



ついに聖域まで汚染されました、
0587デフォルトの名無しさんNGNG
快速タン書き初めはみてもらえたでしょうか。
http://newsplus.jp/~thomas/bbs/img-box/img20030103203150.jpg
0588デフォルトの名無しさんNGNG
やっぱり、運営者の判断力が重要だと思う。
今までは、判断してこなかったからやってこれたが、
今後は、真の「管理能力」が問われることになる。
0589デフォルトの名無しさんNGNG
ひろゆきの腐れチンコめ
氏ね
0590名無し@沢村NGNG
へにょろっヌヒ等よ、大変だぞ!!
俺はふと思って2ちゃんねるのあっちこちの板を見て回ったのよ。
格闘技板とかアナウンサー板とかプログラマー板とかをな。
そうしたらな、どこのスレ開いても最近ひろゆきの話題が出てる板はプログラム技術板だけだったぞ!!
ヌヒ等よ、ここは2ちゃんねるいっちゃん恥ずかしい板だぞ!!
0591デフォルトの名無しさんNGNG
コマンドパターンでJava使うとスイッチばっかり

>>582
メソッドをオブジェクトとして扱う方法ってなんなの?
知らないよ俺。
0592デフォルトの名無しさんNGNG
>>591
「Object.getClass().getMethods()で取って来て、Method.invoke()叩く。」
ってことじゃない?(Strutsでもやってるはず)

でも、素直にスイッチ使った方が遙かにマシ。
0593デフォルトの名無しさんNGNG
2ちゃんの普通が基準なのか、それとも現実世界での普通が基準なのか
問題だよ!犯してーなんて2ちゃんではどこでも見かける言葉じゃん
でも、現実世界では人前では言わない言葉だ、そこらへんどうなのよ?
0594デフォルトの名無しさんNGNG
2chの解説本が出てました。たわいないです。

http://shopping.yahoo.co.jp/shop?d=jb&id=07107411
-----------------------------

「2ちゃんねるのウラオモテ超入門」

マイウェイムック、143ページ

監修・2ちゃんねる
発行・マイウェイ出版株式会社
発行日・2003年2月20日
値段・1429円
0595デフォルトの名無しさんNGNG
>>592
Methodの参照をコレクション系の何かに入れておいて...とか、
HashMapに入れておいて...とか、俺ならする。

switchやifの嵐の方が処理的には早いと思うが、拡張する時の手間考えたら、
その方がスマートにできる..とか言ってみるテスト。
0596595NGNG
ついでに言うと、拡張する時の内容によるが、場合によってはMethodに共通の
「俺仕様インタフェース」を取り付けてメンバの操作をしたいので、
ここでアダプタorブリッジパターンを使って、俺仕様化したMethodの参照を、
クライアント側(この場合はコマンドパターンの実装側)で、操作するようにすると、
さらにいい感じのような気がする。


0597592NGNG
>>595
Methodクラスなどリフレクションは型チェック出来ないんで極力使わない方が良いのでは?
拡張性に関しては、プロトタイプパターン使って解決すれば多分Methodクラス使うよりも
パフォーマンス的にもマシで、かつJava本来の型チェック機能も損なわないかと。

//コマンド登録
HashMap map = new HashMap();
map.put("hoge", new HogeCommand() );

//コマンド呼び出し
HogeCommand exec = (HogeCommand)map.get("hoge").clone();
exec.execute();

自分としては、コマンドパターンを適用する箇所は結構ホットスポットになるんで、
int系のキーとswitch文(テーブルアクセスしてくれるはずなんで)使ってます。
(コマンドの拡張はコマンドのファクトリーを継承して数増やす)
0598デフォルトの名無しさんNGNG
>>597
フレームワークの中とかで部分的に使うなら
リフレクションも悪くないと思うけどな。
リフレクションだらけのコードはいやだけど。
0599582NGNG
>>592
そうそう。そういうこと。
でも書いてから気がついたけど
C++やJavaでのCommandパターンなら多態性つかえばすむよね。

ていうか>>591の
>コマンドパターンでJava使うとスイッチばっかり
はどういう意味?
むしろ俺はそっちを聞きたい。
JavaでCommandパターンを実装するとして
switchをどういう風に使うの?
0600デフォルトの名無しさんNGNG
泣くかと思った。
0601デフォルトの名無しさんNGNG
全鯖ログ記録キタ━━━(゚∀゚)━━━ !!!!!
0602デフォルトの名無しさんNGNG
> JavaでCommandパターンを実装するとして
> switchをどういう風に使うの?

そうそう、確かにこれには同意する。
多分、Strategyパターンのコンテキストスイッチ部分と勘違いしてないかな?
0603デフォルトの名無しさんNGNG

4nd ボー カレー
0604デフォルトの名無しさんNGNG
>>591 の
>コマンドパターンでJava使うとスイッチばっかり
ってのは、たぶん

class FooCommand {
 public final static int COMMAND_0=0;
 public final static int COMMAND_1=1;
 public void doCommand(int cmdCode) {
  switch(cmdCode) {
   case(0): // COMMAND_0
    // some proc ..
   :
   :

のような物を想像しているのでは。
でも、これだとcaseに指定できる値はリテラルだけなので、
なんぼ final staticでも、引数と分岐のキーの一致保証は、メソ内のコード依存
って事になるが。やっぱスマートじゃないな。
0605604NGNG
だいたいJava固有な書き方じゃないし。
0606604NGNG
つーか、int全部OKはちょっと問題だし。やるとしたら、むしろこうか?

public interface CommandArg {
  public int getCommand();
}

public class CommandArgA implements CommandArg {
  public int getCommand() { return 0 }
}

public class CommandArgB implements CommandArg {
  public int getCommand() { return 1 }
}

class FooCommand {
 public void doCommand(CommandArg arg) {
  switch(arg.getCommand()) {
   case(0): // COMMAND_0
    // some proc ..
   :
   :

0607デフォルトの名無しさんNGNG
なんかそれだと Interpreter っぽいね。
コマンドを突っ込む Queue を作らない?
0608デフォルトの名無しさんNGNG
岡田克彦ファンクラブからのご案内です。岡田克彦氏の卒業した早稲田大学
政治経済学部に比べて著しい低学歴、特に、ひろゆきの卒業した中央大学文学部
のようなヘボい大学に共通しているのは、文化水準が低いという事です。18歳から22歳を
ヘボい大学で過ごすということは、致命傷と言えます。2ちゃんねらーの大半は
岡田克彦氏に比べて、著しい低学歴ですから、取り返しはつかないのです。
せめて、http://www.geocities.co.jp/MusicHall-Horn/1091/で、氏の作品に触れましょう。
0609デフォルトの名無しさんNGNG
Internet Service Providerが契約者に対し
顧客情報の開示を行うことを明らかにするだけだ。
責任は書き込んだ奴が取るだけ。
0610602NGNG
>>604

ってかswitch部分は、Commandの具象クラスの外に出すべきだと思われ。
(でないと、CommandパターンでMacroやUndoの実装がしにくくなるでしょ?)

んで、Commandインスタンスの生成は、Factory Methodパターンを使い、
Factoryの具象クラスが分岐に責任もてばいいのでは?
Commandパターンでは、invokerはAbstractCommandのメソッドを実行するだけ
なんだから。
0611デフォルトの名無しさんNGNG
最近カール★さん見ない・・・
0612604-606NGNG
>>607
>なんかそれだと Interpreter っぽいね。

形が、って事?確かにこんだけのソースだとそう見える気も。気づかんかった。
でもデザパタって、「形は似てるけど目的が違う」みたいなの多いよね。

>コマンドを突っ込む Queue を作らない?

そだね。マジでやるなら、そうした方がいい。
0613604-606NGNG
>>610
>Commandインスタンスの生成は、Factory Methodパターンを使い、
>Factoryの具象クラスが分岐に責任もてばいいのでは?

そこまでやるならファクトリからCommand部を取るより、Storategyにした方が
良くない?
実装の拡張(Macroとか)を意識するなら、Commandの実体をビルドする形より、
むしろその部分を挿げ替えてしまえる方が自然な気が...。どうか。
0614デフォルトの名無しさんNGNG
多分、純粋に591が言いたいのはFactoryのswitchが面倒と言うことでは?
0615デフォルトの名無しさんNGNG
GoF通りのFactory Methodならswitch文なんか出てこないような
気がするのだが。。。
0616デフォルトの名無しさんNGNG
一箇所(一メソッド内)で複数種の Command を作成する設計なんじゃない?
0617山崎渉NGNG
(^^)
0618デフォルトの名無しさんNGNG
☆★☆
|・∀・)♪  おあよーおあよー!
|⊂ ノ
|` J    朝だす、みんな起きるだす!!
0619山崎渉NGNG
(^^)
0620デフォルトの名無しさんNGNG
gof読んだけど
JAVAで学ぶデザインパターンも読もうかと思っています。
学ぶことは多々ありますか?
0621デフォルトの名無しさんNGNG
>>620
一言でいうと、gof本よりもわかりやすい言葉で書かれている。
Javaで書かれた実際に動くサンプルコードがついてくる。
0622デフォルトの名無しさんNGNG
憂鬱本よんでいたら
クラスライブラリがアプリケーションクラスを用意してる場合もある
というようなことが書いてあったのですが、
どのようなものがあるのでしょうか?
できればJAVAで教えてください。
0623デフォルトの名無しさんNGNG
>620
イラストの投げやりっぷりが笑える
0624デフォルトの名無しさんNGNG
>>621
スレッド編をよみたいので先にこちらを読もうかと思ったのですが、
gof本で理解できれば飛ばしても問題ないですかね?
0625デフォルトの名無しさんNGNG
>>624
GoFで理解できたのなら、読み飛ばしても問題ないかと。
0626デフォルトの名無しさんNGNG
>539
ありがとうございます〜。間ができたのでやと買いますた。
今日からちょいちょい読んでいきます。
0627山崎渉NGNG
(^^)
0628デフォルトの名無しさんNGNG
ただあげてみる
0629デフォルトの名無しさんNGNG
質問です。getter/setterを実装するときに、たとえばVector(String)型を保持したい場合には
どのように実装すればいいのでしょうか?

public Vector getVector() { return this.vector; }
public void setVector(Vector v) { this.vector = v.clone(); }

で実装してしまうと、String以外のObjectのVectorを渡すことが出来てしまうので
あまり良くないと思ってしまったのですが…。

public String[] getStrings() { return makeStrings(this.vector); }
public void setStrings(String[] strings) { makeVector(strings); }

このように実装すると、どうせ両者ともVectorで実装されているので、いまいち美しくない感じがします。

正しいデザインパターンではどのように実装すべきでしょうか?
0630デフォルトの名無しさんNGNG
そりゃデザパタじゃなくって言語の機能だよ。
言語のサポートが得られなければ
取り出すときに型をチェックするしかない。
0631デフォルトの名無しさんNGNG
あ、確かに
スレ違いすみません。
0632デフォルトの名無しさんNGNG
まあまったく無関係というわけでもないけど。
一度型を指定してしまうと後からさらに
型を限定するのが困難なのはデザパタ・OOPL共通の問題だからね。
GoFのCompositeでそこら辺に言及してたような。
0633デフォルトの名無しさんNGNG
シングルトン ってオブジェクトを生成する必要あるか?
0634デフォルトの名無しさんNGNG
全部staticにすればインスタンスを生成する必要は無いけど
実装がstaticまみれになるのがいやだったりインスタンスの参照を渡せなかったり
使い方がオブジェクトと違うのがいやだったりでインスタンス化することもある。
0635デフォルトの名無しさんNGNG
>>634
(゚∀゚)サンクスコ
staticに生きるよ
0636デフォルトの名無しさんNGNG
結城さんの ML で思ったんだけど、実務の世界ではデザインパターンはほとんど浸透していないのですか?
もしかして、いま勉強してもあまり意味がないの?
0637デフォルトの名無しさんNGNG
>>636
そんなことないと思うよ。使うことは使うと思うけど、
メンバー全員が理解している状態ではないという感じ。
0638デフォルトの名無しさんNGNG
デザインパターンは、「考え」を正規化してライブラれるから便利。
0639デフォルトの名無しさんNGNG
アレキサンダーのデザパタ本読んでないのに
デザパタわかったつもりになってる奴って痛すぎ。
なんつーか底の浅さが見え見えだよな。
0640デフォルトの名無しさんNGNG
オマエガナー
0641デフォルトの名無しさんNGNG
>>636
特定のフレームワークや、クラスライブラリを使うときに、デザインパターン
知らないより知ってた方がいいよ。知らないとサンプル見ても意味わからん
ときがあるから。

サンプルとか、既に造ってある使い方以上の改造が必要になった時にフレーム
ワーク造った人の意図を推測できるかどうか、どのパターン適用してる判別可能
かどうかが、結構効いて来る。(クラス名から推測できるようにしてあるとあり
がたい)
0642デフォルトの名無しさんNGNG
アレキサンダー読んでない大工はドキュン
プログラマについてはその限りにあらず
0643デフォルトの名無しさんNGNG
他人にクラス構造を説明するとき、あるいは3ヶ月後の自分に思い出させるとき
一言で済むのがいい。
0644デフォルトの名無しさんNGNG
Gof日本語改訂版98ページの

AbstractFactoryクラスでは、部品を生成するためのインタフェースが
宣言されるだけであり、実際の生成はConcreteProductに任されている。

がよくわかりません。教えてください。
0645デフォルトの名無しさんNGNG
gofよんたので、今はリファクタリングよんでます。
次はスレッド編を読もうと思ってるのですがそれ以外にいいのありますか?

実践しろと言わないでください。読むのが好きなので。
0646デフォルトの名無しさんNGNG
>>645
Eiffel や smalltalk なんかにも手を出してみるのはどう?
0647世直し一揆(コピペ推奨)NGNG
<血液型A型の一般的な特徴>(見せかけのもっともらしさ(偽善)に騙されるな!!)
●とにかく気が小さい(神経質、臆病、二言目には「世間」(「世間」と言っても、同じA型を中心とした一部の人間の動向に過ぎないのだが・・・)、了見が狭い)
●他人に異常に干渉し、しかも好戦的でファイト満々(キモイ、自己中心、硬直的でデリカシーがない)
●妙に気位が高く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとする
(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはた
いてい、内面的・実質的に負けている)
●本音は、ものすごく幼稚で倫理意識が異常に低い(人にばれさえしなければOK!)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者にはへつらい、弱い者に対してはいじめる)
●あら探しだけは名人級でウザイ(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため性格がうっとうしい(根暗)
●単独では何もできない(群れでしか行動できないヘタレ)
●少数派の異質、異文化を排斥する(差別主義者、狭量)
●集団によるいじめのパイオニア&天才(陰湿&陰険)
●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい)
●他人からどう見られているか、人の目を異常に気にする(「〜みたい」とよく言う、
世間体命)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度
も言ってキモイ)
●表面上協調・意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は個性・アク強い)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自ら好んでストイックな生活をしストレスを溜めておきながら、他人に猛烈に嫉妬
する(不合理な馬鹿)  
●後で自分の誤りに気づいても、強引に筋を通し素直に謝れない(切腹するしかない!)●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。包容力がなく冷酷)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(例:「俺のほうが男
前やのに、なんでや!(あの野郎の足を引っ張ってやる!!)」)
0648デフォルトの名無しさんNGNG
commandパターンむづい...
0649デフォルトの名無しさんNGNG
>648
どの辺?
いまさらだけど。
コマンドパターン自体は難しくない気が、、、、
0650デフォルトの名無しさんNGNG
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
        ★みんなの情報局★
0651デフォルトの名無しさんNGNG
// よく見かけるSingletonの実装。
// 最初のGetInstance()でインスタンスを作る。

// xxx.h ファイル側
class Singleton {
  static Singleton* instance;
  Singleton() {}
public:
  Singleton* GetInstance() {
    if( instance == 0 ) instance = new Singleton();
    return instance;
  }
}

// で、xxx.cpp 側が
Singleton::instance = 0;
ってなってたりするんだけど、これ
Singleton::instance = new Singleton();
ってやっちゃだめなのかな。

「GetInstance()メソッドでマルチスレッドの時の排他が〜」
なんて問題について議論してるWebサイトとか結構見るのだけど、
GetInstance()の外でインスタンスを作ればええやん。なぁみんな。
0652U ◆CZtFsGiu0c NGNG
>651
インスタンスの生成時に例外処理が必要なければいいと思いますよ。

0653デフォルトの名無しさんNGNG
ゲームとか作るときに敵キャラやプレイヤーのクラスにDrawってメソッドを作るとして、
この場合どのパターンを使ってどんな感じで絵画させればいいの?
1,DrawメソッドにWindowクラスのポインタか参照を渡す。
2,敵キャラやプレイヤーのクラスにWindowへのポインタのメンバを含める
3,その他
0654デフォルトの名無しさんNGNG
キャラなんてロジカルなものが描画コードを持つのは良くないだろ。
Screen.Draw(Player)とかのが良くないか。
0655別人ですけどNGNG
その場合、Screenが、大量にオーバーロードされたDraw関数を一手に引き受けることになって
case文みたいでオブジェクト指向らしく無い、つか、
Playerに関するコードがPlayerクラスの外にも分散してしまうのが、
俺の脳味噌の貧弱な管理能力を無駄に消費してしまうようで気持ちよく無いです。

しかし画面と関係無しに存在できるはずのPlayerクラスが描画コードを持つのも
Playerクラスを再利用することなんてまずあり得ないとわかっていても、やはり良く無い気が。
それでも多態を利用できるのは便利なので、俺は渋々PlayerのようなクラスにDrawを持たせてます。

ミックスジュースとかなら、画面と無関係に作ったPlayerクラスに、
後からDrawメソッドを追加できていい感じ??(ミックスジュース使ったことないので詳細不明)
0656デフォルトの名無しさんNGNG
>>655
普通、そういうコードにはしないと思うよ。
0657デフォルトの名無しさんNGNG
>>656
普通どういうコードにするの?
0658デフォルトの名無しさんNGNG
古いからちょっと割り引いて読むべし
ttp://www.fujigoko.tv/rev/prof/doc4/index.html
0659デフォルトの名無しさんNGNG
Screenクラスは基本的な作画クラスを集約し、それらを使って作画をサポートする。
細かい作画指定は、Prayerクラスが持つDrawSettingクラスあたりから取得する。
設定は、DrawSettingクラスを継承したクラスに書いて、各Prayerクラスで使い回す。
0660あぼーんNGNG
( ´∀`)/< 先生!!こんなのを見つけました。
http://muryou.gasuki.com/moe/jaz08.html
http://muryou.gasuki.com/moe/jaz07.html
http://muryou.gasuki.com/moe/jaz10.html
http://muryou.gasuki.com/moe/jaz09.html
http://muryou.gasuki.com/moe/jaz06.html
http://muryou.gasuki.com/moe/jaz05.html
http://muryou.gasuki.com/moe/jaz04.html
http://muryou.gasuki.com/moe/jaz03.html
http://muryou.gasuki.com/moe/jaz02.html
http://muryou.gasuki.com/moe/jaz01.html
0661Screenクラスの実装例NGNG
public void Draw(HasDrawSettingInterface argHasDrawSettingInterface) {
this.SetDrawSettingInterface(
argHasDrawSettingInterface.GetDrawSettingInterface()
);
//DrawSettingInterfaceをもとに描画するコード
}
インターフェイスじゃなくて仮想クラスとかでも可。命名規則は説明のためにあえて冗長になってまつ。
0662デフォルトの名無しさんNGNG
PlayerクラスとPlayerDrawerクラスをペアで定義して
Screenはその対応付けをするだけでいいでしょ。
こんなかんじで
Player.Drawer = new PlayerDrawer();
0663デフォルトの名無しさんNGNG
こんな事いったら怒られるだろうな…。でもいいまつ…。

GoF本の正式名称教えて下さい!
0664デフォルトの名無しさんNGNG
>>663
> こんな事いったら怒られるだろうな…。でもいいまつ…。
> GoF本の正式名称教えて下さい!
http://www.google.com/search?lr=lang_ja&num=50&q=GoF%96%7B
0665デフォルトの名無しさんNGNG
>>664
うわーい。ありがとーー。
0666デフォルトの名無しさんNGNG
それこそMVCの適用事例。
0667デフォルトの名無しさんNGNG
>>651
遅レスですが、あなたの主張では
>最初のGetInstance()でインスタンスを作る。
を満たしてないような気がする
0668デフォルトの名無しさんNGNG
>>667
いいたかったのは
「最初のGetInstance()でインスタンスを作るような
 Singletonの実装をよく見かけるけど、
 GetInstance()で作んなくてもいいじゃん」
ってことです。
0669デフォルトの名無しさんNGNG
>>668

class A{
static A *inst_;
public:
static A *instance()
{ return inst_; }
void foo(){}
};
A *A::inst_ new A;

class B{
static B *inst_;
public:
static B *instance()
{ return inst_; }
B()
{ A::instance()->foo(); }
};
B *B::inst_ new B;

BのコンストラクタでAのfooを呼んでいるが、Aが生成されてる保証は無い
このように生成順序によってはうまくいかないから
0670デフォルトの名無しさんNGNG
>>669
初回のA::instance() をコールした時、
A::instが0になってるって保証するコードすらC++では書けない、
と言うことすら暗示してますか?
0671670NGNG
あ、もしかして、
class C {
static C* c;
};
C* C::c = 0;
と
class C {
static C* c;
};
C* C::c;
って等価なのか?
0672デフォルトの名無しさんNGNG
>>670
暗示してません、それは大丈夫です
inst=new Aは実行時じゃないと初期化できないので問題となります
inst=0は実行時以前に処理できるので処理されます

>>671
どっちもNULLで初期化されることは確か
0673デフォルトの名無しさんNGNG
今、vc++ で visitorパターンやってみたんだけど、なんか感動した。
0674デフォルトの名無しさんNGNG
俺的にビジターつうと、
ちょっと昔やってた宇宙人侵略B級ドラマの方だな。
月の裏側には・・
0675デフォルトの名無しさんNGNG
なつかしーな、おい。
値が緑なんだよな。
0676山崎渉NGNG
(^^)
0677山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0678デフォルトの名無しさんNGNG
Singletonパターンのためにこんなtemplate書いてみたんだが添削キボンヌ

// Singletonパターン[GoF]を使用するためのテンプレート
// これを使うときは普通にインスタンスを宣言しないで、
// グローバルでtemplate T Singleton<T>::instance = 0;を宣言した上で
// (VC++6の場合はtemplateつけちゃ駄目)
// T* t = Singleton<T>::Instance();で取得すること。

template <class T> class Singleton
{
public:
static T*Instance(void) {
if (instance_ == 0) {
instance_ = new T;
}
return instance_;
};
static voidDeleteInstance(void) {
if (instance_ != 0) {
delete instance_;
instance_ = 0;
}
};
protected:
private:
Singleton() {
};
~Singleton() {
};
static T*instance_;
};
0679デフォルトの名無しさんNGNG
1行削った

template <class T> class Singleton
{
public:
static T*Instance(void) {
if (instance_ == 0) {
instance_ = new T;
}
return instance_;
};
static voidDeleteInstance(void) {
if (instance_ != 0) {
delete instance_;
instance_ = 0;
}
};
private:
Singleton() {
};
~Singleton() {
};
static T*instance_;
};

0680デフォルトの名無しさんNGNG
>>678
Q1 どうやって使うの?
Q2 メンバを追加したい時は?
Q3 コンストラクタでなんか処理をしたい時は?
Q4 つか、これ、サブクラス作らなきゃ使い物にならんだろ。
Q5 そこんとこ、明記しとけよ。
0681デフォルトの名無しさんNGNG
>>680
Q6 Q4とQ5が質問形式でないのはなぜ?
0682678NGNG
>>680
A1:
シングルトンにしたいクラスをTとして、
template Singleton<T>::instance_ = 0;
をグローバルにおいた上で
使いたいところで
T *t=Singleton<T>::Instance();
して、あとは適当に。

A2A3:
Singleton<T>とTは独立したクラスなのでTにいくらでも追加してください。
Tのコンストラクタ、デストラクタも好きに書いてください。
A4:
んなこたあない。
A5:
スマソ
0683デフォルトの名無しさんNGNG
シングルトンの用件を満たしてないわけだが
0684678NGNG
インスタンスが一つしかないことをちっとも保証しないからですね。

GoF本に書いてあるSingletonパターンの効果の1以外(4は要改造)を
手軽に得るための手段(シングルトンもどき)ってことで駄目ですか、駄目ですね。
0685デフォルトの名無しさんNGNG
>>684 こんな風に使うのかと思ったよ。

class Hoge : private Singleton<Hoge> {
};

Hoge* Hoge::instance = 0; // この行は、どう書けばいいのかわかんない...
0686デフォルトの名無しさんNGNG
DirectX SDKのCD3DApplicationが意味もなく信用できなかったので
自分で何日もかけてフレームワークらしいものいじくり倒して、
気がついたらCD3DApplicationとほとんど同じ形に収束していて、
はたと「そうか、これがTemplate Methodパターンか」とようやく気づく俺。勘が悪すぎです。

まあ、いろいろと勉強になったからいいや。
0687デフォルトの名無しさんNGNG
ハリウッドスタイルってやつか
0688デフォルトの名無しさんNGNG
public abstract class AbstractMovie {

public abstract void 主人公が危機にあう();
public abstract void ヒロインと出会う();
public abstract void ヒロインと恋に落ちる();
public abstract void 主人公が活躍する();
public abstract void 主人公がヒロインと喧嘩する();

public void play() {
    主人公が活躍する();
    ヒロインと出会う();
    主人公が活躍する();
    ヒロインと恋に落ちる();
    主人公が危機にあう();
    主人公がヒロインと喧嘩する();
    主人公が活躍する();
    ヒロインと恋に落ちる();
}

}
0689デフォルトの名無しさんNGNG
もうObserver.update()の名前がウンたらとか
どうでもいいだろ
0690デフォルトの名無しさんNGNG
>>689
なんかそれに付いてめっちゃ語りたがってるな。
0691デフォルトの名無しさんNGNG
>>689
俺もそう思う。
そろそろうざいな、あれ。
0692デフォルトの名無しさんNGNG
保守
0693デフォルトの名無しさんNGNG
Singletonにしようしようと思いつつ、クラス関数だけのクラスにしてしまいまふ。
0694デフォルトの名無しさんNGNG
>>693
それ最悪、Cプログラミングやってんじゃねーんだから
継承とかコンポジションとかできねーじゃん
0695デフォルトの名無しさんNGNG
> 継承とかコンポジション
いやあ、どっちもどう考えても想定できないようなクラスなもんで。
0696デフォルトの名無しさんNGNG
Monostateパターンだね。
0697デフォルトの名無しさんNGNG
>>695
じゃあnamespaceでいいじゃんって思ったが、あんたはJavaか
俺は習熟するにつれてよりクラス抽出できるようになった経験がある。
もしかしたら問題のフレームをとらえられてないだけかもよ。
ほんとのところはソースみないとなんとも言えんけど
0698デフォルトの名無しさんNGNG
デザインパターンって一般のプログラマにも必要な概念なの?
それともフレームワーク書く人だけ知ってればいいの?
0699デフォルトの名無しさんNGNG
デザインパターンを使ったフレームワークを使うときに必要かと。
0700デフォルトの名無しさんNGNG
>>694 どこからも使い得るユーティリティ関数を変なオブジェクトに入れたせいで、
そのオブジェクトを末端オブジェクトまで渡しつづけなければならなくなるよりよっぽどマシ。
ちなみにクラスメソッドの集合ではなく singleton にしといて良かった〜と後で
思うことなんてまれ。必要になったら利ファクタリングで十分過ぎ。
0701rNGNG
>>700
シングルトンなオブジェクトを"末端オブジェクトまで渡さなきゃならない"状況ってのも
かなり異常だけどな。

# 末端オブジェクトで、インスタンス取得( XXX::getInstanceとか)すりゃいいだろ。
0702デフォルトの名無しさんNGNG
(゚∀゚)でもユーティリティ関数はクラス関数だけのクラスとして
外に放り出したほうが使いまわしが利いて便利だけどな。

なんでもかんでもオブジェクトにするのがいいわけじゃねーだろ。
0703デフォルトの名無しさんNGNG
>>698
他のプログラマとコミニュケーションをとる必要があるプログラマに必要。
0704デフォルトの名無しさんNGNG
>>703
H-age-Doe
0705デフォルトの名無しさんNGNG
>>703
「明日の自分は『他のプログラマ』」なニワトリ頭のプログラマにも必要。
0706デフォルトの名無しさんNGNG
>>702
言語による。
Java でそういうクラスが必要だと思ったことが無い。
0707デフォルトの名無しさんNGNG
>>706
ホントに思ったことないの?
どんなの作ってるの?
0708デフォルトの名無しさんNGNG
Math とかそうじゃないの?
0709デフォルトの名無しさんNGNG
>>707
俺は706じゃないけど、俺も必要性をほとんど感じない。
計算関係とかは十分にそろってるしね(Math.class)。

あらゆる処理は誰か(A)がトリガーになって誰か(B)が実行するわけだけど、
AもBもオブジェクトになるからにはそれらが実装すべきだと思う。
静的なクラスを最近作ったのはRobocodeで遊んだ時かな?

ただし、静的クラスを作ることは否定的ではないし、必要が出てくれば
迷わず作るよ。分野によっては結構必要になりそうだし。。
0710デフォルトの名無しさんNGNG
文字列操作とかいちいちつくるのか?
replaceとか単純な奴は普通ユーティリティでまとめるべ。
0711デフォルトの名無しさんNGNG
>>710
あほか。普通は文字列クラスのメンバにするだろうが。
0712デフォルトの名無しさんNGNG
>>711
String#replaceAll()はJDK1.3以前にはなかったのですよん。
なんでなのでしょうかねえ。
0713デフォルトの名無しさんNGNG
ユーティリティは普通に使うよ

俺は適度にオブジェクト、粒度が細かくなりすぎるようだったら
ユーティリティで分けてるけどなぁ。

それなりの人数が集まるプロジェクトだと、粒度を細かくしすぎると地獄。

小規模だったら理想どおりいける事も多いガナー
0714デフォルトの名無しさんNGNG
>>711
普通に文字列操作用のユーティリティクラスって意味だったんだが…
※コンストラクタをprivateにして、後はstaticね

いちいちアンタはプロジェクト毎に文字列クラスを作るのか?
0715709NGNG
文字列操作に関しては自作ライブラリでがっつり作ってたよ、俺も。
0716山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0717デフォルトの名無しさんNGNG
  
0718_NGNG
http://kame.kakiko.com/hiroyuki/hankaku_b01.html
0719デフォルトの名無しさんNGNG

        ,,,,,..,,.,.,,,
   三   ミ,, ・д・ミ  < ホッシュホッシュ!!
  三    ミ,,,,,,,.,,.,.,,,ミ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 三      ( ・∀・∩ <  それ今だ!! ホシュ━━━━━!!!!
  三     ( つ  丿   \______________
   三   (  ヽノ
    三   し(_)


0720デフォルトの名無しさんNGNG
age忘れ
0721デフォルトの名無しさんNGNG
>>604-606のどこをどう読んだら「Interpreterっぽい」って言えるのかと
>>607を問い詰めたいが、遅すぎか・・・
0722デフォルトの名無しさんNGNG
結城さん、最近 神様にはまってるみたいですね。
中級プログラマにとっての神様が、神様(ほんもの)にはまってるのは
なんというか、結構びっくり。 プロテスタントの方なんかな。

デザインパターンでいうと 「神様」 はなんだろうな。
ていうかパターンの外ってことでJavaでいうなら 神=VM?
0723デフォルトの名無しさんNGNG
最近というより昔からクリスチャンじゃないんですかあの方は?
0724デフォルトの名無しさんNGNG
>>723
マジレスすんなよ。
0725デフォルトの名無しさんNGNG
GoF本を最近買ってきて勉強中なんですが、質問です。

Singletonパターンでの実装例のことなんですが、
例のこのままでは、インスタンスがdeleteされませんよね。

class Singleton{
public:
 static void Delete();
};

void Singleton::Delete(){
 if(_instance==0) delete _instance;
}

こんな感じのを加えたらいいんですか?
0726デフォルトの名無しさんNGNG
>>725
Singletonのインスタンスはたいてい明示的に削除する必要がないから、
GoF本にはインスタンスの削除について触れてないんだと思う。
GoF本の例だと、Singletonパターンの使いどころとして
Abstract FactoryやBuilderの実装を挙げているけど、
こういった例ではインスタンスを削除する必要がない。
もちろん、あなたがSingletonのインスタンスを削除したくてたまらない
理由があるのならそうすればいいけど、多くのケースでは不要でしょう。
0727デフォルトの名無しさんNGNG
必要性ってよりも、インスタンス数を0にするメソッドを
Singletonは公開したりしないと思うんだがね。
0728デフォルトの名無しさんNGNG
デザインパターンって「ものなき関係論」?
0729デフォルトの名無しさんNGNG
>>20
大体そんなもんです。
複数実装されたFactoryのエントリポイントをひとつにして集約しようという試みです。
個人的にはこれがデザインパターンに入っているのが不思議なのですが・・・。
0730rNGNG
>>729
...2年越し...
0731デフォルトの名無しさんNGNG
>>20 = >>729
ジサクジエン
0732デフォルトの名無しさんNGNG
>>725
そういう実装だとバグの元になりそう。
まだインスタンスを参照してるところがあるのに、うっかり削除してしまうとか。
0733デフォルトの名無しさんNGNG
>>725
たとえば、シングルトンとはいえ明示的にnew/deleteするような実装なら
コンストラクタで最初の一回だけポコッと作って2回目以降は再利用て、
デストラクタではカウンタがゼロになるまでは消さない とか。
まーいらんけどね。
0734デフォルトの名無しさんNGNG
デザパタなんか要らないとずっと思っていたが、最近デザパタが重要な理由が分ったよ、
構造化プログラミングもできないおバカがオブジェクト指向を始めてスパゲッティープログラムを作ると
そのスパゲッティ度合いは構造化プログラミング系言語の比ではなくなるんだな
それでチームリーダーやってんじゃねぇ、うぁぁぁぁもうマジで勘弁してくれよぉ
0735デフォルトの名無しさんNGNG
>>725
「シングルトンのインスタンスを作ったは良いけど、削除されない」のが心配なら、
Modern C++ Designに載ってるローカルstatic変数を使ったシングルトンは?
0736デフォルトの名無しさんNGNG
>>734
偉くなって直接言ってやれ。
0737725NGNG
あれからもうちょっと読み進めてみました。そうしたら、ヒントが載ってました。次のようにしたら明示的な削除がいらないように思いました。
デザインパターンって読めばすぐ使えるものでもないようですね。いろいろなパターンが相互に絡み合っていて難しい・・・。
>>735
それは読んだことないです。今度立ち読みしてみます。
class Singleton{
private:
 class SingletonPtr{
 private:
  Singleton* p_;
 public:
  SingletonPtr(Singleton* p):p_(p){}
  ~SingletonPtr(){if(p_!=NULL) delete p_;}
  operator Singleton*(){return p_;}
  SingletonPtr& operator =(Singleton* p){p_=p;return *this;}
 };
 static SingletonPtr pInstance;
protected:
 Singleton(){}
public:
 ~Singleton(){}
 static Singleton* Instance();
};

Singleton::SingletonPtr Singleton::pInstance=Singleton::SingletonPtr(NULL);

Singleton* Singleton::Instance(){
 if(pInstance==NULL) pInstance=new Singleton;
 return pInstance;
}
0738735NGNG
>>737 基本的にはこんな感じで。
Singletonのインスタンスは、最初のSingleton::Instance()呼び出し時に生成されて、
main()からreturnした後(またはexit()したとき)に自動的に破棄されます。

class Singleton {
  static Singleton* Instance();
};

Singleton* Singleton::Instance()
{
  static Singleton theInstance;
  return &theInstance;
}

"Modern C++ Design"には、これを改良したPhoenix-Singletonの話なども載っていて、
結構面白いです。
main()からreturnしたあとにもSingletonのインスタンスが必要になる可能性がある場合
(例えば、他のstaticオブジェクトのデストラクタや、at_exit()に登録された処理の中で
Singletonのインスタンスが必要になる場合)、上記では対処できませんが、
Phoenix-Singletonなら対処できます。
0739デフォルトの名無しさんNGNG
なんかデザパタってよりイディオムの話になってるけど、>>17で>>1が
「パターンを全般的に扱うスレ」って遺言してるし、OKなんだね。
0740デフォルトの名無しさんNGNG
今のとこ、「Singletonパターンを実現するためのC++のイディオム」だし、
広い意味でデザパタの話ってことで。
0741デフォルトの名無しさんNGNG
「読書百遍意自ずから通ず」
これを「GoF本のパターン」と呼ぶ。
0742山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0743山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0744デフォルトの名無しさんNGNG
質問お願いします。GoF本にあるMementoとCommandの組み合わせ(P308-)をみて、
これは素晴らしいと自分でもやってみたのですが…。

例えばGoF本のように、図形オブジェクトを移動する様な場合、
実際にはマウス等で図形の移動操作をしている最中も、座標は変わりまくってると思うんです。
移動開始点から、終了点へ、Command->Execute()で一発…というイメージにはならないな、と。

この辺はやはり、多少汚くなっても妥協するしかないのでしょうか?
0745 NGNG
>>735

 それだと静的変数のデストラクタからシングルトンオブジェクトを
安全に使えないよ。。シングルトンオブジェクトの寿命が何時尽きる
べきか、というのはケースバイケースだから、あまりデザインパターン
っぽい話とはなじまないような気がする。
0746_NGNG
http://homepage.mac.com/hiroyuki44/hankaku06.html
0747735NGNG
>>745
それを安全にするのが>>738で書いたPhoenix Singletonらしいのだけど、
結局自分では使ったこと無い。

0748744NGNG
すいません、一度だけ渾身のage
0749デフォルトの名無しさんNGNG
>>744
渾身のageで気付いたよん。
汚く妥協するって、具体的にどうすることを指してる?

図形の移動操作中にずっとMoveCommandが発行されるわけではないよ。
GoF本Mementパターンの例は、
コマンドの実行が確定した時点でCommandオブジェクトが生成されて、
そのときの差分がMementとして作られることを示している。

たとえば、平面上のShapeを次のように動かすとする。
初期状態:(1, 1)
[1] (1,1) → (2, 3) に移動させる
[2] (2, 3) → (3, 1) に移動させる

[1] や [2] の操作中にShapeをドラッグしているときは、移動は確定していない。
アプリは、グラフィカルに何らかの描画をしていることだろう。

[1] が確定した時点で MoveCommand を生成する。
移動開始点と移動先の差分から移動量(1, 2)というMementオブジェクトを作り、
MoveCommand にインスタンス変数としてセットする。
(おそらくこのMoveCommandオブジェクトは、何らかのCommandキューに入れられることになる)
[2] が確定した時点では、同様にして移動量(1, -2)のMementをもつMoveCommandが作られる。

サンプルコードのようにすれば、きれいにRedo/Undoを実装できる。

0750749NGNG
このmementに座標だけじゃなくConstraintSolver の復元に必要な情報も添えてあげれば、
Undo/Redoの中で、関連する情報も提供してあげられる。
0751744NGNG
>>749
遅レスですいません、昨日はずっとネットに張り付いてたのですが…。
偽Shapeを作って操作はそっちにしたり、あるいは全ての状態を逐一、保存してみたりと
今日一日とんでもないことをやっていました>汚く妥協

本当に丁寧な説明で、私にもようやく理解することができました。
確定時点でCommand生成すれば良いんですね。しかも生成された時点で
全ての情報が既に固まってるから、扱いもすごい容易で…。

Undoどころか、Redo(←考えてませんでした)も楽々ですねぇ…。
いやはや、感謝してもし足りません。ありがとうございました。
0752デフォルトの名無しさんNGNG
>>198
> >>197
> そういえば、StateとStrategyの違いってよくわからん。

State の別名が Strategy だと思っとけ。
0753デフォルトの名無しさんNGNG
>>752
漏れはStrategy自身が新しい他のStrategyを作るのがStateだと思ってる。
0754デフォルトの名無しさんNGNG
>>753
StrategyはPlayerアルゴリズムを動的にごっそり取り替えるパターンです。
TemplateMethodも似たようにアルゴリズムの切り替えを実現しますが、こちらは静的です。
Stateは状態をタイプコードではなくクラスそのものであらわすパターンです。
アルゴリズムの切り替えは行いません。
0755デフォルトの名無しさんNGNG
いわゆるFlyWeightパターンを日本語処理に適用したいのですが
(テキスト中に現れる日本語一文字づつをオブジェクトとして扱いたい)
英語圏の人たちと違ってやるメリットは無いですかね?
結局参照用のFlyWeightPoolが膨大になって意味がない気もするんですが
0756無料動画直リンNGNG
http://homepage.mac.com/miku24/
0757デフォルトの名無しさんNGNG
>>755
そんなこたないんじゃないですか。使いそうな文字なんか結構決まっているような気もしますし。
ただメモリリークしないためにも、Poolできる最大文字数を決めておくのがよいかと。
0758山崎 渉NGNG
(^^)
0759デフォルトの名無しさんNGNG
無駄です(^^)。
0760デフォルトの名無しさんNGNG
質問です

売り上げ集計表示。このとき最初にDBからメモリに展開してメモリから表示
させる。

DB構造としては
支社>部署>個人
という風になっていて(個人ごとに売り上げ額もってます)

支社別に表示、部署別に表示、支社別部署別に表示
させる場合(表示条件切り替え可能)
メモリに展開させるのに有効なパターンてありますか?
もし無いのであればどのようなメモリ展開でおこなえるでしょうか?
言語はJavaです
0761デフォルトの名無しさんNGNG
検索条件をStrategyパターン?
0762デフォルトの名無しさんNGNG
>>760
Compositeパターンによるツリー構造が基本?

データ量が多くてメモリ上限があるなら、弱参照によるキャッシュが有効かもな。
パターンと関係無いが。
0763デフォルトの名無しさんNGNG
>弱参照によるキャッシュが有効かもな。
>パターンと関係無いが。
Proxyか複数インスタンスのSingletonと言えなくもないかな。
0764山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0765デフォルトの名無しさんNGNG
豆蔵社員によるかなり大きなファイルサイズの PDF 添付メールは何かの嫌がらせですか?
0766デフォルトの名無しさんNGNG
静かな余生を送っていたこのスレに意味不明な質問を書き込んだのは何かの嫌がらせですか?
0767デフォルトの名無しさんNGNG
コーディネータはこーでねーと
0768デフォルトの名無しさんNGNG
752番は危険。あげるにょ。
0769デフォルトの名無しさんNGNG
>>765
MLに流れてきたのは驚きました。新手のウイルスかと思ったよ。
0770デフォルトの名無しさんNGNG
http://hv.ws37.arena.ne.jp/swf/mother.swf
0771デフォルトの名無しさんNGNG
Undo機能を搭載しようと、Command&Mementoを採用したのですが、
全てのコマンドに対して膨大なCommandのサブクラス群が…。

テンプレートも使えないし…こ、こんなもんですよね?ちょっと不安が…。
0772デフォルトの名無しさんNGNG
>>771
全てのサブクラスで処理手続きを分岐する必要がなければ、クラスは
処理の流れごとで纏めて、パラメータはコンパイルの必要のない外部
ファイル(XMLなど)に定義するとか。

どうせ定義情報は増えるけどさ。
0773デフォルトの名無しさんNGNG
>>772
レスを参考に再検討していました。
パラメータ化により、かなりの部分をまとめることができそうです。
ありがとうございました。
0774デフォルトの名無しさんNGNG
Commandパターンまだ使ったことないけど、自分がやるとしたら
パラメータ化のところでStateパターンの併用も考える気がしる。
0775デフォルトの名無しさんNGNG
教科書にあるStateの使い方とは違うのかも知れないけど、
でかいクラスのごく一部だけ違う派生クラスをたくさん作る必要
が出てきた場合、その「ごく一部」だけを別クラスにしてState
にするのは好き。

でかいクラスのツリーが広がる代わりに、その小さいState
の方のクラスのツリーが広がって行く感じ。
Command でなく CommandType みたいな。
0776デフォルトの名無しさんNGNG
ダブル(またはそれ以上)ディスパッチをどう実装するかは、永遠の課題ですの。
0777デフォルトの名無しさんNGNG
なんかいいdizpatない
0778デフォルトの名無しさんNGNG
もう文字コードはやめてくれ。。。。
0779デフォルトの名無しさんNGNG
Singletonとメンバ全部staticにするのとはどう違うのですか?
0780デフォルトの名無しさんNGNG
>>779
意味なんてね――!!
スカッとするからしてるだけなんだよ このボケ――!!

というのはうそ。
同期処理とか、後から拡張とか継承とかが
追加できたりするから。
あとあと使いまわしが効くように出来てんのよ。
0781デフォルトの名無しさんNGNG
>>779
要するに、いつ(どのタイミングで)コンストラクタを走らせるかをコントロールしたい場合、
Singletonのパターンを使用しなきゃならない。
そうでなけりゃ、staticでも構わないよ。
0782デフォルトの名無しさんNGNG
Martin Fowlerの"P of EAA"の中で紹介されている Metadata Mapping
ttp://martinfowler.com/eaaCatalog/metadataMapping.html
のコード例はどこかにない?
できれば
ttp://martinfowler.com/articles/dblogic.html
のようにRubyで。
0783デフォルトの名無しさんNGNG
リアルタイムのシミュレーションゲームを考えます。
「ユニット」クラスを継承した「車両」「航空機」「艦船」クラスなどがあるとします。
各ユニットのインスタンスは他のユニットの位置・所属軍などのフィールドを認識して
行動する必要があるわけですが、これにはObserverパターンを使えば良いのでしょうか?
ユニットが増えると負荷が級数的に上がりそうですが・・・。
0784デフォルトの名無しさんNGNG
>>783
そこはMediatorの方がいいんじゃないかな。
全ユニットは司令部を経由して友軍の情報を得る、って感じ。
RMA以前の軍隊の乗りで。
0785783NGNG
>>784
なるほど、有難う御座います。
参考書片手にパターンを組んでみたいと思います。
0786デフォルトの名無しさんNGNG
非オブジェクト志向の言語にGoFのデザインパターンって適用できないの?
0787デフォルトの名無しさんNGNG
>>786
志向じゃなくて指向。んで、適用できます。
0788デフォルトの名無しさんNGNG
デザインパターンを学ぶとオブジェクト指向の現実を分析するという方向から外れてきた気がする…。
0789デフォルトの名無しさんNGNG
>>788
そのとおり
デザパタは、中毒性の高い変態コーディング・テクニック集
使いすぎは禁物
0790デフォルトの名無しさんNGNG
>>789
なるほど。気をつけます。
0791デフォルトの名無しさんNGNG
front controllerパターンを適用しすぎるのは実際のとこどうなんですか?
0792デフォルトの名無しさんNGNG
HotSpot と FrozenSpot を分ける意味では素晴らしい。
0793デフォルトの名無しさんNGNG
Observerって、じっと観察しているのかと思ってたけど、
読んでみたら、どうやら「何かあったら起こしてね」と
さっさと寝てしまうように感じたのですが、そんな解釈で
いいのでしょうか?

なにか他にいい別名とかついているのでしょうか?
0794デフォルトの名無しさんNGNG
>>793
Publish-Subscribe
0795793NGNG
>>794
そんな別名があるのですか…

ところで俺の解釈はあってますか?
0796U ◆CZtFsGiu0c NGNG
>>793
その解釈でいいと思います。メタファとしては「観察者」だけど、実装上は
対象のオブジェクトに通知してもらう形でないと難しいからです。
0797デフォルトの名無しさんNGNG
名前通りに実装すると…一つのSubjectを複数のObserverが所持
一定周期毎にObserverがSubjectを参照ってとこか…。

あまりスマートじゃないね。ネットプルグラムなんかじゃありそうだけど。無いか。
0798デフォルトの名無しさんNGNG
別スレッドでHTTPGetして、
メインスレッドからGetの進行状況表示及び、取得済みの部分の表示を行う場合、
どういうパターンにするのが適切ですか?
0799793NGNG
回答ありがとうございます。

他のパターン名は、いろいろと変更があったものもあるとか
いうけど(6.2経緯)、Observerというパターン名には
そういう動きはなかったのかな
0800デフォルトの名無しさんNGNG
>>798
>>794
0801デフォルトの名無しさんNGNG
まだ半分ぐらいしかパターン勉強してないけど、どれもこれも同じようなもの
に見えてしまいます。

インターフェイスや抽象クラス使って多用性にしとけばパターンなんて
覚えなくてイイや!と思ってしまった僕は粛清されるべきですか?
0802デフォルトの名無しさんNGNG
>>801
せっかく勉強するなら、違いが分かる程度までは
理解しておいて損は無いでしょうな。
0803デフォルトの名無しさんNGNG
IEのお気に入りやネットスケープのブックマークのようなデータ構造に、
Compositeパターンを使いました。
そこまではいいんですが、このデータ構造をViewクラスに表示する時にはどうすればいいですか?
Viewクラスに色々処理を書けばいいんですか?
それとも、Mediatorとかいうパターン使えば良いんですか?
それとも、他にもっと良い方法がありますか?
0804デフォルトの名無しさんNGNG
>803
Visitor+Commandかな?
規模によっては単純に、各Compositeに処理を書いてもいいかも。
0805デフォルトの名無しさんNGNG
>規模によっては単純に、各Compositeに処理を書いてもいいかも。

描画処理とモデルを厳密に切り分ける必要がなければ、これが良いな。
GoFの例もそうなってる。

>Visitor+Commandかな?

Visitorと言うと、CompositeのComponentクラスとVisitorのElementクラスを
対応付るってことか。だがここでマルチディスパッチなんて必要かな?
YAGNIという言葉もあるわけだが。

Componentに描画メソッドを書けないなら、ここは型情報使ってもいいのでは?
各Component派生クラス用に応じた描画メソッドと、それらの描画メソッドと
Componentの実型を対応付けるテーブルを、外部のutilityクラスか何かに
用意して置くとかさ。Visitor使うにしても、実型に応じた書き分けはどうせ
必要なんだし。

グラフィカルな描画だけじゃなく文字列でのトレースも同じ仕組みでやりたい
といった新しい要件が出てきたら、そこでおもむろにVisitorにリファクタリング
すれば良いわけでさ。ま、リファクタリング禁止なら仕方ないかもしらんが。

あと、なんでCommandなのか分からなかった。
0806デフォルトの名無しさんNGNG
>>803
javaだったらinstanceofと再帰で十分。ダブルディスパッチはあんましお勧めしない。
0807デフォルトの名無しさんNGNG
インターナルイテレータを、
コマンドパターンを使って実現しようと思うんですけど、
漏れは変態ですか?

コンテナに対してコマンドを投げる。
コンテナは、全要素に対して command.Execute( 要素 ) を実行する...
0808デフォルトの名無しさんNGNG
>>807
だからそれがダブルディスパッチだっちゅーの。
0809デフォルトの名無しさんNGNG
>>808
ダブルなの?
0810デフォルトの名無しさんNGNG
二重殺?
0811デフォルトの名無しさんNGNG
>>807
それはベストプラクティスパターンのEnumeration Method。
0812デフォルトの名無しさんNGNG
ちげーよ、お前らマジヤベーよ
0813デフォルトの名無しさんNGNG
Singletonの意味、必要性が最近マジわかんね
Monostateで十分じゃねーか!
0814デフォルトの名無しさんNGNG
ストラテジーやステートみたいに、そのオブジェクト自身がコンテキストを持たないでいいとき、
0815デフォルトの名無しさんNGNG
>>813
Singletonなら複数の状態を持たせる事も出来るし、
非Singletonなオブジェクトとinterfaceを共有できる。
他にも利点はあるかもしれないが、
とりあえずMonostateはOOらしくないと思う。
0816デフォルトの名無しさんNGNG
Singletonの利点って、インスタンスの数を管理できることだよね?
大抵「プロセス全体で1個」でつかうみたいだけどさ。

「どこからでも簡単なパス指定でアクセスできること」は、「Single
tonの利点」ではないよね。グローバル変数の利点ですよ、それ。
0817デフォルトの名無しさんNGNG
ストリームから派生クラスのオブジェクトを読み込む場合にFactory Method
パターン使いますか? 生成すべきオブジェクトのタイプ番号をストリーム
から読み込んでswitch文で切り替えて対応するコンストラクタを呼び出した
方が簡単だと思うのですが。

Product番号(タイプ番号)を与えるとそれに応じたProductを生成できる、
といってもproduct番号と対応するコンストラクタの呼び出しを事前に
登録しておかなければならないし、ましてやそのために関数ポインタまで
使うとなると、かえって問題を難しくしているように思えてならないのです。
0818デフォルトの名無しさんNGNG
817です。

やっぱりFactory Methodの理解が変ですね。逝ってきます。
でも、switch文でコンストラクタの呼び出しを切り替えた方が
簡単だと思うけどなぁ。
0819デフォルトの名無しさんNGNG
>>816
あとはあれだ
あれ

アトミックな参照・変更を保証したいときとか
えーと
うsp
0820デフォルトの名無しさんNGNG
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ほう、Singletonパターンですか?
\
   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)  ∧ ∧ < な、なんですか?あなた・・・
 (  ⊃ )  (゚Д゚;)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ____
 ̄ ̄ ̄日∇ ̄\|ThinkPad|\
        ̄   =========  \

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ・・・それって、全部 static にして
| ユーティリィティクラスにしたほうが早くないですか?
\
   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)  ∧ ∧ < ・・・・・・
 (     )  (;゚Д゚)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ____
 ̄ ̄ ̄日∇ ̄\|ThinkPad|\
        ̄   =========  \

0821デフォルトの名無しさんNGNG
>>817
Factory Method うんぬんより、switch/case と関数テーブルの違いだけになってない?
とりあえず種類が少なかったり、一度タイプ番号とオブジェクトの関係を決めたら変わらない
というのなら switch/case でもいいだろうけど、タイプ番号が追加される度に判断ロジックを
追加するのはあまりきれいじゃないと思う。
0822デフォルトの名無しさんNGNG
全部staticにしてユーティリティクラスにするのと、
namespaceに閉じこめるのは何が違うの?
0823デフォルトの名無しさんNGNG
>>817
>>821
ええと、こういう感じじゃいかんの?

public class SuperFactory {
static final HashMap factories;

static {
factories.put( Subfactory01.TypeID, SubFactory01.getInstance() );
factories.put( Subfactory02.TypeID, SubFactory02.getInstance() );
...
};

public SuperProduct load( InputStream stream ) {
SperProduct superproduct;

... 共通部読み込み処理 ...

SuperFsctory fact = factorues.get( superproduct.ProductTypeID );
fact.load( stream );

}

}
0824デフォルトの名無しさんNGNG
すごーく厨な質問かもしれないですけど

ビジターパターンみたいにデータと処理を分離するためのパターン
ってOOでよく言われてる「オブジェクトとは、状態と振る舞いをもつ」
みたいなことに反してるような気がするんですけど、私の捉え方が
間違ってるだけですかね?

0825デフォルトの名無しさんNGNG
>>824
オブジェクトの中にデータと処理が含まれていて
複数のオブジェクトのデータがそれぞれ微妙に違っているからといって
その微妙に異なるデータに特化した処理をわざわざ新しく用意しません

データと処理を全く分けていない状態と
分けた上でその二者をオブジェクトの中に抱えるのとでは
データや処理の再利用性が違います。
処理と一体化されたデータはその処理にしか使えないため
汎用性の無いデータですし、
逆にデータと一体化された処理はそのデータでしか使えないため
汎用性の無い処理となります。
まず分けて、そのあと組み合わせればそのデータや処理は他でも使えます。

class Person//変な例ですが
{
char*name;
double height;
public:
double get_height()const...
...
};
Person a("taro",180);
Person b("jiro",170);
Person c("saburo",165);

a,b,cのオブジェクトはオブジェクトの中にデータと処理を抱えます。
しかしデータと処理(メンバー変数とメソッド)が分かれているため
各オブジェクトの値が変わっていても処理は共通化できます。
0826デフォルトの名無しさんNGNG
頼みごとです。
GoF以外にももっとデザインパターンについて知りたいのです。

もっとデザインパターン、アーキテクチャパターンのサイトを教えてください。

0827デフォルトの名無しさんNGNG
資格試験でデザパタ必須なのってなんかありますか?
0828デフォルトの名無しさんNGNG
UML のシルバー以上は確か要ったのでは・・・。
0829デフォルトの名無しさんNGNG
亀レスすみません。

>>821
>switch/case と関数テーブルの違いだけになってない?

確かに、Factory Methodパターンの話とは別の問題かも。

>>823
プロトタイプコードありがとうございます。まだ完全にわかってませんが、
コードの意味を考えてみます。





言い訳ですけど、

デザインパターンってGoFって孫子、呉氏の兵法書みたいです。

実戦を踏んでいる人には「あっ、これはあのこと言ってるんだ!」
と理解できるだろうけど、実戦を踏んでない人間にはピンと来ないのです。
0830デフォルトの名無しさんNGNG
>>826
本買え、海外のサイトもググれ
0831デフォルトの名無しさんNGNG
デザインパターンはどれくらい普及しているのか?

マ板をみるとデザインパターンの話をしても
プライドが傷ついたかのようにデザインパターンを嫌い、「遅い」などといってばかりなレスが目立ち、
普及して無いかのように見える。

日本ではオブジェクト指向を否定する香具師が多いくらいだから
デザインパターンの普及率はかなり低い?

そこで、デザインパターンを普及させるにはどうすればいいだろう。

もしかすると、多くの人は、既存のプロジェクトにデザインパターンが使えないと思い込んでいるかもしれない。
とりあえずかれらにAdapterパターンを説明すべき?

0832デフォルトの名無しさんNGNG
つうか、java に関して言えば、標準APIにそもそも
デザパタが多用されてるし、
EJB なんてデザインパターンの塊みたいなもんだし、
オブジェクト指向の言語はいずれにしろそういう形になっていくでしょう。

で、個別業務アプリだけ作ってる末端のプログラマーは、
わけも分からず、APIやフレームワークの仕様にあわせて作ってると。
それでも、APIやフレームワークの設計がよければ、システム全体としては、
デザパタ活用してることになる。
0833デフォルトの名無しさんNGNG
>>831
oo否定派デザパタ否定派はそれで設計するのに
時間がかかる人なんだよな。

慣れるには意欲がないとだめでしょ。諦めたり理解しようとしない人に
推し進めても効果ないと思うな

普及させるにはやっぱり個々の意識改革から変えていかないとねー

# 使いこなせてない人間が自分のスキル棚に上げて
# ぐだぐだ言うのはどうにかならんかね
0834デフォルトの名無しさんNGNG
デザインパターンをデザパタなんていう奴でデザインパターンを理解できている奴はいない
0835デフォルトの名無しさんNGNG
834はインパタ派
0836デフォルトの名無しさんNGNG
デザインパターンってのは勉強したらプログラムが早くなるってものではなくて、
こう来たら、こうするってのが脊髄反射的に作れるようになったら早く作れる物だと思うんだけどね。
習うより馴れろの典型だと思うんだけど。
自分はGoF以外のパターンは直感あるのみ、このパターンは良いものだって感じたらソレだってメモメモしてます。

#最近そこそこデザパタが使えるようになって思う事は
#勉強勉強って言っている奴にデザインパターンがまともに使える奴は居ない。
#どういう訳だか、設計設計って言っている奴にもデザインパターンがまともに使える奴は居ない。(藁
0837デフォルトの名無しさんNGNG
世に、生兵法は大疵のモトって言うしね。
0838デフォルトの名無しさんNGNG
結局ガリガリコーディングして、いろんな苦労をしないと、
ありがたさは肌身でわからんのよ。
0839デフォルトの名無しさんNGNG
C言語を使ってかなり苦労したのでデザインパターンを
その苦労を最小限におさえるために
多くのプログラマに使って欲しいと思うことがある。

一種の挨拶みたいなものだね。
「なるべく挨拶を心がけましょう。」
「なるべき綺麗な字で書きましょう。」
のように

デザインパターンを使うことがプログラマの習慣、常識になってほしい。

なんとか、デザインパターン文化を押し広げられたら・・・。
0840デフォルトの名無しさんNGNG
>>839
デザパタってそんなモンじゃねぇだろうとか思ったりもする
構造化プログラミングだって、ある種のパターンらしき物はあるし、
苦労したというなら、貴方の能力不足がたまたまOOのデザパタで解決しただけだよ
ついでに言うと、そんな事やったら嫌われるよ
0841デフォルトの名無しさんNGNG
C言語とデザインパターンって比べられるものなのか?
0842デフォルトの名無しさんNGNG
>>839
C 言語の不便さはあるけど、その不便さとデザインパターンの便利さというのは
かなり方向性が違うと思う。

C のイヤナ点は STL とか Java とか後発のスクリプト言語がうまく解決してくれていることだと思うし。

「C で苦労したからデザインパターンで、、、」といわれると「???」と思ってしまう。
0843デフォルトの名無しさんNGNG
>>841
英語と俳句を比べるようなものだな。
0844デフォルトの名無しさんNGNG
いっぺんウィジェットのセットを書いてみれば
GoFのパターンくらいすぐ頭に叩き込める
0845デフォルトの名無しさんNGNG
>>844
うん、うん、そう。

思うに、GOFでもなんでも、読んでみて、「こんなやり方があるのか」
じゃなくて、
「このやり方は、こう整理すれば ooの特性を生かして、スマートに実現できるのか」
「このやり方はこうういう名前で呼べばいいのか」
というのが、本当にわかったってことのような気がする。

真面目な話、C言語でやってたことを oo で実現するにはどうすればいいか、
という意味で参考になったことが多い。
で、C言語でやってたときは、「懲りすぎだ」、「意味がわからん」といわれてた事を、
「これはこれこれのパターンで・・・」といえるようになっただけでも、
かなりの進歩。
これは、C言語そのものの仕様の問題ではなくて、時期の問題
(デザインパターンが世にでてなく、Cが全盛だった)、
今なら、デザインパターンを C言語に適用して書くということもできなくはない
(まあ、今やるなら少なくとも C++ だけど。)。
そういう意味なら、
>>839
はわかる。
0846デフォルトの名無しさんNGNG
デザインパターンを齧り始めた物ですが、的外れかもしれないけど
アルゴリズムとデザインパターンの関係ってどんな感じ?
0847デフォルトの名無しさんNGNG
>>846
まずは
Google「アルゴリズム デザインパターン 違い」
で調べてみてはいかがか。
0848デフォルトの名無しさんNGNG
TemplateMethodではスーパークラスがサブクラスの挙動をコントロールしますよね?
BuilderではDirectorクラスがBuilderクラスの挙動をコントロールしますが、
Builderクラスでも同じように実現することは出来ないんですか?
どうして他のクラスにコントロールさせるんでしょうか?
0849デフォルトの名無しさんNGNG
>>846
たとえば、 C言語の qsort() 関数ありますよね。

で、qsort で並び替えに使われてる「アルゴリズム」が「クイックソート」。

ここで、qsort()関数の仕様を単純に、並び替えをしたい配列を渡す形式例えば、

void qsort( int *data )

とかにしてしまうと、ソートできるデータ形式や、ソートキー、ソートキーの評価基準などが、
一種類しかえらべなくなってしまう。
あるいは、

void qsortInt( int *data )
void qsortString( char **data )

のように、データ種別ごとに(アルゴリズムは同じなのに)別の関数にしなければならなくなる。

しかし、実際の qsort() の実装はこれをうまく扱えるようにしている。
こういった実装上の「うまいやり方」がパターンなんではないかと。
0850デフォルトの名無しさんNGNG
>>846
アルゴリズムはある種の問題に対する解法の事です。
で、沢山アルゴリズムを作ると、幾つかのアルゴリズムがよく似た構造をしている事がないかい?
その良く似た構造だけを取り出してきて、整理したものがデザインパターンって奴。
アルゴリズムに限らずプログラム中何度も出てくる構造を抜き出したものです。

>>848
とりあえず何も考えずに、実装しやすそうなパターンの方でプログラムすればいいです。
問題がでたとき、もういっぺん別のパターンの方が良くなかったか考え直してみればいいんです。
何回か書いていると第六感がビビビッと来るので、それが答え。
理屈を考えたらダメだね、デザパタは。
0851848NGNG
>>850
>理屈を考えたらダメだね
なるほど。とりあえずやれ、と。
とりあえず色々やってみます。ありがとうございます。
0852デフォルトの名無しさんNGNG
>>850
> 理屈を考えたらダメだね、デザパタは。

この一文は同意できないな。
いいたいことはわかるが。
誤解をうむ恐れが多すぎる。
パターンに名前をつけて、理屈で考えれるようにしたのがデザインパターンのメリットなんだから。
0853デフォルトの名無しさんNGNG
>>848 だってやりたいことが違うし。

GoFを読んでないのか、読んでてそういう疑問が湧いたのか、それによって
答え方が違ってくるから、その辺返答キボンヌ
0854デフォルトの名無しさんNGNG
JavaってCマガの連載記事を眺めている程度しか
知らないのだけど、リスナーってオブサーバーのこと
でしょうか?
見ている人って能動的なイメージだけど聞き耳を立てて
いる人って受動的なイメージだ…
あえて言葉をかえたのでしょうか
0855デフォルトの名無しさんNGNG
>>854
オブザーバーとはちょっと違う気がする。
0856fofofoNGNG
#include <stdio.h>

void main()
{
int i;

printf("前方が危険な場合は車線をはみ出してもよい ○の場合は5\n");
scanf("%d\n",&i);


if(i<=5){

printf("正解\n");
}else{

printf("間違い\n");

}

}
0857fofofoNGNG
#include <stdio.h>

void main()
{
int i;

printf("前方が危険な場合は車線をはみ出してもよい ○の場合は5\n");
scanf("%d\n",&i);


if(i<=5){

printf("正解\n");
}else{

printf("間違い\n");

}

}
上のコードの間違いが分かりません(^^;)識別子pの前に;を付けろとのエラーが出たんですが意味がさっぱりわからないです
0858デフォルトの名無しさんNGNG
>>856-857
スレ違い。
C言語なら俺に聞け! Part 67
http://pc2.2ch.net/test/read.cgi/tech/1068464309/
0859デフォルトの名無しさんNGNG
>>854
おんなじ。
0860デフォルトの名無しさんNGNG
>>848
おっしゃるとおり、生成手順が毎回同じ場合はTemplateMethod(生成を行う場合はFactoryMethodとかAbstractFactoryとか呼びますが)を利用した場合とBuilderを適用した場合は当然Builderのパターンのほうが冗長になります。
ただしBuilderが解決する問題は、生成手順や生成対象のオブジェクトが状況によって毎回違うかもしれない場合です。
組立手順を表すクラスと、組立を行うクラスを分離することにより動的にそれらを切り替えることができたり、再利用性を高めることができるようになります。
0861デフォルトの名無しさんNGNG
直接デザインパターンとは関係ないけど…
GoF本ではよく、パターンの適用例に異なるプラットフォーム間の再利用性を挙げてるけど
複数のプラットフォームを経験してからじゃないと再利用できるコードは書けなんじゃないかと
思うのですが、そこんとこどうでしょうか?
「メッセージループって他のプラットフォームにもあんのか?」ってよく思いますし。
//ちなみに漏れはWindows環境しか知らない痛いプログラマですが、何か?
0862デフォルトの名無しさんNGNG
> 「メッセージループって他のプラットフォームにもあんのか?」ってよく思いますし。
じゃあ、調べなさい
0863デフォルトの名無しさんNGNG
複数のプラットフォームを経験してからじゃないと再利用できるコードは書けないし、
他人の書いた汚いコードを保守してみないと、保守性の高いコードは書けない。

しかしそれとデザインパターンに何か関係がある?
0864デフォルトの名無しさんNGNG
クラスが巨大になってきたので分割を考えています。
巨大になった理由はいろいろあるのですが、
とにかくいろいろ都合があって大きくなってしまいました。
分割にはいろいろな切り口があると思うのですが、
今回はステートパターンを作ってステートごとにクラスわけすることにしました。

そこで疑問。状態遷移のきっかけとなるメッセージには、
その状態に関連したコードが少なからず入ってしまい、少し気持ちが悪くなります。
たとえば、印刷中状態というステートがある場合、
印刷を開始するメッセージは、印刷状態オブジェクトではなく、アイドル状態オブジェクトが受けます。
つまり印刷開始メッセージで渡される各種印刷パラメーターとかの初期設定は、
印刷とは関係の無いアイドル状態オブジェクトが処理しなければなりません。
このような場合、みなさんはどうしてますか?
0865デフォルトの名無しさんNGNG
>>864
ステートがメッセージを受け取るの?
何か間違っている気がする。
0866デフォルトの名無しさんNGNG
>>864
> つまり印刷開始メッセージで渡される各種印刷パラメーターとかの初期設定は、
> 印刷とは関係の無いアイドル状態オブジェクトが処理しなければなりません。
状態遷移と、メッセージの処理を分離した方が良いと思う。

メッセージを受け取った段階で、

 入力: 現在の状態、メッセージ
 出力: 次の状態

という関数なりテーブルなりを引いて状態遷移のみ行う.メッセージの処理は即座に行わず、
とりあえずキューに貯めておく。状態遷移が終わった後でキューからメッセージを取り出して、
具体的な処理を行う。(ステートパターン+コマンドパターン)

あと印刷状態を細分して,「印刷開始状態(ここで印刷関係のパラメタ設定)」「印刷中状態」
「印刷終了状態」ぐらいに分割すれば? ステートパターンを使う場合,一つのステート中で
さらに複数ステートをネストして持っても OK だから、ステート分割の自由度は高いぞ.
0867デフォルトの名無しさんNGNG
>>864
> とにかくいろいろ都合があって大きくなってしまいました

設計能力がたりなくて、と正直にかきなさい。
0868デフォルトの名無しさんNGNG
突っ込むなら、実のあることもかきなさい
0869デフォルトの名無しさんNGNG
>>867
最初はこじんまりしたクラスだったのが、あとからどんどん機能(メソッド)を追加していったとかって
体験したことない?
0870デフォルトの名無しさんNGNG
>>869
巨大になることはない。
0871デフォルトの名無しさんNGNG
>>866
うまく行きそうな気がしましたけど厳しいです。

  A B
X 1 2
Y 3 4

AとBが状態、XとYがメッセージです。
A状態でYメッセージを受けたとき、3を処理してBに遷移します。
B状態でYメッセージを受けたとき、4を処理してAに遷移します。

先に前処理で状態を遷移させると、A状態のときにBへ遷移してから4を処理してしまいます。

>>870

個人で作れる範囲のものだとそうかもしれないけど、
大人数で大規模なものを作るといろいろ難しいのです。
ハードウェアやライブラリの制約、過去の資産、スタッフのスキルなどなど…。
0872デフォルトの名無しさんNGNG
設計どうのこうのはここで議論することじゃないとおもうけど

で、Mediatorパターンじゃだめかね?
0873デフォルトの名無しさんNGNG
>>871
こんな感じのは?(言語はてきとー)

class Context {
  State state;
//・・・
  request(msg) {
    newState = state->handle(msg);
    canTrans = newState->preTransition(msg);
    if (canTrans) state = newState;
  }
}
至ってありふれた解というか、GoFをちょっと変形しただけ。

で、印刷の例だと初期処理はPrintingState::preTransition(msg)で
実装するみたいな。

>大人数で大規模なものを作るといろいろ難しいのです。
>ハードウェアやライブラリの制約、過去の資産、スタッフのスキルなどなど…。

分かる。でも分割できる事になって良かったじゃん。
0874デフォルトの名無しさんNGNG
出来上がったものを分析したらでてきたパターン(模様)であって
最初から狙ったデザイン(設計)ではない と思う。
0875デフォルトの名無しさんNGNG
>>866
>状態遷移と、メッセージの処理を分離した方が良いと思う。

それはもはやステートパターンじゃないのでは?
0876デフォルトの名無しさんNGNG
結城本2冊でGoFの23個とマルチスレッド編12個が詳解されてるけど
これら以外のパターンを学ぶのに良い本とかWebページないかな?
0877デフォルトの名無しさんNGNG
アナリシスパターン
J2EEパターン
0878デフォルトの名無しさんNGNG
>>876
とりあえずPOSA本
0879デフォルトの名無しさんNGNG
GoFのパターンみたいにさ、○○パターンなんて
へんな名前つけて終わり、なんてのじゃなくて、
もっと抽象データ型の関係を、数学から引っ張ってきた
概念で記述したりするような理論とかってないの?
GoFって名前だけ有名で現場じゃ全然浸透してないじゃん。
分った後の人が簡単だと思い込んでるだけで、
実際にはあいまいで分り難いものだからだと思うね。
0880デフォルトの名無しさんNGNG
> もっと抽象データ型の関係を、数学から引っ張ってきた
> 概念で記述したりするような理論とかってないの?
"Algebra of Programming"。
…あなたが期待するようなものでは絶対ないけどね。
0881デフォルトの名無しさんNGNG
>>880 サンクス子
0882デフォルトの名無しさんNGNG
>>879
数学っぽい背景があるヤツだと Generics とか。集合論わかってると話が早い。

> GoFって名前だけ有名で現場じゃ全然浸透してないじゃん。
不幸な現場にいるな……。
0883デフォルトの名無しさんNGNG
>>882
>> GoFって名前だけ有名で現場じゃ全然浸透してないじゃん。
>不幸な現場にいるな……。

要するに類は友を呼ぶって事なのだろうね。
0884デフォルトの名無しさんNGNG
朱に交われば
088582NGNG
shared_ptr と Flyweight は関連あるんでしょうか?
「共有」で連想してしまうんですが。
0886デフォルトの名無しさんNGNG
>>882
> 数学っぽい背景があるヤツだと Generics とか。集合論わかってると話が早い。
集合論っつーか、モデル理論だね。
0887デフォルトの名無しさんNGNG
大昔の2chのム板にShelahオタクみたいな人いたなあ
0888デフォルトの名無しさんNGNG
ガンマ95
0889デフォルトの名無しさんNGNG
恋愛のデザインパターンを教えて下さい!
0890デフォルトの名無しさんNGNG
決まったパタンは無い。
0891デフォルトの名無しさんNGNG
売掛買掛のビジネスアプリの世界でこそ、デザインパターンって威力を
発揮すると思うのですが、そゆー本が皆無で困ってます。

ビル建設(マンション)の例えで言えば、個々の部屋の動線を考慮した、サニタリー
ルームとリビングの関係、天井高さ、床材、なんかが売掛買掛の世界なら、

今世の中に有るテザインパターンの本は、鉄骨の組み方、ボルト穴の配置、
ラーメン構造、基礎の配置って感じです。


0892デフォルトの名無しさんNGNG
>shared_ptr と Flyweight は関連あるんでしょうか?
どっちかつうとshared_ptrはProxyパターンでつ
0893デフォルトの名無しさんNGNG
>>891
アナリシスパターンがいいよ
0894デフォルトの名無しさんNGNG
>>891
>今世の中に有るテザインパターンの本は、鉄骨の組み方、ボルト穴の配置、
>ラーメン構造、基礎の配置って感じです。

それは、もともとそういう位置づけなんだよ。
アナパタになら財務とか会計とか取引とか載ってるよ。
089582NGNG
>>892

ありがとうございます。今、GoFのProxyを読んでます。
smart pointerがありました(auto_ptrのことではないですよね?)。

More Effective C++では配列を例にとってで説明されていたので
「こういうときに使うもの」と狭い意味に考えていました。

Proxyっていろんな局面で使われているんですね。そのときが来るまで
後回しにしておく「遅延評価」に通じるような機能も持たせることができ
るし。。。「なりすまして、Side Effectをもたらす」という意味では共通
しているんでしょうけど、どうでしょうか?


もう一つ、質問させて下さい。More Effective C++で述べられている
「参照回数計測」とFlyweightの間には関連があるんでしょうか?
(C++スレに逝け!と言われそうなのは承知してます)
0896デフォルトの名無しさんNGNG
>>893-894
そっかぁってアナリシスパターンかぁって斜め読みしてみたけど、
アナパタって毛唐の文化が強すぎて.。o○

毛唐と和の心はちょっち違うじゃん?
出てる本もパターンカタログってより、カタログの作り方だし。

純日本建築のアナパタが欲しいのに、2*4のアナパタではなぁって思わん?
だれか書いてくれ、日本向けアナパタカタログ集。
089782NGNG
「なりすまして、Side Effectをもたらす」という解釈が正しいなら
auto_pointerも一種のProxyかも。。。
0898デフォルトの名無しさんNGNG
>>897
そもそも、auto_ptr はスマートポインタの一種だ。
0899デフォルトの名無しさんNGNG
>>896
アジアで協同してモデリングしていこうっつーのもあるよ。
http://www.umtp-japan.org/
0900デフォルトの名無しさんNGNG
900
0901デフォルトの名無しさんNGNG
うーん。特にOOについて勉強せずにC++でいろいろ組んでいたけど、
自分が知らず知らずのうちに考えていたことのほとんどがGoFの本とやらに
書いてあるみたいやね・・・今日、今から買ってきて読もうっと・・・
0902デフォルトの名無しさんNGNG
ちゃんと体系化して覚えないと長続きしないっぺ。
おらもデザインパターンやるっぺ。
0903デフォルトの名無しさんNGNG

勉強したけど、周りがついてこないんだっぺ。
一人でやっても嫌がられるだけなんで封印したっぺ
0904デフォルトの名無しさんNGNG
シングルトンとグローバルインスタンスはどう違うの?
0905デフォルトの名無しさんNGNG
>>904
たとえば、全アプリケーション中に、
Application というクラスのグローバルインスタンスがひとつだけあるようにしたいと。
だけど、普通に書くと、Application のインスタンスは複数作ることが出来るわけ。
Singleton を使うと、インスタンスの複数生成を抑制することが出来る。
これが、グローバルインスタンスとの最大の違い。
0906デフォルトの名無しさんNGNG
良スレage
0907デフォルトの名無しさんNGNG
IoC。
0908デフォルトの名無しさんNGNG
何でGoFって言うの?
0909デフォルトの名無しさんNGNG
Gang of Fourって言うのが面倒だから。
0910デフォルトの名無しさんNGNG
ごふっ(吐血
0911デフォルトの名無しさんNGNG
俺がGang of Fiveの五人目
0912デフォルトの名無しさんNGNG
俺はMao Ze-dong
0913デフォルトの名無しさんNGNG
最近関数オブジェクトに目覚めて、
Compositeパターンをテンプレートクラスとして実装しようとしてるんだけど、
テンプレートにしちゃうとメンバ関数を仮想関数にできませんでした。
ツリーを探索するFind()とか作りたいんだけどいい方法ないしょうか?

こんな感じ↓(本来のCompositeのメンバ(addとか)は省いてます。)
template <class T> class Component {
T _d;
public:
Component(const T &d) :_d(d){}
virtual template <class Pr> Component *Find(Pr pr){} // ←これがNG
};

template <class T, class Pr> class FindOp {
Pr _pr;
public:
FindOp(Pr pr):_pr(pr){}
void operator()(T *p) const { p->Find(_pr); }
};
0914デフォルトの名無しさんNGNG

template <class T> class Composite : public Component<T> {
list<Component *> _child;
public:
Composite(const T &d) :Component(d) {}
template <class Pr> Component *Find(Pr pr){ // ←これはOK
if(pr(this)) return this;
Itr it = find_if(_child.begin(), _child.end(), FindOp<Component,pr>(pr));
if(it == _child.end()) return 0;
return (*it);
}
};

template <class T> class Leaf : public Component<T> {
public:
Leaf(const T &d) :Component(d) {}
template <class Pr> Component *Find(Pr pr){ return pr(this); }
};

0915デフォルトの名無しさんNGNG
ゴフの部屋

綾波が生まれた所
0916デフォルトの名無しさんNGNG
>>905
そんなことせんでもグローバルかどうかなんてアフォでも分かる。
ひとつのテクニックとしては分かるけど、パターンに入れること自体アフォ。
∴GoFはアフォ。
0917デフォルトの名無しさんNGNG
|そんなことせんでもグローバルかどうかなんてアフォでも分かる。
アフォはそうでない人の想像を越えることをしでかす。
0918デフォルトの名無しさんNGNG
俺namespaceかstatic classでいいや。
0919デフォルトの名無しさんNGNG
>>916
> パターンに入れること自体アフォ。
よくあるパターン批判にしか聞こえない
0920デフォルトの名無しさんNGNG
パターンって半分常識で、残りが冗長と使えねってのしかないね。
常識的なパターンに名前がついていることでたまに意思疎通がしやすくなる程度。
それぐらいの価値。
0921デフォルトの名無しさんNGNG
こういうこという奴ほど、ひとりよがりのコーディングをする傾向にある。
0922デフォルトの名無しさんNGNG
いや、べつに>>920がそうだって言ってるわけじゃないからね。
0923デフォルトの名無しさんNGNG
なんだこの実用性ゼロのMazeGameサンプルは
0924デフォルトの名無しさんNGNG
サンプルなんてそんなもんじゃろ。
一応こんなのものある。

Design Pattern for Computer Games
http://www.mine-control.com/zack/patterns/gamepatterns.html
0925デフォルトの名無しさんNGNG
おまえら哺乳類ネタについてはどうですか
0926デフォルトの名無しさんNGNG
MammalとかCarとか意味がない。
ウインドウシステムを例に挙げるほうが分かりやすいんじゃないかな。
0927デフォルトの名無しさんNGNG
>>920
>常識的なパターンに名前がついていることでたまに意思疎通がしやすくなる程度。
>それぐらいの価値。

当たり前だ。もともとパターンってその為にあるんだろ?
0928デフォルトの名無しさんNGNG
ドメイン分析の出来ない926がいるスレはここですか?
0929デフォルトの名無しさんNGNG
>>927
まあ、バレーボールのAクイックとかBクイックとかと似たようなもんだ。

ってのはどこで見たんだっけ。
0930デフォルトの名無しさんNGNG
結城氏のデザパタ本、評判良いらしくて、
これまで一度も読んだ事なかったんだけど、
今週、勉強会で使いました。

結果:確かに23パターン並べているんだけど、
GoF本中途半端に要約してJavaのソース付けただけ、
って感じで、非常にガッカリしますた。

0931930NGNG
漏れが足りないと思ったのは、例えば以下の部分:

・動機付け
 これは GoF本にも言える事だけど、
 確かに他人のソースや自分のプログラミングで
 発生するパターンなんだけど、
 動機付けが妙に不自然、説明が不充分なパターンが、
 いくつか存在する。例えば Singleton, Factory Method。
 GoF本つったって、Dr.Gamma (某マンガ思い出したw)が
 学位論文として書いたのが元ネタだから、苦し紛れな説明でもしょうがないのかな?
 その苦し紛れな動機付けを、後発の本がそのまま載せてしまうというのは、
 正直、結城氏の見識を疑う。

・Java技術の現状への橋渡し
 例えば、Mediatorのサンプル。
 GUIコンポーネントをサブクラス化し、
 イベント伝達機構を不自然な形で使用 (コンポーネントをリスナーにする)
 してまで、Mediatorの例、作るのは、いかがなものか、と。
 素直に、現在のJavaGUIプログラミングは、
 ObserverパターンとMediatorパターンのミックスだと、
 説明した方が、役に立つ

・関連パターンの説明
 これも、単なるGoF本のコピーで、掘り下げなんて皆無。

0932デフォルトの名無しさんNGNG
>>926 と >>928 の関係が分からないおいらに、
ドメイン分析とMammal,Carの関係を教えて。
0933930NGNG
結城本が評判いい、とは聞いていたが、なんで評判がいいのか、全く理解できない。
勉強会でこの本使ったおかげで、毎日下準備に苦労させられた。
この本読んで、パターン理解した気になってる人が居たら、怖い。
パターンなんて、新人が暗記して覚えればいいもんじゃないんだぞ、
学生時代からプログラミング本気でやってる人間が、2〜3年したら見えてくるもんなんだぞ、と。

質問:デザパタ結城本て、本当にいい本だと思いますか?
    Yesな方は、その理由を教えてくだちい。   
0934デフォルトの名無しさんNGNG
GoF本なんて、Xwindowのwidget例に上げたり、Smalltalkのコードあったり、
オブジェクト指向プログラミングの古文書引きながら理解するもんであって、
概念コピー&パターン文書のパターンを無視してる結城本はナンセンス。
0935デフォルトの名無しさんNGNG
>>4
レスつける資格なし・・・。
0936デフォルトの名無しさんNGNG
結城氏、最近は暗号化の本出してるらしいけどw
専門家の目に耐えられる内容なのかなw
今日、本屋で見かけたけど、怖くて手にとらなかったw

彼は結局、ナニする人なの?
要約本執筆のできるプログラマ?
0937デフォルトの名無しさんNGNG
どっちにせよ一冊読むだけで理解するのは無理なんだし、
取っ掛かりとして「優しい」本からはじめられるのは良いことだと思うよ。
GoF 本しかなかったらデザパタ知る気になる人がどれだけいたかね?
0938デフォルトの名無しさんNGNG
俺はC++もSmalltalkも分からずにGoF本を読んだ。
その分、言語にこだわらないでパターンの抽象を学べたよ。

何度読んでも美味しい本だ。
「GoFのデザインパターン」を学ぶなら、GoF本1冊で充分。
0939デフォルトの名無しさんNGNG
君のような優秀な人はアメリカに行ってください。
0940930NGNG
>>938
GoF本は、説明が読みにくい部分や、定義が曖昧な部分含めて、
するめみたく、読むば読むほど美味しいのする、良書だね。

その読みにくさや、曖昧さを排除して、素人にわかりやすくした結果、
ジャンク・フードが出来ますた、という感じ>>デザパタ要約本

ジャヴァワールド連載記事は、生の感覚で書いてあるから、なかなか好印象なんだけど。
0941デフォルトの名無しさんNGNG
するめとジャンクフードか、言い得て妙だな。
DQNPGを使わなきゃ成り立たないこの世の中で、需要は大きいからな。
まあ、ジャンクを悪いと言うつもりはない。
0942デフォルトの名無しさんNGNG
>>936
スレ違いだが一応。とりあえず件の暗号本は買ってあったんで。積ん読だけど。
で、そもそも
>専門家の目に耐えられる内容なのかなw
という発想がまず違うんじゃないかと思う。求めるものが違うというか。
本気で専門にやる気はなくて「へぇ、こういうもんなのか〜」と理解した気になりたい人向けだと思う。
↓参考: Amazon の書評、レビュー
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797322977/ref=sr_aps_b_/249-2654937-2098752

狙ってジャンク・フードを作ってるなら意味のあることだと思う。
教科書と啓蒙書、対象は違うけど両方必要でしょ?
0943デフォルトの名無しさんNGNG
>>942
単に、「俺はジャンクフードは要らない」、っているだけ。
ジャンクフードしか食えない人に、スルメ食えとは言えない。
0944デフォルトの名無しさんNGNG
>>938
禿同。
GoFをちょっと勘違いして要約してまとめましたって感じで、
いろんな意味を含めて、それなりに参考にはなるけど、
デザパタを身につけたかったら、GoFの翻訳本で十分だと思うな。
Javaな人ならまだちょっとは意味あるけど、C++な人なら絶対、GoFの方がいいぞ。
コンパイルが通るソースなんていらないし。

あと、結城本に欠落しているのは実践だと思う。
著者自身がその経験がないのでどうしようもないかな。
中規模のフレームワークを実践しながら構築していく本とかが欲しいな。
パターンハッチングの2章をかなり膨らましたようなやつが読みたい。
0945デフォルトの名無しさんNGNG
>>942
ふつー、暗号技術大全と、あとPKIの実例載った本買うよな。
中途半端な知識の人が、中途半端な理解で書いた啓蒙書ほど苦痛な物は無いし。
0946デフォルトの名無しさんNGNG
>>931
Singleton と Factory Methodの組って、明らかに、
・クラス自体もオブジェクトであるような言語 (Smalltalk等)の機能を
・クラスはオブジェクトではないような言語(C++,Java)で
実現するためのパターンだよな〜。

そこらへんの説明なしに、SingletonやFactory Methodを説明するってのは、
暗にMetaObjectとかリフレクションの概念を要求することになって、理解が困難になる。

さりとて、GoF要約本みたく、背景説明も掘り下げも全部省いちまうと、
一貫した説明や説得力が殺がれちまって、なんでそのパターンが登録されているのか判らん、
て状況になる。

結局、長年にわたり蓄積されたノウハウの説明って、そのノウハウが成立した当時のコンテキストを引きずっているから、
説明難しいのかな
0947デフォルトの名無しさんNGNG
なんかよくわかんないけど、
パターンてそんなに難しく考えなくちゃいけないの?
有機本で十分とおもう漏れは、どの辺が馬鹿?
クラス図とサンプルソースがあれば十分じゃね?
0948デフォルトの名無しさんNGNG
動機づけが明確でないノウハウなんて、迷信みたいなもんで、邪魔なだけだろ。
そーゆー、一見邪魔な知識を、役に立てられるように掘り下げずに、
ただ受動的に受け入れる姿勢が、ナンセンス。
プログラミングって、インタラクティブなものなんだから、
実利主義じゃ無くちゃーあ、ねぇ?やってられんでしょ
0949デフォルトの名無しさんNGNG
そんなん、サンプルコードがあればわかるんじゃない?
受動的とか実利主義とか、いってる意味がよくわかんない。
0950デフォルトの名無しさんNGNG
ただ一種類だけのコード見て、それが十分一般的なアイデアであるかどうか、
理解させるのは難しいと思うよ。
そして、実利主義つうのは、そのパターンは使い回すに値する程洗練されているかどうか、
前提条件などに見落としがあって、拡張使用とした時に障害とはならないか?という価値判断のこと。
どっちにしても、ソースコード読みまくる訓練して無い人が、感覚的に意味を理解するのは難しい。
#だから、自分と同じ文化にある、洗練されたソースコードを読みまくれ!!!
0951デフォルトの名無しさんNGNG
デザパタの説明読んであああれのことかと思い当たるコードを
読んだor書いたことがなければデザパタを理解することは難しい。
0952デフォルトの名無しさんNGNG
結局のところ、デサパタは個々のパターン自体を学ぶ為のものではなく、
各々のパターンに公共で通用する名前をつけて、プログラマ同士の
円滑なコミュニケーションを図る為のものだろ。

それがいつの間にか、個々のパターン自体を知らない初心者の為の教科書として
使われるようになってしまったというだけの話。

広辞苑を読むだけで、言葉の達人になれる訳がない。様々な文章を読み、
その言葉が使用される文脈を肌で理解する作業を怠っていながら、
聞きかじりの知識で使い慣れない難しい言葉をこれ見よがしに使ったところで、
本当にその言葉の意味を知った人から嘲われる(←なぜかへんかんできない)だけだ。
0953デフォルトの名無しさんNGNG
広辞苑のメタファは不適切かと。それは、言語の規格書に似てる。
色々な言語によるお芝居を分析し、共通のシークエンスを抽出した文化人類学の文献とかに、
デザパタは似てる。(そんな研究があったのかは知らないが。)

そこにあるシークエンスたちは、読者に創造力さえあれば、
単独で感動を与えることすらあるのさ。
0954952NGNG
言いたいことは分かるが、漏れと>>953 の間には
「言葉」というものについての思い入れの差があるな。
ちょっと反論。

>共通のシークエンスを抽出した文化人類学の文献とかに、
>デザパタは似てる。

抽出された概念は時を経るごとに巷間に伝わり、ついには
広辞苑に載るようになる。じつは辞書に載っている単語は全て、
そのような歴史の積み重ねによって作られてきたものばかりだ。

そして(ここが重要だが)辞書は決して言葉について「定義」はしない。
もともと出来ないのだ。
出来ることといえば、その言葉のイメージを連想させる読者の経験を
思い起こさせる言葉を列記することだけだ。
0955デフォルトの名無しさんNGNG
メタ文化人類学の話はさておいて。
パターン一種類しか使わないって、あんまない。
・MediatorとObserverでGUIのアーキテクチャ、とか、
・MethodFactoryとSingletonでMetaObjectの代り、とか、
・TemplateMethodとStrategyでルールの山を整理、とか、
合わせ技で使うのが普通でしょ。(最後の例は、Ruleエンジン使いたいと思ってるけど)

そーゆー、組合わさってナンボのパターンを、一個一個切り離して、
組み合わせの妙を探索したり、
パターン間の相互作用を分析しようとしたのが、
GoF本の面白い所。但し、「関連するパターン」の掘り下げが足りないような気がする。

#そろそろアナパタ読み進めないと、ヤバいな・・・。
0956955NGNG
>>952
それは違うよ。
他の人のソース読みこなし、自分のソースを洗練する訓練して無い人は、
やっぱ頭で判ってるつもりでも、とんでもないソース書いちゃうもんだよ。
経験して覚えろ。失敗から学べ。最初から複雑なパターンを使おうとせず、
シンプルなコードをリファクタリングで洗練する練習をすべきだ。

あと、「デザパタが簡単過ぎる」などと底が浅そうな発言してる暇あったら、
もっといろいろなパターンを勉強されてはいかが?
0957955NGNG
>>951
そ、そんな感じ。
自分で発見したパターンは、なかなか忘れないもんだけど、
人から聞いて覚えたパターンてのは、なかなか血肉にならないもんだ。



0958デフォルトの名無しさんNGNG
>>955
>それは違うよ。
???

まず、>>952 が何を言わんとしているのか
(というより >>955 による解釈だな)、
そして何処がどう違うのかを要約してくれないか?

一体 >>952 の何処から「デザパタが簡単過ぎる」
という珍説が導出されたのか知りたいものだ。
0959デフォルトの名無しさんNGNG
>>955
>>956
どういうソースを読みまくるのが良いのでしょうか?
実例を出してもらえると参考になりまつ。
0960930NGNG
話の本筋が見えていないおかしな人(>>958)はスルーしとくとして。

>>959
SqueakのSmalltalkコード、
J2SEやらJ2EEのプロダクション・コード、
OO関係ないけど、*BSDやオプソ・サーバ類のコード、
ってあたりは、デフォルトでしょ。
あと、VC++ベースやMacOS Xのフリーウェア、言語処理系、Linux, GNU
なんてのにも目を通すと、
視点や趣味が違うと、ソースがかくも変わるのか、なんて視点が広がるよね
0961デフォルトの名無しさんNGNG
いや、まあ間違っちゃいないが、
GoFの本とOOパターン修得の話をしていた気がするのだが。。。
0962デフォルトの名無しさんNGNG
961
え、何か?
まるっきりスタンダードな、パターン学ぶ方法の話だけど。
0963デフォルトの名無しさんNGNG
>>961みたいな発言する方って、ナニ様なんでしょう・・・♥
きっと、Dr.Gammaかなw
じゃ、ET++ にも目を通せw
0964デフォルトの名無しさんNGNG
実例、っつってんだから、
あなたが読んで感銘を受けたコードを教えてあげれば?
0965930NGNG
きみ、失敬だな。
君自身の体験を語ってやれば良いでしょ。

俺の場合、DigitalkのSmalltalk/Vコードと、Minixコードと、DOSベースのマルチタスクカーネル、
あと 1990年以前にリリースされたほとんど全てのオプソ・言語処理系、が原点かな。
言語処理系のソースは、結構いろいろなパターンが使われていて、おもしろい
0966930NGNG
*BSDとか、OO&制約ベースの toolkitとか、Lisp言語処理系に嵌ってた時期もあったな。
0967930NGNG
失敬なきみは、ナニのソースに感銘を受けたの?
0968デフォルトの名無しさんNGNG
あら、日本語が読めないのね。
ごめんな。
0969930NGNG
また、頭の調子が悪い人にマジレスしちまったw
0970930NGNG
しっかし、夜の一時に、俺の帰宅待ち構えていたように絡んでくるあんた、暇&悲惨だな。
そんなに暇なら、Squeakの全ソース (Smalltalkコード部分)でも読んで、パターン抽出でもしてみたらw
0971デフォルトの名無しさんNGNG
で、そういう長い経験がない人が、会社入って PG してくれというときに、
どうやって勉強すればよいのでしょうか?
0972デフォルトの名無しさんNGNG
ぷ〜でもしながら、そ〜す読めばぁ?
0973デフォルトの名無しさんNGNG
>>971
経験がなければ理論先行で頭に詰め込んでけばいいよ。
で、実際似たようなパターンに遭遇した・設計した場合にこんなもんかと
復習しながらデザパタの知識とのすりあわせをしていく。
で、さりげなく会社でデザパタ用語を撒き餌しながら同志を募っていくと。

ともかく言語の文法やその言語によるOOの手法ほど即効性はないから
最初は知識として持っておけばいいと思うよ。
実践におけるパターン認識能力は間違いなく高まるからさ。

ただお勉強の順番としては
文法、OO、UML、(中略)、、、、デザパタ
って気がするけどね。
0974デフォルトの名無しさんNGNG
デザパタ本は一回読んだだけでは無意味で
コーディングをしつつ何度も読まないと身につかないでしょ。
実践と理論を行き来することで体感するしかないと思いますよ。
0975デフォルトの名無しさんNGNG
いや、一回読めばすぐ身に付くよ
「あったあったそういう事」というような基本的なのばかりだから
0976デフォルトの名無しさんNGNG
>975
それはもう既に実践経験を積んでる、ということでしょ?
実践経験がないと読んでも理解は半分で終わります。
0977デフォルトの名無しさんNGNG
C++関係で良いソースないですかね?
JavaやSmalltalkには定番があるんだけど、C++にはあんまり見当たらないし、
上でも例が上がってないね。
CppUnitぐらいしか読んでない。
0978デフォルトの名無しさんNGNG
>976
じゃあソース書いて実践経験をつければいいのに
0979デフォルトの名無しさんNGNG
>>978
もとからそう言ってるやん。
読んで書いて書いて読んで。習うより慣れろ、と。
普通すぎる。。。
0980デフォルトの名無しさんNGNG
         ☆ チン     マチクタビレタ〜
                         マチクタビレタ〜
        ☆ チン  〃  Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・) < 次スレまだ〜?
             \_/⊂ ⊂_ )   \_____________
           / ̄ ̄ ̄ ̄ ̄ ̄ /|
        | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
        |  愛媛みかん  |/
0981仕様書無しさんNGNG
FactoryMethodがわからない・・・
ConcreteProductごとに対応するConcreteCreatorを作るんだよね。
素直にConcreteProductをnewすればよさそうに思えてならない・・・
このパターンの意味ってなんですか?
どんなメリットがあるのでしょうか?
0982デフォルトの名無しさんNGNG
>>981
1対1ではなく、複数の種類の ConcreteProduct を作成する場合には意味がある。
「Productのセット」を切り替えるわけ。
この辺、デザパタの教科書には必ず書いてあるぞ。
0983デフォルトの名無しさんNGNG
所詮プログラム
お前らソフト屋はこんな本読んでる暇あったらとっととコーディングしろ。
こんなことに時間と頭使うな。
どうせ使い捨てのカスなんだよ。おめぇら。
0984rNGNG
>>983
捨てられるまでは使われるからな。
0985デフォルトの名無しさんNGNG
>>981
使い道は2つ。
一つは、Baseクラスに*static*なFactoryMethodを定義して、その中で
必要なConcreteProductを生成するという方法。
拡張性がなくてカコ悪いが、サブクラスが固定的な場合は有効。
もう一つは、すでにあるインスタンスから、新しいインスタンスを生成するような、
Prototype的な使い方。Prototypeは、属性を引き継ぐが、FactoryMethodは、
属性を引き継がないくらいの違い。仮想コンストラクタと呼ばれる所以。
0986デフォルトの名無しさんNGNG
>>981
デザインパターンを勉強するときは、パターンごとに1つでいいから具体例を覚えるといい

例えば今、WinかMacかで分岐するコードがあったとする

if (state == win) {
/* win の場合 なんたらかんたら。。*/
} else if (state == mac) {
/*mac の場合 なんたらかんたら。。*/}

毎回こんなコードを書くよりなら、2つをサブクラスにしたほうがスマート

// ----------< 生成 >--------------
OSClass os;
if (state == win) { os = new win()
} else if (state == mac) { os = new mac()
}
// -------< 生成終わり >--------

os.operation();

この、生成部分もクラスに持たせれば、工場パターンの出来上がり。

OSClass os = OSClass.create( state );
// OSClassがstateを知っているなら create()だけでいい
os.operation();
0987デフォルトの名無しさんNGNG
Commandパターンについてなんですが
Invokerの意味がわかりません。
大概のサンプルソースは

CliantがCommandを生成して
Invokerに渡してInvokerが実行

という感じみたいですが
CliantがCommandを生成してる時点でそのままCliantが呼んでも
あんま変わらないような気がするんですが・・・
0988デフォルトの名無しさんNGNG
デザインパターンの骸骨たちって既出?
0989デフォルトの名無しさんNGNG
>>987
クライアントがInvoker使うのなら、そうだろうな。。とだけ、言っておこう
0990デフォルトの名無しさんNGNG
>>981>>987
必要性がないならシンプルな方法で組んだほうがよい
なんでもかんでもデザパタを適用すればいいってものではない
修正の影響範囲を最小限に抑えるという原則に従っていけば
そこに必要性があればデザパタの各クラスの役割も見えてくる
面倒なだけだと思えるのなら必要性がないということ

自分の書いたコードを仕様から修正・拡張しながらリファクタリングしていけば
勉強になるんじゃないかな
サンプルだけで覚えても使える勉強にはならんよ
0991デフォルトの名無しさんNGNG
>>988
>デザインパターンの骸骨たちって既出?
あそこはわかりやすいから、漏れもよく見るよ
で、6で既出だな。
0992デフォルトの名無しさんNGNG
>>991
ども
0993デフォルトの名無しさんNGNG
次ぎすれどこ?
0994デフォルトの名無しさん NGNG
>987
Invokerは、実行キューだと思えばいい。
例えば、サーバーシステムを考えてみる。
サーバーでグラフを出力するような重い処理をしているときに、なにも
考えずに、グラフ出力用の同期関数を呼ぶと、グラフ出力処理をしている
間、他のクライアントはなにもできなくなってしまう。(ブロックされる)
そこで、グラフ処理をスレッド化して、要求をキューに蓄積すれば他の
クライアントの要求をいったん受けて、あとで処理するようなことができる。
COMMANDは、GOF本で紹介されているようにマクロのようなバッチ的な
使い方もできるし、高度なフレームワークを構築することもできる幅の広い
パターンなので、もう少し経験を積んでからチャレンジしたほうがよいだろう。
0995デフォルトの名無しさんNGNG
>>980
0996デフォルトの名無しさんNGNG
次スレ
http://pc5.2ch.net/test/read.cgi/tech/1065535118/l50
0997デフォルトの名無しさんNGNG
997
0998ようかんマン ◆CDzPHypGTA NGNG
998
0999デフォルトの名無しさんNGNG
999GET!!
1000デフォルトの名無しさんNGNG
多分無理っぽいけど1000ゲット
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。