1
00:00:00,210 --> 00:00:07,770
Veamos el componente JDBC bueno, nos permite realizar conexión al aceto e implementar consultas y operaciones

2
00:00:07,890 --> 00:00:09,500
desde nuestras aplicaciones en Java.

3
00:00:09,600 --> 00:00:15,240
También son las siglas en inglés de ya va, tal vez conecté Vitti, pero bueno, veamoslo.

4
00:00:15,240 --> 00:00:21,300
Me importante el concepto que detrás de JS lo primero es algo genérico, es una API.

5
00:00:21,510 --> 00:00:27,660
Recuerden que un API es un conjunto de interfaces y clases abstracta, todo bastante genérico, pero

6
00:00:27,750 --> 00:00:33,060
la implementación concreta la tiene que realizar cada motor de base dato en particular.

7
00:00:33,090 --> 00:00:39,060
Por ejemplo, vamos a tener una secuela y vamos a tener Oracle, SQL Server de Microsoft, Podres,

8
00:00:39,120 --> 00:00:46,320
SQL, en fin, motores de bÃsqueda que implementan Tapi y le proveen su propio cuerpo, su propia implementación

9
00:00:46,440 --> 00:00:51,570
y al final nosotros vamos a trabajar con un motor en particular, por ejemplo, como SQL.

10
00:00:51,630 --> 00:00:57,300
Por lo tanto tenemos que descargar el driver este conector que implementa esta API para poder realizar

11
00:00:57,300 --> 00:00:58,380
consultas y operaciones.

12
00:00:58,560 --> 00:01:00,360
También una característica importante.

13
00:01:00,430 --> 00:01:06,060
Bueno, como todo en Java es independiente sistema operativo, por lo tanto lo podemos ejecutar en cualquier

14
00:01:06,060 --> 00:01:12,810
sistema transparente también como API, JS es transparente a la base, dato a la cual vamos a acceder.

15
00:01:13,050 --> 00:01:19,110
Hoy por hoy podríamos trabajar con SQL Server, pero el día mañana creo emigrar por ejemplo a se cuele

16
00:01:19,200 --> 00:01:19,860
o podres.

17
00:01:20,040 --> 00:01:25,230
La configuración es mínima, solamente tenemos que cambiar el driver, el conector, esta librería y

18
00:01:25,230 --> 00:01:27,740
por supuesto el string de conexión ESIC.

19
00:01:27,870 --> 00:01:33,900
En vez de conectándome se cuele a tal puerto, a tal servidor o IP o en el local host.

20
00:01:34,080 --> 00:01:41,610
Lo hacemos con la forma de pobres, pero si igual siempre hay una sintaxis, algo que podría variar

21
00:01:41,700 --> 00:01:43,050
entre un motor y otro.

22
00:01:43,200 --> 00:01:47,940
Pero bueno, por lo general debería funcionar de forma transparente en cada motor.

23
00:01:48,120 --> 00:01:54,210
Entonces ya una vez que tenemos el driver en nuestra aplicación, ya podemos comunicarnos, conectarnos

24
00:01:54,330 --> 00:01:59,970
y por supuesto trabajar, realizar consultas, realizar un insert, un APDAYC, un delito, en fin,

25
00:02:00,120 --> 00:02:03,000
implementar un CRUD para administrar nuestras tablas.

26
00:02:03,120 --> 00:02:03,890
Bien, continuemos.

27
00:02:03,900 --> 00:02:09,780
Veamos un diagrama, un esquema gráfico detuvimos que había mencionado acá tenemos yaba nuestra aplicación

28
00:02:09,780 --> 00:02:12,780
propia y tenemos la API JS completamente genérico.

29
00:02:12,810 --> 00:02:18,720
Son interface, clases abstracta y cada motor en particular implementan esta API, por lo tanto van

30
00:02:18,720 --> 00:02:24,240
a crear su clase implementaciones concreta para la conexión para el objeto connection para la interfaces

31
00:02:24,330 --> 00:02:31,710
también que realizan consultas y ejecutan operaciones clase auto la interfaz statement y prepend statement.

32
00:02:31,740 --> 00:02:38,700
Después vamos a ver y también para poder obtener el resultado de la consulta mediante la interfaz result

33
00:02:38,700 --> 00:02:44,040
set que por detrás maneja un cursor y podemos navegar a través del resultado invocando el método Next.

