Die OO-Programmierliteratur steckt voller Designmuster. Die meisten Bücher über objektorientierte Programmierung widmen ein oder zwei Kapitel dem Entwerfen von Mustern wie Fabriken und Dekorateuren. Also, was sind die äquivalenten Muster in funktionalen Sprachen und warum hat noch niemand ein Buch darüber geschrieben? Gibt es etwas Besonderes an funktionalen Sprachen, das Designmuster überflüssig macht?
books
design-patterns
functional-programming
davidk01
quelle
quelle
Antworten:
OO und funktionale Programmierung sind zwei sehr unterschiedliche Programmierparadigmen, und Design Patterns (DP) sind ein wesentlicher Bestandteil von OO-Design und -Programmierung. DP spielen bei der funktionalen Programmierung keine solche Rolle.
Man könnte sogar sagen, dass DP in der funktionalen Programmierung nicht benötigt wird - es gibt keinen Juckreiz, gegen den DP heilt.
Man könnte argumentieren, dass Entwurfsmuster ein Zeichen für fehlende Funktionen in einer Programmiersprache sind.
Peter Norvig stellte fest, dass 16 der 23 Muster im Design Patterns- Buch in Lisp oder Dylan " entweder unsichtbar oder einfach r" sind.
"Viele Muster implizieren eine Objektorientierung oder einen allgemein veränderlichen Zustand und sind daher möglicherweise in funktionalen Programmiersprachen, in denen Daten unveränderlich sind oder als solche behandelt werden, nicht so anwendbar." - http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29
quelle
Jeremy Gibbons schreibt das Buch. Bis es fertig ist, können Sie seinen Blog lesen, Patterns in Functional Programming . Er empfiehlt, seine Beiträge von den ältesten bis zu den neuesten zu lesen.
Durchsuchen Sie auch seine Publikationen . Er behandelt Vierergruppenmuster in Entwurfsmustern als Datentyp-generische Programme höherer Ordnung und beschreibt die Muster der Programmierung mit rekursiven Gleichungen in der Origami-Programmierung (Falten und Entfalten).
quelle
Die einfache Tatsache ist, dass viele OO-Muster in funktionalen Sprachen (insbesondere die ursprünglichen GoF-Muster) als Redewendungen betrachtet werden. Beispielsweise ist das Iterator-Muster (das in Sprachen wie C # jetzt integriert ist) in Lisp oder ML mit Sequenzoperatoren nicht erforderlich.
Viele der Muster, die wir in OO-Systemen verwenden, helfen uns dabei, das "Nicht-Wesentliche" aus dem Weg zu räumen, damit wir uns auf das Codieren von Objekten konzentrieren können. Mit anderen Worten, die Muster sind Lösungen für die nicht interessanten Teile der Anwendung. Wir sollten Muster wirksam einsetzen, um allgemeine Anforderungen zu erfüllen, die zuvor gelöst wurden (z. B. die Muster in Fowlers Patterns der Enterprise Application Architecture für den Umgang mit Datenbankübertragungen oder xUnit Patterns für die Steigerung Ihrer Einheitentests), damit wir uns auf die Steigerung des geschäftlichen Nutzens konzentrieren können für die anwendung.
Ich bin sicher, dass es jenseits der Besonderheiten der GoF-Muster Entwurfsmuster gibt, die auch für die funktionale Programmierung gelten. Die Sache ist, dass OO das vorherrschende Paradigma ist. Ein Musterbuch zu schreiben, das sich an funktionale Entwickler richtet ... wird von einem Verlag ehrlich gesagt kein grünes Licht bekommen. Darauf kommt es an. Es gibt nicht genug Markt für funktionale Muster, um eine bedeutende Anzahl von Büchern zu diesem Thema zu haben.
quelle
Ein guter Vortrag (~ 45 min) von Stuart Sierra zu diesem Thema:
http://www.infoq.com/presentations/Clojure-Design-Patterns
Nicht unbedingt verbindlich und maßgeblich, aber ich erkannte eine Reihe seiner Beispiele aus eigener Erfahrung mit FP für die Datenanalyse.
Beispiele in Clojure geschrieben, aber wahrscheinlich auf jede FP-Sprache anwendbar. Die Namen, die er den Mustern gibt, die er bedeckt, sind:
quelle
Wenn Sie wirklich daran interessiert sind, die Designmuster zu lernen, sind Sie bei Haskell genau richtig. Wenn Sie sich die Zeit nehmen , die Sprache auf die harte Tour zu lernen, werden Sie mit den meisten grundlegenden Mustern vertraut - sie sind in die Sprache eingebettet.
Überspringe keine Monaden. Es gibt eine Reihe von langwierigen Erklärungen, und es bedarf einiger Anstrengungen, um die Ideen in die Realität umzusetzen. Wenn Sie sich jedoch weiter verstecken, wird es Ihnen irgendwann klar und Sie werden erstaunt sein, wie viele Designmuster möglich sind Bauen Sie auf dieser einen Abstraktion / Schnittstelle auf.
Sobald Sie Haskell gefunden haben, steht Ihnen genug FP-Arsenal zur Verfügung, um gefährlich zu werden. Der Punkt ist, bleiben Sie dran, bis Sie es bekommen. Es gibt keine Abkürzungen.
quelle
Sofern die Entwurfsmethode für FP darin besteht, Ihre Typen so zu entwerfen, dass sie den Problembereich genau widerspiegeln, und die Implementierung automatisch erfolgen sollte, entspricht das FP-Äquivalent eines Buches zu Entwurfsmustern etwa Chris Okasakis rein funktionalen Datenstrukturen .
quelle