Programación Orientada a Objetos (VII)

Entramos aquí en un concepto que, para muchos, es superfluo pero, que cuando te pones a desarrollar «en serio», te das cuenta de que representa una inestimable ayuda. Se trata de las interfaces. Son piezas de código donde se declaran los métodos que se van a usar en las clases, sin definirlos. Esto significa que los métodos que se declaran en la interface no tienen ningún código. No hacen nada. Es en la clase donde vayamos a usar la interface en dónde hay que definir un código para esos métodos.

ATENCIÓN. Cuando usamos un método en una clase  (o una función en cualquier parte del código, si a eso vamos), hacemos dos cosas. Por una parte declaramos el método. Esto significa que decimos que va a existir ese método, cuál es su nombre y los parámetros que recibe, si es el caso. Por otra parte definimos el método. Esto significa decir lo que hace el método, es decir, escribir el código del cuerpo del método.

Cómo siempre, lo verás claro cuando abordemos el tema, así que vamos a ello.

QUÉ ES UNA INTERFACE

Una interface (o interfaz) es una pieza de código que declara los métodos que vamos a usar en una clase, sin definirlos. El mismo término interfaz puede, al principio, inducir a confusión, porque tendemos a pensar en interfaces de usuario, es decir, vistas con formularios, botones, enlaces, etc. No tiene nada que ver. En el contexto de la OOP la interfaz es sólo una especie de declaración de intenciones.

Para verlo claro, vamos a seguir montando ejemplos con nuestra clase para crear televisores. En este caso, vamos a añadir un listado, llamado interfaceTelevisor.php, cuyo listado es el siguiente:

Observa las declaraciones de los métodos. Terminan con punto y coma (;) y no llevan llaves para difinir el código, porque en una interfaz no se define el código de ningún método. Este concepto (métodos declarados pero no definidos) es lo que se llama métodos abstractos. Tal cómo aparece el código da la impresión (de momento) de momento, de no servir para nada. Enseguida verás que esto no es así.

IMPLEMENTANDO LA INTERFACE

Ahora vamos a implementar esta interface en nuestra clase CrearTelevisorClass.php. Para ello, empleamos la palabra reservada implements, seguida del nombre de la interface, en la declaración de la clase. El código queda así:

Observa la línea resaltada, dónde se implementa la interfaz. Fíjate que el código de la clase sobrescribe todos los métodos de la interfaz, definiéndolos. Es lo mismo que hacíamos en ejemplos anteriores, aquí no parece haber cambios. Ahora observa el código index.php que instancia la clase en un objeto, y lo usa para mostrarnos algunos datos:

Cuando ejecutamos el código, lo que vemos en la pantalla del navegador nos muestra que el objeto funciona perfectamente:

El televisor es de color negro.
Tiene una pantalla OLED de 42 pulgadas.
El televisor es de color azul.
Tiene una pantalla LCD de 60 pulgadas.

Pues entonces ¿Qué es lo que hemos hecho? ¿Para qué nos sirve la interface?

EL SENTIDO DE LA INTERFACE

Para entender el sentido de usar interfaces, vamos a modificar ligeramente el código de la nuestra, añadiendo la declaración de otro método (digamos uno que, pretendemos, sirva para encender y apagar el televisor):

Si ahora tratamos de ejecutar el código index.php, nos encontramos con un error, que más bien es un horror:

Fatal error: Class CrearTelevisorClass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (interfaceTelevisor::encenderApagar) in C:\xampp\htdocs\interfaces\src\classes\CrearTelevisorClass.php on line 3

Básicamente, nos informa de que TODOS los métodos que han sido declarados en una interface deben ser sobrescritos en las clases que implementen esa interface. Eso no significa, necesariamente, que debamos definirlos. Podemos sobrescribirlos sin darles un cuerpo con una funcionalidad, pero deben aparecer sobrescritos. Observa el cambio mínimamente imprescindible en CrearTelevisorClass.php:

Fíjate en las líneas resaltadas. Ahora podemos ejecutar de nuevo index.php, y vuelve a funcionar igual que antes.

Anteriormente hemos llamado a las interfaces declaración de intenciones, y eso es, exactamente, lo que son. Nos aportan una lista de los métodos que debemos incluir en nuestra clase, a fin de que, durante el desarrollo no olvidemos ninguno. Una interfaz es, por lo tanto, una guía de los métodos que debe incluir nuestra clase. De este modo, si olvidamos alguno, un error en la ejecución nos avisará de ello.

MÚLTIPLES INTERFACES

Al contrario de lo que ocurre con la herencia de clases, que muchos lenguajes no soportan la herencia múltiple, en una clase sí podemos, siempre, implementar todas las interfaces que necesitemos, separando sus nombres por comas. Genéricamente, la sintaxis para implementar múltiples interfaces en una clase sería la siguiente:

class MiClase implements interfaz_1, interfaz_2, ..., interfaz_n

Por supuesto, en la clase deberemos sobrescribir todos los métodos de todas las interfaces, aún cuando los dejemos, cómo ya hemos visto, sin un código definido.

CONCLUYENDO

En este artículo hemos aprendido lo que son las interfaces en POO, y como usarlas en nuestros proyectos como guías de los métodos a usar en cada clase. Como siempre, aquí tienes el código de los ejemplos. Siéntete libre de modificarlo y experimentar con él. Nos vemos en el siguiente artículo.

   

Deja un comentario