🧱 Programando con Objetos: Abstracción

Bienvenidos a una nueva lección de nuestra serie sobre Programación Orientada a Objetos. En nuestra lección anterior, exploramos el concepto de encapsulamiento y cómo nos ayuda a ocultar la complejidad innecesaria, como los detalles de implementación y la protección de invariantes en nuestro sistema. Hoy, avanzaremos un paso más y nos sumergiremos en el mundo de la Abstracción. Este principio es fundamental en POO, ya que nos permite centrarnos en lo que es relevante para un contexto específico, omitiendo los detalles que no son necesarios. Veremos cómo la abstracción nos ayuda a construir modelos más limpios y sostenibles de la realidad, facilitando el manejo de sistemas complejos.

🎨 Abstracción

La mayoría del tiempo, cuando creamos programas con POO, creamos objetos basados en objetos de la vida real. Sin embargo, los objetos del programa no representan a los reales con un 100% de precisión (y es raro que esto suceda). En cambio, tus objetos solo modelan atributos y comportamientos del objeto real en un contexto específico que necesitamos, ignorando el resto.

Por ejemplo, en una clase Airplane, podríamos considerar su existencia tanto en un simulador de vuelos como en una aplicación de reservas de avión. Pero, en el contexto de la aplicación de reservas, deberías preocuparte solo sobre mostrar el mapa de asientos y si están disponibles o no, para que un cliente pueda realizar la reserva.

Fuente: © Dive Into DESIGN PATTERNS - 2014-Actualidad Refactoring.Guru. All rights reserved. Illustrations by Dmitry Zhart

Lo mismo nos puede pasar, por ejemplo, con un Billete como el Dólar Estadounidense (USD).

Para las personas en el día a día, solo representa un papel que tiene un valor, ejemplo: 1 USD. Por lo tanto, seguramente estaría representado de la siguiente manera:

class Money {
  constructor(amount: Amount, currency: Currency) {
    this.amount = amount;
    this.currency = currency;
  }
}

Como vemos, para las personas que lo utilizan cada día importan dos cosas:

  • Monto (Amount): 1
  • Tipo de Moneda (Currency): USD

Por otro lado, si el sistema a modelar fuera dentro de la Reserva Federal de Estados Unidos (FED), seguramente el modelado del objeto Money tendría más características, como por ejemplo:

class Money {
  constructor(id: Identification, amount: Amount, currency: Currency) {
    this.id = id;
    this.amount = amount;
    this.currency = currency;
  }
}

Siendo el ID algo muy importante para la entidad del banco central, ya que permite verificar la identidad del objeto creado y realizar un seguimiento de su ciclo de vida en la sociedad.

🌐 Otros Ejemplos

  • Sistema de Gestión de Biblioteca: Imagina una clase Libro en una aplicación de biblioteca. En un contexto simple, podrías modelar atributos como título, autor y ISBN. Pero, en un contexto más complejo, como un sistema de gestión de biblioteca, podrías necesitar detalles adicionales como ubicación física, historial de préstamos y estado de conservación.

  • Aplicación de Gestión de Empleados: En una aplicación para la gestión de empleados, una clase Empleado puede ser muy diferente según el departamento. Por ejemplo, para el departamento de RRHH, los detalles relevantes podrían incluir historial de empleo y evaluaciones de desempeño, mientras que para el departamento de contabilidad, serían más importantes los detalles relacionados con la nómina y los beneficios.

  • Sistema de Monitoreo Ambiental: En un sistema de monitoreo ambiental, una clase Sensor podría abstraerse de diferentes maneras. Para la visualización de datos, podría ser suficiente modelar la ubicación y el tipo de sensor. Pero para la calibración y el mantenimiento técnico, necesitarías detalles más profundos como especificaciones técnicas y registros de mantenimiento.

🎓 Conclusión

La Abstracción es un modelo de un fenómeno u objeto del mundo real, limitado a un contexto específico, que representa todos los detalles relacionados a ese contexto o situación con una alta precisión y omitiendo todo el resto que no es necesario para el problema de negocio planteado.

Al igual que el encapsulamiento, la abstracción nos ayuda a gestionar la complejidad y a construir sistemas más claros y sostenibles. A medida que continuamos explorando los principios de POO, recuerda que la abstracción no se trata solo de omitir detalles, sino de capturar la esencia de lo que estamos modelando. En nuestra próxima lección, profundizaremos un poco más sobre el modelado en sí, ampliando aún más nuestro entendimiento de la programación orientada a objetos.

sign
Written on December 12, 2023