Encontré esta cita en " La alegría de Clojure "en la p. 32, pero alguien me dijo lo mismo durante la cena la semana pasada y también lo he oído en otros lugares:
[A] la desventaja de la programación orientada a objetos es la estrecha acoplamiento entre función y datos.
Entiendo por qué el acoplamiento innecesario es malo en una aplicación. También me siento cómodo al decir que el estado mutable y la herencia deben evitarse, incluso en la programación orientada a objetos. Pero no veo por qué las funciones de pegado en las clases son intrínsecamente malas.
Quiero decir, agregar una función a una clase parece etiquetar un correo en Gmail o pegar un archivo en una carpeta. Es una técnica de organización que te ayuda a encontrarla de nuevo. Escoges algunos criterios, luego pones las cosas juntas. Antes de OOP, nuestros programas eran bastante grandes bolsas de métodos en archivos. Quiero decir, tienes que poner funciones en alguna parte. ¿Por qué no organizarlos?
Si este es un ataque velado a los tipos, ¿por qué no dicen simplemente que restringir el tipo de entrada y salida a una función es incorrecto? No estoy seguro de si podría estar de acuerdo con eso, pero al menos estoy familiarizado con los argumentos pro y estafa de seguridad. Esto me suena como una preocupación mayoritariamente separada.
Claro, a veces las personas se equivocan y ponen la funcionalidad en la clase incorrecta. Pero comparado con otros errores, esto parece ser un inconveniente muy pequeño.
Por lo tanto, Clojure tiene espacios de nombres. ¿En qué se diferencia una función de OOP en una clase en OOP de una función en un espacio de nombres en Clojure y por qué es tan malo? Recuerde, las funciones en una clase no necesariamente operan solo en los miembros de esa clase. Mire java.lang.StringBuilder: funciona con cualquier tipo de referencia, o mediante boxeo automático, con cualquier tipo.
P.S. Esta cita hace referencia a un libro que no he leído: Programación multiparadigmática en Leda: Timothy Budd, 1995 .