34
00:02:44,100 --> 00:02:45,320
También lo vamos a ver bien.

35
00:02:45,330 --> 00:02:48,960
Veamos cuáles son las principales interfaces de clase genérica de Tapi.

36
00:02:49,080 --> 00:02:53,070
Bueno, tenemos el driver que he implementado por cada proveedor.

37
00:02:53,190 --> 00:02:58,050
Bueno, en realidad estas clases se implementan por cada proveedor, pero el driver nos permite conectarnos,

38
00:02:58,050 --> 00:03:00,660
comunicarnos con las EATO y por eso estamos trabajando.

39
00:03:00,660 --> 00:03:02,700
Comencé cueles requiere su propio driver.

40
00:03:02,700 --> 00:03:05,250
Si estamos trabajando con Oracle, también su propio driver.

41
00:03:05,310 --> 00:03:06,630
Y así por cada motor.

42
00:03:06,780 --> 00:03:12,060
Luego tenemos el Driver Manager, que es una clase con métodos estáticos, por ejemplo el método Get

43
00:03:12,060 --> 00:03:17,520
Connection y lo que hace el Driver Manager, tal como dice su nombre administrar diferentes driver.

44
00:03:17,700 --> 00:03:24,930
De hecho, nuestra aplicación podría manejar varios driver a distintas facetas y manejar distintas conexiones.

45
00:03:24,990 --> 00:03:29,850
No podríamos comunicar con MA SQL, pero también podremos trabajar sobre podres al mismo tiempo y de

46
00:03:29,850 --> 00:03:31,470
eso se encarga el Travian Manager.

47
00:03:31,560 --> 00:03:36,960
Entonces, por ejemplo, con el método Get Connections le pasamos el string de conexión.

48
00:03:37,050 --> 00:03:43,010
También se le conoce como Wireless y el usuario y la clave es si las credenciales de la base dato y

49
00:03:43,020 --> 00:03:44,580
listo y nos podemos comunicar.

50
00:03:44,790 --> 00:03:49,830
Entonces este método de golpe un objeto del tipo Connection que contiene la conexión y a partir de este

51
00:03:49,830 --> 00:03:54,840
objeto connection ya podemos realizar consultas y operaciones con el objeto hasta Steinmetz.

52
00:03:55,050 --> 00:04:01,530
Ya lo vamos a ver, pero también tenemos la clase datas ves metadata que no entrega todo tipo de información

53
00:04:01,620 --> 00:04:02,940
acerca de la base datos.

54
00:04:02,970 --> 00:04:08,080
Todo lo que es el esquema, la estructura, los nombres de tablas, los campos que contiene Catalufla,

55
00:04:08,130 --> 00:04:09,840
en fin, los tipos de datos.

56
00:04:09,990 --> 00:04:11,100
Continuemos con el TMT.

57
00:04:11,130 --> 00:04:15,150
El statement es un objeto bien importante que nos permite realizar consultas y operaciones.

58
00:04:15,330 --> 00:04:21,630
Si quiero realizar por ejemplo una consulta SELECT, invocamos el método Execute Query, pero si quiero

59
00:04:21,630 --> 00:04:27,720
realizar una consulta de modificación, por ejemplo un ataque, un insert, un delight, invocamos el

60
00:04:27,720 --> 00:04:34,410
método Execute Adapt, pero también tenemos una especialización del statement que se llama prepar Stedman.

61
00:04:34,500 --> 00:04:41,040
La diferencia es que los valores de las consultas por ejemplo del select en el WHERE cuando quiero colocar

62
00:04:41,040 --> 00:04:43,500
una condición con el WHERE, ahí podemos colocar parámetros.

63
00:04:43,530 --> 00:04:49,320
Cuando el nombre o el Yussef o Leydi sea igual a un valor, ese valor se pasa como un parámetro.

64
00:04:49,470 --> 00:04:51,120
Lo mismo en el insert, en el APDAYC.

65
00:04:51,330 --> 00:04:57,270
Todos los valores que queremos actualizar en el APDAYC o queremos insertar en el INSERT lo van a pasar

66
00:04:57,270 --> 00:04:59,850
como parámetros y eso es bastante robusto porque nos permite.

