Una interfaz especifica qué puntos de entrada ha de tener un sistema determinado. Una interfaz es independiente del código que haya por debajo, de tal forma que se puede cambiar toda la implementación que hay por debajo y sin embargo los clientes podrán seguir conectados.
Una interfaz es una especie de contrato, de tal forma que tanto el módulo que implementa la interfaz como el módulo que la usa pueden saber de antemano qué funcionalidad está disponible.
En C++ no existe el concepto de interfaz como tal. Lo más parecido es una clase virtual pura:
Código C++:
Ver originalstruct Interfaz
{
// Destructor virtual para evitar problemas en la herencia
virtual ~Interfaz();
virtual void Func1() = 0;
virtual int Func2(int) = 0;
};
Ya que en C++ no existe el concepto de interfaz hay que intentar ser muy cuidadoso a la hora de diseñar las interfaces. Una interfaz
no ha de tener código. Si a una interfaz le añades código deja de ser una interfaz.
Como ves una interfaz no se diferencia demasiado de una clase cualquiera. Lo único que identifica en C++ una interfaz como tal es que todos sus miembros son abstractos.
¿Por qué usar interfaces? La utilidad de las interfaces es que no exponen la implementación... no hay código de por medio. Esta tontería permite desacoplar el código y reducir las dependencias.
Los servicios Web, por ejemplo, suelen exponer su funcionalidad pública mediante interfaces. Esto permite que cualquiera pueda diseñar un cliente que sea capaz de consumir información mediante dicha interfaz... si la implementación del servicio web cambia, al no verse modificada su interfaz, los clientes no notarán diferencia salvo quizás en los tiempos de respuesta o en la estabilidad.
Otro elemento software susceptible de ser diseñado mediante interfaces son los plugins de las aplicaciones. Al obligar a que un plugin implemente una interfaz determinada permites que la aplicación pueda saber desde el principio cómo va a poder manejar los plugin independientemente de su naturaleza.
Un saludo.