Skip to main content

Introducción a la Programación Orientada a Objetos

La Programación Orientada a Objetos (POO) es un paradigma que organiza el software como una colección de objetos que interactúan entre sí. Cada objeto es una instancia de una clase, que actúa como plantilla para definir sus atributos (estado) y métodos (comportamiento).

“Pensar en objetos es similar a cómo percibimos el mundo: un carro, una persona o una cuenta bancaria tienen características propias y comportamientos definidos”.

Pilares de la Programación Orientada a Objetos

Los cuatro pilares fundamentales de la Programación Orientada a Objetos son principios que permiten crear sistemas modulares, reutilizables y mantenibles. Cada uno aporta un enfoque estructurado para modelar el comportamiento y las relaciones de los objetos.

Encapsulamiento

Definición: Consiste en ocultar los detalles internos de un objeto, exponiendo solo lo necesario mediante métodos públicos. Protege el estado interno del objeto.

Ejemplo real: Un cajero automático oculta su lógica interna. Tú solo usas su interfaz (pantalla y botones).

Beneficio: Reduce el acoplamiento y permite cambiar la implementación sin afectar el exterior.

Abstracción

Definición: Se refiere a mostrar solo lo relevante del objeto, ocultando los detalles innecesarios para el usuario.

Ejemplo real: Para conducir un carro no necesitas saber cómo funciona el motor; solo usas el volante y los pedales.

Beneficio: Permite enfocarse en lo esencial del problema, facilitando el diseño y entendimiento del sistema.

Herencia

Definición: Permite que una clase (subclase) herede atributos y métodos de otra clase (superclase), evitando duplicación de código.

Ejemplo real: Bird hereda de Animal, por lo tanto, todos los pájaros son animales.

Beneficio: Fomenta la reutilización de código y la jerarquía entre objetos.

Polimorfismo

Definición: Permite que una misma operación tenga diferentes comportamientos según el objeto que la ejecute.

Ejemplo real: El método makeSound() se comporta diferente en Dog, Cat o Bird.

Beneficio: Facilita la extensión del sistema sin modificar código existente (Open/Closed Principle).

Código en Java de Pilares de POO

Ejemplo básico: Encapsulamiento y Abstracción

Ejemplo intermedio: Herencia y Polimorfismo

Mini proyecto: Sistema de Gestión de Animales

  • Clases: Animal (abstracta), Dog, Cat, ZooManager
  • Aplicación del polimorfismo: ZooManager recorre una lista de animales y ejecuta makeSound().
  • Modularidad por paquetes:
    • edu.usta.domain → entidades
    • edu.usta.application → servicios
    • edu.usta.ui → interfaz de consola

Reflexión final de Conceptos Base

Principios SOLID aplicados:

  • S – Single Responsibility: cada clase tiene una única responsabilidad (por ejemplo, Dog solo representa un perro).
  • O – Open/Closed: AnimalTrainer está abierto a nuevas clases (Parrot, Tiger) sin ser modificado.
  • L – Liskov Substitution: Dog y Cat pueden sustituir a Animal sin alterar la lógica.
  • I – Interface Segregation: aplicado si se definen múltiples interfaces como Flyable, Swimmable.
  • D – Dependency Inversion: si se usan interfaces en vez de clases concretas (ej. Animal).

Patrones identificados:

  • Template Method (en la clase abstracta Animal)
  • Strategy (si se define el sonido como comportamiento independiente)

Aplicación práctica

  • En videojuegos: Enemy hereda de Character, cada enemigo tiene diferentes estrategias de ataque (attack() polimórfico).
  • En banca: Account, SavingsAccount, CheckingAccount aplican herencia y polimorfismo.
  • En sistemas académicos: Person, Student, Teacher, printInfo() se comporta distinto.

Escenario en clase: Crear jerarquía de Vehicle, Car, Bike, Truck con un método polimórfico move().

Recursos y Bibliografía