Menu
Coddy logo textTech

¿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.

Por Kevin Spektor, Cofundador y CTO

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

NivelCon qué trabajasQué oculta
Tu programaprint("hi"), sorted(names)Cómo hace el trabajo la biblioteca
Python y su biblioteca estándarCadenas, listas, archivosLa gestión de memoria, las llamadas al sistema
El intérprete (CPython)BytecodeEl código C y el código máquina que lo ejecutan
Sistema operativoArchivos, procesosBloques de disco, controladores de dispositivos, planificación de la CPU
HardwareInstrucciones de máquinaTransistores 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ónEncapsulamiento
Pregunta que responde¿Qué hace esto?¿Quién puede tocar los datos?
En qué se centraLa interfaz: las operaciones que se ofrecenEl interior: los datos detrás de la interfaz
Herramientas principalesFunciones, clases abstractas, interfaces, módulosprivate, _name, propiedades, #fields
EjemploNotifier.send() funciona para correo y SMS_balance solo cambia mediante withdraw()
NivelDiseñoImplementació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?
Una función es el más sencillo: llamas a 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?
Cada función, clase y módulo de Python es una abstracción sobre el código que contiene. Para una versión formal, el módulo estándar 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?
Java expresa la abstracción con clases abstractas e interfaces. Una clase abstracta puede contener métodos abstractos, que no tienen cuerpo y que las subclases deben implementar, y no se puede instanciar con new. Una interfaz enumera métodos que toda clase que la implemente debe ofrecer, y una clase puede implementar varias interfaces.
¿Cuáles son los cuatro pilares de la POO?
Encapsulamiento, abstracción, herencia y polimorfismo. El encapsulamiento protege los datos de un objeto, la abstracción muestra solo lo que hace el objeto, la herencia permite que una clase reutilice el código de otra, y el polimorfismo permite que un mismo código trabaje con muchos tipos a través de una interfaz común.
¿La abstracción puede empeorar el código?
Sí, cuando llega demasiado pronto u oculta lo que no debe. El código pensado para casos que nunca llegan tiene capas de más que leer y cambiar sin ningún beneficio. Una pauta habitual es esperar a haber escrito código parecido dos o tres veces, para que la forma común esté clara antes de ponerle nombre.
Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR