(Por recomendación de un amigo comparto esto como un post, viene de mi comunidad de Java)
Saludos amigos, disculparan que no he publicado nada recientemente pero estoy muy apurado en el trabajo pues tenemos el tiempo encima y un proyecto que entregar el fin de mes.
Aclarado esto, hoy quiero mostrar un tema muy útil y que pocos conocen o utilizan, las Interfaces en Java.
Podemos definir a una interfaz como un contenedor de métodos abstractos (es aquél que no tiene cuerpo, es sólo la firma del método) y propiedades y que puede ser implementada en una clase. A diferencia de la herencia en donde una clase puede heredar de sólo una clase, cuando se trata de interfaces se puede implementar más de una si es necesario.
Al ser métodos abstractos, cuando se implementa una interfaz, el programador se ve obligado a implementar todos los métodos de la interfaz en cuestión.
Siempre lo he dicho nada mejor que un ejemplo para ilustrar el caso..
Imaginemos que tenemos un sistema de punto de venta en el que se integran proveedores de servicios de recargas de tiempo aire electrónico; pero está claro que aunque todos los proveedores ofrecen la función de recarga no todos lo llevan acabo de la misma manera.
Quizá muy pocos se han visto en un problema como este, y muchos no verán el problema, pero qué pasa cuando desde mi pantalla de venta llamo al "proveedor".. como sabré si se trata del proveedor A, delproveedor B o del proveedor Z.. pues bien, podemos echar mano de las interfaces, la situación sería algo así:
Podemos ver que la interfaz sólo define los métodos (sólo las firmas) más no su funcionamiento.
Luego cuando una clase implementa la interfaz obligará a implementar todos los métodos abstractos, ya en cada clase el programador definirá cuál es la función de cada método:
Nótese que cuando se implementan mediante NetBeans (el IDE que yo utilizo) en el cuerpo del método ló único que se encuentra es un lanzamiento de una excepción de tipo UnsoportedOperation la cual sería lanzada si se llamará a un método de una clase que implementa la interfaz, pero que aún no soporta esa operación..
Las siguientes podrían ser las clases para el proveedor A y el proveedor B
Clase ProveedorA
Clase ProveedorB
Pdemos ver, que ambas clases hacen uso del método enviaSaldo() aunque lo hacen de manera diferente, la clase ProveedorA requiere de un número telefónico y un producto (sku) mientras que la clase ProveedorB requiere un número telefónico y un monto.
La relevancia de utilizar interfaces se muestra en la clase principal mostrada a continuación:
Usando ProveedorA
Usando ProveedorB
Podemos ver que lo único que cambia es la línea 16, donde se usa sin afectar el programa el ProveedorA o el ProveedorB y obviamente la salida, pues ambos proveedores manejan las recargas de manera diferente.
Ojalá esté siendo claro con el tema, si hay alguna duda ya saben, sólo externarla.
Si alguien necesita un tutorial de algo en especial (siempre que no sea hacerles la tarea o un proyecto de trabajo) adelante y con gusto lo vemos.
Saludos
Saludos amigos, disculparan que no he publicado nada recientemente pero estoy muy apurado en el trabajo pues tenemos el tiempo encima y un proyecto que entregar el fin de mes.
Aclarado esto, hoy quiero mostrar un tema muy útil y que pocos conocen o utilizan, las Interfaces en Java.
Podemos definir a una interfaz como un contenedor de métodos abstractos (es aquél que no tiene cuerpo, es sólo la firma del método) y propiedades y que puede ser implementada en una clase. A diferencia de la herencia en donde una clase puede heredar de sólo una clase, cuando se trata de interfaces se puede implementar más de una si es necesario.
Al ser métodos abstractos, cuando se implementa una interfaz, el programador se ve obligado a implementar todos los métodos de la interfaz en cuestión.
Siempre lo he dicho nada mejor que un ejemplo para ilustrar el caso..
Imaginemos que tenemos un sistema de punto de venta en el que se integran proveedores de servicios de recargas de tiempo aire electrónico; pero está claro que aunque todos los proveedores ofrecen la función de recarga no todos lo llevan acabo de la misma manera.
Quizá muy pocos se han visto en un problema como este, y muchos no verán el problema, pero qué pasa cuando desde mi pantalla de venta llamo al "proveedor".. como sabré si se trata del proveedor A, delproveedor B o del proveedor Z.. pues bien, podemos echar mano de las interfaces, la situación sería algo así:

Podemos ver que la interfaz sólo define los métodos (sólo las firmas) más no su funcionamiento.
Luego cuando una clase implementa la interfaz obligará a implementar todos los métodos abstractos, ya en cada clase el programador definirá cuál es la función de cada método:

Nótese que cuando se implementan mediante NetBeans (el IDE que yo utilizo) en el cuerpo del método ló único que se encuentra es un lanzamiento de una excepción de tipo UnsoportedOperation la cual sería lanzada si se llamará a un método de una clase que implementa la interfaz, pero que aún no soporta esa operación..
Las siguientes podrían ser las clases para el proveedor A y el proveedor B
Clase ProveedorA

Clase ProveedorB

Pdemos ver, que ambas clases hacen uso del método enviaSaldo() aunque lo hacen de manera diferente, la clase ProveedorA requiere de un número telefónico y un producto (sku) mientras que la clase ProveedorB requiere un número telefónico y un monto.
La relevancia de utilizar interfaces se muestra en la clase principal mostrada a continuación:
Usando ProveedorA

Usando ProveedorB

Podemos ver que lo único que cambia es la línea 16, donde se usa sin afectar el programa el ProveedorA o el ProveedorB y obviamente la salida, pues ambos proveedores manejan las recargas de manera diferente.
Ojalá esté siendo claro con el tema, si hay alguna duda ya saben, sólo externarla.
Si alguien necesita un tutorial de algo en especial (siempre que no sea hacerles la tarea o un proyecto de trabajo) adelante y con gusto lo vemos.
Saludos

