it-swarm-eu.dev

Nicht-OOP-Entwurfsmuster?

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 sehen außerhalb den Bereich der objektorientierten Programmierung. Hast du welche? Gibt es 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 (auf Paradigmenebene) anderer Paradigmen als der objektorientierten bevorzugt.

70
Anto
25
sakisk

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 sogar gerade) - also war das Muster geboren. LISP und C sind Beispiele dafür.

Aber nimm meinen Rat an: Mach keinen häufigen Fehler - benutze keine Muster nur, weil es cool ist, du brauchst 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 - da Operationen mit Verben ausgedrückt werden sollten - was Methoden bedeutet. Und wenn Sie überall Befehle verwenden, erhalten Sie eine Reihe vollständig dezentraler OO-Lambdas -> dasselbe gilt für viele Strategien.

12
Kamil Tomšík

LtU erwähnt dass Jeremy Gibbons ein Buch über Muster in der funktionalen Programmierung schreibt. Schauen Sie sich Mr. Gibbons Patterns in Functional Programming Blog für ein paar Teaser an. Beachten Sie, dass er empfiehlt, seine Beiträge von den ältesten bis zu den neuesten zu lesen.

Seine Arbeit Entwurfsmuster als datentypgenerische Programme höherer Ordnung (pdf) modelliert funktional die Viererbande: Composite, Iterator, Besucher und Baumeister. Er beschreibt die Muster der Programmierung mit rekursiven Gleichungen in Origami-Programmierung (Falten und Entfalten).

11
Corbin March

"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 Iteratormuster, das schließlich zur Einführung der Sammlungen in Java führte. Groovy Viele weitere Muster wurden durch Konvertieren in Sprachfunktionen entfernt: Sie benötigen das Dekorationsmuster nicht mehr, da Sie vorhandenen Klassen in Groovy Methoden hinzufügen können.

So finden Sie überall Designmuster. Tatsächlich kann jede "Best Practice" als einfache Form eines Entwurfsmusters betrachtet werden.

11
Aaron Digulla

Es gibt SQL-Entwurfsmuster .

Es gibt auch einige funktionale Entwurfsmuster - siehe hier für Scala.

10
Oded

Anstatt nicht-oo Designmuster zu benennen, möchte ich Ihnen einige Beispiele für Bücher geben, die viele Designmuster enthalten (in diesen sind einige Muster immer noch OO spezifisch):

Hoffe das hilft

8
KeesDijk

In der funktionalen Programmierung (insbesondere in Haskell) gibt es viele Muster und Redewendungen, die OOP nicht sehr gut zuordnen. Phantomtypen sind ein bekanntes Beispiel, und auf der Haskell-Wiki-Seite zu Idioms finden Sie noch viel mehr.

2
yatima2975

Ein gutes Beispiel für Nicht-OOP-Muster ist mein absoluter Lieblingsmusterkatalog: Organisationsmuster der agilen Softwareentwicklung, von James O. Coplien . In diesem Buch geht es nicht um Softwaremuster, sondern um Menschen, einen Katalog zur Erstellung erfolgreicher Teams. Jeder Manager sollte dieses Buch lesen!

1
JuanZe

Modulare Programmierung ist sehr beliebt für numerische Bibliotheken und mathematikintensive Anwendungen (numerische Software ist bekanntermaßen schwer mit den objektorientierten Mustern zu modellieren, vor allem, weil Sie nur sehr wenig kapseln können).

1
quant_dev

Ich stelle mir Datenstrukturen wie Warteschlangen, verknüpfte Listen, Bäume, Diagramme usw. gerne als Muster vor. Sie definieren bestimmte Muster, um Daten zu speichern und zu verarbeiten. Sie mögen im Vergleich zu den High-End-Mustern von Gang of Four primitiv erscheinen, aber sie sind trotzdem Muster. Ich meine, was würde passieren, wenn jemand einen Stapel als FIFO statt als LIFO und umgekehrt für eine Warteschlange) implementieren und sie anders benennen würde?

0
DPD