J'ai trouvé cette citation dans " La joie de Clojure " à la p. 32 ans, mais quelqu'un m'a dit la même chose au dîner la semaine dernière et je l'ai aussi entendu à d'autres endroits:
[Un] inconvénient de la programmation orientée objet est le couplage étroit entre la fonction et les données.
Je comprends pourquoi le couplage inutile est mauvais dans une application. De plus, je suis à l'aise pour dire que l'état mutable et l'héritage doivent être évités, même dans la programmation orientée objet. Mais je ne vois pas pourquoi coller des fonctions sur des classes est intrinsèquement mauvais.
Ajouter une fonction à une classe revient à marquer un courrier dans Gmail ou à coller un fichier dans un dossier. C'est une technique d'organisation qui vous aide à le retrouver. Vous choisissez des critères, puis mettez les choses comme ensemble. Avant la programmation orientée objet, nos programmes étaient plutôt volumineux en méthodes. Je veux dire, vous devez mettre des fonctions quelque part. Pourquoi ne pas les organiser?
S'il s'agit d'une attaque voilée sur des types, pourquoi ne pas simplement dire que restreindre le type d'entrée et de sortie à une fonction est une erreur? Je ne suis pas sûr de pouvoir être d'accord avec cela, mais au moins, je connais les arguments pour ou contre la sécurité. Cela me semble être une préoccupation essentiellement séparée.
Bien sûr, parfois, les gens se trompent et mettent la fonctionnalité sur la mauvaise classe. Mais comparé à d’autres erreurs, cela semble être un inconvénient mineur.
Clojure a donc des espaces de noms. En quoi coller une fonction sur une classe dans la POO est-il différent de coller une fonction dans un espace de noms dans Clojure et pourquoi est-ce si grave? N'oubliez pas que les fonctions d'une classe ne fonctionnent pas nécessairement sur les membres de cette classe. Regardez java.lang.StringBuilder - il fonctionne sur tout type de référence, ou via la boxe automatique, sur n'importe quel type.
PS Cette citation fait référence à un livre que je n’ai pas lu: Multiparadigm Programming in Leda: Timothy Budd, 1995 .