Creo que soy culpable. En lo personal no tengo una definición favorita, pero me gusta ver y conocer otros puntos de vista así que estaré pendiente de las respuestas
solo tener un nivel de abstracción que parte de una premisa , se puede manejar esta entidad o valor como un objeto ? Es una programación POO : No es una programación POO.
Este hilo me hace recordar a Alan Kay, coinventor del propio concepto teórico de programación orientada a objetos, ni más ni menos. Kay es muy crítico con cómo se ha interpretado e implementado la POO en los lenguajes modernos, afirmando que, realmente, ningún lenguaje actual es orientado a objetos; al menos en el sentido original que se le dio.
Kay no concibió la POO como un conjunto de pilares (abstracción, encapsulación, herencia y polimorfismo), sino se inspiró en la biología, específicamente en la función celular:
Mantienen su estado interno protegido: cada célula (objeto) tiene su propio metabolismo o datos privados, inaccesibles directamente desde fuera.
Se comunican mediante mensajería: las células no llaman directamente a funciones internas de otras; en cambio, envían mensajes (signals) que la célula receptora interpreta a su manera. Esto promueve una interacción flexible y asíncrona, similar a cómo las células biológicas usan hormonas o neurotransmisores.
Tienen enlace tardío extremo (late binding): nada se resuelve en tiempo de compilación; todo se decide en tiempo de ejecución, permitiendo que los objetos evolucionen dinámicamente, como organismos vivos que se adaptan.
Son autónomos y distribuidos: Los objetos podrían vivir en diferentes entornos (incluso máquinas distribuidas), comunicándose sin depender de una estructura centralizada.
Para mí, esta es la verdadera naturaleza (y definición) de la POO, y que evidentemente no se da.
En una charla que ví recientemente (a ver si encuentro el vídeo) Alan Kay comentaba también que Elixir/Earlang si que implementaba el concepto de POO que él defendía.
Llamémoslo por ejemplo “POO-A” (POO de Alan Kay)
Y luego también, como C++ se popularizó más que SmallTalk parece que se impuso en el resto de los lenguajes el modelo o definición, llamémoslo “POO-C” (Modelo de C++)
Pero también, recientemente hablando con desarrolladores de Python, me argumentaban otra variación de la POO-C con con que tendríamos “POO-P” (Modelo estilo Python)
Quizás (no lo sé) este enfoque de tener:
POO-A
POO-C
POO-P
Es más adecuado para entendernos y evitar “confusiones” innecesarias.
Me parece incluso mas honesto Rust que en ningún momento en su página web ni en su documentación hablan de tener POO… para no confundirlas con las definiciones anteriores y ellos sólo hablan de:
Estructuras de datos con encapsulamiento
Acompañadas de funciones sobre dichas estructuras.