1
00:00:01,260 --> 00:00:02,730
Hola y bienvenidos a esta elección.

2
00:00:02,730 --> 00:00:06,300
A continuación vamos a revisar el tema de manejo de interfaces en Java.

3
00:00:06,300 --> 00:00:07,350
Están listos.

4
00:00:07,350 --> 00:00:12,810
Vamos bien lo que vamos a trabajar en este ejercicio va a ser el siguiente diagrama de clases en el

5
00:00:12,810 --> 00:00:18,090
cual vamos a crear un paquete de datos y en este paquete vamos a agregar una interface la interfaz se

6
00:00:18,090 --> 00:00:24,630
va a llamar acceso a datos y posteriormente vamos a agregar dos clases concretas en este caso van a

7
00:00:24,630 --> 00:00:29,850
ser dos clases que van a implementar la interface de acceso a datos llamada implementacion o Lackey

8
00:00:30,090 --> 00:00:33,050
y otra clase concreta llamada implementacion Maisí.

9
00:00:33,790 --> 00:00:39,090
Y por otro lado vamos a crear un paquete llamado manejo interfaces y la clase para poner a prueba estas

10
00:00:39,090 --> 00:00:41,150
claves que hemos creado en el paquete de datos.

11
00:00:41,190 --> 00:00:46,560
La clave se va a llamar manejo interfaces así que el diagrama de clases que vamos a desarrollar a continuación

12
00:00:48,250 --> 00:00:52,680
bien como primer paso vamos a abrir nuestro aire vamos a cerrar cualquier proyecto que tengamos abierto

13
00:00:53,020 --> 00:00:58,350
damos clic derecho choclos posteriormente vamos a crear un nuevo proyecto damos un Infinit Project y

14
00:00:58,600 --> 00:01:03,390
ya la web Java Application y creamos el proyecto Manejo interfaces

15
00:01:07,170 --> 00:01:15,420
y lo depositamos en la carpeta desde dos puntos de agonal inversa cursos diagonal inversa Java el nombre

16
00:01:15,420 --> 00:01:17,690
de grupo oiría cm x con G.M de globalmente.

17
00:01:17,730 --> 00:01:26,110
La versión 1.0 y dejamos el nombre del paquete vacío no hemos podido finalizar y como siguiente paso

18
00:01:26,110 --> 00:01:30,030
vamos a crear una interface sobre esos paquetes.

19
00:01:30,060 --> 00:01:36,260
Vamos a dar clic derecho NIU y en lugar de seleccionar Java class vamos a seleccionar Java Interface.

20
00:01:36,540 --> 00:01:43,620
Así que damos clic sobre la interface y esta interfaz se va a llamar acceso a datos y la depositamos

21
00:01:43,710 --> 00:01:46,740
en el paquete de datos y damos pueden finalizar.

22
00:01:46,980 --> 00:01:48,390
Quitamos estos comentarios

23
00:01:51,000 --> 00:01:55,110
y podemos observar que a diferencia de una clase en este caso en lugar de utilizar la palabra reservada

24
00:01:55,110 --> 00:02:01,320
Class utiliza la palabra reservada interface y ahora vamos a continuar vamos a agregar la otra clase

25
00:02:02,780 --> 00:02:04,200
damos clic derecho Nio.

26
00:02:04,260 --> 00:02:11,470
En este caso si va a hacer una clase Java class se va a llamar implementacion ahora con el nombre del

27
00:02:11,470 --> 00:02:15,240
paquete es igual el paquete de datos y damos clic en Finalizar

28
00:02:18,070 --> 00:02:24,690
quitamos estos comentarios y esta clase de implementación Oracle va a implementar la interface acceso

29
00:02:24,690 --> 00:02:25,520
a datos.

30
00:02:25,520 --> 00:02:34,130
Para ello vamos a agregar lo siguiente agregamos implement acceso datos una clase en Java solamente

31
00:02:34,130 --> 00:02:40,700
puede extender de una clase pero en Java puede extender de múltiples interfaces así que simplemente

