1
00:00:00,180 --> 00:00:00,810
Bienvenidos.

2
00:00:00,840 --> 00:00:02,910
Continuamos con las interfaces en Java.

3
00:00:03,040 --> 00:00:03,900
Ven qué es lo que son?

4
00:00:03,990 --> 00:00:08,760
Una colección de métodos sin implementar, es decir, método abstracto, puramente comportamiento.

5
00:00:08,820 --> 00:00:14,610
Pero también pueden contener valores constantes, es decir, atributos con el modificador final y static,

6
00:00:14,730 --> 00:00:20,190
pero muy importante tener en cuenta que declara el que se hace el comportamiento, qué debe hacer un

7
00:00:20,190 --> 00:00:24,030
objeto o una clase, pero no el cómo, no su implementación.

8
00:00:24,090 --> 00:00:29,160
Bueno, las clases que implementan esta interfaz o las interfaces tienen que implementar este método.

9
00:00:29,280 --> 00:00:34,230
Este comportamiento con su propia forma, con su propia lógica de programación y por supuesto, cada

10
00:00:34,230 --> 00:00:37,380
clase que implementa esta interfaz lo hace de forma distinta.

11
00:00:37,560 --> 00:00:43,230
Y también oita el concepto de polimorfismo diferente forma de hacer lo mismo.

12
00:00:43,310 --> 00:00:44,340
Mismo comportamiento.

13
00:00:44,580 --> 00:00:47,940
Entonces podríamos hacer que una interfaz es similar a una clase abstracta.

14
00:00:48,060 --> 00:00:52,920
Es decir, no es igual, porque conceptualmente también hay diferencia importante, pero básicamente

15
00:00:53,010 --> 00:00:54,210
es como una clase abstracta.

16
00:00:54,270 --> 00:00:57,960
Pero solamente podemos definir métodos o firmás sin implementar.

17
00:00:58,050 --> 00:01:03,990
No podemos tener métodos implementados, solamente declarar comportamiento sin cuerpo.

18
00:01:04,170 --> 00:01:10,650
capturÃ similitudes entre clases no relacionadas, sin forzar, sin obligar a una relación entre ella.

19
00:01:10,770 --> 00:01:12,180
Es decir, no hay jerarquía.

20
00:01:12,240 --> 00:01:17,700
Podemos agrupar diferentes tipos de objetos que no tienen nada que ver, pero todos estos objetos realizan

21
00:01:17,790 --> 00:01:20,400
el mismo comportamiento, pero de diferente forma.

22
00:01:20,580 --> 00:01:27,540
Y al final es un protocolo de implementación entre clases y cómo la interfaz es un tipo de dato de referencia.

23
00:01:27,600 --> 00:01:31,620
También se va a utilizar como un tipo dato del objeto que implementa esta interfaz.

24
00:01:31,710 --> 00:01:37,050
Por lo tanto, lo podemos utilizar como argumento en un método, como una creación de variable.

25
00:01:37,170 --> 00:01:42,930
Bueno, vimos ejemplo en el list en lápiz de colección tallaba utilizamos el tipo list que la interfaz

26
00:01:43,020 --> 00:01:44,490
que la implementan clases concretas.

27
00:01:44,520 --> 00:01:50,700
Por ejemplo, el ArrayList, por ejemplo, el linked list o lista enlazada para poner en contexto la

28
00:01:50,700 --> 00:01:56,130
herencia de clase definen el que son una jerarquía, mientras que la interfaces agrupa en clase que

29
00:01:56,130 --> 00:01:58,410
definen el quehacen comportamiento.

30
00:01:58,500 --> 00:02:03,240
Cuando se agrupa por herencia, hay una relación familiar de parentesco con las interfaces.

31
00:02:03,330 --> 00:02:06,090
Agrupamos objetos que hacen cosas similares.

32
00:02:06,270 --> 00:02:06,810
Eso es todo.

33
00:02:06,930 --> 00:02:13,110
Por poner un ejemplo, una clase, hoja o papel puede tener toda la información o implementación base

34
00:02:13,230 --> 00:02:18,660
para cualquier tipo documento para que se puedan imprimir, puedan pasar por la impresora un papel,

35
00:02:18,750 --> 00:02:22,080
se puede imprimir algún método abstracto, por ejemplo, imprimir.

36
00:02:22,170 --> 00:02:25,950
Hay un contrato implementación que las clases hijas debieran implementar.

37
00:02:26,040 --> 00:02:30,030
Bueno, y las clases hijas podrían implementar este método de forma distinta.

38
00:02:30,090 --> 00:02:36,930
Por ejemplo, sobrescribir el método imprimir, ya sea un currículum o un contrato de trabajo uniforme,

