En uno de los numerosos comentarios anti-OOP en cat-v.org encontré un pasaje de Joe Armstrong que plantea varias objeciones contra el modelo OOP, una de las cuales fue la siguiente:
Objeción 4: los objetos tienen estado privado
El estado es la raíz de todo mal. En particular, se deben evitar las funciones con efectos secundarios.
Si bien el estado en los lenguajes de programación no es deseable, en el mundo real abunda el estado. Estoy muy interesado en el estado de mi cuenta bancaria, y cuando deposito o retiro dinero de mi banco, espero que el estado de mi cuenta bancaria se actualice correctamente.
Dado que el estado existe en el mundo real, ¿qué facilidades debería proporcionar el lenguaje de programación para tratar con el estado?
Los OOPL dicen "esconder el estado del programador". Los estados están ocultos y visibles solo a través de las funciones de acceso. Los lenguajes de programación convencionales (C, Pascal) dicen que la visibilidad de las variables de estado está controlada por las reglas de alcance del lenguaje. Los lenguajes declarativos puros dicen que no hay estado. El estado global del sistema se lleva a todas las funciones y sale de todas las funciones. Se utilizan mecanismos como mónadas (para FPL) y DCG (lenguajes lógicos) para ocultar el estado del programador para que puedan programar "como si el estado no importara", pero tienen acceso completo al estado del sistema si fuera necesario.
La opción "ocultar el estado del programador" elegida por los OOPL es la peor opción posible. En lugar de revelar el estado y tratar de encontrar formas de minimizar la molestia del estado, lo ocultan.
¿Qué significa exactamente esto? Tengo muy poca experiencia de bajo nivel o procedimiento, principalmente OOP, por lo que probablemente eso explica lo poco familiar que estoy con esto. Y desde un punto de vista más moderno, ahora que se pasa la mayor parte de la histeria orientada a objetos (al menos por lo que puedo decir), ¿qué tan preciso / relevante piensan ustedes que es ese pasaje?
Gracias por tu ayuda.