32
00:02:40,700 --> 00:02:49,620
poniendo una coma podríamos indicar que vamos a implementar múltiples interfaces pero en este caso solamente

33
00:02:49,620 --> 00:02:54,870
vamos a implementar una interface y de momento va a ser todo el código que vamos a agregar posteriormente

34
00:02:54,870 --> 00:03:00,960
vamos a agregar métodos a esta interface y esos métodos los vamos a implementar en estas clases que

35
00:03:00,960 --> 00:03:06,840
implementan la interface de acceso a datos bien vamos a agregar la segunda clase sobre el paquete de

36
00:03:06,840 --> 00:03:12,510
datos agregamos otra clase llamada implementacion Maisí.

37
00:03:13,040 --> 00:03:15,270
El paquete de datos y damos clic en Finalizar

38
00:03:18,080 --> 00:03:28,500
quitamos estos comentarios y de igual manera esta clase implementa la interface acceso datos.

39
00:03:28,760 --> 00:03:34,160
Ahora vamos a empezar a modificar nuestra interface de acceso a datos una interface puede tener atributos

40
00:03:34,370 --> 00:03:35,290
o métodos.

41
00:03:35,510 --> 00:03:41,090
No es necesario que tenga ambos puede tener uno u otro y cualquier variable que agreguemos va a ser

42
00:03:41,090 --> 00:03:49,040
una constante así que si definimos por ejemplo una variable de tipo entero llamada máx registros y la

43
00:03:49,040 --> 00:03:55,370
asignamos por ejemplo el valor de 10 esto en automático va a ser una constante sin necesidad de especificarlo

44
00:03:55,580 --> 00:04:03,860
en automático el compilador va a agregar públic Static a esta variable así que es opcional agregar esto

45
00:04:03,860 --> 00:04:10,520
publica Static pero el compilador en automático va a ser esta variable una constante así que si no vemos

46
00:04:10,520 --> 00:04:14,120
estos modificadores de todas maneras esta variable es una constante.

47
00:04:14,120 --> 00:04:17,870
Por ello es que las deponiendo en mayúscula para indicar que es una constante

48
00:04:20,930 --> 00:04:25,940
en este caso voy a dejar el código muy explícito pero ustedes ya saben que si no agregan este código

49
00:04:26,000 --> 00:04:32,940
estos modificadores de acceso se agregan de manera automática esto solamente dentro de interfases y

50
00:04:33,090 --> 00:04:37,950
como siguiente elemento de una interfase podemos tener métodos y esos métodos también en automático

51
00:04:37,950 --> 00:04:40,880
se les agregan ciertas características ciertos modificadores.

52
00:04:40,920 --> 00:04:49,360
En este caso los modificadores es públic y abstract así que los modificadores de públic y abstract se

53
00:04:49,360 --> 00:04:56,220
agregan a todos los métodos que definamos en una interfase en este caso vamos a definir dos métodos

54
00:04:56,490 --> 00:05:03,060
el método de insertar y el método de listar pero también debemos de saber que si no vemos los modificadores

55
00:05:03,060 --> 00:05:09,630
de públic y abstract entonces en automático el compilador agrega Estos dos modificadores a estos métodos.

56
00:05:09,630 --> 00:05:16,410
Por ello es que estos métodos no contienen un cuerpo únicamente terminan con punto y coma como los métodos

57
00:05:16,410 --> 00:05:22,050
abstractos definidos en una clase abstracta es exactamente lo mismo ya que estos métodos también son

58
00:05:22,050 --> 00:05:23,300
abstractos.

59
00:05:23,430 --> 00:05:28,350
Esto quiere decir que las interfaces no van a agregar ningún comportamiento únicamente van a agregar

60
00:05:28,350 --> 00:05:34,410
la firma del método y las clases que implementen a estas interfaces son las responsables de implementar

61
00:05:34,440 --> 00:05:36,750
el comportamiento de estos métodos.

62
00:05:36,990 --> 00:05:38,310
Vamos a agregar otro método

63
00:05:41,670 --> 00:05:49,140
el método de listar no regresa nada y recordemos que si no agregamos públic y abstract de todas maneras

