El único lenguaje orientado a objetos que existe

La programación orientada a objetos que conocemos hoy en día no se parece en nada a lo que su creador, Alan Kay, se refería. Donde toda una industria hasta el día de hoy se encuentra completamente confundida. Por lo que los lenguajes que conocemos hoy en día, lamentablemente no poseen la orientación a objetos de Alan Kay… O acaso… ¿si existirá uno? ¿Uno que implemente un estado encapsulado, que los objetos se comuniquen a través de mensajes y que estos puedan ser reemplazados en caliente?

La respuesta, a continuación.


Antes de continuar, puedes leer este post o ver y escuchar esta información en formato de video en nuestro canal de Youtube, te dejamos el link por si prefieres este formato. 😃 👍


Hola mundo, y bienvenidos a este post, esta es la continuación de un post anterior, la historia perdida de la programación orientada a objetos de alan kay, donde hablamos a que se refería Alan Kay con programación orientada a objetos.

Alan Kay
Alan Kay

Y como pudimos ver en este post, la verdadera orientación a objetos de Alan kay se refería a patrones de arquitectura, muy similares a los micro servicios o a los micro frontend. Por lo que, lo que nosotros conocemos hoy en día como orientación a objetos dista bastante de lo que mencionó su creador Alan Kay. Para comenzar, y hacer la diferenciación de ambos más fácil llamaremos a programación orientada a objetos de Alan Kay programación orientada a componentes y la programación orientada a objetos que conocemos actualmente en este post mantendrá su nombre.

¿Qué es la programación orientada a objetos?

La programación orientada a objetos está basada en el concepto de objetos, donde estos contendrán datos, muy similar a la forma que los tiene un formulario con sus campos, y además estos objetos también tendrán procedimientos o instrucciones que podrán realizar, estas instrucciones por lo general están asociadas a los datos que mencionamos antes y los datos los conocemos con el nombre de propiedades y sus instrucciones o procedimientos los llamaremos métodos.

Existen muchas implementaciones de programación orientada a objetos, aunque la más popular es la basada en clases. Donde una clase es como un plano de una casa, y sus instancias son las casas construidas con base en este plano. Otra forma de ver las clases es como el molde de una vasija, y todas las vasijas creadas con este molde son sus instancias.

Otra forma de verlo también es como el modelo de un teclado, y el que tienes en tus manos es una instancia del teclado. Además, los teclados los puedes personalizar, esto hace que estas instancias tengan el potencial de cambiar al igual que en la programación orientada a objetos.

Teclado Corne Hola Mundo
Teclado Corne Hola Mundo

Un ejemplo concreto en código es tener una clase de usuario con nombre, contraseña y correo. Y que este a su vez tiene los métodos para iniciar sesión, registrarse o recuperar contraseña. Las instancias de usuarios tienen estos mismos métodos, pero sus atributos como el nombre, contraseña y correo van cambiando.

Además de esto, la programación orientada a objetos posee herencia, este es un mecanismo para reducir la cantidad de código que debe escribirse siguiendo el primer principio del desarrollo de software, el cual se llama DRY por sus siglas en inglés Don’ t repeat yourself.

La herencia busca basar una nueva clase en una ya existente, llamada herencia de clase. Aunque también se pueden basar en otro objeto, llamada esta herencia basada en prototipo.

Muchos de los lenguajes que nosotros conocemos hoy son multiparadigma e implementan orientación a objetos en algún grado, aunque los más significativos son Java y C++.

Logo de Java
Logo de Java
Logo de c++
Logo de C++

El primer lenguaje en implementar esta forma de trabajar fue Simula, diseñado por Ole-Johan Dahl y desarrollado por Kristen Nygaard, y su primera aparición fue en 1962. Este lenguaje introdujo los objetos, clases, herencia y subclases, procedimientos virtuales, corutinas y poseía garbage collection.

Simula fue el primer lenguaje orientado a objetos, aunque a este no se le asignó como un lenguaje orientado a objetos hasta varios años más tarde. Así es, no fue creado por Alan Kay, por lo que si quieres agradecer a alguien por el modelo de herencia por clases es a Ole-Johan Dahl y a Kristen Nygaard.