39
00:02:37,020 --> 00:02:43,830
un documento, algún estudio, en fin, todos son tipos de papel o hoja y todas saben cómo imprimirse

40
00:02:43,890 --> 00:02:45,510
por la clase padre abstracta.

41
00:02:45,660 --> 00:02:46,470
Hasta ahí estamos bien.

42
00:02:46,500 --> 00:02:51,300
Pero qué pasa si el diseño se me complica un poco más y queremos imprimir cosas que no necesariamente

43
00:02:51,300 --> 00:02:52,110
sean hojas?

44
00:02:52,200 --> 00:02:58,680
No sé, como por ejemplo un libro, una revista, una etiqueta o incluso creo imprimir una calcomanía,

45
00:02:58,680 --> 00:03:00,000
un sticker o lo que sea.

46
00:03:00,150 --> 00:03:05,700
Incluso una polera con un estampado te pegan también ahí el diseño se nos complica un poco más porque

47
00:03:05,730 --> 00:03:06,900
cómo lo podríamos enfrentar?

48
00:03:06,990 --> 00:03:10,910
Creamos tanta impresora como objetos o temas distintos.

49
00:03:10,920 --> 00:03:15,990
Tengamos quizás, no sé, buena alternativa llenarnos de impresora por cada tipo objeto.

50
00:03:16,110 --> 00:03:21,330
Ahora tenemos varios tipos de objetos que no necesariamente son simples hojas.

51
00:03:21,420 --> 00:03:26,760
No, no podemos modificar la herencia, por ejemplo, para que un libro sea hijo de hoja, porque un

52
00:03:26,760 --> 00:03:28,830
libro no es hijo de hoja.

53
00:03:28,920 --> 00:03:33,840
Un libro contiene hoja, contiene varios elementos que son hojas, pero un libro también se puede imprimir.

54
00:03:33,930 --> 00:03:38,010
Pero no puedo heredar de hoja para que el libro se pueda imprimir.

55
00:03:38,100 --> 00:03:39,270
No es parte de la jerarquía.

56
00:03:39,280 --> 00:03:45,060
Se fijan o bien que la impresora ahora controle libros y que todo herede de libros, es decir, que

57
00:03:45,060 --> 00:03:46,500
la hoja herede libro.

58
00:03:46,560 --> 00:03:51,930
Bueno, tampoco, porque una hoja tampoco es un libro conceptualmente incorrecto, el diseño o cualquier

59
00:03:51,930 --> 00:03:53,310
variante que se nos pueda ocurrir.

60
00:03:53,490 --> 00:03:59,700
El problema que la herencia no cubre estos casos, estos aspectos solamente la herencia se aplica cuando

61
00:03:59,700 --> 00:04:02,760
hay una relación de parentesco, una relación familiar.

62
00:04:02,850 --> 00:04:05,250
Si no existe simplemente la herencia no sirve.

63
00:04:05,340 --> 00:04:12,120
No podríamos aplicar, por ejemplo, clases abstracta con un papel o hoja para un libro, para una revista?

64
00:04:12,240 --> 00:04:13,500
No, no son tipos de.

65
00:04:13,680 --> 00:04:19,790
Pero sí podría ser, por ejemplo, un documento, una factura, un informe, un currículum, un contrato.

66
00:04:19,800 --> 00:04:22,380
Si ahí podría ser un tipo de papel, en fin.

67
00:04:22,410 --> 00:04:29,370
Entonces acá es cuando entra en juego la interfases comportamiento, es decir, juntar varios objetos,

68
00:04:29,430 --> 00:04:33,300
agrupar, pero por lo que hacen, no por lo que son, no por la herencia.

69
00:04:33,360 --> 00:04:40,890
Como buena práctica, en lo posible tratar de diseñar siempre orientado a la interfases o a componentes

70
00:04:40,890 --> 00:04:46,320
abstracto, ya sea interfaces, clases, abstracta, en fin, y evitar el diseño orientado a la implementación,

71
00:04:46,410 --> 00:04:51,780
ya que cuando utilizamos tipos concretos en nuestro código queda muy acoplado a una implementación y

72
00:04:51,780 --> 00:04:52,620
después se código.

73
00:04:52,620 --> 00:04:58,800
El día de mañana podría cambiar por otra implementación, pero el tipo auto va a seguir apuntando hacia

74
00:04:58,890 --> 00:04:59,910
una clase en concreto.

75
00:05:00,200 --> 00:05:04,880
Entonces tendríamos que estar modificando en varios lugares donde usamos esa clase para ir cambiando

