1 00:00:00,500 --> 00:00:15,640 Vale, pues entonces, hasta ahora, a lo largo de todo este curso, nuestra aplicación Java, que lógicamente trabajaba con datos, porque si no, no vale para nada, ¿verdad? 2 00:00:16,379 --> 00:00:26,660 Nuestra aplicación Java, ¿de dónde tomaba los datos? Sí, bueno, pero de la RAM siempre. O sea, todos los datos con los que trabaja una aplicación están en RAM. 3 00:00:26,660 --> 00:00:29,679 o cualquier proceso que esté lanzado 4 00:00:29,679 --> 00:00:31,640 la pregunta es cómo han llegado a la RAM 5 00:00:31,640 --> 00:00:35,880 porque en la RAM están las variables 6 00:00:35,880 --> 00:00:38,159 que es lo único con lo que la aplicación puede trabajar 7 00:00:38,159 --> 00:00:39,840 con lo que haya en variables, lógicamente 8 00:00:39,840 --> 00:00:42,899 todo lo que no esté en variables la aplicación no puede tratarlo 9 00:00:42,899 --> 00:00:45,159 pero claro, la pregunta es 10 00:00:45,159 --> 00:00:49,320 cómo llega la información a las variables 11 00:00:49,320 --> 00:00:51,859 para que la aplicación pueda manejar con ellas 12 00:00:51,859 --> 00:00:54,340 operar, mostrar por pantalla, lo que sea 13 00:00:54,340 --> 00:00:57,259 ¿cómo llega? pues a lo largo del curso 14 00:00:57,259 --> 00:00:59,219 hemos visto muy pocas 15 00:00:59,219 --> 00:01:00,740 casuísticas, una 16 00:01:00,740 --> 00:01:02,020 pues que haya un tío ahí 17 00:01:02,020 --> 00:01:04,620 metiéndola por consola 18 00:01:04,620 --> 00:01:06,560 ¿verdad? se introduzca no sé qué 19 00:01:06,560 --> 00:01:09,099 introduce por consola y ya se carga la variable 20 00:01:09,099 --> 00:01:09,540 que sea 21 00:01:09,540 --> 00:01:12,879 o que haya un tío ahí metiéndola en una 22 00:01:12,879 --> 00:01:14,959 interfaz gráfica, en tu área 23 00:01:14,959 --> 00:01:16,900 de texto, mediante el combo box 24 00:01:16,900 --> 00:01:18,780 en el list view, como sea 25 00:01:18,780 --> 00:01:20,760 tú marcas 26 00:01:20,760 --> 00:01:22,719 un dato de entrada y desde ahí 27 00:01:22,719 --> 00:01:26,060 llegan las variables de la aplicación 28 00:01:26,060 --> 00:01:27,260 y 29 00:01:27,260 --> 00:01:28,819 lo más 30 00:01:28,819 --> 00:01:31,760 que hemos hecho para que no sea en tiempo real 31 00:01:31,760 --> 00:01:33,000 porque esto que digo es en tiempo real 32 00:01:33,000 --> 00:01:35,060 tiene que estar un tío ahí delante dando la información 33 00:01:35,060 --> 00:01:37,280 si no la aplicación está ahí parada 34 00:01:37,280 --> 00:01:39,620 y lo más que hemos hecho que no sea en tiempo real 35 00:01:39,620 --> 00:01:43,620 pues es que la coja la aplicación 36 00:01:43,620 --> 00:01:44,700 en ficheros 37 00:01:44,700 --> 00:01:48,909 entonces la información 38 00:01:48,909 --> 00:01:50,370 está escrita en ficheros 39 00:01:50,370 --> 00:01:52,969 y la aplicación puede 40 00:01:52,969 --> 00:01:57,670 abrir esos ficheros, llamar a los métodos correspondientes 41 00:01:57,670 --> 00:02:00,810 de las clases de librería hechos para ello 42 00:02:00,810 --> 00:02:04,849 para leer los datos, hacer un read, hacer un write, lo que sea 43 00:02:04,849 --> 00:02:09,189 bueno, pues esto está bien, porque esto ya convierte 44 00:02:09,189 --> 00:02:12,810 automáticamente la aplicación, la convierte ya en algo 45 00:02:12,810 --> 00:02:16,830 persistente, y eso significa que cuando 46 00:02:16,830 --> 00:02:20,550 la aplicación termina, los datos 47 00:02:20,550 --> 00:02:23,030 sigue en algún sitio, que es aquí 48 00:02:23,030 --> 00:02:27,490 porque hasta llegar a ficheros 49 00:02:27,490 --> 00:02:31,530 todos los datos que generaba la aplicación 50 00:02:31,530 --> 00:02:34,750 y todos los datos que tomaba y guardaba en variables 51 00:02:34,750 --> 00:02:37,009 cuando la aplicación terminaba, esos datos son la basura 52 00:02:37,009 --> 00:02:40,389 lógicamente, porque la RAM, toda la información de la RAM 53 00:02:40,389 --> 00:02:42,930 que tiene el proceso lanzado 54 00:02:42,930 --> 00:02:46,289 se ha perdido todo, entonces esa aplicación no era persistente 55 00:02:46,289 --> 00:02:49,810 se supone que había alguien ahí que había visto en la pantalla 56 00:02:49,810 --> 00:02:51,729 el resultado en no sé qué, pero era lo más 57 00:02:51,729 --> 00:02:52,469 que podía ocurrir 58 00:02:52,469 --> 00:02:55,650 con ficheros ya hemos dado un 59 00:02:55,650 --> 00:02:57,789 pequeño primer paso, muy pequeñito 60 00:02:57,789 --> 00:02:59,750 que es que la información 61 00:02:59,750 --> 00:03:01,189 que la aplicación ha generado 62 00:03:01,189 --> 00:03:03,270 se quede en algún sitio 63 00:03:03,270 --> 00:03:05,870 y cuando la aplicación ha terminado 64 00:03:05,870 --> 00:03:07,430 y la RAM se ha limpiado entera 65 00:03:07,430 --> 00:03:09,629 de principio a fin, pues esto está aquí 66 00:03:09,629 --> 00:03:10,870 vale, pues algo es algo 67 00:03:10,870 --> 00:03:13,389 bueno, pues así se podría tirar 68 00:03:13,389 --> 00:03:15,129 hasta el infinito 69 00:03:15,129 --> 00:03:19,879 así se podría 70 00:03:19,879 --> 00:03:21,699 tirar hasta el infinito, pero ¿cuál es el problema? 71 00:03:22,020 --> 00:03:24,060 que sí, vale, si nos remontamos 30 años 72 00:03:24,060 --> 00:03:25,860 o 40 años, todavía, 73 00:03:26,439 --> 00:03:28,340 porque los volúmenes de datos que se manejaban 74 00:03:28,340 --> 00:03:30,280 lógicamente eran 75 00:03:30,280 --> 00:03:32,240 más bajos y estaban 76 00:03:32,240 --> 00:03:34,139 menos estructurados, no necesitaban 77 00:03:34,139 --> 00:03:35,199 tanta estructura. 78 00:03:36,340 --> 00:03:38,120 Ahora ya, con aplicaciones 79 00:03:38,120 --> 00:03:39,780 que trabajan con miles de usuarios, 80 00:03:39,919 --> 00:03:42,400 cada usuario tiene un montón de datos distintos, 81 00:03:42,599 --> 00:03:44,400 tu nombre, tu contraseña, tu no sé qué, 82 00:03:44,800 --> 00:03:45,780 todas tus facturas, 83 00:03:46,180 --> 00:03:47,680 con esos volúmenes y con 84 00:03:47,680 --> 00:03:49,860 información tan estructurada, con tantos campos, 85 00:03:49,939 --> 00:03:51,719 tantas cosas, trabajar 86 00:03:51,719 --> 00:03:52,759 con ficheros es una locura 87 00:03:52,759 --> 00:03:55,659 porque ¿qué hacemos? lo ponemos todo en un ficherito 88 00:03:55,659 --> 00:03:57,219 de texto así tipo CSV 89 00:03:57,219 --> 00:03:59,879 separados con datos, nombre, contraseña 90 00:03:59,879 --> 00:04:01,759 pedazo de fichero enorme 91 00:04:01,759 --> 00:04:03,599 y la aplicación va a tener 92 00:04:03,599 --> 00:04:05,060 un cuello de botella aquí tremendo 93 00:04:05,060 --> 00:04:07,219 hasta que lea del fichero todo 94 00:04:07,219 --> 00:04:09,639 entonces, ¿qué? ¿un fichero 95 00:04:09,639 --> 00:04:11,659 de objetos? jodines, vale, un fichero 96 00:04:11,659 --> 00:04:13,740 de objetos, es menos cuello de botella 97 00:04:13,740 --> 00:04:15,759 porque los ficheros de objetos 98 00:04:15,759 --> 00:04:17,639 mandan la información serializada 99 00:04:17,639 --> 00:04:18,779 es un poquito más rápido 100 00:04:18,779 --> 00:04:21,100 pero ese fichero de objetos 101 00:04:21,100 --> 00:04:23,560 es misterioso total 102 00:04:23,560 --> 00:04:25,980 porque solamente lo puede ver 103 00:04:25,980 --> 00:04:28,339 la aplicación Java 104 00:04:28,339 --> 00:04:29,920 que lo ha creado 105 00:04:29,920 --> 00:04:31,980 esa, lo lee y lo vuelca en sus clases 106 00:04:31,980 --> 00:04:33,120 lo que hay aquí dentro 107 00:04:33,120 --> 00:04:35,759 está absolutamente críptico 108 00:04:35,759 --> 00:04:37,980 y nadie jamás nunca podrá entender eso 109 00:04:37,980 --> 00:04:39,459 a menos que hagas una aplicación Java 110 00:04:39,459 --> 00:04:41,420 con las clases, con esos campos, etc. 111 00:04:42,399 --> 00:04:43,339 luego esta solución 112 00:04:43,339 --> 00:04:45,160 para un contexto 113 00:04:45,160 --> 00:04:47,139 pequeñito, muy bien 114 00:04:47,139 --> 00:04:49,040 pero para un contexto actual, no 115 00:04:49,040 --> 00:05:18,480 Bueno, luego, lógicamente, ¿cuál es el siguiente paso? Que ya lo sabéis, es, hombre, tengo unos sistemas gestores de bases de datos maravillosos, unas tecnologías de bases de datos estupendas, con un sistema gestor que está ahí gestionando un montón de tablas, con un montón de información, con miles de registros, que me da, además, me da un lenguaje SQL que conocéis perfectamente, que me permite a mí hacer consultas, optimizar consultas, sacar consultas, 116 00:05:18,480 --> 00:05:21,060 multitabla, jolines, pues si esta 117 00:05:21,060 --> 00:05:22,199 tecnología ya está 118 00:05:22,199 --> 00:05:24,980 es decir, toda una capacidad de almacenamiento 119 00:05:24,980 --> 00:05:27,300 y además un lenguaje 120 00:05:27,300 --> 00:05:28,959 SQL para que 121 00:05:28,959 --> 00:05:30,740 alguien desde fuera pueda 122 00:05:30,740 --> 00:05:32,699 consultar, crear tablas, lo que sea 123 00:05:32,699 --> 00:05:34,680 si toda esta tecnología está, hombre 124 00:05:34,680 --> 00:05:37,040 pues vamos a hacerla 125 00:05:37,040 --> 00:05:38,660 disponible para nuestras aplicaciones 126 00:05:38,660 --> 00:05:40,360 lógicamente, vamos a hacerla disponible 127 00:05:40,360 --> 00:05:43,240 y que mis aplicaciones puedan guardar aquí la información 128 00:05:43,240 --> 00:05:44,259 ¿vale? 129 00:05:44,759 --> 00:05:46,000 es evidente, es un salto 130 00:05:46,000 --> 00:05:47,360 natural 131 00:05:47,360 --> 00:05:50,079 bueno 132 00:05:50,079 --> 00:05:53,300 ahora, cuando tratamos de ver 133 00:05:53,300 --> 00:05:55,240 vale, muy bien, ¿cómo ponemos en 134 00:05:55,240 --> 00:05:57,279 comunicación nuestras 135 00:05:57,279 --> 00:05:59,199 aplicaciones Java con las bases de datos? 136 00:05:59,360 --> 00:06:01,100 porque cada uno de sus países humanos tiene nada que ver, son 137 00:06:01,100 --> 00:06:02,379 tecnologías completamente distintas 138 00:06:02,379 --> 00:06:05,000 cuando digo una aplicación Java, una aplicación Python 139 00:06:05,000 --> 00:06:07,139 una aplicación lo que sea, tecnología 140 00:06:07,139 --> 00:06:09,459 es distinta, ¿cómo las ponemos 141 00:06:09,459 --> 00:06:10,279 en comunicación? 142 00:06:11,360 --> 00:06:13,360 bueno, pues se podría pensar 143 00:06:13,360 --> 00:06:15,279 jolines, pues voy 144 00:06:15,279 --> 00:06:17,339 a ver cómo es mi base de datos 145 00:06:17,339 --> 00:06:22,519 y voy a crear unas clases, un software específico que la entienda 146 00:06:22,519 --> 00:06:28,879 para lo cual, pues lógicamente tendré que haberme empapado bien de cómo está hecho esto por dentro 147 00:06:28,879 --> 00:06:35,519 y me hago yo mis clases cuando digo yo a alguien realmente profesional que pueda hacer esas clases 148 00:06:35,519 --> 00:06:41,319 y ofrecerlas, me hago mis clases con métodos que permiten usar el SQL 149 00:06:41,319 --> 00:07:00,759 Bueno, vale, pues sí, eso lo puede hacer lógicamente el propietario de esta tecnología, el propietario de la tecnología de la base de datos que sea, con unas clases, unas funciones de librería. 150 00:07:00,759 --> 00:07:03,259 es decir, por ejemplo 151 00:07:03,259 --> 00:07:03,959 este es oracle 152 00:07:03,959 --> 00:07:08,490 y oracle dice, vale, yo no quiero estar aislado 153 00:07:08,490 --> 00:07:10,430 en el mundo, quiero que los 154 00:07:10,430 --> 00:07:11,509 desarrolladores java 155 00:07:11,509 --> 00:07:14,529 quiero que puedan incorporar 156 00:07:14,529 --> 00:07:15,949 nuestras aplicaciones y quiero que puedan 157 00:07:15,949 --> 00:07:18,170 crear bases de datos y todo eso 158 00:07:18,170 --> 00:07:19,430 pues entonces 159 00:07:19,430 --> 00:07:21,730 oracle, el mundo de oracle 160 00:07:21,730 --> 00:07:24,310 pues se puede hacer unas clases 161 00:07:24,310 --> 00:07:26,430 y ya sabéis 162 00:07:26,430 --> 00:07:27,310 que unas clases 163 00:07:27,310 --> 00:07:30,649 se empaquetan todas en un paquete .jar 164 00:07:30,649 --> 00:07:42,350 Entonces, se puede hacer unos cuantos JAR con un montón de clases y que esas clases tengan métodos que permitan ser llamados desde Java para hacer lo que toque hacer, ¿verdad? 165 00:07:42,810 --> 00:07:49,250 Entonces, Oracle dice, no pasa nada, yo me hago aquí unas clases porque yo conozco cómo funciono por dentro, solo yo. 166 00:07:49,910 --> 00:07:54,170 Entonces, solo él las puede hacer, yo conozco, sé cómo funciona por dentro estas bases de datos. 167 00:07:54,170 --> 00:07:56,730 pues me hago mis clases, las meto en un 168 00:07:56,730 --> 00:07:59,069 JAR y las pongo a disposición 169 00:07:59,069 --> 00:08:00,610 de los desarrolladores 170 00:08:00,610 --> 00:08:01,649 de la comunidad Java 171 00:08:01,649 --> 00:08:04,810 por lo tanto la comunidad Java tendrá 172 00:08:04,810 --> 00:08:06,930 que usar las clases 173 00:08:06,930 --> 00:08:08,670 de esos JAR para 174 00:08:08,670 --> 00:08:10,910 hacer lo que estos JAR 175 00:08:10,910 --> 00:08:12,589 le permitan, que se supone que será 176 00:08:12,589 --> 00:08:14,910 conectarte a bases de datos, crear 177 00:08:14,910 --> 00:08:16,870 bases de datos, crear tablas, insertar 178 00:08:16,870 --> 00:08:17,990 registros, lo que sea 179 00:08:17,990 --> 00:08:22,089 ¿pero qué ocurre? que tenemos 180 00:08:22,089 --> 00:08:24,269 un montón de tipos de bases de datos 181 00:08:24,269 --> 00:08:26,410 también está MySQL 182 00:08:26,410 --> 00:08:28,550 también está Postgre 183 00:08:28,550 --> 00:08:34,250 ¿qué ocurre? 184 00:08:34,309 --> 00:08:36,429 que internamente cada una es distinta 185 00:08:36,429 --> 00:08:38,769 cada una funciona de una forma distinta 186 00:08:38,769 --> 00:08:40,470 entonces MySQL 187 00:08:40,470 --> 00:08:43,210 se tendrá que hacer sus propios 188 00:08:43,210 --> 00:08:45,350 hard para ofrecerlos 189 00:08:45,350 --> 00:08:47,210 y Postgre se tendrá 190 00:08:47,210 --> 00:08:48,570 que hacer los suyos propios 191 00:08:48,570 --> 00:08:51,429 y si seguimos añadiendo 192 00:08:51,429 --> 00:08:53,149 bases de datos pues tendríamos 193 00:08:53,149 --> 00:08:55,389 tropecientas mil bases de datos distintas 194 00:08:55,389 --> 00:08:56,929 cada una de ellas 195 00:08:56,929 --> 00:08:58,509 con su propio hat 196 00:08:58,509 --> 00:09:02,389 que te ofrece las clases 197 00:09:02,389 --> 00:09:05,250 para que tú las importes desde tu aplicación 198 00:09:05,250 --> 00:09:07,009 ya veremos cómo 199 00:09:07,009 --> 00:09:10,230 y puedas llamar a los métodos correspondientes 200 00:09:10,230 --> 00:09:13,889 para conectarte, hacer consultas, lo que sea 201 00:09:13,889 --> 00:09:17,669 esta es la primera idea 202 00:09:17,669 --> 00:09:19,490 la primera idea 203 00:09:19,490 --> 00:09:23,169 pero aquí ya rápidamente vemos un problema 204 00:09:23,169 --> 00:09:26,429 ahora ya nosotros como mentes desarrolladoras 205 00:09:26,429 --> 00:09:28,289 que somos, ya sabemos 206 00:09:28,289 --> 00:09:30,070 que las aplicaciones para que tengan 207 00:09:30,070 --> 00:09:31,690 un ciclo de vida largo 208 00:09:31,690 --> 00:09:33,950 porque una aplicación, si tú haces una aplicación 209 00:09:33,950 --> 00:09:36,429 y al año esa aplicación ya 210 00:09:36,429 --> 00:09:38,450 deja de ser productiva por lo que sea 211 00:09:38,450 --> 00:09:40,850 pues te has arruinado, tú como desarrollador 212 00:09:40,850 --> 00:09:42,190 tienes que hacer aplicaciones 213 00:09:42,190 --> 00:09:43,629 que tengan 214 00:09:43,629 --> 00:09:46,090 que su fase de mantenimiento 215 00:09:46,090 --> 00:09:48,470 se estire lo más posible, que no te dejes tirarla 216 00:09:48,470 --> 00:09:50,330 a la basura y hacer otra nueva 217 00:09:50,330 --> 00:09:52,429 desde el principio, porque eso es un gasto muy grande 218 00:09:52,429 --> 00:09:54,250 de equipos de desarrollo y de todo 219 00:09:54,250 --> 00:09:56,429 entonces nosotros ya que tenemos esa mente 220 00:09:56,429 --> 00:09:58,649 desarrolladora y ya sabemos 221 00:09:58,649 --> 00:10:00,570 ciertas cosas que son deseables en las 222 00:10:00,570 --> 00:10:02,590 aplicaciones, como 223 00:10:02,590 --> 00:10:03,429 a 224 00:10:03,429 --> 00:10:06,909 que sean lo más desacopladas 225 00:10:06,909 --> 00:10:08,629 posibles o lo que es lo mismo 226 00:10:08,629 --> 00:10:10,769 que cada parte esté separada 227 00:10:10,769 --> 00:10:12,250 de la otra, la parte de 228 00:10:12,250 --> 00:10:14,629 interfaz gráfica 229 00:10:14,629 --> 00:10:16,629 la parte del back, la parte 230 00:10:16,629 --> 00:10:18,509 de acceso a datos, pues por ejemplo 231 00:10:18,509 --> 00:10:20,429 cuanto más desacoplada esté todo mejor 232 00:10:20,429 --> 00:10:22,490 porque si tengo que cambiar algo me voy 233 00:10:22,490 --> 00:10:24,049 a esa parte, no tengo que cambiarlo todo 234 00:10:24,049 --> 00:10:25,610 también 235 00:10:25,610 --> 00:10:30,690 que sean fácilmente migrables 236 00:10:30,690 --> 00:10:34,669 es decir, si cambia cualquier dato del exterior 237 00:10:34,669 --> 00:10:37,669 que esa aplicación pueda migrar lo más fácilmente posible 238 00:10:37,669 --> 00:10:39,330 sin tener que hacerla de cero otra vez 239 00:10:39,330 --> 00:10:41,429 bueno, pues esto que he dicho yo 240 00:10:41,429 --> 00:10:46,070 hace que las aplicaciones 241 00:10:46,070 --> 00:10:48,370 si lo dejamos así, esta idea tal y como está 242 00:10:48,370 --> 00:10:49,850 no sean fácilmente migrables 243 00:10:49,850 --> 00:10:53,789 mi aplicación Java es una aplicación súper tocha 244 00:10:53,789 --> 00:10:55,830 que hace un montón de cosas y tiene un montón de usuarios 245 00:10:55,830 --> 00:10:57,250 de historias en la base de datos Oracle 246 00:10:57,250 --> 00:10:59,450 y ahora 247 00:10:59,450 --> 00:11:01,789 de repente yo ya no puedo pagar 248 00:11:01,789 --> 00:11:03,289 Oracle por lo que sea 249 00:11:03,289 --> 00:11:05,850 y necesito cambiarlo todo 250 00:11:05,850 --> 00:11:06,549 a MySQL 251 00:11:06,549 --> 00:11:09,330 bueno, ahora lo tengo todo a MySQL 252 00:11:09,330 --> 00:11:11,710 las mismas bases de datos 253 00:11:11,710 --> 00:11:13,110 las mismas tablas, todo igual 254 00:11:13,110 --> 00:11:15,549 pero ¿qué pasa? que ahora ya 255 00:11:15,549 --> 00:11:17,590 todas las clases que yo usaba 256 00:11:17,590 --> 00:11:19,509 todas las clases que yo usaba 257 00:11:19,509 --> 00:11:21,610 quedan las que estaban dentro de este jar 258 00:11:21,610 --> 00:11:23,070 para acceder a Oracle 259 00:11:23,070 --> 00:11:25,610 todas han cambiado y yo las uso desde un montón 260 00:11:25,610 --> 00:11:27,529 de sitios, ahora tengo que retocar 261 00:11:27,529 --> 00:11:29,629 un montón de cosas, tengo que retocar un montón 262 00:11:29,629 --> 00:11:31,429 de cosas porque ahora tengo que usar 263 00:11:31,429 --> 00:11:33,590 estas otras clases, entonces tengo 264 00:11:33,590 --> 00:11:35,789 que retocar un montón, luego la migración 265 00:11:35,789 --> 00:11:36,710 de esta aplicación 266 00:11:36,710 --> 00:11:39,669 sería un galimatías y muy costosa 267 00:11:39,669 --> 00:11:40,929 luego, mal 268 00:11:40,929 --> 00:11:43,350 eso no, si eso 269 00:11:43,350 --> 00:11:45,629 ocurre, somos un desastre 270 00:11:45,629 --> 00:11:47,570 de desarrolladores y nos van 271 00:11:47,570 --> 00:11:49,490 a tirar por tierra todos nuestros proyectos 272 00:11:49,490 --> 00:11:51,750 vale 273 00:11:51,750 --> 00:12:00,070 Pues entonces, a la vista de ese problema, ¿cómo se enfoca, cómo se soluciona este problema de los múltiples JAR? 274 00:12:00,570 --> 00:12:06,730 De clases diferentes para Oracle, o para MySQL, o para Postgre, o para SQLite, para lo que sea. 275 00:12:07,230 --> 00:12:09,509 ¿Cómo se soluciona ese problema de los múltiples JAR? 276 00:12:10,009 --> 00:12:10,929 Bueno, ¿eh? 277 00:12:11,149 --> 00:12:13,909 Con un ser más universal, por decirlo así. 278 00:12:14,590 --> 00:12:15,490 Esa es la idea. 279 00:12:15,490 --> 00:12:28,570 Pues la comunidad de desarrollo Java, como los desarrolladores en general y todos normalmente son una comunidad solidaria, pues se trata de facilitar la vida. 280 00:12:28,950 --> 00:12:32,029 ¿Y cómo se facilita la vida de todo esto? 281 00:12:32,450 --> 00:12:41,850 Es decir, oye, vamos a ver, vamos a unificar las llamadas a todas las clases para que se les llame igual. 282 00:12:41,850 --> 00:12:44,429 otra cosa es lo que luego haga por dentro 283 00:12:44,429 --> 00:12:45,669 cada uno hará una cosa 284 00:12:45,669 --> 00:12:48,129 porque lo que tiene por dentro Oracle es diferente a lo que tiene 285 00:12:48,129 --> 00:12:50,190 MySQL y es diferente a lo que tiene Postgres 286 00:12:50,190 --> 00:12:51,909 pero vamos a unificar 287 00:12:51,909 --> 00:12:53,250 vamos a unificar 288 00:12:53,250 --> 00:12:55,649 para que las llamadas por ejemplo a 289 00:12:55,649 --> 00:12:57,409 insertRegistro 290 00:12:57,409 --> 00:12:59,889 sea exactamente el mismo 291 00:12:59,889 --> 00:13:01,730 método con el mismo prototipo, la misma 292 00:13:01,730 --> 00:13:03,929 cabecera en la clase que está aquí 293 00:13:03,929 --> 00:13:05,830 o en la clase que está aquí o en la clase 294 00:13:05,830 --> 00:13:07,549 que está aquí, que la llamada al método sea igual 295 00:13:07,549 --> 00:13:09,809 y que la clase que 296 00:13:09,809 --> 00:13:11,629 crea una base de datos sea la misma 297 00:13:11,629 --> 00:13:13,610 con el mismo nombre, que los nombres 298 00:13:13,610 --> 00:13:15,029 sean iguales, todos 299 00:13:15,029 --> 00:13:17,470 que lo que ya sí que cambie 300 00:13:17,470 --> 00:13:19,590 sea la implementación, que aquí 301 00:13:19,590 --> 00:13:21,490 se implemente de una forma diferente 302 00:13:21,490 --> 00:13:22,470 que aquí, que aquí 303 00:13:22,470 --> 00:13:25,529 pero que las llamadas, los nombres sean 304 00:13:25,529 --> 00:13:26,110 los mismos 305 00:13:26,110 --> 00:13:28,889 bueno, pues eso que yo estoy diciendo 306 00:13:28,889 --> 00:13:31,389 estoy definiendo 307 00:13:31,389 --> 00:13:33,750 exactamente el concepto 308 00:13:33,750 --> 00:13:34,429 de API, ¿verdad? 309 00:13:35,090 --> 00:13:37,149 de Application Program Interface 310 00:13:37,149 --> 00:13:46,470 entonces, una API 311 00:13:46,470 --> 00:13:49,250 es un conjunto de interfaces 312 00:13:49,250 --> 00:13:51,289 con métodos 313 00:13:51,289 --> 00:13:53,230 y clases vacías, como son las interfaces 314 00:13:53,230 --> 00:13:55,049 bueno, pues lógicamente pueden tener aparte 315 00:13:55,049 --> 00:13:57,289 cosas, pero como definición 316 00:13:57,289 --> 00:13:58,610 muy básica, una API 317 00:13:58,610 --> 00:14:00,809 es un conjunto de interfaces 318 00:14:00,809 --> 00:14:02,929 que unifican 319 00:14:02,929 --> 00:14:04,450 describen, definen 320 00:14:04,450 --> 00:14:07,429 la forma de llamar a las cosas 321 00:14:07,429 --> 00:14:09,269 luego cuando tú 322 00:14:09,269 --> 00:14:10,629 llames, ¿qué va a pasar por dentro? 323 00:14:11,269 --> 00:14:13,149 depende de cómo implementes esas interfaces 324 00:14:13,149 --> 00:14:15,190 ya sabéis que las interfaces 325 00:14:15,190 --> 00:14:16,929 son en general 326 00:14:16,929 --> 00:14:18,789 ¿vale? en general 327 00:14:18,789 --> 00:14:21,169 son clases con métodos vacíos 328 00:14:21,169 --> 00:14:23,629 y luego yo ya tengo ahí mi interfaz 329 00:14:23,629 --> 00:14:26,070 yo llamo a los métodos de la interfaz 330 00:14:26,070 --> 00:14:27,730 instancio objetos 331 00:14:27,730 --> 00:14:29,549 como si fueran de la interfaz 332 00:14:29,549 --> 00:14:31,129 a mí me valen las interfaces 333 00:14:31,129 --> 00:14:33,289 para declarar referencias ¿verdad? 334 00:14:33,409 --> 00:14:35,330 tengo mi interfaz, por ejemplo 335 00:14:35,330 --> 00:14:38,110 base datos, que es una interfaz con métodos vacíos 336 00:14:38,110 --> 00:14:39,830 yo puedo declarar una referencia 337 00:14:39,830 --> 00:14:41,049 base datos, claro que puedo 338 00:14:41,049 --> 00:14:43,769 lo que pasa es que luego la tengo que instanciar 339 00:14:43,769 --> 00:14:45,509 ahora ya con una implementación 340 00:14:45,509 --> 00:14:46,049 concreta 341 00:14:46,049 --> 00:14:49,570 entonces una API es un conjunto 342 00:14:49,570 --> 00:14:50,769 de clases vacías 343 00:14:50,769 --> 00:14:52,850 o lo que es lo mismo interfaces 344 00:14:52,850 --> 00:14:55,610 que de alguna manera me comprometen 345 00:14:55,610 --> 00:14:57,309 a una forma de llamar a las cosas 346 00:14:57,309 --> 00:14:58,629 a una forma de llamarlas 347 00:14:58,629 --> 00:15:01,429 entonces mi aplicación me da igual 348 00:15:01,429 --> 00:15:03,649 que use oracle, que use java, que use postgre 349 00:15:03,649 --> 00:15:05,649 el código va a ser 350 00:15:05,649 --> 00:15:07,629 exactamente igual porque va a llamar a los métodos 351 00:15:07,629 --> 00:15:08,289 de la misma manera 352 00:15:08,289 --> 00:15:11,690 exactamente igual y va a usar las mismas clases 353 00:15:11,690 --> 00:15:12,789 las mismas interfaces 354 00:15:12,789 --> 00:15:14,389 si respeta esta API, claro 355 00:15:14,389 --> 00:15:16,529 ¿qué es lo que va a cambiar? 356 00:15:17,389 --> 00:15:19,230 ¿cómo decido yo implementarlas? 357 00:15:19,970 --> 00:15:20,809 que estoy en Oracle 358 00:15:20,809 --> 00:15:23,750 incorporo la implementación 359 00:15:23,750 --> 00:15:24,529 de Oracle 360 00:15:24,529 --> 00:15:27,490 que estoy en, que ahora de repente 361 00:15:27,490 --> 00:15:28,429 cambio a MySQL 362 00:15:28,429 --> 00:15:31,429 cambio las clases de implementación 363 00:15:31,429 --> 00:15:33,610 las cambio unas por las otras, es cambiar las clases 364 00:15:33,610 --> 00:15:35,769 que implementan, en lugar de 365 00:15:35,769 --> 00:15:37,309 coger estas clases que implementan 366 00:15:37,309 --> 00:15:39,549 estas a la basura y pongo las otras 367 00:15:39,549 --> 00:15:41,509 clases, que estas son, que me las da 368 00:15:41,509 --> 00:15:44,070 el fabricante. Me dice, ¿estas son las clases de implementación? 369 00:15:44,710 --> 00:15:45,610 Me la va a dar un hard, claro. 370 00:15:46,149 --> 00:15:47,590 Estas son mis clases de implementación. 371 00:15:48,149 --> 00:15:49,309 Estas son mis clases de implementación. 372 00:15:49,490 --> 00:15:51,389 Tú decides qué clases de implementación 373 00:15:51,389 --> 00:15:53,610 colocas cada vez, qué clases de implementación. 374 00:15:54,149 --> 00:15:55,629 Pero tu código, tu app, 375 00:15:55,809 --> 00:15:57,690 tu aplicación, no se 376 00:15:57,690 --> 00:15:59,629 toca, porque tu aplicación está llamando 377 00:15:59,629 --> 00:16:00,750 a los métodos de la app. 378 00:16:01,350 --> 00:16:02,990 Y esos son iguales para todas. 379 00:16:03,470 --> 00:16:04,669 Son iguales para todas. 380 00:16:07,049 --> 00:16:08,470 Pues esta es la arquitectura 381 00:16:08,470 --> 00:16:10,429 de diseño 382 00:16:11,490 --> 00:16:12,629 de cualquier aplicación Java. 383 00:16:12,629 --> 00:16:14,370 por eso son tan importantes las interfaces 384 00:16:14,370 --> 00:16:16,669 nosotros tenemos que diseñar también nuestras propias 385 00:16:16,669 --> 00:16:18,529 aplicaciones, separando 386 00:16:18,529 --> 00:16:21,149 prototipos 387 00:16:21,149 --> 00:16:22,590 lo que es el contrato 388 00:16:22,590 --> 00:16:24,149 lo que queremos hacer, separándolo de 389 00:16:24,149 --> 00:16:26,730 implementación, para que la implementación se cambie 390 00:16:26,730 --> 00:16:28,529 cuando nos dé la gana, pero 391 00:16:28,529 --> 00:16:30,409 la forma de llamar a las cosas 392 00:16:30,409 --> 00:16:31,529 sea siempre igual 393 00:16:31,529 --> 00:16:34,929 pues a ese esquema de diseño, a ese patrón de diseño 394 00:16:34,929 --> 00:16:36,710 se adapta a todo el mundo, porque el que no se adapta 395 00:16:36,710 --> 00:16:38,610 pues no va a entrar a formar parte de toda 396 00:16:38,610 --> 00:16:40,669 esa comunidad de desarrollo, pues las bases 397 00:16:40,669 --> 00:16:43,509 de datos se adaptan y lo que nos dan son 398 00:16:43,509 --> 00:16:46,789 las implementaciones de esta API 399 00:16:46,789 --> 00:16:49,610 que es una API universal, estándar y que de hecho 400 00:16:49,610 --> 00:16:51,929 la API la tiene ya el JDK, no tenemos que 401 00:16:51,929 --> 00:16:55,529 sacarla de ningún lado, la API está en el JDK 402 00:16:55,529 --> 00:16:58,549 lo que no está es la implementación, porque la implementación 403 00:16:58,549 --> 00:17:03,740 me la tiene que dar cada uno de ellos. Bueno, pues esta es 404 00:17:03,740 --> 00:17:06,299 la filosofía de acceso a la base 405 00:17:06,299 --> 00:17:09,900 a cualquier base de datos desde la base 406 00:17:09,900 --> 00:17:12,160 y es así y no hay otra 407 00:17:12,160 --> 00:17:14,000 y es así, no hay más 408 00:17:14,000 --> 00:17:15,220 tiene que ser así 409 00:17:15,220 --> 00:17:17,359 ¿vale? tiene que ser así 410 00:17:17,359 --> 00:17:20,279 luego otra cosa es que vayamos poniendo capas por encima 411 00:17:20,279 --> 00:17:21,920 como iremos viendo el año que viene 412 00:17:21,920 --> 00:17:24,059 nosotros, ellos no, pues 413 00:17:24,059 --> 00:17:25,880 vamos poniendo capas por encima, ahora primero ponemos 414 00:17:25,880 --> 00:17:28,000 uno de rema, ahora ponemos sprint, ahora ponemos no sé qué 415 00:17:28,000 --> 00:17:29,880 para ocultar un poquito esta 416 00:17:29,880 --> 00:17:32,160 complejidad, pero lo que hay debajo 417 00:17:32,160 --> 00:17:33,480 es esto 418 00:17:33,480 --> 00:17:34,859 siempre esto 419 00:17:34,859 --> 00:17:38,259 ¿vale? pues entonces 420 00:17:38,259 --> 00:17:39,940 ¿qué es lo que vamos a hacer nosotros? 421 00:17:41,099 --> 00:17:41,539 pues 422 00:17:41,539 --> 00:17:45,279 primero 423 00:17:45,279 --> 00:17:47,680 instalar, que yo creo que salgo Jimmy 424 00:17:47,680 --> 00:17:49,920 y nadie la tendrá, imagino, en sus ordenadores 425 00:17:49,920 --> 00:17:51,819 o instalar esta base 426 00:17:51,819 --> 00:17:53,759 de datos para hacer las primeras pruebas 427 00:17:53,759 --> 00:17:55,859 instalar MySQL 428 00:17:55,859 --> 00:17:58,019 la recordamos de donde la podéis instalar 429 00:17:58,019 --> 00:17:59,799 y luego ya hacer 430 00:17:59,799 --> 00:18:01,519 una primera aplicación que use 431 00:18:01,519 --> 00:18:04,039 esa API e incorpore 432 00:18:04,039 --> 00:18:05,480 la implementación de MySQL 433 00:18:05,480 --> 00:18:07,480 MySQL ¿por qué? 434 00:18:07,599 --> 00:18:09,220 dijimos, pues porque tiene licencia 435 00:18:09,220 --> 00:18:12,759 gratis, vamos 436 00:18:12,759 --> 00:18:26,180 vale, entonces esto dijimos 437 00:18:26,180 --> 00:18:27,079 que, ah, que esto 438 00:18:27,079 --> 00:18:29,420 está desenchufado, un segundo 439 00:18:29,420 --> 00:18:30,400 si dime 440 00:18:30,400 --> 00:18:36,000 vale, pues venga, a ver 441 00:18:36,000 --> 00:18:44,849 de que vamos a hacer la base de datos 442 00:18:44,849 --> 00:18:45,589 que os gusta 443 00:18:45,589 --> 00:18:50,309 vale, pues ahora ya si que toca 444 00:18:50,309 --> 00:18:51,329 abrir 445 00:18:51,329 --> 00:18:53,670 hacer nuestra aplicación 446 00:18:53,670 --> 00:18:58,799 Ya está 447 00:18:58,799 --> 00:19:01,019 Tu base de datos ya está guardada 448 00:19:01,019 --> 00:20:08,279 No, las daré aquí 449 00:20:08,279 --> 00:20:10,700 Porque es que como algunas tienen recuperación 450 00:20:10,700 --> 00:20:11,579 Otra no, otra 451 00:20:11,579 --> 00:20:14,000 Es más 452 00:20:14,000 --> 00:20:16,119 Si fuera una nota, nota del examen 453 00:20:16,119 --> 00:20:17,400 Pues sí, pero es que 454 00:20:17,400 --> 00:20:20,200 Para algunos será 455 00:20:20,200 --> 00:20:22,700 Nota de, en uno estará recuperada 456 00:20:22,700 --> 00:20:23,240 En otro no 457 00:20:23,240 --> 00:20:26,440 Pues hala 458 00:20:26,440 --> 00:20:28,059 Aquí tenemos nuestro 459 00:20:28,059 --> 00:20:32,579 ha pasado un humano 460 00:20:32,579 --> 00:20:34,720 bueno 461 00:20:34,720 --> 00:20:36,319 creemos que es humano 462 00:20:36,319 --> 00:20:39,740 tal y como están las cosas 463 00:20:39,740 --> 00:20:43,539 vale 464 00:20:43,539 --> 00:20:44,279 pues venga 465 00:20:44,279 --> 00:20:46,779 vamos a ser unos lanzados 466 00:20:46,779 --> 00:20:49,259 porque nosotros ya hacemos las cosas bien 467 00:20:49,259 --> 00:20:50,400 no somos 468 00:20:50,400 --> 00:20:52,480 y 469 00:20:52,480 --> 00:20:53,740 que ocurre 470 00:20:53,740 --> 00:20:56,819 que nuestro proyecto 471 00:20:56,819 --> 00:20:58,240 ahora sí que sí 472 00:20:58,240 --> 00:21:00,119 va a necesitar 473 00:21:00,119 --> 00:21:02,980 dependencias, lo que es lo mismo 474 00:21:02,980 --> 00:21:04,740 depende de librerías externas 475 00:21:04,740 --> 00:21:06,880 ¿por qué? porque ya hemos dicho que 476 00:21:06,880 --> 00:21:08,339 la implementación de la API 477 00:21:08,339 --> 00:21:11,480 no la tiene el JDK 478 00:21:11,480 --> 00:21:13,440 lógicamente, la implementación de la API 479 00:21:13,440 --> 00:21:15,059 me la da Oracle, si es que trabajo 480 00:21:15,059 --> 00:21:16,940 con Oracle, me la da MySQL, si es que trabajo 481 00:21:16,940 --> 00:21:19,059 con MySQL, entonces la implementación 482 00:21:19,059 --> 00:21:21,019 me la da quien sea, no está en el 483 00:21:21,019 --> 00:21:23,059 JDK, eso significa que 484 00:21:23,059 --> 00:21:24,920 nuestra aplicación tiene dependencias, depende 485 00:21:24,920 --> 00:21:27,319 librerías externas, entonces podemos ser 486 00:21:27,319 --> 00:21:28,660 cutres o no ser cutres 487 00:21:28,660 --> 00:21:31,119 entonces si queremos ser cutres, pues me hago mi proyecto 488 00:21:31,119 --> 00:21:33,359 Java, me busco el JAR y me lo descargo 489 00:21:33,359 --> 00:21:34,599 que tampoco es tan complicado 490 00:21:34,599 --> 00:21:36,960 lo incorporo al 491 00:21:36,960 --> 00:21:38,440 classpath y todo eso 492 00:21:38,440 --> 00:21:40,960 pero si cambia la versión 493 00:21:40,960 --> 00:21:43,000 del JAR, si cambia cualquier cosa 494 00:21:43,000 --> 00:21:45,039 pues me tengo que bajar el nuevo 495 00:21:45,039 --> 00:21:47,160 JAR, sustituirlo por otro, es un poco 496 00:21:47,160 --> 00:21:48,839 cutres, entonces 497 00:21:48,839 --> 00:21:50,839 desde el momento en que una aplicación tiene 498 00:21:50,839 --> 00:21:52,960 dependencias, lo mejor es hacerla con 499 00:21:52,960 --> 00:21:54,720 el gestor de proyectos Maven 500 00:21:54,720 --> 00:21:56,519 o Gradle o el que sea 501 00:21:56,519 --> 00:21:59,220 porque una de las 502 00:21:59,220 --> 00:22:01,519 facilidades 503 00:22:01,519 --> 00:22:03,779 que nos ofrecen los gestores de proyectos 504 00:22:03,779 --> 00:22:05,859 es gestionar de forma sencilla 505 00:22:05,859 --> 00:22:07,359 esas dependencias 506 00:22:07,359 --> 00:22:09,539 entre muchas otras cosas 507 00:22:09,539 --> 00:22:11,440 pues entonces nos hacemos 508 00:22:11,440 --> 00:22:12,440 un proyecto Maven 509 00:22:12,440 --> 00:22:17,380 desde el momento en que decidimos que mi aplicación 510 00:22:17,380 --> 00:22:19,619 tiene dependencias externas, me pongo en chip 511 00:22:19,619 --> 00:22:21,460 de uy, esto Maven 512 00:22:21,460 --> 00:22:23,279 me lo va a hacer guay 513 00:22:23,279 --> 00:22:24,599 pues venga 514 00:22:24,599 --> 00:22:27,880 ¿Qué tipo de proyecto Maven? 515 00:22:28,180 --> 00:22:32,619 Maven es como si fuera una especie de intermediario 516 00:22:32,619 --> 00:22:35,500 entre nosotros y el proyecto Java. 517 00:22:36,720 --> 00:22:40,019 Es un intermediario, entonces desde el momento en que hacemos un proyecto con Maven 518 00:22:40,019 --> 00:22:44,680 nosotros ya configuramos Maven, le mandamos cosas a Maven 519 00:22:44,680 --> 00:22:48,039 le decimos cosas a Maven y Maven ya se encarga de hacer la aplicación 520 00:22:48,039 --> 00:22:50,960 de abajo con esas directrices. 521 00:22:50,960 --> 00:22:54,359 Bueno, pues la primera directriz que nos pide Maven es 522 00:22:54,359 --> 00:22:56,779 ¿Este proyecto es un proyecto random? 523 00:22:57,500 --> 00:22:59,740 ¿O es una cosa muy concreta de tipo 524 00:22:59,740 --> 00:23:03,440 sigue el modelo vista controlador, es un JavaFX 525 00:23:03,440 --> 00:23:06,160 es un servicio 526 00:23:06,160 --> 00:23:09,579 web rest, es una librería de clases 527 00:23:09,579 --> 00:23:11,619 es un proyecto random 528 00:23:11,619 --> 00:23:15,000 no responde a ningún arquetipo concreto 529 00:23:15,000 --> 00:23:18,380 arquetipo para Maven es un tipo de proyecto concreto 530 00:23:18,380 --> 00:23:20,400 pues entonces le decimos, venga tú 531 00:23:20,400 --> 00:23:23,460 un proyecto normalucho y corrientucho 532 00:23:23,460 --> 00:23:24,599 y mayores 533 00:23:24,599 --> 00:23:27,200 ambiciones y expectativas 534 00:23:27,200 --> 00:23:32,460 vale, pues ya está 535 00:23:32,460 --> 00:23:33,599 vamos al siguiente 536 00:23:33,599 --> 00:23:36,039 y ahora ya sí le ponemos 537 00:23:36,039 --> 00:23:38,240 el grupo este 538 00:23:38,240 --> 00:23:39,640 pues recordad 539 00:23:39,640 --> 00:23:42,299 en terminología maven 540 00:23:42,299 --> 00:23:44,099 y si queremos hacer las cosas bien 541 00:23:44,099 --> 00:23:46,160 se supone que yo trabajo 542 00:23:46,160 --> 00:23:48,619 para una empresa que tiene un nombre de dominio reservado 543 00:23:48,619 --> 00:23:50,400 y para identificar 544 00:23:50,400 --> 00:23:52,640 correctamente las aplicaciones de esa empresa 545 00:23:52,640 --> 00:23:56,180 todos los paquetes de todas mis aplicaciones 546 00:23:56,180 --> 00:23:58,099 deberían compartir un prefijo 547 00:23:58,099 --> 00:23:59,799 en la arquitectura de paquetes 548 00:23:59,799 --> 00:24:01,920 deberían compartir un prefijo 549 00:24:01,920 --> 00:24:03,059 que fuera el dominio 550 00:24:03,059 --> 00:24:05,880 pues entonces por eso, aunque uno puede poner 551 00:24:05,880 --> 00:24:07,160 en GroupID lo que le dé la gana 552 00:24:07,160 --> 00:24:09,940 nosotros ponemos pues el dominio 553 00:24:09,940 --> 00:24:11,279 que más se adapte a 554 00:24:11,279 --> 00:24:14,819 por ejemplo así 555 00:24:14,819 --> 00:24:17,599 vamos a poner DAW por respeto 556 00:24:17,599 --> 00:24:18,759 a los invitados 557 00:24:18,759 --> 00:24:20,259 ¿vale? 558 00:24:21,440 --> 00:24:21,720 dime 559 00:24:21,720 --> 00:24:25,619 simple 560 00:24:25,619 --> 00:24:27,619 no, he creado un proyecto maven 561 00:24:27,619 --> 00:24:31,960 no, no, no, eso que he hecho antes 562 00:24:31,960 --> 00:24:34,440 era un working set, eso es como si no existiera 563 00:24:34,440 --> 00:24:35,940 es una cosa que hago yo 564 00:24:35,940 --> 00:24:37,960 para organizar los proyectos 565 00:24:38,779 --> 00:24:39,640 pero eso es del eclipse 566 00:24:39,640 --> 00:24:41,599 no tiene nada que ver con Java, nada, nada 567 00:24:41,599 --> 00:24:49,240 directamente un proyecto maven 568 00:24:49,240 --> 00:24:51,519 con simple, ¿de qué tipo? 569 00:24:51,619 --> 00:24:53,079 gote punta simple y ya está 570 00:24:53,079 --> 00:24:55,299 y ahora ya sí nos piden los datos 571 00:24:55,299 --> 00:24:58,259 Entonces, este es el nombre de mi proyecto 572 00:24:58,259 --> 00:25:01,519 Para Maben, artefacto significa tu proyecto 573 00:25:01,519 --> 00:25:02,880 Pues yo que sé 574 00:25:02,880 --> 00:25:05,079 Como es nuestra base de datos personas 575 00:25:05,079 --> 00:25:08,579 Pues como queremos llamar al proyecto 576 00:25:08,579 --> 00:25:10,460 Gestión personas 577 00:25:10,460 --> 00:25:13,180 Venga, vamos a nuestro proyecto 578 00:25:13,180 --> 00:25:14,640 Nuestro proyecto de gestión personas 579 00:25:14,640 --> 00:25:17,400 Vale, así se llama nuestro proyecto 580 00:25:17,400 --> 00:25:19,200 Artefacto, proyecto son sinónimos 581 00:25:19,200 --> 00:25:21,319 Y esto, ¿qué era? 582 00:25:22,359 --> 00:25:24,920 Nosotros, si empaquetamos bien el proyecto 583 00:25:24,920 --> 00:25:27,339 o lo que es lo mismo, si organizamos las clases 584 00:25:27,339 --> 00:25:28,980 bien en diferentes paquetes, que es la idea 585 00:25:28,980 --> 00:25:31,500 organizar las clases bien en diferentes paquetes 586 00:25:31,500 --> 00:25:33,180 pues esos paquetes 587 00:25:33,180 --> 00:25:35,059 ya sabes que tienen una estructura jerárquica 588 00:25:35,059 --> 00:25:36,700 normalmente 589 00:25:36,700 --> 00:25:39,460 y deberían 590 00:25:39,460 --> 00:25:41,200 tener una raíz común 591 00:25:41,200 --> 00:25:43,779 por un tema de uniformidad 592 00:25:43,779 --> 00:25:45,539 y esa raíz común 593 00:25:45,539 --> 00:25:47,299 normalmente se sobreentiende 594 00:25:47,299 --> 00:25:49,180 que todos damos 595 00:25:49,180 --> 00:25:51,200 para esa raíz común el nombre de nuestro dominio 596 00:25:51,200 --> 00:25:52,839 pues bueno 597 00:25:52,839 --> 00:25:55,619 para maven tiene que ser puesto al revés 598 00:25:55,619 --> 00:25:57,859 pues nuestro dominio, trabajamos en una empresa 599 00:25:57,859 --> 00:26:00,019 cuyo dominio reservado 600 00:26:00,019 --> 00:26:01,279 es dandau1.es 601 00:26:01,279 --> 00:26:03,039 pues si mi empresa 602 00:26:03,039 --> 00:26:05,400 en la que yo ofrezco mis aplicaciones 603 00:26:05,400 --> 00:26:06,980 cuando yo suba mis aplicaciones 604 00:26:06,980 --> 00:26:09,700 se suben al dominio dandau1.es 605 00:26:09,700 --> 00:26:11,579 pues a todas mis aplicaciones 606 00:26:11,579 --> 00:26:13,279 maven les diré en el group id 607 00:26:13,279 --> 00:26:15,740 pues esto, que es el dominio pero al revés 608 00:26:15,740 --> 00:26:17,839 repito, esto no es obligatorio 609 00:26:17,839 --> 00:26:20,039 pero es que nada en programación es obligatorio 610 00:26:20,039 --> 00:26:22,039 uno puede hacer una aplicación como le dé la gana 611 00:26:22,039 --> 00:26:24,839 y le va a funcionar igual que otra hecha 612 00:26:24,839 --> 00:26:26,019 siguiendo 613 00:26:26,019 --> 00:26:28,180 pautas más universales 614 00:26:28,180 --> 00:26:30,160 pero claro, la suya 615 00:26:30,160 --> 00:26:32,480 ni Dios la va a entender, arreglarla 616 00:26:32,480 --> 00:26:33,880 a lo mejor va a ser más costoso 617 00:26:33,880 --> 00:26:35,839 si todos nos ponemos de acuerdo 618 00:26:35,839 --> 00:26:38,019 más o menos 619 00:26:38,019 --> 00:26:40,400 en las reglas de diseño 620 00:26:40,400 --> 00:26:41,980 en la forma de hacerlo nos vamos a entender 621 00:26:41,980 --> 00:26:43,119 entre sí 622 00:26:43,119 --> 00:26:46,039 esta es una de las cosas en las que nos ponemos de acuerdo 623 00:26:46,039 --> 00:26:49,940 y ahora ya, nombre y descripción 624 00:26:49,940 --> 00:26:51,779 el que uno le dé la gana, yo suelo poner 625 00:26:51,779 --> 00:26:53,859 siempre el propio nombre 626 00:26:53,859 --> 00:26:55,819 del proyecto, pero por organización 627 00:26:55,819 --> 00:26:56,640 mía, eso ya da un poco. 628 00:26:58,339 --> 00:26:59,180 Pues venga. 629 00:27:00,500 --> 00:27:00,980 Finito. 630 00:27:05,140 --> 00:27:06,980 Finito, ahí se crea nuestro proyecto 631 00:27:06,980 --> 00:27:07,279 Mave. 632 00:27:08,539 --> 00:27:10,960 Y esta es la estructura típica de Mave. 633 00:27:12,019 --> 00:27:13,119 Luego, cuando esto 634 00:27:13,119 --> 00:27:15,500 ya se empaquete 635 00:27:15,500 --> 00:27:17,079 en un jar o en un 636 00:27:17,079 --> 00:27:19,259 guard, donde sea, para distribuirlo, 637 00:27:19,680 --> 00:27:20,980 la arquitectura Mave se ha perdido. 638 00:27:20,980 --> 00:27:22,339 Esto es solo en tiempo de desarrollo. 639 00:27:22,579 --> 00:27:24,259 En tiempo de desarrollo, la arquitectura 640 00:27:24,259 --> 00:27:25,640 es la de maven 641 00:27:25,640 --> 00:27:28,339 luego ya las aplicaciones java cuando se difunden 642 00:27:28,339 --> 00:27:30,500 son un montón de .class sin más 643 00:27:30,500 --> 00:27:32,240 de que ya hacen diferentes paquetes 644 00:27:32,240 --> 00:27:33,740 sin más, vale 645 00:27:33,740 --> 00:27:36,279 pero ahora desarrollar, pues en función 646 00:27:36,279 --> 00:27:37,880 de como desarrolles con maven o no 647 00:27:37,880 --> 00:27:40,000 pues tu arquitectura de clases, de paquetes 648 00:27:40,000 --> 00:27:41,839 de carpetas, perdón, es distinta 649 00:27:41,839 --> 00:27:44,200 vale, aquí el eclipse 650 00:27:44,200 --> 00:27:46,240 este, pues se nos emperra 651 00:27:46,240 --> 00:27:48,579 en ponernos la jre 652 00:27:48,579 --> 00:27:50,460 siempre, cuando hacemos un proyecto maven 653 00:27:50,460 --> 00:27:52,319 se nos emperra en ponerla 654 00:27:52,319 --> 00:27:53,519 al 1.8 655 00:27:53,519 --> 00:27:57,160 Realmente es la JR 656 00:27:57,160 --> 00:27:59,119 Que más se ha usado tradicionalmente 657 00:27:59,119 --> 00:28:00,440 Siempre y se sigue usando 658 00:28:00,440 --> 00:28:03,059 Pero nosotros vamos a 659 00:28:03,059 --> 00:28:05,319 Ponerla al nivel que tengamos en nuestro 660 00:28:05,319 --> 00:28:07,400 Entonces aquí, botón derecho 661 00:28:07,400 --> 00:28:08,559 Properties 662 00:28:08,559 --> 00:28:10,660 La que tengáis vosotros 663 00:28:10,660 --> 00:28:14,640 La que tengáis vosotros instalada 664 00:28:14,640 --> 00:28:16,619 Me da igual que sea 24, 25 665 00:28:16,619 --> 00:28:17,599 La que tengáis 666 00:28:17,599 --> 00:28:20,900 Que si dejarais la 8 667 00:28:20,900 --> 00:28:22,980 Tampoco pasaría nada porque hay pocas 668 00:28:22,980 --> 00:28:25,380 cosas que se hayan hecho después de la 8 críticas 669 00:28:25,380 --> 00:28:27,180 bueno 670 00:28:27,180 --> 00:28:28,220 si todo lo de 671 00:28:28,220 --> 00:28:30,900 módulos y eso 672 00:28:30,900 --> 00:28:32,460 entonces si cambiáis 673 00:28:32,460 --> 00:28:34,420 si cambiáis 674 00:28:34,420 --> 00:28:36,779 la máquina virtual 675 00:28:36,779 --> 00:28:38,799 que va a ejecutar la aplicación, es decir 676 00:28:38,799 --> 00:28:40,240 ahora es una que entiende más cosas 677 00:28:40,240 --> 00:28:42,839 porque eso es lo que cambia respecto a una máquina 678 00:28:42,839 --> 00:28:44,819 virtual 1.8, de 1.9, de 1.10 679 00:28:44,819 --> 00:28:46,680 que cuanta más 680 00:28:46,680 --> 00:28:49,079 actualizada sea la versión, más cosas 681 00:28:49,079 --> 00:28:50,859 nuevas sintácticas entiende 682 00:28:50,859 --> 00:28:52,819 por ejemplo, todo lo 683 00:28:52,819 --> 00:28:54,619 de los módulos, el module path 684 00:28:54,619 --> 00:28:56,519 el module, todo eso 685 00:28:56,519 --> 00:28:58,440 la máquina virtual 1.8 no lo entiende 686 00:28:58,440 --> 00:29:00,339 ¿vale? 687 00:29:00,579 --> 00:29:02,460 y quien dice eso dice otras cosas 688 00:29:02,460 --> 00:29:04,599 entonces si uno cambia 689 00:29:04,599 --> 00:29:06,680 la máquina virtual a una más actualizada 690 00:29:06,680 --> 00:29:08,420 para que entienda nuevas 691 00:29:08,420 --> 00:29:10,759 pequeñas incorporaciones que se han hecho en el código 692 00:29:10,759 --> 00:29:12,279 de Java, pequeñas que son chorradas 693 00:29:12,279 --> 00:29:14,720 pues lo normal es que 694 00:29:14,720 --> 00:29:16,279 cambie el nivel de compilación también 695 00:29:16,279 --> 00:29:18,299 para que se adapte a esta máquina virtual 696 00:29:18,299 --> 00:29:20,779 ¿vale? porque una cosa es 697 00:29:20,779 --> 00:29:22,720 el nivel 698 00:29:22,720 --> 00:29:24,420 de compilación con el que Eclipse 699 00:29:24,420 --> 00:29:26,180 va a compilar tu código 700 00:29:26,180 --> 00:29:28,259 Eclipse ya sabéis que está compilando el código 701 00:29:28,259 --> 00:29:30,539 automáticamente, lógicamente, lo está compilando 702 00:29:30,539 --> 00:29:32,319 automáticamente y en cuanto saca un error 703 00:29:32,319 --> 00:29:34,720 de compilación, te lo marca aquí en rojito 704 00:29:34,720 --> 00:29:36,480 te marca el error de compilación 705 00:29:36,480 --> 00:29:38,119 vale, pues 706 00:29:38,119 --> 00:29:39,779 hay muchos 707 00:29:39,779 --> 00:29:42,220 niveles diferentes de compilador 708 00:29:42,220 --> 00:29:44,500 si tú compilas con el nivel 709 00:29:44,500 --> 00:29:46,279 1.8, él 710 00:29:46,279 --> 00:29:48,140 solo te tiene en cuenta 711 00:29:48,140 --> 00:29:50,319 la sintaxis que se 712 00:29:50,319 --> 00:29:52,339 admitió hasta el 1.8 713 00:29:52,339 --> 00:29:54,819 si compilas con el 1.10 714 00:29:54,819 --> 00:29:56,720 él solo te tiene en cuenta 715 00:29:56,720 --> 00:29:59,119 la sintaxis que se admitirá hasta 1.10 716 00:29:59,119 --> 00:30:00,299 entonces 717 00:30:00,299 --> 00:30:02,660 pues si vamos a ejecutar con una máquina 718 00:30:02,660 --> 00:30:04,579 25 o 24 o 23 719 00:30:04,579 --> 00:30:06,839 la que sea la vuestra, hombre, vamos a compilar 720 00:30:06,839 --> 00:30:08,099 con uno que sea igual 721 00:30:08,099 --> 00:30:10,079 lógicamente, ¿de qué me sirve 722 00:30:10,079 --> 00:30:13,039 ejecutar con un 25 si luego al compilador 723 00:30:13,039 --> 00:30:14,700 le esfuerzo a que 724 00:30:14,700 --> 00:30:16,500 solo tenga en cuenta del 1.8 hacia atrás 725 00:30:16,500 --> 00:30:19,039 pues ya que vamos a ejecutar con un 25 726 00:30:19,039 --> 00:30:20,819 que lo entiende todo, que el compilador también 727 00:30:20,819 --> 00:30:22,920 lo entienda, una cosa es la máquina 728 00:30:22,920 --> 00:30:24,099 virtual que es la que ejecuta 729 00:30:24,099 --> 00:30:26,920 y otra cosa es el compilador, que es el que 730 00:30:26,920 --> 00:30:28,960 compila, hemos cambiado la máquina 731 00:30:28,960 --> 00:30:30,339 virtual, pero el compilador no 732 00:30:30,339 --> 00:30:32,359 vamos a cambiárselo, y eso 733 00:30:32,359 --> 00:30:34,519 botón derecho en el proyecto 734 00:30:34,519 --> 00:30:36,339 properties 735 00:30:36,339 --> 00:30:40,380 aquí en compiler 736 00:30:40,380 --> 00:30:43,799 pues 737 00:30:43,799 --> 00:30:45,900 Maben me lo estableció al 1.8 738 00:30:45,900 --> 00:30:48,299 vosotros lo ponéis al nivel 739 00:30:48,299 --> 00:30:49,700 de vuestra máquina virtual 740 00:30:49,700 --> 00:30:53,690 al mismo, nunca 741 00:30:53,690 --> 00:30:55,730 superior, porque si lo pusierais superior 742 00:30:55,730 --> 00:30:57,690 la máquina virtual no sería capaz 743 00:30:57,690 --> 00:30:59,549 de entenderse 744 00:30:59,549 --> 00:31:00,829 con ese código 745 00:31:00,829 --> 00:31:03,910 ¿al mismo o inferior? inferior sí 746 00:31:03,910 --> 00:31:07,190 depende del eclipse 747 00:31:07,190 --> 00:31:15,150 ¿superior a la máquina virtual 748 00:31:15,150 --> 00:31:17,369 que tengas? no, pero yo podría haber 749 00:31:17,369 --> 00:31:19,089 puesto la máquina virtual 23 750 00:31:19,089 --> 00:31:21,430 y luego marcar en el nivel 751 00:31:21,430 --> 00:31:23,210 de operación el 25, eso 752 00:31:23,210 --> 00:31:24,329 si me pongo a ejecutar 753 00:31:24,329 --> 00:31:27,529 una combinación en la cual 754 00:31:27,529 --> 00:31:29,130 la máquina virtual tenga 755 00:31:29,130 --> 00:31:30,710 menos nivel que el compilador 756 00:31:30,710 --> 00:31:33,069 cuando ejecutáis os sale unsupported 757 00:31:33,069 --> 00:31:34,890 mayor, minor, version, no sé qué 758 00:31:34,890 --> 00:31:37,490 entonces en cuanto veáis un error de ejecución 759 00:31:37,490 --> 00:31:39,289 unsupported, mayor, minor, version 760 00:31:39,289 --> 00:31:40,369 es, toma 761 00:31:40,369 --> 00:31:43,210 mi máquina virtual es de nivel 762 00:31:43,210 --> 00:31:45,150 más bajo que el compilador, ahí no hace falta 763 00:31:45,150 --> 00:31:46,869 ya perder tiempo ni buscar encha GPT 764 00:31:46,869 --> 00:31:49,509 en cuanto sale eso, unsupported, version 765 00:31:49,509 --> 00:31:51,410 verificáis 766 00:31:51,410 --> 00:31:52,450 eso y se acabó 767 00:31:52,450 --> 00:31:57,950 bueno, pues ya tenemos, ¿no te acordabas? 768 00:31:58,250 --> 00:31:58,609 que... 769 00:31:58,609 --> 00:32:01,210 ¿qué hace aquí todavía? 770 00:32:01,910 --> 00:32:03,750 Pero si te dije que te cogía las dos horas. 771 00:32:03,930 --> 00:32:05,750 Ah, ya no me acordaba, pero bueno, me da igual.