Interfaz (programación)
Una lista de métodos que una clase se compromete a tener, sin decir cómo los hace: un contrato que permite tratar igual objetos distintos.
Una interfaz declara qué se puede hacer (por ejemplo, «calcular el área») pero no cómo. Cada clase que la implementa escribe su propia versión.
Así, una función que recibe «cualquier figura» funciona igual con círculos que con rectángulos. En Rust se llaman traits; en Go se cumplen sin declararlo, con solo tener los métodos.
Un ejemplo
Una interfaz MetodoDePago con el método cobrar() permite añadir Bizum o tarjeta sin tocar el código del carrito.
Por qué importa
Una interfaz define qué se puede hacer con algo sin decir cómo se hace. Esto permite escribir código que dependa del contrato y no de una implementación concreta, de modo que puedes cambiar una pieza por otra sin tocar el resto. Por ejemplo, tu programa puede guardar datos en una interfaz Almacen sin importarle si por debajo hay un archivo o una base de datos.
Es una pieza clave en proyectos grandes y en las pruebas: sustituyes una implementación real por una falsa que cumple el mismo contrato y compruebas el comportamiento sin depender de servicios externos.
Confusiones frecuentes
La palabra «interfaz» tiene varios significados. En programación orientada a objetos es el contrato de métodos que debe cumplir una clase, como interface en Java o C#. Pero también se habla de interfaz gráfica de usuario, que es lo que ve el usuario, y de interfaz de programación (API), el conjunto de funciones que ofrece una biblioteca o un servicio. Tampoco hay que confundirla con una clase abstracta: la interfaz no guarda estado ni suele contener código, aunque algunos lenguajes admiten métodos por defecto.
Preguntas frecuentes
¿Puede una clase implementar varias interfaces?
Sí, en Java y C# una clase puede implementar tantas interfaces como necesite, aunque solo pueda heredar de una clase.
¿Existen interfaces en Python o JavaScript?
No como construcción obligatoria. Python usa clases abstractas o protocolos, y en JavaScript puro basta con que el objeto tenga los métodos. TypeScript sí incorpora interface.
Fuentes consultadas
- Creating Interfaces (Oracle)