¿Qué es la abstracción en programación?
En programación, la abstracción consiste en ocultar los detalles de cómo funciona algo detrás de una interfaz más sencilla, para que puedas usarlo sabiendo solo qué hace. Llamar a sorted(names) ordena una lista sin que tengas que escribir, ni siquiera ver, el algoritmo de ordenación.
Actualizado el 24 de septiembre de 2026
Cuando escribes print("hi"), no piensas en cómo llegan esas letras a la pantalla. Debajo de esa línea, Python convierte el texto en bytes y le pide al sistema operativo que los escriba, el sistema operativo se los pasa a tu terminal, y el terminal dibuja cada letra en píxeles con una fuente. Cada capa le ofrece a la de arriba una promesa sencilla y oculta cómo la cumple. Esa ocultación es la abstracción, y todo programa se apoya en muchas capas así.
Niveles de abstracción
| Nivel | Con qué trabajas | Qué oculta |
|---|---|---|
| Tu programa | print("hi"), sorted(names) | Cómo hace el trabajo la biblioteca |
| Python y su biblioteca estándar | Cadenas, listas, archivos | La gestión de memoria, las llamadas al sistema |
| El intérprete (CPython) | Bytecode | El código C y el código máquina que lo ejecutan |
| Sistema operativo | Archivos, procesos | Bloques de disco, controladores de dispositivos, planificación de la CPU |
| Hardware | Instrucciones de máquina | Transistores y señales eléctricas |
Cada nivel está construido sobre el de abajo y se puede entender sin él. Puedes escribir Python que funciona sin saber qué es un bloque de disco, y el sistema operativo puede guardar un archivo sin saber que contiene código Python.
Cómo funciona la abstracción en el código
Los programadores construyen sus propias capas de dos formas principales.
La abstracción procedimental es una función. Su nombre, sus parámetros y su valor de retorno son la interfaz; el cuerpo es el detalle oculto. Una vez que existe average(scores), el resto del programa la usa sin leer cómo suma y divide.
La abstracción de datos define un tipo por lo que puedes hacer con él, no por cómo guarda las cosas. Una cola es "añadir al final, sacar del principio". Cómo se colocan los elementos en memoria es una decisión privada:
serving soup
serving pasta
serving cake
El código de abajo no sabe nada de deque. Si lo sustituyes por una lista normal y pop(0), la salida es idéntica, solo que más lenta con colas largas, porque quitar el primer elemento de una lista desplaza todos los demás. La interfaz se mantuvo igual, así que no hubo que cambiar nada fuera de la clase.
Clases abstractas e interfaces
En la programación orientada a objetos, la abstracción suele significar establecer qué debe hacer una familia de clases y dejar el cómo a cada clase. En Python, el módulo abc marca un método como abstracto; una clase con un método abstracto sin implementar no se puede instanciar:
email to ana@example.com: Your package arrives today
sms to +15550100: Your package arrives today
Notifier is abstract: create an Email or an SMS instead
remind() solo depende de la abstracción: cualquier cosa con un método send. Añadir notificaciones push significa escribir una clase nueva, y remind() no se toca. Ese último paso, una sola llamada que ejecuta código distinto para clases distintas, es el polimorfismo: la abstracción define la interfaz común y el polimorfismo la hace funcionar.
Java tiene las mismas herramientas como palabras clave:
interface Notifier {
void send(String to, String text);
}
class Email implements Notifier {
public void send(String to, String text) { /* talk to the mail server */ }
}
Escribir new Notifier() es un error de compilación, porque una interfaz no tiene ninguna implementación que ejecutar. La documentación explica en detalle las clases abstractas y las interfaces en Java.
Abstracción y encapsulamiento
Las dos ideas aparecen juntas tan a menudo que es fácil confundirlas.
| Abstracción | Encapsulamiento | |
|---|---|---|
| Pregunta que responde | ¿Qué hace esto? | ¿Quién puede tocar los datos? |
| En qué se centra | La interfaz: las operaciones que se ofrecen | El interior: los datos detrás de la interfaz |
| Herramientas principales | Funciones, clases abstractas, interfaces, módulos | private, _name, propiedades, #fields |
| Ejemplo | Notifier.send() funciona para correo y SMS | _balance solo cambia mediante withdraw() |
| Nivel | Diseño | Implementación |
La abstracción decide qué operaciones mostrar; el encapsulamiento se asegura de que el resto quede oculto. La Queue de arriba hace las dos cosas: add y next son la abstracción, y el guion bajo de _items es el encapsulamiento.
Abstracciones con fugas y otros errores
Joel Spolsky formuló en 2002 la ley de las abstracciones con fugas (leaky abstractions): toda abstracción no trivial deja pasar parte del detalle oculto. Los números de coma flotante son la fuga clásica. Parecen decimales normales, hasta que se asoma el almacenamiento binario que hay debajo:
0.30000000000000004
False
Ni 0,1 ni 0,2 se pueden guardar exactamente en bits binarios, así que la suma sale un poco desviada. Puedes usar floats durante años sin pensar en esto, pero no para siempre, y por eso ayuda conocer una capa por debajo de aquella en la que trabajas.
Hay dos errores más que son frecuentes:
- Abstraer demasiado pronto. Una jerarquía de clases pensada para casos que nunca llegan es código de más que leer y cambiar. Sandi Metz lo resumió así: "la duplicación es mucho más barata que la abstracción equivocada".
- Confundir la abstracción con la palabra clave
abstract. Las clases abstractas son una herramienta. Toda función con un buen nombre también es una abstracción.
Qué leer después
Lee encapsulamiento y polimorfismo para completar el panorama de la orientación a objetos. La página del sistema operativo muestra la mayor abstracción de la que dependen tus programas. Para practicar, el curso de Python construye clases y funciones desde el principio, y el curso de Java cubre las clases abstractas y las interfaces.
Preguntas frecuentes
¿Cuál es un ejemplo de abstracción?
len(items) sabiendo qué devuelve, no cómo cuenta Python. Los pedales de un coche son la versión cotidiana, porque controlas la velocidad sin saber cómo quema el combustible el motor. En el código orientado a objetos, una interfaz como Notifier con un único método send es una abstracción sobre el correo electrónico, los SMS y las notificaciones push.¿Qué es la abstracción en Python?
abc te permite declarar una clase base abstracta con @abstractmethod; entonces Python se niega a crear objetos de esa clase, o de cualquier subclase que no haya implementado todos los métodos abstractos.¿Qué es la abstracción en la programación en Java?
new. Una interfaz enumera métodos que toda clase que la implemente debe ofrecer, y una clase puede implementar varias interfaces.