¿Programación orientada a componentes?

Está basada en lo que Alan Kay ha mencionado a lo largo de la historia, es sumamente difícil encontrar fuentes canónicas que indiquen la definición que dio Alan Kay a su programación orientada a componentes y, además, aparentemente ha ido cambiando de opinión a lo largo de la historia. Él menciona también que la forma de comunicarse entre los distintos objetos ha ido evolucionando con el tiempo y que cuando él comenzó con su idea de orientación a componentes, la forma en que se enviaban mensajes entre los distintos componentes aún estaba muy inmadura.

El primer lenguaje orientado a componentes que existió fue Smalltalk, creado por el mismísimo Alan Kay, sin embargo, este no se adecua 100% a la orientación a componentes que él define, ya que, como mencionamos, su opinión y experticia en el tema ha ido evolucionando con el tiempo. Acá también utilizaremos la palabra componente para referirnos a los objetos de Alan Kay.

En Smalltalk, todo es un componente

Logo de SmallTalk
Logo de SmallTalk
  • Los componentes se comunican entre ellos enviando y recibiendo mensajes a través de un emisor y receptor.
  • Cada componente es una instancia de una clase, que esta también debe ser un componente
  • Las clases contienen el comportamiento compartido de las distintas instancias.

Esto que nosotros acabamos de mencionar son las definiciones de versiones iniciales de smalltalk, no necesariamente habla sobre la idea que tenía en mente sobre su orientación a componentes.

Y algo muy importante de mencionar, los diseños iniciales de smalltalk no tenían herencia, ya que Alan Kay considera la herencia y subclases una distracción del beneficio que te entrega su orientación a componentes. Estas fueron agregadas después a Smalltalk y de ahí empieza la confusión de por qué se piensa que la herencia es parte fundamental de la programación orientación a objetos, pero esta funcionalidad no fue incluida por Alan Kay en Smalltalk

La programación orientada a componentes tiene su base en el modelo de actores, ¡el cual es un modelo de computación y no un paradigma de programación!

Versiones anteriores a Smalltalk-80 estaban basadas fuertemente en el modelo de actores, pero luego de Smalltalk-80, los desarrolladores cambiaron el enfoque de asíncrono unidireccional a síncrono bidireccional el cual es el modelo de procedimiento. Sin embargo, decidieron mantener la terminología de modelo de actores, como el término de mensaje para llamar procedimientos en lugar de notificaciones de una sola vía.

Esto causó confusiones, ya que otros pensamientos de orientación a objetos como Simula no estaban inspirados en el modelo de actores.

Y en una entrevista que se le hizo a Alan Kay el 2003, él mencionó que su programación orientada a componentes solo significa:

  • Mensajes
  • Retención y protección del estado en sus componentes
  • Y late binding!

Late binding, significa que el tipo de dato se desconoce hasta el runtime, por ende no puede ser validado al momento de compilar nuestra aplicación.

Luego de todo esto y dada la evolución que ha tenido Smalltalk, este ya no podría ser considerado orientado a componentes. Por lo que la idea general de Alan Kay se perdió, si tan solo existiera un lenguaje en todo el mundo que implementara las ideas de Alan Kay y que él mismo lo haya validado! ¡Podríamos ver qué es a lo que Alan Kay de verdad se refería!, también podríamos ver si su idea de orientación a componentes tendría buen desempeño, sería fácil de mantener y además podríamos medir su escalabilidad!

Lamentablemente, eso no podremos saberlo…¿O sí?

¿Existe un verdadero lenguaje orientado a objetos?

Les presento a Erlang, creado por Joseph Leslie Armstrong

Joseph Leslie Armstrong fue un científico de la computación que se dedicó a crear sistemas distribuidos tolerantes a los fallos. A los 17 empezó a programar en Fortran en el mainframe de su condado local, esta experiencia lo ayudó en sus estudios de física en la University college London donde ayudaba a depurar las aplicaciones construidas por sus compañeros a cambio de cerveza.

