2009-02-17 22 views
19

Ich suchte nach "Undo/Redo-Algorithmen" und fand etwas als Duplikat markiert, aber das Duplikat war eine Anfrage für ein "Undo Design Pattern". Ich würde wirklich einen Algorithmus dafür mögen. Ich glaube nicht, dass ich unbedingt ein Designmuster brauche.Was ist der Unterschied zwischen einem Algorithmus und einem Entwurfsmuster

Gibt es einen grundlegenden Unterschied zwischen "Design Pattern" und "Algorithm" oder ist es in Ordnung, dass jemand die beiden synonym verwendet?

Ich werde auflegen und meine Antwort aus der Luft nehmen.

Ok, verzeih mir, dass Designmuster nur Abstraktionen von Algorithmen waren. Hier ist ein kleiner Überblick über meine Ergebnisse aus den Antworten, die alle sehr gut waren.

 
    Design Pattern  |  Algorithm 
---------------------------------------------- 
Abstract    |Concrete 
Control Structure  |Set of Actions  
Template    | 
OOP     |Structured/OO Programming 
Flexible    |Deterministic 
Architecture(blueprint)|Recipe 
+0

Es scheint mir, dass Sie nicht wirklich nach einem Algorithmus suchen. Welche Eingaben liefern Sie und welche Ausgabe erwarten Sie nach der Ausführung des Algorithmus? –

+0

Ist das ein Algorithmus oder ein Entwurfsmuster (oder ein Rezept für eine Katastrophe)? 1. Wenn eine Abfrage ausgeführt wird, drücken Sie die umgekehrte Abfrage "Rückgängig" auf einem Stapel. 2. Wenn die Rückgängig-Taste gedrückt wird, knacken Sie die Abfrage aus dem Stapel und führen Sie sie aus. Vielleicht ist das Problem nicht-Determinismus? –

Antwort

0

Ein Entwurfsmuster würde bestimmen, wie Sie einen Algorithmus entwerfen (oder nichts mit Algorithmen zu tun haben, aber wir sagen, dass wir mit einem zu tun hat, der Fall ist), während ein Algorithmus eine Reihe von fest sein wird, wiederholbar, umsetzbar, Schritte, um etwas zu tun. Also nein, ich würde sie nicht als austauschbar bezeichnen.

24

Ein Algorithmus ist wie ein Rezept: ein Schritt-für-Schritt-Prozess für die Durchführung einiger Aktivitäten.

Ein Design-Muster ist wie ein Blueprint: eine strukturierte Sammlung von Objekten und Assoziationen und Aktionen, um ein Ziel zu erreichen.

7

Ein Entwurfsmuster ist eine relativ vage Beschreibung, wie ein Problem auf architektonischer Ebene gelöst werden kann, mit Schwerpunkt auf Flexibilität und Wartbarkeit. Ein Algorithmus ist eine genaue Beschreibung, wie man etwas Spezifisches berechnet, mit einem Schwerpunkt auf Korrektheit und Effizienz.

1

Ich würde sagen, dass ein Designmuster die Struktur definiert, während ein Algorithmus das Verhalten definiert.

Zum Beispiel könnten Sie mehrere verschiedene Algorithmen in Verbindung mit der Strategy design pattern verwenden.

2

Ein Entwurfsmuster kann nicht direkt in Code übersetzt werden. Es ist eine "Strategie", die für das Design einer Anwendung nützlich sein kann. Der Ursprung des Begriffs liegt außerhalb der Informatik. Lesen Sie über Christopher Alexander, um mehr zu erfahren.

Ein Algorithmus auf der anderen Seite kann im Code ausgedrückt werden. Es ist eine Folge von Operationen, die ein bestimmtes Problem für jede Eingabe lösen.

16

Ja, es gibt einen Unterschied.

Ein Algorithmus ist ein Rezept für die Ausführung einer Aufgabe - eine eindeutige endliche Menge von Anweisungen, die ein bestimmtes Ziel erreicht, indem sie an einer Eingabe arbeiten und eine Ausgabe erzeugen. Typischerweise wird ein Algorithmus in einem sprachunabhängigen Pseudocode ausgedrückt, der dann in der Sprache Ihrer Wahl implementiert werden kann.

Ein Design-Muster ist eine Möglichkeit, Ihren Code zu strukturieren, um eine Beziehung zwischen funktionalen Komponenten elegant auszudrücken. Sie können Entwurfsmuster innerhalb der Implementierung eines Algorithmus verwenden. Sie können beispielsweise einen Algorithmus für eine In-Order-Wanderung eines Baums verwenden, um sicherzustellen, dass Sie alle Knoten einer Baumdatenstruktur in einer bestimmten Reihenfolge besuchen. Sie können auch ein visitor Entwurfsmuster implementieren, um auszudrücken, wie Ihre Implementierung die Steuerung an den aufrufenden Kontext zurückgibt, um anzuzeigen, dass ein Knoten besucht wurde.Dies ist nicht Teil des Algorithmus, sondern Teil des Softwaredesigns und wie Sie die Schnittstellen strukturieren, die jede Komponente Ihrer Software verwenden kann.

Algorithmen und Entwurfsmuster sind orthogonal, obwohl sie beide gleichzeitig verwendet werden können.

1

Ein Algorithmus ist eine bestimmte Reihe von Schritten zum Ausführen einer Aufgabe. Das Decodieren einer Audio- oder Videodatei würde einen Algorithmus verwenden.

Ein Designmuster ist eher eine Vorlage für die Gestaltung eines Systems mit bestimmten Eigenschaften.

2