64
00:05:49,170 --> 00:05:56,650
el compilador lo va a hacer de manera automática así que con eso estamos definiendo nuestra interfase.

65
00:05:56,650 --> 00:06:02,410
Podemos se va que no tiene ningún comportamiento únicamente estamos definiendo una constante y los métodos

66
00:06:02,410 --> 00:06:05,160
abstractos de insertar y listar bien.

67
00:06:05,170 --> 00:06:10,600
Ahora vamos hacia la clase de implementación oracular en este caso podemos observar que el compilador

68
00:06:10,600 --> 00:06:15,370
ya nos está marcando un error debido a que estamos indicando que vamos a implementar la interfase acceso

69
00:06:15,370 --> 00:06:16,210
a datos.

70
00:06:16,330 --> 00:06:22,210
Por lo tanto la clase de implementación Oricon está indicando que no es abstracta y que no está escribiendo

71
00:06:22,240 --> 00:06:28,090
el método abstracto de listar ya que este método se ha definido en la interfase de acceso a datos y

72
00:06:28,090 --> 00:06:33,510
por lo tanto estamos obligados a implementar los métodos definidos en la interfase.

73
00:06:33,580 --> 00:06:38,650
Los métodos de insertar y de listar si no queremos implementarlos entonces tenemos que definir esta

74
00:06:38,650 --> 00:06:45,220
clase como abstracta y podemos observar que si agregamos el modificador abstracto entonces esta clase

75
00:06:45,250 --> 00:06:50,950
ya no marca ningún problema pero tampoco podríamos crear objetos de esta clase y tendría que ser otra

76
00:06:50,950 --> 00:06:56,620
subclase de esta clase la que se tendría que encargar de definir finalmente el comportamiento de los

77
00:06:56,620 --> 00:07:03,520
métodos definidos en la interfase acceso a datos bien pero en este caso si vamos a agregar la implementación

78
00:07:03,520 --> 00:07:09,490
de los métodos definidos en la interfase así que vamos a hacer lo siguiente Si damos clic sobre el error

79
00:07:09,490 --> 00:07:14,470
que nos está indicando podemos observar que el IDE nos está indicando que debemos de implementar todos

80
00:07:14,470 --> 00:07:19,780
los métodos abstractos definidos en la interfase acceso a datos así que damos clic

81
00:07:23,210 --> 00:07:28,350
y podemos observar que en automático nos agrega la implementación del método insertar y del método de

82
00:07:28,350 --> 00:07:38,320
listar utilizando exactamente la misma firma del método definido en la interfase acceso datos y además

83
00:07:38,320 --> 00:07:40,320
no se agrega la notación de overnight.

84
00:07:40,360 --> 00:07:45,000
Sin embargo en este caso también cabe mencionar que es igual que las clases abstractas no es que estemos

85
00:07:45,130 --> 00:07:49,990
escribiendo el comportamiento de la interfase ya que la interfase no ha agregado ningún comportamiento

86
00:07:50,290 --> 00:07:55,120
por lo tanto es la primera vez que se está implementando el comportamiento del método insertar.

87
00:07:55,150 --> 00:08:00,000
Por lo tanto el IDE nos está marcando que estamos implementando el método y no sobre escribiéndolo.

88
00:08:00,250 --> 00:08:06,490
Sin embargo para el compilador es opcional agregar la notación de overnight o sobre escritura y por

89
00:08:06,490 --> 00:08:11,810
default no se agrega el siguiente código en la cual se arroja una excepción que indica que este método

90
00:08:11,810 --> 00:08:12,970
no está soportado aún.

91
00:08:13,540 --> 00:08:19,690
Vamos a quitar estas líneas de código ya que nosotros vamos a agregar la implementación de estos métodos.

92
00:08:19,690 --> 00:08:25,850
Obviamente este código también lo podemos agregar manualmente que básicamente es la implementación de

93
00:08:25,850 --> 00:08:31,460
los métodos insertar y listar definidos en la interfase acceso datos.

94
00:08:31,460 --> 00:08:35,870
Podemos observar que ya no tienen la palabra reservada abstract debido a que ya estamos implementando

