Cuando un programa crece hasta tener cientos de procedimientos que se llaman entre sí, el código se vuelve difícil de seguir y mantener. Las aplicaciones modernas —móviles y web— están llenas de botones, interacciones por tap, clic o voz que ejecutan código de forma independiente. Gestionar todo esto desde un procedimiento principal sería extremadamente complejo, y es justo el problema que la programación orientada a objetos (POO) vino a resolver.
¿Cuál es el origen de la programación orientada a objetos?
A finales de los años cincuenta, en el MIT ya se hablaba de objetos en algunas investigaciones, pero el concepto cobró verdadera relevancia cuando Alan Kay lo incorporó en sus trabajos [1:23]. Kay describió los objetos como células biológicas o computadoras individuales en una red, capaces de comunicarse a través de mensajes. Esa metáfora contiene ideas que se siguen utilizando tal cual en la POO moderna.
El primer lenguaje que adoptó formalmente este paradigma fue Simula [1:50], el cual introdujo conceptos como clases, objetos, herencia y enlaces dinámicos. Hoy en día, lenguajes populares como Java, C++, C#, Python, Ruby y PHP se apoyan en estos mismos fundamentos.
¿Qué son los objetos, clases, propiedades y métodos?
La POO se articula alrededor de cuatro elementos esenciales que conviene distinguir con claridad [2:10]:
- Clase: es el molde a partir del cual se crean objetos. Si pensamos en "humano", la clase es la plantilla que define qué características y comportamientos tendrá cualquier humano.
- Objeto (instancia): es cada entidad concreta creada a partir de una clase. Juan, Juanita y Julián son objetos de la clase humano [3:27].
- Propiedades (atributos): son las características que posee cada objeto. Por ejemplo, la altura es una propiedad compartida por todos los humanos, pero con valores distintos para cada uno [2:55].
- Métodos: son las acciones que un objeto puede realizar. Un objeto "Héctor Vega" de la clase humano tiene el método "dar clases" que se ejecuta cuando es invocado [3:10].
¿Cuáles son los cuatro pilares de la POO?
La programación orientada a objetos se fundamenta en cuatro pilares que permiten aprovechar al máximo este paradigma [3:50]:
- Abstracción: consiste en aislar las características relevantes de un objeto. Un humano se compone de piernas, torso, brazos y cabeza; una cabeza a su vez tiene orejas, boca, nariz y ojos [4:15]. Antes de programar, es necesario conceptualizar qué objetos existen y cuáles son sus características.
- Herencia: permite que una clase hija herede atributos de una clase padre, e incluso tenga comportamientos propios [4:38]. Por ejemplo, de la clase "persona" puede derivarse "persona de la construcción", que posee herramientas y materiales específicos.
- Encapsulamiento: oculta parte del código de una clase para que su estado interno no sea alterado por accidente ni por efectos colaterales de otros objetos [5:05]. Sin esta protección, un programa podría verse afectado de forma catastrófica.
- Polimorfismo: ante un mismo mensaje, distintas clases reaccionan de manera diferente [5:28]. Frente a una alerta de sismo, la instancia "ciudadano" actúa de una forma, mientras que la instancia "cuerpo de rescate" ejecuta comportamientos completamente distintos.
¿Qué ventajas y desventajas ofrece este paradigma?
Entre sus ventajas destacan [5:55]:
- Reutilización de código entre clases e instancias.
- Reducción de redundancia al ser concretos con cada objeto.
- Facilidad de mantenimiento: se da servicio a un objeto y sus clases, no a decenas de procedimientos sueltos.
- Mayor seguridad mediante modificadores de acceso como métodos públicos o privados.
En cuanto a desventajas [6:20]:
- Los programas pueden crecer mucho si los objetos son demasiado generales y generan cadenas extensas de clases hijas.
- Requiere un esfuerzo mayor en la especificidad de cada clase.
- La velocidad de desarrollo puede verse afectada inicialmente.
¿Cómo se ve la POO en Java y Python?
En Java se puede definir una clase Botón con atributos como ID, color y acciones, junto con los métodos que ejecutan cada comportamiento [6:55]. También es posible crear instancias de ese botón que realicen acciones concretas, como encenderse o mostrar su nombre.
En Python, la sintaxis es más concisa: se crea una clase con atributos como nombre y color dentro del método constructor [7:25]. Ambos ejemplos muestran cómo la POO organiza el código de manera clara y modular.
Incluso lenguajes que originalmente no utilizaban este paradigma terminaron adoptándolo, como COBOL [6:48], lo que demuestra la influencia y vigencia de la programación orientada a objetos en la industria actual.
Si ya trabajas con algún lenguaje orientado a objetos, comparte en los comentarios cómo aplicas estos pilares en tus proyectos.