Bienvenidos.
Continuamos con las interfaces en Java.
Ven qué es lo que son?
Una colección de métodos sin implementar, es decir, método abstracto, puramente comportamiento.
Pero también pueden contener valores constantes, es decir, atributos con el modificador final y static,
pero muy importante tener en cuenta que declara el que se hace el comportamiento, qué debe hacer un
objeto o una clase, pero no el cómo, no su implementación.
Bueno, las clases que implementan esta interfaz o las interfaces tienen que implementar este método.
Este comportamiento con su propia forma, con su propia lógica de programación y por supuesto, cada
clase que implementa esta interfaz lo hace de forma distinta.
Y también oita el concepto de polimorfismo diferente forma de hacer lo mismo.
Mismo comportamiento.
Entonces podríamos hacer que una interfaz es similar a una clase abstracta.
Es decir, no es igual, porque conceptualmente también hay diferencia importante, pero básicamente
es como una clase abstracta.
Pero solamente podemos definir métodos o firmás sin implementar.
No podemos tener métodos implementados, solamente declarar comportamiento sin cuerpo.
capturÃ similitudes entre clases no relacionadas, sin forzar, sin obligar a una relación entre ella.
Es decir, no hay jerarquía.
Podemos agrupar diferentes tipos de objetos que no tienen nada que ver, pero todos estos objetos realizan
el mismo comportamiento, pero de diferente forma.
Y al final es un protocolo de implementación entre clases y cómo la interfaz es un tipo de dato de referencia.
También se va a utilizar como un tipo dato del objeto que implementa esta interfaz.
Por lo tanto, lo podemos utilizar como argumento en un método, como una creación de variable.
Bueno, vimos ejemplo en el list en lápiz de colección tallaba utilizamos el tipo list que la interfaz
que la implementan clases concretas.
Por ejemplo, el ArrayList, por ejemplo, el linked list o lista enlazada para poner en contexto la
herencia de clase definen el que son una jerarquía, mientras que la interfaces agrupa en clase que
definen el quehacen comportamiento.
Cuando se agrupa por herencia, hay una relación familiar de parentesco con las interfaces.
Agrupamos objetos que hacen cosas similares.
Eso es todo.
Por poner un ejemplo, una clase, hoja o papel puede tener toda la información o implementación base
para cualquier tipo documento para que se puedan imprimir, puedan pasar por la impresora un papel,
se puede imprimir algún método abstracto, por ejemplo, imprimir.
Hay un contrato implementación que las clases hijas debieran implementar.
Bueno, y las clases hijas podrían implementar este método de forma distinta.
Por ejemplo, sobrescribir el método imprimir, ya sea un currículum o un contrato de trabajo uniforme,
un documento, algún estudio, en fin, todos son tipos de papel o hoja y todas saben cómo imprimirse
por la clase padre abstracta.
Hasta ahí estamos bien.
Pero qué pasa si el diseño se me complica un poco más y queremos imprimir cosas que no necesariamente
sean hojas?
No sé, como por ejemplo un libro, una revista, una etiqueta o incluso creo imprimir una calcomanía,
un sticker o lo que sea.
Incluso una polera con un estampado te pegan también ahí el diseño se nos complica un poco más porque
cómo lo podríamos enfrentar?
Creamos tanta impresora como objetos o temas distintos.
Tengamos quizás, no sé, buena alternativa llenarnos de impresora por cada tipo objeto.
Ahora tenemos varios tipos de objetos que no necesariamente son simples hojas.
No, no podemos modificar la herencia, por ejemplo, para que un libro sea hijo de hoja, porque un
libro no es hijo de hoja.
Un libro contiene hoja, contiene varios elementos que son hojas, pero un libro también se puede imprimir.
Pero no puedo heredar de hoja para que el libro se pueda imprimir.
No es parte de la jerarquía.
Se fijan o bien que la impresora ahora controle libros y que todo herede de libros, es decir, que
la hoja herede libro.
Bueno, tampoco, porque una hoja tampoco es un libro conceptualmente incorrecto, el diseño o cualquier
variante que se nos pueda ocurrir.
El problema que la herencia no cubre estos casos, estos aspectos solamente la herencia se aplica cuando
hay una relación de parentesco, una relación familiar.
Si no existe simplemente la herencia no sirve.
No podríamos aplicar, por ejemplo, clases abstracta con un papel o hoja para un libro, para una revista?
No, no son tipos de.
Pero sí podría ser, por ejemplo, un documento, una factura, un informe, un currículum, un contrato.
Si ahí podría ser un tipo de papel, en fin.
Entonces acá es cuando entra en juego la interfases comportamiento, es decir, juntar varios objetos,
agrupar, pero por lo que hacen, no por lo que son, no por la herencia.
Como buena práctica, en lo posible tratar de diseñar siempre orientado a la interfases o a componentes
abstracto, ya sea interfaces, clases, abstracta, en fin, y evitar el diseño orientado a la implementación,
ya que cuando utilizamos tipos concretos en nuestro código queda muy acoplado a una implementación y
después se código.
El día de mañana podría cambiar por otra implementación, pero el tipo auto va a seguir apuntando hacia
una clase en concreto.
Entonces tendríamos que estar modificando en varios lugares donde usamos esa clase para ir cambiando
el tipo de la nueva implementación, pero si tenemos un tipo genérico, un tipo de una interfaz o clase
abstracta, queda mucho más desacoplar.
Podríamos cambiar implementación por otra clase sin tener que modificar los tipo de datos donde estemos
usando.
Entonces recuerden que los tipo de interfaz, el tipo dato de interfaz se pueden utilizar en argumento
de métodos, en declaración de variable de atributo de una clase y eso es desacoplar de una implementación
concreta.
Entonces, un diseño orientado a la interfaces hace que las clases que la utilicen puedan acceder a
estos objetos o servicios a través de su interfaz, que a su vez son implementadas por clases concretas,
ya no depender de clases concretas en el tipo dato.
Nuestro diseño será mucho más reutilizable, escalable y sobretodo fácil de mantener.
Y este tipo de diseño orientado a interfaces se utiliza mucho, por ejemplo en framework como Spring
por ejemplo, o también en Java.
Interprete dicho en todo lo que es Enterprise Vins.
Todo lo que contexto inyección de dependencia.
Al final trabajamos con tipos genéricos con tipo de la interfaz.
Veamos el ejemplo en un mele.
Acá tenemos la interfaz imprimible con el método imprimir.
El método es su firma, un protocolo que deben implementar la clase que implementan esta interfaz.
Por ejemplo, una foto puede implementar imprimible.
Un currículum puede implementar imprimible un sobre un libro también.
Pero por ejemplo, un libro no es por ejemplo una hoja, un sobre si podría ser un papel, una hoja,
un currículum, también una foto también y pueden pasar por la impresora, pero en el caso del libro
no. Pero al final, para que todas se puedan imprimir es a través de la interfaz imprimible, ya que
por ejemplo, la clase impresora, el tipo dato que acepta es imprimible, ya donde tenemos el control
de tipo.
Por lo tanto, cualquier objeto que implementa la interfaz independiente, si están relacionados o no,
se va a poder imprimir.
La relación o CML de la interfaces es similar al de la herencia, pero es una línea punteada y ambas
terminan en un triángulo blanco y se le conoce como relación de realización de realizar un comportamiento
de implementación.
Ejemplos de interfaces similar a una clase.
Pero en vez de utilizar la palabra class, utiliza la palabra reservada interface o interface public
interface imprimible y los nombre de interfaz.
Igual que las clases comienzan con mayúscula y palabra compuesta.
La primera que continúa en mayúscula, que es el tipo de escritura joroba de camello o camello keys
y los métodos la interfaz.
A diferencia de las clases abstracta no lleva la palabra abstract no simplemente el modificador public,
el tipo de retorno y el nombre del método con sus argumentos punto y coma, sin llaves, sin cuerpo.
Eso si no tiene implementación, pero siempre son públicas o también default.
Acá tenemos ejemplo de clase que implementan una interfaz.
Bueno, utilizan la palabra implementas y luego el nombre la interfaz.
A diferencia del stents en la herencia, acá utilizamos implementas implementamos el método bueno,
muy parecido también a una clase abstracta o a la herencia con el hover right.
Porque al final lo que está haciendo es implementar, sobrescribir un método y dándole una lógica de
programación.
Por ejemplo, el currículum se imprime.
Luego tenemos una foto que también implementa imprimible.
También en el método Imprimir está obligada a implementar el método de la interfaz Imprimir.
Pero también tenemos libro que implementa interfaz a pesar de equilibrio, no tiene mucho en común en
jerarquía respecto al currículum o a una foto, pero todos se imprimen.
Otra de las características de las interfaces es que soporta la herencia múltiple.
Es decir, una clase puede implementar varias interfaces, no solamente una.
Entonces es algo parecido a la herencia múltiple, pero que Java en la herencia.
No se soporta.
No podemos heredar más de una clase, como por ejemplo en otro lenguaje, como en C++ existe la herencia
múltiple, pero acá en Java no. Ya que al final es por un tema de diseño.
Si una clase hereda de varios padre y varios de sus padres tienen un mismo método que se llama igual.
Por ejemplo.
Entonces la clase hija.
Cuál va a heredar?
El de la clase padrea entre la clase padre b.
El de la clase padre se queda ambiguo.
No sabe qué método heredar.
Entonces, para evitar problemas de ambigüedad o de diseño en Java, la herencia múltiple herencia de
clases no se soporta, pero sí a nivel de interfaces.
Es decir, podemos implementar.
Por ejemplo, acá tenemos la interfaz puede saltar, puede correr, puede nadar con diferentes métodos
saltar, correr, nadar.
Pero las clases, por ejemplo, un perro puede implementar, puede saltar, puede correr, puede nadar
se por comas.
Entonces acá tenemos una implementación de herencia múltiple a nivel interfaces.
Un objeto, una clase puede realizar un par y comportamiento se pegan implementar diferentes interfaces
y no solamente perros, sino quizás un gato también, o quizá cualquier otro objeto que no tenga nada
que ver con ningún tipo de perro ni gato, pero que al final puedes?
A?
Tar puede correr y también podría nadar bien, por ahora quedamos hasta acá y continuamos las siguientes
clases con ejemplos Nos vemos.