- - PR -
デザインパターンって使いますか?
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-23 12:09
永井です。
「GoFの23パターンを実際に使うか?」ですが。 先にも書かれていましたが、SingletonやTemplateMethod、Strategy、Adaptor辺りはよく使いますね。「限られたものだけだが、日常的によく使う」です。 Iteratorとかは自分ではあまり組まなくて利用専門な感じですが……。無意識で使わされているのもありますね。 #未消化にしているパターンの利用部分は「おまじない」だ……。いや、逆か。よく分からないけど「そう書くことになっている」のがパターンの利用部分……。
むしろ使わない方が良いときも多いですよね。メンバーのスキルレベルが足りない場合には面白い(実際には笑えないが)ことになったりもしますし……。 あまりにも華麗に隠蔽・分離されていると、保守する人が迷子になったりもしそうです……。 って言うか、要件上分離する必要がない(変更も考えられない)ところに無駄に凝るのもアレですし。 #そういうところに限って変更が出たりして泣く羽目になるのは内緒です --- 最後に雑談。 デザインパターンの最大の功績は「名付け」によるコミュニケーションの円滑化だと思います。おばけさんも仰ってることですが。 古くはアルゴリズムなどにも名前が付いていました(バブルソートとか、クイックソートとか)から、それ自体は業界的に全くの新世界というわけではないですが、共通語化してきたUMLなどと上手く結び付いて、オブジェクト指向プログラミングでの暗黙知の形式化・共有化に大きく貢献した(しつつある)のは間違いないですね。 ただ、まあ、このレベルでの「デザインパターン」(=ノウハウパターンの形式化)はあまり皆さんの興味に挙がらないようで、暗黙のうちに「GoFの23パターン」を指していることも多いですね。今回のスレッドもそうであろうと思ったので、そういう回答をしました。 確かに優れたパターンが多いのでソッチに興味がいってしまうのも仕方ないことかも知れませんけれど……。 (誰のせいかは分かりませんが)折角の意識レベルの変革のハズが、特定少数の事例に絞ってのみ適用されてしまうような事態に陥りかけていることは、寂しいことだと思います。 #最初に華々しく登場し過ぎたのかも知れません。もっと小出しになっていてくれれば群雄割拠で(混乱はあったかも知れませんが)面白かったでしょうに | ||||||||
|
投稿日時: 2004-02-23 13:07
はにまるです。
オブジェクト指向見習の発言ですが... デザインパターンを認識して利用しない限り、 「使ったとは言え無い」と考えます。 それは、 システムが本来、構成をパターン化しないと開発でも保守でも大変な事になる為、 昔から「暗黙的な構成パターン」は存在し、 この暗黙的な構成のパターンにメスを入れ形式化にしているのが「デザインパターン」である と私は考えている為です。 暗黙的にパターン化技術を使っている以上、昔と何ら変らないと考えます。 # ここは、永井和彦さんの仰る「意識レベルの変革」が非常に判り易い言葉と思います。 後、 サンプルプログラム、既存システムには、必ず暗黙的な構成パターンが存在するので、 それを認識した上で、該当システムにとって「デザインパターン」をどの様に摘要するか 明確にしておかないと、1つの似た構成に複数のデザインパターンが存在する 保守性の悪いシステムが出来上がると思います。 # 知識の形式化は、一貫して行わないと効果が薄れます。 クラスを継承又はインスタンス化するかの様に、 1つのデザインパターンから色々なデザインパターンを模索する事で、 「デザインパターン」がより一層生きてくると考えています。 オブジェクト指向言語に関わらず、 オブジェクト指向関連の技術書では、暗黙知の形式化・共有化(永井和彦さんの 言葉を御借りします)の一文をもっと大々的に記述すれば良いのにな..と思います。 「暗黙知の形式化・共有化」がオブジェクト指向を支える根幹の一つと思うのですが.. | ||||||||
|
投稿日時: 2004-02-23 13:12
個人的な見解ですが、デザインパターンが華々しい登場を遂げたのは
OOPブームという背景によるものが大きいのではないかと思います。 その実体としては、例えばCのアルゴリズム本などでよく見かける リストや木構造、ハッシュのアルゴリズムなどと似たような位置付けであると思っています。 つまり、本来はプログラミングの教科書に登場すべきものであるように感じるのです。 しかしながら、抽象化の概念を推し進めて来た結果、デザインパターンそのものの ボリュームが大きくなってしまい、まるで独立した分野であるかのような状況に 陥っているのではないかなと。 例えばリンクリストの一般的な実装を知らない人でも、なんだかんだ格闘して 独自のやり方で案件を満たす事は、おそらく広く行われている事でしょう。 (リンクリストを用いたのはあくまで例です。ちょっと極端ですが。) しかし、数人でコードを共有すべき場合は、一般的なロジックを取り入れている方が 速く理解を得られるであろう事は想像に難くありません。 このことはすなわち既に述べられているような、 名づける事でコミュニケーションが円滑に行えるメリットに通じるのでしょう。 つまり、各種方言がひしめく中に登場した、 ひとつの標準語と言えるのではないかと考えてます。 | ||||||||
|
投稿日時: 2004-02-23 13:16
こんにちは。
> デザインパターンを認識して利用しない限り、 > 「使ったとは言え無い」と考えます これにはすごく賛同しますね〜、 しかし、これは正しい考え方かどうかは個人それぞれでしょうね〜。 _________________ | ||||||||
|
投稿日時: 2004-02-23 14:51
賛成!私もまさにその通りだと思います。 僕が一番違和感をおぼえるのは「***パターンにしたいんだけど、なかなか難しー」とか言ってる人。 変にパターンにとらわれずに自分が良いと思うようにデザインしろよ。と言いたくなります。 | ||||||||
|
投稿日時: 2004-02-23 15:03
NAL-6295です。 おばけさんの発言、サさんの発言、双方ともに大賛成です。 ちなみに、サさんの言っている状況には、僕も違和感を感じます。 目的と手段を間違えている典型的な例かと・・・。 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-02-23 15:06 ] | ||||||||
|
投稿日時: 2004-02-23 15:06
ぼくはデザインパターンは考えるためのヒントとして使うために勉強しています。
何を考えるためかというと、OCPです。 (拡張に対しては開かれていて、修正に対しては閉じられている) デザインパターンのサンプルプログラムを見ていると、 「インタフェース」「抽象クラス」を如何に有効に使っているのかを 随所に見かけます。 特にパターンをあげてどうこう利用するというよりも、 サンプルプログラムを見て、 ・どうやったら上手にプログラミングができるのか。 ・具象に依存しない、拡張性に富んだ設計をすることができるのか? というエッセンスを得られれば良いなといった感じです。 良いプログラミングをするための一つの考え方(エッセンス)として デザインパターンを利用してみようかな、と最近は思ってます。 ###勝手に自分をお祝い。祝、投稿数100☆ | ||||||||
|
投稿日時: 2004-02-26 09:50
サさん 投稿日時: 2004-02-23 14:51
仰ることはごもっともだと思います。 ですが、私の場合はオブジェクト指向設計、デザインパターンに関して理解が浅いので、 学習の意味も含めて上記のような試行錯誤がどうしても必要になってしまいます。 ・こういう場合にXXXパターンを適用したらうまくいった ・こういう場合にXXXパターンを適用してみたけどイマイチだった という経験を重ねて、デザインパターンは身に付いていくのかな?と思っていますが、いかがでしょうか? | ||||||||