95
00:08:36,050 --> 00:08:42,170
el comportamiento de estos métodos iba a ser muy simple la implementación solamente vamos a mandar el

96
00:08:42,170 --> 00:08:46,280
mensaje insertar desde Oracle

97
00:08:49,140 --> 00:08:56,280
y también el método de listar tiene el mensaje listar desde ahora con el manejo de conexión a una base

98
00:08:56,280 --> 00:08:59,790
de datos real lo vamos a ver en el nivel de Java con JDBC.

99
00:08:59,790 --> 00:09:04,260
En este caso solamente estamos configurando el tema de interfaces pero este mismo código lo podemos

100
00:09:04,260 --> 00:09:10,900
utilizar en el nivel de Java con JDBC en el cual si vamos a conectarnos a una base de datos real bien

101
00:09:10,980 --> 00:09:14,470
con esto ya tenemos todo el código de nuestra clase implementación.

102
00:09:14,850 --> 00:09:19,620
Vamos a hacer exactamente lo mismo en la clase de implementación de Maykel pero la implementación de

103
00:09:19,620 --> 00:09:25,440
los métodos va a ser distinta damos clic para que implemente todos los métodos abstractos.

104
00:09:25,870 --> 00:09:32,140
Quitamos este código y la implementación en este caso va a indicar

105
00:09:37,440 --> 00:09:40,330
la implementación de este método va a ser insertar pero desde Maisí

106
00:09:47,150 --> 00:09:49,990
o también el método del Istar va a ser listar desde.

107
00:09:50,390 --> 00:09:55,340
Y con eso ya estamos agregando la implementación de los métodos definidos en la interfase tanto para

108
00:09:55,340 --> 00:09:58,820
la implementación de Blackout como para la implementación de México.

109
00:09:59,210 --> 00:10:05,060
Y aquí básicamente lo que estamos haciendo es cumplir con lo que se conoce como el contrato de la interfase

110
00:10:05,450 --> 00:10:11,810
estamos definiendo dos métodos y las clases están implementando estos dos métodos pero cada una utilizando

111
00:10:11,810 --> 00:10:13,060
su propia tecnología.

112
00:10:13,190 --> 00:10:17,990
En este caso es un simple mensaje pero eso mismo que estamos haciendo es lo que hacen los manejadores

113
00:10:17,990 --> 00:10:22,200
de bases de datos para implementar el API de Java con JDBC.

114
00:10:22,400 --> 00:10:27,740
Esto simplemente por poner un ejemplo así que de esta manera cada proveedor de base de datos implementa

115
00:10:27,770 --> 00:10:33,810
una interfase en la cual se define una cantidad de métodos y los proveedores de base de datos deben

116
00:10:33,810 --> 00:10:40,020
de implementar esos métodos para sus propias bases de datos así que aunque este ejemplo es un ejemplo

117
00:10:40,020 --> 00:10:43,100
sencillo realmente es lo que se utiliza en la vida real.

118
00:10:43,230 --> 00:10:47,880
Obviamente lo que cambia simplemente es el código que implementa este método.

119
00:10:47,970 --> 00:10:53,460
Por último vamos a poner en práctica estas dos clases sobre los paquetes vamos a crear una nueva clase

120
00:10:53,720 --> 00:10:59,880
damos clic derecho Nioh Java class la clase se llama manejo interfaces y el paquete también se llama

121
00:10:59,880 --> 00:11:04,240
manejo interfaces y damos siguen finalizar

122
00:11:09,560 --> 00:11:14,690
agregamos un método main a esta clase de públiques nativo y Main y vamos a agregar el siguiente código

123
00:11:15,170 --> 00:11:20,870
lo que vamos a hacer es que vamos a definir primero un tipo de la clase interface ya que cabe mencionar

124
00:11:20,870 --> 00:11:26,930
que un tipo interface puede apuntar a objetos de clases que han implementado la interface es muy similar

125
00:11:26,960 --> 00:11:28,440
al concepto de clases hijas.

126
00:11:28,520 --> 00:11:34,670
Sin embargo en este caso la interfase no tiene clases fijas sino tiene clases que implementan la interface