67
00:05:00,020 --> 00:05:05,900
Reutilizar la consulta se cuela como una plantilla y la pueden ejecutar varias veces solamente modificando

68
00:05:05,900 --> 00:05:06,650
los parámetros.

69
00:05:06,860 --> 00:05:12,470
Luego tenemos el Clavell statement que nos permite ejecutar procedimiento almacenado con parámetros

70
00:05:12,560 --> 00:05:14,060
de entradas y salidas.

71
00:05:14,300 --> 00:05:17,150
Luego tenemos el result set, que es la respuesta final.

72
00:05:17,180 --> 00:05:23,150
Cuando ejecutamos mediante el objeto sentencia o statement, ejecutamos un query, lo enviamos al motor,

73
00:05:23,300 --> 00:05:29,360
devuelve el resultado la lista, por ejemplo, de registros encontrados o que coinciden con esa consulta.

74
00:05:29,570 --> 00:05:36,080
Bueno, el result set contiene y maneja esta lista por debajo, trabaja con un cursor y vamos moviendo

75
00:05:36,170 --> 00:05:37,650
este cursor con el método Next.

76
00:05:37,820 --> 00:05:42,800
Entonces lo podríamos, por ejemplo, iterar con un while y con el next nos posicionamos en el primer

77
00:05:42,800 --> 00:05:43,940
registro encontrado.

78
00:05:44,060 --> 00:05:47,930
Ahí podemos trabajar con esos datos y así nos vamos moviendo con el cursor.

79
00:05:48,080 --> 00:05:54,380
Luego tenemos el result set metadata muy parecido el data metadata, pero relacionado al resultado ese.

80
00:05:54,380 --> 00:05:57,800
Cuáles son los números de columnas o nombres de columnas?

81
00:05:57,860 --> 00:06:00,050
En fin, de la consulta para comunicarnos a la base.

82
00:06:00,050 --> 00:06:05,360
Dato establecer una conexión utilizamos el Draven manager y el que con lechon llega.

83
00:06:05,360 --> 00:06:10,070
Tenemos que pasar tres parámetro importante primero el string de conexión VL.

84
00:06:10,160 --> 00:06:19,490
Ahí tenemos el ejemplo más secuela como SQL sería JDBC 2 punto me secuela de 2 punto double large lippe

85
00:06:19,670 --> 00:06:26,750
o localhost o el nombre de la máquina 2 punto el puerto 33 03 y el nombre lo acepto.

86
00:06:26,990 --> 00:06:28,430
Luego pasamos las credenciales.

87
00:06:28,490 --> 00:06:35,390
El Yussef einem el Password McQuade Root es el usuario por defecto como administrador y alguna clave.

88
00:06:35,570 --> 00:06:35,840
Listo.

89
00:06:35,940 --> 00:06:36,740
Ahí tenemos la conexión.

90
00:06:36,800 --> 00:06:41,900
Entonces, a partir de tu objeto connection ya podemos ejecutar consultas sentencia del tipo SELECT,

91
00:06:41,990 --> 00:06:44,840
por ejemplo, invocando el método Create Statement.

92
00:06:45,080 --> 00:06:52,640
Luego ejecutamos una query execute query con este objeto por argumento pasamos la consulta select asterisco

93
00:06:52,640 --> 00:06:53,690
from la tabla.

94
00:06:53,900 --> 00:07:00,590
Obtenemos el conjunto de resultado el rasul set que lo podemos iterar con un while moviendo el cursor.

95
00:07:00,680 --> 00:07:06,980
Recuerden que el result set punto next no posicionamos sobre el primer registro encontrado.

96
00:07:07,070 --> 00:07:12,260
Sí que existe alguno porque puede que no he encontrado nada, pero si existe, bueno, entra en el while

97
00:07:12,380 --> 00:07:15,170
invocando método get y el nombre de la columna.

98
00:07:15,260 --> 00:07:22,010
Obtenemos el dato del cursor en cuestión y si se fijan acá cada metodo get tiene un tipo dato get int,

99
00:07:22,160 --> 00:07:23,570
get string, get double.

100
00:07:23,600 --> 00:07:27,560
Bueno, eso depende del tipo de dato de la columna del campo.

101
00:07:27,740 --> 00:07:32,210
Por ejemplo, el Heidy es un identificador auto incremental, es un número.

102
00:07:32,330 --> 00:07:35,660
Invocamos el int get it y el nombre campo.