76
00:05:04,880 --> 00:05:10,070
el tipo de la nueva implementación, pero si tenemos un tipo genérico, un tipo de una interfaz o clase

77
00:05:10,070 --> 00:05:12,390
abstracta, queda mucho más desacoplar.

78
00:05:12,560 --> 00:05:18,080
Podríamos cambiar implementación por otra clase sin tener que modificar los tipo de datos donde estemos

79
00:05:18,080 --> 00:05:18,500
usando.

80
00:05:18,660 --> 00:05:25,730
Entonces recuerden que los tipo de interfaz, el tipo dato de interfaz se pueden utilizar en argumento

81
00:05:25,740 --> 00:05:31,670
de métodos, en declaración de variable de atributo de una clase y eso es desacoplar de una implementación

82
00:05:31,670 --> 00:05:32,120
concreta.

83
00:05:32,330 --> 00:05:39,080
Entonces, un diseño orientado a la interfaces hace que las clases que la utilicen puedan acceder a

84
00:05:39,080 --> 00:05:45,410
estos objetos o servicios a través de su interfaz, que a su vez son implementadas por clases concretas,

85
00:05:45,590 --> 00:05:48,830
ya no depender de clases concretas en el tipo dato.

86
00:05:48,950 --> 00:05:54,470
Nuestro diseño será mucho más reutilizable, escalable y sobretodo fácil de mantener.

87
00:05:54,620 --> 00:05:59,060
Y este tipo de diseño orientado a interfaces se utiliza mucho, por ejemplo en framework como Spring

88
00:05:59,060 --> 00:06:00,920
por ejemplo, o también en Java.

89
00:06:00,920 --> 00:06:04,450
Interprete dicho en todo lo que es Enterprise Vins.

90
00:06:04,550 --> 00:06:07,010
Todo lo que contexto inyección de dependencia.

91
00:06:07,100 --> 00:06:10,730
Al final trabajamos con tipos genéricos con tipo de la interfaz.

92
00:06:10,880 --> 00:06:12,770
Veamos el ejemplo en un mele.

93
00:06:12,860 --> 00:06:15,920
Acá tenemos la interfaz imprimible con el método imprimir.

94
00:06:16,010 --> 00:06:21,520
El método es su firma, un protocolo que deben implementar la clase que implementan esta interfaz.

95
00:06:21,530 --> 00:06:24,590
Por ejemplo, una foto puede implementar imprimible.

96
00:06:24,680 --> 00:06:28,640
Un currículum puede implementar imprimible un sobre un libro también.

97
00:06:28,700 --> 00:06:34,550
Pero por ejemplo, un libro no es por ejemplo una hoja, un sobre si podría ser un papel, una hoja,

98
00:06:34,610 --> 00:06:39,740
un currículum, también una foto también y pueden pasar por la impresora, pero en el caso del libro

99
00:06:39,860 --> 00:06:45,080
no. Pero al final, para que todas se puedan imprimir es a través de la interfaz imprimible, ya que

100
00:06:45,080 --> 00:06:50,840
por ejemplo, la clase impresora, el tipo dato que acepta es imprimible, ya donde tenemos el control

101
00:06:50,840 --> 00:06:51,350
de tipo.

102
00:06:51,440 --> 00:06:56,330
Por lo tanto, cualquier objeto que implementa la interfaz independiente, si están relacionados o no,

103
00:06:56,420 --> 00:06:57,350
se va a poder imprimir.

104
00:06:57,470 --> 00:07:03,800
La relación o CML de la interfaces es similar al de la herencia, pero es una línea punteada y ambas

105
00:07:03,800 --> 00:07:10,820
terminan en un triángulo blanco y se le conoce como relación de realización de realizar un comportamiento

106
00:07:10,940 --> 00:07:11,930
de implementación.

107
00:07:12,050 --> 00:07:14,600
Ejemplos de interfaces similar a una clase.

108
00:07:14,630 --> 00:07:21,440
Pero en vez de utilizar la palabra class, utiliza la palabra reservada interface o interface public

109
00:07:21,530 --> 00:07:25,010
interface imprimible y los nombre de interfaz.

110
00:07:25,100 --> 00:07:28,430
Igual que las clases comienzan con mayúscula y palabra compuesta.

111
00:07:28,520 --> 00:07:33,950
La primera que continúa en mayúscula, que es el tipo de escritura joroba de camello o camello keys

112
00:07:34,130 --> 00:07:35,510
y los métodos la interfaz.

113
00:07:35,600 --> 00:07:41,510
A diferencia de las clases abstracta no lleva la palabra abstract no simplemente el modificador public,

