1151 Stimmen

Ersetzt die funktionale Programmierung die GoF-Entwurfsmuster?

Seit ich angefangen habe zu lernen F# et OCaml Im letzten Jahr habe ich eine große Anzahl von Artikeln gelesen, in denen behauptet wird, dass Entwurfsmuster (insbesondere in Java) eine Lösung für die fehlenden Funktionen imperativer Sprachen sind. Ein Artikel, den ich gefunden habe stellt eine ziemlich starke Behauptung auf :

Die meisten Menschen, die ich getroffen habe, haben gelesen das Buch Design Patterns von der Bande der Vier (GoF). Jeder Programmierer, der etwas auf sich hält wird Ihnen sagen, dass das Buch sprachunabhängig ist und die Muster für die Softwareentwicklung im Allgemeinen Softwareentwicklung im Allgemeinen gelten, unabhängig davon, welche Sie verwenden. Das ist eine noble Behauptung. Leider ist sie weit entfernt von der Wahrheit.

Funktionale Sprachen sind extrem ausdrucksstark. In einer funktionalen Sprache braucht man keine Entwurfsmuster weil die Sprache wahrscheinlich so hoch ist so hoch ist, dass man am Ende in Konzepten programmiert Konzepte, die Entwurfsmuster Entwurfsmuster ganz eliminieren.

Zu den wichtigsten Merkmalen der funktionalen Programmierung (FP) gehören Funktionen als Werte erster Klasse, Currying, unveränderliche Werte usw. Es scheint mir nicht offensichtlich, dass OO-Entwurfsmuster auch nur annähernd diese Merkmale aufweisen.

Außerdem scheint es mir bei funktionalen Sprachen, die OOP unterstützen (wie F# und OCaml), offensichtlich, dass Programmierer, die diese Sprachen verwenden, dieselben Entwurfsmuster verwenden würden, die auch in jeder anderen OOP-Sprache verfügbar sind. Tatsächlich verwende ich F# und OCaml jeden Tag, und es gibt keine auffälligen Unterschiede zwischen den Mustern, die ich in diesen Sprachen verwende, und den Mustern, die ich verwende, wenn ich in Java schreibe.

Ist an der Behauptung, dass funktionale Programmierung die Notwendigkeit von OOP-Entwurfsmustern überflüssig macht, etwas dran? Wenn ja, könnten Sie ein Beispiel für ein typisches OOP-Entwurfsmuster und sein funktionales Äquivalent nennen oder einen Link dazu angeben?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X