web-dev-qa-db-ja.com

パターンと原理の違い

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

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

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

21
Chandi Gorom

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

パターンはオブジェクト指向プログラミングの問題の一般的な解決策です。 (関数型プログラミングや宣言型プログラミングに関する同様の本は知りません。)このアイデアは、1995年のギャングオブフォーによる有名な「デザインパターン」の本で具体化されました。

Andreが指摘するように、パターンはすべてのパラダイムで共通です。前のステートメントを繰り返します。I'm関数型プログラミングまたは宣言型プログラミングの同様の本を知りませんが、Andreは以下のリンクを使用して私の無知を直しました。 (ありがとう、アンドレ。)

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

24
duffymo

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

*設計原則:*ソフトウェア設計の原則は、設計の不良を回避するのに役立つ一連のガイドラインを表しています。 like:Open Close Principle

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

19
amicngh

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

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

7
K..

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

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

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

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

3
Ahmad

もともとアーキテクチャーについて文書化されていたパターン。建築では、部屋のドアの配置から村のレイアウトまでさまざまなものに適用できます。

ギャングオブフォーは、このアイデアをオブジェクト指向プログラミングに適用しました。問題の解決に使用できるパターンは複数ある場合がありますが、各パターンには特定の実装があります。パターンは他のプログラミング手法にも存在しますが、該当する本は知りません。他の人が述べたように、パターンは特定の実装をカバーしています。適用されないパターンを使用することは、しばしばアンチパターンと見なされます。

原則は実装をカバーしていませんが、標準の実装アプローチが存在する場合があります。原則は、特定の問題ではなく、一般的な問題をカバーすることです。制御の反転については、少なくとも3つの実装方法を知っています。 DRY(Do n't Repeat Yourself)の場合)いくつかの方法を使用していますが、単一の特定の実装アプローチについては知りません。

検討する

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

OO設計原則—

OOの原則は、OOPコンセプトを保証する一連のガイドラインです。OOPコンセプトに基づいて、これはより良い方法、より良いデザインを設計する方法を定義します。基本的なOO設計原理はソリッドです。

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

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

1
Tanzy