114
00:07:41,660 --> 00:07:47,240
el tipo de retorno y el nombre del método con sus argumentos punto y coma, sin llaves, sin cuerpo.

115
00:07:47,360 --> 00:07:51,840
Eso si no tiene implementación, pero siempre son públicas o también default.

116
00:07:52,040 --> 00:07:55,130
Acá tenemos ejemplo de clase que implementan una interfaz.

117
00:07:55,240 --> 00:07:59,360
Bueno, utilizan la palabra implementas y luego el nombre la interfaz.

118
00:07:59,450 --> 00:08:04,970
A diferencia del stents en la herencia, acá utilizamos implementas implementamos el método bueno,

119
00:08:05,030 --> 00:08:08,970
muy parecido también a una clase abstracta o a la herencia con el hover right.

120
00:08:09,080 --> 00:08:14,570
Porque al final lo que está haciendo es implementar, sobrescribir un método y dándole una lógica de

121
00:08:14,570 --> 00:08:15,140
programación.

122
00:08:15,230 --> 00:08:17,150
Por ejemplo, el currículum se imprime.

123
00:08:17,240 --> 00:08:20,390
Luego tenemos una foto que también implementa imprimible.

124
00:08:20,480 --> 00:08:25,280
También en el método Imprimir está obligada a implementar el método de la interfaz Imprimir.

125
00:08:25,430 --> 00:08:31,340
Pero también tenemos libro que implementa interfaz a pesar de equilibrio, no tiene mucho en común en

126
00:08:31,340 --> 00:08:35,870
jerarquía respecto al currículum o a una foto, pero todos se imprimen.

127
00:08:35,960 --> 00:08:40,310
Otra de las características de las interfaces es que soporta la herencia múltiple.

128
00:08:40,460 --> 00:08:45,050
Es decir, una clase puede implementar varias interfaces, no solamente una.

129
00:08:45,140 --> 00:08:50,120
Entonces es algo parecido a la herencia múltiple, pero que Java en la herencia.

130
00:08:50,210 --> 00:08:50,990
No se soporta.

131
00:08:51,140 --> 00:08:56,810
No podemos heredar más de una clase, como por ejemplo en otro lenguaje, como en C++ existe la herencia

132
00:08:56,810 --> 00:09:00,380
múltiple, pero acá en Java no. Ya que al final es por un tema de diseño.

133
00:09:00,470 --> 00:09:05,630
Si una clase hereda de varios padre y varios de sus padres tienen un mismo método que se llama igual.

134
00:09:05,660 --> 00:09:06,260
Por ejemplo.

135
00:09:06,350 --> 00:09:07,490
Entonces la clase hija.

136
00:09:07,580 --> 00:09:08,300
Cuál va a heredar?

137
00:09:08,390 --> 00:09:11,110
El de la clase padrea entre la clase padre b.

138
00:09:11,210 --> 00:09:13,310
El de la clase padre se queda ambiguo.

139
00:09:13,430 --> 00:09:15,380
No sabe qué método heredar.

140
00:09:15,470 --> 00:09:21,770
Entonces, para evitar problemas de ambigüedad o de diseño en Java, la herencia múltiple herencia de

141
00:09:21,770 --> 00:09:25,070
clases no se soporta, pero sí a nivel de interfaces.

142
00:09:25,190 --> 00:09:26,450
Es decir, podemos implementar.

143
00:09:26,450 --> 00:09:32,120
Por ejemplo, acá tenemos la interfaz puede saltar, puede correr, puede nadar con diferentes métodos

144
00:09:32,210 --> 00:09:33,530
saltar, correr, nadar.

145
00:09:33,620 --> 00:09:39,290
Pero las clases, por ejemplo, un perro puede implementar, puede saltar, puede correr, puede nadar

146
00:09:39,380 --> 00:09:40,310
se por comas.

147
00:09:40,400 --> 00:09:44,540
Entonces acá tenemos una implementación de herencia múltiple a nivel interfaces.

148
00:09:44,630 --> 00:09:50,540
Un objeto, una clase puede realizar un par y comportamiento se pegan implementar diferentes interfaces

149
00:09:50,660 --> 00:09:55,700
y no solamente perros, sino quizás un gato también, o quizá cualquier otro objeto que no tenga nada

150
00:09:55,700 --> 00:09:59,820
que ver con ningún tipo de perro ni gato, pero que al final puedes?

151
00:09:59,820 --> 00:09:59,870
A?

152
00:10:00,020 --> 00:10:05,750
Tar puede correr y también podría nadar bien, por ahora quedamos hasta acá y continuamos las siguientes

153
00:10:05,750 --> 00:10:08,270
clases con ejemplos Nos vemos.
