パターンと原理の違い


20

オブジェクト指向のデザインパターンと原則の違いは何ですか?それらは異なるものですか?私が理解している限り、両方とも共通の目標(柔軟性など)を達成しようとします。パターンは原則であり、その逆も言えると思いますか?

設計原理= SOLID(つまり、依存関係反転の原理)

デザインパターン= Gof(抽象ファクトリーパターン)

回答:


24

いいえ、それらは同じではありません。

パターンは、オブジェクト指向プログラミングの問題に対する一般的なソリューションです。(関数型プログラミングまたは宣言型プログラミングに関する類似の書籍は知りません。)このアイデアは、1995年にGang of Fourによって有名な「Design Patterns」の書籍で具体化されました。

アンドレが指摘するように、パターンはすべてのパラダイムで共通です。私は以前の声明を繰り返します。関数型プログラミングまたは宣言型プログラミングに関する類似の本はありませんが、アンドレは、彼が以下に提供したリンクで私の無知を修復しました。(ありがとう、アンドレ)

原則は特定の言語やパラダイムに関するものではなく、より一般的なものです。「自分自身を繰り返さない」-DRY原則-はすべてのプログラミングに当てはまります。


4
パターンはあらゆるパラダイムに存在します。Jeremy Gibbonsは、Patterns in Functional Programmingという本を書いています(そして、それについてはこちらでブログを書いています)。パターンは、その名前が示すとおりのものです-繰り返しデザイン、同様の問題を解決します。それらはどこにでもありますが、常にそれらを認識するとは限りません。
アンドレパラメ

@AndréParamésざっと目を通すと、ジェレミー・ギボンズがデザイン・パターンではなく、言語のイディオムについて話していると思うようになります。
イズカタ


19

これらの概念は同じではありません:

* 設計の原則:*ソフトウェア設計の原則は、不適切な設計を避けるために役立つ一連のガイドラインを表しています。のような:オープンクローズ原則

* デザインパターン:*デザインパターンは、ソフトウェア設計の特定のコンテキスト内で一般的に発生する問題に対する一般的な再利用可能なソリューションです。いいね:シングルトン


7

パターンは原則に対するものであり、実装はパターンに対するものです。

原則は「間接化」であり、これは「ファクトリー」パターンによって実現できます。これは、最終的にファクトリー・メソッドを持つクラスとして実装されます。


3

まあ、原則はルールであり、パターンはその具体例です。


1
例を挙げていただけますか?

工場または責任の連鎖またはフライウェイトを要求する原則を教えてください。
duffymo

2
たとえば、@ duffymo Well Factoryは、依存関係反転の原理(注入ではない)に従います。クライアントとインスタンスの両方が抽象化、つまりインターフェースに依存しています。責任の連鎖は、統制の疎結合と分離の原則に基づいています。フライウェイトはパフォーマンスの向上しかないと考えています。
m3th0dman

3

パターンは、原則よりも高度なものです。パターンは特定の問題を解決します。原則は、コンテキストに関係なくどこにでも適用できます。原則(SRP、DRYなど)に基づく実際のパターン

EG戦略パターンを見てみましょう。アルゴリズムのファミリを定義し、各アルゴリズムをカプセル化し、それらを交換可能にします。したがって、ここにはアルゴリズムの高レベルの概念があります。状態パターンを使用すると、高度な状態の概念が得られます。原則では、高レベルの概念はありません。原則は、目標を達成するためにパターンによって使用されるビルディングブロックです。Strategyパターンを実装するとき、SOLIDを使用します。

  • SRP-アルゴリズムを担当するコードを定義し、別のコードから抽出します。
  • OCP-すべての異なるアルゴリズムを表す抽象化を定義して使用します
  • LSP-クライアントコードで具体的なアルゴリズムクラスを使用せず、抽象化のみ

5
実際、パターンは原則よりも低いレベルです。つまり、パターンは、このコンテキストの原則よりも実際の実装に近いということです。つまり、原則は、一般的な設計ガイドラインを意味する原則と、特定のクラスの問題に適したソリューションを表すパターンを備えたパターンよりも抽象的です。

@Jarkkoは私の例を参照してください。レベルについて話したとき、パターンは原則に基づいており、その逆ではないことを意味しました。レンガは建物よりも高度なものではありません。

4
私はあなたがそれによって何を意味したかを見ることができ、問題に関するあなたの考えを理解することができます。ただし、ソフトウェアのコンテキストにおける「高レベル」と「低レベル」という概念の一般的な意味に反しています。(何らかの理由で私はあなたに@タグを付けることができません。)

1
「パターンは原則よりも高度なものです」。違いを請う==>パターンは実現に近い(つまり低レベル)が、原則は高レベルのルールです。
ラウル

2

アーキテクチャ用に最初に文書化されたパターン。建築では、部屋のドアの配置から村のレイアウトに至るまでに適用されます。

Gang of Fourはこのアイデアをオブジェクト指向プログラミングに適用しました。問題を解決するために使用できるパターンが複数ある場合がありますが、各パターンには特定の実装があります。他のプログラミング手法にもパターンがありますが、私は該当する本を知りません。他の人が言及したように、パターンは特定の実装を対象としています。適用されないパターンを使用することは、多くの場合、アンチパターンと見なされます。

原則は実装をカバーしませんが、標準的な実装アプローチがあります。原則は、特定の問題ではなく一般的な問題を扱うことです。Inversion of Controlについては、少なくとも3つの実装アプローチを認識しています。DRY(Do n't Repeat Yourself)の場合、特定の実装アプローチは1つしか知りませんが、いくつか使用しています。

検討する

  • プログラムを開発する唯一の方法として、Abstract Factory Patternのようなパターンを使用するように要求されました。これは適切でしょうか?いいえ、それはパターンの可能性が高いです。
  • すべてのコンポーネントにDRYを適用するように要求されましたか?これは適切でしょうか?はい、それは原則である可能性が高いです。

1

オブジェクト指向デザインの原則—

OOの原則は、OOPの概念を保証する一連のガイドラインです。これは、OOPの概念に基づいて、より良い方法、より良い設計を設計する方法を定義します。基本的なオブジェクト指向設計の原則はソリッドです。

デザインパターンは、デザインの問題に対する一般的なソリューションを提供します。「デザインパターン」は、正午のオブジェクト指向の単語にも適用できることに注意してください。したがって、OO設計パターン(OODP)は、オブジェクト指向設計ベースのOO原則に対する一般的なソリューションを提供するものです。設計パターンは発見されたものであり、発明されたものではありません。OODPを定義する方法はいくつかありますが、最も有名なものはBSC [Behavioral Structural Creational]です。

詳細な説明のリンクは次のとおりです。 http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.