1 00:00:00,370 --> 00:00:03,049 vale, a ver, recordad 2 00:00:03,049 --> 00:00:05,209 la mini aplicación en la que estábamos 3 00:00:05,209 --> 00:00:06,710 para repasar esto de listas 4 00:00:06,710 --> 00:00:08,250 para revisar esto de listas 5 00:00:08,250 --> 00:00:11,009 recordad que en esta 6 00:00:11,009 --> 00:00:12,310 aplicación que estábamos 7 00:00:12,310 --> 00:00:14,869 estábamos trabajando 8 00:00:14,869 --> 00:00:17,210 con silencio 9 00:00:17,210 --> 00:00:18,769 ¿por qué estáis hablando todos 10 00:00:18,769 --> 00:00:19,910 entre vosotros? 11 00:00:21,989 --> 00:00:22,629 Andoni 12 00:00:22,629 --> 00:00:24,710 ¿cómo que no? 13 00:00:25,129 --> 00:00:27,129 ¿estarás cantando? ¿movíais la boca? 14 00:00:27,129 --> 00:00:32,259 silencio 15 00:00:32,259 --> 00:00:35,280 el ruido de fondo me distrae 16 00:00:35,280 --> 00:00:38,659 vale, pues entonces 17 00:00:38,659 --> 00:00:40,539 esta aplicación nuestra trabajaba 18 00:00:40,539 --> 00:00:42,259 con un conjunto de alumnos 19 00:00:42,259 --> 00:00:43,679 ¿vale? 20 00:00:45,079 --> 00:00:46,479 recordad siempre, cuando uno 21 00:00:46,479 --> 00:00:48,619 hace una aplicación, aunque esa parte 22 00:00:48,619 --> 00:00:49,439 la obviemos 23 00:00:49,439 --> 00:00:52,460 yo insisto en ello continuamente porque es 24 00:00:52,460 --> 00:00:54,060 la parte más importante del desarrollo 25 00:00:54,060 --> 00:00:56,039 la parte más importante del desarrollo 26 00:00:56,039 --> 00:00:58,840 Claudia, también está previo a reírse 27 00:00:58,840 --> 00:01:01,579 silencio 28 00:01:01,579 --> 00:01:04,280 la parte más importante del desarrollo 29 00:01:04,280 --> 00:01:06,420 en realidad no es la que estamos haciendo 30 00:01:06,420 --> 00:01:07,379 aquí nosotros 31 00:01:07,379 --> 00:01:09,560 porque esa casi que 32 00:01:09,560 --> 00:01:12,180 si tú tienes claro lo que quieres hacer casi que te la hace 33 00:01:12,180 --> 00:01:14,439 echar GPT, esa no es la más importante 34 00:01:14,439 --> 00:01:16,299 la importante y en la que echar 35 00:01:16,299 --> 00:01:17,519 GPT no te sustituye 36 00:01:17,519 --> 00:01:20,260 es en entender exactamente 37 00:01:20,260 --> 00:01:22,340 lo que el cliente quiere 38 00:01:22,340 --> 00:01:24,439 esa es la parte más importante 39 00:01:24,439 --> 00:01:26,159 en entender exactamente 40 00:01:26,159 --> 00:01:27,680 cuál es su material de trabajo 41 00:01:27,680 --> 00:01:34,620 qué necesita gestionar, qué requisitos son los que necesita satisfacer para cubrir sus necesidades. 42 00:01:35,459 --> 00:01:37,200 Esa es la parte más importante del desarrollo. 43 00:01:39,159 --> 00:01:43,120 Entonces, siempre hay que contextualizar el problema ahí, 44 00:01:43,340 --> 00:01:45,780 decir, pero vamos a ver qué estoy gestionando yo, qué necesito hacer. 45 00:01:46,939 --> 00:01:49,239 Y para todo eso se dedicará el tiempo que haga falta. 46 00:01:49,239 --> 00:01:54,260 Se describirá, se tomarán notas, se tratará de entender el problema en profundidad, 47 00:01:54,260 --> 00:01:56,019 se pondrá en 48 00:01:56,019 --> 00:01:58,500 se hablará 49 00:01:58,500 --> 00:02:00,500 con el cliente todas las veces que haga falta hasta tenerlo 50 00:02:00,500 --> 00:02:02,079 claro, se le harán 51 00:02:02,079 --> 00:02:04,180 prototipos, interfaces gráficas 52 00:02:04,180 --> 00:02:06,319 este es el tipo de aplicación que tú quieres ver, etc 53 00:02:06,319 --> 00:02:08,379 vale, bueno pues en nuestro 54 00:02:08,379 --> 00:02:10,319 caso se trataba de 55 00:02:10,319 --> 00:02:12,199 una secretaría que quería gestionar 56 00:02:12,199 --> 00:02:14,000 alumnos, entonces 57 00:02:14,000 --> 00:02:15,800 nuestro volumen de datos 58 00:02:15,800 --> 00:02:17,520 era un conjunto de alumnos 59 00:02:17,520 --> 00:02:20,300 lo normal entonces es diseñar 60 00:02:20,300 --> 00:02:22,400 unas tablas en una base de datos 61 00:02:22,400 --> 00:02:24,520 alumnos, asignaturas 62 00:02:24,520 --> 00:02:26,479 relaciones entre alumnos, asignaturas 63 00:02:26,479 --> 00:02:28,300 de las que está, vale, eso que estáis 64 00:02:28,300 --> 00:02:30,360 tratando en base de datos 65 00:02:30,360 --> 00:02:32,360 ¿vale? base de datos relacionales 66 00:02:32,360 --> 00:02:33,819 que son las que se siguen utilizando 67 00:02:33,819 --> 00:02:35,580 bueno, en nuestro caso 68 00:02:35,580 --> 00:02:38,379 la parte de poner en contacto la base 69 00:02:38,379 --> 00:02:40,360 de datos con la aplicación no la sabemos 70 00:02:40,360 --> 00:02:42,460 hacer todavía, esa ya la haremos el año 71 00:02:42,460 --> 00:02:44,300 que viene, con lo cual nuestros 72 00:02:44,300 --> 00:02:46,360 datos ya van a estar directamente en 73 00:02:46,360 --> 00:02:48,479 la aplicación, ¿y cuáles 74 00:02:48,479 --> 00:02:50,360 iban a ser nuestros datos? un montón de 75 00:02:50,360 --> 00:02:52,120 alumnos. Un montón de alumnos, pues 76 00:02:52,120 --> 00:02:54,080 ala, aquí están, un montón de alumnos. 77 00:02:55,939 --> 00:02:58,199 Un montón de alumnos aquí. Ahora ya 78 00:02:58,199 --> 00:02:59,919 no nos hace falta un array porque 79 00:02:59,919 --> 00:03:02,060 es engorroso, es lo más 80 00:03:02,060 --> 00:03:04,419 eficiente del mundo y lo mejor, por supuesto, 81 00:03:04,580 --> 00:03:05,539 computacionalmente sí, 82 00:03:06,099 --> 00:03:07,840 pero es engorroso 83 00:03:07,840 --> 00:03:09,419 para programar con él. 84 00:03:10,039 --> 00:03:12,219 Engorroso para programar. Pues entonces 85 00:03:12,219 --> 00:03:13,800 una lista, ¿vale? 86 00:03:14,039 --> 00:03:16,340 ¿Qué implementación? Venga, una lista enlazada 87 00:03:16,340 --> 00:03:17,960 que es muy buena y muy estupenda 88 00:03:17,960 --> 00:03:19,780 para meter y sacar. 89 00:03:21,740 --> 00:03:23,699 ¿vale? Para consultar un ArrayList, 90 00:03:23,800 --> 00:03:25,620 pero para meterse acá un LinkedList. Pues este 91 00:03:25,620 --> 00:03:27,580 es nuestro volumen 92 00:03:27,580 --> 00:03:28,960 de datos, los alumnos. 93 00:03:29,599 --> 00:03:31,599 Ahora, ¿y esos alumnos, qué 94 00:03:31,599 --> 00:03:33,520 nos interesa de ellos? Pues 95 00:03:33,520 --> 00:03:35,500 después de hablar con el cliente, que en este caso 96 00:03:35,500 --> 00:03:37,439 es el secretario de la secretaría, mil veces 97 00:03:37,439 --> 00:03:38,939 nos ha dicho, lo único que yo quiero 98 00:03:38,939 --> 00:03:41,439 de los alumnos, la única información que yo 99 00:03:41,439 --> 00:03:43,560 necesito, es su número de matrícula, 100 00:03:43,639 --> 00:03:45,780 su nombre, su edad y las denuncias de las que está matriculado. 101 00:03:46,419 --> 00:03:47,599 Pues de ahí viene este diseño 102 00:03:47,599 --> 00:03:49,539 de clase, que hemos tenido la 103 00:03:49,539 --> 00:03:51,439 suerte de que no depende de otras 104 00:03:51,439 --> 00:03:53,460 clases, podría depender de 105 00:03:53,460 --> 00:03:55,319 otras, porque la asignatura 106 00:03:55,319 --> 00:03:57,580 a lo mejor me dice el secretario, oye de cada asignatura 107 00:03:57,580 --> 00:03:59,080 no me basta el nombre 108 00:03:59,080 --> 00:04:01,500 de una asignatura, además 109 00:04:01,500 --> 00:04:03,379 del nombre, necesito saber 110 00:04:03,379 --> 00:04:04,740 los créditos que tiene 111 00:04:04,740 --> 00:04:07,340 lo que cuesta su 112 00:04:07,340 --> 00:04:09,180 matrícula, lo que sea, pues 113 00:04:09,180 --> 00:04:11,300 entonces tendríamos que hacer otra 114 00:04:11,300 --> 00:04:13,479 clase, asignatura 115 00:04:13,479 --> 00:04:15,319 con sus propiedades, nombre 116 00:04:15,319 --> 00:04:17,040 número de créditos, etcétera 117 00:04:17,040 --> 00:04:19,639 este list sería de asignatura 118 00:04:19,639 --> 00:04:22,800 entonces ya tendríamos un modelo de clases 119 00:04:22,800 --> 00:04:24,740 con dos clases, alumno y asignatura 120 00:04:24,740 --> 00:04:26,839 ¿vale? y ya estaríamos en el diseño 121 00:04:26,839 --> 00:04:28,800 en nuestro caso lo hemos simplificado porque lo único 122 00:04:28,800 --> 00:04:30,819 que queríamos es usar esta 123 00:04:30,819 --> 00:04:32,759 aplicación pequeñita para 124 00:04:32,759 --> 00:04:34,860 poner ejemplos de los métodos de las listas 125 00:04:34,860 --> 00:04:36,759 solamente para eso, pues en este 126 00:04:36,759 --> 00:04:38,579 caso alumno no depende de ninguna otra clase 127 00:04:38,579 --> 00:04:40,660 solamente de string, pero string ya está hecha 128 00:04:40,660 --> 00:04:42,879 no tenemos que hacerla, ¿vale? como asignaturas 129 00:04:42,879 --> 00:04:44,639 pueden ser muchas, pues de nuevo una lista 130 00:04:44,639 --> 00:04:46,819 una array, bueno una array está 131 00:04:46,819 --> 00:04:47,879 muy bien, de nuevo 132 00:04:47,879 --> 00:04:50,579 pero engorroso para programar 133 00:04:50,579 --> 00:04:52,160 maravilloso para ejecutar 134 00:04:52,160 --> 00:04:53,060 lo mejor del mundo 135 00:04:53,060 --> 00:04:54,759 si lo hiciéramos todo con Array 136 00:04:54,759 --> 00:04:56,360 los programas serían muchísimo mejores 137 00:04:56,360 --> 00:04:59,040 pero engorrosos en el momento 138 00:04:59,040 --> 00:05:00,300 de estar sentado que quedan 139 00:05:00,300 --> 00:05:02,959 y como ahora los ordenadores 140 00:05:02,959 --> 00:05:04,079 son muy rápidos 141 00:05:04,079 --> 00:05:07,439 pues pesa más la vaguería 142 00:05:07,439 --> 00:05:08,540 y decir mira 143 00:05:08,540 --> 00:05:10,920 voy a lo fácil que es trabajar 144 00:05:10,920 --> 00:05:12,639 con estas clases 145 00:05:12,639 --> 00:05:14,319 voy a lo fácil a la hora de programar 146 00:05:14,319 --> 00:05:17,019 aunque computacionalmente sea peor que un Array 147 00:05:17,019 --> 00:05:18,779 Porque total 148 00:05:18,779 --> 00:05:21,480 Si el ordenador va a ser muy rápido y lo va a ejecutar bien 149 00:05:21,480 --> 00:05:24,350 Bueno, pues entonces 150 00:05:24,350 --> 00:05:25,449 Una lista de asignaturas 151 00:05:25,449 --> 00:05:27,790 Los get y los set y ya está 152 00:05:27,790 --> 00:05:30,449 Y luego ya los requisitos 153 00:05:30,449 --> 00:05:32,629 Que nos había dicho 154 00:05:32,629 --> 00:05:33,870 El secretario que quería hacer 155 00:05:33,870 --> 00:05:35,730 Pues en principio eran los que habíamos 156 00:05:35,730 --> 00:05:38,149 Escrito por aquí 157 00:05:38,149 --> 00:05:39,850 En su momento, esto de aquí 158 00:05:39,850 --> 00:05:42,149 Y eso estábamos haciendo el otro día, ¿verdad? 159 00:05:42,910 --> 00:05:43,930 Bueno, pues entonces 160 00:05:43,930 --> 00:05:45,569 Vámonos al método 161 00:05:45,569 --> 00:05:47,910 ¿Qué métodos habíamos hecho? 162 00:05:48,329 --> 00:05:50,990 mostrar datos de un alumno dado su matrícula. 163 00:05:51,269 --> 00:05:53,209 Pues nada, habíamos recorrido la colección, 164 00:05:53,910 --> 00:05:55,970 la habíamos recorrido y una vez que habíamos encontrado uno 165 00:05:55,970 --> 00:05:57,829 con esa matrícula, mostrábamos los datos. 166 00:05:58,230 --> 00:05:59,629 Vale, bueno, los devolvíamos. 167 00:06:01,009 --> 00:06:03,269 Habíamos usado este método, mostrar datos, 168 00:06:03,750 --> 00:06:06,750 para ver diferentes formas de recorrer una colección, 169 00:06:08,050 --> 00:06:08,889 una lista. 170 00:06:09,610 --> 00:06:12,730 El for de índice, a través de este método get, 171 00:06:12,730 --> 00:06:15,170 me da todos los alumnos de la lista. 172 00:06:15,170 --> 00:06:17,230 el for each 173 00:06:17,230 --> 00:06:19,250 el for each 174 00:06:19,250 --> 00:06:20,430 de esta manera 175 00:06:20,430 --> 00:06:23,170 ¿vale? en el cual a 176 00:06:23,170 --> 00:06:24,889 en cada iteración 177 00:06:24,889 --> 00:06:27,589 va siendo una copia de cada uno 178 00:06:27,589 --> 00:06:29,089 de los elementos de esta lista 179 00:06:29,089 --> 00:06:30,430 ¿vale? 180 00:06:31,569 --> 00:06:32,649 menos eficiente 181 00:06:32,649 --> 00:06:34,850 que el for the índice 182 00:06:34,850 --> 00:06:37,389 porque aquí trabajo directamente 183 00:06:37,389 --> 00:06:38,050 con una 184 00:06:38,050 --> 00:06:41,750 con la referencia 185 00:06:41,750 --> 00:06:43,670 al objeto de la lista 186 00:06:43,670 --> 00:06:44,810 que es esta 187 00:06:44,810 --> 00:06:47,170 aquí trabajo con una copia 188 00:06:47,170 --> 00:06:49,769 de la referencia, apunto al mismo sitio 189 00:06:49,769 --> 00:06:51,269 pero apunto a través de una copia 190 00:06:51,269 --> 00:06:53,709 ¿vale? ya lo vimos con los arrays 191 00:06:53,709 --> 00:06:55,889 pero es cómodo, es cómodo de escribir 192 00:06:55,889 --> 00:06:56,329 y ya está 193 00:06:56,329 --> 00:06:59,629 y el literador, que es la opción 194 00:06:59,629 --> 00:07:01,889 más segura para recorrer 195 00:07:01,889 --> 00:07:02,670 una lista 196 00:07:02,670 --> 00:07:05,009 o una colección en general 197 00:07:05,009 --> 00:07:06,610 cuando estamos trabajando 198 00:07:06,610 --> 00:07:09,189 con la programación multilo, etc. 199 00:07:10,870 --> 00:07:12,089 entonces el literador 200 00:07:12,089 --> 00:07:13,310 otra forma de recorrerla 201 00:07:13,310 --> 00:07:14,569 ya vimos también cómo funcionaba 202 00:07:14,569 --> 00:07:16,189 genero el objeto iterador 203 00:07:16,189 --> 00:07:18,189 que es una especie de puntero 204 00:07:18,189 --> 00:07:20,550 que va avanzando mediante este método 205 00:07:20,550 --> 00:07:21,350 va avanzando 206 00:07:21,350 --> 00:07:23,189 y en cada avance 207 00:07:23,189 --> 00:07:26,269 me devuelve un alumno 208 00:07:26,269 --> 00:07:27,490 de esa colección 209 00:07:27,490 --> 00:07:29,910 y como este método me dice 210 00:07:29,910 --> 00:07:31,350 si tengo otro más o no 211 00:07:31,350 --> 00:07:33,290 pues lo usamos como condición del while 212 00:07:33,290 --> 00:07:35,930 bueno pues 213 00:07:35,930 --> 00:07:37,730 eso en cuanto al método 214 00:07:37,730 --> 00:07:38,850 mostrar datos 215 00:07:38,850 --> 00:07:41,829 que lo usamos 216 00:07:41,829 --> 00:07:43,930 para ver tres diferentes maneras 217 00:07:43,930 --> 00:07:44,790 De recorrer la lista 218 00:07:44,790 --> 00:07:47,069 Vale, bueno, insertar alumno 219 00:07:47,069 --> 00:07:49,870 Que lo único que hacía era añadir el alumno a la lista 220 00:07:49,870 --> 00:07:50,490 Y ya está 221 00:07:50,490 --> 00:07:53,069 Matricular alumno 222 00:07:53,069 --> 00:07:54,829 Pues recorríamos 223 00:07:54,829 --> 00:07:58,149 Hasta que encontrábamos un alumno 224 00:07:58,149 --> 00:08:00,129 Con esa matrícula y cuando lo encontrábamos 225 00:08:00,129 --> 00:08:02,149 Le añadíamos su asignatura a la lista de asignaturas 226 00:08:02,870 --> 00:08:04,750 Luego matricular alumno 227 00:08:04,750 --> 00:08:06,230 Era sencillo 228 00:08:06,230 --> 00:08:07,689 Vale 229 00:08:07,689 --> 00:08:11,980 Entonces este método 230 00:08:11,980 --> 00:08:14,060 Este método 231 00:08:14,060 --> 00:08:17,000 es sencillo, ahora que ya 232 00:08:17,000 --> 00:08:19,459 estáis muy familiarizados con todo 233 00:08:19,459 --> 00:08:20,759 y ya tenéis mucha soltura 234 00:08:20,759 --> 00:08:22,819 si 235 00:08:22,819 --> 00:08:25,779 uno ve este método así de golpe y porrazo 236 00:08:25,779 --> 00:08:26,839 matricular alumno 237 00:08:26,839 --> 00:08:29,100 con este número de matrícula 238 00:08:29,100 --> 00:08:31,160 de la asignatura que yo doy aquí 239 00:08:31,160 --> 00:08:33,659 entonces soy los 240 00:08:33,659 --> 00:08:35,679 jefes y dicen, ah ya tengo el método 241 00:08:35,679 --> 00:08:37,620 te lo enseño, así, ala 242 00:08:37,620 --> 00:08:39,740 y ya tengo el método hecho 243 00:08:39,740 --> 00:08:41,240 ¿le haríais algún comentario? 244 00:08:50,340 --> 00:08:51,600 este código como tal 245 00:08:51,600 --> 00:08:56,139 bueno, hace lo que tiene que hacer, recorre esta lista 246 00:08:56,139 --> 00:09:01,480 posición por posición, cuando encuentra un alumno 247 00:09:01,480 --> 00:09:05,580 cuyo número de matrícula es igual al que me han dado, pues coge las asignaturas 248 00:09:05,580 --> 00:09:07,759 de ese alumno y le añade la nueva 249 00:09:07,759 --> 00:09:12,460 pero ¿le haríais algún comentario al que hizo este método? 250 00:09:16,379 --> 00:09:19,779 exacto, yo si le haría un comentario le diría, oye cuidado, este método 251 00:09:19,779 --> 00:09:24,179 que peligroso es, porque siempre 252 00:09:24,179 --> 00:09:25,980 que hay un objeto que llama 253 00:09:25,980 --> 00:09:28,240 algo, si ese objeto 254 00:09:28,240 --> 00:09:30,120 existe la posibilidad de que sea null 255 00:09:30,120 --> 00:09:32,159 ya sabéis que sale un null 256 00:09:32,159 --> 00:09:33,700 pointer exception y eso que hace 257 00:09:33,700 --> 00:09:36,019 para la aplicación, no es que te dé 258 00:09:36,019 --> 00:09:38,179 un error y no te lo 259 00:09:38,179 --> 00:09:40,179 haga y la aplicación siga ofreciéndote 260 00:09:40,179 --> 00:09:42,080 el menú, no, es que la aplicación se ha 261 00:09:42,080 --> 00:09:43,840 roto, se ha parado, se ha roto 262 00:09:43,840 --> 00:09:45,700 y encima te muestra 263 00:09:45,700 --> 00:09:47,860 unas líneas rojas y se ha roto 264 00:09:47,860 --> 00:09:49,679 entonces eso es lo último que queremos cuando 265 00:09:49,679 --> 00:09:51,700 entregamos una aplicación, que pase algo 266 00:09:51,700 --> 00:09:52,259 que la pare 267 00:09:52,259 --> 00:09:55,799 y que no puedas trabajar 268 00:09:55,799 --> 00:09:58,000 y que tengas que llamar al servicio 269 00:09:58,000 --> 00:10:00,039 técnico y decir, oye, lánzame la aplicación otra vez 270 00:10:00,039 --> 00:10:01,799 porque es que esto no funciona, no queremos eso 271 00:10:01,799 --> 00:10:03,960 entonces, hombre, si es un comentario 272 00:10:03,960 --> 00:10:05,419 pues que estaría bien hacerle, decirle, oye 273 00:10:05,419 --> 00:10:07,940 cuidado con el posible null 274 00:10:07,940 --> 00:10:08,799 pointer exception 275 00:10:08,799 --> 00:10:12,360 si la lista de alumnos 276 00:10:12,360 --> 00:10:14,100 no existe 277 00:10:14,100 --> 00:10:15,299 todavía, si es null 278 00:10:15,299 --> 00:10:16,620 cuidado 279 00:10:16,620 --> 00:10:18,200 ¿vale? 280 00:10:20,200 --> 00:10:22,179 entonces, bueno, esto para que nos vayamos acostumbrando 281 00:10:22,179 --> 00:10:23,039 a ver estas cosas 282 00:10:23,039 --> 00:10:25,820 por ejemplo uno podría hacer esto 283 00:10:25,820 --> 00:10:28,279 si alumnos 284 00:10:28,279 --> 00:10:29,200 es igual a null 285 00:10:29,200 --> 00:10:32,240 porque vamos a ver 286 00:10:32,240 --> 00:10:34,240 este método puede estar 287 00:10:34,240 --> 00:10:36,139 dentro de una aplicación donde 288 00:10:36,139 --> 00:10:38,039 alumnos siempre se inicializa 289 00:10:38,039 --> 00:10:40,000 y todo eso, pero eso 290 00:10:40,000 --> 00:10:41,120 este método no lo sabe 291 00:10:41,120 --> 00:10:44,240 este es un método que le llamará a quien quiera 292 00:10:44,240 --> 00:10:46,539 y él no tiene ni idea de quien le va a llamar 293 00:10:46,539 --> 00:10:48,240 le va a llamar una clase que ha hecho 294 00:10:48,240 --> 00:10:49,100 esa otra persona 295 00:10:49,100 --> 00:10:51,620 y este no tiene por qué saber 296 00:10:51,620 --> 00:10:53,340 que el que le llame 297 00:10:53,340 --> 00:10:55,840 seguro que ha inicializado a alumnos 298 00:10:55,840 --> 00:10:56,860 no tiene por qué saberlo 299 00:10:56,860 --> 00:10:58,460 entonces tiene que protegerse de eso 300 00:10:58,460 --> 00:11:00,059 un método cuanto más protegido esté 301 00:11:00,059 --> 00:11:01,840 de excepciones mejor 302 00:11:01,840 --> 00:11:03,679 entonces aquí 303 00:11:03,679 --> 00:11:05,000 pues por ejemplo 304 00:11:05,000 --> 00:11:06,679 no estaría mal hacer algo así 305 00:11:06,679 --> 00:11:12,269 que alumnos resulta que no se ha inicializado 306 00:11:12,269 --> 00:11:13,830 porque no 307 00:11:13,830 --> 00:11:15,850 bueno porque la aplicación 308 00:11:15,850 --> 00:11:16,950 que está usando este método 309 00:11:16,950 --> 00:11:18,870 no lo inicializa 310 00:11:18,870 --> 00:11:21,169 hasta que no insertas un alumno al principio 311 00:11:21,169 --> 00:11:21,769 lo que sea 312 00:11:21,769 --> 00:11:23,230 pues entonces en este caso 313 00:11:23,230 --> 00:11:24,110 1 es igual a null 314 00:11:24,110 --> 00:11:37,250 aquí y ya está 315 00:11:37,250 --> 00:11:38,750 y aquí que pondríamos 316 00:11:38,750 --> 00:11:39,870 si 317 00:11:39,870 --> 00:11:43,070 y aquí que palabrita 318 00:11:43,070 --> 00:11:45,230 mágica pondríais 319 00:11:45,230 --> 00:11:48,100 return 320 00:11:48,100 --> 00:11:51,320 esa es la palabra magia que pondríais ahí 321 00:11:51,320 --> 00:11:53,360 return 322 00:11:53,360 --> 00:11:54,220 se acabó el método 323 00:11:54,220 --> 00:11:55,779 return fuera 324 00:11:55,779 --> 00:11:58,379 si llegamos aquí 325 00:11:58,379 --> 00:12:01,620 es porque efectivamente alumnos no es null 326 00:12:01,620 --> 00:12:03,299 con lo cual null pointer 327 00:12:03,299 --> 00:12:04,340 exception ya no vas a tener 328 00:12:04,340 --> 00:12:07,659 puede ser que encuentres al alumno o que no lo encuentres 329 00:12:07,659 --> 00:12:09,320 pero al menos null pointer exception 330 00:12:09,320 --> 00:12:10,080 no vas a tener 331 00:12:10,080 --> 00:12:14,440 ¿vale? 332 00:12:16,299 --> 00:12:17,159 esto que yo he puesto 333 00:12:17,159 --> 00:12:19,059 aquí, en realidad es un poco 334 00:12:19,059 --> 00:12:21,159 feo, porque yo estoy confiando 335 00:12:21,159 --> 00:12:23,299 en que el que ejecuta la aplicación 336 00:12:23,299 --> 00:12:24,720 tenga una consola 337 00:12:24,720 --> 00:12:26,980 para ver los mensajitos 338 00:12:26,980 --> 00:12:29,100 pero es que, con lo que 339 00:12:29,100 --> 00:12:31,159 sabemos nosotros ahora, no tengo otra forma 340 00:12:31,159 --> 00:12:32,980 de comunicarme con él, no tengo otra manera 341 00:12:32,980 --> 00:12:35,299 lo normal es que 342 00:12:35,299 --> 00:12:37,720 esto se enviara a un fichero de log 343 00:12:37,720 --> 00:12:39,500 pero nosotros no sabemos manejar los ficheros de log 344 00:12:39,500 --> 00:12:40,580 todavía y nada de eso 345 00:12:40,580 --> 00:12:43,580 pero si sabéis lo que es un fichero 346 00:12:43,580 --> 00:12:44,559 de log en general 347 00:12:44,559 --> 00:12:47,919 cuando una aplicación se está ejecutando 348 00:12:47,919 --> 00:12:49,700 esa aplicación se está ejecutando 349 00:12:49,700 --> 00:12:51,000 le pueden pasar cosas 350 00:12:51,000 --> 00:12:53,059 pues de repente se ha conectado un usuario 351 00:12:53,059 --> 00:12:54,360 ahora ha hecho un acceso 352 00:12:54,360 --> 00:12:57,159 ha hecho un acceso inválido a la base de datos 353 00:12:57,159 --> 00:12:59,419 entonces la aplicación a la vez que va 354 00:12:59,419 --> 00:13:01,399 ejecutando cosas va enviando 355 00:13:01,399 --> 00:13:03,240 a un fichero un registro 356 00:13:03,240 --> 00:13:04,620 de lo que va haciendo, un ficherito 357 00:13:04,620 --> 00:13:07,559 es transparente para el que está usando la aplicación 358 00:13:07,559 --> 00:13:09,159 el que está usando la aplicación no sabe 359 00:13:09,159 --> 00:13:10,620 pero la aplicación 360 00:13:10,620 --> 00:13:13,179 va mandando mensajitos a un fichero 361 00:13:13,179 --> 00:13:15,220 que se quedan ahí guardaditos 362 00:13:15,220 --> 00:13:17,240 entonces, ¿qué ocurre si de repente 363 00:13:17,240 --> 00:13:18,980 te llama a ti alguien y dice 364 00:13:18,980 --> 00:13:21,259 oye, que la aplicación ha fallado, a las 11 y 25 365 00:13:21,259 --> 00:13:21,980 me ha fallado 366 00:13:21,980 --> 00:13:24,820 pues tú te vas a ese ficherito 367 00:13:24,820 --> 00:13:26,759 donde se ha quedado un registro de todo lo que ha pasado 368 00:13:26,759 --> 00:13:28,259 y a lo mejor ves 369 00:13:28,259 --> 00:13:31,059 11 y 25, acceso inválido 370 00:13:31,059 --> 00:13:33,320 de usuario y contraseña, yo que sé 371 00:13:33,320 --> 00:13:35,200 lo que sea, y le dices, ah pues es que 372 00:13:35,200 --> 00:13:36,379 a las 11.25 pasó esto 373 00:13:36,379 --> 00:13:39,399 entonces es la manera normal 374 00:13:39,399 --> 00:13:41,320 de llevar un registro 375 00:13:41,320 --> 00:13:42,820 de cuando las cosas no han ido bien 376 00:13:42,820 --> 00:13:45,100 lo que pasa es que nosotros no sabemos crear ficheros de logs 377 00:13:45,100 --> 00:13:46,220 todavía desde una aplicación 378 00:13:46,220 --> 00:13:49,340 luego la información de que no hay 379 00:13:49,340 --> 00:13:51,200 alumnos creados, la mando por 380 00:13:51,200 --> 00:13:51,759 consola ya 381 00:13:51,759 --> 00:13:57,279 pero vamos, a mi lo que me importa ahora 382 00:13:57,279 --> 00:13:59,340 es que vayáis viendo situaciones 383 00:13:59,340 --> 00:14:01,440 peligrosas, según veáis el código 384 00:14:01,440 --> 00:14:03,580 y esta es una situación peligrosa 385 00:14:03,580 --> 00:14:05,419 este método está asumiendo 386 00:14:05,419 --> 00:14:07,480 que alumnos es diferente de null, pues es mucho asumir 387 00:14:07,480 --> 00:14:08,700 a lo mejor no es diferente de null 388 00:14:08,700 --> 00:14:10,740 entonces hay que identificar situaciones peligrosas 389 00:14:10,740 --> 00:14:13,519 y este método también se va quedando un poco cojo 390 00:14:13,519 --> 00:14:14,820 porque si 391 00:14:14,820 --> 00:14:18,539 el alumno 392 00:14:18,539 --> 00:14:21,179 está encontrado 393 00:14:21,179 --> 00:14:23,519 le añade la asignatura, pero si el alumno no existe 394 00:14:23,519 --> 00:14:24,159 no hace nada 395 00:14:24,159 --> 00:14:27,259 entonces también se queda un poco cojo el método 396 00:14:27,259 --> 00:14:29,519 porque la aplicación cuando lo llama 397 00:14:29,519 --> 00:14:31,320 no sabe 398 00:14:31,320 --> 00:14:33,379 no sabe si 399 00:14:33,379 --> 00:14:35,659 realmente se insertó 400 00:14:35,659 --> 00:14:36,940 o no se insertó alumno 401 00:14:36,940 --> 00:14:39,460 no lo sabe, perdón, no sabe 402 00:14:39,460 --> 00:14:41,120 si se encontró alumno para 403 00:14:41,120 --> 00:14:43,019 matricularse en Natura o no, no lo sabe 404 00:14:43,019 --> 00:14:45,460 puede haberse encontrado 405 00:14:45,460 --> 00:14:47,440 y haberse añadido o pueden haberse encontrado 406 00:14:47,440 --> 00:14:48,200 porque no existe 407 00:14:48,200 --> 00:14:50,799 entonces a ver, funciona, funciona 408 00:14:50,799 --> 00:14:52,519 pero es un método poco amigable 409 00:14:52,519 --> 00:14:54,919 poco amigable, también sería bonito 410 00:14:54,919 --> 00:14:57,080 incorporar una realimentación 411 00:14:57,080 --> 00:14:59,279 que te diga, encontré alumno o no encontré 412 00:14:59,279 --> 00:15:00,419 alumno, ¿verdad? 413 00:15:00,960 --> 00:15:03,279 bien por consola o bien porque lo lleva a un registro de log 414 00:15:03,279 --> 00:15:05,019 ¿se insertó asignatura? 415 00:15:05,139 --> 00:15:06,580 no se insertó pero no encontró alumno 416 00:15:06,580 --> 00:15:08,840 está bien que tenga una realimentación 417 00:15:08,840 --> 00:15:10,919 ¿vale? ¿qué haríamos ahí 418 00:15:10,919 --> 00:15:12,480 para poner una realimentación? 419 00:15:17,639 --> 00:15:19,500 claro, el famoso boolean que te detecte 420 00:15:19,500 --> 00:15:20,980 si has entrado aquí alguna vez o no 421 00:15:20,980 --> 00:15:23,720 el famoso boolean que te diga si algo ha pasado o no 422 00:15:23,720 --> 00:15:25,580 entonces, hombre, esto estaría 423 00:15:25,580 --> 00:15:29,759 más bonito, por ejemplo 424 00:15:29,759 --> 00:15:30,700 si hacemos esto 425 00:15:30,700 --> 00:15:34,389 asumimos de partida 426 00:15:34,389 --> 00:15:35,509 que no existe alumno 427 00:15:35,509 --> 00:15:37,190 y ahora 428 00:15:37,190 --> 00:15:42,159 cuando hemos encontrado el alumno 429 00:15:42,159 --> 00:15:44,259 cuando hemos encontrado el alumno 430 00:15:44,259 --> 00:15:47,450 pues avisamos 431 00:15:47,450 --> 00:15:49,070 y decimos, ala 432 00:15:49,070 --> 00:15:50,210 encontré 433 00:15:50,210 --> 00:15:53,309 he encontrado alumno 434 00:15:53,309 --> 00:15:54,269 ¿vale? 435 00:15:54,269 --> 00:15:55,970 y ahora ya 436 00:15:55,970 --> 00:15:57,509 con este mecanismo de control 437 00:15:57,509 --> 00:16:00,129 de partida no tengo, pero si resulta 438 00:16:00,129 --> 00:16:01,169 que lo he encontrado, lo cambio 439 00:16:01,169 --> 00:16:03,570 pues con este mecanismo de control 440 00:16:03,570 --> 00:16:06,009 el mecanismo de control que ya vimos en la primera evaluación 441 00:16:06,009 --> 00:16:09,070 de toda la vida, cuando ya el for ha terminado 442 00:16:09,070 --> 00:16:15,710 ya sabemos si encontró alumno o no 443 00:16:15,710 --> 00:16:17,389 entonces si lo encontró 444 00:16:17,389 --> 00:16:26,080 pues decimos, se matriculó al alumno 445 00:16:26,080 --> 00:16:32,320 de la asignatura, por ejemplo 446 00:16:32,320 --> 00:16:44,669 o le decimos, no se encontró alumno 447 00:16:44,669 --> 00:16:50,230 por ejemplo, vale 448 00:16:50,230 --> 00:16:54,009 y de paso podemos usar este boolean 449 00:16:54,009 --> 00:16:56,649 para que este for no esté hasta el infinito 450 00:16:56,649 --> 00:16:58,850 una vez que ha encontrado el alumno 451 00:16:58,850 --> 00:17:00,389 que ya no siga 452 00:17:00,389 --> 00:17:02,149 ya de paso que lo tenemos 453 00:17:02,149 --> 00:17:04,430 porque si lo ha encontrado el primero 454 00:17:04,430 --> 00:17:06,170 y tenemos mil alumnos 455 00:17:06,170 --> 00:17:07,390 este for va a seguir 456 00:17:07,390 --> 00:17:10,950 hombre, si ya lo has encontrado no sigas 457 00:17:10,950 --> 00:17:12,849 entonces ya que tenemos ese boolean 458 00:17:12,849 --> 00:17:14,829 aprovechemos y situemos el boolean 459 00:17:14,829 --> 00:17:15,269 ¿dónde? 460 00:17:16,009 --> 00:17:18,210 para parar el bucle cuando 461 00:17:18,210 --> 00:17:19,670 ya lo haya encontrado 462 00:17:19,670 --> 00:17:23,170 ¿dónde haríamos aquí la modificación? 463 00:17:23,170 --> 00:17:23,809 ¿en qué parte? 464 00:17:23,809 --> 00:17:29,990 para que el bucle pare cuando ya ha encontrado el 1 465 00:17:29,990 --> 00:17:33,569 claro, modificamos la condición 466 00:17:33,569 --> 00:17:35,190 para que el bucle siga 467 00:17:35,190 --> 00:17:38,269 tanto cuando no ha llegado al final 468 00:17:38,269 --> 00:17:41,289 pero también cuando no lo ha encontrado todavía 469 00:17:41,289 --> 00:17:43,750 es decir, mientras no hayas llegado al final 470 00:17:43,750 --> 00:17:48,809 y no lo hayas encontrado 471 00:17:48,809 --> 00:17:52,089 mientras se den simultáneamente 472 00:17:52,089 --> 00:17:52,970 las dos cosas 473 00:17:52,970 --> 00:17:56,529 que no hayas llegado al final y no lo hayas encontrado 474 00:17:56,529 --> 00:17:58,950 cuando se den simultáneamente las dos, sigues 475 00:17:58,950 --> 00:18:02,730 de tal manera que cuando ya lo hayas 476 00:18:02,730 --> 00:18:04,509 encontrado, esto es true 477 00:18:04,509 --> 00:18:05,890 con lo cual esto será false 478 00:18:05,890 --> 00:18:08,210 porque es un no delante, será false 479 00:18:08,210 --> 00:18:09,829 y el bucle ya se parará 480 00:18:09,829 --> 00:18:11,089 ¿vale? 481 00:18:12,690 --> 00:18:14,029 es bueno, lo de siempre 482 00:18:14,029 --> 00:18:18,769 bueno, pues incorporar estas cosas 483 00:18:18,769 --> 00:18:20,549 hacen nuestros códigos 484 00:18:20,549 --> 00:18:22,130 un poquito mejores 485 00:18:22,130 --> 00:18:26,299 vale, pues esto en cuanto a 486 00:18:26,299 --> 00:18:27,980 matricular alumno, lo podemos mejorar 487 00:18:27,980 --> 00:18:29,619 un poquito de esta manera 488 00:18:29,619 --> 00:18:33,109 ahora este 489 00:18:33,109 --> 00:18:35,349 a donde queríamos ir a parar 490 00:18:35,349 --> 00:18:36,029 vale 491 00:18:36,029 --> 00:18:40,329 desmatricular alumno de una asignatura 492 00:18:40,329 --> 00:18:44,029 número de matrícula, asignatura 493 00:18:44,029 --> 00:18:45,609 lo mismo 494 00:18:45,609 --> 00:18:48,089 recorremos esto, podríamos añadirle 495 00:18:48,089 --> 00:18:49,109 el encontrado también 496 00:18:49,109 --> 00:18:51,529 para que nos diga si lo ha encontrado o no 497 00:18:51,529 --> 00:18:53,630 para desmatricularle y aparte que pare el bucle 498 00:18:53,630 --> 00:18:56,490 vale, pues cuando ha encontrado 499 00:18:56,490 --> 00:19:00,250 al alumno con ese número 500 00:19:00,250 --> 00:19:02,210 de matrícula teníamos 501 00:19:02,210 --> 00:19:03,609 el método remove 502 00:19:03,609 --> 00:19:06,049 al que le pasas un elemento 503 00:19:06,049 --> 00:19:07,130 de la lista 504 00:19:07,130 --> 00:19:08,890 entonces 505 00:19:08,890 --> 00:19:12,230 getAsignaturas es la lista 506 00:19:12,230 --> 00:19:13,730 de string de asignaturas 507 00:19:13,730 --> 00:19:15,950 le pasamos un objeto string 508 00:19:15,950 --> 00:19:17,529 que es la asignatura borrar 509 00:19:17,529 --> 00:19:19,250 y que hace el método remove 510 00:19:19,250 --> 00:19:22,230 se va a esta lista y te elimina 511 00:19:22,230 --> 00:19:23,630 la primera 512 00:19:23,630 --> 00:19:25,990 de las apariciones de este objeto 513 00:19:25,990 --> 00:19:27,269 en esta lista, la primera 514 00:19:27,269 --> 00:19:28,970 entonces le pasamos lengua 515 00:19:28,970 --> 00:19:31,730 en cuanto encuentre el string lengua 516 00:19:31,730 --> 00:19:32,849 las asignaturas lo eliminen 517 00:19:32,849 --> 00:19:36,109 ¿que hay más string lengua? no, solo te borra el primero 518 00:19:36,109 --> 00:19:37,950 entonces ¿qué queremos hacer? 519 00:19:38,430 --> 00:19:39,630 si está matriculado de lengua 520 00:19:39,630 --> 00:19:40,490 mates lengua 521 00:19:40,490 --> 00:19:44,150 ¿queremos que elimine solo la primera lengua o las dos? 522 00:19:44,269 --> 00:19:46,309 pues depende, habría que hablar con el secretario 523 00:19:46,309 --> 00:19:47,509 y decirle, oye, es probable 524 00:19:47,509 --> 00:19:49,910 es probable que 525 00:19:49,910 --> 00:19:51,769 un alumno pueda estar matriculado 526 00:19:51,769 --> 00:19:53,170 en su lista varias veces de la misma 527 00:19:53,170 --> 00:19:55,569 porque te hayas equivocado al meter los datos 528 00:19:55,569 --> 00:19:57,349 puede ser que eso ocurra 529 00:19:57,349 --> 00:20:04,509 Y en el caso de que ocurra, si yo desmatriculo de lengua, ¿quieres que desaparezcan todas o solo la primera? 530 00:20:04,710 --> 00:20:08,769 Pues bueno, solo sería cuestión de hablarlo con él a ver exactamente cómo va a funcionar la aplicación. 531 00:20:09,289 --> 00:20:15,829 Lo que nos importa a nosotros es entender que este método te borra la primera de las apariciones de este objeto en la lista. 532 00:20:17,470 --> 00:20:22,490 Vale, entonces, y además te devuelve true o false si encontró o no encontró. 533 00:20:22,490 --> 00:20:24,450 por eso si queríamos 534 00:20:24,450 --> 00:20:26,309 si queremos que te las borre todas 535 00:20:26,309 --> 00:20:27,829 las de este objeto 536 00:20:27,829 --> 00:20:30,549 pues lo tenemos tan fácil como meterlo en un while 537 00:20:30,549 --> 00:20:31,430 ¿vale? 538 00:20:32,390 --> 00:20:33,869 que es lo que hicimos el otro día 539 00:20:33,869 --> 00:20:36,509 el while tiene esto como 540 00:20:36,509 --> 00:20:38,630 condición, luego no tiene cuerpo, luego se acaba 541 00:20:38,630 --> 00:20:40,210 en un punto y coma, no tiene cuerpo 542 00:20:40,210 --> 00:20:42,269 entonces te hace el primer remove 543 00:20:42,269 --> 00:20:44,450 si encontró te devuelve true 544 00:20:44,450 --> 00:20:46,390 con lo cual entra de nuevo a buscar 545 00:20:46,390 --> 00:20:48,950 el segundo remove, si sigue encontrando 546 00:20:48,950 --> 00:20:50,170 te devuelve true 547 00:20:50,170 --> 00:20:52,089 y entra de nuevo al siguiente 548 00:20:52,089 --> 00:20:53,910 así hasta que ya no encuentre más 549 00:20:53,910 --> 00:20:55,890 apariciones, para lo cual devolverá 550 00:20:55,890 --> 00:20:56,890 falso y ya saldrá el while 551 00:20:56,890 --> 00:20:59,789 vale, pues entonces 552 00:20:59,789 --> 00:21:02,049 el otro método que tenemos 553 00:21:02,049 --> 00:21:04,109 relacionado con remove 554 00:21:04,109 --> 00:21:10,369 el remove all 555 00:21:10,369 --> 00:21:11,250 vale 556 00:21:11,250 --> 00:21:14,710 el remove all, hay que pasarle una colección 557 00:21:14,710 --> 00:21:16,450 no solo un objeto como aquí 558 00:21:16,450 --> 00:21:17,849 no solo un objeto 559 00:21:17,849 --> 00:21:19,890 hay que pasarle una colección 560 00:21:19,890 --> 00:21:22,430 de varias cosas, lengua, matemática 561 00:21:22,430 --> 00:21:24,789 física, lo que sea, una colección de cosas 562 00:21:24,789 --> 00:21:26,089 hay que pasarle una colección 563 00:21:26,089 --> 00:21:44,369 ¿Y qué hace? Pues todo lo que hay aquí, lengua, mates, física, todo lo que haya, te lo elimina de la colección, pero todas las apariciones, o sea, si hay dos lenguas, dos mates, tres físicas, te elimina las dos lenguas, las tres mates, las dos físicas, todas, ¿vale? Todas. 564 00:21:44,369 --> 00:21:46,230 Para ello, pues te hace un iterador 565 00:21:46,230 --> 00:21:47,529 para recorrer la colección, 566 00:21:47,670 --> 00:21:49,490 hace un meollo dentro importante. 567 00:21:49,970 --> 00:21:50,970 Te lo metéis dentro a verlo. 568 00:21:51,670 --> 00:21:53,730 Entonces, para borrar todas las apariciones 569 00:21:53,730 --> 00:21:55,230 de una sola asignatura, 570 00:21:56,910 --> 00:21:58,009 esto que hemos hecho aquí arriba, 571 00:21:58,269 --> 00:21:58,789 esto de aquí, 572 00:21:59,349 --> 00:22:00,509 lo podríamos efectivamente, 573 00:22:00,650 --> 00:22:01,769 que es lo que tú dijiste el otro día, 574 00:22:01,930 --> 00:22:03,529 si lo podríamos hacer así, pues sí, 575 00:22:04,049 --> 00:22:05,930 podríamos hacer una lista, 576 00:22:06,670 --> 00:22:08,849 meter en esa lista ese único objeto, 577 00:22:08,930 --> 00:22:10,730 una lista de un único objeto, de uno. 578 00:22:11,190 --> 00:22:12,970 Y ahora al remufol pasarle eso. 579 00:22:12,970 --> 00:22:15,250 y esto haría lo mismo que lo de arriba 580 00:22:15,250 --> 00:22:17,549 pero hombre, es bastante más complicado 581 00:22:17,549 --> 00:22:19,009 porque el remove all 582 00:22:19,009 --> 00:22:21,410 luego te hace por dentro, no solo el while 583 00:22:21,410 --> 00:22:22,869 sino es que te saca un iterador 584 00:22:22,869 --> 00:22:25,430 entonces tú aparte se hace una variable 585 00:22:25,430 --> 00:22:27,309 adicional, metiendo, pasando 586 00:22:27,309 --> 00:22:29,369 pero efectivamente esto 587 00:22:29,369 --> 00:22:31,269 te haría lo mismo que esto, aunque lo de arriba 588 00:22:31,269 --> 00:22:33,109 es más sencillo 589 00:22:33,109 --> 00:22:35,170 menos instrucciones, menos sentencias 590 00:22:35,170 --> 00:22:37,150 remove all tiene 591 00:22:37,150 --> 00:22:39,309 muchas más dentro, muchísimas más que remove 592 00:22:39,309 --> 00:22:43,859 ¿vale? 593 00:22:45,220 --> 00:22:46,380 entonces remove all 594 00:22:46,380 --> 00:22:48,880 El uso que se le suele dar es cuando queremos borrar 595 00:22:48,880 --> 00:22:50,619 Varias diferentes de golpe 596 00:22:50,619 --> 00:22:52,960 Si queremos borrar varias diferentes 597 00:22:52,960 --> 00:22:55,359 Entonces sí, hay que hacerlo con el remove all sí o sí 598 00:22:55,359 --> 00:22:57,240 Porque el remove a palo seco 599 00:22:57,240 --> 00:22:58,079 Te borra una 600 00:22:58,079 --> 00:23:01,559 Si yo quiero borrar varias lengua, mates, física 601 00:23:01,559 --> 00:23:03,339 Pues lo tengo que hacer con este 602 00:23:03,339 --> 00:23:04,559 Ahí sí que sí 603 00:23:04,559 --> 00:23:05,500 ¿Vale? 604 00:23:06,400 --> 00:23:09,140 Vale, pues dejo esto comentado aquí 605 00:23:09,140 --> 00:23:18,599 Y lo pongo así 606 00:23:18,599 --> 00:23:34,200 Vale, ¿qué más métodos llegamos a hacer? 607 00:23:34,200 --> 00:23:35,200 Aparte de desmatricular 608 00:23:35,200 --> 00:23:37,839 bueno, hicimos eliminar 609 00:23:37,839 --> 00:23:38,920 alumno de la colección 610 00:23:38,920 --> 00:23:41,660 ¿vale? para verlo 611 00:23:41,660 --> 00:23:43,599 del equals, que esto fue ya lo último que hicimos 612 00:23:43,599 --> 00:23:44,779 ¿vale? 613 00:23:45,839 --> 00:23:46,980 hicimos este método 614 00:23:46,980 --> 00:23:49,700 para dejar claro que remove 615 00:23:49,700 --> 00:23:51,019 por dentro, o sea que uno 616 00:23:51,019 --> 00:23:53,839 cuando uno hace algo que lo haga llamando a un método 617 00:23:53,839 --> 00:23:55,519 no significa que sea una única 618 00:23:55,519 --> 00:23:57,579 sentencia, no, lo que está llamando es a un método 619 00:23:57,579 --> 00:23:59,680 y este método dentro hace ahí 620 00:23:59,680 --> 00:24:00,740 la leche 621 00:24:00,740 --> 00:24:02,839 ¿vale? hace ahí la leche 622 00:24:02,839 --> 00:24:05,799 lo ideal sería que uno lo programara 623 00:24:05,799 --> 00:24:07,839 él todo, todo, y no tuviera que utilizar 624 00:24:07,839 --> 00:24:09,920 clases, ni colecciones, ni listas 625 00:24:09,920 --> 00:24:11,460 ni nada, porque lo programara uno todo 626 00:24:11,460 --> 00:24:13,660 con las estructuras básicas 627 00:24:13,660 --> 00:24:15,960 con los for, los while, los if 628 00:24:15,960 --> 00:24:17,819 y los arrays, porque eso es 629 00:24:17,819 --> 00:24:18,680 lo único que hay 630 00:24:18,680 --> 00:24:21,880 todo lo demás son clases con métodos 631 00:24:21,880 --> 00:24:23,059 que usan todo eso 632 00:24:23,059 --> 00:24:25,700 entonces nosotros delegamos 633 00:24:25,700 --> 00:24:27,680 llamamos a métodos que usan eso para hacer las cosas 634 00:24:27,680 --> 00:24:28,940 y confiamos en que lo hacen bien 635 00:24:28,940 --> 00:24:31,980 pero a saber cómo están esos por dentro 636 00:24:31,980 --> 00:24:34,740 lo ideal es que uno lo hiciera todo 637 00:24:34,740 --> 00:24:36,819 pero claro, le quedarían programas 638 00:24:36,819 --> 00:24:39,039 gigantes, larguísimos 639 00:24:39,039 --> 00:24:40,259 poco manejables 640 00:24:40,259 --> 00:24:42,440 por eso reutilizamos clases 641 00:24:42,440 --> 00:24:44,200 que ya están hechas y vamos a sus métodos 642 00:24:44,200 --> 00:24:45,940 pero por comodidad 643 00:24:45,940 --> 00:24:48,380 ahora desarrollar código, no porque sea mejor 644 00:24:48,380 --> 00:24:49,700 no porque sea mejor 645 00:24:49,700 --> 00:24:53,890 pero es que llega un momento en que tienes que tirar 646 00:24:53,890 --> 00:24:55,809 de código de otros, porque es que si no 647 00:24:55,809 --> 00:24:57,829 tus programas, cada uno de ellos tendría 648 00:24:57,829 --> 00:24:59,089 50.000 líneas 649 00:24:59,089 --> 00:25:02,029 bueno, pues eliminar 650 00:25:02,029 --> 00:25:03,769 alumno lo incorporamos 651 00:25:03,769 --> 00:25:05,650 para revisarlo de 652 00:25:05,650 --> 00:25:07,569 equals. ¿Qué hace 653 00:25:07,569 --> 00:25:09,329 Remus? Pues ya lo hemos dicho. 654 00:25:10,529 --> 00:25:11,410 Coge este objeto, 655 00:25:12,250 --> 00:25:13,930 se pone a iterar en esta lista, 656 00:25:14,150 --> 00:25:16,069 se pone a iterar, y en cuanto 657 00:25:16,069 --> 00:25:17,849 encuentra uno igual 658 00:25:17,849 --> 00:25:19,650 a él, lo elimina. 659 00:25:20,329 --> 00:25:22,049 Y ya está. En cuanto 660 00:25:22,049 --> 00:25:23,670 encuentra uno igual a él. 661 00:25:24,529 --> 00:25:25,829 Por eso, importante 662 00:25:25,829 --> 00:25:27,809 que si 663 00:25:27,809 --> 00:25:28,750 la colección 664 00:25:28,750 --> 00:25:32,009 es de la clase alumno, de la clase 665 00:25:32,009 --> 00:25:34,190 Pepito, pues esa clase tenga el criterio 666 00:25:34,190 --> 00:25:35,410 de igualdad implementado 667 00:25:35,410 --> 00:25:38,289 porque si no remove va a usar el criterio de igualdad 668 00:25:38,289 --> 00:25:40,089 de object, que es 669 00:25:40,089 --> 00:25:42,089 el mismo objeto uno encima de otro 670 00:25:42,089 --> 00:25:43,089 o sea, misma dirección de memoria 671 00:25:43,089 --> 00:25:46,009 ¿vale? entonces aquí 672 00:25:46,009 --> 00:25:48,170 como alumno teníamos el criterio de 673 00:25:48,170 --> 00:25:49,950 igualdad implementado 674 00:25:49,950 --> 00:25:51,730 en la colección alumnos que es de alumno 675 00:25:51,730 --> 00:25:54,390 teníamos el criterio de igualdad implementado 676 00:25:54,390 --> 00:25:56,069 y alumno tenía como criterio 677 00:25:56,069 --> 00:25:56,789 de igualdad 678 00:25:56,789 --> 00:25:59,970 el número de matrícula, ese era el criterio 679 00:25:59,970 --> 00:26:02,349 de igualdad, dos alumnos con mismo número de matrícula 680 00:26:02,349 --> 00:26:04,289 para la secretaría son el mismo 681 00:26:04,289 --> 00:26:06,069 si tú llegas 682 00:26:06,069 --> 00:26:07,750 un día con tu número de matrícula 7 683 00:26:07,750 --> 00:26:09,650 y llegas mañana 684 00:26:09,650 --> 00:26:11,069 con otra cara 685 00:26:11,069 --> 00:26:14,069 con el título de matrícula 7, eres el mismo 686 00:26:14,069 --> 00:26:16,029 da igual que tengas el diseño del pelo 687 00:26:16,029 --> 00:26:17,490 da lo mismo, ¿vale? 688 00:26:17,650 --> 00:26:19,410 eso te lo tiene que aclarar la secretaría 689 00:26:19,410 --> 00:26:22,089 si el pelo te cambia 690 00:26:22,089 --> 00:26:24,210 o no, dice, no, no, a mí me da igual 691 00:26:24,210 --> 00:26:26,069 que tenga el pelo, a mí lo que me importa es su número 692 00:26:26,069 --> 00:26:28,029 de matrícula, pues entonces, eso 693 00:26:28,029 --> 00:26:29,950 te lo tiene que aclarar, que identifica de forma 694 00:26:29,950 --> 00:26:32,089 única a los elementos de la aplicación 695 00:26:32,089 --> 00:26:33,950 pues en este caso nos ha aclarado 696 00:26:33,950 --> 00:26:35,750 su número de matrícula, me da igual que venga 697 00:26:35,750 --> 00:26:37,730 hombre, mujer, con el pelo rubio o con el pelo moreno 698 00:26:37,730 --> 00:26:39,869 su número de matrícula, pues eso fija el criterio 699 00:26:39,869 --> 00:26:41,869 de igualdad, pues como el criterio de 700 00:26:41,869 --> 00:26:44,170 igualdad está ya aquí recogido 701 00:26:44,170 --> 00:26:44,750 en alumno 702 00:26:44,750 --> 00:26:48,049 este remove va a funcionar bien 703 00:26:48,049 --> 00:26:50,029 porque yo 704 00:26:50,029 --> 00:26:52,069 creo un objeto cuyo número de matrícula 705 00:26:52,069 --> 00:26:54,029 es este que me han dado, un objeto 706 00:26:54,029 --> 00:26:56,289 aus, se lo paso a remove 707 00:26:56,289 --> 00:26:59,509 se pone a buscar en la colección 708 00:26:59,509 --> 00:27:00,990 uno que sea igual a este 709 00:27:00,990 --> 00:27:03,430 o lo que es lo mismo, se pone a buscar 710 00:27:03,430 --> 00:27:05,369 un alumno cuyo número de matrícula 711 00:27:05,369 --> 00:27:07,130 sea este, y en cuanto 712 00:27:07,130 --> 00:27:09,250 encuentre un alumno con número de matrícula este 713 00:27:09,250 --> 00:27:11,430 lo elimina, que es lo que 714 00:27:11,430 --> 00:27:13,049 queremos, que es lo que queremos 715 00:27:13,049 --> 00:27:13,829 ¿vale? 716 00:27:17,240 --> 00:27:19,799 a ver, más métodos 717 00:27:19,799 --> 00:27:20,359 hacer 718 00:27:20,359 --> 00:27:27,420 mostrar el nombre del alumno que está matriculado 719 00:27:27,420 --> 00:27:28,619 en más asignaturas 720 00:27:28,619 --> 00:27:32,579 este, lo metemos 721 00:27:32,579 --> 00:27:33,700 aquí en operaciones 722 00:27:33,700 --> 00:27:36,680 vale, mostrar el nombre 723 00:27:36,680 --> 00:27:38,180 del alumno y vamos a hacerlo que lo devuelva 724 00:27:38,180 --> 00:27:49,250 jugador de retorno, si va a devolver 725 00:27:49,250 --> 00:27:51,170 jugador de retorno un nombre, este va a 726 00:27:51,170 --> 00:27:53,069 devolver un string, jugador de retorno 727 00:27:53,069 --> 00:27:56,910 alumno con más 728 00:27:56,910 --> 00:27:58,250 asignaturas 729 00:27:58,250 --> 00:28:01,720 vale 730 00:28:01,720 --> 00:28:04,559 pregunta 731 00:28:04,559 --> 00:28:08,660 ¿qué parámetro necesita 732 00:28:08,660 --> 00:28:09,720 ese método? 733 00:28:12,990 --> 00:28:14,589 ninguno, porque 734 00:28:14,589 --> 00:28:16,970 este método trabaja con los 735 00:28:16,970 --> 00:28:18,849 datos, y los 736 00:28:18,849 --> 00:28:25,089 datos son estos, que ya están aquí arriba, con alumnos. Solamente trabaja con la colección 737 00:28:25,089 --> 00:28:29,789 de alumnos, la recorrerá para ver qué más asignaturas tiene. Recorrerá a los alumnos 738 00:28:29,789 --> 00:28:39,390 para verlo. Pues venga, este es nuestro siguiente método objetivo. Pues hala, venga, hacedlo. 739 00:28:40,890 --> 00:28:42,609 Arrancadlo a ver qué...