Ein Algorithmus ist eine Reihe von Schritten/Aktionen/Befehlen/Anweisungen, die in einer bestimmten Reihenfolge/Weise über alle Umstände oder Zustandsänderungen hinweg funktionieren. Im Fall von Undo/Redo würde es bedeuten, den vorherigen Zustand zu jedem Zeitpunkt zu speichern und ihn dann (auf welche Weise auch immer die App hat) auf Befehl zu reproduzieren. Da diese Definition jedoch unscharf ist und jeder einzelne Fall anders ist, möchten wir ein allgemeineres Designmuster erstellen, in das die Funktionalität einer bestimmten App eingesteckt werden kann.

Ein Entwurfsmuster ist ein abstrakteres Konzept, das innerhalb der objektorientierten Programmierung als Folge der Verkapselung von inneren Werten und Funktionen und Polymorphismen von Objekten existiert, die möglicherweise unterschiedliche Verhaltensweisen von "gleichen" Funktionsaufrufen ermöglichen. All dies macht es möglich, die Kontrollstruktur in die Interaktion der Objekte und nicht in eine algorithmische Struktur wie eine Bedingung oder eine Schleife zu integrieren, und kann viel einfacher sein, da Sie die Details eines Objekts nicht kennen müssen, um es funktionieren zu lassen muss wissen , dass das Objekt funktioniert. Im Falle von Undo/Redo könnte es Objekte geben, die sich an den Zustand erinnern, den Status reproduzieren und die Steuerung steuern. Sie würden miteinander kommunizieren, indem sie Methoden/Funktionen aufrufen, die jeweils ihren eigenen Teil der Funktionalität handhaben.

Die Begriffe sind nicht austauschbar, da sie sich auf verschiedene Designebenen beziehen, und insbesondere DPs sind nur ein Teil der objektorientierten Programmierung.

1

Als ich zum ersten Mal Design-Design-Konzept studierte, war ich auch überrascht, warum Design-Muster in Anwesenheit von Algorithmus eingeführt wurden. Da mein Wissen mit Entwurfsmustern zugenommen hat, erreiche ich an diesem Punkt, dass der Algorithmus ein ganz anderer Ansatz ist, um die Probleme zu lösen, und das Entwurfsmuster anders ist.

Design-Muster ist im Grunde eine wiederkehrende Lösung des gleichen Problems für eine Software-Anwendung in einem bestimmten Kontext, der irgendwie nicht mit Algo verwandt ist, weil Algorithmus die Schritt-für-Schritt-Anweisungen zur Lösung des Problems ist.

0

Wie Arten von Funktionen anstatt spezifische Merkmale möglicherweise Schlüssel zu trennen ‚Design Patterns‘ von ‚Algorithmen‘ ...

Entwurfsmuster beschreiben generische Lösungen für gemeinsame Design-Probleme zu organisieren. "Jedes Muster beschreibt ein Problem, das in unserer Umgebung immer wieder auftritt, und beschreibt dann den Kern der Lösung für dieses Problem, sodass Sie diese Lösung millionenfach verwenden können, ohne dass Sie es gleich tun müssen Weg zweimal "(Christopher Alexander) Bei der Programmierung erfolgt dies durch die Beschreibung bestimmter Sätze von Beziehungen zwischen Software-Objekten (für konzeptionelle oder reale Welt Objekte stehen). Die Beschreibung spezifischer Implementierungen sollte vermieden werden, da dadurch das Designmuster weniger generisch wird.

Ein Algorithmus ist eine Reihe von Schritten, die definieren, wie eine Aufgabe ausgeführt wird. Die Ausführung jedes Schrittes in einem Algorithmus erfordert keine kreativen Fähigkeiten. Es erfordert nur die Fähigkeit, Richtungen zu folgen. (Warnung: nichtdeterministische Algorithmen, entsprechen nicht dieser Einschränkung und sind ein wichtiges Thema der Forschung)

So denke ich, eine Beschreibung der Beziehung könnte sein, Funktionen von Funktionen zu trennen. Die Sammlung von Merkmalen eines Objekts bestimmt jedoch seine Funktion, da jedes Untermerkmal Funktionen darin eingekapselt hat. Wenn Sie viele kleine Objekte zu einem größeren Objekt zusammenfügen (zB Instanzen verschiedener Klassen in einem Programm), werden einige von ihnen zusammenarbeiten, um neue Funktionen zu erstellen, die sie selbst nicht hatten (das Ganze ist größer als die Summe seiner Teile)). Sie können sagen, dass dies nur ein neuer Algorithmus ist, aber es ist auch ein neues Objekt. Merkmale und Funktionen sind zwei Seiten derselben Medaille, so dass es unmöglich ist, sie vollständig zu trennen. Aber wie man Arten der Eigenschaften eher als spezifische Eigenschaften organisiert, könnte Schlüssel sein, "Entwurfsmuster" von "Algorithmen" zu trennen, da, wenn Entwurfsmuster über das Organisieren der spezifischen Eigenschaften, dh Instanzen der spezifischen Klassen sind, dann der Algorithmus bereits dargestellt worden wäre und die Implementierung wäre jedes Mal genau die gleiche, dh es wäre nicht generisch, und Sie können diese Lösung nicht "millionenfach" verwenden, ohne es zweimal gleich zu machen.

0

Entwurfsmuster: - eine Lösung für ein allgemeines, aber allgemeines Problem. - allgemeine Lösung für das allgemeine Problem. - müssen oft bei jeder Verwendung implementiert werden.

Algorithmus: - spezifische Reihe von Schritten, die Sie folgen können, um ein bestimmtes Problem zu beantworten. - direkt implementiert, um spezifische Probleme zu lösen.

Verwandte Themen