103
00:07:35,690 --> 00:07:41,540
Luego tenemos el nombre producto donde nombre ese día el nombre del campo y del tipo String.

104
00:07:41,720 --> 00:07:42,470
Es un texto.

105
00:07:42,560 --> 00:07:43,700
Luego tenemos el precio.

106
00:07:43,880 --> 00:07:51,740
Nombre campo precio del tipo double se fijan y así obtenemos cada valor del campo en el cursor actual

107
00:07:51,860 --> 00:07:54,140
que corresponde al registro en cuestión.

108
00:07:54,290 --> 00:07:55,690
Luego tenemos que cerrar los recursos.

109
00:07:55,700 --> 00:07:56,980
Resultado punto clouds.

110
00:07:57,050 --> 00:07:59,690
Y así también la sentencia y el objeto de conexión.

111
00:07:59,840 --> 00:08:00,200
Bien.

112
00:08:00,320 --> 00:08:07,160
Otra forma en vez de utilizar nombre de columna, por ejemplo Leidy nombre precio la fecha utilizamos

113
00:08:07,220 --> 00:08:11,840
índices que mantiene el mismo orden en el cual están los campos en la tabla.

114
00:08:11,990 --> 00:08:17,420
Por ejemplo, el número 1 corresponde a la columna y el número 2 corresponde a la columna nombre.

115
00:08:17,600 --> 00:08:22,010
El número 3 corresponde a la columna precio y así la 4 fecha.

116
00:08:22,250 --> 00:08:28,160
Cada campo, cada columna tiene un índice en la tabla según el orden en el cual se establecen.

117
00:08:28,310 --> 00:08:29,210
Sería otra forma.

118
00:08:29,240 --> 00:08:34,330
Podemos utilizar el índice de la columna o el nombre y para realizar operaciones CML.

119
00:08:34,430 --> 00:08:41,900
Recuerden para ejecutar un insert, un Abbe que modifican un registro en Segato o lo agregan o lo eliminan.

120
00:08:41,960 --> 00:08:43,430
Muy parecido a lo anterior.

121
00:08:43,460 --> 00:08:49,340
Pero en vez de ejecutar el execute query, invocamos el método el sicut Apdayc y este método devuelve

122
00:08:49,340 --> 00:08:53,060
un entero con la cantidad de filas afectada, por ejemplo con el Lilit.

123
00:08:53,210 --> 00:08:58,360
Si se eliminó una fila o dos fila o si se actualizaron con el ante tanta fila.

124
00:08:58,430 --> 00:09:02,390
En fin, entonces siempre devuelve la cantidad de filas afectadas.

125
00:09:02,540 --> 00:09:05,570
Bien y como argumento del método colocamos la sentencia.

126
00:09:05,660 --> 00:09:06,320
Por ejemplo.

127
00:09:06,410 --> 00:09:07,820
In Cerinto productos.

128
00:09:07,970 --> 00:09:11,690
Bueno, ya lo vimos para crear 1 registro el apte.

129
00:09:11,750 --> 00:09:17,060
Lo mismo con el set y los campos que vamos a modificar y luego el huer para una condición.

130
00:09:17,090 --> 00:09:20,840
Solamente modificar el producto 7 o con Heidy 7.

131
00:09:20,960 --> 00:09:21,890
Lo mismo para eliminar.

132
00:09:21,980 --> 00:09:23,170
Acá estamos pasando parámetros.

133
00:09:23,170 --> 00:09:25,100
Se fija en where Heidy y a 5.

134
00:09:25,310 --> 00:09:30,710
Ahora claro, si estamos trabajando en Java esto serían variables de nuestra aplicación y acá tendríamos

135
00:09:30,710 --> 00:09:32,030
que concatenar el valor.

136
00:09:32,030 --> 00:09:38,720
59. La variable que contiene el string monthan pic la variable que contiene el entero 7 el Heidy se

137
00:09:38,720 --> 00:09:39,140
fijan.

138
00:09:39,320 --> 00:09:43,190
Tendríamos que concatenar, pero una solución mucho mejor y mucho más práctica.

139
00:09:43,280 --> 00:09:49,760
Utilizar sentencias preparada serían plantillas de una sentencia pero con parámetro, plantilla con

