Ist funktionelle Zersetzung wirklich ein Antimuster?

9

Während ich die schlimmsten Anti-Muster las , auf die Sie gestoßen sind , klickte ich auf den Link in diesem Beitrag, um auf der Website über Anti-Muster zu landen.

Und die Seite http://sourcemaking.com/antipatterns/functional-decomposition hat mich gefragt.

Wie schlimm ist dieses Anti-Muster und ist es überhaupt ein Anti-Muster? Denn obwohl ich heutzutage hauptsächlich OOP-Programmierung mache, bin ich immer noch zurückhaltend gegenüber reinen OOP-Alles-Sprachen wie Java und den damit verbundenen Design-Praktiken. Und ich denke, ich habe noch einige Merkmale der funktionalen Programmierung, während ich den Code schreibe.

Und dies warf die Frage auf, ob ich etwas falsch mache, indem ich mich an den OOP + -Funktionsstil halte, oder ob es in der Industrie üblich ist und eigentlich gar nicht so schlecht.

Was ich aus Erfahrung weiß, ist, dass der OOP + -Funktionsstil nicht vollständig mit reinen OOP-Entwicklern kompatibel ist. Während OOP-Entwickler Probleme mit der Entwicklung von OOP + -Funktionen haben, ist das Gegenargument, dass OOP-Lösungen häufig überentwickelt und zu schwer zu verwenden sind und meiner Erfahrung nach nicht einmal ein bisschen einfacher und tatsächlich waren führte einige blinde Flecken ein, damit sich SEHR schwerwiegende Fehler verstecken konnten.

Obwohl ich mit meinem Kollegen über diese Themen diskutiert hatte, kam ich zu dem Schluss, dass keiner der Wege tatsächlich perfekt ist. Und ich habe immer noch die Frage unbeantwortet.

Das OOP-Problem wurde auch durch einen Link von einem anderen Beitrag im selben Thread verstärkt. Der Link zeigt die OOP im Java-Stil http://chaosinmotion.com/blog/?p=622

Wie ist die allgemeine Einstellung zum Mischen von funktionaler Programmierung mit OOP? Und wie hoch sollte das Gleichgewicht sein, das ein Entwickler anstreben sollte?

Codierer
quelle
1
Ihr Titel und Ihr Fragetext stellen mehrere verwandte, aber völlig unterschiedliche Fragen, von denen einige rhetorisch klingen. Ich habe Probleme herauszufinden, was genau Sie hier fragen.
blueberryfields
Entschuldigung, ich bin kein Muttersprachler und es fällt mir schwer, mir einen besseren Titel auszudenken. Korrekturen sind willkommen.
Coder
1
Die Frage ist klar. Hören Sie nicht auf Blaubeerfelder.
Jojo
5
Für die OOP-Eiferer ist alles, was außerhalb der Reichweite von OOP liegt, eindeutig ein "Antimuster". Tatsächlich ist das schlimmste mögliche Antimuster eine starke Überbeanspruchung von OOP selbst.
SK-Logik

Antworten:

8

Zunächst einmal ist funktionale Programmierung derzeit das, was alle coolen Kids tun. Das Anti-Pattern sprach wirklich von prozeduraler Programmierung (es wäre klarer, wenn die Technik "prozedurale Zerlegung" genannt würde, aber es ist nicht so), und ich denke, Sie waren es auch.

Das Anti-Pattern sprach über schlechte Methoden zum Schreiben von prozeduralem Code in einer objektorientierten Sprache, die andere Seite über schlechtes Schreiben von Java - in Wahrheit gibt es keine Sprache, die so fantastisch ist, dass Sie alles tun können, was Sie wollen, aber nicht können Schreibe schlechten Code.

In der Praxis habe ich im objektorientierten Code etwas mehr Engineering als im prozeduralen Code gesehen - etwas weniger im Engineering und etwas mehr im Engineering.

In Ihrem Fall würde es von den Einzelheiten abhängen, und ich bin mir nicht sicher, was Sie tatsächlich in einem prozeduralen Stil tun. Ist es korrekt, klar, überprüfbar, leicht zu ändern usw.? Die Kriterien zur Beurteilung des Kodex sollten auf solchen praktischen Bedenken beruhen und nicht auf der Reinheit eines bestimmten Stils. Es klingt so, als ob in Ihrem Fall vernünftige und sachkundige Personen über diese Bedenken nicht einig sind (und dies auch tun können!), Und wenn ja, gibt es wahrscheinlich keinen objektiven Weg, um die Wahrheit der Sache festzustellen.

psr
quelle
2
Ihre Antwort begann gut, aber dann wurden Sie vage und unverbindlich. Ich habe den Artikel gelesen, dass das OP mit funktionaler Zerlegung zusammenhängt, und es ist ein schreckliches Antimuster, das von prozeduralen Entwicklern praktiziert wird, die versuchen, ihren Programmierstil in ein objektorientiertes Paradigma zu verwandeln. Also nein, es hängt nicht von den Besonderheiten ab.
Robert Harvey
aber ich glaube nicht, dass Coder glaubt, dass das Anti-Muster das ist, was er persönlich getan hat (noch habe ich besonderen Grund, an ihm zu zweifeln). Seine Frage (eine davon wirklich) war, ob prozedurale Programmierung in einer Objektsprache in Ordnung sein kann (wahrscheinlich eher wie in der statischen Java-Funktion, die im Java-Rant-Blog gezeigt wird). Und das hängt von den Einzelheiten dessen ab, was er codiert hat. (Ich habe Vorwort mit "In deinem Fall"). Ich denke, Sie lesen die Frage im Grunde genommen als "Soll ich wie im Anti-Pattern programmieren?", Was eindeutig schlecht wäre - aber Coder weiß das, denke ich.
Psr
4
Auch auf diese Weise ist die prozedurale Zerlegung eine gültige Technik, und es ist ein reiner Fanatismus, sie als nicht so kompatibel mit OOP abzulehnen. Lass alle Blumen blühen. Alle Techniken sind gültig, wenn sie mit Bedacht eingesetzt werden. Das Festhalten an einer bestimmten Methode ist überhaupt nicht sinnvoll.
SK-Logik