La guía o código que verás en este post es la resolución más rápida y válida que encontramos a tus dudas o dilema.
Solución:
Una interfaz es uno de los términos más sobrecargados y confusos en el desarrollo.
En realidad, es un concepto de abstracción y encapsulación. Para una “caja” determinada, declara las “entradas” y “salidas” de esa caja. En el mundo del software, eso generalmente significa las operaciones que se pueden invocar en el cuadro (junto con los argumentos) y, en algunos casos, los tipos de retorno de estas operaciones.
Lo que no hace es definir cuál es la semántica de estas operaciones, aunque es un lugar común (y una muy buena práctica) documentarlas cerca de la declaración (por ejemplo, a través de comentarios), o elegir buenas convenciones de nomenclatura. Sin embargo, no hay garantías de que se sigan estas intenciones.
Aquí hay una analogía: mire su televisor cuando esté apagado. Su interfaz son los botones que tiene, los distintos enchufes y la pantalla. Su semántica y comportamiento es que toma entradas (por ejemplo, programación de cable) y tiene salidas (visualización en pantalla, sonido, etc.). Sin embargo, cuando mira un televisor que no está enchufado, está proyectando la semántica esperada en una interfaz. Por lo que sabes, el televisor podría explotar cuando lo conectes. Sin embargo, según su “interfaz”, puedes asumir que no hará café ya que no tiene una ingesta de agua.
En la programación orientada a objetos, una interfaz generalmente define el conjunto de métodos (o mensajes) al que una instancia de una clase que tiene esa interfaz podría responder.
Lo que se suma a la confusión es que en algunos lenguajes, como Java, hay una interfaz real con su semántica específica del lenguaje. En Java, por ejemplo, es un conjunto de declaraciones de métodos, sin implementación, pero una interfaz también corresponde a un tipo y obedece a varias reglas de escritura.
En otros lenguajes, como C ++, no tiene interfaces. Una clase en sí misma define métodos, pero podría pensar en la interfaz de la clase como las declaraciones de los métodos no privados. Debido a cómo se compila C ++, obtienes archivos de encabezado donde podrías tener la “interfaz” de la clase sin una implementación real. También puede imitar interfaces Java con clases abstractas con funciones virtuales puras, etc.
Ciertamente, una interfaz no es un modelo para una clase. Un anteproyecto, según una definición, es un “plan de acción detallado”. ¡Una interfaz no promete nada sobre una acción! La fuente de la confusión es que en la mayoría de los lenguajes, si tiene un tipo de interfaz que define un conjunto de métodos, la clase que lo implementa “repite” los mismos métodos (pero proporciona una definición), por lo que la interfaz parece un esqueleto o un esquema de la clase.
Considere la siguiente situación:
Estás en medio de una habitación grande y vacía, cuando un zombi te ataca de repente.
No tienes arma.
Afortunadamente, un compañero humano vivo está parado en la puerta de la habitación.
“¡Rápido!” le gritas. “¡Tírame algo con lo que pueda golpear al zombi!”
Ahora considere:
No especificaste (ni te importa) exactamente qué tu amigo elegirá lanzar;
… Pero no importa, siempre que:
-
Es algo que poder ser arrojado (no puede tirarte el sofá)
-
Es algo a lo que puedes agarrarte (esperemos que no haya lanzado un shuriken)
-
Es algo que puedes usar para golpear los sesos del zombi (eso descarta almohadas y cosas así)
No importa si obtienes un bate de béisbol o un martillo,
siempre que implemente sus tres condiciones, estará bien.
Para resumirlo:
Cuando escribes una interfaz, básicamente estás diciendo: “Necesito algo que …”
La interfaz es un contrato que debe cumplir o ceder, dependiendo de si es un implementador o un usuario.
Finalizando este artículo puedes encontrar las explicaciones de otros desarrolladores, tú además puedes insertar el tuyo si lo deseas.