Poo - definición mínima

Según ustedes…

Que criterios o características son las mínimas necesarias para considerar un lenguaje de programación que tiene

1. paradigma orientado a objetos

  1. O tiene simplemente un estilo de objetos.

Leyendo a Dave Thomas que me parun referente serio. Según el para ser paradigma orientado a objetos debe cumplir

A tener clases

B y tener encapsulation

Me gustaría aclararlo porque tengo “discusiones” de buen rollo con algún compañero .

:grinning_face:

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

1 me gusta

Lo que me marea la cabeza es tener varias definiciones diferentes para lo mismo.

Así es complicado entenderse con los demás

Después de mucho investigar sobre el tema… de momento me voy quedando con la definición de dave thomas.

Pero claro eso es incompatible con la autodefinición que se hacen algunos lenguajes

:disappointed_face:

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.

Perdona

No lo he entendido

Lo puedes explicar por favor?

:disappointed_face:

dile a gpt que te explique el chiste , esta muy bueno.

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.

2 Me gusta

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.
1 me gusta