1 00:00:00,000 --> 00:00:05,679 Revisándolo por si venimos un poco despistados del recreo. 2 00:00:06,620 --> 00:00:06,839 Vale. 3 00:00:07,960 --> 00:00:09,539 Primero, borrar envío. 4 00:00:10,099 --> 00:00:10,740 ¿Borrar por qué? 5 00:00:10,859 --> 00:00:11,880 Por clave primaria. 6 00:00:12,480 --> 00:00:13,560 Por clave primaria. 7 00:00:14,599 --> 00:00:14,839 ¿Vale? 8 00:00:15,140 --> 00:00:17,260 En este caso, la clave primaria es el código. 9 00:00:18,679 --> 00:00:18,839 ¿Vale? 10 00:00:20,140 --> 00:00:23,739 En este caso, no tiene por qué devolver nada. 11 00:00:23,899 --> 00:00:29,160 Porque el efecto del borrado se queda, lógicamente, en el propio array. 12 00:00:29,160 --> 00:00:31,059 no tiene por qué devolver nada 13 00:00:31,059 --> 00:00:33,859 pero es una pena 14 00:00:33,859 --> 00:00:35,820 desperdiciar ese valor 15 00:00:35,820 --> 00:00:37,259 de retorno poniéndolo en void 16 00:00:37,259 --> 00:00:39,719 cuando realmente sería 17 00:00:39,719 --> 00:00:41,439 interesante que aquel que llama 18 00:00:41,439 --> 00:00:44,179 deleteEnvío tenga alguna realimentación 19 00:00:44,179 --> 00:00:45,880 entonces los métodos 20 00:00:45,880 --> 00:00:48,240 de alguna manera tienen que dar alguna realimentación 21 00:00:48,240 --> 00:00:50,039 sobre si lo que están haciendo está bien 22 00:00:50,039 --> 00:00:51,679 lo han hecho bien, lo han podido hacer 23 00:00:51,679 --> 00:00:52,859 mal o no 24 00:00:52,859 --> 00:00:55,500 entonces aquí la forma más cómoda 25 00:00:55,500 --> 00:00:57,640 de realimentar sobre si 26 00:00:57,640 --> 00:00:59,560 realmente encontraste el envío 27 00:00:59,560 --> 00:01:01,679 y lo borraste, o si no lo encontraste 28 00:01:01,679 --> 00:01:03,679 y pasó algo raro, la mejor 29 00:01:03,679 --> 00:01:05,879 manera de realimentar es devolviendo 30 00:01:05,879 --> 00:01:07,519 un boolean, ¿vale? 31 00:01:08,180 --> 00:01:09,659 Y es, de hecho, la manera 32 00:01:09,659 --> 00:01:11,719 habitual. O también se 33 00:01:11,719 --> 00:01:13,719 podría devolver un int, donde 34 00:01:13,719 --> 00:01:15,519 el int sea el número de 35 00:01:15,519 --> 00:01:17,480 elementos borrados. 36 00:01:18,140 --> 00:01:19,579 Uno, si has borrado alguno, 37 00:01:19,700 --> 00:01:21,700 cero si ninguno. Por ejemplo, 38 00:01:21,780 --> 00:01:23,920 hay muchas formas estándar, entre comillas, 39 00:01:24,519 --> 00:01:25,819 de que un método avise 40 00:01:25,819 --> 00:01:28,140 si lo que tú le has pedido hacer 41 00:01:28,140 --> 00:01:30,219 lo ha podido completar correctamente o no 42 00:01:30,219 --> 00:01:31,719 hay muchas formas estándar 43 00:01:31,719 --> 00:01:34,379 una siempre es devolver un boolean 44 00:01:34,379 --> 00:01:36,859 true si pude hacer lo que me has pedido 45 00:01:36,859 --> 00:01:39,280 false si no lo he podido hacer 46 00:01:39,280 --> 00:01:43,680 hay veces que no vamos a poder 47 00:01:43,680 --> 00:01:45,180 realimentar al usuario 48 00:01:45,180 --> 00:01:46,859 sobre si lo que el emo 49 00:01:46,859 --> 00:01:49,420 nos ha pedido se ha hecho bien o mal 50 00:01:49,420 --> 00:01:50,519 con el boolean 51 00:01:50,519 --> 00:01:51,739 hay veces que no vamos a poder 52 00:01:51,739 --> 00:01:53,700 porque esto ya tiene un uso 53 00:01:53,700 --> 00:02:12,780 Por ejemplo, el método de recuperar, este, el valor de retorno, ya tiene una función, que es cargarse con el envío cuyo código hemos pasado. 54 00:02:13,360 --> 00:02:25,000 Entonces, aquí, lógicamente, no podemos avisar con un Boolean true o false si el envío se encontró o no. Pero, bueno, podemos avisar de otra manera, porque si el envío no se encontró, entonces es null. 55 00:02:25,139 --> 00:02:44,879 ¿Vale? De alguna manera tenemos que realimentar siempre al que nos llamó sobre si lo que hacemos está correctamente hecho o no se pudo hacer por algo. ¿Vale? Habrá veces que tengamos que hacerlo de otra manera, que será con una excepción cuando veamos excepciones. 56 00:02:44,879 --> 00:02:46,479 pero en las situaciones 57 00:02:46,479 --> 00:02:48,719 en las que nos hemos planteado a él 58 00:02:48,719 --> 00:02:54,139 ahora, pues aquí 59 00:02:54,139 --> 00:02:56,060 por ejemplo, entonces cuando uno hace estos 60 00:02:56,060 --> 00:02:57,939 métodos para que el universo 61 00:02:57,939 --> 00:03:00,120 entero les use, porque esto 62 00:03:00,120 --> 00:03:02,159 es un repositorio, un array 63 00:03:02,159 --> 00:03:04,080 con envíos y métodos para 64 00:03:04,080 --> 00:03:05,120 acceder a esos envíos 65 00:03:05,120 --> 00:03:08,020 esto es una clase que está ahí para que 66 00:03:08,020 --> 00:03:10,479 el universo entero la use, independientemente 67 00:03:10,479 --> 00:03:11,960 si es gestión de envíos de 68 00:03:11,960 --> 00:03:13,840 una empresa o de otra 69 00:03:13,840 --> 00:03:15,900 o de otra, ¿vale? 70 00:03:16,759 --> 00:03:18,039 Entonces son métodos como 71 00:03:18,039 --> 00:03:20,319 muy genéricos, tú encuentras 72 00:03:20,319 --> 00:03:21,780 guardas, actualizas 73 00:03:21,780 --> 00:03:23,979 entonces como son para un universo entero 74 00:03:23,979 --> 00:03:25,919 lo ideal es que 75 00:03:25,919 --> 00:03:27,259 los documentemos un poquito 76 00:03:27,259 --> 00:03:30,159 de documentación 77 00:03:30,159 --> 00:03:32,000 JavaDoc todavía no habéis visto en entornos de 78 00:03:32,000 --> 00:03:32,439 desarrollo 79 00:03:32,439 --> 00:03:35,520 bueno, es una cosa muy sencilla 80 00:03:35,520 --> 00:03:38,000 nuestro código, sobre todo si es 81 00:03:38,000 --> 00:03:39,479 un código que ofrecemos, claro 82 00:03:39,479 --> 00:03:40,939 debería estar documentado 83 00:03:40,939 --> 00:03:44,080 entonces esta clase, repito, es una clase 84 00:03:44,080 --> 00:03:45,979 ofrecida al universo 85 00:03:45,979 --> 00:03:47,960 que quiera gestionar envíos 86 00:03:47,960 --> 00:03:49,620 me da igual 87 00:03:49,620 --> 00:03:52,419 lo que quiera hacer, porque es muy genérica 88 00:03:52,419 --> 00:03:54,379 mi cajita de envío para guardar 89 00:03:54,379 --> 00:03:56,199 sacar, tú luego haces con ellos lo que quieras 90 00:03:56,199 --> 00:03:58,319 entonces bueno, lo normal es que 91 00:03:58,319 --> 00:04:00,580 uno documente los métodos 92 00:04:00,580 --> 00:04:01,780 para explicar lo que hacen 93 00:04:01,780 --> 00:04:04,280 entonces los comentarios 94 00:04:04,280 --> 00:04:06,620 ya sabéis que en general los comentarios 95 00:04:06,620 --> 00:04:08,319 son con la doble barra 96 00:04:08,319 --> 00:04:10,300 o también es un comentario 97 00:04:10,300 --> 00:04:11,300 algo que empieza así 98 00:04:11,300 --> 00:04:13,159 y termina así 99 00:04:13,159 --> 00:04:15,680 sea en una línea o en varias 100 00:04:15,680 --> 00:04:23,920 si es un comentario de muchas líneas 101 00:04:23,920 --> 00:04:25,980 pues lo podemos empezar así y acabarlo así 102 00:04:25,980 --> 00:04:29,800 si es un comentario de una sola línea hasta el final pues así 103 00:04:29,800 --> 00:04:32,019 pero este estilo de comentarios 104 00:04:32,019 --> 00:04:36,000 es un estilo de comentarios pensado más para el que está escribiendo 105 00:04:36,000 --> 00:04:37,819 el código para que él mismo se aclare 106 00:04:37,819 --> 00:04:41,019 está pensado más un poquito para eso, es estilo de comentarios 107 00:04:41,019 --> 00:04:44,819 luego hay otro estilo de comentarios que está pensado 108 00:04:44,819 --> 00:04:47,500 para generar una documentación estándar 109 00:04:47,500 --> 00:04:50,220 que son los comentarios 110 00:04:50,220 --> 00:04:52,139 javadoc, que cuando hicimos 111 00:04:52,139 --> 00:04:54,199 lo del jar y todo eso, ya lo dijimos 112 00:04:54,199 --> 00:04:56,180 mirad ahora, me aparece 113 00:04:56,180 --> 00:04:57,379 aquí la ayuda, ¿os acordáis? 114 00:04:58,500 --> 00:05:00,180 bueno, pues entonces, si yo hago 115 00:05:00,180 --> 00:05:02,240 estos comentarios javadoc en el método 116 00:05:02,240 --> 00:05:03,699 pues aquí pondría 117 00:05:03,699 --> 00:05:05,720 código, el código de envío 118 00:05:05,720 --> 00:05:12,350 retun, el envío 119 00:05:12,350 --> 00:05:13,870 y aquí pondríamos 120 00:05:13,870 --> 00:05:17,459 null, si no 121 00:05:17,459 --> 00:05:18,459 se encontró 122 00:05:18,459 --> 00:05:24,699 vale, luego el null es aquí 123 00:05:24,699 --> 00:05:27,399 la forma de avisar de que este método 124 00:05:27,399 --> 00:05:29,000 no pudo operar correctamente 125 00:05:29,000 --> 00:05:30,279 porque el código no estaba 126 00:05:30,279 --> 00:05:32,160 null sería 127 00:05:32,160 --> 00:05:34,480 la forma de avisar 128 00:05:34,480 --> 00:05:39,170 en insert envío 129 00:05:39,170 --> 00:05:40,930 en insert envío aquí estamos 130 00:05:40,930 --> 00:05:43,029 desperdiciando el valor de retorno 131 00:05:43,029 --> 00:05:45,149 pero que puede 132 00:05:45,149 --> 00:05:45,850 fallar aquí 133 00:05:45,850 --> 00:05:48,949 que puede fallar aquí para que este método 134 00:05:48,949 --> 00:05:51,230 pueda no haber insertado el envío correctamente 135 00:05:51,230 --> 00:05:53,050 hay algo que puede 136 00:05:53,050 --> 00:05:55,050 fallar pues es que no se me ocurre 137 00:05:55,050 --> 00:05:57,889 porque si envíos está vacío, vale, lo incrementará 138 00:05:57,889 --> 00:05:59,050 en uno, no hay problema 139 00:05:59,050 --> 00:06:01,730 y meterá aux, no hay nada que pueda 140 00:06:01,730 --> 00:06:02,550 fallar, entonces 141 00:06:02,550 --> 00:06:05,009 pues aquí 142 00:06:05,009 --> 00:06:07,529 es que vamos a devolver 143 00:06:07,529 --> 00:06:08,329 true siempre 144 00:06:08,329 --> 00:06:11,629 aquí no se me ocurre un algo que si no funciona 145 00:06:11,629 --> 00:06:13,649 if else entonces return false 146 00:06:13,649 --> 00:06:15,750 aquí va a ser 147 00:06:15,750 --> 00:06:17,389 un return true siempre, entonces aquí 148 00:06:17,389 --> 00:06:19,750 vale, este sí, este es 149 00:06:19,750 --> 00:06:21,389 el método con el que estábamos, que era el raro 150 00:06:21,389 --> 00:06:23,769 que lo revisamos 151 00:06:23,769 --> 00:06:25,029 y vale 152 00:06:25,029 --> 00:06:28,689 borrar envío. Como es por clave primaria 153 00:06:28,689 --> 00:06:31,750 vamos a eliminar solo uno como mucho 154 00:06:31,750 --> 00:06:34,529 luego el array destino definitivo 155 00:06:34,529 --> 00:06:38,370 tendrá un tamaño menos. Ahora vamos recorriendo 156 00:06:38,370 --> 00:06:41,329 el original. Copiamos todos aquellos 157 00:06:41,329 --> 00:06:44,310 cuyo código sea distinto y avanzamos en el array 158 00:06:44,310 --> 00:06:48,470 destino. Cuando encontremos el código 159 00:06:48,470 --> 00:06:50,529 a eliminar, avisamos 160 00:06:50,529 --> 00:06:54,790 y salimos del bucle cuando hayamos terminado de copiar 161 00:06:54,790 --> 00:06:56,790 el array destino. Cuando ya hemos 162 00:06:56,790 --> 00:06:58,750 terminado de copiar el array destino, salimos del 163 00:06:58,750 --> 00:06:59,029 bucle. 164 00:07:00,230 --> 00:07:02,189 Y ahora ya en este único for 165 00:07:02,189 --> 00:07:04,290 tenemos toda la información que necesitamos. 166 00:07:05,310 --> 00:07:05,750 Tenemos 167 00:07:05,750 --> 00:07:08,490 la información sobre si hemos 168 00:07:08,490 --> 00:07:09,930 encontrado el código o no. 169 00:07:10,790 --> 00:07:12,850 Si lo hemos encontrado, sustituimos 170 00:07:12,850 --> 00:07:14,569 el array antiguo por el nuevo. 171 00:07:15,709 --> 00:07:16,810 Y si no lo 172 00:07:16,810 --> 00:07:19,029 hemos encontrado, puede ser que sea el último. 173 00:07:20,410 --> 00:07:20,930 Pues si es 174 00:07:20,930 --> 00:07:21,470 el último, 175 00:07:21,470 --> 00:07:23,189 entonces 176 00:07:23,189 --> 00:07:25,269 también sustituimos 177 00:07:25,269 --> 00:07:27,449 el viejo por el nuevo 178 00:07:27,449 --> 00:07:32,100 y 179 00:07:32,100 --> 00:07:37,579 y cambiamos 180 00:07:37,579 --> 00:07:38,420 encontrado a true 181 00:07:38,420 --> 00:07:40,740 y ya está, y si no 182 00:07:40,740 --> 00:07:42,899 pues no tenemos que sustituir nada 183 00:07:42,899 --> 00:07:45,660 envío se queda como estaba, no hay que cambiar nada 184 00:07:45,660 --> 00:07:46,839 envío se queda como estaba 185 00:07:46,839 --> 00:07:48,420 y devolvemos esto 186 00:07:48,420 --> 00:07:51,339 que sirve como valor de retorno para que avise 187 00:07:51,339 --> 00:07:53,220 este método sobre si lo pudo borrar o no 188 00:07:53,220 --> 00:07:57,029 vale 189 00:07:57,029 --> 00:08:33,409 Y ya el último método que nos faltaría del CRUD sería el actualizar, que aquí también tendría sentido devolver un boolean para ver si el envío a actualizar existe o no existe, porque si no existe entonces no lo puedo actualizar y aviso con falso que no he podido actualizarlo. 190 00:08:33,409 --> 00:08:35,830 ubdate 191 00:08:35,830 --> 00:08:37,990 envío, y aquí 192 00:08:37,990 --> 00:08:40,129 sí que le pasamos 193 00:08:40,129 --> 00:08:41,649 un envío enterito 194 00:08:41,649 --> 00:08:43,970 no solo un código como aquí, en delete 195 00:08:43,970 --> 00:08:47,470 aquí le pasamos un envío entero 196 00:08:47,470 --> 00:08:49,690 porque dentro de este objeto estará 197 00:08:49,690 --> 00:08:51,850 el código del envío, eliminar 198 00:08:51,850 --> 00:08:53,350 con sus nuevos datos 199 00:08:53,350 --> 00:08:57,120 la clave primaria no se cambia, claro 200 00:08:57,120 --> 00:08:59,220 la clave primaria de un elemento 201 00:08:59,220 --> 00:09:00,259 no se debe cambiar nunca 202 00:09:00,259 --> 00:09:03,179 entonces yo aquí pasaré 203 00:09:03,179 --> 00:09:04,000 un objeto envío 204 00:09:04,000 --> 00:09:05,820 con la clave 205 00:09:05,820 --> 00:09:08,879 del objeto a modificar 206 00:09:08,879 --> 00:09:10,220 lo busca en el array 207 00:09:10,220 --> 00:09:11,679 y le pondré estos nuevos datos 208 00:09:11,679 --> 00:09:19,289 pero supuestamente ahí el código sería el mismo 209 00:09:19,289 --> 00:09:21,049 claro, el código sería el mismo 210 00:09:21,049 --> 00:09:22,669 lo que cambia es el resto de los datos 211 00:09:22,669 --> 00:09:24,509 entonces este método 212 00:09:24,509 --> 00:09:26,909 sería prácticamente 213 00:09:26,909 --> 00:09:27,850 igual que este 214 00:09:27,850 --> 00:09:29,909 lo que pasa es que 215 00:09:29,909 --> 00:09:32,529 en lugar de no copiar 216 00:09:32,529 --> 00:09:34,870 cuando el código es el mismo 217 00:09:34,870 --> 00:09:36,669 lo que hacemos es copiarlo modificado 218 00:09:36,669 --> 00:09:38,190 entonces este 219 00:09:38,190 --> 00:09:45,159 primera cosa que se queda hoy para que lo hagáis vosotros 220 00:09:45,159 --> 00:09:49,440 lo ponemos aquí, que tiene que hacer este método 221 00:09:49,440 --> 00:09:54,279 localiza en el array 222 00:09:54,279 --> 00:10:03,509 el envío con el código 223 00:10:03,509 --> 00:10:07,370 que tenga el objeto 224 00:10:07,370 --> 00:10:21,320 parámetro, envío, y si 225 00:10:21,320 --> 00:10:28,440 lo encuentra, lo sustituye 226 00:10:28,440 --> 00:10:32,539 por el parámetro pasado 227 00:10:32,539 --> 00:10:36,039 cuyo código no cambiará 228 00:10:36,039 --> 00:10:36,779 lógicamente 229 00:10:36,779 --> 00:10:39,940 si no lo encuentra 230 00:10:39,940 --> 00:10:40,820 devuelve false 231 00:10:40,820 --> 00:10:47,320 vale, pues este método tú tienes 232 00:10:47,320 --> 00:10:48,379 tu array de envíos 233 00:10:48,379 --> 00:10:50,019 con un montón de envíos 234 00:10:50,019 --> 00:10:52,379 ahora le pasamos este parámetro 235 00:10:52,379 --> 00:10:54,379 este parámetro tendrá 236 00:10:54,379 --> 00:10:55,639 su código 237 00:10:55,639 --> 00:11:03,330 este parámetro tiene su código 238 00:11:03,330 --> 00:11:06,730 y el resto de los datos que sean. 239 00:11:07,850 --> 00:11:10,450 Entonces, tendrá que localizar en el array 240 00:11:10,450 --> 00:11:15,070 el objeto cuyo código sea este. 241 00:11:15,970 --> 00:11:18,889 Esta es la clave primaria que sirve para búsquedas, para todo. 242 00:11:19,610 --> 00:11:20,629 Imagínate que es este de aquí. 243 00:11:21,190 --> 00:11:22,210 Pues cuando lo ha encontrado, 244 00:11:23,389 --> 00:11:26,210 sustituye este objeto del array 245 00:11:26,210 --> 00:11:28,230 por este enterito que le acabas de pasar. 246 00:11:28,809 --> 00:11:31,330 Que el código no habrá cambiado, el código será el mismo. 247 00:11:31,330 --> 00:11:33,450 ¿vale? porque lo que no podemos 248 00:11:33,450 --> 00:11:35,389 cambiar para que esto no pierda 249 00:11:35,389 --> 00:11:37,350 el sentido, esto es como en las bases de datos 250 00:11:37,350 --> 00:11:39,389 igual, tú no te pones a cambiar las claves 251 00:11:39,389 --> 00:11:40,450 primarias de las cosas 252 00:11:40,450 --> 00:11:43,169 eso nunca, eso lo has insertado 253 00:11:43,169 --> 00:11:45,669 con una clave primaria, eso ya lo identifica 254 00:11:45,669 --> 00:11:47,370 y ya puedes cambiar sus datos 255 00:11:47,370 --> 00:11:49,590 sus valores, el resto de campos, pero la clave primaria 256 00:11:49,590 --> 00:11:51,090 no, pues aquí igual 257 00:11:51,090 --> 00:11:53,389 localizas aquel registro 258 00:11:53,389 --> 00:11:55,350 aquel envío 259 00:11:55,350 --> 00:11:57,690 cuyo código 260 00:11:57,690 --> 00:11:59,350 es este de aquí, cuando lo has 261 00:11:59,350 --> 00:12:01,490 encontrado, pum, este sustituye 262 00:12:01,490 --> 00:12:02,490 a este, y el código 263 00:12:02,490 --> 00:12:04,029 sigue siendo el mismo 264 00:12:04,029 --> 00:12:09,200 pues este haría el típico UDATE de un CRUD 265 00:12:09,200 --> 00:12:10,159 normal y corriente 266 00:12:10,159 --> 00:12:13,379 ¿y este famoso CRUD no te lo hace el show? 267 00:12:14,080 --> 00:12:14,480 ¿perdón? 268 00:12:14,659 --> 00:12:15,200 ¿te lo hace el show? 269 00:12:16,200 --> 00:12:17,179 ¿si te lo hace qué? 270 00:12:18,600 --> 00:12:20,500 no, no, no 271 00:12:20,500 --> 00:12:23,340 no, hombre, no, porque es que 272 00:12:23,340 --> 00:12:23,779 no 273 00:12:23,779 --> 00:12:26,559 ¿o si te lo hace un número CRUD? 274 00:12:26,980 --> 00:12:29,600 no, no, no, lo que retú un false 275 00:12:29,600 --> 00:12:30,799 vale 276 00:12:30,799 --> 00:12:32,480 no, lo que no te quiero decir 277 00:12:32,480 --> 00:12:33,940 porque es demasiado lío, es que 278 00:12:33,940 --> 00:12:36,659 todo esto está sujeto a estándares 279 00:12:36,659 --> 00:12:38,500 a frameworks, a cosas, entonces todo esto 280 00:12:38,500 --> 00:12:40,659 lo que pasa es que ya, todo esto es del año 281 00:12:40,659 --> 00:12:42,860 que viene, hay frameworks 282 00:12:42,860 --> 00:12:44,659 que te generan 283 00:12:44,659 --> 00:12:46,019 los CRUDs de unos modelos 284 00:12:46,019 --> 00:12:48,679 de un modelo de datos específico, pues como Spring, por ejemplo 285 00:12:48,679 --> 00:12:50,759 pero esas cosas 286 00:12:50,759 --> 00:12:51,799 son complicadas, porque 287 00:12:51,799 --> 00:12:54,460 tienes que conectarlo con la base de datos, gestionar 288 00:12:54,460 --> 00:12:56,139 las transacciones, o sea, no es 289 00:12:56,139 --> 00:12:59,840 no es tan fácil como que un entorno 290 00:12:59,840 --> 00:13:01,940 de desarrollo te lo gestione y ya 291 00:13:01,940 --> 00:13:06,990 Si Dios no lo remedia 292 00:13:06,990 --> 00:13:07,990 Sí 293 00:13:07,990 --> 00:13:14,860 Esperemos que no lo remedie 294 00:13:14,860 --> 00:13:20,340 Pues de algunos sí y otros no 295 00:13:20,340 --> 00:13:21,080 Con suerte 296 00:13:21,080 --> 00:13:23,500 Para mí, para vosotros no sé 297 00:13:23,500 --> 00:13:25,299 Con suerte para mí, de mí no cambiáis 298 00:13:25,299 --> 00:13:32,100 Vale, pues 299 00:13:32,100 --> 00:13:35,919 ¿El qué? 300 00:13:39,039 --> 00:13:40,639 Sí, no, ahora vamos a hacer el ejercicio 301 00:13:40,639 --> 00:13:42,220 O sea, es que no lo hemos ni empezado. 302 00:13:43,840 --> 00:13:45,639 Porque estábamos con, vamos a ver, 303 00:13:45,759 --> 00:13:46,899 ¿dónde guardamos los datos? 304 00:13:47,840 --> 00:13:52,360 Hemos decidido que lo vamos a guardar en esta variable. 305 00:13:53,019 --> 00:13:54,779 Vale, ¿dónde guardamos los datos? 306 00:13:54,960 --> 00:13:55,980 Pues aquí los guardamos. 307 00:13:57,100 --> 00:13:59,019 Vale, y decía yo que esto es un patrón típico, 308 00:13:59,320 --> 00:14:01,779 un patrón típico, aquí está guardado en su clase. 309 00:14:02,759 --> 00:14:05,679 Variable estática, porque solamente hay un array 310 00:14:05,679 --> 00:14:07,679 al que llamaremos con reproducción de envíos, punto envíos. 311 00:14:07,679 --> 00:14:29,120 Y ahora hemos incorporado con cualquier contenedor de datos, tenemos las opciones básicas de consultar, eliminar, borrar y actualizar. Pues cualquier contenedor de datos como este, que este sería un contenedor de datos, tiene sentido que me ofrezca esas funciones básicas. Y luego ya que se apoyen en ellas, mi aplicación concreta que ya haga lo que sea. 312 00:14:29,120 --> 00:14:32,700 Pues hemos hecho esas cuatro funciones básicas 313 00:14:32,700 --> 00:14:34,159 La última 314 00:14:34,159 --> 00:14:35,919 Pendiente de hacer 315 00:14:35,919 --> 00:14:38,519 Se han complicado 316 00:14:38,519 --> 00:14:40,539 De hacer porque no estamos con colecciones 317 00:14:40,539 --> 00:14:42,879 Sino con Arrays, con colecciones sería mucho más sencillo 318 00:14:42,879 --> 00:14:43,120 Claro 319 00:14:43,120 --> 00:14:46,399 Bueno, pues ahora ya que tenemos nuestro contenedor de datos 320 00:14:46,399 --> 00:14:48,120 Ahora ya vamos a hacer 321 00:14:48,120 --> 00:14:49,980 La aplicación en sí 322 00:14:49,980 --> 00:14:52,159 La funcionalidad, vamos a meterla en un paquete 323 00:14:52,159 --> 00:14:54,500 Que se llame lógica, por ejemplo 324 00:14:54,500 --> 00:14:58,139 Lógica o funciones 325 00:14:58,139 --> 00:15:00,320 Venga, funciones, me gusta más 326 00:15:00,320 --> 00:15:02,960 Las funcionalidades 327 00:15:02,960 --> 00:15:03,720 De la aplicación 328 00:15:03,720 --> 00:15:06,539 Vale, pues la aplicación tiene que hacer todo esto 329 00:15:06,539 --> 00:15:08,919 Registrar, listar, coste total, bla bla bla 330 00:15:08,919 --> 00:15:11,080 Pues venga, vamos a hacernos 331 00:15:11,080 --> 00:15:11,980 Nuestra clase 332 00:15:11,980 --> 00:15:16,690 Que se llama central envíos 333 00:15:16,690 --> 00:15:17,389 O algo así era 334 00:15:17,389 --> 00:15:20,610 El main dice que se llama central 335 00:15:20,610 --> 00:15:23,090 O sea, el enunciado dice que se llama central envíos 336 00:15:23,090 --> 00:15:26,830 A ver, que podemos 337 00:15:26,830 --> 00:15:27,830 Llamarle como queramos 338 00:15:27,830 --> 00:15:31,409 no, central envíos 339 00:15:31,409 --> 00:15:33,190 sí, sí, central envíos es la que tiene 340 00:15:33,190 --> 00:15:35,210 estos métodos de aquí, luego estará el main 341 00:15:35,210 --> 00:15:36,889 claro 342 00:15:36,889 --> 00:15:41,610 no, no, no 343 00:15:41,610 --> 00:15:43,470 central envíos tiene las 344 00:15:43,470 --> 00:15:45,570 funcionalidades, repositorio 345 00:15:45,570 --> 00:15:47,549 tiene los datos y lo que se pueden 346 00:15:47,549 --> 00:15:49,250 hacer con los datos, que es 347 00:15:49,250 --> 00:15:51,730 los saco, los meto, los elimino 348 00:15:51,730 --> 00:15:52,929 o los cambio 349 00:15:52,929 --> 00:15:55,429 son los datos, repositorio son 350 00:15:55,429 --> 00:15:57,549 datos, mi caja de datos con lo que puedo 351 00:15:57,549 --> 00:15:58,590 a hacer con los datos. Ahí está. 352 00:15:59,330 --> 00:16:01,590 Ahora, central envíos es lo que 353 00:16:01,590 --> 00:16:03,549 mi aplicación concreta, esta y así 354 00:16:03,549 --> 00:16:05,450 de mi aplicación, seguro, quiere 355 00:16:05,450 --> 00:16:07,090 hacer con esa caja de datos. 356 00:16:07,610 --> 00:16:08,710 Lo que va a hacer. 357 00:16:09,549 --> 00:16:10,730 Y luego ya tendré el main, 358 00:16:11,429 --> 00:16:13,529 que es la capita que llama a los 359 00:16:13,529 --> 00:16:14,809 métodos de central envíos. 360 00:16:17,909 --> 00:16:18,809 No te convence. 361 00:16:21,250 --> 00:16:23,090 ¿Cómo no te va a convencer? ¿Es una separación? 362 00:16:24,009 --> 00:16:24,830 Perfecta. O sea, está 363 00:16:24,830 --> 00:16:26,950 emulando, porque nos ha dado un montón de 364 00:16:26,950 --> 00:16:28,990 información, está emulando un poco 365 00:16:28,990 --> 00:16:31,029 a lo lejos una arquitectura estándar 366 00:16:31,029 --> 00:16:32,870 de una aplicación, la está emulando 367 00:16:32,870 --> 00:16:34,830 todavía muy de lejos, pero al menos 368 00:16:34,830 --> 00:16:37,370 ya empieza a respetar 369 00:16:37,370 --> 00:16:38,929 una pauta básica 370 00:16:38,929 --> 00:16:40,470 que es, vamos a separar datos 371 00:16:40,470 --> 00:16:42,769 de como lo que 372 00:16:42,769 --> 00:16:44,730 hacemos con ellos, datos en 373 00:16:44,730 --> 00:16:46,769 repositorio, la caja con 374 00:16:46,769 --> 00:16:48,750 hombre la opción de hacer cosas con 375 00:16:48,750 --> 00:16:50,730 la caja, las cuatro cosas básicas 376 00:16:50,730 --> 00:16:52,889 punto pelota, caja con su crudo 377 00:16:52,889 --> 00:16:54,950 eso va en datos 378 00:16:54,950 --> 00:16:56,690 en cualquier aplicación 379 00:16:56,690 --> 00:16:58,330 eso va aparte, la caja con su CRUD 380 00:16:58,330 --> 00:17:00,210 y cuando digo CRUD digo las cuatro cosas 381 00:17:00,210 --> 00:17:02,769 y ahora ya, mi aplicación 382 00:17:02,769 --> 00:17:04,970 ya estoy en una aplicación concreta, mi aplicación 383 00:17:04,970 --> 00:17:06,789 registra envíos 384 00:17:06,789 --> 00:17:08,269 localiza el envío de no sé qué 385 00:17:08,269 --> 00:17:10,329 asegura no sé cuántos 386 00:17:10,329 --> 00:17:12,490 esa ya es una aplicación concreta, central envíos 387 00:17:12,490 --> 00:17:14,150 con sus funcionalidades 388 00:17:14,150 --> 00:17:16,430 las hago, que tendrán que llamar 389 00:17:16,430 --> 00:17:18,569 a la parte de datos 390 00:17:18,569 --> 00:17:20,690 y luego yo ya me puedo 391 00:17:20,690 --> 00:17:21,430 hacer un mail 392 00:17:21,430 --> 00:17:23,589 que en el mail ya viene 393 00:17:23,589 --> 00:17:26,589 ya me bajo al 394 00:17:26,589 --> 00:17:28,890 detalle de si voy por consola 395 00:17:28,890 --> 00:17:30,309 voy por interfaz gráfica 396 00:17:30,309 --> 00:17:31,150 esos son los detalles 397 00:17:31,150 --> 00:17:34,130 de la vista del usuario 398 00:17:34,130 --> 00:17:36,349 pero ahora nos vamos con central envíos 399 00:17:36,349 --> 00:17:38,309 que 400 00:17:38,309 --> 00:17:46,539 central envíos 401 00:17:46,539 --> 00:17:52,109 vale, central envíos 402 00:17:52,109 --> 00:17:54,049 que tiene que hacer 403 00:17:54,049 --> 00:17:56,490 mi aplicación 404 00:17:56,490 --> 00:17:58,210 pues 405 00:17:58,210 --> 00:17:59,470 el que la analizó 406 00:17:59,470 --> 00:18:02,069 y se entrevistó con el cliente y lo pensó todo 407 00:18:02,069 --> 00:18:03,210 llegó a la conclusión 408 00:18:03,210 --> 00:18:05,670 de que el tío que iba a estar ahí 409 00:18:05,670 --> 00:18:07,910 haciendo cosas con los envíos 410 00:18:07,910 --> 00:18:10,250 solamente iba a necesitar hacer estas 5 cosas 411 00:18:10,250 --> 00:18:11,869 podríamos incorporar más 412 00:18:11,869 --> 00:18:13,609 o pues el que lo analizó 413 00:18:13,609 --> 00:18:16,390 solamente iba a necesitar hacer estas 5 cosas 414 00:18:16,390 --> 00:18:17,849 pues ya está, vamos a hacer 415 00:18:17,849 --> 00:18:19,890 esas 5 funcionalidades 416 00:18:19,890 --> 00:18:21,269 esos 5 métodos 417 00:18:21,269 --> 00:18:24,109 el lenguaje técnico serían esos 5 servicios 418 00:18:24,109 --> 00:18:26,410 vamos a hacer esos 5 servicios 419 00:18:26,410 --> 00:18:28,490 pues venga 420 00:18:28,490 --> 00:18:30,589 ¿qué os pasa? 421 00:18:31,150 --> 00:18:32,009 yo no entendía 422 00:18:32,009 --> 00:18:39,029 Bueno, a ver, no pasa nada 423 00:18:39,029 --> 00:18:39,990 Si la lógica es la misma 424 00:18:39,990 --> 00:18:43,430 Lo estamos empezando a separar un poquito 425 00:18:43,430 --> 00:18:44,650 Para acostumbrarnos un poco 426 00:18:44,650 --> 00:18:46,450 A la arquitectura más 427 00:18:46,450 --> 00:18:48,289 Venga, pues a ver 428 00:18:48,289 --> 00:18:49,470 Central envíos 429 00:18:49,470 --> 00:18:59,980 Boolean 430 00:18:59,980 --> 00:19:02,119 Registrar 431 00:19:02,119 --> 00:19:03,779 Envío 432 00:19:03,779 --> 00:19:06,019 Vale, registrar envío 433 00:19:06,019 --> 00:19:08,720 Registrar envío 434 00:19:08,720 --> 00:19:13,630 ¿Vale? 435 00:19:14,309 --> 00:19:15,950 Necesita los datos del envío 436 00:19:15,950 --> 00:19:16,609 El tío aquí 437 00:19:16,609 --> 00:19:18,690 Registrar envío 438 00:19:18,690 --> 00:19:22,779 Vamos, por ejemplo 439 00:19:22,779 --> 00:19:27,569 Así 440 00:19:27,569 --> 00:19:35,519 Podemos registrar cualquier tipo de envío 441 00:19:35,519 --> 00:19:39,650 Ahí 442 00:19:39,650 --> 00:19:45,859 Vale, pues ahora ya 443 00:19:45,859 --> 00:19:47,220 Registrar envío 444 00:19:47,220 --> 00:19:48,960 Ahora ya vemos qué le toca hacer 445 00:19:48,960 --> 00:19:50,680 Tendrá que apoyarse 446 00:19:50,680 --> 00:19:52,279 En los métodos 447 00:19:52,279 --> 00:19:54,779 De mi capita de datos, de mi clase de datos 448 00:19:54,779 --> 00:19:56,740 tendrá que apoyarse, a lo mejor es que es directamente 449 00:19:56,740 --> 00:19:58,019 llamarlo, vale 450 00:19:58,019 --> 00:20:01,000 vale, pues registrar envío, pues entonces 451 00:20:01,000 --> 00:20:03,019 registrar envío, escoger este envío 452 00:20:03,019 --> 00:20:04,640 y meterlo en mi array 453 00:20:04,640 --> 00:20:07,079 pues entonces va a ser tan fácil como 454 00:20:07,079 --> 00:20:09,019 repositorio 455 00:20:09,940 --> 00:20:13,140 repositorio envío 456 00:20:13,140 --> 00:20:14,559 se llama, sí 457 00:20:14,559 --> 00:20:17,019 repositorio envíos 458 00:20:17,599 --> 00:20:18,779 punto 459 00:20:18,779 --> 00:20:20,819 insert envío 460 00:20:20,819 --> 00:20:21,940 envío 461 00:20:21,940 --> 00:20:24,519 Y esto directamente 462 00:20:24,519 --> 00:20:25,880 Le doy un return 463 00:20:25,880 --> 00:20:31,839 Porque este ya me devuelve un boolean 464 00:20:31,839 --> 00:20:32,240 ¿Verdad? 465 00:20:38,759 --> 00:20:39,880 Ah, que insert envío 466 00:20:39,880 --> 00:20:41,200 Vale, no 467 00:20:41,200 --> 00:20:44,319 No me devolvía boolean, pues voy directamente 468 00:20:44,319 --> 00:20:48,069 Con lo cual 469 00:20:48,069 --> 00:20:50,210 Aquí no hay return, vale 470 00:20:50,210 --> 00:20:51,569 Ya está 471 00:20:51,569 --> 00:20:54,170 Registrar envío se apoya 472 00:20:54,170 --> 00:20:56,869 En una de las acciones básicas del CRUD 473 00:20:56,869 --> 00:20:58,170 Que es insertar 474 00:20:58,170 --> 00:21:03,059 Vale, podría necesitar 475 00:21:03,059 --> 00:21:04,240 Y aquí ya 476 00:21:04,240 --> 00:21:06,140 por ejemplo, puedo hacer yo cosas 477 00:21:06,140 --> 00:21:06,900 como esta 478 00:21:06,900 --> 00:21:09,640 bueno no, porque esto mejor en el main 479 00:21:09,640 --> 00:21:12,000 porque aquí no quiero comprometerme 480 00:21:12,000 --> 00:21:13,319 todavía a trabajar con consola 481 00:21:13,319 --> 00:21:26,819 este como veis 482 00:21:26,819 --> 00:21:29,299 este no tiene un nombre estándar 483 00:21:29,299 --> 00:21:31,920 yo en este he puesto a propósito 484 00:21:31,920 --> 00:21:33,559 insert, porque son como 485 00:21:33,559 --> 00:21:35,059 los cuatro métodos estándar 486 00:21:35,059 --> 00:21:37,880 insert, delete, update y find 487 00:21:37,880 --> 00:21:39,799 las cuatro 488 00:21:39,799 --> 00:21:41,140 funciones básicas del CRUD 489 00:21:41,140 --> 00:21:42,619 he puesto el nombre estándar 490 00:21:42,619 --> 00:21:44,019 esto ya 491 00:21:44,019 --> 00:21:46,819 es una cosa de mi aplicación 492 00:21:46,819 --> 00:21:49,460 pues yo aquí le doy el nombrecito 493 00:21:49,460 --> 00:21:51,039 ya, registrar envío 494 00:21:51,039 --> 00:21:53,519 si mi aplicación está en castellano 495 00:21:53,519 --> 00:21:55,339 pues en castellano, ya le doy un nombre 496 00:21:55,339 --> 00:21:56,980 no estándar 497 00:21:56,980 --> 00:21:58,779 porque ya es propio de mi aplicación 498 00:21:58,779 --> 00:22:01,119 ya está, pues esta funcionalidad ya está 499 00:22:01,119 --> 00:22:03,200 ¿qué más funcionalidades 500 00:22:03,200 --> 00:22:04,299 tiene mi aplicación? 501 00:22:06,240 --> 00:22:07,500 listar los envíos 502 00:22:07,500 --> 00:22:29,240 vale, aquí yo puedo 503 00:22:29,240 --> 00:22:31,180 recorrer el for directamente y ya está 504 00:22:31,180 --> 00:22:33,319 pero 505 00:22:33,319 --> 00:22:34,500 vamos a hacerlo más realista 506 00:22:34,500 --> 00:22:37,500 normalmente 507 00:22:37,500 --> 00:22:40,799 en las clasecitas 508 00:22:40,799 --> 00:22:42,619 estas, en las cajitas que 509 00:22:42,619 --> 00:22:44,819 tienen los cuatro métodos estándar 510 00:22:44,819 --> 00:22:46,900 se suele incorporar también uno 511 00:22:46,900 --> 00:22:48,680 que es el find all 512 00:22:48,680 --> 00:22:50,700 que es, recupéramelos todos 513 00:22:50,700 --> 00:22:52,819 el que, todos los 514 00:22:52,819 --> 00:22:54,440 envíos, claro, entonces 515 00:22:54,440 --> 00:22:56,779 esta cajita tiene mis cuatro 516 00:22:56,779 --> 00:22:59,019 métodos estándar, recupera por código 517 00:22:59,019 --> 00:23:00,720 inserta elemento 518 00:23:00,720 --> 00:23:02,579 borra y 519 00:23:02,579 --> 00:23:04,059 actualiza, que es el CRUD 520 00:23:04,059 --> 00:23:07,160 pero suelen incorporar también 521 00:23:07,160 --> 00:23:08,700 que si lo incorporara este 522 00:23:08,700 --> 00:23:10,420 me vendría estupendo porque lo llamo desde el otro 523 00:23:10,420 --> 00:23:12,440 suelen incorporar un 524 00:23:12,440 --> 00:23:14,900 find all 525 00:23:14,900 --> 00:23:15,480 ¿vale? 526 00:23:18,779 --> 00:23:20,079 que sería algo así 527 00:23:20,079 --> 00:23:31,380 y así se quedaría 528 00:23:31,380 --> 00:23:38,410 este me devuelve todos los envíos 529 00:23:38,410 --> 00:23:39,430 me los devuelve todos 530 00:23:39,430 --> 00:23:47,170 y ahora yo me apoyo en este para recorrerlo 531 00:23:47,170 --> 00:23:48,849 son detalles 532 00:23:48,849 --> 00:23:50,289 de diseño, en realidad 533 00:23:50,289 --> 00:23:51,910 se puede hacer de mil maneras 534 00:23:51,910 --> 00:23:54,349 Pero es por irnos aproximando un poco más 535 00:23:54,349 --> 00:23:55,670 A lo que vais a ver 536 00:23:55,670 --> 00:23:57,950 Más que nada para que os entendáis 537 00:23:57,950 --> 00:23:59,269 Con vuestro segundo profe 538 00:23:59,269 --> 00:24:00,869 Bueno, primero, que es ChagPT 539 00:24:00,869 --> 00:24:03,910 Entonces, si le vais entendiendo 540 00:24:03,910 --> 00:24:05,470 Pues mejor 541 00:24:05,470 --> 00:24:07,690 Entonces tendremos que adaptarnos a lo estándar 542 00:24:07,690 --> 00:24:09,910 Porque él habla en términos estándar normalmente 543 00:24:09,910 --> 00:24:13,289 Vale, pues nos vamos a 544 00:24:13,289 --> 00:24:17,430 A central envíos 545 00:24:17,430 --> 00:24:18,049 Y ahora 546 00:24:18,049 --> 00:24:21,349 Vamos a listar todos los envíos 547 00:24:21,349 --> 00:24:24,190 Pues venga, para cada envío 548 00:24:24,190 --> 00:24:26,210 E 549 00:24:26,210 --> 00:24:27,710 Donde 550 00:24:27,710 --> 00:24:28,250 En 551 00:24:28,250 --> 00:24:31,069 Repositorio 552 00:24:31,069 --> 00:24:32,809 Envíos 553 00:24:32,809 --> 00:24:34,930 Punto find 554 00:24:34,930 --> 00:24:39,279 ¿No le he puesto static al find all? 555 00:24:41,000 --> 00:24:43,000 No, por eso no me lo ofrecía 556 00:24:43,000 --> 00:24:46,210 Static 557 00:24:46,210 --> 00:24:55,049 ¿Vale? Pues que tenemos que hacer con cada uno de ellos 558 00:24:55,049 --> 00:25:01,309 Vale 559 00:25:01,309 --> 00:25:06,009 Pero cuidado 560 00:25:06,009 --> 00:25:07,250 Ya sabemos que 561 00:25:07,250 --> 00:25:09,349 cada uno de los envíos de la RAI 562 00:25:09,349 --> 00:25:10,650 es de su padre y de su madre. 563 00:25:13,119 --> 00:25:15,519 Aquí, ¿qué se va a ejecutar? 564 00:25:15,859 --> 00:25:16,460 El toStream. 565 00:25:17,180 --> 00:25:18,140 ¿Verdad? El toStream. 566 00:25:18,920 --> 00:25:20,299 Entonces, voy a hacer un toStream. 567 00:25:20,500 --> 00:25:23,140 Voy a asegurarme de que he hecho yo un toStream 568 00:25:23,140 --> 00:25:25,259 específico 569 00:25:25,259 --> 00:25:26,480 para cada clase envío. 570 00:25:27,279 --> 00:25:29,480 Porque si no, va a llamar al toStream 571 00:25:29,480 --> 00:25:31,000 de la superclase. 572 00:25:32,619 --> 00:25:34,079 Y me va a mostrar solo 573 00:25:34,079 --> 00:25:36,940 las propiedades que están en la superclase 574 00:25:36,940 --> 00:25:38,859 en envío. Entonces, vamos a revisar 575 00:25:38,859 --> 00:25:40,619 en nuestra arquitectura si hemos hecho los 576 00:25:40,619 --> 00:25:41,859 toString correctamente. 577 00:25:43,799 --> 00:25:45,119 Yo creo que eso lo hicimos 578 00:25:45,119 --> 00:25:46,039 en envío. 579 00:25:46,779 --> 00:25:48,039 Envío tiene un toString. 580 00:25:48,900 --> 00:25:50,759 Vale. Pero claro, yo quiero 581 00:25:50,759 --> 00:25:52,660 el específico de los demás. 582 00:25:53,640 --> 00:25:54,119 Entonces, 583 00:25:55,000 --> 00:25:56,019 vamos a hacernos 584 00:25:56,019 --> 00:25:58,940 envío 585 00:25:58,940 --> 00:26:00,579 estándar y urgente. 586 00:26:00,839 --> 00:26:02,720 Vamos a hacernos un toString para cada uno 587 00:26:02,720 --> 00:26:04,660 de ellos. Entonces, 588 00:26:04,660 --> 00:26:08,180 Empezamos con envío estándar 589 00:26:08,180 --> 00:26:12,470 Generamos un toString 590 00:26:12,470 --> 00:26:15,910 Con 591 00:26:15,910 --> 00:26:19,170 Los heredados 592 00:26:19,170 --> 00:26:21,849 Que son estado, código, peso 593 00:26:21,849 --> 00:26:23,470 Origen, destino 594 00:26:23,470 --> 00:26:26,170 Y el nuevo, que es días estemados 595 00:26:26,170 --> 00:26:27,910 Un toString con todos esos 596 00:26:27,910 --> 00:26:31,789 Ya tenemos un toString 597 00:26:31,789 --> 00:26:33,710 Para envío estándar 598 00:26:33,710 --> 00:26:38,450 Envío urgente 599 00:26:38,450 --> 00:26:40,130 Que tampoco tenía 600 00:26:40,130 --> 00:26:44,700 Nos hacemos un toString 601 00:26:44,700 --> 00:26:46,440 Con el suyo que recargo 602 00:26:46,440 --> 00:26:47,980 Despliego los heredados 603 00:26:47,980 --> 00:26:50,460 Y con todos los heredados 604 00:26:50,460 --> 00:26:58,670 Y el envío refrigerado 605 00:26:58,670 --> 00:27:00,329 Que tampoco tenía, pues lo mismo 606 00:27:00,329 --> 00:27:13,759 ¡Hala! Pues este método ya 607 00:27:13,759 --> 00:27:15,220 Me va a mostrar 608 00:27:15,220 --> 00:27:17,599 Cada envío particular 609 00:27:17,599 --> 00:27:20,180 ¿Vale? Porque a la hora de 610 00:27:20,180 --> 00:27:21,660 Así funciona el polimorfismo 611 00:27:21,660 --> 00:27:24,039 A la hora de llamar a toString de aquí 612 00:27:24,039 --> 00:27:25,799 Va a llamar al toString 613 00:27:25,799 --> 00:27:27,420 De como se instanciara el objeto 614 00:27:27,420 --> 00:27:29,579 todos están declarados como envío 615 00:27:29,579 --> 00:27:31,779 todos, pero cada uno está instanciado 616 00:27:31,779 --> 00:27:33,900 a su manera, o refrigerado 617 00:27:33,900 --> 00:27:35,640 o urgente o estándar, pues al tu stream 618 00:27:35,640 --> 00:27:37,380 que se vaya a llamar es como esté instanciado 619 00:27:37,380 --> 00:27:39,480 vale, pues ya está 620 00:27:39,480 --> 00:27:40,359 listar envíos 621 00:27:40,359 --> 00:27:43,819 ¿qué otra funcionalidad concreta tiene esta aplicación 622 00:27:43,819 --> 00:27:44,099 mía? 623 00:27:45,160 --> 00:27:47,160 coste total de todos los envíos 624 00:27:47,160 --> 00:27:53,059 el coste era una propiedad 625 00:27:53,059 --> 00:27:54,259 que estaba 626 00:27:54,259 --> 00:27:56,839 en 627 00:27:56,839 --> 00:28:03,220 ¿En dónde está el coste? 628 00:28:03,619 --> 00:28:05,240 Si no hay ninguna variable que sea 629 00:28:05,240 --> 00:28:10,589 Envío, código, peso 630 00:28:10,589 --> 00:28:12,789 Ah, vale, que tenía algún método aquí 631 00:28:12,789 --> 00:28:13,930 Que era calcular coste 632 00:28:13,930 --> 00:28:14,529 Vale, vale 633 00:28:14,529 --> 00:28:17,930 Vale, calcular coste 634 00:28:17,930 --> 00:28:19,329 Pues public 635 00:28:19,329 --> 00:28:21,930 Y calcular coste me devuelve un 636 00:28:22,650 --> 00:28:24,289 Un 637 00:28:24,289 --> 00:28:24,910 Double 638 00:28:24,910 --> 00:28:27,849 Vale, pues entonces el coste es double 639 00:28:27,849 --> 00:28:31,950 coste total 640 00:28:31,950 --> 00:28:40,769 no, no, no, esto es una funcionalidad 641 00:28:40,769 --> 00:28:42,150 específica de mi aplicación 642 00:28:42,150 --> 00:28:44,869 no es una funcionalidad estándar 643 00:28:44,869 --> 00:28:46,789 de acceder a datos, lo estándar de acceder a datos 644 00:28:46,789 --> 00:28:47,869 es el club 645 00:28:47,869 --> 00:28:50,069 cojo, saco, meto o cambio 646 00:28:50,069 --> 00:28:52,450 ya está 647 00:28:52,450 --> 00:28:54,990 esto es una funcionalidad específica que han pedido en esta aplicación 648 00:28:54,990 --> 00:28:57,049 entonces va en la clase específica 649 00:28:57,049 --> 00:28:57,769 de esta aplicación 650 00:28:57,769 --> 00:29:00,789 vale, pues aquí habrá que hacer una suma como siempre 651 00:29:00,789 --> 00:29:06,170 Y ahora ya recorremos 652 00:29:06,170 --> 00:29:07,930 Nuestros envíos 653 00:29:07,930 --> 00:29:13,369 Uy 654 00:29:13,369 --> 00:29:18,339 Por ejemplo así 655 00:29:18,339 --> 00:29:21,500 Envío en 656 00:29:21,500 --> 00:29:31,779 Find all 657 00:29:31,779 --> 00:29:32,440 Vale 658 00:29:32,440 --> 00:29:35,579 Pues que hago 659 00:29:35,579 --> 00:29:36,640 Con cada uno de ellos 660 00:29:36,640 --> 00:29:39,200 Suma más igual 661 00:29:39,200 --> 00:29:40,619 E punto 662 00:29:40,619 --> 00:29:42,740 Calcular coste 663 00:29:42,740 --> 00:29:46,099 Y ahora ya 664 00:29:46,099 --> 00:29:53,039 todos tienen su método calcular coste 665 00:29:53,039 --> 00:29:55,240 todos, cada uno su versión 666 00:29:55,240 --> 00:29:58,680 pero todos lo implementan 667 00:29:58,680 --> 00:30:00,740 porque calcular coste estaba aquí 668 00:30:00,740 --> 00:30:02,259 en la superclase envío 669 00:30:02,259 --> 00:30:05,579 calcular coste está en la superclase 670 00:30:05,579 --> 00:30:06,940 arriba del todo, está aquí 671 00:30:06,940 --> 00:30:10,079 con lo cual el compilador 672 00:30:10,079 --> 00:30:11,759 me deja llamarlo sin problema 673 00:30:11,759 --> 00:30:15,079 pero luego ya cada uno tiene su propia versión 674 00:30:15,079 --> 00:30:17,380 hay que asegurarse de que todos la tienen sobrescrita 675 00:30:17,380 --> 00:30:19,740 envío estándar la tiene sobrescrita 676 00:30:19,740 --> 00:30:21,599 sí, envío urgente 677 00:30:21,599 --> 00:30:22,960 la tiene sobrescrita, sí 678 00:30:22,960 --> 00:30:25,740 y envío refrigerado la tiene sobrescrita 679 00:30:25,740 --> 00:30:28,839 también 680 00:30:28,839 --> 00:30:31,039 luego cada uno 681 00:30:31,039 --> 00:30:32,480 llamará aquí a su versión 682 00:30:32,480 --> 00:30:37,190 ahora, siguiente funcionalidad 683 00:30:37,190 --> 00:30:38,990 específica de mi aplicación 684 00:30:38,990 --> 00:30:41,109 el coste total del 685 00:30:41,109 --> 00:30:42,710 seguro 686 00:30:42,710 --> 00:30:59,319 vale 687 00:30:59,319 --> 00:31:01,220 aquí uno podría decir 688 00:31:01,220 --> 00:31:02,880 vale, pues es una suma igual 689 00:31:02,880 --> 00:31:51,529 Pues entonces hago esto y ahora para cada envío, en todos los envíos, y ahora es cuando yo no puedo hacer directamente suma más igual e.calcular coste del seguro. 690 00:31:51,529 --> 00:32:09,670 No puedo porque calcular coste del seguro no es un método de envío. En envío no está ese método, calcular coste del seguro, solo está este. ¿Por qué? Porque calcular coste del seguro está solamente en los asegurables, solo en los asegurables. 691 00:32:09,670 --> 00:32:10,890 Entonces 692 00:32:10,890 --> 00:32:15,990 ¿Cuáles son los asegurables? 693 00:32:19,740 --> 00:32:21,539 Los asegurables son 694 00:32:21,539 --> 00:32:22,940 El estándar y el 695 00:32:22,940 --> 00:32:26,809 Mastreable 696 00:32:26,809 --> 00:32:28,829 Ah no, perdón 697 00:32:28,829 --> 00:32:31,980 El 698 00:32:31,980 --> 00:32:34,059 El urgente 699 00:32:34,059 --> 00:32:37,059 El urgente y el otro 700 00:32:37,059 --> 00:32:38,119 Y el 701 00:32:38,119 --> 00:32:39,920 Eso 702 00:32:39,920 --> 00:32:43,500 Entonces, aquí podríamos poner 703 00:32:43,500 --> 00:32:46,019 Aquí tendríamos que poner 704 00:32:46,019 --> 00:32:50,579 If e 705 00:32:50,579 --> 00:32:52,240 Instance 706 00:32:52,240 --> 00:32:53,299 Of 707 00:32:53,299 --> 00:32:58,539 Envío urgente 708 00:32:58,539 --> 00:33:01,240 Pues entonces ahora ya sí 709 00:33:01,240 --> 00:33:02,920 Suma más igual 710 00:33:02,920 --> 00:33:05,359 Puedo hacer el casting 711 00:33:05,359 --> 00:33:06,079 Sin miedo 712 00:33:06,079 --> 00:33:09,059 Envío urgente de 713 00:33:09,059 --> 00:33:21,880 Es que no va a estar instanciado como 714 00:33:21,880 --> 00:33:22,500 Asegurable 715 00:33:22,500 --> 00:33:27,880 Pero 716 00:33:27,880 --> 00:33:29,019 No, pero 717 00:33:29,019 --> 00:33:31,519 Sí, ahí hay algo, un momentito 718 00:33:31,519 --> 00:33:32,619 Sí 719 00:33:32,619 --> 00:33:35,980 Entonces, ¿qué método tiene EnviUrgente? 720 00:33:36,039 --> 00:33:37,940 Ahora ya EnviUrgente sí que tiene 721 00:33:37,940 --> 00:33:40,700 Ay, ¿por qué no me lo ofrece aquí? 722 00:33:41,599 --> 00:33:42,599 Instance of 723 00:33:42,599 --> 00:33:47,599 Bueno, lo tendría que poner a mano 724 00:33:47,599 --> 00:33:54,039 Claro, findAll 725 00:33:54,039 --> 00:33:54,779 Me devuelve el array 726 00:33:54,779 --> 00:33:57,680 Vale, no lo he puesto 727 00:33:57,680 --> 00:33:58,759 Eso lo iba a decir ahora 728 00:33:58,759 --> 00:34:02,240 Porque si yo recupero directamente 729 00:34:02,240 --> 00:34:03,920 Todo a través de los métodos 730 00:34:03,920 --> 00:34:06,759 Esto ya no tiene por qué ser public 731 00:34:06,759 --> 00:34:08,800 ¿Vale? 732 00:34:09,579 --> 00:34:12,260 Y que no sea public tiene sus ventajas 733 00:34:12,260 --> 00:34:13,800 ¿Vale? 734 00:34:16,380 --> 00:34:17,780 O la puedo poner private 735 00:34:17,780 --> 00:34:20,159 O no public 736 00:34:20,159 --> 00:34:20,880 En cualquier caso 737 00:34:20,880 --> 00:34:23,800 Como solamente está en este paquete 738 00:34:23,800 --> 00:34:25,380 Da igual 739 00:34:25,380 --> 00:34:26,820 ¿Vale? 740 00:34:27,579 --> 00:34:27,860 Claro 741 00:34:27,860 --> 00:34:32,130 Entonces 742 00:34:32,130 --> 00:34:35,909 ¿Cómo se llama el método? 743 00:34:46,949 --> 00:34:49,190 Ah, aquí, calcular coste seguro 744 00:34:49,190 --> 00:34:50,349 Que no lo encontraba 745 00:34:50,349 --> 00:34:55,010 Calcular coste 746 00:34:55,929 --> 00:34:58,789 Seguro 747 00:34:58,789 --> 00:34:59,389 Vale 748 00:34:59,389 --> 00:35:01,750 Ahí 749 00:35:01,750 --> 00:35:10,199 He importado lo que 750 00:35:10,199 --> 00:35:12,480 Como estoy en otro paquete 751 00:35:12,480 --> 00:35:16,639 Y aquí podríamos hacer lo mismo 752 00:35:16,639 --> 00:35:20,099 Si es una instancia 753 00:35:20,099 --> 00:35:23,579 De envío 754 00:35:23,579 --> 00:35:26,039 Refrigerado 755 00:35:26,039 --> 00:35:28,659 Pues exactamente lo mismo 756 00:35:28,659 --> 00:35:42,840 Claro, pero es que aquí no hace falta 757 00:35:42,840 --> 00:35:44,920 Porque no vamos a acceder directamente a la variable 758 00:35:44,920 --> 00:35:45,300 Nunca 759 00:35:45,300 --> 00:35:50,159 Y aquí 760 00:35:50,159 --> 00:35:51,559 la llave 761 00:35:51,559 --> 00:35:52,760 vale 762 00:35:52,760 --> 00:35:59,880 y ahora 763 00:35:59,880 --> 00:36:02,320 return suma 764 00:36:02,320 --> 00:36:07,969 una pregunta 765 00:36:07,969 --> 00:36:10,969 si hay 40 clases 766 00:36:10,969 --> 00:36:11,849 que tienen el implement 767 00:36:11,849 --> 00:36:12,809 si no hay una manera 768 00:36:12,809 --> 00:36:14,070 más rápida 769 00:36:14,070 --> 00:36:15,809 porque tendría que meter 770 00:36:15,809 --> 00:36:16,030 una 771 00:36:16,030 --> 00:36:19,349 lo que ha dicho ella 772 00:36:19,349 --> 00:36:22,400 te refieres 773 00:36:22,400 --> 00:36:24,139 poner aquí asegurable 774 00:36:24,139 --> 00:36:25,579 vale 775 00:36:25,579 --> 00:36:29,539 pero no estoy 776 00:36:29,539 --> 00:36:30,659 completamente convencida 777 00:36:30,659 --> 00:36:31,300 de que eso 778 00:36:31,300 --> 00:36:32,119 no 779 00:36:32,119 --> 00:36:39,659 Lo que ha dicho ella 780 00:36:39,659 --> 00:36:41,260 Lo que pasa es que esto tiene un matiz 781 00:36:41,260 --> 00:36:44,599 Pero bueno, la aplicación que estamos haciendo 782 00:36:44,599 --> 00:36:45,719 Ahora nos va a dar problemas 783 00:36:45,719 --> 00:36:49,440 Sí, pero cualquiera de los dos 784 00:36:49,440 --> 00:36:51,739 Claro, el problema es el casting 785 00:36:51,739 --> 00:36:55,300 Entonces, si es una interfaz de asegurable 786 00:36:55,300 --> 00:36:57,840 Entonces el problema que tienes es que 787 00:36:57,840 --> 00:37:17,489 Entonces, porque calcular coste seguro, ¿vale? 788 00:37:17,510 --> 00:37:22,050 En este ejemplo, ups, en este ejemplo vamos a dejarlo así, ¿vale? 789 00:37:22,050 --> 00:37:31,010 Porque aquí hay una cosa, que hay un matiz extraño, que hasta que no saque en detalle un ejemplo para él, prefiere no sacarlo, ¿vale? 790 00:37:32,349 --> 00:37:36,210 Entonces, por ahora vamos a dejarlo así, que es lo que hemos visto, lo que tenemos todos claro, ¿vale? 791 00:37:38,530 --> 00:37:41,570 vale, pues si es de cualquiera 792 00:37:41,570 --> 00:37:42,829 de las dos instancias 793 00:37:42,829 --> 00:37:45,150 le puedo hacer un casting para 794 00:37:45,150 --> 00:37:46,710 llamar ya al método 795 00:37:46,710 --> 00:37:49,670 lo sumo y se acabó, y devuelvo la suma 796 00:37:49,670 --> 00:37:51,150 calcular coste total y seguros 797 00:37:51,150 --> 00:37:55,900 y ahora ya 798 00:37:55,900 --> 00:37:57,179 ¿qué método nos falta? 799 00:37:58,699 --> 00:37:59,219 actualizar 800 00:37:59,219 --> 00:38:02,019 estado de envío, este ya es de uno 801 00:38:02,019 --> 00:38:03,880 en particular, con lo cual hay que pasarle parámetro 802 00:38:03,880 --> 00:38:10,360 ese tendría sentido 803 00:38:10,360 --> 00:38:12,300 que devolviera un boolean para ver si lo pudo actualizar 804 00:38:12,300 --> 00:38:13,199 correctamente o no 805 00:38:13,199 --> 00:38:17,760 Actualizar estado 806 00:38:17,760 --> 00:38:20,320 ¿De qué envío? 807 00:38:21,139 --> 00:38:22,519 Del envío 808 00:38:22,519 --> 00:38:27,650 Este 809 00:38:27,650 --> 00:38:29,750 Segunda cosa 810 00:38:29,750 --> 00:38:30,949 Junto con el 811 00:38:30,949 --> 00:38:33,949 Otro que hemos dicho 812 00:38:33,949 --> 00:38:36,750 Que completáis vosotros 813 00:38:36,750 --> 00:38:39,550 Actualizar estado 814 00:38:39,550 --> 00:38:42,150 Apoyándose en los métodos 815 00:38:42,150 --> 00:38:42,929 De la otra clase 816 00:38:42,929 --> 00:38:46,369 Debería, porque no puede acceder 817 00:38:46,369 --> 00:38:48,170 tal y como lo hemos modificado ahora 818 00:38:48,170 --> 00:38:50,690 no puede acceder directamente 819 00:38:50,690 --> 00:38:52,170 a esta variable, que es la idea 820 00:38:52,170 --> 00:38:52,949 sería la idea 821 00:38:52,949 --> 00:38:56,190 con lo cual se tiene que apoyar de los métodos de aquí 822 00:38:56,190 --> 00:38:58,349 pues apoyándose en los métodos 823 00:38:58,349 --> 00:39:00,829 de esa clase, vamos a actualizar 824 00:39:00,829 --> 00:39:02,369 el estado de este envío 825 00:39:02,369 --> 00:39:03,969 pasándole el nuevo estado, claro 826 00:39:03,969 --> 00:39:07,719 estado envío 827 00:39:07,719 --> 00:39:10,079 nuevo estado 828 00:39:10,079 --> 00:39:24,679 vale, entonces 829 00:39:24,679 --> 00:39:26,900 nos faltaría 830 00:39:26,900 --> 00:39:28,360 hacéis vosotros 831 00:39:28,360 --> 00:39:31,059 en el repositorio este 832 00:39:31,059 --> 00:39:36,329 el de actualizar 833 00:39:36,329 --> 00:39:38,170 este de aquí 834 00:39:38,170 --> 00:39:42,139 en el central envíos 835 00:39:42,139 --> 00:39:43,760 este método 836 00:39:43,760 --> 00:39:53,179 y luego habría que hacer el main 837 00:39:53,179 --> 00:39:55,199 ahora voy a subir antes de irme 838 00:39:55,199 --> 00:39:56,840 el proyecto tal y como está 839 00:39:56,840 --> 00:39:57,440 la aula virtual 840 00:39:57,440 --> 00:40:00,460 entonces aquí ya empezáis a ver 841 00:40:00,460 --> 00:40:01,519 y todavía no son muchas 842 00:40:01,519 --> 00:40:03,860 ya empezáis a ver que cualquier aplicación 843 00:40:03,860 --> 00:40:06,320 son muchas clases que intentan separar funciones 844 00:40:06,320 --> 00:40:08,619 y tendréis la sensación de que en realidad 845 00:40:08,619 --> 00:40:10,519 estamos metiendo 846 00:40:10,519 --> 00:40:12,519 un montón de cosas a intermedias 847 00:40:12,519 --> 00:40:14,380 cuando lo podría hacer toda una única clase 848 00:40:14,380 --> 00:40:16,260 claro, yo podría hacer un main 849 00:40:16,260 --> 00:40:18,179 con mi array de envíos 850 00:40:18,179 --> 00:40:20,940 y en ese main ya hacer los métodos 851 00:40:20,940 --> 00:40:22,659 de actualizar, de no sé qué 852 00:40:22,659 --> 00:40:24,320 y la aplicación tiraría igual 853 00:40:24,320 --> 00:40:26,739 hombre, lo que sí que tendría que estar fuera 854 00:40:26,739 --> 00:40:28,260 lógicamente es el modelo, eso sí 855 00:40:28,260 --> 00:40:29,900 envío, envío refrigerado 856 00:40:29,900 --> 00:40:32,599 pero una vez que el modelo está fuera, podría hacer un main 857 00:40:32,599 --> 00:40:33,679 y ahí todo 858 00:40:33,679 --> 00:40:36,500 ahí mi array de envíos como variable local 859 00:40:36,500 --> 00:40:38,559 métodos auxiliares de los que llama 860 00:40:38,559 --> 00:40:40,679 main para hacer las cosas, vale, y la aplicación 861 00:40:40,679 --> 00:40:42,519 tiraría y ya está, pero 862 00:40:42,519 --> 00:40:43,519 no trabajamos así 863 00:40:43,519 --> 00:40:46,719 vale, trabajamos, aunque aparentemente 864 00:40:46,719 --> 00:40:48,780 parezca que es añadirle complejidad 865 00:40:48,780 --> 00:40:50,579 porque estamos metiendo un montón de clases 866 00:40:50,579 --> 00:40:52,480 que al final vienen a hacer lo mismo 867 00:40:52,480 --> 00:40:53,619 llamándose unas a otras 868 00:40:53,619 --> 00:40:55,760 le estamos dando un diseño 869 00:40:55,760 --> 00:40:58,780 que luego va a ser muchísimo 870 00:40:58,780 --> 00:41:00,559 más fácil de entender y va a ser muchísimo 871 00:41:00,559 --> 00:41:02,500 más fácil de cambiar, entonces 872 00:41:02,500 --> 00:41:03,739 ¿qué diseño le hemos dado ahora? 873 00:41:04,380 --> 00:41:06,739 pues hemos metido, aparte del modelo 874 00:41:06,739 --> 00:41:08,360 una clase 875 00:41:08,360 --> 00:41:10,360 independiente de la aplicación 876 00:41:10,360 --> 00:41:11,719 completamente independiente 877 00:41:11,719 --> 00:41:14,360 que tiene los datos con las funciones 878 00:41:14,360 --> 00:41:15,920 básicas para hacer con los datos 879 00:41:15,920 --> 00:41:18,780 y los datos están aquí escondidos 880 00:41:18,780 --> 00:41:20,500 aquí escondidos 881 00:41:20,500 --> 00:41:21,639 no tienen ni el public 882 00:41:21,639 --> 00:41:24,579 están ahí escondidos, que es lo natural 883 00:41:24,579 --> 00:41:26,639 porque esto en origen 884 00:41:26,639 --> 00:41:28,539 sería una base de datos, aquí no la tenemos 885 00:41:28,539 --> 00:41:30,099 entonces estamos simulando 886 00:41:30,099 --> 00:41:32,159 como si la base de datos estuviera aquí 887 00:41:32,159 --> 00:41:33,659 lo estamos simulando 888 00:41:33,659 --> 00:41:36,139 y mi aplicación no hace directamente la base de datos 889 00:41:36,139 --> 00:41:37,940 accederá a través de los métodos 890 00:41:37,940 --> 00:41:59,559 Pues es lo que estamos simulando. Mis datos están aquí escondidos y yo los ofrezco al exterior con las funciones básicas, con las del CRUD, estas que hemos dicho, y además un find all, devuélvemelos todos de golpe, que también es típico, devuélvemelos todos. Sería como un get, ¿vale? 891 00:41:59,559 --> 00:42:02,300 ahora ya, una vez que tenemos 892 00:42:02,300 --> 00:42:04,219 esa primera capa, con las 893 00:42:04,219 --> 00:42:06,280 acciones a hacer básicas, con los datos 894 00:42:06,280 --> 00:42:08,260 las básicas, ya ponemos 895 00:42:08,260 --> 00:42:09,320 la capa que es 896 00:42:09,320 --> 00:42:11,219 funciones de mi aplicación 897 00:42:11,219 --> 00:42:14,079 que sería 898 00:42:14,079 --> 00:42:15,519 central de envíos 899 00:42:15,519 --> 00:42:17,840 que van a tirar de la otra 900 00:42:17,840 --> 00:42:20,400 que directamente la llaman sin más 901 00:42:20,400 --> 00:42:22,159 en muchos casos 902 00:42:22,159 --> 00:42:24,440 sí, pero al menos están separadas 903 00:42:24,440 --> 00:42:25,820 conceptualmente separadas 904 00:42:25,820 --> 00:42:27,340 y luego ya está el main 905 00:42:27,340 --> 00:42:30,059 Y el main ya pues hará una consola 906 00:42:30,059 --> 00:42:31,599 Una interfaz gráfica, lo que sea 907 00:42:31,599 --> 00:42:33,280 Y llamará a central envíos 908 00:42:33,280 --> 00:42:35,119 ¿Vale? 909 00:42:35,619 --> 00:42:37,159 Entonces, bueno, esto se parece más 910 00:42:37,159 --> 00:42:40,099 A una arquitectura real 911 00:42:40,099 --> 00:42:41,400 De una aplicación