POO ¿Goodbye?

Diapositiva3

Llevaba mucho tiempo sin escribir aquí. Veré si poco a poco el tiempo me permite ser más constante. Vamos al asunto.

Una de las cosas que me hizo crecer como programador, fue aprender a programar orientado a objetos (POO). Aún recuerdo aquellos días de inicio de carrera cuando con mucho orgullo llevé a mi tutor una calculadora que permitía usar números imaginarios, que incluía más funciones que la propia calculadora de Windows y, además, ¡los resultados eran dos decimales más exactos!

Aquella calculadora se la entregué impresa (me niego a contar los motivos) en unos 80/90 folios de código*. Mi tutor miró solo las primeras hojas y me dijo, déjamelo unos días y luego hablamos. Como Jesucristo, “al tercer día resucitó”. Me entregó unos 15 folios y me dijo, aquí tienes tu calculadora. Lo hizo haciendo uso de algo llamado POO. Yo guardo el código de todo aquello que he hecho en mi vida como programador, todo menos esa calculadora.

(*) Para mejorar la idea de aquellas 80 hojas, aclaro que toda mi vida he odiado comentar código.

¿A qué viene la historia? Pues a este post que encontré en Facebook “Goodbye, Object Oriented Programming”.  Gracias Luis por compartirlo 😉

Me voy a centrar solo en tres aspectos del post, porque el resto no me merece la pena.

La primera es la frase “I couldn’t contain my excitement at the thought of mapping my real-world objects into their Classes and expected the whole world to fall neatly into place.”

Lo más interesante de esta frase, aparte de la excitación que seguro era provocada por algo ajeno a la POO, es el objetivo de mapear sus objetos al mundo real.

“Si es bueno vivir, todavía es mejor soñar, y lo mejor de todo, despertar.” Cuidado con los sueños, que el despertar, pueden provocar que se escriban post como el mencionado. La base de la programación orientada a objetos es mapear el comportamiento de nuestros objetos al mundo real y, los sueños, sueños son. Yo puedo soñar una cocina que seleccione el menú del día, los junte, los haga y, hasta me la traiga a la mesa del ordenador 🙂

La segunda es “The problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.”

Esto es una cita de Joe Amstrong y que entiendo, según su propio perfil de twitter (Writes programs and books. Invents things. Gives talks. Fixes broken software. Hobbies: Stroking cats, playing piano, grumbling, reading, thinking.), la escribiera en algún momento “grumbling”.

Mirad el artículo en la Wikipedia que hace referencia a la evolución humana y ahora decidme si cuando incluimos una clase Person en nuestros sistemas, llegamos hasta el diluvio.

Y por último, la referencia al problema del diamante, que no es otra cosa que el problema que presentan algunos lenguajes OO respecto a la herencia múltiple. Keep calm and use C++ 🙂

Para ejemplificar este problema, el autor del post usa 4 objetos.
– PoweredDevice
– Scanner
– Copier
– Printer

El problema se presenta cuando la clase Copier intenta heredar de Scanner y Printer. ¿Realmente esto es un problema de la programación orientada a objeto o hemos modelado mal nuestros objetos al real-world?

Si pensamos un poco en la vida real, una copiadora no necesita de un Scanner y un Printer para realizar su función. Yo puedo copiar de una cámara en forma de imagen o usando OCR (Optical character recognition). La salida tampoco tiene por qué ser un Printer, un fax no imprime y usa un modem como salida para enviar la información.

En realidad, una copiadora usa métodos de entradas y métodos de salidas. Heredar de una funcionalidad específica como un scanner o un printer y hacerlas propias (herencia), en el real-world, sería un error.

El post sigue enumerando los “problemas” de los pilares fundamentales de la POO, yo lo dejo aquí. Todo el que me conoce sabe que cuando hablo de estos temas, siempre digo lo mismo: esos cambios que nos llegan continuamente de gente que sabe mucho: POO, Patterns, DDD, Microservices, TDD, CQRS, Cloud, relámpagos, truenos y centellas, están ahí para que aprendamos de ellos. El uso que le des, será siempre tú responsabilidad.

C.U. y espero q pronto 🙂

Esta entrada fue publicada en General, POO, Social. Guarda el enlace permanente.

Una respuesta a POO ¿Goodbye?

  1. Yo no entiendo de códigos ni de esas zarandajas 😉 pero lo que sí me alegra es verte de nuevo por aquí 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *