Unterschied zwischen Muster und Prinzip

20

Was ist der Unterschied zwischen objektorientierten Entwurfsmustern und Prinzipien? Sind sie verschiedene Dinge? Nach meinem Verständnis versuchen beide, ein gemeinsames Ziel zu erreichen (z. B. Flexibilität). Kann ich also sagen, dass ein Muster ein Prinzip ist und umgekehrt?

Konstruktionsprinzip = SOLID (dh Abhängigkeitsinversionsprinzip)

Entwurfsmuster = Gof (dh abstraktes Fabrikmuster)

Chandi Gorom
quelle

Antworten:

24

Nein, sie sind nicht gleich.

Muster sind übliche Lösungen für objektorientierte Programmierprobleme . (Mir sind keine ähnlichen Bücher für funktionale oder deklarative Programmierung bekannt.) Die Idee wurde 1995 in dem berühmten Buch "Design Patterns" der Gang of Four kristallisiert.

Wie Andre betont, sind Muster in jedem Paradigma gemeinsam. Ich werde meine vorherige Aussage wiederholen: Mir sind keine ähnlichen Bücher für funktionale oder deklarative Programmierung bekannt, aber Andre hat meine Unwissenheit mit dem unten angegebenen Link behoben. (Danke, Andre.)

Bei den Grundsätzen geht es weniger um bestimmte Sprachen oder Paradigmen, sondern allgemeiner. "Wiederholen Sie sich nicht" - das DRY-Prinzip - gilt für alle Programmierungen.

Duffymo
quelle
4
Muster existieren in jedem Paradigma. Jeremy Gibbons schreibt ein Buch mit dem Titel Patterns in Functional Programming (und bloggt hier darüber ). Muster sind genau das, was der Name sagt - wiederkehrende Designs, die ähnliche Probleme lösen. Sie sind überall, obwohl Sie sie vielleicht nicht immer erkennen.
André Paramés
@ AndréParamés Ein kurzes Durchblättern lässt mich glauben, dass Jeremy Gibbons von Sprachidiomen spricht , nicht von Designmustern.
Izkata,
@Izkata Nicht-OOP-Entwurfsmuster?
Roc Martí
19

Diese Konzepte sind nicht gleich:

* Konstruktionsprinzip: * Die Konstruktionsprinzipien für Software stellen eine Reihe von Richtlinien dar, die uns dabei helfen, ein schlechtes Design zu vermeiden. wie: Open Close Prinzip

* Entwurfsmuster: * Ein Entwurfsmuster ist eine allgemeine wiederverwendbare Lösung für ein häufig auftretendes Problem in einem bestimmten Kontext im Software-Entwurf. Wie: Singleton

Jennifer S
quelle
7

Muster sind zu Prinzipien, was Implementierungen zu Mustern sind.

Ein Prinzip wäre "Indirektion", was durch ein "Factory" -Muster erreicht werden könnte, das am Ende als Klasse mit Factory-Methoden implementiert wird.

K ..
quelle
3

Nun, Prinzipien sind Regeln, während Muster ihre konkreten Beispiele sind.

Ahmad
quelle
1
Können Sie einige Beispiele nennen?
Bitte teilen Sie uns das Prinzip mit, das eine Fabrik, eine Verantwortungskette oder ein Fliegengewicht erfordert.
Duffymo
2
@duffymo Well Factory folgt zum Beispiel dem Dependency Inversion Principle (nicht Injection); Sowohl der Client als auch die Instanz hängen von der Abstraktion - der Schnittstelle - ab. Die Verantwortungskette basiert auf den Prinzipien der losen Kopplung und Trennung von Kontrollpersonen. Fliegengewicht hat meiner Meinung nach nur Leistungszuwächse.
m3th0dman
3

Muster sind mehr übergeordnete Dinge als Prinzipien. Muster lösen bestimmte Probleme. Prinzipien können unabhängig vom Kontext überall angewendet werden. Tatsächlich auf Prinzipien basierende Muster (SRP, DRY usw.)

