Ich fand dieses Zitat in " Die Freude an Clojure " auf S. 32, aber jemand hat mir letzte Woche beim Abendessen dasselbe gesagt und ich habe es auch an anderen Orten gehört:
Ein Nachteil der objektorientierten Programmierung ist die enge Kopplung zwischen Funktion und Daten.
Ich verstehe, warum unnötige Kopplung in einer Anwendung schlecht ist. Ich sage auch gerne, dass veränderlicher Zustand und Vererbung vermieden werden sollten, auch in der objektorientierten Programmierung. Aber ich verstehe nicht, warum das Festhalten an Klassenfunktionen von Natur aus schlecht ist.
Ich meine, das Hinzufügen einer Funktion zu einer Klasse scheint so, als würde man eine Mail in Google Mail markieren oder eine Datei in einen Ordner stecken. Es ist eine organisatorische Technik, die Ihnen hilft, es wiederzufinden. Sie wählen einige Kriterien aus und fügen sie dann zusammen. Vor OOP waren unsere Programme ziemlich viele Methoden in Dateien. Ich meine, du musst Funktionen irgendwo platzieren. Warum nicht organisieren?
Wenn dies ein verschleierter Angriff auf Typen ist, warum sagen sie dann nicht einfach, dass es falsch ist, die Art der Eingabe und Ausgabe auf eine Funktion zu beschränken? Ich bin mir nicht sicher, ob ich dem zustimmen könnte, aber zumindest kenne ich die Argumente für und gegen die Sicherheit. Das klingt für mich nach einem größtenteils separaten Problem.
Klar, manchmal verstehen die Leute es falsch und ordnen Funktionalität der falschen Klasse zu. Im Vergleich zu anderen Fehlern scheint dies jedoch eine sehr geringfügige Unannehmlichkeit zu sein.
Clojure hat also Namespaces. Wie unterscheidet sich das Festhalten einer Funktion an einer Klasse in OOP vom Festhalten einer Funktion in einem Namespace in Clojure und warum ist es so schlecht? Denken Sie daran, dass Funktionen in einer Klasse nicht unbedingt nur für Mitglieder dieser Klasse ausgeführt werden. Schauen Sie sich java.lang.StringBuilder an - es funktioniert auf jedem Referenztyp oder durch Auto-Boxing auf jedem Typ.
PS Dieses Zitat bezieht sich auf ein Buch, das ich nicht gelesen habe: Multiparadigmenprogrammierung in Leda: Timothy Budd, 1995 .