Cuando se encontraba trabajando en los laboratorios de ciencias de la computación en Ericsson, él en conjunto con Robert Virding y Mike Williams desarrolló el lenguaje de programación Erlang. El nombre de Erlang es en referencia al ingeniero y matemático Agner Krarup Erlang, y además es la abreviación de Ericsson Language. Erlang se diseñó con el objetivo de mejorar el desarrollo de aplicaciones de telefonía. Sus versiones iniciales fueron escritas en Prolog, pero luego de unas cuantas pruebas se dieron cuenta de que necesitaban que el lenguaje fuese al menos 40 veces más rápido para poder tener un uso en producción, y en 1992 se empezó a trabajar en la máquina virtual de BEAM, la cual compila el código escrito en Erlang a C.

Logo de Erlang
Logo de Erlang
Joseph Leslie Armstrong
Joseph Leslie Armstrong

Erlang se utilizó para productos de telefonía como AXE-N en 1995 y en 1998 Ericsson anunció el switch AXD301 que contenía más de un millón de líneas escritas en Erlang y tenía una disponibilidad de más del 99.9999999%

Poco después Ericsson Radio Systems anunció que ya no se podría utilizar Erlang en la fabricación de nuevos productos, lo que causó que Armstrong y otros dejaran Ericsson. A finales de ese año se liberó el código de Erlang. Eventualmente, Ericsson volvió a aceptar Erlang y re-contrató a Armstrong en el 2004.

Hoy Erlang es un lenguaje multipropósito, concurrente exclusivamente con el paradigma funcional y posee un sistema de garbage collection.

Con el cual se construyó la herramienta de mensajería whatsapp. En un momento dado, el año 2015 para ser exactos, Whatsapp solo necesitaba a 50 ingenieros para sus más de 900 millones de usuarios.

Por si no lo conoces, Quora es una aplicación web donde puedes realizar todo tipo de preguntas y la gente acá también pregunta sobre informática y desarrollo de software. Un usuario hizo la siguiente pregunta:

Logo de Quora
Logo de Quora

¿Qué opina Alan Kay sobre Joe Armstrong diciendo que erlang podría ser el único lenguaje orientado a objetos que existe y que Erlang tiene es extremadamente orientado a objetos?

Lo que nadie sabía es que esta pregunta llegaría a los mismos ojos de Alan Kay y que además él se tomaría la molestia de contestar.

«Yo amo a Joe Armstrong, perdimos a un gran hombre debido a su reciente partida. Y lo más probable es que tenga razón, Erlang es mucho más cercano a mis ideas que tenía sobre objetos y cómo utilizarlos. Sin embargo, otra forma de verlo es considerando lo que de verdad necesitamos y así darnos cuenta de que necesitamos cosas que van más allá de la programación. Joe definitivamente estaría más a favor de esta idea en vez de preocuparse que fue lo que hizo uno de nosotros décadas atrás».

Alan Kay

Y esto ha sido todo de este post, si te ha encantado, ¡golpea al botón de me gusta!, dejanos un comentario, y visita nuestra Academia Hola Mundo, donde encontrarás todos los cursos para formarte como un desarrollador o desarrolladora.

Y para no perderte nada, no olvides suscribirte a este blog, seguirnos en todas las redes como Youtube, Twitter e Instagram, y por último, te invitamos a escuchar nuestra música «Hola Beats«, diseñada para ayudarte a concentrarte y acompañarte en tu aprendizaje o trabajo, la puedes encontrar en Spotify, Apple Music, Amazon Music, Youtube Music y Deezer.

¡Hasta la próxima!, y chao mundo

Comments (1)

  • Gabosays:

    agosto 4, 2023 at 11:42 am

    Ojalá saquen algún curso para aprender programación funcional y de elixir para el backend usando Phoenix. Gran lenguaje y un paradigma que está en auge 🙂

Deja un comentario

Press ESC to close

Descubre más desde Hola Mundo

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo