練習する デザインパターンは、実績のある開発パラダイムを提供することで、開発プロセスを加速させることができます。[ 8 ] 効果的なソフトウェア設計には、実装の後半になるまで明らかにならない可能性のある問題を考慮する必要があります。新しく書かれたコードには、検出に時間がかかる隠れた微妙な問題が含まれていることが多く、これらの問題は後々大きな問題を引き起こす可能性があります。デザインパターンを再利用することで、このような問題を防止し、[ 9 ] パターンに精通している人にとってはコードの可読性を高めることができます。
ソフトウェア設計技術は、より広範な問題に適用するのが難しい。デザインパターンは、特定の問題に結びついた詳細を必要としない形式で文書化された一般的な解決策を提供する。
1996年、クリストファー・アレクサンダーは、 1996年のOOPSLAコンベンションで基調講演を行うよう招待された。そこで彼は、アーキテクチャにおけるパターンに関する自身の研究がどのように発展してきたか、そしてソフトウェア設計コミュニティがアーキテクチャにおいてパターンを拡張し、コンピュータコードのような生成スキームを用いた生きた構造を作り出すためにどのように貢献できるかについて、自身の希望を述べた。
モチーフ パターンとは、プロトタイプ的なマイクロアーキテクチャ とも呼ばれる設計モチーフを 、プログラム構成要素(クラス、メソッドなど)とその関係性として記述したものです。開発者は、パターンで記述された問題を解決するために、そのモチーフを自身のコードベースに適用します。結果として得られるコードは、選択されたモチーフと同様の構造と構成を持ちます。
オブジェクト指向プログラミング オブジェクト指向 設計パターンは、一般的に、クラス 間またはオブジェクト 間の関係性や相互作用を示しますが、最終的に使用されるアプリケーションクラスやオブジェクトの種類は明示しません。可変状態を暗示するパターンは、関数型プログラミング 言語には適さない場合があります。また、解決しようとしている問題に対する組み込みのサポートを備えた言語では、一部のパターンは不要になる可能性があり、オブジェクト指向パターンは必ずしも非オブジェクト指向言語に適しているとは限りません。
例 デザインパターンは、解決する問題の種類に基づいてグループ分けすることができる。
構造 構造パターンは 、クラスとオブジェクトを整理してより大きな構造を形成し、新たな機能を提供する。
行動 行動パターンと は、オブジェクト間の連携を記述するものである。
文書 デザインパターンのドキュメントには、そのパターンが使用されるコンテキスト、そのコンテキスト内でパターンが解決しようとする力、および提案される解決策が記述されています。[ 31 ] デザインパターンを文書化するための単一の標準フォーマットはありません。むしろ、さまざまなパターン作成者によってさまざまなフォーマットが使用されてきました。しかし、Martin Fowler によると、特定のパターン形式は他の形式よりもよく知られるようになり、その結果、新しいパターン作成の取り組みの一般的な出発点となっています。[ 32 ] 一般的に使用されているドキュメント形式の 1 つは、 Erich Gamma 、Richard Helm 、Ralph Johnson 、およびJohn Vlissides が著書『Design Patterns』 で使用しているものです。これには次のセクションが含まれています。
名前 パターンを識別したり参照したりするのに役立つ、説明的でユニークな名前。 意図 そのパターンが持つ目的と、それを使用する理由についての説明。 別名 この模様の別名。 モチベーション このパターンが適用可能な問題と状況からなるシナリオ。 適用範囲 このパターンが使用可能な状況、つまりパターンが適用される文脈。 構造 パターンをグラフィカルに表現したもの。クラス図 や相互作用図など が用いられる。 参加者 パターンで使用されているクラスとオブジェクト、および設計におけるそれらの役割の一覧。 コラボレーション このパターンで使用されるクラスとオブジェクトが互いにどのように相互作用するかについての説明。 結果 そのパターンを使用することによって生じる結果、副作用、およびトレードオフについての説明。 実装 パターン実装の説明。パターンの解決策部分。 サンプルコード プログラミング言語において、このパターンがどのように使用されるかを示す図。 既知の用途 このパターンの実際の使用例。 関連パターン そのパターンと何らかの関係を持つ他のパターン。そのパターンと類似のパターンとの違いについての考察。
以下の概念は、一般的な性質は似ているが、ソフトウェア設計パターンとは異なる。
ソフトウェアアーキテクチャパターン システムレベルで繰り返し発生する問題に対する再利用可能で実績のある解決策であり、システムの全体構造、コンポーネント間の相互作用、および品質属性に関連する懸念事項に対処します。[ 44 ] ソフトウェアアーキテクチャパターンは、デザインパターンよりも高い抽象度で動作し、より広範なシステムレベルの課題を解決します。これらのパターンは通常システムレベルの懸念事項に影響を与えますが、アーキテクチャパターンとアーキテクチャスタイルの区別は曖昧になる場合があります。例としては、サーキットブレーカー があります。 ソフトウェアアーキテクチャスタイル 全体のシステム構成を定義する高レベルの構造的組織であり、コンポーネントがどのように組織され、どのように相互作用し、それらの相互作用に対する制約を指定します。アーキテクチャスタイルには通常、コンポーネントとコネクタタイプの語彙、およびシステムのプロパティを解釈するための意味モデルが含まれます。これらのスタイルは、システム構成の最も粗粒度のレベルを表します。例としては、階層型アーキテクチャ 、マイクロサービス 、イベント駆動型アーキテクチャ などがあります。 実装パターン ベックは、一般的にクラス間の関係を記述するデザインパターンと、多くの場合単一のクラスに限定される実装パターンを区別している。 これを基に、イグルベルガー(2022) は、実装パターンを抽象化を導入しないプログラミングイディオム であり、実装の詳細レベルに存在するものと定義している。このため、実装パターンは一般的に実装言語に固有のものであり、 C++ ではコピーアンドスワップやRAII が 例として挙げられるが、他の言語では、このようなイディオムが真のデザインパターンとなる場合もある。
参考文献
引用文献 ↑ アレクサンドレスク、アンドレイ(2001)。『モダンC++デザイン:ジェネリックプログラミングとデザインパターンの応用 』 アディソン・ウェスリー。p. xviii。ISBN 978-0-201-70431-0 。 ↑ホーナー 、 マーク( 2005)。 「パターン」 。Pro .NET 2.0 Code and Design Standards in C# 。Apress。pp. 171–181。ISBN 978-1-59059-560-2 。↑ Cecilia, Jean (2026年6月10日). 「ソフトウェアアーキテクチャの存在論的変化:現代のプログラミング言語におけるデザインパターンの関連性」 . 2026年 6月10日 取得 。 ↑ Smith, Reid (1987). "Panel on design methodology: OOPSLA '87 Panel Session" . ACM SIGPLAN Notices . 23 (5). Association for Computing Machinery . doi : 10.1145/62138.62151 . Ward は、彼が「高度なウィザード」と呼ぶレベルでのプログラミングを過度に要求することに警告を発した。彼は、記述された「パターン言語」によって抽象化の選択と適用が大幅に改善されることを指摘した。彼は、新しい方法論をクリストファー・アレクサンダーのパターン言語の研究の適応に基づいて「設計と実装の負担の根本的な変化」を提案し、 テクトロニクス で開発されたプログラミング指向のパターン言語が同社のソフトウェア開発の取り組みを大幅に支援したと述べた。 ↑ Beck, Kent ; Cunningham, Ward (1987 年 9 月). オブジェクト指向プログラムのためのパターン言語の使用 . OOPSLA '87 オブジェクト指向プログラミングの仕様と設計に関するワークショップ . 2006 年 5 月 26 日 に取得. ↑ バローニ、アリーヌ・ルシア。ゲエヌーク、ヤン=ガエル。アルビン=アミオ、エルヴェ(2003 年 6 月)。 デザイン パターンの形式化 (レポート)。 EMNテクニカルレポート。 ナント : ナント国立高等技術産業技術センター。 CiteSeerX 10.1.1.62.6466 。 S2CID 624834 – ResearchGate 経由。 ↑ ビショップ、ジュディス(2007年12月)。C # 3.0 デザインパターン 。オライリーメディア 。ISBN 978-0596527730 。↑ Tiako, Pierre F. (2009年3月31日). 「RTPAを用いたデザインパターンの形式的モデリングと仕様記述」 . Tiako, Pierre F (編). ソフトウェアアプリケーション:概念、方法論、ツール、およびアプリケーション: 概念、方法論、ツール、およびアプリケーション . p. 636. doi : 10.4018/978-1-60566-060-8 . ISBN 9781605660615 。↑ Laakso, Sari A. (2003-09-16). "ユーザーインターフェースデザインパターンのコレクション" . ヘルシンキ大学、コンピュータサイエンス学部 . 2008-01-31 に取得. ↑ Heer, J.; Agrawala, M. (2006). "情報可視化のためのソフトウェア設計パターン" . IEEE Transactions on Visualization and Computer Graphics . 12 (5): 853– 60. CiteSeerX 10.1.1.121.4534 . doi : 10.1109/TVCG.2006.178 . PMID 17080809 . S2CID 11634997 . ↑ Dougherty, C.; Sayre, K.; Seacord, RC; Svoboda, D.; Togashi, K. (2009). Secure Design Patterns . Software Engineering Institute, CMU . doi : 10.1184/R1/6583640.v1 . ↑ Garfinkel, Simson L. (2005). Design Principles and Patterns for Computer Systems That Are Simultaneously Secure and Usable (Ph.D. thesis). MIT . hdl : 1721.1/33204 . ↑ Díaz, P.; Rosson, MB; Aedo, I.; Carroll, JM (2009年3月)「Webデザインパターン:ユーザーの目標とブラウジング戦略の調査」Pipek, V.; Rosson, MB; de Ruyter, B.; Wulf, V. (編) 『エンドユーザー開発 』第2回エンドユーザー開発国際シンポジウム、 Lecture Notes in Computer Science 、第5435巻、 ハイデルベルク: Springer Berlin 、pp. 186–204 、 doi : 10.1007/978-3-642-00427-8_11 、 ISBN 978-3-642-00427-8 。↑ Amshoff, B.; Dülme, C.; Echterfeld, J.; Gausemeier, J. (2015). "破壊的技術のためのビジネスモデルパターン". International Journal of Innovation Management . 19 (03). Imperial College Press : 1540002. doi : 10.1142/S1363919615400022 . ISSN 1757-5877 . ↑ プログラミングのパターン言語に関する会議論文集(年次、1994年~) ↑ Bloch, Joshua (2008). "項目37:マーカーインターフェースを使用して型を定義する" . Effective Java (第2 版). Addison–Wesley. p. 179. ISBN 978-0-321-35668-0 。↑ Mössenböck, Hanspeter (1999年7月) 「Twin – 多重継承をモデル化するための設計パターン」 (PDF) . 第3回国際アンドレイ・エルショフ記念システム情報学展望会議議事録 . PSI '99. ロシア、ノボシビルスク: Springer–Verlag . pp. 358–369 . ISBN 978-3-540-67102-2 。↑ シュミット、ダグラス C.、スタール、マイケル、ローネルト、ハンス、ブッシュマン、フランク (2000)。 パターン指向ソフトウェアアーキテクチャ、第 2 巻: 並行オブジェクトとネットワークオブジェクトのためのパターン 。ジョン・ワイリー・アンド・サンズ 。ISBN 978-0-471-60695-6 。↑ 結合特性 1 2 ガブリイェルチッチ、プリモシュ(2019 年 2 月 27 日)。 「パターンの紹介」。 Delphi を使用した実践的なデザイン パターン 。パックト出版。ページ 9–35。ISBN 978-178934324-3 。↑ Nagel, C.; Evjen, B.; Glynn, J.; Watson, K.; Skinner, M. (2008). "Event-based Asynchronous Pattern". Professional C# 2008. Wiley. pp. 570–571 . ISBN 978-0-470-19137-8 。↑ Francalanza, Adrian; Tabone, Gerard (2023 年 10 月). "ElixirST: Elixir モジュール用のセッションベースの型システム" . Journal of Logical and Algebraic Methods in Programming . 135 . doi : 10.1016/j.jlamp.2023.100891 . S2CID 251442539 . ↑ Schmidt, Douglas C.; Vinoski, Steve (1996 年 7 月~8 月) 「オブジェクト相互接続: マルチスレッド CORBA サーバーのための代替プログラミング手法の比較 (第 7 列)」 (PDF) . SIGS C++ レポート . S2CID 2654843 . ↑ ガブリエル、ディック 。 「パターン定義」 。 2007年2月9日に オリジナル からアーカイブ済み 。 2007年3月6日 に取得。 ↑ ファウラー、マーティン (2006-08-01)。 「ソフトウェアパターンの書き方」 。2007-03-06 に 取得 。 ↑ Norvig, Peter (1998). Design Patterns in Dynamic Languages . Object World. ↑ Hannemann, Jan; Kiczales, Gregor (2002). "JavaとAspectJにおけるデザインパターンの実装". 第17回ACM SIGPLANオブジェクト指向プログラミング、システム、言語、アプリケーションに関する会議議事録 . OOPSLA '02. pp. 161–173 . doi : 10.1145/582419.582436 . ISBN 1581134711 。↑ グラハム、ポール (2002)。 「リベンジ・オブ・ザ・ナーズ」 。 2012年8月11日 取得 。 ↑ Arnout, Karine Marguerite Alice (2004). From patterns to components (博士論文). スイス: ETH Zurich . doi : 10.3929/ethz-a-004715194 . hdl : 20.500.11850/72828 . ↑ Oliveira, BC d. S.; Wang, M.; Gibbons, J. (2008 年 10 月 19 日). "The visitor pattern as a reusable, generic, type-safe component" . ACM SIGPLAN Notices . 43 (10). Association for Computing Machinery : 439– 456. doi : 10.1145/1449955.1449799 . eISSN 1558-1160 . ↑ Meyer, Bertrand ; Arnout, Karine (2006 年 7 月). "コンポーネント化: ビジターの例" (PDF) . Computer . 39 (7). IEEE : 23– 30. CiteSeerX 10.1.1.62.6082 . doi : 10.1109/MC.2006.227 . S2CID 15328522 . ↑ Babar, Muhammad Ali; Kitchenham, Barbara; Maheshwari, Piyush (2006). "Assessing the value of Architectural Information Extracted from Patterns for Architecting" . 第 10 回ソフトウェアエンジニアリングにおける評価と査定に関する国際会議 (EASE) . doi : 10.14236/ewic/ease2006.6 . ISSN 1477-9358 . 2026 年 5 月 6 日 取得 。
参考文献 Alur, Deepak; Crupi, John; Malks, Dan (2003年5月). Core J2EE Patterns: Best Practices and Design Strategies (第2 版). Prentice–Hall . ISBN 978-0-13-142246-9 。 ベック、ケント ( 2007年10月)。実装パターン 。アディソン・ウェスリー 。ISBN 978-0-321-41309-3 。ファウラー、 マーティン (2002)。エンタープライズアプリケーションアーキテクチャのパターン 。アディソン・ウェスリー 。ISBN 978-0-321-12742-6 。ガンマ、エーリッヒ ;ヘルム、リチャード ;ジョンソン、ラルフ ; ヴリシデス、ジョン (1995)。デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素 。アディソン・ウェスリー 。ISBN 978-0-201-63361-0 . Wikidata Q126543992 . Beck, Kent ; Crocker, R.; Meszaros, G.; Coplien, JO ; Dominick, L.; Paulisch, F.; Vlissides, J. (1996年3月). 「デザインパターンに関する産業界の経験」(PDF) .第18回国際ソフトウェア工学会議議事録 . ICSE. ベルリン: IEEE . pp. 103–114 . doi : 10.1109/ICSE.1996.493406 . ISBN 0-8186-7247-1 . Wikidata Q140403193 . 2022年7月14日にオリジナル(PDF) からアーカイブされました。 イグルベルガー、クラウス(2022)。C ++ソフトウェア設計:高品質ソフトウェアのための設計原則とパターン 。カリフォルニア州セバストポル:オライリーメディア。ISBN 978-1-098-11316-2 . Wikidata Q140403021 . McConnell, Steve (2004年6月)「設計と構築」『Code Complete: A Practical Handbook of Software Construction』 (第2 版)Microsoft Press 、 73~ 124ページ。ISBN 978-0-7356-1967-8 。リチャーズ、マーク、フォード、ニール(2020)。ソフトウェアアーキテクチャの基礎:エンジニアリングアプローチ 。オライリーメディア。ISBN 978-1492043454 。 Zheng, J.; Harper, KE (2010年5月1日)「並行性設計パターン、ソフトウェア品質属性、およびその戦術」第3回マルチコア ソフトウェアエンジニアリング国際ワークショップ議事録 。IWMSE '10。南アフリカ、ケープタウン:Association for Computing Machinery。pp . 40–47。doi : 10.1145/1808954.1808964。ISBN 978-1-60558-964-0 . Wikidata Q140404313 .
さらに読む アレクサンダー、クリストファー ;石川、サラ;シルバースタイン、マレー;ジェイコブソン、マックス;フィクスダール=キング、イングリッド;エンジェル、シュロモ(1977)。パターン言語:都市、建物、建設 。ニューヨーク:オックスフォード大学出版局。ISBN 978-0-19-501919-3 。ベック、ケント (1997)。スモールトークのベストプラクティスパターン。プレンティス・ ホール 。ISBN 978-0134769042 。ボルチャーズ、 ヤン(2001)。インタラクションデザインへのパターンアプローチ 。ジョン・ワイリー&サンズ 。ISBN 978-0-471-49828-5 。ブリンチ・ハンセン、 ペル (1995)。計算科学研究:並列プログラミングパラダイム 。プレンティス・ホール。ISBN 978-0-13-439324-7 。ブッシュマン、フランク。ムニエ、レジーヌ。ローナート、ハンス。サマーラッド、ピーター (1996)。パターン指向ソフトウェア アーキテクチャ、第 1 巻: パターンのシステム 。ジョン・ワイリー&サンズ。ISBN 978-0-471-95869-7 。 コプリエン、ジェームズ・O. 、シュミット、ダグラス・C. (1995).プログラム設計のパターン言語 .アディソン・ウェスリー . ISBN 978-0-201-60734-5 。コプリエン、ジェームズ・O. 、ヴリシデス、ジョン・M. 、ケルス、ノーマン・L. (1996).プログラム設計のパターン言語 2. アディソン・ウェスリー . ISBN 978-0-201-89527-8 。エロランタ、ヴェリ・ペッカ。コスキネン、ヨハネス。レッペネン、マルコ。レイヨネン、ヴィル (2014)。分散制御システムの設計: パターン言語アプローチ 。ワイリー。ISBN 978-1118694152 。 ファウラー、 マーティン (1997)。分析パターン:再利用可能なオブジェクトモデル 。アディソン・ウェスリー 。ISBN 978-0-201-89542-1 。フリーマン、エリック;フリーマン、エリザベス;シエラ 、キャシー ;ベイツ、バート(2004)。ヘッドファーストデザインパターン 。オライリーメディア 。ISBN 978-0-596-00712-6 。 ホーマン、ルーク;ファウラー 、マーティン ;カワサキ、ガイ (2003)。ソフトウェアアーキテクチャを超えて 。アディソン・ウェスリー 。ISBN 978-0-201-77594-5 。 ガブリエル、リチャード ( 1996)。ソフトウェアのパターン:ソフトウェアコミュニティからの物語 (PDF) 。オックスフォード大学出版局 。p. 235。ISBN 978-0-19-512123-0 2003年8月1日にオリジナル(PDF) からアーカイブされました。Grand, Mark (2003年2月3日). Patterns in Java, Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML (第2 版). John Wiley & Sons. ISBN 978-047144933-1 。 Hohpe, Gregor; Woolf, Bobby (2003). Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions . Addison–Wesley . ISBN 978-0-321-20068-6 。 ホルブ、アレン (2004)。パターンのホルブ 。を押します 。ISBN 978-1-59059-388-2 。キルヒャー、ミヒャエル; フォルター、マルクス;ズドゥン、ウーヴェ(2005)。リモートパターン:エンタープライズ、インターネット、リアルタイム分散オブジェクトミドルウェアの基礎 。ジョン・ワイリー・アンド・サンズ 。ISBN 978-0-470-85662-8 。ラーマン、クレイグ (2005)。UMLとパターンの適用 。プレンティス・ ホール 。ISBN 978-0-13-148906-6 。Liskov, Barbara ; Guttag, John (2000). Javaによるプログラム開発:抽象化、仕様、およびオブジェクト指向設計 . Addison–Wesley . ISBN 978-0-201-65768-5 。マノレスク、ドラゴス;ヴォルター、マルクス;ノーブル、ジェームズ(2006)。プログラム 設計のパターン言語 5。 アディソン・ウェスリー 。ISBN 978-0-321-32194-7 。 Marinescu, Floyd (2002). EJBデザインパターン:高度なパターン、プロセス、イディオム . John Wiley & Sons . ISBN 978-0-471-20831-0 。 Martin, Robert Cecil ; Riehle, Dirk; Buschmann, Frank (1997). Pattern Languages of Program Design 3 . Addison–Wesley . ISBN 978-0-201-31011-5 。Mattson, Timothy G.; Sanders, Beverly A.; Massingill, Berna L. (2005).並列プログラミングのためのパターン . Addison–Wesley. ISBN 978-0-321-22811-6 。 シュミット、ダグラス C. 、スタール、マイケル、ローネルト、ハンス、ブッシュマン、フランク (2000)。パターン指向ソフトウェアアーキテクチャ、第 2 巻:並行オブジェクトとネットワークオブジェクトのためのパターン 。ジョン・ワイリー・アンド・サンズ。ISBN 978-0-471-60695-6 。シャロウェイ、アラン;トロット、ジェームズ・R. (2001).デザインパターン解説 第2版:オブジェクト指向設計の新たな視点 . アディソン・ウェスリー. ISBN 978-0-321-24714-8 。 Vlissides, John M. (1998).パターンハッチング:応用デザインパターン . Addison–Wesley . ISBN 978-0-201-43293-0 。ウィアー、 チャールズ;ノーブル、ジェームズ(2000)。『スモールメモリソフトウェア:メモリ制限のあるシステムのためのパターン 』アディソン・ウェスリー 。ISBN 978-0-201-59607-6 2007年6月17日にオリジナルからアーカイブされました。