EG Schauen wir uns das Strategiemuster an. Es definiert eine Familie von Algorithmen, kapselt jede und macht sie austauschbar. Sie haben hier also ein Konzept des Algorithmus auf hoher Ebene. Mit State Pattern haben Sie ein übergeordnetes Konzept des Staates. Mit Prinzipien haben Sie keine übergeordneten Konzepte. Prinzipien sind Bausteine, mit denen Muster das Ziel erreichen. Wenn Sie ein Strategiemuster implementieren, verwenden Sie SOLID:

  • SRP - Sie definieren Code, der für den Algorithmus verantwortlich ist, und extrahieren ihn aus einem anderen Code.
  • OCP - Sie definieren eine Abstraktion, die alle unterschiedlichen Algorithmen repräsentiert und verwendet
  • LSP - Sie verwenden keine konkreten Algorithmusklassen im Client-Code, sondern nur Abstraktion
Lazyberezovsky
quelle
5
Tatsächlich sind die Muster niedriger als die Prinzipien. Das heißt, ein Muster ist der tatsächlichen Umsetzung näher als ein Prinzip in diesem Zusammenhang. Mit anderen Worten, Prinzipien sind abstrakter als Muster, wobei Prinzipien allgemeine Gestaltungsrichtlinien und Muster sind, die Lösungen darstellen, die für eine bestimmte Klasse von Problemen geeignet sind.
@ Jarkko siehe mein Beispiel. Wenn ich über Level sprach, meinte ich, dass Muster auf Prinzipien basieren und nicht umgekehrt. Backstein ist nicht höherwertiger als Bauen.
4
Ich kann sehen, was Sie damit gemeint haben und Ihre Überlegungen dazu verstehen. Dies widerspricht jedoch der allgemeinen Bedeutung der Begriffe "High Level" und "Low Level" im Zusammenhang mit Software. (Aus irgendeinem Grund kann ich Sie nicht @ -tagen.)
1
"Muster sind mehr übergeordnete Dinge als Prinzipien". Ich bitte zu differenzieren ==> Ein Muster ist der Verwirklichung nahe (dh niedrige Ebene), während ein Prinzip hohe Ebene Regel ist.
Raúl
2

Muster wurden ursprünglich für die Architektur dokumentiert. Wenden Sie in der Architektur Dinge an, die von der Platzierung der Tür in einem Raum bis zum Layout eines Dorfes reichen.

Die Viererbande wandte die Idee auf objektorientierte Programmierung an. Es kann mehr als ein Muster geben, das zur Lösung eines Problems verwendet werden kann, aber jedes Muster hat eine spezifische Implementierung. Muster existieren in anderen Programmieransätzen, aber mir sind keine anwendbaren Bücher bekannt. Wie bereits erwähnt, decken Patterns bestimmte Implementierungen ab. Die Verwendung eines Musters, wenn es nicht angewendet wird, wird häufig als Antimuster angesehen.

Prinzipien decken nicht die Implementierung ab, obwohl es Standardansätze für die Implementierung geben kann. Bei den Grundsätzen geht es eher um allgemeine Themen als um spezifische Probleme. Für Inversion of Control sind mir mindestens drei Implementierungsansätze bekannt. Für DRY (Don't Repeat Yourself) kenne ich keinen einzigen spezifischen Implementierungsansatz, obwohl ich mehrere verwende.

Erwägen

  • Sie wurden aufgefordert, ein Pattern wie Abstract Factory Pattern als einzigen Ansatz für die Entwicklung eines Programms zu verwenden. Wäre das angemessen? Nein, dann ist es eher ein Pattern.
  • Sie wurden aufgefordert, DRY auf alle Komponenten anzuwenden? Wäre das angemessen? Ja, dann ist es eher ein Prinzip.
BillThor
quelle
1

OO-Design-Prinzip

Das OO-Prinzip ist eine Reihe von Richtlinien, die das OOP-Konzept sicherstellen. Basierend auf dem OOP-Konzept werden hier Wege definiert, um besser zu entwerfen, ein besseres Design. Das grundlegende OO-Konstruktionsprinzip ist SOLID.

Ein Entwurfsmuster bietet eine allgemeine Lösung für ein Entwurfsproblem. Bitte beachten Sie, dass das Entwurfsmuster auch auf objektorientierte Mittagswörter angewendet werden kann. A OO Design Patterns (OODPs) sind also diejenigen, die eine allgemeine Lösung für das objektorientierte designbasierte OO-Prinzip darstellen. Designmuster werden entdeckt, nicht erfunden. Es gibt mehrere Möglichkeiten, OODPs zu definieren, und die bekannteste ist BSC [Behavioral Structural Creational].

Nachfolgend finden Sie den Link zur detaillierten Erläuterung. http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

Tanzy
quelle