Ich habe nur gehört, dass der Begriff "Entwurfsmuster" für objektorientierten Code verwendet wird, und die GoF-Muster enthalten nur OOP-Entwurfsmuster, aber Entwurfsmuster sind elegante Lösungen für häufig auftretende Programmierprobleme, oder? Da ist nichts drin, was besagt, dass sie auf OOP beschränkt sein müssen, oder?
Ich würde gerne einige Beispiele für Entwurfsmuster außerhalb des Bereichs der objektorientierten Programmierung sehen. Hast du welche? Existieren solche überhaupt (kein Buch, wie das GoF-Buch, muss unbedingt geschrieben worden sein, sie sollten nur verwendet werden; das ist genug)?
Sie können für einige Programmiersprachen spezifisch sein, es werden jedoch allgemeine Muster (Muster auf Paradigmenebene) von anderen als den objektorientierten Mustern bevorzugt.
quelle
Antworten:
Schauen Sie sich die Linux Kernel Design Patterns-Reihe an. Die Artikel beziehen sich auf eine nicht objektorientierte Sprache (C) und ich glaube, dass sie gut geschrieben sind:
quelle
Eigentlich ist es paradox - eines der beliebtesten Non-OO-Muster ist ... "Klasse".
Da OO in Nicht-OO-Sprachen erfunden wurde, mussten Entwickler es simulieren (und sie tun es auch jetzt noch) - also war das Muster geboren. LISP und C sind Beispiele dafür.
Aber nehmen Sie meinen Rat an: Machen Sie keinen häufigen Fehler - verwenden Sie Muster nicht nur, weil es cool ist. Sie brauchen ernsthafte Gründe, um die Verwendung von Mustern zu rechtfertigen (zumindest OO).
Nehmen wir zum Beispiel das Befehlsmuster - obwohl es nett ist und den Anrufer vom Empfänger entkoppelt, sollte es nicht verwendet werden, es sei denn, Sie benötigen das tatsächlich - weil Operationen mit Verben ausgedrückt werden sollten - was Methoden bedeutet. Und wenn Sie Befehle überall einsetzen, erhalten Sie eine Reihe von vollständig dezentralen OO-Lambdas -> das gilt auch für viele Strategien.
quelle
"Design Pattern" ist eigentlich ein Euphemismus für "Workaround". Die Entwurfsmuster wurden erfunden, um Mängel und Mängel in OO-Sprachen zu umgehen . Nehmen wir zum Beispiel das Iterationsmuster, das schließlich zur Einführung der Sammlungen in Java führte. Groovy hat durch die Konvertierung in Sprachfeatures viele weitere Muster beseitigt: Sie benötigen das Dekorationsmuster nicht mehr, da Sie in Groovy vorhandenen Klassen Methoden hinzufügen können.
So finden Sie überall Designmuster. Tatsächlich kann jede "Best Practice" als einfache Form eines Entwurfsmusters angesehen werden.
quelle
LtU erwähnt, dass Jeremy Gibbons ein Buch über Muster in der funktionalen Programmierung schreibt. Ein paar Teaser finden Sie in Mr. Gibbons Blog Patterns in Functional Programming . Beachten Sie, dass er empfiehlt, seine Beiträge von der ältesten zur neuesten zu lesen.
Seine Arbeit Design Patterns as Higher-Order Datatype-Generic Programs (pdf) modelliert funktional die Vierergruppen-Muster: Composite, Iterator, Visitor und Builder. Er beschreibt die Muster der Programmierung mit rekursiven Gleichungen in der Origami-Programmierung (Falten und Entfalten).
quelle
Es gibt SQL-Entwurfsmuster .
Und es gibt auch einige funktionale Designmuster - siehe hier für Scala.
quelle
Anstatt Nicht-OO-Entwurfsmuster zu benennen, möchte ich Ihnen einige Beispiele für Bücher geben, die viele Entwurfsmuster enthalten (in denen einige Muster immer noch OO-spezifisch sind):
Hoffe das hilft
quelle
In der funktionalen Programmierung (insbesondere in Haskell) gibt es viele Muster und Redewendungen, die OOP nicht sehr gut entsprechen. Phantomtypen sind ein bekanntes Beispiel, und auf der Wiki-Seite von haskell zu Idioms finden Sie noch viel mehr .
quelle
Modulare Programmierung ist sehr beliebt für numerische Bibliotheken und mathematisch anspruchsvolle Anwendungen (numerische Software ist bekanntermaßen schwer mit objektorientierten Mustern zu modellieren, vor allem, weil Sie nur sehr wenig einkapseln können).
quelle
Ein gutes Beispiel für Nicht-OOP-Muster ist mein absoluter Lieblingsmusterkatalog: Organizational Patterns of Agile Software Development von James O. Coplien . In diesem Buch geht es nicht um Softwaremuster, sondern um Menschen, einen Katalog zur Schaffung erfolgreicher Teams. Jeder Manager sollte dieses Buch lesen!
quelle
Ich stelle mir Datenstrukturen wie Warteschlangen, verknüpfte Listen, Bäume, Diagramme usw. gerne als Muster vor. Sie definieren bestimmte Muster zum Speichern und Verarbeiten von Daten. Sie mögen primitiv erscheinen im Vergleich zu Gang of Fours High-End-Mustern, aber sie sind nichtsdestotrotz Muster. Ich meine, was würde passieren, wenn jemand einen Stapel als FIFO anstelle eines LIFO und umgekehrt für eine Warteschlange implementieren und sie anders benennen würde?
quelle