140
00:09:49,760 --> 00:09:53,480
parámetro y luego modificamos esos parámetro con sus valores.

141
00:09:53,570 --> 00:09:55,100
Qué es lo que viene justamente a continuación?

142
00:09:55,400 --> 00:09:57,810
Veamos un ejemplo acá tenemos la consulta SELECT.

143
00:09:58,070 --> 00:09:59,810
La diferencia que en vez de llamar.

144
00:09:59,930 --> 00:10:07,100
El método Créete Steinmetz, acá invocamos Pepper Stedman y por argumento le pasamos la consulta, pero

145
00:10:07,100 --> 00:10:13,130
como plantilla, con los parámetros y el tipo de dato del statement del objeto que se crea no es statement

146
00:10:13,160 --> 00:10:17,020
como antes, sino es preparar statement del tipo sentencie, prepará.

147
00:10:17,120 --> 00:10:18,800
Acá en el Heidy colocamos igual.

148
00:10:18,920 --> 00:10:23,450
Si no pregunta cómo tenemos uno solo corresponde al índice 1.

149
00:10:23,600 --> 00:10:26,990
Cada parámetro tiene un índice según se posicionen.

150
00:10:27,110 --> 00:10:32,900
Esto si no pregunta en la consulta, pero acá tenemos uno solo, entonces asignamos el valor al parámetro

151
00:10:32,900 --> 00:10:34,760
para Leydi con el método SET.

152
00:10:34,970 --> 00:10:38,270
Acá tenemos el objeto sentencia punto set el tipo dato.

153
00:10:38,360 --> 00:10:45,020
Recuerden que Leydi es del tipo entero, el índice 1 porque tenemos un solo parámetro en la plantilla

154
00:10:45,110 --> 00:10:47,850
o en la consulta y le pasamos el valor 4.

155
00:10:47,960 --> 00:10:53,540
Entonces, como segundo argumento, el valor como primer argumento el índice y luego ejecutamos la consulta

156
00:10:53,600 --> 00:10:54,560
execute query.

157
00:10:54,680 --> 00:11:01,130
Si volvemos atrás en un Steinmetz que no es preparada, acá invocamos el método Cred Steinbeck y en

158
00:11:01,130 --> 00:11:05,630
el Execute Query o en el Execute hace pasamos la sentencia.

159
00:11:05,750 --> 00:11:08,480
Acá no. Acá la sentencia va a tiro.

160
00:11:08,570 --> 00:11:10,610
En el PREPARÉIS te meto en Lasseter.

161
00:11:10,610 --> 00:11:11,150
Está preparada.

162
00:11:11,240 --> 00:11:13,490
Y luego pasamos a los valores y al final ejecutamos.

163
00:11:13,580 --> 00:11:15,690
De hecho, podríamos ejecutar varias veces.

164
00:11:15,860 --> 00:11:21,260
Y vamos cambiando los valores y podemos reutilizar la misma sentencia, la misma plantilla, solamente

165
00:11:21,320 --> 00:11:24,950
modificando con los métodos set los valores de los parámetros.

166
00:11:25,010 --> 00:11:31,700
Acá tenemos el ejemplo completo que obtenemos el result set en el este query y con un if mostramos la

167
00:11:31,700 --> 00:11:34,110
información claro, un if porque acá tenemos un where.

168
00:11:34,190 --> 00:11:36,950
Entonces va a devolver un solo registro.

169
00:11:37,190 --> 00:11:43,020
En vez de utilizar un while, podemos utilizar un if cuando se trata de un solo resultado que va a devolver.

170
00:11:43,190 --> 00:11:50,210
Entonces if si tiene un siguiente elemento en el cursor punto Next mueve el cursor y si lo encuentra

171
00:11:50,240 --> 00:11:53,600
bueno, se posiciona y mostramos el valor para Leidy.

172
00:11:53,780 --> 00:11:55,880
El valor para el nombre por precio para la fecha.

173
00:11:56,060 --> 00:12:00,860
Con los métodos GET y con el tipo de dato correspondiente, el Heidy del tipo entero en nombre del tipo

174
00:12:00,860 --> 00:12:07,090
String, el precio del tipo double y la fecha del tipo date, pero del tipo void de Java se cuele no

175
00:12:07,100 --> 00:12:07,790
della batel.

