デザインパターンの単純そうな質問
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGという人のためのスレ。
0002デフォルトの名無しさん
NGNGそもそもダイナミックローディングとは、どういった操作の事をいっているのでしょうか?
ちなみに、本は、日本語版の初版です。
0003デフォルトの名無しさん
NGNG俺なんか結城さんの本を読んでもプロトタイプわからん。
0004デフォルトの名無しさん
NGNG本の話は…持ってない人が辛いんで、
該当部分を引用するとか、もしあればURLを書くとか
(英語しかなくてもとりあえずないよりはマシ)
してくれると助かる。
00052
NGNG大昔にはあったのかも知れないけれど、探したら無かった。
で、該当する箇所を引用します。
インスタンス化されるクラスが、例えば、ダイナミックローディングにより、
実行時に明らかになる場合。
(p128、デザインパターン初版、SOFTBANK社)
これだけじゃ、分からないかなぁ。やっぱり。
0006適当に
NGNGJava言語で学ぶデザインパターン入門
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/
00072
NGNG見た事の無いWebページもありますので、読んでみます。
ありがとう。
0008追加
NGNGデザインパターン 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>インスタンス化されるクラスが、例えば、ダイナミックローディングにより
>実行時に明らかになる場合。
>これだけじゃ、分からないかなぁ。やっぱり。
…わかっちゃった(^^;
インスタンス1号を作るとき、そのクラスとして
後からロードされるクラスを使いましょう、って場合だ。
で、インスタンス2号を作りたくなった辺りのソースでは
インスタンス1号は(Scopeとか的に)見えているんだが
そのクラスは見えないようになっている、という場合だ。
じゃあインスタンス1号に2号を(本人と同じクラスで)
作らせちゃえばいいじゃん、という話。
喩え1:
謎の悪の組織デスト某に作られた仮面ライダ1号は
戦いに疲れて仲間が欲しくなったのだが、
いまさら謎の悪の組織に再びのこのこ出向くわけにもいかない。
しかたがないので自分の体を真似して自力で2号を作った。
喩え2:
ゲイツのソフトだろうがLinuxだろうが
元ファイルがあればピーコするのは同じ手順でできる!(わら
うーん。でもこれだと、Factory系のパターンとの違いが
際立たないというか、なんか変だな。
俺間違いかも。突っ込み歓迎。
0010さらに
NGNGhttp://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/
00112
NGNG私もわかったかも。
Cloneオペレーションを定義を定義してある、Prototypeがまずある。
で、Prototypeの派生クラスConcretePrototypeA、ConcretePrototypeB
と言ったクラスがある。
ロードをする部分(メッソドやクラス)は、具象クラスの名前なりがわかっているわけだ。
でも、実際にロードされたクラスを使うクラスでは、具象クラスを知らない。
けれど、新たにインスタンスが欲しい。
しかし、具象クラスについて知らないから、コンストラクタを呼べない。
結果、複製すればいいということになる。
ポリモルフィズムで適切なCloneメソッドが呼ばれるから。
という感じ?
00122
NGNG無いから、根本的なところが間違っているかも。
00149
NGNG>インスタンス1号を作るとき、そのクラスとして
>後からロードされるクラスを使いましょう、って場合だ。
ここでいう「後」とは、そのプログラムが起動された後という意味のつもり。
動的ロードがあたりまえのように出来る言語では、
大騒ぎするような話じゃあないわな。
C++だと標準では出来ない(VCやC++Bみたいに
色々手を尽くしてそれっぽく実現してる奴はいるが)。
rubyみたいな動的でインタプリタな言語なら
とーぜんのように(すまんmatz氏)ついている機能。
喩え1や2は、そういう意味では悪くないと思う。
インスタンス1号を作る時点では、間接的にせよClassを使えたわけだ。
で、2号の辺りでは間接的だろうがなんだろうがそのClassを
「再びソース上で」呼ぶことが出来ない、という状態。
00159
NGNGまぁいいか。
>ポリモルフィズムで適切なCloneメソッドが呼ばれるから。
それそれ。
ただ、蛇足だがObjectiveCやDelphiだと
「クラスメソッドのポリモルフィズム」を使えるので、
そーいう意味でのCloneは、あんまり必要なかったりする。
#もちろん、インスタンス1号(の状態)を2号に含めたい場合は、
#ピーコ(Clone)のほうがずっと自然なやり方だが。
#今回の話はやっぱりどっちかってーとBuilder系パターンの話が
#微妙に混線してるような気がする。
Smalltalkやrubyなんかでも指摘されていることだが、
デザパタのいくつかは、対象言語の柔軟性の低さ
(つまりあるパターンを直接ライブラリ化できないこと)を
パターンということにしてカバーしている(わら)という節もある。
00162
NGNGありがとうございます。
どうにか分かりました。
>デザパタのいくつかは、対象言語の柔軟性の低さ
>(つまりあるパターンを直接ライブラリ化できないこと)を
>パターンということにしてカバーしている(わら)という節もある。
みたいですね。
私はSmalltalkは知らないのでよくわからないのですが、
「Smalltalkではあまりこの使い方に意味は無い」といった感じの
記述を、デザインパターンの本の中でしばしば見かけます。
00171
NGNGかなり人気無いな、このスレ。
ターゲットを絞りすぎたのかも。
「パターンを全般的に扱うスレ」とかにした方が、良かったかなぁ…。
0018うむ
NGNGククク・・・・
まったくわからんよ・・・
0019デフォルトの名無しさん
NGNGSingletonDialog便利(笑)
0020デフォルトの名無しさん
NGNGの工場は、
いろんな部品をまとめて提供するもの
て解釈でいいですか?
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNGナニ(1つでも複数でも)を作るかが、
大筋は決まってるんだけど、
完全に具体的というほどにはまだ
決まってない(=Abstract)、という工場だ。
たとえばプラモ自動車用に
10種類くらいの部品を作る工場で
その設計とかも大抵出来ているし
金型まで用意済んでるんだが、
その金型にナニ色の樹脂を流しこんで製品作るか?は
まだ決まってない、みたいな工場(のクラス)。
で、その工場クラスを継承(カスタマイズ)して、
赤プラモ製造工場や、青プラモ製造工場を、作るわけな。
ところで結城氏の本。
「自分の言葉」で語っている(しかもドキュじゃない)のは
素晴らしいが、それ故なのか、時折過不足を感じる記述も有るなあ。
90点以上の出来(=並大抵のもんじゃない)なのは確かだが。
0023デフォルトの名無しさん
NGNGぜんぜん違うっていわれたけど、そうでもなかったみたい
0024名無しさん
NGNG結城氏の本は簡単でネチっこく説明してくれてるので一番良いと思った。
ところで、結城氏の本のPrototypeの説明(P75)にある
「種類が多すぎてクラスにまとめられない場合」
にProtptypeを使えと言うのが良くわかんない。
0025デフォルトの名無しさん
NGNG「デザインパターン(英語版)」のP119-120に、
Specifying new object by varying valuse.
(中略)
This kind of design lets users define new "classes" without programming.
って書いてあり、これのことを言っているのだと思う。
で、何がいっている文章かというと、例えば楽譜エディタがあった時に、音符を
表すクラスがたくさん必要になる。
二分音符クラスやら、四分音符クラスとか。
そこで、「音符クラス」を用意しておいて、異なる「長さ」と「ビットマップ」で
初期化したインスタンスを用意しておいて、それのクローンを作るようにすればいい。
…っていうようなことが書いてあるように俺には読めるのだけど、二分音符クラス
やら、四分音符クラスをまとめて「音符クラス」にするのって普通の発想だよなぁ…。
うーん。
ということで、結局俺もよく分からなかったり。
0026デフォルトの名無しさん
NGNGなるほど。prototypeの使い道がようやく見えた。
四分音符が楽譜上に置かれているとして、ユーザーがその音符をコピーしたいとき、
単純に四分音符を生成するのではなく、
とある(種類不明の)音符をコピーした結果として四分音符が生成されると。
そういうときに使うのか。
0027d
NGNGめめんと!
0028デフォルトの名無しさん
NGNGおれもめめんとなんて単語、あの本読むまで知らなかったよ
0029デフォルトの名無しさん
NGNG思っていたけど、「具象クラスを知らなくても、インスタンス化ラインスタンスが
生成できる」って側面に注目すべきだったみたいだな。
ちょい、納得。
0030デフォルトの名無しさん
NGNGちょっとずつ違う似たような図形をいっぱい並べて使うようなアプリで、
仕様のホットスポットが「図形のバリエーションが今後も追加されると思われ」
だった場合に、図形ひとつづつをいちいちサブクラスとして定義しようとすると
クラスの数が爆発してしまう。
という場合に使うと思った。
0031dこうい
NGNGこれは○○パターンだな とかわかるものなのでしょーかー
0032デフォルトの名無しさん
NGNGというか逆に、ソースコードを説明する時に、
「これは○△パターンを使って×□を処理してます」とか
設計についてミーティングする時に、
「この部分は□○パターンを使って管理しよう」とか
コミュニケーションのために使うんじゃない?
あとコードの中では意識してイディオム的なクラス名やメソッド名、フィールド名を使って
後から読む人(含む自分)に、そのコードがどういうパターンを使っているか伝わりやすい
ように工夫するとか
003330
NGNGつまり、ちょっとずつ違うたくさんのオブジェクトを扱う時に、
それぞれの違いをサブクラスとして表現するのではなく、
同じクラスのインスタンスなんだけど状態が異なるものとして表現すれば、
without programming で種類を増やせるってことね。
だから clone() は状態もコピーするってところが重要になってくる。
0034デフォルトの名無しさん
NGNG>四分音符クラスをまとめて「音符クラス」にするのって普通の発想だよなぁ…。
というかサブクラスの4分音符クラスとかを「作らない」のがあのパターンの味噌。
でも当然だが4分音符を意味するインスタンスは作れなきゃならない。
そういうインスタンスを、クラス定義レベルじゃなくて、実行時の
インスタンスいじり(属性を設定したり他のインスタンスと組み合わせたり)で
作ってしまって(ここまでならBuilderパターンだな)、
しかもそれをピーコすれば同じ「種類」のものがばんばん作れるぞ、
という話。
「種類」を「クラス」で表現しないとならん義務なんか無いよ、ってことね。
勿論、クラスで表現したほうがスッキリする場合はクラスでやるべきだけど。
-----
蛇足。ちょっとひねった使い方だと、作った二代目instanceに
prototype「元」へのポインタを持たせておいて、
共通する属性とかはそっちに委譲しちゃって
二代目は差分しか持たない、なんて手もある。
ProxyパターンやFlyweightパターンとも通じるものがある。
というか、ここまでやったら「Class」の仕掛けを自分で作っているようなもんだ。
なにせ差分プログラミングなのだから(わら
003529
NGNG>「具象クラスを知らなくても、インスタンス化ラインスタンスが
インスタンスからインスタンスが、
の間違い。
話の流れからして、どうでも良さそうだけど一応直しておきます。
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG思ったりしない?
特に途中で
if (singleton == 0)
singleton = new Singleton();
return singleton;
なんてインスタンスを作る場合は、使わなくなったら消したくなるような
0040デフォルトの名無しさん
NGNGやっぱ、プログラム終了時じゃない?
もしくは、メモリが一時的にでも足りなくなった時
0041>39
NGNG0042デフォルトの名無しさん
NGNG>>40の言う通り、普通はプログラム終了時なんだろうね。
でも、「好きにSingletonオブジェクトを消したい」という要望もあるようで、
「パターンハッチング(ピアソン社)」に一つの答えが載っている。
Singletonオブジェクトを消すためのクラスを作って、Singletonのfriendにするんだそうな。
0043>39
NGNGこれならインスタンスを参照しない限り生成されることも無いし
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クラス名は、デザインパターン日本語版、初版のP116の図のもの。
教授「FactoryMethodパターンを使うとどの部分の再利用性が上がるの?」
私 「CreatorクラスとProductクラスの組です。
Creatorクラスの責務の一部をProductクラスに委譲する構造に
します。
するとConcreteProductで、CreatorクラスとProductクラスの
組の動作をカスタマイズ(なんて言うのが適切なんだろう?)
する事が出来ます。
よって、CreatorクラスとProductクラスの組を
様々なプログラムで使い回すことが出来ます」
教授「それだけ?」
私 「え?」
教授「Clientクラス(図にはないけど、Creatorを使うクラス)と
Creatorクラスの関係に注目してみなよ」
私 「ClientクラスはCreatorで宣言されているインターフェースしか
使わない。
だからConcreteCreatorを差し替えてもClientの変更はしなくて
良い(実際はConcreteCreatorの生成部分を書き換えないといけないけど)。
だからClientの再利用性が上がる。ってことですか?」
教授「うーん。分かってないなぁ…」
私 「??」
と、言うやり取りがあったのですけど、教授の真意が分かる人は
いますか?
かなり長い間悩んでいるのだけど、私には分からない…。
その後いくつか質問した結果、
「Clientの再利用性が上がる、という事を教授は言いたいのでは
ないらしい」
と言うところまでは分かったのですが、行き詰まってます…。
0045デフォルトの名無しさん
NGNG> 「ClientクラスはCreatorで宣言されているインターフェースしか
は「Productで宣言されている…」の方がしっくりくるけど…
そんな言葉尻つかまえて「分かってないなぁ」って訳じゃないよね。
ちゃんと他に再利用性が上がる部分があるんだよね?
うーんなんだろ、帰省の長旅用に丁度良いな、これ。
>>43
くぅ、興味あるのに読めない…smalltalk?
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGPL/SQL
0048デフォルトの名無しさん
NGNG004943>48
NGNGDelphiの場合unit=namespaceだから
finalizationは>41のいうデストラクタにあたると言えるのかも。
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG>は「Productで宣言されている…」の方がしっくりくるけど…
ClientはProductのインターフェイスを直接使用する必要は無いよ。
(元の記述のほうが正しい)
普通はCreatorの固定実装部分がProductのインターフェイスを使うね。
もちろんGoF本の「結果」の2で書かれているように、Productのインスタンスを
Client側に返すようなことがある場合はその限りじゃないけど。
> Clientの再利用性が上がる
これは変でしょ。いやある意味正しいかもしれんけど。ConcreteProductを
差し替えることでClientの変更なしに振る舞いを変えた別のアプリケーションを
作るみたいな文脈ではそういえるし。
明らかに再利用されるのは、Creatorの固定実装部分と思うけどどうよ。
大体Creatorって名前は適切じゃないかもしれんね。anOperation内部に
あるStrategyのような構造こそ重要と思う。
乱文ゴメソ
0052Delphiを知らない名無しさん
NGNG> ClientはProductのインターフェイスを直接使用する必要は無いよ
スマソ。仰るとおりパラレルなの(邦訳GoF本P118)が頭にあったから…。
「Creatorの固定実装部分」ってのはanOperationの実装部を受け持つ
productのことだよね?そうなら漏れも激しく同意。(anがAnじゃ無いのも同意(w
狭義で再利用って言葉使うなら、適用箇所はProductの抽・具部分のみだと思う。
というか広義で再利用って言ったら、なんでも再利用できるからなぁ(w
ただ44教授の意図は分からずじまいか。…直接、訊いて教えてくれ〜
005351
NGNG>「Creatorの固定実装部分」ってのはanOperationの実装部を受け持つ
>productのことだよね?
「実装部を受け持つproduct」ってのはちょっと意図を汲みかねるけど、
漏れの言うのはanOperationの実装そのものが直接的な再利用対象で、
Productの実装は差し替わるわけだから「再利用」とはちょっと違う。
Productは実装無し(interface)であっても構わないことに注目。
なお、こんなことが教授が言いたかった事であるかは疑問なので
(なぜならこのことは「それだけ?」で切り捨てられた主張に含ま
れるとも考えられるから)、漏れ的には教授が解って無い可能性
に+1(藁
デザインパターンって誤解/曲解+宗教的なのが多くなりがちなので。
漏れが解っていない「最も重要な再利用性」があるならそれを知
ることができれば万々歳なので煽っとく(藁
ちなみに「再利用」には実装の再利用とインターフェイスの再利用、
そして構造の再利用があると考えるが、教授はどの「部分」と言っ
てるので「構造」のことじゃないんだろう。じゃ、ここまでにでて
きた事以外に後何があるかねぇ。
005444
NGNGと似た感じの話でいいのでしょうか?
>>51さんの言うようにStrategy的というのと、ほぼ同等の話であるとは思うのですが。
デザインパターン日本語版(P349)の図で言うと、AbstractClassの持つメソッド、
PrimitiveOperation1、PrimitiveOperation2をProductクラスに
持たしてしまいます。
CreatorはTemplateMethod(anOperationに相当)で
Productクラス(の派生クラス)のPrimitiveOperation1、PrimitiveOperation2を
使う、ってつもりで私は理解しています。
>漏れ的には教授が解って無い可能性 に+1(藁
実は、その可能性を私も疑っていたりします(笑)。
他の可能性としては、
1.私が教授の質問の意図を誤解している。
実は、言葉通りの質問ではなくて遠まわしに別のことを言っているのかも。
2.実はFactoryMethod特有のことと、あんまり関係ない質問である。
もっと、シンプルなことを聞いているのかもしれない。
>そして構造の再利用があると考えるが、教授はどの「部分」と言っ
>てるので「構造」のことじゃないんだろう。
教授は気がつくと話が勝手に展開しているので、もしかすると「構造」なのかも
しれません。
けど、私は「教授はクラス単位の再利用について、私に聞いているのだろう」と
思ったのですけどね。
>>52
>ただ44教授の意図は分からずじまいか。…直接、訊いて教えてくれ〜
教授が基本的には、「あっている」「間違っている」としか言わない人なので、
いつになったら教授の意図が掴めるのやら…。
また、進展があったら書きます。
0055デフォルトの名無しさん
NGNGまとめること自体に価値があるだけで, その成果物に価値はなし.
ありがたがってるような奴は, それだけの奴.
0056Delphiを知らない名無しさん
NGNGパラレルじゃ無い場合、Creatorはコンポジションとしてもっているproductインター
フェイスを使ってanOperationを実装する……のじゃないのか…、うーん曲解してるかも
>>54
ウチの教授は質問すると延々と語るタイプだよ。頭のいい人に質問するのは骨だよね
>>55
うはぁ、まさに漏れのことだ。でも自分で設計したのも、大体において主要
デザインパターンのいずれかに収束しない?やっぱなかなかの車輪だと思うけど…
いずれにせよこのスレもう少し賑わって欲しいなぁ。それこそウワベのパターンだけでなく
本質を見抜く手がかりになるし。頭のいい人達でパターン毎に議論してくれないかな。
…私はDOMに戻るので
0057デフォルトの名無しさん
NGNGうっ。耳が痛いです。
でも、逆に「デザインパターンを使う事で、センスの無い人もそれなりの設計が
出来る」なら、私はデザインパターンに意味はあると思います。
「デザインパターンを意識する事で、うまく設計できる人が増えるのか?」って
聞かれると、私はなんとも言えませんけれども。
005851
NGNG>フェイスを使ってanOperationを実装する……のじゃないのか…、うーん曲解してるかも
あってるけど?誤解があるとしたら、56はCreatorのサブクラスでanOperation
をオーバライドすることを前提としているような気がするけど、GoF本定義の
Factory Methodパターンではそうじゃないって事かな。
>>54
教授が「間違っている」としか言わないのだとしたら、44の問い方に自信
がなかったからかもしれないね。
自分がどこまで理解してこのような回答に行き着いたかをきっちり説明
できているなら、その誤りの理由を説明するのが教師の義務と思うし。
こっちがちゃんと説明できている自信があるのに、納得できる説明をし
てくれないようなら、俺ならふーんその程度かぁって判断するなぁ。
>>55
デザインパターンはコミュニケーションの為のものだから、「デザイン
パターンを意識しないと設計できない」のは駄目だが、デザインパターン
を知らない/曲解しているのも困り者。
Factory Methodパターンはその典型なんだけど、今時はGoF自信も
A a = B.create();
なんてのをFactory Methodパターンと呼ぶ事を認めているらしいから…。
0059デフォルトの名無しさん
NGNGってクラスが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デフォルトの名無しさん
NGNGprivate static int instance_count
a(){ instance_count++; }
~a(){ instance_count--; }
ってやってinstance_countが10超えたらコンストラクタ内で例外をthrowする
0061デフォルトの名無しさん
NGNG質問すら満足にできなくてすみません。
>>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お帰りはこちら
http://www.mycgiserver.com/~phpmona/zoids0/ch_list.php4
0063デフォルトの名無しさん
NGNGstaticフィールドや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どっちかというと、コンストラクタはprivateにして、Singleton
のようにgetInstance()で制御する方がなんとなくいいような気がする。
別にいいけど。
0065デフォルトの名無しさん
NGNGλ
( ヽ / ̄ ̄ ̄ ̄ ̄
( ゚Д゚ )< Rubyはクソです。ゴミ箱逝きです。 いじょ
(____) \_____
ヽ(´ー`).ノ
( へ)
く
- = ≡三 λ
_ = ≡三 ( ヽ / ̄ ̄ ̄ ̄ ̄
(´ー`) = ≡三 ( ゚Д゚ )< この発言をコピペしていただければ幸いです。
( ヽ ヽ) - = ≡三 (____) \_____
/ > - = ≡三
0066デフォルトの名無しさん
NGNGそういう風にしたいなら、親クラスで
class Parent
{
public Parent getInstance() {
//instanceNumberを参照して10個以内に抑える
}
public static int MAX_INSTANCE_NUMBER=10;
private int instanceNumber;
private Parent(){}
}
んで、他はこのクラスを継承させる、ってのがいいような気がする。
0067Ruby!
NGNGJava
なにかと話題のオブジェクト指向言語であるJavaとRubyを比較すると:
* Rubyはインタプリタ型言語。
* Rubyではすべてのデータがオブジェクトである。
* Rubyではモジュールを使って実装を共有できる。
* Rubyの変数や式には静的な型がない。
* Rubyでは正規表現が文法としてサポートされている。
http://www.ruby-lang.org/ja/compar.html
Rubyを知ってもらうためにもこの文をコピペしてください。
0068デフォルトの名無しさん
NGNG大嘘だった。継承するには継承もとのコンストラクタがprivateじゃ
まずいか。getInstance()にしたって、親クラスのインスタンス
そのものが返されるのじゃ意味ないし。。。
こりゃ、親クラス作らずにそれぞれのクラスで実装するしか
ないか?
0069たぶん
NGNGもっと詳細に書かない限り最適解は出ないに一票
0070デフォルトの名無しさん
NGNG――――――――――――――――――――――
番組の途中ですが、臨時ニュースです。
「Rubyはクソです。ゴミ箱逝きです。 いじょ 」
この発言をコピペしていただければ幸いです。
___________ __________
‖ \|________
‖ | ON AIR.|
‖  ̄ ̄ ̄ ̄
./ ̄ ̄θ Λ_Λ
.../ //(´∀` )/|
./  ̄/⊂ ||_/
| ̄ ̄ ̄ ̄ ̄| ( ━┳┛
|_____| /ヽ」┘┻
0071デフォルトの名無しさん
NGNG番組の途中ですが、臨時ニュースです。
「Rubyはクソです。ゴミ箱逝きです。 いじょ 」
この発言をコピペしていただければ幸いです。
___________ __________
‖ \|________
‖ | ON AIR.|
‖  ̄ ̄ ̄ ̄
./ ̄ ̄θ ∧_∧
.../ //(´∀` )/|
./  ̄/⊂ ||_/
| ̄ ̄ ̄ ̄ ̄| ( ━┳┛
|_____| /ヽ」┘┻
0072デフォルトの名無しさん
NGNGインスタンスを獲得するようにします。
0073デフォルトの名無しさん
NGNGstaticメソッドを使うのはだめでしょうか?
初期化の順序が重要なときに使えないのは分かりますが、
他にどんなデメリットがありますか?
0074デフォルトの名無しさん
NGNG言いたいことが理解できない(というか、何通りかに解釈できる)ので、サンプル
コードを希望。
C++ に関して言えば static メソッドは virtual 指定できないので、微妙に使いづ
らい。
0075デフォルトの名無しさん
NGNG> らい。
何かが根本的に間違ってる気がするが。
0076デフォルトの名無しさん
NGNG初期化の順序ってどういうこと?(Java屋には無縁?)
007773
NGNG言いたいことが分からないと言われても…
Cならグローバル関数になるような場合でもSingletonにしたほうが
よいのかな?と。
virtualを使いたいときに困るというのは分かりました。
Singletonでvirtualを使うときってどういう場合があるか思いつきませんが。
>>76
>まず、それがインスタンスである必然性があるかどうか、だ。
なるほど。ただSingletonの説明用サンプルってその必然性が
あまり感じられないんですけど。
>初期化の順序ってどういうこと?(Java屋には無縁?)
C++での話です。
class Hogeがあったときに、トップレベルで、
Hoge theHoge;
とかすると、コンストラクタが起動する順序を制御できない
という話だったと思います。
オブジェクト指向に不慣れなもので何か間違っているかもしれません。
0078デフォルトの名無しさん
NGNGA 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=78
NGNGstatic メソッド/グローバル関数と Singleton を対比しているのが謎なんだけど。
- データが絡まない単純な手続きだけなら、普通に関数にしておけば良い。
- データが絡むなら Singleton にすれば? 具体的な方法は >>78 で書いた通り
008076
NGNG初期化の順序なんていくらでも制御できると思ってたけど。GoF本の「実装」節もまさにそのとおりだし。
グローバル変数で実体が作れるならSingletonであることを保証できないんじゃないの?
ま、>>78にある通り後処理の問題もあるから単にGoF本通りの実装にもならないかもしれんけど、
その辺のC++流儀までは知らないや。
>>77
インスタンスである必然性とは、GoF本の「結果」の5に書いてある通り、インスタンス数を1以外に
したい場合と、サブクラス化の可能性がある場合のみ。
そうでなければ全部グローバルな関数(static)として実装してもかまわない。そのへんはもう趣味
の範疇だよ。(というのはJava屋だからいえる。C++では後処理の考慮はいるね)
0081デフォルトの名無しさん
NGNG普通、そういうときは別途初期化関数を用意しないか?
コンストラクタでなんでもやりすぎなだけじゃないかな。
008276
NGNG取り敢えずグローバルな実体オブジェクトは違うかなと。
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が無いと実践が難しくないですか?
008576
NGNGそれをやるなら、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みたいなものでしょうか?
ガイシュツだったらすいません。
008776
NGNGスコープはずれたら自動的にデストラクタ呼ばれるようにする仕組みね。
おれ本読んでないんだけどそんなこと書いてんのか>有機本
008876
NGNGおいらはDelphi知らないけど、interfaceが無いと難しいってのはデザインパターンで行われているような
構造を発案するのが難しいって意味かな?それはあると思う(interfaceという言語の仕組みがあると頭
を整理しやすいという意味)。
でも「実践」が、デザインパターンの適用のことを指しているのだとしたら、それはinterfaceという仕組み
がなくても大した問題じゃない。これはSmalltalkを考えれば解るかと。
多重継承なしでinterfaceも無し、おまけにstrongly typeだったりしたら、さすがに「実践」も難しいだろうね。
0089デフォルトの名無しさん
NGNG> 多重継承なしで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>>スコープはずれたら自動的にデストラクタ呼ばれるようにする仕組みね。
>これをDelで実践するのは出来なくはないらしいですが面倒みたいです。
Delphiでもinterface相手だとスコープ抜けるだけで確実にRelease呼んでくれるから
interfaceにしてReleaseを自分で実装しちまえばいいってかんじ?
>C++のauto_ptrも実装した人は面倒だったのかな。
C++はもともとスタック上オブジェクトはスコープ出るときにdestructor呼ばれるから
スタック外オブジェクトもスタックオブジェクトで包むだけでいいから比較的簡単だね。
0092Delギコ
NGNG∧ ∧ /
( ゚∀゚) < そういう仕組みでしたか。
| つ[|lllll]).\ ニャルホド
〜| |
∪∪
>C++はもともとスタック上オブジェクトはスコープ出るときにdestructor呼ばれるから
そうか。おっしゃるとおりでゴザイマス。
∧ ∧ / Prototypeを勉強しました。
(,,゚Д゚) < CloneメソッドなんてのはDelphiでどやって実装しますでしょう。
|つ つ \ サブクラス側で実装しておく必要があるのでしょうか。
@| | JavaでもCloneをオバライドするのと一緒かな??
∪∪
あと、interface変数にオブジェクトを代入したりも出来ないような
気がするのですが・・・
Prototypeの実装ってDelで出来るものなんでしょうか。
0093デフォルトの名無しさん
NGNGあれぐらいモデリングをしっかりすれば自分で考え出せるだろう。
デザパタの意義は、カタログにしたその取り組みにあるだけ。
0094デフォルトの名無しさん
NGNGその「自分で考え出す」手間を省くためのデザパタだろう。
さらに「自分で考え出したパターンを他人に説明する」手間も省ける。
そのためのデザインパターンだ。
もしかして車輪の再発明大好きな人デスカ?
0095デフォルトの名無しさん
NGNG同僚にでも読まそうとするのかモナ。
0096デフォルトの名無しさん
NGNGと、自分の知らない有名なパターン(非GoF)を挙げられる。
に200オクタット。
0097デフォルトの名無しさん
NGNGコピペしてる人間に言われたくないね。
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNGPLoP 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「プログラミングデザインのためのパターン言語」
はACEフレームワークに使われているパターンが中心やね。
分散処理のパターンとかネットワーク関連の人には
結構参考にはなると思われ。
010199
NGNGそうですね。GoF本のような一般的なデザインパターンはそれほど多くはない
ですね。今本が手元にないのですが、Null ObjectパターンとActive Object
パターンくらいしか思い出せません。
後半には開発プロセスのパターンとかフレームワーク進化のパターンとか、
面白いけどこっちが期待しているのとは異なるものも入ってたりします。
0102デフォルトの名無しさん
NGNGNullObjectパターンもあった。これはすぐにでも使えそう・・・。
http://www.hyuki.com/dp/dpinfo.html
0103_
NGNG具体的なプログラムがのってたりしますか?
買おうか迷ってるので教えてください。
0104デフォルトの名無しさん
NGNGあなたがどうしようもないぐらいプログラマに向いていない場合は、いい本と
感じるでしょう。
0105デフォルトの名無しさん
NGNG私はわかりやすいと思いますよ。
>具体的なプログラムがのってたりしますか?
とりあえず、短い動かせるプログラムが載ってます。
0106デフォルトの名無しさん
NGNGサンプルコードは(本を持ってなくても)著者のホームページから
ダウソロードできるよ。
0107デフォルトの名無しさん
NGNG僕が、OOを知って2,3ヶ月の頃ならすごく分かりやすいだろうなと感じました
ただ、どうしても、GoFに比べ内容が不十分なため、
読む人がどういうレベルであるかで「分かりやすさ」が違うと思います
とはいっても、GoFでさえStrategyやAdapterのような
非パターンに属するものもデザパタとして含まれていたりするので、
どんな本を読む場合でも、考えながら読むようにしたほうが良いと思います
0108デフォルトの名無しさん
NGNGGoFを読んで「こりゃちんぷんかんぷん、歯が立たん」と思ったら結城本。
0109デフォルトの名無しさん
NGNG分かりやすくていいな、その判断法。
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNG1冊につき、どれくらい貰えるのかなぁ
それ以前に、どうやったら著者に選ばれるんだろ?
0113デフォルトの名無しさん
NGNG6%なら48万円。
刷る数、印税率は実力次第。
0114デフォルトの名無しさん
NGNG時給にすれば数百円と思われ。
0115デフォルトの名無しさん
NGNGコンピュータ関係だと、印税は 8% 程度だと思います。(私はそうだった)
あと印税は売れた数ではなくて、刷った数で支払われる。だから初版で 5000 部
出れば、売れ残ってもそれだけ支払われる。また増版がかかれば、その時点で
追加の印税が入る。
> それ以前に、どうやったら著者に選ばれるんだろ?
ほんとに書きたいなら、原稿持ち込めば? 俺は最初は会社経由で仕事がきた
んだが、それで成果を上げたら直に話が振ってきた。まずは企画案を出すのが
スタートで
1 企画案を作って編集者に連絡
2 編集者が出版社の企画会議を通す
3 執筆開始
となる。
あと知り合いでは、出版されていた書籍の山のような間違いにうんざりして、レポー
ト用紙10枚分ぐらいの修正、分かりにくいからこう書き直せという訂正を送りつけた
ら、編集者から
「うちで書いてみません?」
と誘われた人間がいましたね。
いずれにせよ、コンピュータ関連の書籍だけで十分な収入を得るのは難しいです。
ただし、人に合ったときに名刺代わりに著書を渡せるのは、コンサルタント屋さんな
んかには直接的な収入以上の価値があるかもしれません。
0116デフォルトの名無しさん
NGNG自分が本書くのに向いているかどうか、試してみたことあるYO。
雑誌の連載記事を書くという想定で、企画案作って、記事の連載計画作って…、
とやってみたが、記事の本文書き始める前に飽きて挫折。不向きと分かってウマー。
0117デフォルトの名無しさん
NGNGGoFのデザパタにでてくる例、ET+がやたら多いよね。
なぜなのだろう?
0118110
NGNGDesignPatternは、なぜ反することが多いのだろう。同じ人なのに...
最終形態としてPatternを織り成すように構成される。(はいはい。
それはTestCodeを変更しないという前提だ。TestCODEを境界設計に
依存させないようにするってことですか?(無理ですぅー。)
0119でむぱ
NGNG全ての末裔を定め、多重なる混沌を、不正集約された委譲を。
そうして空虚になったNullObjectの刃を入れる。彫刻の様に
R.U.OK?
0121デフォルトの名無しさん
NGNGあと、Smalltalkは、やっておくべきなのかなぁ
0122デフォルトの名無しさん
NGNG>あと、Smalltalkは、やっておくべきなのかなぁ
どうだろう?
でも、C++とはまた毛色が違う言語らしいから、オブジェクト指向プログラミングを
理解するという面では、面白いかもしれないぇねぇ。
0123デフォルトの名無しさん
NGNGといいつつ使ってないけども。
0124デフォルトの名無しさん
NGNG構造的に違いはそれほど無く、
生成するものが複数か、単数かの違いという理解でいいんでしょうか?
0125デフォルトの名無しさん
NGNGOKもらったのはいいが、今書いててめんどくさくて泣きそう。
マズー
0126デフォルトの名無しさん
NGNGMac畑の経験でいえばMacApp(藁
SmallTalkもいいと思うよ、
Objective-C(Smalltalk風C)+Cocoa(openstep?nextstep?)を
つかってみて目から鱗がぼろぼろ落ちたもん>俺
0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNGA.後者。(理由: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デフォルトの名無しさん
NGNG0130デフォルトの名無しさん
NGNGあるクラスが必要とするパーツをそのクラスの中で生成してしまうのが
FactoryMethod。パーツの生成のために別のクラスを立ててしまうのが
AbstractFactory…と理解しているけど。
FactoryMethod から、パーツ生成以外のメソッドを削ると、
AbstractFactory と同じ形になっちゃう。
0131デフォルトの名無しさん
NGNGFactoryMethodは、生成メソッドを
サブクラスで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パターンと組み合わせることが
多くなる。
0132131
NGNG0133124
NGNGAbstractFactoryの方は、C++のSTLで使われてる
アロケータみたいな用法のこと、でいいんですよね?
0134デフォルトの名無しさん
NGNGデザインパターン的にはどれがいいのでしょう。
スレッドでパケットを受けて、そのパケットの処理をして
メッセージを仕分けしてイベントを通知してデータ処理をするって
具合にしたいのですが。
すっきりと整理できたらなと思っています。
0135デフォルトの名無しさん
NGNGそういう場合は、
「スレッドでパケットを受けて、そのパケットの処理をしてメッセージを仕分
けしてイベントを通知してデータ処理パターン」
を使いましょう。
0136長いのはいやづら
NGNG名づけて?
0137デフォルトの名無しさん
NGNG「スレッドでパケットを受けて、そのパケットの処理をしてメッセージを仕分
けしてイベントを通知してデータ処理パターン」
0138長いのはいやづら
NGNG頑固者め
0139デフォルトの名無しさん
NGNGワラタ
0141デフォルトの名無しさん
NGNGSOFTBANKから出てる「プログラムデザインのためのパターン言語」の
2章にそこらへんのパターン載ってるよ。翻訳が難しげだけど。
http://books.softbank.co.jp/bm_detail.asp?sku=4797314397
これ読んだらACE使ってみたくなった。
0142134
NGNG0143デフォルトの名無しさん
NGNG正直いまいちだと思ったさ。
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNGなんかもー、いきなり定義されてない言葉を使ってくるので参ってます。
しばしば出てくる「責任」の明確な定義だけでも教えていただけませんか?
あとガイシュツっぽいけどワラタので…
「ギコ猫とデザインパターン」
http://www.hyuki.com/dp/cat_index.html
0147デフォルトの名無しさん
NGNG一般的な言葉だからわざわざ説明するようなもんでもないと思うけど。
0148デフォルトの名無しさん
NGNGレス有り難うございます。ほんの一例ですが…
「クラスが責任をいくつかのサブクラスの中の1つに委譲するときに、
どのサブクラスに委譲するのかに関する知識を局所化したい場合。」(p116)
「生成の責任」だとは思うのですが…私見ながら、技術書ならきっちり明示して欲しいなぁ、と
原書をお持ちのようですが、ここはthe responsibilityとa responsibilityのいずれなのでしょうか?
0150デフォルトの名無しさん
NGNGおお!ならばこの「責任」はプログラマならば
知っていなければならない様なテクニカルタームではなく、
単に「何かに対する」責任を示しているだけなのですね。
…うーん、それなら簡単にでも修飾語が欲しかった。
レスありがとうございました。何だか、こんな箇所ばかりですが
こういうもんだと割り切って、読み進むことができそうです。
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テクニカルタームでない、とはいえない。OOにおいて責任(責務と訳す場合も
ある)というのは重要なタームだから。
>>151
機能というより「役割」では?
システムのある機能を実現するために果たすべき役割をどのオブジェクトに
割り振るか、ということですね。で、割り振られたオブジェクトはその役割
について責任をもつ、と。
0154デフォルトの名無しさん
NGNGCRCカードの"R"であることにも留意されたし。
0155デフォルトの名無しさん
NGNG0156154
NGNGClass-Responsibility-Collabolation
ttp://c2.com/doc/oopsla89/paper.html#cards
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG{
return 0;
}
NULLプログラムパターン
0159デフォルトの名無しさん
NGNGあのなー。
0160デフォルトの名無しさん
NGNG世間のを全部合わせりゃ1000は逝くだろ。
デザパタヲタ信で良し。
0161デフォルトの名無しさん
NGNGその 300 個をとりあえず書いてみ?
0162デフォルトの名無しさん
NGNG{
char buf[32];
scanf("%s", buf);
printf("%s", buf);
return 0;
}
ノーガードパターン
0163デフォルトの名無しさん
NGNGネタは sage で書け。
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG{
int c;
c = getchar();
if (c >= 'A' && c <= 'Z') {
printf("Large\n");
else (c >= 'a' && c <= 'z') {
printf("Small\n");
}
return 0;
}
キャラクタセット依存パターン
0166デフォルトの名無しさん
NGNG0167Kusakabe Youichi
NGNG> else (c >= 'a' && c <= 'z')
Cではできないですね :)
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNGdeveloper.java.sun.comにJ2EEパターンってあるよ。
Webアプリを5層に分けて考えて中間3層で、いろんなパターンを考えてる。
基本的かどうか知らんけど、なかなか面白かった。
0170157
NGNGデザパタというよりイディオムに近いですね
>>160
GoF以外の「有名な」パターンに質問を少し変えます
開発時にパターンネームを共有することも目的の1つなので
>>158
ネタに埋もれようとしているが、考えてみると含蓄深いパターンかもしれない…
0171デフォルトの名無しさん
NGNGNull パターンというのは、実際にあるよ。
0173デフォルトの名無しさん
NGNGhttp://www.hyuki.com/dp/dpfaq.html
0174デフォルトの名無しさん
NGNG0175command
NGNGできれば簡単な例とともに。
ジャヴァでも、シープラスプラスでも、
オブジェクトパスカルでも良いです。
0176デフォルトの名無しさん
NGNGgoogle 逝きましょう。いくらでもサンプルあるぞ。
0177age
NGNG0178デフォルトの名無しさん
NGNG瞬間に盲目的にありがたがるくせに、今までそれと同じような事を
やっていたのにそれは糞味噌言うアホがいますが、こういうやつ
はどのように扱うべきでしょうか?
創造的作業が嫌いならPGなんかやらなきゃいいのに、と思っている
のですが…
0179デフォルトの名無しさん
NGNG例挙げて、冷静にメリット/デメリットを討論できないのが問題。
0180デフォルトの名無しさん
NGNG日本語がおかしいYO!!
えー、権威に弱いタイプは、詐欺に引っかかりやすい
傾向があります。壺でも売りつけるのが良いでしょう。
…いや真面目な話、その気持ち良く分かります。で、これ↓
会社のPCをたたき壊した後、同僚を机上に押し倒す
↓
「パターンは方法じゃ無い!あくまで伝達の手段だ!」と、言い放つ
↓
机の上、同僚の顔すれすれに、マウス突き刺す
↓
「行くあてはありません」と、何故かベレー帽をかぶった上司に言う
↓
(゚д゚)ウマー
0181デフォルトの名無しさん
NGNGランボーかよ、オレも見てた(w
ま、確かにパターンの意味をはき違えてるわな >同僚
0182デフォルトの名無しさん
NGNGマウス突き刺す…どんなマウスだよ!w
そういや、多機能マウスってあってもいいよな
定規・温度計・ドライバ付きみたいな
0183デフォルトの名無しさん
NGNGリモコン付きマウスなら欲しい気がするが・・・・・・
0184デフォルトの名無しさん
NGNGうちダイヤル回線だからつかえねぇ・・・。
0185C屋
NGNGGoF本が本棚の奥の奥に眠っている漏れには
ありがたい本です。
激しくガイシュツですが、結城さんのギコ猫頁には
ワラタ。漏れはクリスチャンではありませんが、その
他の頁もよい感じですね。
ただ、今使っているのがCなので、実践で活用
するにはいろいろ障壁がありそうです。構造体
+関数へのポインタでクラスを実装している程
度のところに持ち込むのは難しいのかなぁ?
どなたかやられた方はいらっしゃいますか?
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNGhttp://www.sage-p.com/process/cool.htm
こんなのはあるけどCでOOPはあんまりお勧めしないな。
N88BASICで構造化プログラミングするのと同じくらい空しいよ。
俺も今はCのプロジェクトやってるけどあえて無理にOOではやらない。
Cでself->set_value(self, 10)なんて珍妙なコードは書きたくない。
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGそうらしいけど MS は否定してなかった?
“COOL は C++ のライブラリだ!”っていうのが MS の主張していた事だったと
思う。結局 C# になったんだと思うんだけど。
とすると WFC For C++ ≒ COOL かな?
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNGで、みんなに聞きたいんだけど、いわゆるデータベースのフロントエンド
となるアプリを作るときに使えるパターンってないもんかね?
MVCとかBCEを使って(これ、アーキテクチャパターンか)M→Vのところに
Observerとか、データベースとのコネクションをSingletonとか、追加、訂正、
読取専用とかの状態を示すのにStateとか考えたんだけどどうよ?
0193JPLoPとは無関係な名無し
NGNG良い考えだと思います。ただし良くまとめ親しみやすい命名をすると
Persister(Entity?)とかTransactionContextとかあるようです。
また、QueryIteratorは良く使いますが、ほとんど正規化できない
RDBの表定義にSQLUtilityはいい考えだと思いません。
TransactionContextはSingletonとかFlyweightとかに似ていますが
目的が違いますね。PoolingはFlyweightですが。
ちなみにデザインパターンはトランザクションとかスレッドとかが絡むと
今までのGoFのパターンとは違う扱いになる場合が多いいような気がするの
は気のせいでしょうか?>お前等べ
0194デフォルトの名無しさん
NGNG>追加、訂正、 読取専用とかの状態を示すのにState
ってもうちょっと具体的に教えて。
0195デフォルトの名無しさん
NGNGを絞め殺したい。システムの規模が小さくて、SQLのスタイルをかなり
限定して規則化出来るような時にしか、意味がない。
副問い合わせとか、複雑な条件節設定とか、ベンダ毎のSQL仕様の差異
とか、テーブル側の激しい仕様変更(藁とか、結局吸収できないっしょ?
つうか、そんな簡単にどうにかなるんだったら、今までインピーダンス
ミスマッチで苦労していた技術者がみんなアフォだということになるな。
SQL一本を、SQL本体とバインドパラメータでパラメータ化して、
Persister(用語と概念との対応がよくワカランが…多分これでしょ)
のインスタンス一個を割り当てるというほうが、すっきりする気がする。
0196デフォルトの名無しさんk
NGNG0197デフォルトの名無しさん
NGNG追加、訂正、読み取り専用とかの状態によって、初期化とかエラーチェック
とか変わるでしょ? そのときに、State で隠してあげるといいのかな? と。
エラーチェックとかのビジネスロジックを、Strategyにしたほうがいいのか
悩み中。
0198デフォルトの名無しさん
NGNGそういえば、StateとStrategyの違いってよくわからん。
0199デフォルトの名無しさん
NGNGおもに内部の情報をもとに振る舞いを決めるのがState。
おもに外部からの情報をもとに振る舞いを決めるのがStrategy。
「おもに」というのが曲者で、Stateパターンでは、
外部からのイベントと内部の現在の状態、あるいはそのオブジェクトが
置かれている状況のある状態をもとに次の状態が決まる。
で、次の状態になるとき、あるいはなった直後
に振る舞いに相当するアクションが実行される。
そういう意味で「おもに内部の情報をもとに…」と表現した。
Strategyパターンでは、Strategyオブジェクトが置かれる状況
(GoFではContextといっている)によって、どのような振る舞いを
するかを決める。この場合はStateパターンがコンテキストの内部
状態の違いを見ているのに対して、Strategyパターンではコンテキスト
そのものの違いを見ている。だから「おもに外部…」。
というのはどうだ?
ちょっとこじつけっぽいかもしれんが。
0200199
NGNGエラーというのは状態なんではないだろうか。
だからStateパターンだと思う。
ビジネスロジックそのもの、もしくはその一部が
切り替わるのに応じて振る舞いが違ってくるような
ところではStrategyパターンということになると思う。
0201デフォルトの名無しさん
NGNG読み始めようとしているんですが、読み進めていくうえでのポイントとか
ってありますか?>読んだひと
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「型(TYPE)はインターフェイスを表現するのに使われる・・・」
ってあるんだけど、ここで言ってる型ってのが意味不明なんだが、クラスのタイプって
ことなのかな?????
0204デフォルトの名無しさん
NGNGその文脈だと TYPE は C++ なら class, struct のことだと思われ。
インターフェースは、そのメソッドが受理できるメッセージの集合を規定する
わけだが、C++ ではそのために
1. 純粋仮想関数から構成される struct, class を作る。
2. 実装クラスに 1 で作った struct, class を継承させ、実装を与える。
という手段をとるよね。Java だと interface/implements だし、そもそも型
チェックがない言語だと、この手間は不要なわけだが。
0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNG他の状態に遷移する方法を持っているところにあると思ってるけど、ちがう?
0207デフォルトの名無しさん
NGNGクラス図は似ているが用途・発想はぜんぜん違う
0208デフォルトの名無しさん
NGNGデザインパターンなのでは?
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNGどう違うのか言え
0211デフォルトの名無しさん
NGNGどう似ているのか言え
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNG現場だと実際判別つかんぞ!!
0215sage
NGNGまた、問題点を自ら発見する事もできなくなる。
0216デフォルトの名無しさん
NGNGState...変わっていくことが前提。
うーん大雑把すぎるなあ。
ロジックを変更するのがStrategy。
状態の変化をロジックに内包してるのがState。
こんな感じではどう?
0217デフォルトの名無しさん
NGNGStrategy 戦略
State 状態
0218デフォルトの名無しさん
NGNGStrategy State以外の多態を使って実行時にコードを差し替えたいもの
>クラス図は似ているが用途・発想はぜんぜん違う
同意。
>現場だと実際判別つかんぞ!!
それだと「デザパタ使うと話が早い」という
メリットがなくなってしまいますが?
0219デフォルトの名無しさん
NGNG「リファクタリング」P227 動機 を見るとしっかり使いわけてるようですね。
Strategy 単一のアルゴリズムを単純化しようとしている場合。
State 状態に特有なデータを移動しようとしており、オブジェクトの状態が変わるものと考えられる場合。
0220デフォルトの名無しさん
NGNG0221|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結城さんですか(藁
0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNGElementと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デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNGclass 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スマソ、Visitor側ではCnElement個別のメソッドを呼び出すことがあるので
わざわざ分けてるのでした。書き忘れw
呼び出すのがHoge()共通ならそれで良いね。
とりあえず力技で解決しときます。ありがとう。
0237デフォルトの名無しさん
NGNGそこを共通化してしまうと、あとで困るような・・・。
たとえ面倒でも、いまのままでいいと思うよ。
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNGヘタに使わない方がいいかも。
0240デフォルトの名無しさん
NGNG実践を伴わないアンキは、うざい厨房の第一歩。
「俺はできる!オブジェクト指向もわかってるぜ!」という
新入社員は大抵このパターン。氏ねおまえら。
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG実践との賜っている連中が、体力勝負の非効率な作業に何の疑問も
懐いてない馬鹿ばかりだから。
0243242
NGNG気になっているアホには、偉そうな事をいわれたくない。
0244デフォルトの名無しさん
NGNGどっちが高度か、なんて(以下略)
0245デフォルトの名無しさん
NGNGカッコいい名前のデザパタがあったら教えてくだちい。
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG確かフランス語だったっけ
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNG初期設計よりもリファクタリングで使った方がよいかな。
そんときに Observer や Command、State/Strategy Templete Method はあったりまえのように使う。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGそういや GOF本に書いてあったが、解説用の言語にC++やSmalTalk使わんかったら
カプセル化や継承・ポリモーフィズムもパターンに入れるつもりだったといってたな。
0253デフォルトの名無しさん
NGNGあさのまさひこ叩きは模型板で。
0254デフォルトの名無しさん
NGNGという質問を見たことがある。何ですなおに再帰使わないのかおれにはわからなかったよ。
0255デフォルトの名無しさん
NGNG???再帰構造のクラス関連とかの話じゃなくて???
0256デフォルトの名無しさん
NGNGもしも適用するとスッキリする形なら、Compositeパターンを適用。
再帰1レベルをツリーノード1個に対応させる。
…単純な再帰なら単なる無駄かも知れんけど。
0257デフォルトの名無しさん
NGNGセンチネルもデザインパターン?
0258デフォルトの名無しさん
NGNG単純な再帰ならパターンでなくてアルゴリズムの話になんだろ。
しかし、クイックソート内の比較を様々なデータ・・・
単純型からレコード、さらにはクラスのメンバでできるようにしたいというなら
話は全く変わってくるが。。。
0259デフォルトの名無しさん
NGNGいやデザインのつかないパターンでしょう。
日本語で言うと「定跡」ってか。
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNGの次は何を読めばいいのですか?
0262デフォルトの名無しさん
NGNGデザパタの本を読むより普通にプログラミングの経験値を積んだ方がいいと思うよ。
無理矢理にデザパタを使おうとしないほうがいい。気がつかないうちに
いつの間にかデザパタを使っていた、というのが理想的なのかもしれない。
でも本を読みたいならC++プログラマならGoF本が王道。
JavaプログラマならEffective Java(値段の割りに薄いが間違いなく良書)に
デザパタが登場するので選択肢としてはありかもしれない。
この本は初心者向けじゃないけど。
0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNG違う。
ソフトウェアの典型的構造に名前を付けたもの。
0265デフォルトの名無しさん
NGNG俺は試験以外見たことないのですが
0266デフォルトの名無しさん
NGNGすでに >>262 でレスついてるが、後は「パターンハッチング」もお勧め。
パターンをどう実際の現場での設計に導入するか?その基本的な考え方(?)というかポイント(?)というかを、
GOFの一人がうまく解説している。薄いし安いがこれも間違いなく良書。
0267デフォルトの名無しさん
NGNGもひとつは 「リファクタリング」。 これでしょ、やっぱ。。。
「デザインパターンはリファクタリングの目標を提供する」
0268デフォルトの名無しさん
NGNGフローチャートみたいな図は書くけど、
情報処理技術者試験で出るような
プログラムをそのまま引き写すようなのは無駄なので使わない。
0269デフォルトの名無しさん
NGNGはげどう。
「リファクタリング」をよんだとき、
デザインパターン、ユニットテスト(XP)、リファクタリング
がおれのなかで激しく結合して世界が変わる音が聞こえました。
0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNG明日にも買ってきたいのですが、この本で合ってますか?
パターンハッチング
http://www.pearsoned.co.jp/washo/prog/wa_pro18-j.html
リファクタリング
http://www.ogis-ri.co.jp/otc/hiroba/ogisbooks/Refactoring.html
GW、これ読んで潰れそうな予感…。
0274デフォルトの名無しさん
NGNG0275デフォルトの名無しさん
NGNGでしょうでしょう!!
0276デフォルトの名無しさん
NGNGGOFや結城さんの本だけだとデザパタホントに使いモンになるんかて疑問だらけだったけど
これ読んで漏れも世界が全く変わりました。
いまじゃファウラ-まんせー!!
0277デフォルトの名無しさん
NGNG「パターンハッチング」は買って損した
0278デフォルトの名無しさん
NGNG「アナリシス・パターン」もつまらんかった。
0279デフォルトの名無しさん
NGNGそうか??第二章のファイルI/Oクラスの設計における Composite や Proxy、Visitorの効果的な
使用例を通して、デザパタの運用法がより立体的につかめると思うが?
0281デフォルトの名無しさん
NGNGリファクタリングだけで取り敢えずはいいでしょ。
パターンハッチングの方は、ある程度パターンわかった時点で読んで
初めて「なるほど!」て唸らせられるもんだし。。。
0282デフォルトの名無しさん
NGNG漏れも試しに読んでミターヨ。
しばらくじーと読んでたら・・・・・・・・・・・・
キタ━(°∀°)━( °∀)━( °)━( )━(´ )━(∀´ )━( `.∀´)━!!!!!
これ、イイ!!イイ!! 頭の中でモリモリとアイディアが回り始めてキターヨ!!
0283デフォルトの名無しさん
NGNG0284デフォルトの名無しさん
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だったらたぶんFactoryMethodの節にあるParameterized Factory Methodがぴっ
たりだろう。
フレームワークが呼び出すのは
Creator::Create(ProductID id)
だろう。
実装は言語によっていろいろ。
C++やJavaなら、識別子からFactoryオブジェクトへの表を引くとか。
0286デフォルトの名無しさん
NGNG>「フレームワークはその識別子をパラメータとして 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かぶさって少々混乱気味(爆
0288Delphi使い
NGNG烈しくお勧め!!
「実装しながら設計する」という概念が、ある意味革新的。
0289デフォルトの名無しさん
NGNG「フレームワーク」という言葉の使い方がカナーリ混乱してるみたいだが
どうよ?
フレームワークって実装するときにオーバーライドしたりいじったりは
しないもんだと思うが。(実装に依存しないところだけくくり出したもので
あるはず。)
0290284
NGNG>>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;
}
};
0291286
NGNG0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNG逆に「リファクタリング」の日本語訳はこなれてるから読みやすいよね。
#最近リファクタリング厨になりつつある(w
0294デフォルトの名無しさん
NGNG有限個のインスタンスを生成する場合に適用するパターンってありますか?
たとえば、コマンドキューにコマンドを流し込んで、
それを受理する実体が複数個(可変)ある場合など。
0295デフォルトの名無しさん
NGNGそれも Singleton だと思うが。。。
記憶違いかも試練が単数もしくは有限個にインスタンスの生成を限定するパターンが Singleton だと。
0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNG時間のかかる処理をスレッドで走らせて、
ユーザーが設定により走らせるスレッド数を決定できるんだけど、
現実的に2,3個同時に走らせる位が限界なので、
限界といえば一応あります。
0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNGそのものずばり、というパターンはないけどMediatorパターンでコマンドと
スレッドの仲介をやってやるのがいいかな、とは思う。
並行動作するオブジェクトの協調パターンは「プログラムデザインのための
パターン言語」にいくつか載ってるので参考になるかも。
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG激しく同意。
漏れの精進が足りないだけかもしれん、
日を改めてもう一度読んでみよう。
0302デフォルトの名無しさん
NGNG目からうろこが落ちたーよ。
リファクタリングしている間は一切機能の追加はしてはいけないって言うの。
言われてみればそのせいで収拾がつかなくなったプロジェクトがイパーイ。
0303デフォルトの名無しさん
NGNGyuki本読んだけど意味わからず。
0304デフォルトの名無しさん
NGNGハッチングは,訳が下手なので×.原書をあたったほうが良い.
この本の監訳者の本は訳の具合を品定めして原書を買うかどうか
を判断した方が吉.
0305デフォルトの名無しさん
NGNG同じところで悩んだよ。サンプル見ても単一の走査パターンなので、
まったく存在意義が感じられなかったよ。走査パターンを増やしてみて
はじめて存在意義が感じられたよ。
0306デフォルトの名無しさん
NGNGC++のSTLのコンテナクラスなんかだと、データ構造が違っても
同じ方法でアクセスできるね。
0307デフォルトの名無しさん
NGNG一つの集約オブジェクトに対していっぱい走査位置を持てる
0308デフォルトの名無しさん
NGNG実装がツリーだろうがハッシュ表だろうが
線形リストだろうが配列だろうが
同じ方法でスキャンできる。
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*);
このようにせざるを得なくなります。
どっちの方がスマートな設計と言えるのでしょうか?
個人的には前者かな、と思っているのですが。
0310309
NGNGツールキットや部品を提供するフレームワークは決定されている前提で、
その状態からのConcreteProductを生成する解説しかなく、
フレームワークから選択自由な状態での解決手法がよく分からないんです。
0311デフォルトの名無しさん
NGNG{
public: static Driver* create();
};
class ObjectFactory
{
public:
Texture* createTexture();
Mesh* createMesh();
}
class Driver
{
public: ObjectFactory* createObjectFactory();
};
こう。
031281
NGNGあいまいでなんとでも解釈できる。
そして事件が起こった後で「これは予言されていた」とか言うの。
0313デフォルトの名無しさん
NGNGがんがれよ、応援してるよ。
0314デフォルトの名無しさん
NGNG「Bitter Java」の味
アンチパターンによってプログラミングはどのように改善されるか
面白かったのでage
0315デフォルトの名無しさん
NGNGいい人を抱えてるよ。MSDNの記事より資料価値も高い
0316デフォルトの名無しさん
NGNGあと、アンチパターンはデザインパターンほど役に立つとはどうしても思えない。
デザインパターンはコードの形で明確に定義されて、誰でも学ぶことのできる技
術だけど、開発プロセスにおけるアンチパターンはなんだか曖昧で、単に「あり
そうな話」を羅列しただけの気がする。たしかにもっともらしいけど、具体的に
は役に立たない精神論というか。
「人に迷惑をかけないように気をつけましょう」「常に積極的に学ぶ姿勢を大切
にしましょう」とかの標語と同レベルに思える。
記事にあったバグパターンまで細分化すると、これはずいぶん明確ではあるけれ
ど、「パターン」と名をつけるまでもなくありがちなバグ類型の収集はそれこそ
何十年も前から行われていたわけで、パターン化したこと自体に価値があるデザ
インパターンとは大きく異なる。
だいいち、こういうバグパターンを挙げていったらそれこそ何千にもなるに違い
ないが、それを暗記して避ける努力をすることに価値があるかというと甚だ疑問
だ。
0317デフォルトの名無しさん
NGNGあんたみたいな人がありがちな罠に陥らないようにするためのアンチパターンだろ。
0319デフォルトの名無しさん
NGNG成功例をパターン化したものがデザインパターンで、
失敗例をパターン化したものがアンチパターン?
0320デフォルトの名無しさん
NGNGあなたのケースを「「「アンチパターンは具体例として有効である」症候群」アンチパターン」として、私のアンチパターンに登録しますた。
0321デフォルトの名無しさん
NGNGアンチパターンは役に立たないというアンチパターンか。
パラドックスだね。
0322320
NGNG第四章「アンチパターン使用上の注意」だけでも、読んでみれ。
8ページしかないから、立ち読みでも頭に入るよ。
したら、アンチパターンっていうのは、役に立つ、しかも抽象的な事だってわかるよ。
それから、アンチパターン本は網羅するのが目的じゃない、ってことも。
それから、プログラミングで「抽象」といったら、abstractで、
「事物や表象を、ある性質・共通性・本質に着目し、それを抽(ひ)き出して把握すること。」
の意味で使うこと、わかっといてね。
0323322
NGNG0324デフォルトの名無しさん
NGNGFactory Method パターンの Factory class の
create メソッドがどうして (String owner)
なんていう argument を取るか小一時間考えても
わからない漏れはダメかもわからんね(;´Д`)
0325デフォルトの名無しさん
NGNG『全社的おんぼろ煙突システム』パターンなら結構みかけるぞ。
某社では、部署ごとに使ってるシステムやソフトが全く違うので、部署間のデータのやり取りは殆どアナログ。
デジタルデータもネットワーク組んでるにも関わらず、フロッピーでやり取りしてる!(大藁)
0326デフォルトの名無しさん
NGNGカードの持ち主(=owner)でしょ。
なにが引っかかるの?
0327デフォルトの名無しさん
NGNGもしかして実装ベースで考えすぎて、抽象的に考えられないのかも知れんね。
0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG「デザインパターンFAQ」有名だとは思うけど念のため
一番面白いと思ったのはこれ↓
>結局のところ、うちのおばあちゃんに聞けば教えてくれるような
>アドバイスになるだけなのに、手間ひまかけてパターンを書くのは
>どうしてですか?
>
>パターンの中には、あなたのおばあちゃんですら知っているくらい
>とても良くて役に立つものがあるからです。
>パターンを書くことによって、そのアドバイスのコンテキスト、
>価値(value)、そしてその意味(implications)が
>おばあちゃんのアドバイスよりも明確になるのです。
0330デフォルトの名無しさん
NGNGBuilderパターンはそれ自身で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デフォルトの名無しさん
NGNGttp://www.dmz.hitachi-sk.co.jp/Java/Tech/pattern/gof/builder.html
です。
ローカルに保存したままの形式だった物で。
0332デフォルトの名無しさん
NGNGDirector = Builderを使用して一つのオブジェクトを作り上げる者
それぞれ分けて抽象化することで再利用性を高めてるんだと思われる。
ただ、Builderに限った話じゃないがデザパタはかなり丁寧に
汎用化されているので状況に応じてステップを省略したり
融合したりするのはよくある事だと感じてる。
というか完全に当てはまるパターンはそんなには出てこない。
が、変形してでも役に立つならそれでいいと思ってる。
0333デフォルトの名無しさん
NGNG(結城浩著)が6/26に発売されるとのこと。
目次がウェブに公開されてるので買うかどうかの判断材料になるだろな。
http://www.hyuki.com/dp/dp2.html
0334逝って良しの1
NGNG多分動的に呼び出したいんじゃない?
メソッドで分けると静的なのしか書けないし、数値ーラベルは割り当てやら
名前やらで2段階必要になるので面倒。
0335デフォルトの名無しさん
NGNGSingleton パターンも Prototype パターンも
意味が無いと言うかパターンとして成り立たないのだが、
GoFの再利用のためのデザパタはクラスベースが前提なのだろうか?
0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNGgoogle 逝け
0338デフォルトの名無しさん
NGNGとりあえず>>329のリンク先のデザパタFAQを嫁
0339デフォルトの名無しさん
NGNGそれはGoFも触れてたと思ったけど。
言語によっては特定のパターンはそもそも不要な場合もある、みたいな感じで。
0340デフォルトの名無しさん
NGNGhttp://www2.gihyo.co.jp/books/bookinfo.asp?ID=4-7741-1490-1
0341デフォルトの名無しさん
NGNG「Java開発者のためのアンチデザインパターン 〜失敗を回避する秘訣」
(安藤 利和 著)は本屋で読んだがはっきりいってクソ。
デザパタの悪い面として、
・デザパタを知らない人にデザパタの言葉でしゃべっても通じない云々
などと書いてある。わざわざイラスト入りでだ。そりゃあ通じないだろう。
でもな、そんなのデザパタに限った話じゃないだろ。もうアフォかと(略
あと、何ページも渡って
・コーディングをする時にコピペを使うと良くない云々
とも書いてある。そりゃその通りだけどさ、だからなんだってんだ?
今さら金払って読みたいようなことではない。
普通にGoF本か、Java使いのデザパタ初心者なら結城本あたりを
買うべきだろう。頭を悪くしたい人にはこの本をお勧めするが。
0342デフォルトの名無しさん
NGNG当たり前のことが書いてある本って入門者にはとても良いと思われ。
その狭い視野もデザインパターンのおかげかい?
0343デフォルトの名無しさん
NGNG> その狭い視野もデザインパターンのおかげかい?
実は結城タンのレスだったりしてね(藁
0344デフォルトの名無しさん
NGNGage
0345デフォルトの名無しさん
NGNG結城タンの本も、確かに判りやすい事は判りやすいのだが、イマイチ実戦でどう使いこなすのかが
見えてこないのよね。『デザインパターン』を勉強するための本であって、実戦向きではないと思我。
その点 http://www2.gihyo.co.jp/books/bookinfo.asp?ID=4-7741-1490-1 はじっくり読んでくと
「おいお前ら!この手は使えるじゃねーか!ゴルァ!!」てのが学べて結構(・∀・)イイ!
0346デフォルトの名無しさん
NGNGそれならいいんだ。ただデザインパターンがすべてで工夫しないアフォに困ってるんだ。
0347デフォルトの名無しさん
NGNGお金が無い。
↓くれ
0348デフォルトの名無しさん
NGNG0349デフォルトの名無しさん
NGNG「アンチデザ・・」にも書いてあったね。確か「デザパタ症候群」って。(・∀・)
0350347
NGNGかーやってみてぇなぁ
0351デフォルトの名無しさん
NGNGアンチデザって何?アンチパターンのこと?
0352デフォルトの名無しさん
NGNGって言うか死ぬほど考えてクラス設計してたらデザインパターンの一つに行き着くみたいな。
じゃあ、初めから知ってた方が速いと。
0353デフォルトの名無しさん
NGNG>>340
0354デフォルトの名無しさん
NGNGサンクス
面白そうな本だね。
買ってくるよ
0355デフォルトの名無しさん
NGNGその過程を大事にしなよ。。
0356デフォルトの名無しさん
NGNGいや、わかってる。
その課程でデザパタを知ってた方が良いなと思った。
自分が思いつきもしない問題点があるかも知れないし。
それに固執する気はさらさら無いけどね。
0357デフォルトの名無しさん
NGNGいいのない?
0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNGデザパタを有効に使う場面は、リファクタリングしてる時が一番いいね。(・∀・)
0360デフォルトの名無しさん
NGNGなんつうか当たり前
そんな議論しても無駄
0361デフォルトの名無しさん
NGNGVB.NETでデザパタ
0362デフォルトの名無しさん
NGNG七時〜朝もデザパタ イテレェタ〜♪
八時〜みんなお出かけ早くも シングルト〜ン♪
替え歌しようにも原曲と歌詞が思い出せない…誰か後を頼む……ぐふっ!
0363デフォルトの名無しさん
NGNG0364デフォルトの名無しさん
NGNG0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNGhttp://www.tomozo.ne.jp/yamazaki/download/doc_design_pattern.htm
>パターンの解釈の仕方が間違っているかもしれません
と本人も言っているようなのでここに晒す。
あってる?>有識者ら
0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNG本人なら正直にそう名乗れよ
別にダレも叩きはしないから
0371デフォルトの名無しさん
NGNGとりあえず、1 ページに全部書くのはいかがなものか。
0372デフォルトの名無しさん
NGNG一度に全部は無理なので、役に立ちそうなものから順々に
やっていきたいと思ってます。
どこいらへんから手を付ければいいでしょうか?
0373デフォルトの名無しさん
NGNG0374デフォルトの名無しさん
NGNGプログラム初心者ならプログラムの勉強から手をつける
プログラム初心者でなければ、デザパタにあてはまるコードを
すでに知らないうちに書いている
0375デフォルトの名無しさん
NGNG俺はまだプログラム初心者ですか?
0376372
NGNGそれはなんとなくわかるんですが、一応知識として
整理しておこうと思っていまして。
なんか、重要な4つとかいうのがあるとかという話を
きいたこともあるんですが。
0377デフォルトの名無しさん
NGNG多分あの順序が一番わかりやすかろうて。
0378デフォルトの名無しさん
NGNG体系的(というほどのものでもないが)な知識を身に付けるのに
つまみぐいという根性が気に食わん(藁
端からガリガリ読んでけよ。
もし飽きっぽいなら全体を一読して馴染み深い
(=自力で開発済みの)パターンから攻略してけば
気分的には楽かもね。
どうしても有用有名にこだわるんなら
googleのヒット件数の多いものからやっとけ。
0379デフォルトの名無しさん
NGNGわしだけですか?
0380デフォルトの名無しさん
NGNG0381デフォルトの名無しさん
NGNG0382デフォルトの名無しさん
NGNGおや、結城さんとこのギコ、新作がでてるね。禿ガイ?
0383逝って良しの1
NGNG0384デフォルトの名無しさん
NGNGちょっと違う?
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNG0387デフォルトの名無しさん
NGNG0388逝って良しの1
NGNG0389デフォルトの名無しさん
NGNG「どの言語にしたら」系スレ
0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNGいろんな人間が来るから仕方ないだろ。ただ、
厨が目立つだけだよ、恥ずかしげもなく書き込むから。
…まぁ俺も人のこと言えないけど
0397390
NGNGでもそういう意味で逝ったんじゃないんです。
0398デフォルトの名無しさん
NGNG同じくヽ( ´Д`)ノ
フランス語が語源なのね・・・それなら仕方あるめぇ、てやんでえぇ、ばろめ。
0399デフォルトの名無しさん
NGNG∧,,∧ ∬ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ,,゚Д゚ノ,っ━~ < フサーど。
_と~,,, ~,,,ノ_. ∀ \_________
.ミ,,,/~), .| ┷┳━
 ̄ ̄ ̄ .し'J ̄ ̄|... ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ .┻
0400デフォルトの名無しさん
NGNG0401デフォルトの名無しさん
NGNGおい、おまいら
___ 00 /
|__ __ ____ /
| __| | ____ /|
|__ __| / |
を流行らすのじゃ!
参考スレッド 森恒二ホーリーランド拳闘暗黒伝セスタス技来静也4
http://comic.2ch.net/test/read.cgi/comic/1025843878/551-591
0402デフォルトの名無しさん
NGNGhyoderi pattern ですか?
0403デフォルトの名無しさん
NGNGある程度大きいソースを見たいのですが。
0405デフォルトの名無しさん
NGNGJava 製なら大体はデザインパターン使ってる。
適当に探してみ。
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNG↓のソース(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 で移行
};
0408403
NGNGウオーサンクスコ
さがしてみます
0409デフォルトの名無しさん
NGNG「デザインパターンは戦場では必要なし」
となりました。よろしこ。
0410デフォルトの名無しさん
NGNG0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNGこれはObserverパターンの別名って事でいいのかな。
0414デフォルトの名無しさん
NGNGProducerは適当に生産しつづけるんだけど、
在庫がいっぱいなったら倉庫に空きができるまで待つ。
Consumerも気まぐれに消費するんだけど、
在庫がなくなったら、入荷するまで待つ。
そんなんじゃない?同期しないのがポイントとか
0415デフォルトの名無しさん
NGNGデザパタより、マルチスレッドプログラムのモデルで使われる単語だと思うが。
0416デフォルトの名無しさん
NGNG0418413
NGNGところが、質問を間違えてしまいました。非常に申し訳ない。
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それを読む限り、後者の「Publisher/Subscriber」は分類名であって、
パターン名ではないよな。なぜ言葉の使い方の違いと気がつかないのか君は
0420デフォルトの名無しさん
NGNGGET DELETE POST PUT 等のリクエストを処理するクラスを書こうと思っています。
そこでお伺いしたいのですが、どのパターンを参考にすれば良いでしょうか。
アドバイスください。
0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
NGNGその
パターンいくつかくっつければプログラムかんせーい!
と言うのが一番怖いと。
その人のデザインによってどのデザインパターン使うかって変わってくる気がした。
0423デフォルトの名無しさん
NGNG的確な回答ありがとうございます。非常に参考になりました。
>>422
勝手にデザパタ房扱いしないでくれ。
それに後半の意見には賛同しかねる。
パターンとは目的に応じた定石なのだから。
…と質問した分際で言い放ってみるテスト。
0424デフォルトの名無しさん
NGNGその目的(簡易HTTPサーバを作りたい♪は大きな目的ではあるがココデハそれを指してはいない)がはっきりしてないのにデザインパターン?笑止千万。
と、火蓋を切ってみる。
0425名無しさん@XEmacs
NGNG> はっきりしてないのにデザインパターン?笑止千万。
もとの質問では 「リクエストを処理するクラスを書こうと思っています」
ってあるからある程度ははっきりしてるのでは?
ある程度やることが決まってるんなら、適用できそうなデザインパターンを
列挙して、イメージしてくのが普通では?
0426デフォルトの名無しさん
NGNG0427426
NGNG0428デフォルトの名無しさん
NGNGSingleton, Flyweight, Composit, Observerは
考えなくてもやるから置いといて、他に普通使うのあるか?
0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNGAdapter,Bridge、Proxy、TemplateMethod、State、
Strategy、Chain of Responsibility、Mediator、Facade
もそいや使ってるよ普通に
0431デフォルトの名無しさん
NGNG昔のような目から鱗ソースをみる感激がほしい。
0432デフォルトの名無しさん
NGNGエラく汚い気がするんだがどうよ。
0433デフォルトの名無しさん
NGNG使うのか・・・
0434名無しさん@XEmacs
NGNGたまにChain of Responsibilityだ!!と思って設計始めるけど
やっぱやーめたってなる事が多いな。
フィルタとか、リカバリ処理とかに使えると思うのだが。
0435デフォルトの名無しさん
NGNGパケット処理でswitchの分岐が複雑になる場合につかうなぁ。
0436デフォルトの名無しさん
NGNGパターンありきで無理矢理作ると、どんなパターンも汚くなりがち。
そうじゃなくて、既存の汚い(または汚くなりつつある)コードに
ほどほどにパターンを適用すると良い効果がでてくる。
0437デフォルトの名無しさん
NGNG必ずといっていいほどChain of Responsibility になるだろ
0438デフォルトの名無しさん
NGNGVisitor。
…漏れは使わんが。
0439デフォルトの名無しさん
NGNGノードへのアクセスって、それ程メッセージのフォワーディングが
発生するかな。
>>438
>>437のいう条件だけだと、マルチディスパッチを要するとは言えない。
この時点でVisitorを持ち出すのは早すぎる。
…どっちにしろ漏れは使わんが。
0440デフォルトの名無しさん
NGNGノードから値をとる→値が設定されてない→デフォルト値の提供 っつー形で
0441デフォルトの名無しさん
NGNG文体も構文も難しくて理解できそうにない。
敗北age。
0442デフォルトの名無しさん
NGNG使うのは、イレテータと、プロキシくらいか。ビジターもちょっと使ったけど。
とにかく要らないのが多すぎ。実用度が低い。所詮ブームの1つだったって感じ。
0444デフォルトの名無しさん
NGNG>>443が今夜金縛りにかかるにもう一票。
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNG、、、と思ってる俺は厨房?
0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNG>>447 厨房
0449名無しさん@XEmacs
NGNG名前だけじゃなく、適用することにも意義がある。
デザインパターンを適用している場合、クラス名からどんなクラスか
想像できるし、hogehoge役はどれかな〜って想像しながらソースを読
めるので、ソースの解析が楽になる。
0450デフォルトの名無しさん
NGNG使っていかなきゃ意味が無い罠。
0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNGそんなもんコーディング規約で解決することも出来ると思うが。
0453名無しさん@XEmacs
NGNGハァ?コーディング規約で何が解決するの?ハンガリアン記法とかアフォ
事言わないよね?
デザインパターンを使ってれば、「クラス名」から「デザインパターン名」
が連想できて、さらに、「デザインパターン名」から「UML図」まで連想
できますが。
0454デフォルトの名無しさん
NGNGどこまで踏み込んだコーディング規約作ってんだ?
0455デフォルトの名無しさん
NGNG煽ってばかりなのもつまらんので、ちょっとまじめに書いて見るけど、
コーディング規約とデザインパターンが互いに置き換えられないのは、
抽象度が違うから。
パターンと言われてるものを、抽象度の高い順に有名どころを並べて見ると、
・アナリシスパターン(ドメインの話)
・デザインパターン(デザインの話)
・イディオム(言語の話)
・コーディング規約(書き方の話)
って感じ。
# ちょっと作為的なんだけど突っ込まないでください。
書き方の問題に対する解法でデザインの問題を解くことに無理があるの
は分かってもらえると思うんだが。
もしオブジェクト指向が苦手な人だったらデザインパターンをアルゴリズム
に換えて考えて見ても、納得してもらえるんじゃないでしょうか。
0456デフォルトの名無しさん
NGNG→>>267
じゃいかんのか?
0457デフォルトの名無しさん
NGNGGof本の最終章のやつね。
でもあれって、「一度テストを通ったプログラムは決していじってはいけない。」
って思ってる人(今でも結構多いと思いませんか?)にはなかなか通用しない
ところが難しい。
0458デフォルトの名無しさん
NGNG目的もよく理解出来ずに手段だけ取り上げて
「こんなの使えない」「こんなパターンなんて俺でも知ってる」
とか言ってる程度の奴には使えるようにはならんよ。
デザインパターンを有効に使える場面がある訳だから
分かってる人が有効に使えばいい話だよな。
0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNG氏んでくる・・・
0461デフォルトの名無しさん
NGNG実装側じゃなくて抽象側でテンプレートメソッドが使えるとしたら
大丈夫です。氏ななくて良いです。
きっとオブジェクト指向の基本は既に理解できていると思うんで、
これから必要に応じて語彙を増やしていくのは割と簡単なはず。
まあ遅レスですけど。
0462デフォルトの名無しさん
NGNG禿同。パターンを侮るとパターンに泣くね。
0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNGアグレゲーションとコンポジションの違いがわかりません。
絶対必要な部品とそうでない部品というように思うんだけど、
それって主観の問題っていうか、微妙な当落ラインがある
んじゃないかと思うのですが、どうなんでしょう。
それとも、ビチッと決まるのでしょうか。
解答、あながいしますねー。
0465デフォルトの名無しさん
NGNG微妙にスレ違いな気がするが…
compositionはaggregationの一種で、aggregationは
associationの一種。
生成と消滅のタイミングが部分と全体で共通なのがcomposition。
c++の実装レベルなら「ビチッと決まる」けど、分析・設計レベルだと
グレーゾーンはある。ってかcompositionをふくめたaggregation自体、
「気休め」「使うべきでない」と言う人もいる。
0466464(あげます)
NGNGだめもとで聞いてみたんですが、レスありがとうございます。
なんか、前半のお話は勉強になりました。
ただ、
>生成と消滅のタイミングが部分と全体で共通なのがcomposition。
だと、compositionでないaggregationは、C++の実装レベルでは
何になるのでしょう?それと、
>「気休め」「使うべきでない」と言う人もいる。
俺の勘違いだと思うんすけど、コンポジションを使うべきでない?
というのは、まったくわかりません。メンバ変数を使うなというように
聞こえるのですが。。。
スレ違いならすみません。
でも、できたら教えてください。
お願いします。(今度はマジです。)
0468デフォルトの名無しさん
NGNG>>466
>だと、compositionでないaggregationは、C++の実装レベルでは
>何になるのでしょう?それと、
なんにせよ実装レベルでは関連はメンバ変数になる。
>俺の勘違いだと思うんすけど、コンポジションを使うべきでない?
>というのは、まったくわかりません。メンバ変数を使うなというように
>聞こえるのですが。。。
単なる関連として記述した方が、記述者による解釈のゆれが少なくて済む、
ということかと。
>>467
分析・設計と実装は分けて考えよう。
UML はどっちかというと分析・設計に用いるのがメイン。
0469464 == 466
NGNGすみません。
>>468
にもかかわらず親切なレス。ありがとうございます。
0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNG何かやっているようなケースは、みんな Bridge じゃないのかなあ?
たとえばプログラム中にデバッグ用のオブジェクトダンプルーチンを
組み込んだとして、ostream& なんかを引数にとって、状況に応じて
コンソールに出力したりファイルに出力したりできるようにすれば、
これは立派な Bridge だと思うんだけど、どうかな。
デザパタは名前からイメージしてみるのが吉。
Bridgeなら何か二つのものが橋渡しされてる構造を思い浮かべる。
とは言え、既にある二つの何かに橋を架けるイメージより、むしろ
何となく一枚板っぽい何かを、一方通行の橋だけ残して二つに
切り離すイメージに近い。
「Bridgeの意義」の中にはオブジェクト指向を使う意義と、
パターンを適用する意義が自動的に含まれるわけだが、それらを
置いといて敢えて一言で言うと「片側ごとの拡張」だと思うんだが。
どうよ?
それはBridgeじゃないのでは。
Implementorは外には見せない。
ちなみにBridgeの別名はHandle/Bodyという罠。
カタログ記載の構造はある程度大事にしてしかないと、パターンの
良さが失われるなり。
0474デフォルトの名無しさん
NGNG・その具体例でBridgeを使うことでどういうメリットが得られるたのか。
を教えてください。
1割くらいはなんとなくわかってるつもりなんですが、残りの9割が
どうしてもわかりません。
0475デフォルトの名無しさん
NGNG・インタフェイスと実装が分離でき、実装の入れ替えができる
0477デフォルトの名無しさん
NGNGクライアントをコンパイルしなおさなくても実装を入れ替えられる。
場合によっては(言語によっては)実行時に実装を選択できる。
手元に何かDesignPatternのクラス図とかある?
無かったら用意した方がいいし、あったらじっくり眺めてみるといい。
それを飛ばしてメリデメだけ考えてもいつまでたっても理解できない。
単なる多態との違いもクラスの構成を見れば分かる。
例えば単なる多態をこんな風に表現するとする、
クライアント→抽象クラス⇒実装クラス
Bridgeにはこんな関係が二つ出来る。
クライアント→Abstract抽象クラス⇒Abstract実装クラス
Abstract抽象クラス→Implementor抽象クラス⇒Implementor実装クラス
(これは、多態との違いを示しただけで、Bridgeの構成には
まだ他にいつかのポイントがある。自分で確認してみてください。)
ある程度、基本を理解していないと具体例を示されても結局ピンと
こないんじゃなかろうか。
0479デフォルトの名無しさん
NGNG実地じゃ絶対に使わないんだが
0480デフォルトの名無しさん
NGNGどんな技術でもそんなもんでしょ。
0481デフォルトの名無しさん
NGNGインターフェースも絶対に使わない?
>>480
抽象クラス使わないと済まないところってある?
0482480
NGNG俺の場合もう6年以上プログラマやってるけど、オブジェクト指向の
仕事しかしたことが無いから、当然OOD/OOPは飯の種だし、抽象クラス
なしに仕事はできない。
だけどプログラマの仕事といってもいろいろいる。
汎用機でCOBOLやってる人も、まだまだたくさんいるよ。
Webの仕事でもPerl4を使い続けてるとこともいまだに多い。
0483479
NGNG実際にコード書くときは最初にスタブでラップしない?
作りこみを後回しにするなら当然そうするし
それなら抽象クラスじゃなくて
最初から適当なスタブでいいじゃんと思った。
まあそれだけです。
結局抽象的な意味としては変わらないか。
0484デフォルトの名無しさん
NGNGおれの場合、仮コード書くとしたら実装クラスに書くなあ。
つまり、抽象クラスは最初に書くわけだが。
0485デフォルトの名無しさん
NGNGいや、仮コードをわざわざ書くのが面倒ってことで。
0486デフォルトの名無しさん
NGNGinterfaceがあればいらない気がするのだけど。
「interfaceとclassをいっぺんに定義したいときの手抜き用」みたい。
0487デフォルトの名無しさん
NGNG昔、c++の仕事してたので、interfaceがあるだけ
進歩に思えるけど、そう言われるとそうかもしれん。
とはいっても手を抜けるとこは抜けるようになって
た方が実用的には良かったりする。
デメテルなんかも一理はあるけど、こだわり過ぎる
と無理が生じたり。
0488名無しさん@XEmacs
NGNGInterfaceはpublicな物しか定義できないけど、abstractなら、
非publicな物を定義できる。
ある事をするメソッドを、複数クラスに持たせたいが、public
にはしたくないって時とか。
まぁ基本的には、テンプレートとしての使い方がメインだが。
0489デフォルトの名無しさん
NGNG>Interfaceはpublicな物しか定義できないけど、abstractなら、
>非publicな物を定義できる。
それはpublicでないinterfaceを別に作ればよいのでは。
>ある事をするメソッドを、複数クラスに持たせたいが、public
>にはしたくないって時とか。
それは実装の問題で、インターフェースや抽象クラスの使い道とは
ずれるのでは。
0490U ◆CZtFsGiu0c
NGNGように使うし、そうでなくても共通の実装を基底クラスに抜き出して
共通化して、その基底クラス自体はインスタンス化したくない場合には使う。
0491デフォルトの名無しさん
NGNGブラックボックス再利用のStrategyの方がイイじゃない。
0492U ◆CZtFsGiu0c
NGNGTemplate MethodパターンとStrategyパターンって単純に置き換えられる
ものじゃないでしょ。もちろん、Template Methodを使わなくても同様の
実装はできる。Template Methodのサブクラス実装部分を外に出して
コールバックオブジェクトとして渡すとか。その方が柔軟性はあるけど、
どっちがいいかはケースバイケースでしょう。
0493名無しさん@XEmacs
NGNG勘違いしてるようだが、
Interfaceで、protected なメソッドやフィールドが作れますか?
という話をしてる。
0494デフォルトの名無しさん
NGNGTemplateMethodからStrategyへは
カナーリ単純に置き換えられると思うが。逆は困難かも。
>>493
protectedなメソッドを使ってコードを共有するというのは実装法の話でしょ。
abstract classを使えばインターフェース定義と実装の一部が同時に書けて
「手抜き」ができるというのは>>486で既出。
フィールドも実装の話ね。フィールドを公開したりしちゃいかんでしょ。
0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
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カナーリ単純に置き換えられると思うが。逆は困難かも。
それって、
>Template Methodのサブクラス実装部分を外に出して
コールバックオブジェクトとして渡すとか。
このコールバック部分をStrategyで実装するって事?
確かにできるけどその分複雑になるでしょ。だからケースバイケースだと:-)
>逆は困難かも。
困難っていうか、ロジックの枠組みを基底クラスで共通化できないと
Template Methodにする意味ないよね。
0499デフォルトの名無しさん
NGNG一般論として言ってるだけと思われ。
0500デフォルトの名無しさん
NGNG必要が生じてから複雑にするのが望ましいのれす。
# UML PRESS vol.2 で似たような趣旨の記事があったな。
0501デフォルトの名無しさん
NGNGJavaで書けば、
this.template_method1(...)をstrategy.method1(...)に変えるだけだろ。
0503
NGNGと思ったけど、割とティピカルな継承 VS 委譲の図式でも
あるわけで、結構まともなテーマなのね。
0504デフォルトの名無しさん
NGNGC++ だと template method には template class 使っちまうな、俺。
0505デフォルトの名無しさん
NGNG自分では画期的な思いつきのような気がしてるんですけど。
0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNG呼び出したクラスへの参照をもたないのは、Commandナリ。しかし、
呼び出したクラスへの参照をもっていて、呼び出したクラスのメソッドを呼ぶことでVisitorになる。
Controller --> Command
Controller --> Visitor
Controller <-- Visitor
この解釈って、あってる?
0508デフォルトの名無しさん
NGNGぜんぜん違うと思う。
Visitorはいいんだけど、Commandがちょっと・・・
GoF本にCoplienのFunctorとCommandパターンの違いが
書いてあるんで参照してみてはいかがでしょうか。
というかそのCommandと対比してVisitorを理解してるとすると
Visitorの方の理解もちょと怪しいかも。
0510デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNG偶然、キリコが自分の手先が経営している店で
食事をしているのを見かけた。
「げへへへ・・・おい、あの女の食べるものに
これを混ぜて来い・・・」
大谷の手先の店長はキリコの食べる食べ物の中に
大谷に指示された薬を混入した。
キリコは何の疑いも無く食べ始めた。
それは、五行に作らせた強力な睡眠薬の一種だった。
しばらくするとキリコは意識が無くなり始め食堂
の机に倒れこんでしまう。
「げぇへへへおい、あの女をを奥の部屋まで運べ」
店長は大丈夫ですか?といいつつ奥の部屋にキリコを
連れ込んだ。
全ては大谷の指示だった。
「さぁて、このクソ生意気な女をどう調理してやろうか
・・・ぐふふっ考えるだけで唾ができそうじゃわい」
意識を失っているキリコを目の前に大谷の目が妖しく光る・・・
続く
0512デフォルトの名無しさん
NGNGまだ全然読んでないけど有用な予感。
0513デフォルトの名無しさん
NGNG自分の5年前を見てるようだ。
ガンガレ
0514デフォルトの名無しさん
NGNG0515デフォルトの名無しさん
NGNG自分の5年前を見てるようだ。
ガンガレ
0516デフォルトの名無しさん
NGNGジャン? 大谷? キリコ? 店長? 五行?
0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNG0519デフォルトの名無しさん
NGNG0520デフォルトの名無しさん
NGNGオブジェクトコンポジションが
何のことか具体的に良く分かりません。
文法用語なのでしょうか?
0521デフォルトの名無しさん
NGNGガイシュツ。このスレを検索せよ。
0522デフォルトの名無しさん
NGNGすいません。
すべて読んではいませんが検索してから書き込みました。
またさらっと見てみたのですがありませんでした。
オブジェクトコンポジションというのは
compositionとなにか関係あるということでしょうか?
0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGありがとう。
オブジェクトコンポジションてこれのことなんですか?
0526デフォルトの名無しさん
NGNGアカウント情報参照して許可・不許可するソフトの場合
if( アカウント情報参照結果が許可の時 ){
クライアントの要求を実行して結果を送信}
else{
その行為は許可されていない旨をクライアントに送信}
って感じのコードがあちこちに散在することになるんだけど、
なにかうまいデザインパターンはないでしょうか。
不許可の時に例外飛ばせばif文はなくなるけど例外ってコスト的に問題あるし・・
皆さんならどうしますか?
0527U ◆CZtFsGiu0c
NGNG「クライアントのできる行為」とやらをCommandパターンまたはStrategyパターン
でカプセル化。実行許可されている場合にはその処理を実行するオブジェクトを
生成し、不許可の場合は不許可時の処理を行うオブジェクトを生成して実行する。
Null Objectパターンと似てるけど、多分どっかで誰かがやってて名前がついて
そうな気がする。
0528デフォルトの名無しさん
NGNG失礼しました。
GOF本改訂版にてオブジェクト指向において機能を再利用する
技法としてクラス継承とオブジェクトコンポジションがある
とありました。
JAVAにおけるインタフェース実装のような技術で
文法用語なのかと思ったのですが、調べてみても
よく分かりませんでした。
0529デフォルトの名無しさん
NGNGレスありがとうございます。
なるほどNull Objectパターンですか。こうやって指摘されてみると
用途にぴったりのようです。
これをヒントに設計してみたいと思います。
ありがとうございました。
0530デフォルトの名無しさん
NGNGDB設計には使えそうかなとも思うんですが。。。
0531U ◆CZtFsGiu0c
NGNGそれは要するに、コードの再利用を実装継承で実現するか、集約+委譲で実現
するか、ということだよね。シンプルに説明すれば、既存のクラスインスタンスを
プライベートメンバとして持ち、そのインスタンスのメソッドを実行することで
再利用する方法です。
このスレッドで出てきたcompositionの説明は(現バージョンの)UMLにおける
composition(とaggregation)の定義ですね。
0533デフォルトの名無しさん
NGNG柔軟性があります。
カプセル化という考え方からすると継承はメソッドのオーバーライドなどにより、
既存の設計を大きく変えれてしまいます。
また、コンパイル時に仕様が確定しないなど、セキュリティ上大きな欠点があります。
ただし、継承はプログラミング時にオブジェクト生成のための冗長なコードを書く必要が無かったり、
スーパークラスでメソッドを書き換えれば全てのコードにその影響を反映させることが
できるなど、メンテナンス性においてはオブジェクトコンポジションより優れています。
また既存の優れたデザインパターンを利用できるというメリットもあります。
どちらをとるかは要件により決定します。
0534528
NGNGありがとうございます。
なんとなく分かりました。
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNG例外をそんなに嫌うこともないとは思うけど。
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デフォルトの名無しさん
NGNG1回目はちいとも分からんけど、通読だけはしておくことを薦めるよ。
ある時はたと悩んでアナリシスパターンをパラパラめくったら
「あらやだ!こんなところに解決策が」ということも多い。
>>530
DB設計というよりはモデル設計に使うよ。
モデルを作ってからDBの論理設計を行う人には役立つはず(自分はこっち)。
DB設計してからアプリを設計する人は使わないと思う。
0538デフォルトの名無しさん
NGNG>>273の書籍って「買い」ですか?
もっといいのが出てるよ、とかあるのかな?
0539デフォルトの名無しさん
NGNGそういうのは、実はなかなか無い。
「何がよいこととされているか」という価値観を知るのにも役立つ良書だと思う。
お勧め。結城本の次くらいのレベルなら、間違った癖をつけて欲しくないからなおさらお勧めだよ。。
『パターンハッチング』は、まあ暇があったら読んでみたら程度。
0540デフォルトの名無しさん
NGNGアナリシスって、ひと言でいうとどんな感じ?
0541デフォルトの名無しさん
NGNG分析
0542デフォルトの名無しさん
NGNGそこでパーティとかの概念使われてたから、アナリシスパターンがよう分からんという人にはいいかも
スレ違いにつきsage
0543542
NGNG0544デフォルトの名無しさん
NGNG憂鬱なプログラマ〜って本読んでみようと思うのですが、
よんだ人いますか?
0545デフォルトの名無しさん
NGNG読む順序が逆っぽい(w
0546デフォルトの名無しさん
NGNGやはりそうですか。
JAVAを使うことでオブジェクト指向がわかるか的に思って
きてしまったのできちんと本を読もうと思っています。
憂鬱な〜以外によいOOの本教えてください。
0547デフォルトの名無しさん
NGNG既出だがここが一番わかりやすいと思う
0548デフォルトの名無しさん
NGNG初心者にとってはそれが一番いい本だよ。
>>547
お礼にいいページ見つけたんで紹介。
http://www.jahis.jp/about/katsudou/ki-gihou/2001/giho/giho2001-12.pdf
0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG病気でしょうか?
0551Delフサギコ ◆A6VzDeLphI
NGNG∧,,∧ /
ミ 彡 < あなたさては
(ミ ミ) \
ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∪ ∪
________
∧,,∧ サッ /
ミ,,゚Д゚ミ < やらしい人ですね。
⊂ Om \
ミ、,, ミ,  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.しヾJ
0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNGぐぐれ。あるいは書籍購入。
海外にいろいろある。
0556デフォルトの名無しさん
NGNGこれを参考に自分で書いてみるとか
0557名無し@沢村
NGNGそして派生クラスではそれらを操作するメソッドをそのクラスに応じて定義するわけだ。
そして必要に応じてそれからクラスをさらに派生したりコンポジションで包含したりするわけだ。
こうすると基底クラスですべての変数を管理できるとても見通しのよいOOになるよ。
俺はこの方法を自己流だが、もっともすぐれたデザインパターンのひとつだと思っているね。
0558デフォルトの名無しさん
NGNGこれはたぶん沢村本人のものでは無い。
この昼休み時間中に、どこかのヒマなアフォがコピペして回っている模様。
オリジナル:
http://pc3.2ch.net/test/read.cgi/tech/1041658161/255
コピペニマジレス、カコワルイ。
0559デフォルトの名無しさん
NGNGこらっ!しんのすけ。
0560デフォルトの名無しさん
NGNG0561デフォルトの名無しさん
NGNG宿題終わった?
お風呂に入った?
湯冷めしないようにね・・・
0562デフォルトの名無しさん
NGNG一定期間でログは消しますです。
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好ましくない書き込みを一所懸命削除している、
ということになっているが、あれはウソ。
削除人には給料が支払われ、その給料の原資となっているのが、
まずいことを書き込まれた企業が削除要求とともに渡す裏金。
0564デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 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いくらなんでも、無差別にIP公開はしないと思うが。
0566デフォルトの名無しさん
NGNG誰でもみれる様になるの?
0567デフォルトの名無しさん
NGNGプロフィールです(^_^;)
>>171
今かかってきたのお前か!お前か!
0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNGそれが重要だよね。
残念だが故郷を離れる、ミンゾク大移動の日は近いのだろう。
DQNも厨房も1人残らず移住できる箱舟が現れるのか・・・
0570デフォルトの名無しさん
NGNG商用でもないのに。
0571デフォルトの名無しさん
NGNG別にIP表示されるわけでなし。責任とれないような書き込みせにゃいいだけやろ?
0572デフォルトの名無しさん
NGNG0573デフォルトの名無しさん
NGNG上のスレでは★付きボランティアの発言原則禁止。
ボランティアである事を匂わせる発言も同様。
こことは趣旨が正反対のウォッチスレ。
のはずだった。
0574デフォルトの名無しさん
NGNG0575デフォルトの名無しさん
NGNG0576デフォルトの名無しさん
NGNG来週も番組が無事でありますように
0577デフォルトの名無しさん
NGNG1 :水先案名無い人 :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デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNGCみたいにメソッドを配列にできないもんかな?
0580デフォルトの名無しさん
NGNG> Cみたいにメソッドを配列にできないもんかな?
C++ でもメンバ関数へのポインタはとれるけど。そういう話じゃなくて?
0581デフォルトの名無しさん
NGNGswitch 文なんて使わないけど。
0582デフォルトの名無しさん
NGNG使用言語はいったいなにを?
ファンクションへのポインタが使えるC,C++や、
メソッドをオブジェクトとしてあつかえるJavaとかなら楽そう
0583デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0584デフォルトの名無しさん
NGNG>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デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNG言いたいことも言えないこんな世の中じゃーー
ついに聖域まで汚染されました、
0587デフォルトの名無しさん
NGNGhttp://newsplus.jp/~thomas/bbs/img-box/img20030103203150.jpg
0588デフォルトの名無しさん
NGNG今までは、判断してこなかったからやってこれたが、
今後は、真の「管理能力」が問われることになる。
0589デフォルトの名無しさん
NGNG氏ね
0590名無し@沢村
NGNG俺はふと思って2ちゃんねるのあっちこちの板を見て回ったのよ。
格闘技板とかアナウンサー板とかプログラマー板とかをな。
そうしたらな、どこのスレ開いても最近ひろゆきの話題が出てる板はプログラム技術板だけだったぞ!!
ヌヒ等よ、ここは2ちゃんねるいっちゃん恥ずかしい板だぞ!!
0591デフォルトの名無しさん
NGNG>>582
メソッドをオブジェクトとして扱う方法ってなんなの?
知らないよ俺。
0592デフォルトの名無しさん
NGNG「Object.getClass().getMethods()で取って来て、Method.invoke()叩く。」
ってことじゃない?(Strutsでもやってるはず)
でも、素直にスイッチ使った方が遙かにマシ。
0593デフォルトの名無しさん
NGNG問題だよ!犯してーなんて2ちゃんではどこでも見かける言葉じゃん
でも、現実世界では人前では言わない言葉だ、そこらへんどうなのよ?
0594デフォルトの名無しさん
NGNGhttp://shopping.yahoo.co.jp/shop?d=jb&id=07107411
-----------------------------
「2ちゃんねるのウラオモテ超入門」
マイウェイムック、143ページ
監修・2ちゃんねる
発行・マイウェイ出版株式会社
発行日・2003年2月20日
値段・1429円
0595デフォルトの名無しさん
NGNGMethodの参照をコレクション系の何かに入れておいて...とか、
HashMapに入れておいて...とか、俺ならする。
switchやifの嵐の方が処理的には早いと思うが、拡張する時の手間考えたら、
その方がスマートにできる..とか言ってみるテスト。
0596595
NGNG「俺仕様インタフェース」を取り付けてメンバの操作をしたいので、
ここでアダプタorブリッジパターンを使って、俺仕様化したMethodの参照を、
クライアント側(この場合はコマンドパターンの実装側)で、操作するようにすると、
さらにいい感じのような気がする。
0597592
NGNGMethodクラスなどリフレクションは型チェック出来ないんで極力使わない方が良いのでは?
拡張性に関しては、プロトタイプパターン使って解決すれば多分Methodクラス使うよりも
パフォーマンス的にもマシで、かつJava本来の型チェック機能も損なわないかと。
//コマンド登録
HashMap map = new HashMap();
map.put("hoge", new HogeCommand() );
//コマンド呼び出し
HogeCommand exec = (HogeCommand)map.get("hoge").clone();
exec.execute();
自分としては、コマンドパターンを適用する箇所は結構ホットスポットになるんで、
int系のキーとswitch文(テーブルアクセスしてくれるはずなんで)使ってます。
(コマンドの拡張はコマンドのファクトリーを継承して数増やす)
0598デフォルトの名無しさん
NGNGフレームワークの中とかで部分的に使うなら
リフレクションも悪くないと思うけどな。
リフレクションだらけのコードはいやだけど。
0599582
NGNGそうそう。そういうこと。
でも書いてから気がついたけど
C++やJavaでのCommandパターンなら多態性つかえばすむよね。
ていうか>>591の
>コマンドパターンでJava使うとスイッチばっかり
はどういう意味?
むしろ俺はそっちを聞きたい。
JavaでCommandパターンを実装するとして
switchをどういう風に使うの?
0600デフォルトの名無しさん
NGNG0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNG> switchをどういう風に使うの?
そうそう、確かにこれには同意する。
多分、Strategyパターンのコンテキストスイッチ部分と勘違いしてないかな?
0603デフォルトの名無しさん
NGNG4nd ボー カレー
0604デフォルトの名無しさん
NGNG>コマンドパターンで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でも、引数と分岐のキーの一致保証は、メソ内のコード依存
って事になるが。やっぱスマートじゃないな。
0605604
NGNG0606604
NGNGpublic 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コマンドを突っ込む Queue を作らない?
0608デフォルトの名無しさん
NGNG政治経済学部に比べて著しい低学歴、特に、ひろゆきの卒業した中央大学文学部
のようなヘボい大学に共通しているのは、文化水準が低いという事です。18歳から22歳を
ヘボい大学で過ごすということは、致命傷と言えます。2ちゃんねらーの大半は
岡田克彦氏に比べて、著しい低学歴ですから、取り返しはつかないのです。
せめて、http://www.geocities.co.jp/MusicHall-Horn/1091/で、氏の作品に触れましょう。
0609デフォルトの名無しさん
NGNG顧客情報の開示を行うことを明らかにするだけだ。
責任は書き込んだ奴が取るだけ。
0610602
NGNGってかswitch部分は、Commandの具象クラスの外に出すべきだと思われ。
(でないと、CommandパターンでMacroやUndoの実装がしにくくなるでしょ?)
んで、Commandインスタンスの生成は、Factory Methodパターンを使い、
Factoryの具象クラスが分岐に責任もてばいいのでは?
Commandパターンでは、invokerはAbstractCommandのメソッドを実行するだけ
なんだから。
0611デフォルトの名無しさん
NGNG0612604-606
NGNG>なんかそれだと Interpreter っぽいね。
形が、って事?確かにこんだけのソースだとそう見える気も。気づかんかった。
でもデザパタって、「形は似てるけど目的が違う」みたいなの多いよね。
>コマンドを突っ込む Queue を作らない?
そだね。マジでやるなら、そうした方がいい。
0613604-606
NGNG>Commandインスタンスの生成は、Factory Methodパターンを使い、
>Factoryの具象クラスが分岐に責任もてばいいのでは?
そこまでやるならファクトリからCommand部を取るより、Storategyにした方が
良くない?
実装の拡張(Macroとか)を意識するなら、Commandの実体をビルドする形より、
むしろその部分を挿げ替えてしまえる方が自然な気が...。どうか。
0614デフォルトの名無しさん
NGNG0615デフォルトの名無しさん
NGNG気がするのだが。。。
0616デフォルトの名無しさん
NGNG0617山崎渉
NGNG0618デフォルトの名無しさん
NGNG|・∀・)♪ おあよーおあよー!
|⊂ ノ
|` J 朝だす、みんな起きるだす!!
0619山崎渉
NGNG0620デフォルトの名無しさん
NGNGJAVAで学ぶデザインパターンも読もうかと思っています。
学ぶことは多々ありますか?
0621デフォルトの名無しさん
NGNG一言でいうと、gof本よりもわかりやすい言葉で書かれている。
Javaで書かれた実際に動くサンプルコードがついてくる。
0622デフォルトの名無しさん
NGNGクラスライブラリがアプリケーションクラスを用意してる場合もある
というようなことが書いてあったのですが、
どのようなものがあるのでしょうか?
できればJAVAで教えてください。
0623デフォルトの名無しさん
NGNGイラストの投げやりっぷりが笑える
0624デフォルトの名無しさん
NGNGスレッド編をよみたいので先にこちらを読もうかと思ったのですが、
gof本で理解できれば飛ばしても問題ないですかね?
0625デフォルトの名無しさん
NGNGGoFで理解できたのなら、読み飛ばしても問題ないかと。
0626デフォルトの名無しさん
NGNGありがとうございます〜。間ができたのでやと買いますた。
今日からちょいちょい読んでいきます。
0627山崎渉
NGNG0628デフォルトの名無しさん
NGNG0629デフォルトの名無しさん
NGNGどのように実装すればいいのでしょうか?
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デフォルトの名無しさん
NGNG0634デフォルトの名無しさん
NGNG実装がstaticまみれになるのがいやだったりインスタンスの参照を渡せなかったり
使い方がオブジェクトと違うのがいやだったりでインスタンス化することもある。
0635デフォルトの名無しさん
NGNG(゚∀゚)サンクスコ
staticに生きるよ
0636デフォルトの名無しさん
NGNGもしかして、いま勉強してもあまり意味がないの?
0637デフォルトの名無しさん
NGNGそんなことないと思うよ。使うことは使うと思うけど、
メンバー全員が理解している状態ではないという感じ。
0638デフォルトの名無しさん
NGNG0639デフォルトの名無しさん
NGNGデザパタわかったつもりになってる奴って痛すぎ。
なんつーか底の浅さが見え見えだよな。
0640デフォルトの名無しさん
NGNG0641デフォルトの名無しさん
NGNG特定のフレームワークや、クラスライブラリを使うときに、デザインパターン
知らないより知ってた方がいいよ。知らないとサンプル見ても意味わからん
ときがあるから。
サンプルとか、既に造ってある使い方以上の改造が必要になった時にフレーム
ワーク造った人の意図を推測できるかどうか、どのパターン適用してる判別可能
かどうかが、結構効いて来る。(クラス名から推測できるようにしてあるとあり
がたい)
0642デフォルトの名無しさん
NGNGプログラマについてはその限りにあらず
0643デフォルトの名無しさん
NGNG一言で済むのがいい。
0644デフォルトの名無しさん
NGNGAbstractFactoryクラスでは、部品を生成するためのインタフェースが
宣言されるだけであり、実際の生成はConcreteProductに任されている。
がよくわかりません。教えてください。
0645デフォルトの名無しさん
NGNG次はスレッド編を読もうと思ってるのですがそれ以外にいいのありますか?
実践しろと言わないでください。読むのが好きなので。
0646デフォルトの名無しさん
NGNGEiffel や smalltalk なんかにも手を出してみるのはどう?
0647世直し一揆(コピペ推奨)
NGNG●とにかく気が小さい(神経質、臆病、二言目には「世間」(「世間」と言っても、同じA型を中心とした一部の人間の動向に過ぎないのだが・・・)、了見が狭い)
●他人に異常に干渉し、しかも好戦的でファイト満々(キモイ、自己中心、硬直的でデリカシーがない)
●妙に気位が高く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとする
(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはた
いてい、内面的・実質的に負けている)
●本音は、ものすごく幼稚で倫理意識が異常に低い(人にばれさえしなければOK!)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者にはへつらい、弱い者に対してはいじめる)
●あら探しだけは名人級でウザイ(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため性格がうっとうしい(根暗)
●単独では何もできない(群れでしか行動できないヘタレ)
●少数派の異質、異文化を排斥する(差別主義者、狭量)
●集団によるいじめのパイオニア&天才(陰湿&陰険)
●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい)
●他人からどう見られているか、人の目を異常に気にする(「〜みたい」とよく言う、
世間体命)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度
も言ってキモイ)
●表面上協調・意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は個性・アク強い)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自ら好んでストイックな生活をしストレスを溜めておきながら、他人に猛烈に嫉妬
する(不合理な馬鹿)
●後で自分の誤りに気づいても、強引に筋を通し素直に謝れない(切腹するしかない!)●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。包容力がなく冷酷)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(例:「俺のほうが男
前やのに、なんでや!(あの野郎の足を引っ張ってやる!!)」)
0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNGどの辺?
いまさらだけど。
コマンドパターン自体は難しくない気が、、、、
0650デフォルトの名無しさん
NGNG★みんなの情報局★
0651デフォルトの名無しさん
NGNG// 最初の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インスタンスの生成時に例外処理が必要なければいいと思いますよ。
0653デフォルトの名無しさん
NGNGこの場合どのパターンを使ってどんな感じで絵画させればいいの?
1,DrawメソッドにWindowクラスのポインタか参照を渡す。
2,敵キャラやプレイヤーのクラスにWindowへのポインタのメンバを含める
3,その他
0654デフォルトの名無しさん
NGNGScreen.Draw(Player)とかのが良くないか。
0655別人ですけど
NGNGcase文みたいでオブジェクト指向らしく無い、つか、
Playerに関するコードがPlayerクラスの外にも分散してしまうのが、
俺の脳味噌の貧弱な管理能力を無駄に消費してしまうようで気持ちよく無いです。
しかし画面と関係無しに存在できるはずのPlayerクラスが描画コードを持つのも
Playerクラスを再利用することなんてまずあり得ないとわかっていても、やはり良く無い気が。
それでも多態を利用できるのは便利なので、俺は渋々PlayerのようなクラスにDrawを持たせてます。
ミックスジュースとかなら、画面と無関係に作ったPlayerクラスに、
後からDrawメソッドを追加できていい感じ??(ミックスジュース使ったことないので詳細不明)
0656デフォルトの名無しさん
NGNG普通、そういうコードにはしないと思うよ。
0657デフォルトの名無しさん
NGNG普通どういうコードにするの?
0658デフォルトの名無しさん
NGNGttp://www.fujigoko.tv/rev/prof/doc4/index.html
0659デフォルトの名無しさん
NGNG細かい作画指定は、Prayerクラスが持つDrawSettingクラスあたりから取得する。
設定は、DrawSettingクラスを継承したクラスに書いて、各Prayerクラスで使い回す。
0660あぼーん
NGNGhttp://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クラスの実装例
NGNGthis.SetDrawSettingInterface(
argHasDrawSettingInterface.GetDrawSettingInterface()
);
//DrawSettingInterfaceをもとに描画するコード
}
インターフェイスじゃなくて仮想クラスとかでも可。命名規則は説明のためにあえて冗長になってまつ。
0662デフォルトの名無しさん
NGNGScreenはその対応付けをするだけでいいでしょ。
こんなかんじで
Player.Drawer = new PlayerDrawer();
0663デフォルトの名無しさん
NGNGGoF本の正式名称教えて下さい!
0664デフォルトの名無しさん
NGNG> こんな事いったら怒られるだろうな…。でもいいまつ…。
> GoF本の正式名称教えて下さい!
http://www.google.com/search?lr=lang_ja&num=50&q=GoF%96%7B
0665デフォルトの名無しさん
NGNGうわーい。ありがとーー。
0666デフォルトの名無しさん
NGNG0667デフォルトの名無しさん
NGNG遅レスですが、あなたの主張では
>最初のGetInstance()でインスタンスを作る。
を満たしてないような気がする
0668デフォルトの名無しさん
NGNGいいたかったのは
「最初のGetInstance()でインスタンスを作るような
Singletonの実装をよく見かけるけど、
GetInstance()で作んなくてもいいじゃん」
ってことです。
0669デフォルトの名無しさん
NGNGclass 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初回のA::instance() をコールした時、
A::instが0になってるって保証するコードすらC++では書けない、
と言うことすら暗示してますか?
0671670
NGNGclass C {
static C* c;
};
C* C::c = 0;
と
class C {
static C* c;
};
C* C::c;
って等価なのか?
0672デフォルトの名無しさん
NGNG暗示してません、それは大丈夫です
inst=new Aは実行時じゃないと初期化できないので問題となります
inst=0は実行時以前に処理できるので処理されます
>>671
どっちもNULLで初期化されることは確か
0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNGちょっと昔やってた宇宙人侵略B級ドラマの方だな。
月の裏側には・・
0675デフォルトの名無しさん
NGNG値が緑なんだよな。
0676山崎渉
NGNG0677山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0678デフォルトの名無しさん
NGNG// 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デフォルトの名無しさん
NGNGtemplate <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デフォルトの名無しさん
NGNGQ1 どうやって使うの?
Q2 メンバを追加したい時は?
Q3 コンストラクタでなんか処理をしたい時は?
Q4 つか、これ、サブクラス作らなきゃ使い物にならんだろ。
Q5 そこんとこ、明記しとけよ。
0681デフォルトの名無しさん
NGNGQ6 Q4とQ5が質問形式でないのはなぜ?
0682678
NGNGA1:
シングルトンにしたいクラスをTとして、
template Singleton<T>::instance_ = 0;
をグローバルにおいた上で
使いたいところで
T *t=Singleton<T>::Instance();
して、あとは適当に。
A2A3:
Singleton<T>とTは独立したクラスなのでTにいくらでも追加してください。
Tのコンストラクタ、デストラクタも好きに書いてください。
A4:
んなこたあない。
A5:
スマソ
0683デフォルトの名無しさん
NGNG0684678
NGNGGoF本に書いてあるSingletonパターンの効果の1以外(4は要改造)を
手軽に得るための手段(シングルトンもどき)ってことで駄目ですか、駄目ですね。
0685デフォルトの名無しさん
NGNGclass Hoge : private Singleton<Hoge> {
};
Hoge* Hoge::instance = 0; // この行は、どう書けばいいのかわかんない...
0686デフォルトの名無しさん
NGNG自分で何日もかけてフレームワークらしいものいじくり倒して、
気がついたらCD3DApplicationとほとんど同じ形に収束していて、
はたと「そうか、これがTemplate Methodパターンか」とようやく気づく俺。勘が悪すぎです。
まあ、いろいろと勉強になったからいいや。
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNGpublic abstract void 主人公が危機にあう();
public abstract void ヒロインと出会う();
public abstract void ヒロインと恋に落ちる();
public abstract void 主人公が活躍する();
public abstract void 主人公がヒロインと喧嘩する();
public void play() {
主人公が活躍する();
ヒロインと出会う();
主人公が活躍する();
ヒロインと恋に落ちる();
主人公が危機にあう();
主人公がヒロインと喧嘩する();
主人公が活躍する();
ヒロインと恋に落ちる();
}
}
0689デフォルトの名無しさん
NGNGどうでもいいだろ
0690デフォルトの名無しさん
NGNGなんかそれに付いてめっちゃ語りたがってるな。
0691デフォルトの名無しさん
NGNG俺もそう思う。
そろそろうざいな、あれ。
0692デフォルトの名無しさん
NGNG0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNGそれ最悪、Cプログラミングやってんじゃねーんだから
継承とかコンポジションとかできねーじゃん
0695デフォルトの名無しさん
NGNGいやあ、どっちもどう考えても想定できないようなクラスなもんで。
0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNGじゃあnamespaceでいいじゃんって思ったが、あんたはJavaか
俺は習熟するにつれてよりクラス抽出できるようになった経験がある。
もしかしたら問題のフレームをとらえられてないだけかもよ。
ほんとのところはソースみないとなんとも言えんけど
0698デフォルトの名無しさん
NGNGそれともフレームワーク書く人だけ知ってればいいの?
0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNGそのオブジェクトを末端オブジェクトまで渡しつづけなければならなくなるよりよっぽどマシ。
ちなみにクラスメソッドの集合ではなく singleton にしといて良かった〜と後で
思うことなんてまれ。必要になったら利ファクタリングで十分過ぎ。
0701r
NGNGシングルトンなオブジェクトを"末端オブジェクトまで渡さなきゃならない"状況ってのも
かなり異常だけどな。
# 末端オブジェクトで、インスタンス取得( XXX::getInstanceとか)すりゃいいだろ。
0702デフォルトの名無しさん
NGNG外に放り出したほうが使いまわしが利いて便利だけどな。
なんでもかんでもオブジェクトにするのがいいわけじゃねーだろ。
0703デフォルトの名無しさん
NGNG他のプログラマとコミニュケーションをとる必要があるプログラマに必要。
0704デフォルトの名無しさん
NGNGH-age-Doe
0705デフォルトの名無しさん
NGNG「明日の自分は『他のプログラマ』」なニワトリ頭のプログラマにも必要。
0706デフォルトの名無しさん
NGNG言語による。
Java でそういうクラスが必要だと思ったことが無い。
0707デフォルトの名無しさん
NGNGホントに思ったことないの?
どんなの作ってるの?
0708デフォルトの名無しさん
NGNG0709デフォルトの名無しさん
NGNG俺は706じゃないけど、俺も必要性をほとんど感じない。
計算関係とかは十分にそろってるしね(Math.class)。
あらゆる処理は誰か(A)がトリガーになって誰か(B)が実行するわけだけど、
AもBもオブジェクトになるからにはそれらが実装すべきだと思う。
静的なクラスを最近作ったのはRobocodeで遊んだ時かな?
ただし、静的クラスを作ることは否定的ではないし、必要が出てくれば
迷わず作るよ。分野によっては結構必要になりそうだし。。
0710デフォルトの名無しさん
NGNGreplaceとか単純な奴は普通ユーティリティでまとめるべ。
0711デフォルトの名無しさん
NGNGあほか。普通は文字列クラスのメンバにするだろうが。
0712デフォルトの名無しさん
NGNGString#replaceAll()はJDK1.3以前にはなかったのですよん。
なんでなのでしょうかねえ。
0713デフォルトの名無しさん
NGNG俺は適度にオブジェクト、粒度が細かくなりすぎるようだったら
ユーティリティで分けてるけどなぁ。
それなりの人数が集まるプロジェクトだと、粒度を細かくしすぎると地獄。
小規模だったら理想どおりいける事も多いガナー
0714デフォルトの名無しさん
NGNG普通に文字列操作用のユーティリティクラスって意味だったんだが…
※コンストラクタをprivateにして、後はstaticね
いちいちアンタはプロジェクト毎に文字列クラスを作るのか?
0715709
NGNG0716山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0717デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNG,,,,,..,,.,.,,,
三 ミ,, ・д・ミ < ホッシュホッシュ!!
三 ミ,,,,,,,.,,.,.,,,ミ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
三 ( ・∀・∩ < それ今だ!! ホシュ━━━━━!!!!
三 ( つ 丿 \______________
三 ( ヽノ
三 し(_)
0720デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNG中級プログラマにとっての神様が、神様(ほんもの)にはまってるのは
なんというか、結構びっくり。 プロテスタントの方なんかな。
デザインパターンでいうと 「神様」 はなんだろうな。
ていうかパターンの外ってことでJavaでいうなら 神=VM?
0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNGマジレスすんなよ。
0725デフォルトの名無しさん
NGNGSingletonパターンでの実装例のことなんですが、
例のこのままでは、インスタンスがdeleteされませんよね。
class Singleton{
public:
static void Delete();
};
void Singleton::Delete(){
if(_instance==0) delete _instance;
}
こんな感じのを加えたらいいんですか?
0726デフォルトの名無しさん
NGNGSingletonのインスタンスはたいてい明示的に削除する必要がないから、
GoF本にはインスタンスの削除について触れてないんだと思う。
GoF本の例だと、Singletonパターンの使いどころとして
Abstract FactoryやBuilderの実装を挙げているけど、
こういった例ではインスタンスを削除する必要がない。
もちろん、あなたがSingletonのインスタンスを削除したくてたまらない
理由があるのならそうすればいいけど、多くのケースでは不要でしょう。
0727デフォルトの名無しさん
NGNGSingletonは公開したりしないと思うんだがね。
0728デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNG大体そんなもんです。
複数実装されたFactoryのエントリポイントをひとつにして集約しようという試みです。
個人的にはこれがデザインパターンに入っているのが不思議なのですが・・・。
0732デフォルトの名無しさん
NGNGそういう実装だとバグの元になりそう。
まだインスタンスを参照してるところがあるのに、うっかり削除してしまうとか。
0733デフォルトの名無しさん
NGNGたとえば、シングルトンとはいえ明示的にnew/deleteするような実装なら
コンストラクタで最初の一回だけポコッと作って2回目以降は再利用て、
デストラクタではカウンタがゼロになるまでは消さない とか。
まーいらんけどね。
0734デフォルトの名無しさん
NGNG構造化プログラミングもできないおバカがオブジェクト指向を始めてスパゲッティープログラムを作ると
そのスパゲッティ度合いは構造化プログラミング系言語の比ではなくなるんだな
それでチームリーダーやってんじゃねぇ、うぁぁぁぁもうマジで勘弁してくれよぉ
0735デフォルトの名無しさん
NGNG「シングルトンのインスタンスを作ったは良いけど、削除されない」のが心配なら、
Modern C++ Designに載ってるローカルstatic変数を使ったシングルトンは?
0736デフォルトの名無しさん
NGNG偉くなって直接言ってやれ。
0737725
NGNGデザインパターンって読めばすぐ使えるものでもないようですね。いろいろなパターンが相互に絡み合っていて難しい・・・。
>>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;
}
0738735
NGNGSingletonのインスタンスは、最初の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「パターンを全般的に扱うスレ」って遺言してるし、OKなんだね。
0740デフォルトの名無しさん
NGNG広い意味でデザパタの話ってことで。
0741デフォルトの名無しさん
NGNGこれを「GoF本のパターン」と呼ぶ。
0742山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0743山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0744デフォルトの名無しさん
NGNGこれは素晴らしいと自分でもやってみたのですが…。
例えばGoF本のように、図形オブジェクトを移動する様な場合、
実際にはマウス等で図形の移動操作をしている最中も、座標は変わりまくってると思うんです。
移動開始点から、終了点へ、Command->Execute()で一発…というイメージにはならないな、と。
この辺はやはり、多少汚くなっても妥協するしかないのでしょうか?
0745
NGNGそれだと静的変数のデストラクタからシングルトンオブジェクトを
安全に使えないよ。。シングルトンオブジェクトの寿命が何時尽きる
べきか、というのはケースバイケースだから、あまりデザインパターン
っぽい話とはなじまないような気がする。
0748744
NGNG0749デフォルトの名無しさん
NGNG渾身の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を実装できる。
0750749
NGNGUndo/Redoの中で、関連する情報も提供してあげられる。
0751744
NGNG遅レスですいません、昨日はずっとネットに張り付いてたのですが…。
偽Shapeを作って操作はそっちにしたり、あるいは全ての状態を逐一、保存してみたりと
今日一日とんでもないことをやっていました>汚く妥協
本当に丁寧な説明で、私にもようやく理解することができました。
確定時点でCommand生成すれば良いんですね。しかも生成された時点で
全ての情報が既に固まってるから、扱いもすごい容易で…。
Undoどころか、Redo(←考えてませんでした)も楽々ですねぇ…。
いやはや、感謝してもし足りません。ありがとうございました。
0752デフォルトの名無しさん
NGNG> >>197
> そういえば、StateとStrategyの違いってよくわからん。
State の別名が Strategy だと思っとけ。
0753デフォルトの名無しさん
NGNG漏れはStrategy自身が新しい他のStrategyを作るのがStateだと思ってる。
0754デフォルトの名無しさん
NGNGStrategyはPlayerアルゴリズムを動的にごっそり取り替えるパターンです。
TemplateMethodも似たようにアルゴリズムの切り替えを実現しますが、こちらは静的です。
Stateは状態をタイプコードではなくクラスそのものであらわすパターンです。
アルゴリズムの切り替えは行いません。
0755デフォルトの名無しさん
NGNG(テキスト中に現れる日本語一文字づつをオブジェクトとして扱いたい)
英語圏の人たちと違ってやるメリットは無いですかね?
結局参照用のFlyWeightPoolが膨大になって意味がない気もするんですが
0756無料動画直リン
NGNG0757デフォルトの名無しさん
NGNGそんなこたないんじゃないですか。使いそうな文字なんか結構決まっているような気もしますし。
ただメモリリークしないためにも、Poolできる最大文字数を決めておくのがよいかと。
0758山崎 渉
NGNG0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNG売り上げ集計表示。このとき最初にDBからメモリに展開してメモリから表示
させる。
DB構造としては
支社>部署>個人
という風になっていて(個人ごとに売り上げ額もってます)
支社別に表示、部署別に表示、支社別部署別に表示
させる場合(表示条件切り替え可能)
メモリに展開させるのに有効なパターンてありますか?
もし無いのであればどのようなメモリ展開でおこなえるでしょうか?
言語はJavaです
0761デフォルトの名無しさん
NGNG0762デフォルトの名無しさん
NGNGCompositeパターンによるツリー構造が基本?
データ量が多くてメモリ上限があるなら、弱参照によるキャッシュが有効かもな。
パターンと関係無いが。
0763デフォルトの名無しさん
NGNG>パターンと関係無いが。
Proxyか複数インスタンスのSingletonと言えなくもないかな。
0764山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0765デフォルトの名無しさん
NGNG0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNG0768デフォルトの名無しさん
NGNG0769デフォルトの名無しさん
NGNGMLに流れてきたのは驚きました。新手のウイルスかと思ったよ。
0770デフォルトの名無しさん
NGNG0771デフォルトの名無しさん
NGNG全てのコマンドに対して膨大なCommandのサブクラス群が…。
テンプレートも使えないし…こ、こんなもんですよね?ちょっと不安が…。
0772デフォルトの名無しさん
NGNG全てのサブクラスで処理手続きを分岐する必要がなければ、クラスは
処理の流れごとで纏めて、パラメータはコンパイルの必要のない外部
ファイル(XMLなど)に定義するとか。
どうせ定義情報は増えるけどさ。
0773デフォルトの名無しさん
NGNGレスを参考に再検討していました。
パラメータ化により、かなりの部分をまとめることができそうです。
ありがとうございました。
0774デフォルトの名無しさん
NGNGパラメータ化のところでStateパターンの併用も考える気がしる。
0775デフォルトの名無しさん
NGNGでかいクラスのごく一部だけ違う派生クラスをたくさん作る必要
が出てきた場合、その「ごく一部」だけを別クラスにしてState
にするのは好き。
でかいクラスのツリーが広がる代わりに、その小さいState
の方のクラスのツリーが広がって行く感じ。
Command でなく CommandType みたいな。
0776デフォルトの名無しさん
NGNG0777デフォルトの名無しさん
NGNG0778デフォルトの名無しさん
NGNG0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
NGNG意味なんてね――!!
スカッとするからしてるだけなんだよ このボケ――!!
というのはうそ。
同期処理とか、後から拡張とか継承とかが
追加できたりするから。
あとあと使いまわしが効くように出来てんのよ。
0781デフォルトの名無しさん
NGNG要するに、いつ(どのタイミングで)コンストラクタを走らせるかをコントロールしたい場合、
Singletonのパターンを使用しなきゃならない。
そうでなけりゃ、staticでも構わないよ。
0782デフォルトの名無しさん
NGNGttp://martinfowler.com/eaaCatalog/metadataMapping.html
のコード例はどこかにない?
できれば
ttp://martinfowler.com/articles/dblogic.html
のようにRubyで。
0783デフォルトの名無しさん
NGNG「ユニット」クラスを継承した「車両」「航空機」「艦船」クラスなどがあるとします。
各ユニットのインスタンスは他のユニットの位置・所属軍などのフィールドを認識して
行動する必要があるわけですが、これにはObserverパターンを使えば良いのでしょうか?
ユニットが増えると負荷が級数的に上がりそうですが・・・。
0784デフォルトの名無しさん
NGNGそこはMediatorの方がいいんじゃないかな。
全ユニットは司令部を経由して友軍の情報を得る、って感じ。
RMA以前の軍隊の乗りで。
0786デフォルトの名無しさん
NGNG0787デフォルトの名無しさん
NGNG志向じゃなくて指向。んで、適用できます。
0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNGそのとおり
デザパタは、中毒性の高い変態コーディング・テクニック集
使いすぎは禁物
0790デフォルトの名無しさん
NGNGなるほど。気をつけます。
0791デフォルトの名無しさん
NGNG0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNG読んでみたら、どうやら「何かあったら起こしてね」と
さっさと寝てしまうように感じたのですが、そんな解釈で
いいのでしょうか?
なにか他にいい別名とかついているのでしょうか?
0794デフォルトの名無しさん
NGNGPublish-Subscribe
0797デフォルトの名無しさん
NGNG一定周期毎にObserverがSubjectを参照ってとこか…。
あまりスマートじゃないね。ネットプルグラムなんかじゃありそうだけど。無いか。
0798デフォルトの名無しさん
NGNGメインスレッドからGetの進行状況表示及び、取得済みの部分の表示を行う場合、
どういうパターンにするのが適切ですか?
0799793
NGNG他のパターン名は、いろいろと変更があったものもあるとか
いうけど(6.2経緯)、Observerというパターン名には
そういう動きはなかったのかな
0800デフォルトの名無しさん
NGNG>>794
0801デフォルトの名無しさん
NGNGに見えてしまいます。
インターフェイスや抽象クラス使って多用性にしとけばパターンなんて
覚えなくてイイや!と思ってしまった僕は粛清されるべきですか?
0802デフォルトの名無しさん
NGNGせっかく勉強するなら、違いが分かる程度までは
理解しておいて損は無いでしょうな。
0803デフォルトの名無しさん
NGNGCompositeパターンを使いました。
そこまではいいんですが、このデータ構造をViewクラスに表示する時にはどうすればいいですか?
Viewクラスに色々処理を書けばいいんですか?
それとも、Mediatorとかいうパターン使えば良いんですか?
それとも、他にもっと良い方法がありますか?
0804デフォルトの名無しさん
NGNGVisitor+Commandかな?
規模によっては単純に、各Compositeに処理を書いてもいいかも。
0805デフォルトの名無しさん
NGNG描画処理とモデルを厳密に切り分ける必要がなければ、これが良いな。
GoFの例もそうなってる。
>Visitor+Commandかな?
Visitorと言うと、CompositeのComponentクラスとVisitorのElementクラスを
対応付るってことか。だがここでマルチディスパッチなんて必要かな?
YAGNIという言葉もあるわけだが。
Componentに描画メソッドを書けないなら、ここは型情報使ってもいいのでは?
各Component派生クラス用に応じた描画メソッドと、それらの描画メソッドと
Componentの実型を対応付けるテーブルを、外部のutilityクラスか何かに
用意して置くとかさ。Visitor使うにしても、実型に応じた書き分けはどうせ
必要なんだし。
グラフィカルな描画だけじゃなく文字列でのトレースも同じ仕組みでやりたい
といった新しい要件が出てきたら、そこでおもむろにVisitorにリファクタリング
すれば良いわけでさ。ま、リファクタリング禁止なら仕方ないかもしらんが。
あと、なんでCommandなのか分からなかった。
0806デフォルトの名無しさん
NGNGjavaだったらinstanceofと再帰で十分。ダブルディスパッチはあんましお勧めしない。
0807デフォルトの名無しさん
NGNGコマンドパターンを使って実現しようと思うんですけど、
漏れは変態ですか?
コンテナに対してコマンドを投げる。
コンテナは、全要素に対して command.Execute( 要素 ) を実行する...
0808デフォルトの名無しさん
NGNGだからそれがダブルディスパッチだっちゅーの。
0809デフォルトの名無しさん
NGNGダブルなの?
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNGそれはベストプラクティスパターンのEnumeration Method。
0812デフォルトの名無しさん
NGNG0813デフォルトの名無しさん
NGNGMonostateで十分じゃねーか!
0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNGSingletonなら複数の状態を持たせる事も出来るし、
非Singletonなオブジェクトとinterfaceを共有できる。
他にも利点はあるかもしれないが、
とりあえずMonostateはOOらしくないと思う。
0816デフォルトの名無しさん
NGNG大抵「プロセス全体で1個」でつかうみたいだけどさ。
「どこからでも簡単なパス指定でアクセスできること」は、「Single
tonの利点」ではないよね。グローバル変数の利点ですよ、それ。
0817デフォルトの名無しさん
NGNGパターン使いますか? 生成すべきオブジェクトのタイプ番号をストリーム
から読み込んでswitch文で切り替えて対応するコンストラクタを呼び出した
方が簡単だと思うのですが。
Product番号(タイプ番号)を与えるとそれに応じたProductを生成できる、
といってもproduct番号と対応するコンストラクタの呼び出しを事前に
登録しておかなければならないし、ましてやそのために関数ポインタまで
使うとなると、かえって問題を難しくしているように思えてならないのです。
0818デフォルトの名無しさん
NGNGやっぱりFactory Methodの理解が変ですね。逝ってきます。
でも、switch文でコンストラクタの呼び出しを切り替えた方が
簡単だと思うけどなぁ。
0819デフォルトの名無しさん
NGNGあとはあれだ
あれ
アトミックな参照・変更を保証したいときとか
えーと
うsp
0820デフォルトの名無しさん
NGNG| ほう、Singletonパターンですか?
\
 ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ・∀・) ∧ ∧ < な、なんですか?あなた・・・
( ⊃ ) (゚Д゚;) \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ____
 ̄ ̄ ̄日∇ ̄\|ThinkPad|\
 ̄ ========= \
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ・・・それって、全部 static にして
| ユーティリィティクラスにしたほうが早くないですか?
\
 ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ・∀・) ∧ ∧ < ・・・・・・
( ) (;゚Д゚) \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ____
 ̄ ̄ ̄日∇ ̄\|ThinkPad|\
 ̄ ========= \
0821デフォルトの名無しさん
NGNGFactory Method うんぬんより、switch/case と関数テーブルの違いだけになってない?
とりあえず種類が少なかったり、一度タイプ番号とオブジェクトの関係を決めたら変わらない
というのなら switch/case でもいいだろうけど、タイプ番号が追加される度に判断ロジックを
追加するのはあまりきれいじゃないと思う。
0822デフォルトの名無しさん
NGNGnamespaceに閉じこめるのは何が違うの?
0823デフォルトの名無しさん
NGNG>>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オブジェクトの中にデータと処理が含まれていて
複数のオブジェクトのデータがそれぞれ微妙に違っているからといって
その微妙に異なるデータに特化した処理をわざわざ新しく用意しません
データと処理を全く分けていない状態と
分けた上でその二者をオブジェクトの中に抱えるのとでは
データや処理の再利用性が違います。
処理と一体化されたデータはその処理にしか使えないため
汎用性の無いデータですし、
逆にデータと一体化された処理はそのデータでしか使えないため
汎用性の無い処理となります。
まず分けて、そのあと組み合わせればそのデータや処理は他でも使えます。
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デフォルトの名無しさん
NGNGGoF以外にももっとデザインパターンについて知りたいのです。
もっとデザインパターン、アーキテクチャパターンのサイトを教えてください。
0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNG0829デフォルトの名無しさん
NGNG>>821
>switch/case と関数テーブルの違いだけになってない?
確かに、Factory Methodパターンの話とは別の問題かも。
>>823
プロトタイプコードありがとうございます。まだ完全にわかってませんが、
コードの意味を考えてみます。
言い訳ですけど、
デザインパターンってGoFって孫子、呉氏の兵法書みたいです。
実戦を踏んでいる人には「あっ、これはあのこと言ってるんだ!」
と理解できるだろうけど、実戦を踏んでない人間にはピンと来ないのです。
0830デフォルトの名無しさん
NGNG本買え、海外のサイトもググれ
0831デフォルトの名無しさん
NGNGマ板をみるとデザインパターンの話をしても
プライドが傷ついたかのようにデザインパターンを嫌い、「遅い」などといってばかりなレスが目立ち、
普及して無いかのように見える。
日本ではオブジェクト指向を否定する香具師が多いくらいだから
デザインパターンの普及率はかなり低い?
そこで、デザインパターンを普及させるにはどうすればいいだろう。
もしかすると、多くの人は、既存のプロジェクトにデザインパターンが使えないと思い込んでいるかもしれない。
とりあえずかれらにAdapterパターンを説明すべき?
0832デフォルトの名無しさん
NGNGデザパタが多用されてるし、
EJB なんてデザインパターンの塊みたいなもんだし、
オブジェクト指向の言語はいずれにしろそういう形になっていくでしょう。
で、個別業務アプリだけ作ってる末端のプログラマーは、
わけも分からず、APIやフレームワークの仕様にあわせて作ってると。
それでも、APIやフレームワークの設計がよければ、システム全体としては、
デザパタ活用してることになる。
0833デフォルトの名無しさん
NGNGoo否定派デザパタ否定派はそれで設計するのに
時間がかかる人なんだよな。
慣れるには意欲がないとだめでしょ。諦めたり理解しようとしない人に
推し進めても効果ないと思うな
普及させるにはやっぱり個々の意識改革から変えていかないとねー
# 使いこなせてない人間が自分のスキル棚に上げて
# ぐだぐだ言うのはどうにかならんかね
0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNG0836デフォルトの名無しさん
NGNGこう来たら、こうするってのが脊髄反射的に作れるようになったら早く作れる物だと思うんだけどね。
習うより馴れろの典型だと思うんだけど。
自分はGoF以外のパターンは直感あるのみ、このパターンは良いものだって感じたらソレだってメモメモしてます。
#最近そこそこデザパタが使えるようになって思う事は
#勉強勉強って言っている奴にデザインパターンがまともに使える奴は居ない。
#どういう訳だか、設計設計って言っている奴にもデザインパターンがまともに使える奴は居ない。(藁
0837デフォルトの名無しさん
NGNG0838デフォルトの名無しさん
NGNGありがたさは肌身でわからんのよ。
0839デフォルトの名無しさん
NGNGその苦労を最小限におさえるために
多くのプログラマに使って欲しいと思うことがある。
一種の挨拶みたいなものだね。
「なるべく挨拶を心がけましょう。」
「なるべき綺麗な字で書きましょう。」
のように
デザインパターンを使うことがプログラマの習慣、常識になってほしい。
なんとか、デザインパターン文化を押し広げられたら・・・。
0840デフォルトの名無しさん
NGNGデザパタってそんなモンじゃねぇだろうとか思ったりもする
構造化プログラミングだって、ある種のパターンらしき物はあるし、
苦労したというなら、貴方の能力不足がたまたまOOのデザパタで解決しただけだよ
ついでに言うと、そんな事やったら嫌われるよ
0841デフォルトの名無しさん
NGNG0842デフォルトの名無しさん
NGNGC 言語の不便さはあるけど、その不便さとデザインパターンの便利さというのは
かなり方向性が違うと思う。
C のイヤナ点は STL とか Java とか後発のスクリプト言語がうまく解決してくれていることだと思うし。
「C で苦労したからデザインパターンで、、、」といわれると「???」と思ってしまう。
0843デフォルトの名無しさん
NGNG英語と俳句を比べるようなものだな。
0844デフォルトの名無しさん
NGNGGoFのパターンくらいすぐ頭に叩き込める
0845デフォルトの名無しさん
NGNGうん、うん、そう。
思うに、GOFでもなんでも、読んでみて、「こんなやり方があるのか」
じゃなくて、
「このやり方は、こう整理すれば ooの特性を生かして、スマートに実現できるのか」
「このやり方はこうういう名前で呼べばいいのか」
というのが、本当にわかったってことのような気がする。
真面目な話、C言語でやってたことを oo で実現するにはどうすればいいか、
という意味で参考になったことが多い。
で、C言語でやってたときは、「懲りすぎだ」、「意味がわからん」といわれてた事を、
「これはこれこれのパターンで・・・」といえるようになっただけでも、
かなりの進歩。
これは、C言語そのものの仕様の問題ではなくて、時期の問題
(デザインパターンが世にでてなく、Cが全盛だった)、
今なら、デザインパターンを C言語に適用して書くということもできなくはない
(まあ、今やるなら少なくとも C++ だけど。)。
そういう意味なら、
>>839
はわかる。
0846デフォルトの名無しさん
NGNGアルゴリズムとデザインパターンの関係ってどんな感じ?
0847デフォルトの名無しさん
NGNGまずは
Google「アルゴリズム デザインパターン 違い」
で調べてみてはいかがか。
0848デフォルトの名無しさん
NGNGBuilderではDirectorクラスがBuilderクラスの挙動をコントロールしますが、
Builderクラスでも同じように実現することは出来ないんですか?
どうして他のクラスにコントロールさせるんでしょうか?
0849デフォルトの名無しさん
NGNGたとえば、 C言語の qsort() 関数ありますよね。
で、qsort で並び替えに使われてる「アルゴリズム」が「クイックソート」。
ここで、qsort()関数の仕様を単純に、並び替えをしたい配列を渡す形式例えば、
void qsort( int *data )
とかにしてしまうと、ソートできるデータ形式や、ソートキー、ソートキーの評価基準などが、
一種類しかえらべなくなってしまう。
あるいは、
void qsortInt( int *data )
void qsortString( char **data )
のように、データ種別ごとに(アルゴリズムは同じなのに)別の関数にしなければならなくなる。
しかし、実際の qsort() の実装はこれをうまく扱えるようにしている。
こういった実装上の「うまいやり方」がパターンなんではないかと。
0850デフォルトの名無しさん
NGNGアルゴリズムはある種の問題に対する解法の事です。
で、沢山アルゴリズムを作ると、幾つかのアルゴリズムがよく似た構造をしている事がないかい?
その良く似た構造だけを取り出してきて、整理したものがデザインパターンって奴。
アルゴリズムに限らずプログラム中何度も出てくる構造を抜き出したものです。
>>848
とりあえず何も考えずに、実装しやすそうなパターンの方でプログラムすればいいです。
問題がでたとき、もういっぺん別のパターンの方が良くなかったか考え直してみればいいんです。
何回か書いていると第六感がビビビッと来るので、それが答え。
理屈を考えたらダメだね、デザパタは。
0851848
NGNG>理屈を考えたらダメだね
なるほど。とりあえずやれ、と。
とりあえず色々やってみます。ありがとうございます。
0852デフォルトの名無しさん
NGNG> 理屈を考えたらダメだね、デザパタは。
この一文は同意できないな。
いいたいことはわかるが。
誤解をうむ恐れが多すぎる。
パターンに名前をつけて、理屈で考えれるようにしたのがデザインパターンのメリットなんだから。
0853デフォルトの名無しさん
NGNGGoFを読んでないのか、読んでてそういう疑問が湧いたのか、それによって
答え方が違ってくるから、その辺返答キボンヌ
0854デフォルトの名無しさん
NGNG知らないのだけど、リスナーってオブサーバーのこと
でしょうか?
見ている人って能動的なイメージだけど聞き耳を立てて
いる人って受動的なイメージだ…
あえて言葉をかえたのでしょうか
0855デフォルトの名無しさん
NGNGオブザーバーとはちょっと違う気がする。
0856fofofo
NGNGvoid main()
{
int i;
printf("前方が危険な場合は車線をはみ出してもよい ○の場合は5\n");
scanf("%d\n",&i);
if(i<=5){
printf("正解\n");
}else{
printf("間違い\n");
}
}
0857fofofo
NGNGvoid main()
{
int i;
printf("前方が危険な場合は車線をはみ出してもよい ○の場合は5\n");
scanf("%d\n",&i);
if(i<=5){
printf("正解\n");
}else{
printf("間違い\n");
}
}
上のコードの間違いが分かりません(^^;)識別子pの前に;を付けろとのエラーが出たんですが意味がさっぱりわからないです
0858デフォルトの名無しさん
NGNGスレ違い。
C言語なら俺に聞け! Part 67
http://pc2.2ch.net/test/read.cgi/tech/1068464309/
0859デフォルトの名無しさん
NGNGおんなじ。
0860デフォルトの名無しさん
NGNGおっしゃるとおり、生成手順が毎回同じ場合はTemplateMethod(生成を行う場合はFactoryMethodとかAbstractFactoryとか呼びますが)を利用した場合とBuilderを適用した場合は当然Builderのパターンのほうが冗長になります。
ただしBuilderが解決する問題は、生成手順や生成対象のオブジェクトが状況によって毎回違うかもしれない場合です。
組立手順を表すクラスと、組立を行うクラスを分離することにより動的にそれらを切り替えることができたり、再利用性を高めることができるようになります。
0861デフォルトの名無しさん
NGNGGoF本ではよく、パターンの適用例に異なるプラットフォーム間の再利用性を挙げてるけど
複数のプラットフォームを経験してからじゃないと再利用できるコードは書けなんじゃないかと
思うのですが、そこんとこどうでしょうか?
「メッセージループって他のプラットフォームにもあんのか?」ってよく思いますし。
//ちなみに漏れはWindows環境しか知らない痛いプログラマですが、何か?
0862デフォルトの名無しさん
NGNGじゃあ、調べなさい
0863デフォルトの名無しさん
NGNG他人の書いた汚いコードを保守してみないと、保守性の高いコードは書けない。
しかしそれとデザインパターンに何か関係がある?
0864デフォルトの名無しさん
NGNG巨大になった理由はいろいろあるのですが、
とにかくいろいろ都合があって大きくなってしまいました。
分割にはいろいろな切り口があると思うのですが、
今回はステートパターンを作ってステートごとにクラスわけすることにしました。
そこで疑問。状態遷移のきっかけとなるメッセージには、
その状態に関連したコードが少なからず入ってしまい、少し気持ちが悪くなります。
たとえば、印刷中状態というステートがある場合、
印刷を開始するメッセージは、印刷状態オブジェクトではなく、アイドル状態オブジェクトが受けます。
つまり印刷開始メッセージで渡される各種印刷パラメーターとかの初期設定は、
印刷とは関係の無いアイドル状態オブジェクトが処理しなければなりません。
このような場合、みなさんはどうしてますか?
0865デフォルトの名無しさん
NGNGステートがメッセージを受け取るの?
何か間違っている気がする。
0866デフォルトの名無しさん
NGNG> つまり印刷開始メッセージで渡される各種印刷パラメーターとかの初期設定は、
> 印刷とは関係の無いアイドル状態オブジェクトが処理しなければなりません。
状態遷移と、メッセージの処理を分離した方が良いと思う。
メッセージを受け取った段階で、
入力: 現在の状態、メッセージ
出力: 次の状態
という関数なりテーブルなりを引いて状態遷移のみ行う.メッセージの処理は即座に行わず、
とりあえずキューに貯めておく。状態遷移が終わった後でキューからメッセージを取り出して、
具体的な処理を行う。(ステートパターン+コマンドパターン)
あと印刷状態を細分して,「印刷開始状態(ここで印刷関係のパラメタ設定)」「印刷中状態」
「印刷終了状態」ぐらいに分割すれば? ステートパターンを使う場合,一つのステート中で
さらに複数ステートをネストして持っても OK だから、ステート分割の自由度は高いぞ.
0867デフォルトの名無しさん
NGNG> とにかくいろいろ都合があって大きくなってしまいました
設計能力がたりなくて、と正直にかきなさい。
0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNG最初はこじんまりしたクラスだったのが、あとからどんどん機能(メソッド)を追加していったとかって
体験したことない?
0870デフォルトの名無しさん
NGNG巨大になることはない。
0871デフォルトの名無しさん
NGNGうまく行きそうな気がしましたけど厳しいです。
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こんな感じのは?(言語はてきとー)
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>状態遷移と、メッセージの処理を分離した方が良いと思う。
それはもはやステートパターンじゃないのでは?
0876デフォルトの名無しさん
NGNGこれら以外のパターンを学ぶのに良い本とかWebページないかな?
0877デフォルトの名無しさん
NGNGJ2EEパターン
0878デフォルトの名無しさん
NGNGとりあえずPOSA本
0879デフォルトの名無しさん
NGNGへんな名前つけて終わり、なんてのじゃなくて、
もっと抽象データ型の関係を、数学から引っ張ってきた
概念で記述したりするような理論とかってないの?
GoFって名前だけ有名で現場じゃ全然浸透してないじゃん。
分った後の人が簡単だと思い込んでるだけで、
実際にはあいまいで分り難いものだからだと思うね。
0880デフォルトの名無しさん
NGNG> 概念で記述したりするような理論とかってないの?
"Algebra of Programming"。
…あなたが期待するようなものでは絶対ないけどね。
0881デフォルトの名無しさん
NGNG0882デフォルトの名無しさん
NGNG数学っぽい背景があるヤツだと Generics とか。集合論わかってると話が早い。
> GoFって名前だけ有名で現場じゃ全然浸透してないじゃん。
不幸な現場にいるな……。
0883デフォルトの名無しさん
NGNG>> GoFって名前だけ有名で現場じゃ全然浸透してないじゃん。
>不幸な現場にいるな……。
要するに類は友を呼ぶって事なのだろうね。
0884デフォルトの名無しさん
NGNG088582
NGNG「共有」で連想してしまうんですが。
0886デフォルトの名無しさん
NGNG> 数学っぽい背景があるヤツだと Generics とか。集合論わかってると話が早い。
集合論っつーか、モデル理論だね。
0887デフォルトの名無しさん
NGNG0888デフォルトの名無しさん
NGNG0889デフォルトの名無しさん
NGNG0890デフォルトの名無しさん
NGNG0891デフォルトの名無しさん
NGNG発揮すると思うのですが、そゆー本が皆無で困ってます。
ビル建設(マンション)の例えで言えば、個々の部屋の動線を考慮した、サニタリー
ルームとリビングの関係、天井高さ、床材、なんかが売掛買掛の世界なら、
今世の中に有るテザインパターンの本は、鉄骨の組み方、ボルト穴の配置、
ラーメン構造、基礎の配置って感じです。
0892デフォルトの名無しさん
NGNGどっちかつうとshared_ptrはProxyパターンでつ
0893デフォルトの名無しさん
NGNGアナリシスパターンがいいよ
0894デフォルトの名無しさん
NGNG>今世の中に有るテザインパターンの本は、鉄骨の組み方、ボルト穴の配置、
>ラーメン構造、基礎の配置って感じです。
それは、もともとそういう位置づけなんだよ。
アナパタになら財務とか会計とか取引とか載ってるよ。
089582
NGNGありがとうございます。今、GoFのProxyを読んでます。
smart pointerがありました(auto_ptrのことではないですよね?)。
More Effective C++では配列を例にとってで説明されていたので
「こういうときに使うもの」と狭い意味に考えていました。
Proxyっていろんな局面で使われているんですね。そのときが来るまで
後回しにしておく「遅延評価」に通じるような機能も持たせることができ
るし。。。「なりすまして、Side Effectをもたらす」という意味では共通
しているんでしょうけど、どうでしょうか?
もう一つ、質問させて下さい。More Effective C++で述べられている
「参照回数計測」とFlyweightの間には関連があるんでしょうか?
(C++スレに逝け!と言われそうなのは承知してます)
0896デフォルトの名無しさん
NGNGそっかぁってアナリシスパターンかぁって斜め読みしてみたけど、
アナパタって毛唐の文化が強すぎて.。o○
毛唐と和の心はちょっち違うじゃん?
出てる本もパターンカタログってより、カタログの作り方だし。
純日本建築のアナパタが欲しいのに、2*4のアナパタではなぁって思わん?
だれか書いてくれ、日本向けアナパタカタログ集。
089782
NGNGauto_pointerも一種のProxyかも。。。
0898デフォルトの名無しさん
NGNGそもそも、auto_ptr はスマートポインタの一種だ。
0899デフォルトの名無しさん
NGNGアジアで協同してモデリングしていこうっつーのもあるよ。
http://www.umtp-japan.org/
0900デフォルトの名無しさん
NGNG0901デフォルトの名無しさん
NGNG自分が知らず知らずのうちに考えていたことのほとんどがGoFの本とやらに
書いてあるみたいやね・・・今日、今から買ってきて読もうっと・・・
0902デフォルトの名無しさん
NGNGおらもデザインパターンやるっぺ。
0903デフォルトの名無しさん
NGNG勉強したけど、周りがついてこないんだっぺ。
一人でやっても嫌がられるだけなんで封印したっぺ
0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNGたとえば、全アプリケーション中に、
Application というクラスのグローバルインスタンスがひとつだけあるようにしたいと。
だけど、普通に書くと、Application のインスタンスは複数作ることが出来るわけ。
Singleton を使うと、インスタンスの複数生成を抑制することが出来る。
これが、グローバルインスタンスとの最大の違い。
0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNG0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNG0912デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNGCompositeパターンをテンプレートクラスとして実装しようとしてるんだけど、
テンプレートにしちゃうとメンバ関数を仮想関数にできませんでした。
ツリーを探索する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デフォルトの名無しさん
NGNGtemplate <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そんなことせんでもグローバルかどうかなんてアフォでも分かる。
ひとつのテクニックとしては分かるけど、パターンに入れること自体アフォ。
∴GoFはアフォ。
0917デフォルトの名無しさん
NGNGアフォはそうでない人の想像を越えることをしでかす。
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG> パターンに入れること自体アフォ。
よくあるパターン批判にしか聞こえない
0920デフォルトの名無しさん
NGNG常識的なパターンに名前がついていることでたまに意思疎通がしやすくなる程度。
それぐらいの価値。
0921デフォルトの名無しさん
NGNG0922デフォルトの名無しさん
NGNG0923デフォルトの名無しさん
NGNG0924デフォルトの名無しさん
NGNG一応こんなのものある。
Design Pattern for Computer Games
http://www.mine-control.com/zack/patterns/gamepatterns.html
0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNGウインドウシステムを例に挙げるほうが分かりやすいんじゃないかな。
0927デフォルトの名無しさん
NGNG>常識的なパターンに名前がついていることでたまに意思疎通がしやすくなる程度。
>それぐらいの価値。
当たり前だ。もともとパターンってその為にあるんだろ?
0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNGまあ、バレーボールのAクイックとかBクイックとかと似たようなもんだ。
ってのはどこで見たんだっけ。
0930デフォルトの名無しさん
NGNGこれまで一度も読んだ事なかったんだけど、
今週、勉強会で使いました。
結果:確かに23パターン並べているんだけど、
GoF本中途半端に要約してJavaのソース付けただけ、
って感じで、非常にガッカリしますた。
0931930
NGNG・動機付け
これは GoF本にも言える事だけど、
確かに他人のソースや自分のプログラミングで
発生するパターンなんだけど、
動機付けが妙に不自然、説明が不充分なパターンが、
いくつか存在する。例えば Singleton, Factory Method。
GoF本つったって、Dr.Gamma (某マンガ思い出したw)が
学位論文として書いたのが元ネタだから、苦し紛れな説明でもしょうがないのかな?
その苦し紛れな動機付けを、後発の本がそのまま載せてしまうというのは、
正直、結城氏の見識を疑う。
・Java技術の現状への橋渡し
例えば、Mediatorのサンプル。
GUIコンポーネントをサブクラス化し、
イベント伝達機構を不自然な形で使用 (コンポーネントをリスナーにする)
してまで、Mediatorの例、作るのは、いかがなものか、と。
素直に、現在のJavaGUIプログラミングは、
ObserverパターンとMediatorパターンのミックスだと、
説明した方が、役に立つ
・関連パターンの説明
これも、単なるGoF本のコピーで、掘り下げなんて皆無。
0932デフォルトの名無しさん
NGNGドメイン分析とMammal,Carの関係を教えて。
0933930
NGNG勉強会でこの本使ったおかげで、毎日下準備に苦労させられた。
この本読んで、パターン理解した気になってる人が居たら、怖い。
パターンなんて、新人が暗記して覚えればいいもんじゃないんだぞ、
学生時代からプログラミング本気でやってる人間が、2〜3年したら見えてくるもんなんだぞ、と。
質問:デザパタ結城本て、本当にいい本だと思いますか?
Yesな方は、その理由を教えてくだちい。
0934デフォルトの名無しさん
NGNGオブジェクト指向プログラミングの古文書引きながら理解するもんであって、
概念コピー&パターン文書のパターンを無視してる結城本はナンセンス。
0935デフォルトの名無しさん
NGNGレスつける資格なし・・・。
0936デフォルトの名無しさん
NGNG専門家の目に耐えられる内容なのかなw
今日、本屋で見かけたけど、怖くて手にとらなかったw
彼は結局、ナニする人なの?
要約本執筆のできるプログラマ?
0937デフォルトの名無しさん
NGNG取っ掛かりとして「優しい」本からはじめられるのは良いことだと思うよ。
GoF 本しかなかったらデザパタ知る気になる人がどれだけいたかね?
0938デフォルトの名無しさん
NGNGその分、言語にこだわらないでパターンの抽象を学べたよ。
何度読んでも美味しい本だ。
「GoFのデザインパターン」を学ぶなら、GoF本1冊で充分。
0939デフォルトの名無しさん
NGNG0940930
NGNGGoF本は、説明が読みにくい部分や、定義が曖昧な部分含めて、
するめみたく、読むば読むほど美味しいのする、良書だね。
その読みにくさや、曖昧さを排除して、素人にわかりやすくした結果、
ジャンク・フードが出来ますた、という感じ>>デザパタ要約本
ジャヴァワールド連載記事は、生の感覚で書いてあるから、なかなか好印象なんだけど。
0941デフォルトの名無しさん
NGNGDQNPGを使わなきゃ成り立たないこの世の中で、需要は大きいからな。
まあ、ジャンクを悪いと言うつもりはない。
0942デフォルトの名無しさん
NGNGスレ違いだが一応。とりあえず件の暗号本は買ってあったんで。積ん読だけど。
で、そもそも
>専門家の目に耐えられる内容なのかなw
という発想がまず違うんじゃないかと思う。求めるものが違うというか。
本気で専門にやる気はなくて「へぇ、こういうもんなのか〜」と理解した気になりたい人向けだと思う。
↓参考: Amazon の書評、レビュー
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797322977/ref=sr_aps_b_/249-2654937-2098752
狙ってジャンク・フードを作ってるなら意味のあることだと思う。
教科書と啓蒙書、対象は違うけど両方必要でしょ?
0943デフォルトの名無しさん
NGNG単に、「俺はジャンクフードは要らない」、っているだけ。
ジャンクフードしか食えない人に、スルメ食えとは言えない。
0944デフォルトの名無しさん
NGNG禿同。
GoFをちょっと勘違いして要約してまとめましたって感じで、
いろんな意味を含めて、それなりに参考にはなるけど、
デザパタを身につけたかったら、GoFの翻訳本で十分だと思うな。
Javaな人ならまだちょっとは意味あるけど、C++な人なら絶対、GoFの方がいいぞ。
コンパイルが通るソースなんていらないし。
あと、結城本に欠落しているのは実践だと思う。
著者自身がその経験がないのでどうしようもないかな。
中規模のフレームワークを実践しながら構築していく本とかが欲しいな。
パターンハッチングの2章をかなり膨らましたようなやつが読みたい。
0945デフォルトの名無しさん
NGNGふつー、暗号技術大全と、あとPKIの実例載った本買うよな。
中途半端な知識の人が、中途半端な理解で書いた啓蒙書ほど苦痛な物は無いし。
0946デフォルトの名無しさん
NGNGSingleton と 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色々な言語によるお芝居を分析し、共通のシークエンスを抽出した文化人類学の文献とかに、
デザパタは似てる。(そんな研究があったのかは知らないが。)
そこにあるシークエンスたちは、読者に創造力さえあれば、
単独で感動を与えることすらあるのさ。
0954952
NGNG「言葉」というものについての思い入れの差があるな。
ちょっと反論。
>共通のシークエンスを抽出した文化人類学の文献とかに、
>デザパタは似てる。
抽出された概念は時を経るごとに巷間に伝わり、ついには
広辞苑に載るようになる。じつは辞書に載っている単語は全て、
そのような歴史の積み重ねによって作られてきたものばかりだ。
そして(ここが重要だが)辞書は決して言葉について「定義」はしない。
もともと出来ないのだ。
出来ることといえば、その言葉のイメージを連想させる読者の経験を
思い起こさせる言葉を列記することだけだ。
0955デフォルトの名無しさん
NGNGパターン一種類しか使わないって、あんまない。
・MediatorとObserverでGUIのアーキテクチャ、とか、
・MethodFactoryとSingletonでMetaObjectの代り、とか、
・TemplateMethodとStrategyでルールの山を整理、とか、
合わせ技で使うのが普通でしょ。(最後の例は、Ruleエンジン使いたいと思ってるけど)
そーゆー、組合わさってナンボのパターンを、一個一個切り離して、
組み合わせの妙を探索したり、
パターン間の相互作用を分析しようとしたのが、
GoF本の面白い所。但し、「関連するパターン」の掘り下げが足りないような気がする。
#そろそろアナパタ読み進めないと、ヤバいな・・・。
0956955
NGNGそれは違うよ。
他の人のソース読みこなし、自分のソースを洗練する訓練して無い人は、
やっぱ頭で判ってるつもりでも、とんでもないソース書いちゃうもんだよ。
経験して覚えろ。失敗から学べ。最初から複雑なパターンを使おうとせず、
シンプルなコードをリファクタリングで洗練する練習をすべきだ。
あと、「デザパタが簡単過ぎる」などと底が浅そうな発言してる暇あったら、
もっといろいろなパターンを勉強されてはいかが?
0957955
NGNGそ、そんな感じ。
自分で発見したパターンは、なかなか忘れないもんだけど、
人から聞いて覚えたパターンてのは、なかなか血肉にならないもんだ。
0958デフォルトの名無しさん
NGNG>それは違うよ。
???
まず、>>952 が何を言わんとしているのか
(というより >>955 による解釈だな)、
そして何処がどう違うのかを要約してくれないか?
一体 >>952 の何処から「デザパタが簡単過ぎる」
という珍説が導出されたのか知りたいものだ。
0959デフォルトの名無しさん
NGNG>>956
どういうソースを読みまくるのが良いのでしょうか?
実例を出してもらえると参考になりまつ。
0960930
NGNG>>959
SqueakのSmalltalkコード、
J2SEやらJ2EEのプロダクション・コード、
OO関係ないけど、*BSDやオプソ・サーバ類のコード、
ってあたりは、デフォルトでしょ。
あと、VC++ベースやMacOS Xのフリーウェア、言語処理系、Linux, GNU
なんてのにも目を通すと、
視点や趣味が違うと、ソースがかくも変わるのか、なんて視点が広がるよね
0961デフォルトの名無しさん
NGNGGoFの本とOOパターン修得の話をしていた気がするのだが。。。
0962デフォルトの名無しさん
NGNGえ、何か?
まるっきりスタンダードな、パターン学ぶ方法の話だけど。
0963デフォルトの名無しさん
NGNGきっと、Dr.Gammaかなw
じゃ、ET++ にも目を通せw
0964デフォルトの名無しさん
NGNGあなたが読んで感銘を受けたコードを教えてあげれば?
0965930
NGNG君自身の体験を語ってやれば良いでしょ。
俺の場合、DigitalkのSmalltalk/Vコードと、Minixコードと、DOSベースのマルチタスクカーネル、
あと 1990年以前にリリースされたほとんど全てのオプソ・言語処理系、が原点かな。
言語処理系のソースは、結構いろいろなパターンが使われていて、おもしろい
0966930
NGNG0967930
NGNG0968デフォルトの名無しさん
NGNGごめんな。
0969930
NGNG0970930
NGNGそんなに暇なら、Squeakの全ソース (Smalltalkコード部分)でも読んで、パターン抽出でもしてみたらw
0971デフォルトの名無しさん
NGNGどうやって勉強すればよいのでしょうか?
0972デフォルトの名無しさん
NGNG0973デフォルトの名無しさん
NGNG経験がなければ理論先行で頭に詰め込んでけばいいよ。
で、実際似たようなパターンに遭遇した・設計した場合にこんなもんかと
復習しながらデザパタの知識とのすりあわせをしていく。
で、さりげなく会社でデザパタ用語を撒き餌しながら同志を募っていくと。
ともかく言語の文法やその言語によるOOの手法ほど即効性はないから
最初は知識として持っておけばいいと思うよ。
実践におけるパターン認識能力は間違いなく高まるからさ。
ただお勉強の順番としては
文法、OO、UML、(中略)、、、、デザパタ
って気がするけどね。
0974デフォルトの名無しさん
NGNGコーディングをしつつ何度も読まないと身につかないでしょ。
実践と理論を行き来することで体感するしかないと思いますよ。
0975デフォルトの名無しさん
NGNG「あったあったそういう事」というような基本的なのばかりだから
0976デフォルトの名無しさん
NGNGそれはもう既に実践経験を積んでる、ということでしょ?
実践経験がないと読んでも理解は半分で終わります。
0977デフォルトの名無しさん
NGNGJavaやSmalltalkには定番があるんだけど、C++にはあんまり見当たらないし、
上でも例が上がってないね。
CppUnitぐらいしか読んでない。
0978デフォルトの名無しさん
NGNGじゃあソース書いて実践経験をつければいいのに
0979デフォルトの名無しさん
NGNGもとからそう言ってるやん。
読んで書いて書いて読んで。習うより慣れろ、と。
普通すぎる。。。
0980デフォルトの名無しさん
NGNGマチクタビレタ〜
☆ チン 〃 Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・) < 次スレまだ〜?
\_/⊂ ⊂_ ) \_____________
/ ̄ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| |
| 愛媛みかん |/
0981仕様書無しさん
NGNGConcreteProductごとに対応するConcreteCreatorを作るんだよね。
素直にConcreteProductをnewすればよさそうに思えてならない・・・
このパターンの意味ってなんですか?
どんなメリットがあるのでしょうか?
0982デフォルトの名無しさん
NGNG1対1ではなく、複数の種類の ConcreteProduct を作成する場合には意味がある。
「Productのセット」を切り替えるわけ。
この辺、デザパタの教科書には必ず書いてあるぞ。
0983デフォルトの名無しさん
NGNGお前らソフト屋はこんな本読んでる暇あったらとっととコーディングしろ。
こんなことに時間と頭使うな。
どうせ使い捨てのカスなんだよ。おめぇら。
0985デフォルトの名無しさん
NGNG使い道は2つ。
一つは、Baseクラスに*static*なFactoryMethodを定義して、その中で
必要なConcreteProductを生成するという方法。
拡張性がなくてカコ悪いが、サブクラスが固定的な場合は有効。
もう一つは、すでにあるインスタンスから、新しいインスタンスを生成するような、
Prototype的な使い方。Prototypeは、属性を引き継ぐが、FactoryMethodは、
属性を引き継がないくらいの違い。仮想コンストラクタと呼ばれる所以。
0986デフォルトの名無しさん
NGNGデザインパターンを勉強するときは、パターンごとに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デフォルトの名無しさん
NGNGInvokerの意味がわかりません。
大概のサンプルソースは
CliantがCommandを生成して
Invokerに渡してInvokerが実行
という感じみたいですが
CliantがCommandを生成してる時点でそのままCliantが呼んでも
あんま変わらないような気がするんですが・・・
0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNGクライアントがInvoker使うのなら、そうだろうな。。とだけ、言っておこう
0990デフォルトの名無しさん
NGNG必要性がないならシンプルな方法で組んだほうがよい
なんでもかんでもデザパタを適用すればいいってものではない
修正の影響範囲を最小限に抑えるという原則に従っていけば
そこに必要性があればデザパタの各クラスの役割も見えてくる
面倒なだけだと思えるのなら必要性がないということ
自分の書いたコードを仕様から修正・拡張しながらリファクタリングしていけば
勉強になるんじゃないかな
サンプルだけで覚えても使える勉強にはならんよ
0991デフォルトの名無しさん
NGNG>デザインパターンの骸骨たちって既出?
あそこはわかりやすいから、漏れもよく見るよ
で、6で既出だな。
0992デフォルトの名無しさん
NGNGども
0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNGInvokerは、実行キューだと思えばいい。
例えば、サーバーシステムを考えてみる。
サーバーでグラフを出力するような重い処理をしているときに、なにも
考えずに、グラフ出力用の同期関数を呼ぶと、グラフ出力処理をしている
間、他のクライアントはなにもできなくなってしまう。(ブロックされる)
そこで、グラフ処理をスレッド化して、要求をキューに蓄積すれば他の
クライアントの要求をいったん受けて、あとで処理するようなことができる。
COMMANDは、GOF本で紹介されているようにマクロのようなバッチ的な
使い方もできるし、高度なフレームワークを構築することもできる幅の広い
パターンなので、もう少し経験を積んでからチャレンジしたほうがよいだろう。
0995デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998ようかんマン ◆CDzPHypGTA
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。