「デザインパターンって、○○のようなもんだよ」

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
デザインパターンを知らない奴に「デザインパターンとは何か?」を説明するとき、
何にたとえて説明してる?
「そのココロは」的な解題があるとうれしいが、一言レスでもいいっす。

デザインパターンそのものについてだけでなく、派生的・関連するネタについての喩えも歓迎。
21:2001/07/09(月) 23:49
ちなみに自分は、
「デザインパターンはバレーボールの“Bクイック”みたいなもんだ」
と言ってる。

「ある決まった攻撃パターンに“Bクイック”という名前を付けて、
それをチームみんなが知ってることで、効率が格段に上がるんだ。
試合中に“お前はダミーとしてスパイク打つふりしろ、お前は…”って
いちいち布陣を説明するより“次はBクイックな”って一言で言える方が
ずっと便利だし、正確だろ?
同じように、よくありがちな設計パターンに、GoFっていう偉い奴らが
名前を付けたわけ。それをみんなが知ってれば、いちいち説明しないでも
“ここはCompositeパターンを適用して…”と一言で正確に伝わる。
便利だろ?」

ずっとこれで説明して特に不都合はなかったんだけど、新しいネタが欲しいっす。
3デフォルトの名無しさん:2001/07/09(月) 23:54
一人セクス
4デフォルトの名無しさん:2001/07/10(火) 00:03
>>2
鶴翼の陣形!とか言うわけですか(^^;;;;;

ていうか、喩えというよりも、Bクイックや鶴翼ってのもまた
それぞれの分野におけるデザインパターンの一種
そのものなんだよね。実際に使いこなせるほど
みんなが訓練済みだとまでは言えないけど、
でも名前くらいはみんな知っている。

新ネタは、むしろ要らないんじゃないかな。
喩えを使うまでもなく人々に理解して貰えてるんだから、
完璧に目的はたしてるじゃん。

というわけで、円満に、

ーーーーしゅーりょーーーーー

…かな?
5デフォルトの名無しさん:2001/07/10(火) 00:06
ただし、

>GoFっていう偉い奴ら

秀吉みたいなアイデアマンが、後になってから
新しいパターンを続々考案したりも、するけどな(わら
水攻めパターンとか。

秀吉の手は、道具(わら)さえ揃っていれば
実行することそのものはあんまりしんどくない
っていう辺りも、デザインパターンの要件を満たしてる
だろうな。超人的働きをしなくても使える作戦。
秀吉は名アーキテクトだったと言えよう。
6デフォルトの名無しさん:2001/07/10(火) 00:08
デザパタといえばここしかあるまいて。
http://www.hyuki.com/dp/cat_index.html
7デフォルトの名無しさん:2001/07/10(火) 00:09
「デザインパターンとは何か?」の説明についてはそんなんでいいんじゃない。
# ちょっと回りくどい気がしないでもないけど...

それよりは個々のパターンの適用例をGoFのものより
もっと卑近でシンプルなものを複数挙げて説明したほうが
イメージが湧きやすいと思う。

GoFの例は特殊とはいわないまでも(個人的に)馴染みの浅いものが多かったので。
8デフォルトの名無しさん:2001/07/10(火) 00:29
カーマスートラ
91:2001/07/10(火) 00:40

>>4-7
いや、パターンの意味は分かってても、
ソフトウェア工学的な“デザインパターン”というテクニカルターム(藁
とリンクしてない御仁は(自分の周辺には)多くてですね、
・でざいんぱたーんって何ですかぁ〜な後輩とか、
・がんばってGoF本買って読んでみたけどサパーリわからん
 →デザインパターンって何か知らんが難しそうで,とても適用できない
 と思ってる上司とか(*こっちの方が重要)
に、「別に大したことないんだよ」と心理的バリアを取り除いてあげたい
ってのが目的。
いきなり具体的なパターンについて説明するより、喩えで概念を説明する
ほうがフィットする場合があるかと思うですよ。

「デザインパターンとはパターンである」で充分といえば充分なんだけど、
喩えのバリエーションが知りたいぞと。みんなどうやって説明してるんかな
という興味。

>>4
「(デザイン)パターンとは既にある何か一連のものに名前を付けることであって、
ソフトウェア特有のものではない」
か。御意。

>>5
確かに、デザインパターンについても次々と新作(?)が現れてますな。

>>6
これはある程度分かってないと笑えないんじゃないかな?
分かってる人には非常に(・∀・)イイ!! けど。
結城のデザインパターン本は評判いいみたいだね。

>>7
新ネタがほすぃ〜
10名無しさん@お腹いっぱい。:2001/07/10(火) 00:43
ぶっちゃげていってしまえば、継承と合成の組み合わせしか
ないって考えて今勉強中。これって間違ってますか?>>1-9
11デフォルトの名無しさん:2001/07/10(火) 00:44
スポーツで説明するならカウンターとかどうかねぇ。

色々なスポーツにカウンターってものはあるが、それぞれ実装は違う。
だけど、相手を引き込んで逆襲する点では同じだ、とか。
違うか。まあいいや。
12デフォルトの名無しさん:2001/07/10(火) 00:48
>>10
そりゃまあ、バレーはサービスとトスとアタックしかないけどね。
13名無しさん@お腹いっぱい。:2001/07/10(火) 00:55
TempleteMethodとFactoryMethodってなにが違うのでしょうか?
子クラスにおいてなにをするか違うだけだと思ってますが、
これって間違ってますか?>>1-12 (10除く)

親クラスのメソッドがまず呼ばれてその処理中に子クラスの
処理を呼び出すのは一緒だと思うんですが。。。
14デフォルトの名無しさん:2001/07/10(火) 01:32
TempeteMethodをインスタンス生成に使ったのがFactoryMethod?
15デフォルトの名無しさん:2001/07/10(火) 01:33
Tempeteってなに?
16デフォルトの名無しさん:2001/07/10(火) 01:39
テンピートを知らんやつがいるなんて、レベル低いね。
17デフォルトの名無しさん:2001/07/10(火) 01:43
ごめん知らない。
18デフォルトの名無しさん:2001/07/10(火) 01:53
我々はボーグだ、防御スクリーンを降ろし降伏せよ。お前たちの生物学的特性と科学技術を我々の物とする。
それに付け加え、お前たちを我々の文化に従属させる。抵抗しても無意味だ。
19デフォルトの名無しさん:2001/07/10(火) 01:56
それがてんぴーと?
カコイイネ。

つづききぼんぬ。
201:2001/07/10(火) 03:15
>>10
んー…確かにそのとおりだけど、それって余り本質的でないような気がする。
「Javaには条件分岐はif~then~else と switch~case と while/until(節)しかない」
からといって、それが
「アルゴリズムを学ぶのが簡単である理由」にはならないって感じか。違うか。
ていうか、「継承と合成の組み合わせしかない」から何なんだろう?が分かってません。スマソ。

>>11
(・∀・)イイ!!
自分の“Bクイック”説明ではプロジェクト内での共通言語としてのメリットに
重きを置いてるけど、“カウンター”は「デザインパターンとは(一般的にいう)
テンプレートである」ということが分かる。
こうやっていろんな喩えを使うことで、デザインパターンのいろんな側面を
明確に伝えることができるんだな。∴もっといろんな喩えが知りたい。

>>13
Template Method パターンはより汎用的で、
それを応用したのがFactory Method パターンじゃないっけ?
(>>14と同じこと言ってますが)
Factory Method パターンの中には Template Method パターンと
同じ構造が含まれてるはず。(たしかProduct側;Factory側もそうだっけ)
ついでに、使用する側で
  AbstractFactory factory = new SomeConcreteFactory();
になるのが Factory Method パターンで、
  AbstractFactory factory = AbstractFactory.getFactory(クラス名);
になるのが Abstract Factory パターン(だとおもう)。

えーと、今後は名無しさんで発言します。
2113:2001/07/10(火) 05:00
>>20(1)
只今、GOFのお勉強中でして、TempleteMethodを覚えて初めて、
Javaのabstractクラスの使い方を覚えたところのヘタレです。
AbstractFactoryの使い方はまだやってなかったので上で書いて
頂いたことを元に勉強します。
ありがとうございました。

10で書いたことは何の意味もないことですね。
継承、合成を組み合わせて初めて効果が出てくるところは、
分岐やループと同じかもしれませんね。

制御構文=継承、合成
アルゴリズム=個別パターン
???=複合パターン  だとするなら

???のところには何が入るのでしょうね

頭まったく動いてません。今日はもう眠いのでもう寝ます。
22デフォルトの名無しさん:2001/07/10(火) 07:06
デザインパターンじゃない?
23デフォルトの名無しさん:2001/07/10(火) 08:12
>継承と合成の組み合わせしか

ソノトオリなんだけど、それはパターンの話をするときには
分解しすぎっすね。砂漠で風紋の綺麗さを語ろうとしてるときに
砂粒1つづつの話をおっぱじめるようなもんで。

デザパタを考えることってのは、
単細胞生物と多細胞生物の差を考えること
じゃないかと思う。
#こらそこ。どっかで聞いた話だ、とか言うな(わら

個々の細胞が役割分担して然るべきレイアウトを取ることで
一個の生物(=アプリ?)が成り立つ、と。
体内のあちこちには、色んな細胞のレイアウトのパターンが存在する、と。
血管張り巡らすぞパターンとか、免疫パターン(??)とか。

心臓は心臓の、胃は胃の、それぞれのパターンがある、と。
どんな細胞の組み合わせ方をされているか?によって
その臓器を心臓とか血管とか呼ぶわけで。
24デフォルトの名無しさん:2001/07/10(火) 08:23
サッカーでいうセットプレーみたいなもんだ!
(あ。バレーでも同じだな。すまん)

相談し、次はこの作戦でやろう!と山を張る。
やってみる。
山が当たったらごーーーーーーる!
山が外れたら鬱ーーーーー

いや、山の話をしたかったんです(わら
デザパタってのは、1つの柔軟性を犠牲にして
別の柔軟性を得る、という節が有るので、
「山をハズしたら」ひどい事になる、ってのは
確かに言えるんだよね。

なので、設計ミスに対するリスク回避には、全然ならないんだよね。
一方それより下流のリスクは当然緩和してくれるけど。
つまり実装のリスク。予めBクイックなりをトレーニング
して身につけることで、実装リスクは下がるわけだ。
いつBクイックを使うべきか?の判断へのリスクか変わらないけど。
25デフォルトの名無しさん:2001/07/10(火) 10:01
>>24
共通の用語を使って議論しやすくなることで、
設計リスクも下がるのでは

と希望的観測に基づく発言
26デフォルトの名無しさん:2001/07/10(火) 10:38
>>8
(・∀・)イイ!!

ある意味そのとおりかも。んでもおいらただ絵が載ってるだけのしか見たこと無いんだけど、あれって文脈というかシチュエーション(プーッ)まで言及してるっけ?
27デフォルトの名無しさん:2001/07/10(火) 13:03
俺厨房のときバスケやってたんだけど、そのとき攻撃のパターンとして
「エイト」とか「逆エイト」とかやらされた(多分Bクイックみたいなもの)
でもバスケ初心者だったからとりあえず形を真似るだけだったのね。試合と
かでも使ってたけど、いまいち効果が分からなかった。
でも大学の授業で久々にバスケやったときにどうやったら相手のディフェンス
を振り切れるか?って試行錯誤していたら実はあの時のエイトや逆エイトが非
常に効果的だったって事が分かったのよ。
デザインパターンも同じだと思う。経験が少ないときに読んでもなにがしたいの
かよく分からないし、暗記してもほとんど役に立たないと思う。
28デフォルトの名無しさん:2001/07/10(火) 13:06
>ついでに、使用する側で
>  AbstractFactory factory = new SomeConcreteFactory();
>になるのが Factory Method パターンで、
>  AbstractFactory factory = AbstractFactory.getFactory(クラス名);
>になるのが Abstract Factory パターン(だとおもう)。
違う。AbstractFactoryはこうだ。
AbstractFactory factory = new ConcreteFactory();
foo.setFactory(factory);
Bar bar = foo.createBar();
Factoryオブジェクトを外から提供するのがみそ
29デフォルトの名無しさん:2001/07/11(水) 11:52
簡単に言っちゃぁ、デザインパターンって「クラス設計の定石」だわな。
将棋に例えて、矢倉、振り飛車、穴熊っていう方が近いね。
30デフォルトの名無しさん:2001/07/11(水) 17:28
>>29
まぁそれは、スポーツのBクイックとかとも同じことだな。
実際に盤に置かれた駒の配置や
実際にある瞬間の選手とボールの位置関係とかが
「実装」になるわけで。

ただ、失敗する可能性もある、という意味では
スポーツの喩えのほうがより生々しいが(わら
31デフォルトの名無しさん:2001/07/11(水) 18:09
>>28
おぉ、そうだったのか。逝ってきます。
Abstract Factoryパターンで初めて Class.forName()メソッドを知って感動したんで、
そこが肝だとばかり思いこんでた。

実務で

個々の業務(いわゆる個別のプログラム)に対応する外部設定ファイル(iniみたいなの)を用意して、
各ビジネスロジックとそれにフィットする Factory クラス(パス)を記述
 ↓
Abstract Factory パターンを使った汎用アプリケーション作成
(外部設定ファイルに記述されたFactoryクラスをClass.forName(〜)で生成)
 ↓
数個のバッチ + 十数個の画面 + 百数十本の帳票に対して
アプリケーションは1本でOK
 ↓
生産性高い&メンテ楽
 ↓
(゚д゚)ウマー

なんてことやってたんすよ。
32デフォルトの名無しさん:2001/07/12(木) 09:57
>>29
違うだろ、将棋にたとえたら「ダンスの歩」「つぎ歩」とか「端歩攻め」とかの
*手筋*だろ。
33デフォルトのやる気なし:2001/07/12(木) 10:29
>>29
「定石」は囲碁の用語で、将棋なら、「定跡」が正しい
とツッコミを入れておく。
34デフォルトの名無しさん:2001/07/12(木) 12:45
「定石」は「じょうせき」って読むんだよ。なーんてね

>>32
おれもそう思う。
守備陣形は全体における一部分って感じに、形が決まってるから、
どっちかってゆーと、フレームワークって例えの方が
あってると思う。
35デフォルトの名無しさん:2001/07/13(金) 09:18
デザインパターンはインターフェースが肝
インターフェースを使った同一視が肝

あとは↑を使っていろんなパターンを展開している

あってる?
36デフォルトの名無しさん:2001/07/13(金) 11:22
スレのタイトル、
「デザインパターンってObject Orientedのようなもんだよ」
かと思った。
37デフォルトの名無しさん:2001/07/13(金) 12:20
ていうか、デザインの、パターン、
じゃだめなん。とか
38デフォルトの名無しさん:2001/07/30(月) 05:03
デザインパターンとクラスって関係あるの?
39無名λ式:2001/07/30(月) 15:27
「定型文テンプレート集」のプログラミング版
40デフォルトの名無しさん:2001/08/09(木) 08:40
著しく既出かもしれないですけど結城さんのサイトの
http://www.hyuki.com/dp/cat_index.html
いいっすねえ(^^
41デフォルトの名無しさん:2001/08/09(木) 13:42
>>40
初めて知った、
(・∀・)イイ!!
42デフォルトの名無しさん:2001/08/10(金) 11:42
ネタ作りのパターンも研究してもらわんとな。
なんか全部同じだぞ
43u:2001/08/10(金) 12:22
めめんとlove
44Delギコ
               Λ Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                ( ゚Д゚)< >>40 >>6でガイシュツだ
             _φ_⊂)__ \_______________
           /旦/三/ /|
        | ̄ ̄ ̄ ̄ ̄|  |
        |愛媛みかん|/ ,
          ̄ ̄ ̄ ̄ ̄
                Λ Λ   / ̄ ̄ ̄ ̄ ̄
                (゚Д゚ )<  デザパ勉強中
             _φ_⊂)__ \_____
           /旦/三/ /|
        | ̄ ̄ ̄ ̄ ̄|  |
        |千葉ピーナッツ|/
          ̄ ̄ ̄ ̄ ̄