Abstracción

Abstracción


En el contexto de la programación orientada a objetos, la abstracción es el principio que permite ocultar los detalles internos de implementación de un objeto y mostrar únicamente lo necesario para su uso. Es decir, se centra en qué hace un objeto, no en cómo lo hace. Este enfoque simplifica la interacción entre componentes, reduce la complejidad y permite desarrollar software más modular y mantenible.

Una forma sencilla de entender la abstracción es pensar en ella como una interfaz pública que nos permite interactuar con un objeto sin conocer su funcionamiento interno.


Ventajas de la abstracción:

  • Reducción de complejidad: Se ocultan detalles innecesarios al usuario.
  • Modularidad: Las partes del código están mejor separadas y son más fáciles de mantener.
  • Reutilización: Las interfaces definidas en clases abstractas pueden ser reutilizadas por múltiples clases.
  • Flexibilidad: Permite definir comportamientos generales y delegar la implementación específica a subclases.

Ejemplo del mundo real:

Considera una televisión: un dispositivo tecnológicamente complejo que contiene placas electrónicas, receptores de señal, procesadores de imagen, etc. Sin embargo, como usuarios, no necesitamos saber cómo funciona internamente para usarla. Solo usamos un control remoto con botones como encender, apagar, y cambiar canal.

Ese control remoto representa la abstracción: oculta toda la complejidad interna y nos ofrece una interfaz simple.


Abstracción en programación:

En Python, la abstracción se logra principalmente mediante clases y métodos. Una clase puede exponer solo los métodos necesarios para el usuario final, ocultando la lógica interna compleja.

class Televisor:
    def __init__(self):
        self.encendido = False
        self.canal = 1

    def encender(self):
        self.encendido = True
        print("Televisor encendido.")

    def apagar(self):
        self.encendido = False
        print("Televisor apagado.")

    def cambiar_canal(self, nuevo_canal):
        if self.encendido:
            self.canal = nuevo_canal
            print(f"Canal cambiado a {self.canal}")
        else:
            print("Primero debes encender el televisor.")

En este ejemplo, el usuario del objeto Televisor solo necesita conocer y utilizar los métodos encender(), apagar() y cambiar_canal(), sin preocuparse por cómo internamente se cambia de canal o cómo se mantiene el estado de encendido.