Abstracción

Ahora hablemos del segundo principio de la programación orientada a objetos:
la abstracción.

La abstracción significa reducir la complejidad ocultando los detalles innecesarios en nuestras clases.
Este es uno de los conceptos más malinterpretados en la POO.


Una metáfora

Piensa en el control remoto de tu televisor.
Tiene botones que usamos para cambiar de canal, subir volumen o apagar la TV.

Pero por dentro, hay circuitos, transistores y placas electrónicas.

Nosotros no queremos ni necesitamos entender cómo funcionan esos transistores.
Solo queremos usar los botones y que el televisor responda.

👉 Esa es la esencia de la abstracción: ocultar la complejidad y mostrar una interfaz sencilla.


Ejemplo en Java

Supongamos que tenemos una clase Empleado.
Queremos que oculte la forma en que almacena y valida sus datos,
y que exponga únicamente métodos claros para interactuar con ella.

public class Empleado {
    private int salarioBase;   // Campo privado
    private int tasaHoraria;   // Campo privado
    public int horaExtra;      // Campo público (por ahora)

    // Método para calcular salario total
    public int calcularSalarioBase(int horaExtra) {
        return salarioBase + (tasaHoraria * horaExtra);
    }

    // Setter y getter para salarioBase
    public void setSalarioBase(int salarioBase) {
        if (salarioBase <= 0)
            throw new IllegalArgumentException("Salario no puede ser menor que 0");
        this.salarioBase = salarioBase;
    }

    public int getSalarioBase() {
        return salarioBase;
    }

    // Setter y getter para tasaHoraria
    
    public void setTasaHoraria(int tasaHoraria) {
        if (tasaHoraria < 0)
            throw new IllegalArgumentException("La tarifa por hora no puede ser negativa");
        this.tasaHoraria = tasaHoraria;
    }

    public int getTasaHoraria() {
        return tasaHoraria;
    }
}

En este ejemplo:

  • Los atributos (salarioBase y tasaHoraria) están ocultos con private.

  • La clase expone solo los métodos necesarios (setSalarioBase, getSalarioBase, etc.).

  • Si en el futuro cambiamos la forma de almacenar datos (por ejemplo, usar un arreglo en vez de enteros), el código que usa Empleado no se rompe, porque la interfaz pública se mantiene.


Analogía final

Al igual que en una TV basta con un botón setChannel() para cambiar de canal, en la POO basta con exponer los métodos justos y necesarios.

No importa cómo se implementa internamente: 👉 lo esencial es que la interfaz sea clara, sencilla y confiable.