127
00:11:35,150 --> 00:11:42,230
así que en este caso la clase el tipo de dato de interfase acceso a datos puede apuntar a objetos de

128
00:11:42,230 --> 00:11:48,290
tipo implementación Oracle debido a que esta clase implementa la interfase acceso a datos y lo mismo

129
00:11:48,290 --> 00:11:50,130
con la clase de implementación.

130
00:11:51,350 --> 00:12:00,230
Así que lo primero que hacemos es definir una variable de tipo acceso datos llamada datos y esta variable

131
00:12:00,290 --> 00:12:03,320
va a apuntar a un objeto de tipo implementación Oracle

132
00:12:08,440 --> 00:12:14,140
si esta clase de implementación Oracle no implementará la interface entonces esta variable de acceso

133
00:12:14,140 --> 00:12:20,350
a datos de tipo interfase no podría apuntar a un objeto de este tipo de implementación Oracle vamos

134
00:12:20,350 --> 00:12:27,350
a importar estas clases ponemos punto asterisco para que podamos utilizar todos los tipos del paquete

135
00:12:29,040 --> 00:12:35,100
bien así que según lo que hemos comentado si esta clase de implementación Oracle no implementara la

136
00:12:35,100 --> 00:12:42,650
interface entonces el compilador nos marca que son tipos incompatibles ya que no hay ninguna relación

137
00:12:42,830 --> 00:12:49,660
entre el tipo de interface y la clase concreta implementación Oracle y tampoco podríamos decir que estamos

138
00:12:49,660 --> 00:12:55,090
implementando el método de insertar tendríamos que quitar esta notación de overnight bien pero eso solamente

139
00:12:55,210 --> 00:13:00,640
en caso de que esta clase no implementara la interface en este caso si la queremos implementar regresamos

140
00:13:00,640 --> 00:13:07,060
el código y podemos ver que en este caso debido a que esta clase es simplemente la interface entonces

141
00:13:07,150 --> 00:13:13,680
un tipo de acceso a datos del tipo interface puede apuntar a un objeto de tipo que implementa la interfaz

142
00:13:13,750 --> 00:13:22,870
acceso datos y posiblemente con esta variable podemos ejecutar los métodos insertar o listar definidos

143
00:13:22,900 --> 00:13:29,110
en la interfase pero implementados en la clase de implementación Oracle así que abordamos cambios y

144
00:13:29,110 --> 00:13:29,860
ejecutamos

145
00:13:34,310 --> 00:13:39,780
y podemos ver que de esta manera no llamar el método insertar pero desde ahora ya que estamos utilizando

146
00:13:39,780 --> 00:13:46,410
la clase implementación Oracle y ahora vamos a hacer algo similar pero utilizando la otra implementación.

147
00:13:46,580 --> 00:13:52,970
Así que vamos a utilizar la misma variable de tipo acceso datos de tipo interface pero le vamos a asignar

148
00:13:53,300 --> 00:13:54,020
un objeto

149
00:13:59,400 --> 00:14:06,700
de tipo implementación Maisí cual viene con esto ya estamos apuntando con la variable acceso a datos

150
00:14:06,910 --> 00:14:13,640
a un objeto de tipo implementación Maisí cual podemos mandar a llamar los mismos métodos y aquí podemos

151
00:14:13,640 --> 00:14:18,650
observar que estamos cumpliendo con el contrato de definido en la interfase así que sin importar la

152
00:14:18,650 --> 00:14:25,040
implementación que estemos utilizando de Oracle o de Meucci tenemos acceso exactamente a los mismos

153
00:14:25,040 --> 00:14:26,080
métodos.

154
00:14:26,180 --> 00:14:31,750
Así que en este caso podemos mandar a llamar el método insertar de nueva cuenta pero la implementación

155
00:14:31,750 --> 00:14:36,620
que se va a ejecutar en este caso en este segundo caso es la implementación de Maisí.

156
00:14:36,940 --> 00:14:44,930
Así que guardamos cambios y ejecutamos y podemos observar que dependiendo del objeto al cual esté apuntando