176
00:12:07,880 --> 00:12:10,750
Después vamos a ver, luego cerramos los recurso importante.

177
00:12:11,030 --> 00:12:12,370
Veamos un ejemplo con el insert.

178
00:12:12,380 --> 00:12:13,660
Acá tenemos lo mismo.

179
00:12:13,670 --> 00:12:18,830
PREPEND Steinmetz, un insert muy parecido al select, pero acá sería un insert con parámetros.

180
00:12:18,890 --> 00:12:19,970
Acá tiene tres parámetros.

181
00:12:20,090 --> 00:12:28,020
El primero el nombre segundo precio fecha el nombre 1 precio 2 fecha 3 va en orden el índice.

182
00:12:28,310 --> 00:12:30,170
Entonces se modifica con el método set.

183
00:12:30,320 --> 00:12:33,710
Según el índice se fijan 1 nombre bicicleta.

184
00:12:33,920 --> 00:12:38,930
El segundo argumento si el valor que se lo pasamos al parámetro 1 el precio también.

185
00:12:39,020 --> 00:12:44,720
Pero esto lo pasamos al parámetro 2 y la fecha se lo pasamos al parámetro 3 y cada uno con su tipo.

186
00:12:44,720 --> 00:12:47,000
Dato particular el nombre del tipo es.

187
00:12:47,540 --> 00:12:48,920
El precio del tipo double.

188
00:12:49,040 --> 00:12:51,530
El fecha del tipo dato llega.

189
00:12:51,530 --> 00:13:00,140
Tenemos un yaba SQL dato importante 9 lleba útil y pasamos el tiempo actual en milisegundos con la clase

190
00:13:00,140 --> 00:13:02,990
System y el método Carret en Time milisegundos.

191
00:13:03,200 --> 00:13:05,600
Finalmente ejecutamos con el éxico out added.

192
00:13:05,840 --> 00:13:11,960
Si retrocedemos y vemos acá se ejecuta la consulta select con exit out query.

193
00:13:12,170 --> 00:13:17,000
Pero todo lo que es insert attack y Delight con él exec out added.

194
00:13:17,390 --> 00:13:22,160
Y también tenemos otros ejemplo para latte con productos set precio nombre Leidy.

195
00:13:22,250 --> 00:13:28,550
Y también acá tenemos tres parámetros y lo pasamos acá van en orden set Dogbert con su valor para el

196
00:13:28,550 --> 00:13:30,740
precio 99.99.

197
00:13:30,830 --> 00:13:35,750
Luego tenemos set string con el índice 2 para el nombre del tipo String monthan Vic.

198
00:13:35,840 --> 00:13:43,130
Luego tenemos set int el Heidy parámetro 3 con valor 7 execute ad date para ejecutar lo mismo para el

199
00:13:43,130 --> 00:13:43,550
delito.

200
00:13:43,840 --> 00:13:50,210
Bueno, y eso es sentencia preparada una mucho mejor forma para realizar otra consulta con parámetros

201
00:13:50,300 --> 00:13:56,540
en vez de esta concatenado es mucho mejor pasar parámetro más eficiente y además es mucho más seguro

202
00:13:56,600 --> 00:13:59,120
porque evita la inyección SQL.

203
00:13:59,270 --> 00:14:05,660
Probé por debajo una capa seguridad que evita que no inyecten cualquier tipo de valor, cualquier tipo

204
00:14:05,810 --> 00:14:06,260
de dato.

205
00:14:06,350 --> 00:14:08,620
De hecho, por eso acá invocamos al set double.

206
00:14:08,700 --> 00:14:12,860
Acá no nos pueden inyectar cualquier tipo de objeto, cualquier tipo de dato.

207
00:14:12,950 --> 00:14:17,390
Lo mismo con el string tiene que ser un objeto, el tipo string y por ejemplo, acá no nos pueden inyectar

208
00:14:17,390 --> 00:14:22,250
código que puedan afectar o puedan vulnerar a nuestra aplicación, no?

209
00:14:22,400 --> 00:14:27,620
Acá hay una capa seguridad extra que evita la inyección SQL, lo hace mucho más seguro.

210
00:14:27,740 --> 00:14:32,900
Además una plantilla se cuele reutilizable bien y esto sería la parte introductoria.

211
00:14:32,990 --> 00:14:34,820
Nos vemos en la siguiente clase.
