A menudo se puede escuchar que la POO se corresponde naturalmente con la forma en que las personas piensan sobre el mundo. Pero estoy totalmente en desacuerdo con esta afirmación: Nosotros (o al menos yo) conceptualizamos el mundo en términos de relaciones entre las cosas que encontramos, pero el enfoque de la POO es diseñar clases individuales y sus jerarquías.
Tenga en cuenta que, en la vida cotidiana, las relaciones y las acciones existen principalmente entre objetos que habrían sido instancias de clases no relacionadas en OOP. Ejemplos de tales relaciones son: "mi pantalla está en la parte superior de la tabla"; "Yo (un ser humano) estoy sentado en una silla"; "un carro está en la carretera"; "Estoy escribiendo en el teclado"; "La máquina de café hierve agua", "el texto se muestra en la ventana de la terminal".
Pensamos en términos de verbos bivalentes (a veces trivalentes, como, por ejemplo, "Te regalé flores") donde el verbo es la acción (relación) que opera en dos objetos para producir algún resultado / acción. El focus está en la acción, y los dos (o tres) objetos [gramaticales] tienen la misma importancia.
Contraste eso con OOP donde primero tienes que encontrar un objeto (sustantivo) y decirle que realice alguna acción en otro objeto. La forma de pensar cambia de acciones / verbos que operan sobre sustantivos a sustantivos que operan sobre sustantivos, es como si todo se dijera en voz pasiva o reflexiva, por ejemplo, "la ventana del terminal muestra el texto". O tal vez "el texto se dibuja en la ventana del terminal".
No solo se cambia el enfoque a los nombres, sino que a uno de los nombres (llamémoslo sujeto gramatical) se le otorga una "importancia" más alta que el otro (objeto gramatical). Por lo tanto, uno debe decidir si va a decir terminalWindow.show (someText) o someText.show (terminalWindow). Pero, ¿por qué cargar a las personas con decisiones tan triviales sin consecuencias operativas cuando uno realmente significa show (terminalWindow, someText)? [Las consecuencias son operacionalmente insignificantes - en ambos casos, el texto se muestra en la ventana del terminal - pero puede ser muy serio en el diseño de jerarquías de clase y una elección "incorrecta" puede llevar a complicada y difícil para mantener el código.]
Por lo tanto, argumentaría que la forma convencional de hacer OOP (basado en clases, de envío único) es difícil porque NO ES NATURAL y no se corresponde con la forma en que los humanos piensan sobre el mundo. Los métodos genéricos de CLOS están más cerca de mi forma de pensar, pero, por desgracia, este no es un enfoque generalizado.
Teniendo en cuenta estos problemas, ¿cómo / por qué sucedió que la forma actual de hacer la POO se volviera tan popular? ¿Y qué se puede hacer, si es que hay algo, para destronarlo?