157
00:14:45,170 --> 00:14:51,420
es el método que se va a ejecutar ya sea la implementación de Oracle o la de Maisí cual y simplemente

158
00:14:51,420 --> 00:14:52,110
para comprobar.

159
00:14:52,110 --> 00:14:58,020
También podemos mandar a llamar el método de listar en este caso esta variable de datos ya está apuntando

160
00:14:58,050 --> 00:14:59,470
a la implementación de Maisí

161
00:15:02,200 --> 00:15:09,030
por lo tanto el método que deberían ejecutar es listar pero desde Maisí puede así que básicamente con

162
00:15:09,030 --> 00:15:14,820
esto estamos cumpliendo con el contrato definido en la interfase es decir con el listado de métodos

163
00:15:14,910 --> 00:15:19,530
que se han definido y cada una de estas clases implementa estos métodos

164
00:15:22,420 --> 00:15:27,640
ahora por último si queremos acceder a la constante que hemos definido en la interfase que los atributos

165
00:15:27,640 --> 00:15:29,890
marcados como estáticos son constantes.

166
00:15:29,950 --> 00:15:37,400
Por lo tanto vamos a utilizar directamente el nombre de la interface así que ponemos acceso a datos

167
00:15:39,150 --> 00:15:43,590
y con esto podemos acceder a la constante que hemos definido Max registros

168
00:15:48,250 --> 00:15:49,910
y mandamos a imprimir esta constante

169
00:15:54,520 --> 00:15:59,770
guardamos cambios y ejecutamos y Podemos se va que nos muestra el valor de 10 el valor que hemos definido

170
00:15:59,770 --> 00:16:06,080
en esta constante y aunque es de tipo públic si tratamos de modificarlo

171
00:16:11,760 --> 00:16:18,920
si tratamos de asignarle algún valor podemos observar que ya no podemos modificar el valor debido a

172
00:16:18,920 --> 00:16:26,350
que esta variable está marcada como final incluso si quitamos esos modificadores de acceso públic static.

173
00:16:26,390 --> 00:16:34,120
De hecho aquí me faltó también el modificador de acceso final ya que esto es una constante así que cualquier

174
00:16:34,120 --> 00:16:39,970
atributo que definamos en una interface va a ser de tipo Public Static final se van a agregar esos tres

175
00:16:39,970 --> 00:16:47,210
modificadores de manera automática y aunque no lo hayamos definido en automático podemos observar el

176
00:16:47,210 --> 00:16:53,480
mensaje que nos manda que no podemos modificar el valor a una variable final así que este código no

177
00:16:53,480 --> 00:16:59,120
se puede ejecutar y si el atributo no fuera público tampoco podríamos acceder directamente con el nombre

178
00:16:59,120 --> 00:17:00,020
de la clase.

179
00:17:00,020 --> 00:17:05,480
De igual manera si no fuera estático no podríamos acceder directamente con el nombre de la clase y finalmente

180
00:17:05,480 --> 00:17:10,280
si no fuera final entonces podríamos modificar su valor pero con eso estamos comprobando que los atributos

181
00:17:10,490 --> 00:17:12,520
son públic Static y final.

182
00:17:12,860 --> 00:17:19,510
Los atributos definidos en una interface y nos muestran el valor del atributo más registros

183
00:17:22,440 --> 00:17:29,150
bien así que agregamos los modificadores Public Static y final a quién le ha faltado feina pero con

184
00:17:29,160 --> 00:17:34,920
esto ya lo estamos agregando son los modificadores que se agregan a los atributos definidos en una interface.

185
00:17:35,070 --> 00:17:41,870
Realmente son constantes y con eso terminamos el ejercicio de manejo de interfaces.

186
00:17:42,000 --> 00:17:46,890
El uso de interfaces vamos a seguir utilizando en niveles posteriores pero eso simplemente es la base

187
00:17:46,890 --> 00:17:52,050
para que puedan comenzar a trabajar ese tipo de conceptos bien nos vemos en la siguiente elección.

188
00:17:52,070 --> 00:17:52,670
Saludos.
