1 00:00:00,370 --> 00:00:16,269 Vale, pues vamos a resolver este primer ejercicio que ya empezasteis a hacer con Raúl, pero como solo hicisteis, creo que muy poquito del principio, porque estuvisteis repasando y como no lo tenéis grabado, lo vamos a hacer entero, ¿vale? 2 00:00:17,269 --> 00:00:20,530 Para repasar en particular listas y podemos extenderlo a conjuntos. 3 00:00:21,230 --> 00:00:28,370 Bueno, realizar una aplicación para gestionar profesores y alumnos, ya nos vienen dadas las entidades, no tenemos que pensar. 4 00:00:28,370 --> 00:00:33,929 alumnos con sus tres propiedades y profesor con sus tres propiedades. 5 00:00:34,469 --> 00:00:37,850 Esta va a ser la propiedad que va a ser una colección. 6 00:00:38,509 --> 00:00:40,250 Ahora ya en lugar de un array va a ser una lista. 7 00:00:41,789 --> 00:00:45,070 Luego la clase main es la que gestiona ya los datos concretos. 8 00:00:45,950 --> 00:00:48,450 Esos datos concretos también serán una colección. 9 00:00:49,909 --> 00:00:52,350 Aquí pone una lista de profesores. 10 00:00:52,950 --> 00:00:57,210 Podemos alterarlo y que sea un set de profesores 11 00:00:57,210 --> 00:01:01,969 que a su vez cada profesor contenga un list y así trabajamos con las dos colecciones. 12 00:01:02,509 --> 00:01:08,950 Vamos a hacer el ejercicio para que en la clase main los profesores no se guarden en una lista, sino en un conjunto. 13 00:01:13,709 --> 00:01:17,829 Incluso se guardará el conjunto de profesores. 14 00:01:20,000 --> 00:01:24,659 En realidad va a tener muy pocas implicaciones a la hora de usarlo. 15 00:01:24,659 --> 00:01:28,140 ya sabemos que las tiene a la hora de la implementación interna pero a la hora de 16 00:01:28,140 --> 00:01:37,019 usarlo son dos colecciones donde se añade se recupera se itera y poco más vale eso sí hay 17 00:01:37,019 --> 00:01:43,760 que tener claro que vale un conjunto vale un set para esta situación entonces profesores 18 00:01:43,760 --> 00:01:49,920 me interesa a mí meter los repetidos en mi conjunto de profesores de mi aplicación pues 19 00:01:49,920 --> 00:01:56,459 no cada profesor una única instancia dentro del conjunto para que quiero tener dos instancias o 20 00:01:56,459 --> 00:02:03,459 tres del mismo profesor en esta aplicación no parece que sea necesario luego entonces sí que 21 00:02:03,459 --> 00:02:10,479 un conjunto que no admite duplicados no admite objetos iguales pues se adaptan vale pues venga 22 00:02:10,479 --> 00:02:16,460 empezamos entidades alumno que es la que no depende de nadie la primera que hacemos la 23 00:02:16,460 --> 00:02:46,449 metemos aquí, en una clase, alumno, ala, nif, nombre y nota, ponía, pues ala, vale, entonces, lo que siempre 24 00:02:46,449 --> 00:02:54,449 hacemos, constructores, get y set, y ya está, por flexibilidad, para quien nos use, le damos las dos 25 00:02:54,449 --> 00:02:56,409 opciones, instanciar con 26 00:02:56,409 --> 00:02:58,949 parámetros o instanciar 27 00:02:58,949 --> 00:03:00,430 sin 28 00:03:00,430 --> 00:03:01,110 parámetros 29 00:03:01,110 --> 00:03:04,229 y get y set 30 00:03:04,229 --> 00:03:11,310 vale, y aquí ya podríamos 31 00:03:11,310 --> 00:03:13,229 poner, podríamos poner equals, podríamos 32 00:03:13,229 --> 00:03:15,129 poner cosas, pero vamos a irlo poniendo 33 00:03:15,129 --> 00:03:17,270 según vayamos identificando 34 00:03:17,270 --> 00:03:18,949 en la aplicación que es necesario 35 00:03:18,949 --> 00:03:20,250 para que así 36 00:03:20,250 --> 00:03:23,150 no se nos olvide y tengamos muy claro por qué 37 00:03:23,150 --> 00:03:25,389 ponemos esos métodos y cuál es el sentido 38 00:03:25,389 --> 00:03:26,050 de que estén ahí 39 00:03:26,050 --> 00:03:29,050 lo que sí que vamos a avanzar es un toString 40 00:03:29,050 --> 00:03:32,889 porque así el system.out.println que usa toString 41 00:03:32,889 --> 00:03:37,569 y otros que usen toString para mostrar el alumno, 42 00:03:38,150 --> 00:03:40,830 pues así en lugar de mostrarnos ese simbolito raro 43 00:03:40,830 --> 00:03:43,009 que muestra el toString heredado de object, 44 00:03:43,789 --> 00:03:46,889 pues nos muestra los datos que realmente tiene este alumno. 45 00:03:47,469 --> 00:03:50,770 Entonces vamos a crear el toString que nos muestra las tres propiedades 46 00:03:50,770 --> 00:03:52,550 y ya está. 47 00:03:53,150 --> 00:03:55,789 Si pasamos el objeto alumno a un system.out, 48 00:03:55,789 --> 00:03:58,729 pues nos mostrará esto en vez de lo de object. 49 00:03:59,050 --> 00:04:03,370 Siguiente entidad 50 00:04:03,370 --> 00:04:04,729 Profesor 51 00:04:04,729 --> 00:04:06,129 Y ya está, no hay más entidades 52 00:04:06,129 --> 00:04:10,310 Es una aplicación sencilla 53 00:04:10,310 --> 00:04:13,289 Esto se correspondería a un modelo de base de datos 54 00:04:13,289 --> 00:04:16,329 En el cual tenemos una tabla alumnos 55 00:04:16,329 --> 00:04:18,449 Y otra tabla profesores 56 00:04:18,449 --> 00:04:19,829 Y ya está 57 00:04:19,829 --> 00:04:24,250 Y cada alumno tiene una clave ajena a su profesor 58 00:04:24,250 --> 00:04:28,149 Se correspondería a eso, la base de datos 59 00:04:28,149 --> 00:04:33,329 para que vayamos de alguna manera conectando esto con el mundo real 60 00:04:33,329 --> 00:04:37,170 que es que los datos están en una base de datos y de ahí se vuelcan a los objetos 61 00:04:37,170 --> 00:04:45,069 bueno, pues los profesores, ¿por qué se caracteriza NIF nombre y su lista de alumnos? 62 00:04:54,139 --> 00:04:56,399 y ahora ya, los alumnos son un montón 63 00:04:56,399 --> 00:04:58,939 ya no nos hace falta meterlo en un array 64 00:04:58,939 --> 00:05:01,939 estaría muy bien meterlo en un array 65 00:05:01,939 --> 00:05:05,759 porque es una estructura de muy buen rendimiento 66 00:05:05,759 --> 00:05:16,500 pero difícil de más que difícil costosa pesada de desarrollar con ella porque es estática entonces 67 00:05:16,500 --> 00:05:24,180 vamos a usar una lista qué tipo de lista bueno pues por ahora no lo sé por ahora la lista la 68 00:05:24,180 --> 00:05:31,980 dejo la referencia como interfaz y ya está la lista de que va a ser la dejo así sin parametrizar 69 00:05:31,980 --> 00:05:34,480 Pues podría 70 00:05:34,480 --> 00:05:38,290 Podríamos decir 71 00:05:38,290 --> 00:05:40,970 Mi propiedad alumnos es una lista 72 00:05:40,970 --> 00:05:43,350 No sé si linked list 73 00:05:43,350 --> 00:05:44,050 Array list 74 00:05:44,050 --> 00:05:45,949 Ahora no me comprometo 75 00:05:45,949 --> 00:05:48,829 Y además no la parametrizo 76 00:05:48,829 --> 00:05:50,230 Entonces esta 77 00:05:50,230 --> 00:05:52,069 Es una opción con la que podemos trabajar 78 00:05:52,069 --> 00:05:54,269 Pero esto es arriesgado 79 00:05:54,269 --> 00:05:55,350 Ya sabemos por qué 80 00:05:55,350 --> 00:05:58,290 Porque entonces automáticamente el compilador 81 00:05:58,290 --> 00:06:00,389 Nos va a dejar que a alumnos 82 00:06:00,389 --> 00:06:01,910 Le metamos cualquier objeto 83 00:06:02,449 --> 00:06:05,110 Da igual que sea un objeto alumno o que sea un objeto mesa. 84 00:06:05,689 --> 00:06:07,129 Va a caer cualquier cosa. 85 00:06:07,350 --> 00:06:10,290 Entonces, si no somos cuidadosos y aquí en esta colección, 86 00:06:10,370 --> 00:06:12,089 en algún momento del código, algún método, 87 00:06:12,209 --> 00:06:15,389 mete algo que no sea un alumno, va a colar. 88 00:06:15,949 --> 00:06:19,149 Pero luego, a la hora de iterar, nos van a salir cosas de esa lista 89 00:06:19,149 --> 00:06:20,389 que vete a saber qué son. 90 00:06:22,250 --> 00:06:27,370 Entonces, vamos a parametrizarlo a lo que realmente vamos a meter ahí, 91 00:06:28,050 --> 00:06:29,050 que son alumnos. 92 00:06:29,050 --> 00:06:32,990 ahora ya en tiempo de compilación estamos más 93 00:06:32,990 --> 00:06:37,089 constreñidos, en tiempo de compilación ya estamos más sujetos 94 00:06:37,089 --> 00:06:39,810 porque ahora ya solo nos van a permitir meter alumnos 95 00:06:39,810 --> 00:06:45,170 muy bien, porque aunque eso hace que el desarrollo 96 00:06:45,170 --> 00:06:48,889 sea más rígido, pero a cambio sabemos seguro 97 00:06:48,889 --> 00:06:53,089 que ahí solamente va a haber alumnos, entonces cuando iteremos, cuando hagamos cualquier cosa 98 00:06:53,089 --> 00:06:56,389 es que nos hace falta hacer casting, porque esos son alumnos y así 99 00:06:56,389 --> 00:07:00,730 Bueno, igual que hacíamos con los arrays 100 00:07:00,730 --> 00:07:03,709 cuando declarábamos una propiedad que era de tipo array 101 00:07:03,709 --> 00:07:07,589 ya en el momento de declararla la inicializábamos a un array vacío 102 00:07:07,589 --> 00:07:10,610 para evitar null pointer exception 103 00:07:10,610 --> 00:07:13,329 porque cuando metíamos el primer elemento 104 00:07:13,329 --> 00:07:16,269 o cuando calculábamos el tamaño del array 105 00:07:16,269 --> 00:07:19,069 en cualquier momento, si todavía no se había rellenado 106 00:07:19,069 --> 00:07:22,930 si ese array no lo declarábamos, pues eso era un objeto null 107 00:07:22,930 --> 00:07:25,250 entonces los primeros accesos 108 00:07:25,250 --> 00:07:27,290 los primeros accesos a esa propiedad 109 00:07:27,290 --> 00:07:29,069 si no somos cuidadosos 110 00:07:29,069 --> 00:07:31,370 programando, como siempre, si no somos cuidadosos 111 00:07:31,370 --> 00:07:33,589 los primeros accesos darían null pointer exception 112 00:07:33,589 --> 00:07:35,230 entonces ya con Arrays 113 00:07:35,230 --> 00:07:36,649 nos hemos acostumbrado a hacer 114 00:07:36,649 --> 00:07:39,069 una primera inicialización de un Array 115 00:07:39,069 --> 00:07:41,329 que existe, pero que no tiene nada 116 00:07:41,329 --> 00:07:42,810 pues aquí igual 117 00:07:42,810 --> 00:07:44,750 podemos seguir esa costumbre 118 00:07:44,750 --> 00:07:45,689 que es buena costumbre 119 00:07:45,689 --> 00:07:49,149 hacer una primera inicialización de esa lista 120 00:07:49,149 --> 00:07:51,129 a una lista vacía 121 00:07:51,129 --> 00:07:53,370 pero que no es nula 122 00:07:53,370 --> 00:07:53,589 ya 123 00:07:53,589 --> 00:07:56,490 ahora ya como vamos a instanciar 124 00:07:56,490 --> 00:07:57,550 ya sí que hay que comprometer 125 00:07:57,550 --> 00:07:59,110 si ya no nos vale la interfaz list 126 00:07:59,110 --> 00:08:00,949 ahora ya hay que instanciar y decir 127 00:08:00,949 --> 00:08:03,430 oye, ¿qué quieres? ¿una lista enlazada o una ArrayList? 128 00:08:04,209 --> 00:08:07,029 bueno, pues funcionan prácticamente igual 129 00:08:07,029 --> 00:08:08,689 con los matices por dentro 130 00:08:08,689 --> 00:08:10,449 son distintas como ya hemos visto 131 00:08:10,449 --> 00:08:12,269 pero su uso es el mismo 132 00:08:12,269 --> 00:08:13,810 su uso es el mismo 133 00:08:13,810 --> 00:08:15,910 salvo los matices que hemos dicho 134 00:08:15,910 --> 00:08:17,269 de que las LinkedList 135 00:08:17,269 --> 00:08:20,269 te ofrecen métodos para simular 136 00:08:20,269 --> 00:08:22,629 el funcionamiento de pilas y colas y eso 137 00:08:22,629 --> 00:08:26,709 pero salvo eso, las dos sirven para lo mismo 138 00:08:26,709 --> 00:08:30,269 para insertar elementos en una posición concreta 139 00:08:30,269 --> 00:08:35,309 ¿por cuál optamos? pues ya sabemos, lo hemos dicho mil veces 140 00:08:35,309 --> 00:08:39,669 lista enlazada si sobre todo hay inserciones y borrados 141 00:08:39,669 --> 00:08:43,409 y ArrayList si sobre todo hay consultas, aquí nos da un poco igual 142 00:08:43,409 --> 00:08:46,529 pues venga, vamos a poner una LinkedList 143 00:08:46,529 --> 00:08:51,809 ya tenemos una lista instanciada sin elementos 144 00:08:51,809 --> 00:08:54,909 que importamos del paquete de colecciones 145 00:08:54,909 --> 00:08:56,009 que es el java útil 146 00:08:56,009 --> 00:08:58,590 vale 147 00:08:58,590 --> 00:09:03,730 get y set como siempre 148 00:09:03,730 --> 00:09:05,370 y constructores con y sin parámetros 149 00:09:05,370 --> 00:09:13,799 para flexibilizar un poco 150 00:09:13,799 --> 00:09:15,539 el uso de esta entidad 151 00:09:15,539 --> 00:09:24,070 y de nuevo 152 00:09:24,070 --> 00:09:25,909 aquí podríamos ya adelantarnos 153 00:09:25,909 --> 00:09:27,610 con los equals hashcode etc 154 00:09:27,610 --> 00:09:29,309 pero vamos a ponerlos cuando 155 00:09:29,309 --> 00:09:31,950 ya identifiquemos que nos hacen falta 156 00:09:31,950 --> 00:09:32,929 para entender 157 00:09:32,929 --> 00:09:36,970 de nuevo bien porque los ponemos. Pero sí que vamos a hacer el toString de nuevo 158 00:09:36,970 --> 00:09:40,590 por lo mismo, por si pasamos a un system.out o algo que lo use. 159 00:09:42,230 --> 00:09:45,190 En un toString poner una colección lista es un rollo. 160 00:09:45,370 --> 00:09:47,870 Entonces que el toString me muestre solo nifinombre. 161 00:09:49,350 --> 00:09:52,850 ¡Hala! Ya tenemos el toString. Si no nos gusta lo que nos muestra, pues 162 00:09:52,850 --> 00:09:56,850 lo cambiamos. No pasa nada. Bueno, tenemos alumno y profesor. 163 00:09:57,649 --> 00:10:00,809 Y ahora en la clase main una serie de funcionalidades para trabajar 164 00:10:00,809 --> 00:10:06,990 con alumnos y profesores y esos profesores en la clase main que ya es la que se ejecuta la que 165 00:10:06,990 --> 00:10:13,350 tiene los datos de verdad en esa clase main esos datos de verdad que son los profesores de mi 166 00:10:13,350 --> 00:10:19,049 instituto van a estar en un set venga vamos a hacer el main y en esa misma clase main vamos 167 00:10:19,049 --> 00:10:25,570 a meter estas funcionalidades pues a las entidades no tienen nada podrían tener además más métodos 168 00:10:25,570 --> 00:10:32,649 para hacer cosas pues como por ejemplo subir nota un alumno cambiarle el nombre con profesor 169 00:10:32,649 --> 00:10:39,509 insertar un alumno al profesor quitarle un alumno al profesor podríamos poner aquí ya métodos que 170 00:10:39,509 --> 00:10:44,389 hicieran cosas en concreto con cada objeto ahora mismo pues vamos a hacer un main con 171 00:10:44,389 --> 00:10:52,210 funcionalidades simplemente para ver cómo funcionan los list y los set 172 00:10:52,210 --> 00:10:56,250 Vale, pues ahora le hacemos aquí un main 173 00:10:56,250 --> 00:11:03,919 Bueno, pues los datos 174 00:11:03,919 --> 00:11:07,840 ¿Dónde van a estar nuestros datos reales de trabajo? 175 00:11:07,919 --> 00:11:09,919 Hemos dicho que un conjunto de profesores 176 00:11:09,919 --> 00:11:14,679 Venga, ¿dónde vamos a crear esa variable conjunto de profesores? 177 00:11:14,759 --> 00:11:16,340 Ya sabemos que tenemos un montón de opciones 178 00:11:16,340 --> 00:11:17,600 ¿Vale? 179 00:11:17,600 --> 00:11:20,220 Si la creamos local aquí dentro 180 00:11:20,220 --> 00:11:24,220 Hay que pasársela luego a cada método que hagamos aquí fuera 181 00:11:24,220 --> 00:11:25,419 Eso ya lo sabemos 182 00:11:25,419 --> 00:11:34,159 porque será una variable local y visible solo aquí, como solamente vamos a tener un conjunto de profesores y solo uno, un conjunto, 183 00:11:34,639 --> 00:11:43,080 nos podemos permitir declararla como estática, porque solo va a haber uno, un conjunto de profesores global para toda la aplicación. 184 00:11:43,500 --> 00:11:51,320 Entonces, si nos podemos permitir declararla como estática, nos podemos permitir declararla aquí fuera, porque entonces el main ya la va a poder usar, 185 00:11:51,320 --> 00:11:54,860 porque el main ya sabemos que este static lo tiene sí o sí 186 00:11:54,860 --> 00:11:59,120 porque esta cabecera es obligatoria para que la máquina virtual lo identifique 187 00:11:59,120 --> 00:12:03,580 entonces eso hace que el main 188 00:12:03,580 --> 00:12:07,120 solo pueda usar variables que 189 00:12:07,120 --> 00:12:12,200 están con el modificador static fuera de su ámbito 190 00:12:12,200 --> 00:12:15,419 como acabamos de decir que el conjunto de profesores 191 00:12:15,419 --> 00:12:19,679 solo va a haber uno global para toda la aplicación nos podemos permitir declararlo como estático 192 00:12:19,679 --> 00:12:21,700 pues ala 193 00:12:21,700 --> 00:12:23,860 lo podemos poner aquí fuera 194 00:12:23,860 --> 00:12:32,600 vale set 195 00:12:32,600 --> 00:12:34,500 pues lo importamos de java útil 196 00:12:34,500 --> 00:12:40,039 eh 197 00:12:40,039 --> 00:12:44,019 ah no 198 00:12:44,019 --> 00:12:45,860 lo voy a declarar dentro porque 199 00:12:45,860 --> 00:12:47,600 lo voy a declarar dentro porque así 200 00:12:47,600 --> 00:12:52,399 eh vemos una cosita 201 00:12:52,399 --> 00:12:54,399 más vale lo vamos a 202 00:12:54,399 --> 00:12:56,519 declarar dentro podríamos declararlo fuera como estático 203 00:12:56,519 --> 00:12:58,179 y listo la ventaja de declararlo fuera ya 204 00:12:58,179 --> 00:12:59,139 sabríamos cual es 205 00:12:59,139 --> 00:13:02,399 que ahora todas estas funcionalidades que pongamos 206 00:13:02,399 --> 00:13:04,320 aquí como métodos aparte para ser llamadas 207 00:13:04,320 --> 00:13:06,159 desde main, todas estas funcionalidades 208 00:13:06,159 --> 00:13:08,340 no necesitan que 209 00:13:08,340 --> 00:13:10,000 se les pase por parámetro 210 00:13:10,000 --> 00:13:12,340 el conjunto de profesores, porque 211 00:13:12,340 --> 00:13:13,960 al estar como static aquí fuera 212 00:13:13,960 --> 00:13:15,940 pueden acceder directamente a él 213 00:13:15,940 --> 00:13:18,220 siempre y cuando sean métodos estáticos, claro 214 00:13:18,220 --> 00:13:20,100 siempre y cuando sean métodos estáticos 215 00:13:20,100 --> 00:13:22,159 vale, pero 216 00:13:22,159 --> 00:13:23,960 la voy a declarar dentro 217 00:13:23,960 --> 00:13:26,240 con lo cual me voy a obligar a pasarla 218 00:13:26,240 --> 00:13:27,799 por parámetro a los métodos 219 00:13:27,799 --> 00:13:29,360 y así 220 00:13:29,360 --> 00:13:32,320 lo retorcemos un poco para que nos 221 00:13:32,320 --> 00:13:34,440 Vuelvo a quedar claro algunas cuestiones de herencias. 222 00:13:35,299 --> 00:13:36,799 Vale, pues los profesores van a estar aquí. 223 00:13:37,700 --> 00:13:42,639 Van a ser mi variable un conjunto de profesor. 224 00:13:42,720 --> 00:13:45,399 La voy a parametrizar por lo mismo que ya hemos dicho mil veces. 225 00:13:45,399 --> 00:13:55,179 Porque en el conjunto quiero que ya en tiempo de compilación se me esfuerce a que solo meta profesores. 226 00:13:55,460 --> 00:14:00,059 Así me evito errores de ejecución en iteraciones, en casting varios. 227 00:14:00,059 --> 00:14:03,360 Pues aquí tengo mis profesores 228 00:14:03,360 --> 00:14:08,759 Vale, inicialmente el conjunto de profesores va a ser un conjunto vacío 229 00:14:08,759 --> 00:14:11,019 Aquí en nuestro caso, en una situación real 230 00:14:11,019 --> 00:14:14,700 Ese conjunto de profesores podríamos haberlo volcado de una base de datos 231 00:14:14,700 --> 00:14:16,019 De un fichero, de donde fuera 232 00:14:16,019 --> 00:14:19,460 Pero ahora mismo no sabemos volcar de una base de datos ni de un fichero 233 00:14:19,460 --> 00:14:24,779 Pues una colección vacía 234 00:14:24,779 --> 00:14:26,860 ¿Cuál? 235 00:14:26,860 --> 00:14:30,059 Solo hemos mencionado Hachette ahora mismo 236 00:14:30,059 --> 00:14:31,320 No nos ha dado tiempo a más 237 00:14:31,320 --> 00:14:33,159 Así que vamos a poner esa 238 00:14:33,159 --> 00:14:35,500 Hachette 239 00:14:35,500 --> 00:14:39,759 ¡Hala! Ya está 240 00:14:39,759 --> 00:14:43,399 Y ahora, ¿qué vamos a hacer con los profesores de nuestro instituto? 241 00:14:43,519 --> 00:14:44,519 Pues los que nos dice aquí 242 00:14:44,519 --> 00:14:49,000 Vamos a insertar uno nuevo que ha llegado al centro 243 00:14:49,000 --> 00:14:51,559 Con sus datos, pero sin alumnos todavía 244 00:14:51,559 --> 00:14:52,259 Pero acaba de llegar 245 00:14:52,259 --> 00:14:55,399 Vale, meterle alumnos a los profesores 246 00:14:55,399 --> 00:14:56,840 Inicialmente con nota 0 247 00:14:56,840 --> 00:15:00,039 luego poner notas a los alumnos de un profesor 248 00:15:00,039 --> 00:15:02,500 a un alumno de un profesor, bueno, claro, poner una nota 249 00:15:02,500 --> 00:15:06,220 de cada profesor, ver el porcentaje de aprobados que tiene 250 00:15:06,220 --> 00:15:09,659 si me dice un alumno, oye, ¿cuáles son mis profes? 251 00:15:09,860 --> 00:15:11,820 dime tu NIF, pues estos son tus profes 252 00:15:11,820 --> 00:15:14,399 si me viene el profesor y me dice 253 00:15:14,399 --> 00:15:16,580 oye, dime los alumnos que tengo yo 254 00:15:16,580 --> 00:15:20,240 pues ala, dame tu NIF, te digo, estos son tus alumnos 255 00:15:20,240 --> 00:15:23,580 y ahora, oye, que un alumno se me ha dado de baja, venga, te lo quito 256 00:15:23,580 --> 00:15:26,360 pues esto es lo que esta aplicación va a hacer 257 00:15:26,360 --> 00:15:51,669 ¿Vale? Diferentes utilidades. Pues venga, vamos a hacer la primera. Utilidad de insertar profesor. La vamos a poner aquí. Insertar profesor. Vale. Vamos a ver qué datos necesitamos. 258 00:15:51,669 --> 00:16:04,990 Bueno, esta funcionalidad sí o sí va a necesitar la colección de profesores en la que vamos a hacer la inserción 259 00:16:04,990 --> 00:16:07,190 La va a necesitar sí o sí la colección 260 00:16:07,190 --> 00:16:15,149 Porque el resultado de esta funcionalidad es coger los datos del profesor nuevo y meterlos en esta colección 261 00:16:15,149 --> 00:16:19,889 Entonces va a necesitar los datos del profesor nuevo y la colección 262 00:16:19,889 --> 00:16:22,490 Vale, pues entonces tres parámetros 263 00:16:22,490 --> 00:16:25,350 Porque hemos dicho que va a meter los datos del profe 264 00:16:25,350 --> 00:16:27,690 Que es NIF y nombre sin los alumnos, ¿verdad? 265 00:16:27,970 --> 00:16:29,330 NIF y nombre sin los alumnos 266 00:16:29,330 --> 00:16:32,789 Entonces los dos primeros datos pues están claros 267 00:16:32,789 --> 00:16:38,480 Va a necesitar NIF y nombre 268 00:16:38,480 --> 00:16:40,980 Pero también necesita la cajita 269 00:16:40,980 --> 00:16:44,320 Necesita la cajita para meter ese profe dentro, el conjunto 270 00:16:44,320 --> 00:16:47,820 Vale, entonces este método 271 00:16:47,820 --> 00:16:55,120 Si lo queremos hacer lo más independiente, lo más aislado posible del resto del código 272 00:16:55,120 --> 00:17:02,120 Podemos decir, oye, la caja en la que yo voy a meter mis profesores 273 00:17:02,120 --> 00:17:06,119 Me da igual si es una lista, si es un set 274 00:17:06,119 --> 00:17:07,400 Me da igual 275 00:17:07,400 --> 00:17:14,970 Entonces, si a este método queremos que le dé exactamente igual 276 00:17:14,970 --> 00:17:18,410 Si esa caja que le pasamos es una lista o un conjunto 277 00:17:18,410 --> 00:17:22,130 pues entonces ponemos que el tipo de ese dato es collection 278 00:17:22,130 --> 00:17:25,410 porque ya sabemos que todas las listas y todos los conjuntos 279 00:17:25,410 --> 00:17:27,250 son implementaciones de collection 280 00:17:27,250 --> 00:17:32,730 importemos esta interfaz o clase abstracta 281 00:17:32,730 --> 00:17:33,690 de Java útil 282 00:17:33,690 --> 00:17:36,410 entonces con esto que hemos ganado 283 00:17:36,410 --> 00:17:39,470 que este método sea separado 284 00:17:39,470 --> 00:17:42,170 del resto del código 285 00:17:42,170 --> 00:17:44,529 porque si ahora el código cambia 286 00:17:44,529 --> 00:17:48,190 y decimos, oye ahora ya no quiero un set 287 00:17:48,190 --> 00:17:49,990 ahora quiero que esto sea una lista 288 00:17:49,990 --> 00:17:52,269 porque han cambiado 289 00:17:52,269 --> 00:17:54,049 mis requisitos 290 00:17:54,049 --> 00:17:55,789 y ahora me interesa más que sea una lista 291 00:17:55,789 --> 00:17:58,430 pues esto lo tengo que cambiar porque es una lista 292 00:17:58,430 --> 00:18:00,089 pero este módulo, perdón 293 00:18:00,089 --> 00:18:00,890 este método 294 00:18:00,890 --> 00:18:03,829 perfectamente sigue aquí con su collection 295 00:18:03,829 --> 00:18:05,289 no tengo que cambiar nada 296 00:18:05,289 --> 00:18:07,950 porque list sigue siendo 297 00:18:07,950 --> 00:18:09,230 una implementación de collection 298 00:18:09,230 --> 00:18:12,009 entonces que he ganado poniendo aquí 299 00:18:12,009 --> 00:18:13,130 una super clase 300 00:18:13,130 --> 00:18:16,250 hacer este método mucho más general 301 00:18:16,250 --> 00:18:17,529 y más independiente 302 00:18:17,529 --> 00:18:21,369 que parte de mi aplicación cambia y ahora decido que uso listas 303 00:18:21,369 --> 00:18:22,829 pues este no le toco 304 00:18:22,829 --> 00:18:29,369 y eso es un objetivo deseable en el desarrollo de una aplicación 305 00:18:29,369 --> 00:18:32,910 que cuando yo quiero modificar una parte porque han cambiado mis condiciones 306 00:18:32,910 --> 00:18:37,930 eso implique modificar lo menos posible del resto de la aplicación 307 00:18:37,930 --> 00:18:39,990 si yo aquí hubiera puesto 308 00:18:39,990 --> 00:18:44,750 un set, pues fenomenal 309 00:18:44,750 --> 00:18:46,650 pero fenomenal cuando esto sea set 310 00:18:46,650 --> 00:18:48,750 Pero cuando eso sea list 311 00:18:48,750 --> 00:18:51,109 Pues entonces tengo que venir y cambiar aquí a list 312 00:18:51,109 --> 00:18:51,730 ¿Vale? 313 00:18:53,269 --> 00:18:54,769 Entonces eso es 314 00:18:54,769 --> 00:18:57,049 Lo que he ganado poniendo aquí collection 315 00:18:57,049 --> 00:18:59,390 Haber modularizado ese código 316 00:18:59,390 --> 00:19:01,849 Haberlo independizado 317 00:19:01,849 --> 00:19:02,930 Unas partes de otras 318 00:19:02,930 --> 00:19:04,109 Haberlas independizado 319 00:19:04,109 --> 00:19:06,150 ¿Vale? 320 00:19:07,009 --> 00:19:08,269 A cambio que he perdido 321 00:19:08,269 --> 00:19:09,950 Pues ya lo vamos a ver 322 00:19:09,950 --> 00:19:12,789 Que 323 00:19:12,789 --> 00:19:15,509 Como esta colección está declarada 324 00:19:15,509 --> 00:19:16,430 Como collection 325 00:19:16,430 --> 00:19:19,549 por mucho que esté instanciada luego como set 326 00:19:19,549 --> 00:19:21,529 como list, como sea, como está declarada 327 00:19:21,529 --> 00:19:23,589 como collection, solo vamos 328 00:19:23,589 --> 00:19:25,609 a poder, el compilador solo 329 00:19:25,609 --> 00:19:27,569 nos va a poder dejar, solo nos va a dejar llamar 330 00:19:27,569 --> 00:19:29,589 a los métodos de collection, a menos que yo 331 00:19:29,589 --> 00:19:30,410 haga un casting 332 00:19:30,410 --> 00:19:33,569 pero en este caso como lo que vamos a insertar que es un 333 00:19:33,569 --> 00:19:35,470 add y el método add está en collection 334 00:19:35,470 --> 00:19:38,069 pues no tenemos ningún problema, declaremoslo 335 00:19:38,069 --> 00:19:40,029 declaremos una referencia 336 00:19:40,029 --> 00:19:42,089 siempre como la mayor super clase 337 00:19:42,089 --> 00:19:44,130 que tiene los métodos que a mi me interesan 338 00:19:44,130 --> 00:19:46,250 como aquí me interesa 339 00:19:46,250 --> 00:19:48,309 ¿Add está en Collection? 340 00:19:48,650 --> 00:19:50,990 Sí, magnífico, declarala como Collection 341 00:19:50,990 --> 00:19:53,869 Y así la has hecho lo más general posible 342 00:19:53,869 --> 00:19:56,750 Vale, pues venga 343 00:19:56,750 --> 00:20:02,529 Ahora, pues insertar profesor, pues hombre, más fácil imposible 344 00:20:02,529 --> 00:20:05,390 Vamos a meter en profesores 345 00:20:05,390 --> 00:20:09,069 Add existe 346 00:20:09,069 --> 00:20:10,890 Porque Add está en Collection 347 00:20:10,890 --> 00:20:13,150 Vamos a añadir el nuevo profesor 348 00:20:13,150 --> 00:20:24,430 Un nuevo profesor con datos ni fin nombre, los que me han dado, a ver qué constructores tenía el profesor. 349 00:20:25,410 --> 00:20:35,549 Tenía un constructor con los tres parámetros, esto de aquí, pero lo voy a modificar porque es un poco tonto que le pase el tercer parámetro 350 00:20:35,549 --> 00:20:38,769 si en el momento de instanciarlo ya lo estoy inicializando vacío. 351 00:20:39,089 --> 00:20:42,650 Entonces voy a modificar este constructor para que esto fuera. 352 00:20:42,650 --> 00:20:49,359 Normalmente las colecciones no las inicializo por constructores 353 00:20:49,359 --> 00:20:52,819 ¡Hala! Pues entonces 354 00:20:52,819 --> 00:20:55,279 NIF, nombre 355 00:20:55,279 --> 00:21:00,480 Ahí tengo mi nuevo profesor 356 00:21:00,480 --> 00:21:04,700 Pero ya podemos ir adelantando 357 00:21:04,700 --> 00:21:06,759 Para que esta aplicación tenga sentido 358 00:21:06,759 --> 00:21:09,660 Y no tenga un funcionamiento, unos efectos secundarios extraños 359 00:21:09,660 --> 00:21:11,759 Para que esta aplicación tenga sentido 360 00:21:11,759 --> 00:21:16,460 No me debería dejar meter al mismo profesor con el mismo NIF varias veces 361 00:21:16,460 --> 00:21:18,619 Porque a lo mejor se ha equivocado 362 00:21:18,619 --> 00:21:21,019 Él se ha olvidado de que ya fue a dar sus datos 363 00:21:21,019 --> 00:21:23,180 Y vuelve al día siguiente a dar sus datos 364 00:21:23,180 --> 00:21:25,599 Y me aparece en la aplicación dos profesores con el mismo nivel 365 00:21:25,599 --> 00:21:28,619 Eso puede generar efectos secundarios en la aplicación 366 00:21:28,619 --> 00:21:29,559 Que no nos interesan 367 00:21:29,559 --> 00:21:32,119 Vale, pues entonces 368 00:21:32,119 --> 00:21:35,259 ¿Cómo evitamos esto? 369 00:21:35,740 --> 00:21:36,640 Pues lo evitamos 370 00:21:36,640 --> 00:21:38,799 Permitiéndole al set 371 00:21:38,799 --> 00:21:42,039 Distinguir cuando un profesor es igual a otro 372 00:21:42,039 --> 00:21:45,440 Ahora mismo no solo hemos permitido distinguir 373 00:21:45,440 --> 00:21:47,740 Porque el profesor no tiene ni Haskell ni Equals. 374 00:21:48,740 --> 00:21:54,059 Entonces, este método add de set, cuando coja el nuevo profesor, va a ver. 375 00:21:54,619 --> 00:21:59,140 Oye, este ya existe, porque yo soy un set y yo no permito meter nada que no exista. 376 00:21:59,279 --> 00:22:00,119 Este ya existe. 377 00:22:00,980 --> 00:22:05,099 Como no tiene Haskell ni Equals, cogerá el de object y el de object te dice. 378 00:22:05,500 --> 00:22:08,220 Oye, es otra instancia, otra dirección de memoria. 379 00:22:08,519 --> 00:22:09,279 Pues es distinto. 380 00:22:09,920 --> 00:22:14,059 Porque eso significa ser distinto para object. 381 00:22:14,059 --> 00:22:16,240 para object ser distinto es 382 00:22:16,240 --> 00:22:17,940 direcciones de memoria separadas 383 00:22:17,940 --> 00:22:19,940 entonces claro, esta dirección de memoria 384 00:22:19,940 --> 00:22:21,759 es separada respecto a la de otro 385 00:22:21,759 --> 00:22:23,400 con el mismo nif que se metiera ayer 386 00:22:23,400 --> 00:22:26,359 entonces el set te lo mete dentro 387 00:22:26,359 --> 00:22:27,759 y estupendo 388 00:22:27,759 --> 00:22:29,940 te has quedado en tu set con dos profesores con el mismo nif 389 00:22:29,940 --> 00:22:30,640 pues mal 390 00:22:30,640 --> 00:22:33,799 pues para que ese set no haga eso 391 00:22:33,799 --> 00:22:35,920 y no me meta un profesor 392 00:22:35,920 --> 00:22:37,619 con el mismo nif dos veces 393 00:22:37,619 --> 00:22:39,319 vamos a darle el criterio de igualdad 394 00:22:39,319 --> 00:22:42,319 ¿y cómo se da el criterio de igualdad 395 00:22:42,319 --> 00:22:42,960 para el add? 396 00:22:42,960 --> 00:22:45,799 Y para cualquiera de los métodos de una colección 397 00:22:45,799 --> 00:22:48,359 Pues depende del tipo de colección 398 00:22:48,359 --> 00:22:51,259 ¿Qué tipo de colección es profesores? 399 00:22:52,319 --> 00:22:53,619 Pues profesores es 400 00:22:53,619 --> 00:22:55,980 La que yo le voy a pasar va a ser un set 401 00:22:55,980 --> 00:22:57,000 Voy a pasar un set 402 00:22:57,000 --> 00:23:00,599 Un haset, mejor dicho 403 00:23:00,599 --> 00:23:03,180 Un haset es lo que yo habré instanciado 404 00:23:03,180 --> 00:23:06,759 Vale, pues como esta colección será un haset 405 00:23:06,759 --> 00:23:10,359 Para que el método add pueda distinguir 406 00:23:10,359 --> 00:23:12,640 Si un profesor es igual a otro 407 00:23:12,640 --> 00:23:19,579 él evaluará en cascada el Hasco de Equals, ya sabemos lo que eso hace, te lleva a la tabla Has, va por la lista enlazada, etc. 408 00:23:20,980 --> 00:23:26,839 Y la sucesión de Hasco de Equals es la que te permite, la que le permitirá a este método ver si un profesor es igual a otro. 409 00:23:27,920 --> 00:23:35,480 Luego, es el momento de verificar, oye, ¿tengo un profesor Hasco de Equals? Pues no, no tengo un profesor Hasco de Equals, 410 00:23:35,839 --> 00:23:40,799 así que vamos a hacerlo, menos mal que no tenemos que escribirlo a mano, porque tenemos este. 411 00:23:40,799 --> 00:23:42,759 ¿Cuál es mi criterio de igualdad? 412 00:23:42,920 --> 00:23:43,279 El NIF 413 00:23:43,279 --> 00:23:45,859 Profesores del mismo NIF son el mismo 414 00:23:45,859 --> 00:23:47,599 Pues hala 415 00:23:47,599 --> 00:23:50,660 Ya tengo el jasco de equals 416 00:23:50,660 --> 00:23:53,160 Vale, magnífico 417 00:23:53,160 --> 00:23:54,799 Pues este método ya está 418 00:23:54,799 --> 00:23:58,900 Ya sabemos que este método 419 00:23:58,900 --> 00:24:01,180 Además de meter al profesor 420 00:24:01,180 --> 00:24:02,160 Si no existe 421 00:24:02,160 --> 00:24:04,559 O no hacer nada si el profesor ya existe 422 00:24:04,559 --> 00:24:06,779 Te devuelve un valor de control 423 00:24:06,779 --> 00:24:07,480 Un boolean 424 00:24:07,480 --> 00:24:10,539 Que puede ser 425 00:24:10,539 --> 00:24:12,759 ¿vale? que es true o false 426 00:24:12,759 --> 00:24:13,819 aquí está el boolean 427 00:24:13,819 --> 00:24:16,960 que es true o false en función de si realmente 428 00:24:16,960 --> 00:24:18,640 se insertó algo o no 429 00:24:18,640 --> 00:24:19,859 porque ya estaba 430 00:24:19,859 --> 00:24:22,480 podemos usarlo, podemos usarlo 431 00:24:22,480 --> 00:24:23,960 si queremos como valor de control 432 00:24:23,960 --> 00:24:26,640 ¿vale? y decir a este método que devuelva 433 00:24:26,640 --> 00:24:27,980 boolean, pues yo que sé 434 00:24:27,980 --> 00:24:30,180 podemos usarlo, decir oye 435 00:24:30,180 --> 00:24:32,599 si devuelve 436 00:24:32,599 --> 00:24:34,279 aparte de hacer la inserción, porque 437 00:24:34,279 --> 00:24:36,440 te hará la inserción, aparte de hacerla 438 00:24:36,440 --> 00:24:38,839 de paso devuélveme el true o false 439 00:24:38,839 --> 00:24:40,240 para que yo pueda verificar 440 00:24:40,240 --> 00:24:42,900 con el resultado de este método, si me da la gana 441 00:24:42,900 --> 00:24:44,539 pueda llevar un control 442 00:24:44,539 --> 00:24:45,700 de si se hizo 443 00:24:45,700 --> 00:24:48,099 la inserción o no se hizo 444 00:24:48,099 --> 00:24:51,039 ¿vale? lo habitual es llevar ese control 445 00:24:51,039 --> 00:24:52,359 con los boolean 446 00:24:52,359 --> 00:24:52,960 ¿vale? 447 00:24:54,599 --> 00:24:55,119 bueno 448 00:24:55,119 --> 00:24:58,359 pues insertar profesor ya está 449 00:24:58,359 --> 00:24:59,539 no tiene más historia 450 00:24:59,539 --> 00:25:01,200 venga 451 00:25:01,200 --> 00:25:04,119 agregar nuevo alumno a un profesor 452 00:25:04,119 --> 00:25:06,660 pues esto gracias a que ya no usamos 453 00:25:06,660 --> 00:25:08,319 a raíz, esto ya es facilísimo 454 00:25:08,319 --> 00:25:09,960 venga 455 00:25:09,960 --> 00:25:12,519 agregar un nuevo alumno 456 00:25:12,519 --> 00:25:14,880 alumno nuevo a un profesor 457 00:25:14,880 --> 00:25:16,099 pues ala 458 00:25:16,099 --> 00:25:17,079 static 459 00:25:17,079 --> 00:25:19,859 de nuevo vamos a adelantarnos 460 00:25:19,859 --> 00:25:22,200 haciendo que devuelva boolean 461 00:25:22,200 --> 00:25:23,559 que nos sirva como valor de control 462 00:25:23,559 --> 00:25:26,779 si realmente se insertó de forma efectiva el alumno o no 463 00:25:26,779 --> 00:25:30,839 añade un alumno 464 00:25:30,839 --> 00:25:32,059 a un profesor 465 00:25:32,059 --> 00:25:33,500 ¿qué datos va a necesitar este método? 466 00:25:34,299 --> 00:25:35,259 el alumno es nuevo 467 00:25:35,259 --> 00:25:37,160 pues un if y su nombre 468 00:25:37,160 --> 00:25:39,819 porque nos han dicho que la nota cuando le metas un alumno 469 00:25:39,819 --> 00:25:52,450 a un profesor la nota sea cero, luego no hay que ponerle la nota, pues el NIF del alumno 470 00:25:52,450 --> 00:25:59,890 y el nombre del alumno, vale, hay que agregárselo a un profesor en concreto, luego hay que identificar 471 00:25:59,890 --> 00:26:05,950 a qué profesor se lo agrego, pues ese es otro dato que vamos a necesitar, el NIF del 472 00:26:05,950 --> 00:26:12,529 profesor al que se lo voy a agregar, y dónde está mi caja de datos, dónde está mi cajita 473 00:26:12,529 --> 00:26:14,509 de datos donde yo voy a hacer estas cosas 474 00:26:14,509 --> 00:26:16,390 buscar el profesor, una vez que he encontrado 475 00:26:16,390 --> 00:26:18,170 el profesor en la caja, meterle al alumno 476 00:26:18,170 --> 00:26:19,490 donde está mi cajita de datos 477 00:26:19,490 --> 00:26:22,009 pues mi cajita de datos se la tengo que pasar 478 00:26:22,009 --> 00:26:24,210 porque la he declarado localmente 479 00:26:24,210 --> 00:26:25,130 ¿vale? 480 00:26:26,269 --> 00:26:27,950 repito, si lo hubiéramos declarado fuera 481 00:26:27,950 --> 00:26:29,809 como estático, obligatoriamente 482 00:26:29,809 --> 00:26:32,309 no tendría que pasársela 483 00:26:32,309 --> 00:26:33,609 ¿vale? 484 00:26:33,930 --> 00:26:36,109 pero lo he declarado dentro a propósito 485 00:26:36,109 --> 00:26:38,109 simplemente para 486 00:26:38,109 --> 00:26:39,950 verlo de colección 487 00:26:39,950 --> 00:26:40,690 nada más 488 00:26:40,690 --> 00:26:44,809 Pues venga, vamos a pasarle la cajita 489 00:26:44,809 --> 00:26:49,460 ¡Hala! 490 00:26:50,480 --> 00:26:52,140 Ahora ya este método tiene que hacer 491 00:26:52,140 --> 00:26:53,740 Pues buscar en la cajita 492 00:26:53,740 --> 00:26:56,200 Buscar hasta que encuentre el profesor con ese nif 493 00:26:56,200 --> 00:26:56,880 Ya está 494 00:26:56,880 --> 00:26:58,680 La cajita es un set 495 00:26:58,680 --> 00:27:02,720 Luego la cajita tiene que iterar 496 00:27:02,720 --> 00:27:03,859 Perdón 497 00:27:03,859 --> 00:27:05,819 Lo que tenemos es que iterar por el set 498 00:27:05,819 --> 00:27:06,599 Vale 499 00:27:06,599 --> 00:27:09,640 Es un set, no tiene posiciones 500 00:27:09,640 --> 00:27:11,779 No podemos iterar 501 00:27:11,779 --> 00:27:17,000 con un for de índice, posición 1, posición 2 502 00:27:17,000 --> 00:27:20,799 posición 3, no podemos, tenemos que iterar 503 00:27:20,799 --> 00:27:24,880 o con un for each o con un iterador que todavía no hemos visto 504 00:27:24,880 --> 00:27:28,140 vale, mucho más recomendable con un iterador 505 00:27:28,140 --> 00:27:32,700 pues venga, vamos a iterar por ahora con un for each 506 00:27:32,700 --> 00:27:36,619 pues ala, para cada profesor 507 00:27:36,619 --> 00:27:39,700 p en mi cajita de profesores 508 00:27:39,700 --> 00:27:44,839 Vamos a buscar el profesor que yo quiero 509 00:27:44,839 --> 00:27:51,539 Si este profesor que yo estoy cogiendo de la cajita 510 00:27:51,539 --> 00:27:59,839 Resulta que su NIF es igual al NIF del profesor que me han dado 511 00:27:59,839 --> 00:28:01,559 Ya lo he encontrado 512 00:28:01,559 --> 00:28:03,039 Ya lo he encontrado 513 00:28:03,039 --> 00:28:05,059 Pues ¿qué tengo que hacer? 514 00:28:05,799 --> 00:28:08,859 Pues coger sus alumnos que son una lista 515 00:28:08,859 --> 00:28:35,519 Y a esta lista le tengo que añadir el nuevo alumno, el nuevo alumno con nif alumno, nif, perdón, nombre alumno y como me han dicho nota cero, pues cero. 516 00:28:35,519 --> 00:28:41,019 entonces este método 517 00:28:41,019 --> 00:28:42,779 add pues me devuelve 518 00:28:42,779 --> 00:28:44,019 vale 519 00:28:44,019 --> 00:28:46,180 aquí aunque 520 00:28:46,180 --> 00:28:48,240 como alumnos es una lista 521 00:28:48,240 --> 00:28:51,400 aunque exista ya un alumno 522 00:28:51,400 --> 00:28:53,079 con ese nif aunque ya 523 00:28:53,079 --> 00:28:54,940 exista lo va a agregar 524 00:28:54,940 --> 00:28:56,920 igualmente porque 525 00:28:56,920 --> 00:28:58,819 la lista si admite duplicados 526 00:28:58,819 --> 00:28:59,559 vale 527 00:28:59,559 --> 00:29:02,200 entonces si yo agrego al alumno 528 00:29:02,200 --> 00:29:05,180 de nif1 y mañana agrego al alumno 529 00:29:05,180 --> 00:29:07,200 de nif1 otra vez va a estar en la lista 530 00:29:07,200 --> 00:29:08,299 en diferente posición 531 00:29:08,299 --> 00:29:11,339 ¿vale? entonces depende 532 00:29:11,339 --> 00:29:13,160 aquí lo estamos haciendo pues 533 00:29:13,160 --> 00:29:14,299 para ejemplificar la 534 00:29:14,299 --> 00:29:17,220 forma diferente que tienen de funcionar 535 00:29:17,220 --> 00:29:18,480 listas y conjuntos 536 00:29:18,480 --> 00:29:21,140 pues depende si yo quiero que pase eso o no quiero 537 00:29:21,140 --> 00:29:22,900 que pase eso pues uso un conjunto 538 00:29:22,900 --> 00:29:25,119 o uso una lista pero solo en el caso 539 00:29:25,119 --> 00:29:26,339 de que no exista etc. 540 00:29:26,920 --> 00:29:28,960 ¿vale? entonces por ejemplo aquí 541 00:29:28,960 --> 00:29:30,000 para 542 00:29:30,000 --> 00:29:33,500 seguir viendo cosas de listas 543 00:29:33,500 --> 00:29:37,759 entonces nosotros aquí antes de agregarlo 544 00:29:37,759 --> 00:29:40,900 podríamos hacer lo siguiente 545 00:29:40,900 --> 00:29:45,539 que es antes de agregarlo vamos a decir oye no espérate 546 00:29:45,539 --> 00:29:49,279 yo solamente quiero hacer este ad 547 00:29:49,279 --> 00:29:53,339 solo quiero hacer este ad si el alumno no está previamente en la lista 548 00:29:53,339 --> 00:29:57,059 porque si está previamente en la lista no quiero añadirle 549 00:29:57,059 --> 00:30:01,440 vale pues entonces que podemos hacer 550 00:30:01,440 --> 00:30:11,519 Tenemos un método, que es el método contains, ¿vale? 551 00:30:11,680 --> 00:30:13,859 Que está también en, es de collection. 552 00:30:14,519 --> 00:30:23,339 Tenemos el método contains, que tú le pasas un objeto y te dice, te devuelve true o false, 553 00:30:24,000 --> 00:30:30,519 en función de si existe o no un objeto igual a este en esta lista. 554 00:30:31,700 --> 00:30:33,420 Entonces, esta es la idea de lo que querríamos hacer, ¿no? 555 00:30:33,859 --> 00:30:34,420 Querríamos. 556 00:30:34,859 --> 00:30:44,660 Si no, si no existe un objeto igual a este en esta lista, solo en ese caso lo añado. 557 00:30:46,240 --> 00:30:50,900 Si esto fuera un set, nos ahorraríamos esto, porque ya sabemos que un set ya lo hace el solito. 558 00:30:52,900 --> 00:30:58,160 Bueno, pues si no existe un objeto igual a este en esta lista, lo añadimos. 559 00:30:58,160 --> 00:31:00,599 vale, entonces para que este 560 00:31:00,599 --> 00:31:02,259 contains haga lo que queremos 561 00:31:02,259 --> 00:31:04,140 aquí tendremos que pasarle 562 00:31:04,140 --> 00:31:06,000 un objeto 563 00:31:06,000 --> 00:31:08,859 igual al objeto 564 00:31:08,859 --> 00:31:11,000 alumno, que vamos a insertar 565 00:31:11,000 --> 00:31:12,000 vale 566 00:31:12,000 --> 00:31:14,900 aquí nos viene de nuevo lo de la igualdad 567 00:31:14,900 --> 00:31:16,779 espérate, en alumno 568 00:31:16,779 --> 00:31:18,059 ¿qué significa ser igual? 569 00:31:18,319 --> 00:31:20,099 ¿qué significa ser igual en alumno? 570 00:31:21,240 --> 00:31:22,339 vámonos aquí a alumno 571 00:31:22,339 --> 00:31:24,839 en el sentido de mi aplicación 572 00:31:24,839 --> 00:31:26,539 va a ser que 573 00:31:26,539 --> 00:31:27,799 sea en el mismo nif 574 00:31:27,799 --> 00:31:30,240 El NIF sería la clave primaria 575 00:31:30,240 --> 00:31:33,680 Pues para que esta aplicación tenga sentido 576 00:31:33,680 --> 00:31:35,880 Dos alumnos son iguales y su NIF es el mismo 577 00:31:35,880 --> 00:31:38,079 Pero es que eso yo no lo he reflejado 578 00:31:38,079 --> 00:31:40,019 Aquí, yo no lo he reflejado 579 00:31:40,019 --> 00:31:43,480 Entonces, el criterio de igualdad 580 00:31:43,480 --> 00:31:45,579 Lo tengo que reflejar 581 00:31:45,579 --> 00:31:48,279 Si quiero que el resto de la aplicación sea coherente con él 582 00:31:48,279 --> 00:31:49,900 ¿Cómo lo reflejo? 583 00:31:50,380 --> 00:31:52,059 ¿Con jasco de equals con los dos? 584 00:31:52,259 --> 00:31:53,359 ¿O con equals solo? 585 00:31:54,599 --> 00:31:55,119 Depende 586 00:31:55,119 --> 00:32:04,000 depende de qué colección esté usando este guardando alumnos vámonos aquí estoy hablando 587 00:32:04,000 --> 00:32:11,059 de la colección está los alumnos del profesor los alumnos del profesor que son son una lista 588 00:32:11,059 --> 00:32:19,119 bueno pues la lista solo necesita el método equals para comprobar la igualdad solo con lo 589 00:32:19,119 --> 00:32:25,380 cual esto me va a funcionar bien si yo pongo aquí el jasco de iguales perdón el licua sólo 590 00:32:27,420 --> 00:32:40,089 basado en que en mi clave primaria a ver puede dejar el jasco si no molesta lo que pasa es que 591 00:32:40,089 --> 00:32:46,309 los métodos de list los métodos de list sólo van a mirar y cuáles para ver la igualdad solo pero 592 00:32:46,309 --> 00:32:53,890 bueno el jasco no molesta y si lo dejo que ventaja saco que si luego cambio mi aplicación y empiezo 593 00:32:53,890 --> 00:32:55,789 hacer conjuntos de alumnos 594 00:32:55,789 --> 00:32:57,450 haset de alumnos 595 00:32:57,450 --> 00:32:59,809 o linked haset, entonces voy a 596 00:32:59,809 --> 00:33:01,390 tener que incorporar el hascode, entonces ya sí 597 00:33:01,390 --> 00:33:03,809 entonces bueno, como no molesta, lo puedo dejar 598 00:33:03,809 --> 00:33:06,109 ahí y si en futuras ampliaciones 599 00:33:06,109 --> 00:33:07,650 de mi aplicación empiezo a usar 600 00:33:07,650 --> 00:33:09,710 haset de alumnos, pues 601 00:33:09,710 --> 00:33:11,349 ya lo tengo, no tengo que incorporarlo 602 00:33:11,349 --> 00:33:12,789 bueno, pues lo puedo dejar 603 00:33:12,789 --> 00:33:15,009 bueno, pues entonces ahora ya 604 00:33:15,009 --> 00:33:17,670 este contains ya va a ser 605 00:33:17,670 --> 00:33:19,789 capaz de saber qué significa ser 606 00:33:19,789 --> 00:33:21,890 igual a, porque tiene el equals en alumno 607 00:33:21,890 --> 00:33:23,730 pues ahora lo único que tengo que hacer es 608 00:33:23,730 --> 00:33:25,670 pasarle yo un objeto igual 609 00:33:25,670 --> 00:33:27,470 al que quiero verificar si existe 610 00:33:27,470 --> 00:33:29,250 pues hombre 611 00:33:29,250 --> 00:33:31,769 para 612 00:33:31,769 --> 00:33:33,789 entenderlo, le paso yo 613 00:33:33,789 --> 00:33:34,930 un objeto cualquiera 614 00:33:34,930 --> 00:33:36,630 con ese if 615 00:33:36,630 --> 00:33:41,680 el nombre me da lo mismo 616 00:33:41,680 --> 00:33:43,559 el nombre me da 617 00:33:43,559 --> 00:33:45,160 lo mismo, le puedo poner un null 618 00:33:45,160 --> 00:33:47,460 tranquilamente y la nota 619 00:33:47,460 --> 00:33:48,380 me da lo mismo 620 00:33:48,380 --> 00:33:50,660 porque este objeto de aquí 621 00:33:50,660 --> 00:33:53,380 está creado, solo 622 00:33:53,380 --> 00:33:55,039 está creado, solo 623 00:33:55,039 --> 00:33:57,039 para dárselo al contains 624 00:33:57,039 --> 00:34:00,119 y que el contains busque a ver 625 00:34:00,119 --> 00:34:01,680 si hay alguno igual a este 626 00:34:01,680 --> 00:34:03,980 y cuando el contains va a decir 627 00:34:03,980 --> 00:34:05,220 si hay alguno igual a este 628 00:34:05,220 --> 00:34:07,640 pues cuando haya uno cuyo nif sea igual 629 00:34:07,640 --> 00:34:10,619 porque el equals solo tiene el nif 630 00:34:10,619 --> 00:34:12,559 luego por eso 631 00:34:12,559 --> 00:34:14,159 aquí me da igual lo que le ponga 632 00:34:14,159 --> 00:34:14,599 me da igual 633 00:34:14,599 --> 00:34:17,860 pero eso sí, al contains hay que pasarle un objeto alumno 634 00:34:17,860 --> 00:34:20,420 la igualdad es entre objeto 635 00:34:20,420 --> 00:34:22,280 alumno y objeto alumno 636 00:34:22,280 --> 00:34:24,360 no tiene sentido que yo aquí le pase 637 00:34:24,360 --> 00:34:26,719 solamente un if, porque la igualdad 638 00:34:26,719 --> 00:34:28,760 no es entre if y alumno 639 00:34:28,760 --> 00:34:30,380 la igualdad es entre objeto 640 00:34:30,380 --> 00:34:31,900 alumno y objeto alumno 641 00:34:31,900 --> 00:34:34,139 entonces le tengo que pasar un objeto alumno 642 00:34:34,139 --> 00:34:36,260 pero eso sí, estos dos parámetros me dan 643 00:34:36,260 --> 00:34:38,380 exactamente igual, porque el equals 644 00:34:38,380 --> 00:34:40,300 que va a usar contains para ver 645 00:34:40,300 --> 00:34:42,320 si existe alguno igual a este 646 00:34:42,320 --> 00:34:43,199 en esta colección 647 00:34:43,199 --> 00:34:45,260 solo va a mirar esto de aquí 648 00:34:45,260 --> 00:34:48,159 bueno, pues entonces ahora ya sí 649 00:34:48,159 --> 00:34:50,280 si no existe 650 00:34:50,280 --> 00:34:52,239 un alumno igual 651 00:34:52,239 --> 00:34:54,320 que este, o lo que es 652 00:34:54,320 --> 00:35:04,079 mismo con ese en mi colección de alumnos si no existe pues lo añades y ya está como hemos puesto 653 00:35:04,079 --> 00:35:13,400 el valor boolean de control pues le podemos poner aquí un retorno y estupendo porque así ya matamos 654 00:35:13,400 --> 00:35:17,360 dos pájaros de un tiro vamos a devolver el true o el falso que en este caso será true porque la 655 00:35:17,360 --> 00:35:20,840 inserción se va a hacer de forma efectiva a menos que falle alguna otra cosa extraña 656 00:35:20,840 --> 00:35:24,480 no solo ya tenemos el valor de retorno 657 00:35:24,480 --> 00:35:26,280 sino que 658 00:35:26,280 --> 00:35:27,199 además 659 00:35:27,199 --> 00:35:29,860 paramos ya el for 660 00:35:29,860 --> 00:35:32,179 ¿vale? como solo va a haber 661 00:35:32,179 --> 00:35:34,400 un profesor con este nif, se supone 662 00:35:34,400 --> 00:35:35,840 solo va a haber un profesor con ese nif 663 00:35:35,840 --> 00:35:37,440 pues ya paramos el for each 664 00:35:37,440 --> 00:35:40,300 el for each no se está ahí hasta el infinito, es como hacer un break 665 00:35:40,300 --> 00:35:42,000 bueno, feillo 666 00:35:42,000 --> 00:35:43,059 pero ya está 667 00:35:43,059 --> 00:35:46,179 ¿vale? nos da un error 668 00:35:46,179 --> 00:35:48,320 de compilación que es 669 00:35:48,320 --> 00:35:50,099 fácilmente esperable 670 00:35:50,099 --> 00:35:53,639 que te dice, oye, cuidadín 671 00:35:53,639 --> 00:35:59,480 y que pasa si no encuentro ningún profesor con este NIF 672 00:35:59,480 --> 00:36:02,139 no entraríamos jamás a este NIF 673 00:36:02,139 --> 00:36:06,280 con lo cual nunca saldríamos por este retun 674 00:36:06,280 --> 00:36:08,280 llegaríamos a este punto de aquí fuera 675 00:36:08,280 --> 00:36:12,619 y el método necesita un retun, sí o sí lo necesita 676 00:36:12,619 --> 00:36:13,840 porque me devuelve un boolean 677 00:36:13,840 --> 00:36:16,019 el método necesita un retun, sí o sí 678 00:36:16,019 --> 00:36:19,460 pues hombre, si yo salgo del método por este camino 679 00:36:19,460 --> 00:36:21,860 porque no encontré ningún profesor 680 00:36:21,860 --> 00:36:24,000 con ese nif, si salgo del método por este camino 681 00:36:24,000 --> 00:36:25,320 el return hay que dárselo igual 682 00:36:25,320 --> 00:36:27,559 no habría que dárselo si fuera un void 683 00:36:27,559 --> 00:36:29,360 claro, pero es un boolean 684 00:36:29,360 --> 00:36:30,500 bueno, pues 685 00:36:30,500 --> 00:36:33,179 ¿qué return le damos en ese caso? 686 00:36:33,500 --> 00:36:35,480 pues false, porque es que no he hecho ninguna inserción 687 00:36:35,480 --> 00:36:37,739 pues magnífico, este valor 688 00:36:37,739 --> 00:36:39,679 boolean efectivamente nos va a devolver 689 00:36:39,679 --> 00:36:40,679 nos va a devolver true 690 00:36:40,679 --> 00:36:43,940 si hemos encontrado al profe y le hemos insertado 691 00:36:43,940 --> 00:36:45,039 el alumno 692 00:36:45,039 --> 00:36:46,679 ¿vale? 693 00:36:46,679 --> 00:36:49,800 Y nos va a devolver 694 00:36:49,800 --> 00:36:51,280 False en caso contrario 695 00:36:51,280 --> 00:36:53,579 Si no hemos encontrado al profesor 696 00:36:53,579 --> 00:36:56,039 O si habiendo encontrado al profesor 697 00:36:56,039 --> 00:36:58,239 Tiene ya a ese alumno 698 00:36:58,239 --> 00:37:00,380 Que es justo lo que queremos 699 00:37:00,380 --> 00:37:00,880 True 700 00:37:00,880 --> 00:37:04,139 Si se hizo la funcionalidad de forma efectiva 701 00:37:04,139 --> 00:37:04,920 False 702 00:37:04,920 --> 00:37:06,599 Si no se hizo de forma efectiva 703 00:37:06,599 --> 00:37:08,500 ¿Verdad que sí? 704 00:37:10,260 --> 00:37:10,760 Venga 705 00:37:10,760 --> 00:37:14,380 Adalumno profesor 706 00:37:14,380 --> 00:37:15,880 Estaría ahí 707 00:37:15,880 --> 00:37:22,260 poner nota a un alumno de un profesor 708 00:37:22,260 --> 00:37:24,119 dado, pues vamos a ir 709 00:37:24,119 --> 00:37:38,269 método, pues mira, ya que nos estamos 710 00:37:38,269 --> 00:37:42,570 aficionando a los valores de control true o false para ver si el método 711 00:37:42,570 --> 00:37:46,469 de forma efectiva ha cumplido con su funcionalidad o no, vamos a seguir con el boolean 712 00:37:46,469 --> 00:37:47,889 y ahora venga 713 00:37:47,889 --> 00:37:54,570 poner nota, poner nota a quien? a un alumno 714 00:37:54,570 --> 00:38:09,730 alumno. ¿A un alumno de quién? De un profesor. ¿Qué nota? Pues no lo sé, vamos a dársela. 715 00:38:10,929 --> 00:38:14,429 ¿Y dónde está mi caja de trabajo? ¿Dónde están los profesores? ¿Mis datos? ¿Dónde 716 00:38:14,429 --> 00:38:27,349 están mis datos? Pues están aquí. Aquí le paso la cajita. ¿Más datos? Pues no, 717 00:38:27,829 --> 00:38:31,510 que me vengan a mí a la cabeza, no van a necesitar más datos. Pues el mismo rollo, 718 00:38:31,610 --> 00:38:36,469 vamos a tener que iterar por la caja de profes, hasta encontrar el profesor. Cuando encontremos 719 00:38:36,469 --> 00:38:38,590 el profesor, localizar al alumno 720 00:38:38,590 --> 00:38:40,190 con ese NIF y ponerle la nota. 721 00:38:41,230 --> 00:38:42,670 Es un rollo de iteraciones. 722 00:38:43,329 --> 00:38:44,789 Es un rollo de iteraciones. 723 00:38:46,429 --> 00:38:48,309 ¿Por qué? Porque tenemos una caja 724 00:38:48,309 --> 00:38:50,429 ahí con todos los profesores a mogollón. 725 00:38:51,610 --> 00:38:52,789 Y para localizar 726 00:38:52,789 --> 00:38:54,889 uno, hay que ponerse a iterar. 727 00:38:55,130 --> 00:38:56,429 ¿Eres tú? No. ¿Eres tú? No. 728 00:38:56,510 --> 00:38:57,550 ¿Eres tú? No. ¿Eres tú? No. 729 00:38:58,230 --> 00:39:00,349 Este rollo de iterar en la caja hasta que 730 00:39:00,349 --> 00:39:02,150 encontramos el que queremos, 731 00:39:03,230 --> 00:39:04,309 nos lo van a facilitar 732 00:39:04,309 --> 00:39:05,650 los mapas y diccionarios. 733 00:39:06,469 --> 00:39:13,949 Porque cuando buscamos un significado en un diccionario, no nos vamos por todos los significados del libro hasta que encontramos el que queremos. 734 00:39:14,690 --> 00:39:19,130 No, nos vamos directamente a la palabra que está ordenada por orden alfabético. 735 00:39:19,230 --> 00:39:21,289 Nos vamos a la palabra y ahí nos vamos a tiro fijo. 736 00:39:22,550 --> 00:39:27,389 Pues los mapas, que todavía no hemos visto, van a evitarnos todo este rollo de iteraciones. 737 00:39:27,650 --> 00:39:32,630 Pero ahora tenemos un conjunto, pues hay que meternos en la caja y empezar a sacar, a sacar, a sacar. 738 00:39:32,630 --> 00:39:34,949 De nuevo, no tenemos el literador 739 00:39:34,949 --> 00:39:37,610 Un rollo, porque literador es la mejor forma de literar 740 00:39:37,610 --> 00:39:39,409 No lo tenemos porque no lo hemos visto 741 00:39:39,409 --> 00:39:42,010 Pues ala, literamos otra vez 742 00:39:42,010 --> 00:39:46,320 En nuestra cajita 743 00:39:46,320 --> 00:39:49,119 Literamos en nuestra cajita 744 00:39:49,119 --> 00:39:51,639 A ver si encontramos al profesor 745 00:39:51,639 --> 00:39:52,820 Con ese nif 746 00:39:52,820 --> 00:40:00,500 ¿Y cuál es el nif de profesor? 747 00:40:01,320 --> 00:40:02,699 Uy, ya me he encontrado 748 00:40:02,699 --> 00:40:04,380 Al profesor correspondiente 749 00:40:04,380 --> 00:40:06,599 Vale, pues ahora 750 00:40:06,599 --> 00:40:20,079 nos toca iterar por su cajita de alumnos hasta encontrar el alumno con este NIF, ¿vale? Cuando 751 00:40:20,079 --> 00:40:26,159 lo encontremos le ponemos la nota y punto pelota, ¿vale? Pero aquí vamos a operar de forma distinta. 752 00:40:29,909 --> 00:40:35,869 Los alumnos del profesor tenemos la suerte de que son una lista. Esto, que son los alumnos del 753 00:40:35,869 --> 00:40:40,710 Entonces, como son una lista, tienen posición. 754 00:40:42,150 --> 00:40:52,190 Entonces, si yo tuviera la suerte de tener la posición del alumno con ese NIF, 755 00:40:52,190 --> 00:40:55,550 si yo tuviera la suerte de tener la posición del alumno con ese NIF, 756 00:40:55,909 --> 00:41:01,670 si la tuviera, genial, porque me cojo al alumno de esa posición, 757 00:41:01,670 --> 00:41:04,210 que podré hacerlo porque esto es una lista 758 00:41:04,210 --> 00:41:06,030 que podré hacerlo 759 00:41:06,030 --> 00:41:07,929 y a este alumno ya 760 00:41:07,929 --> 00:41:10,289 le pongo la nota que sea 761 00:41:10,289 --> 00:41:11,489 ¿vale? 762 00:41:13,170 --> 00:41:14,090 pero claro 763 00:41:14,090 --> 00:41:16,090 el problema es que, jolines, ¿y cuál es la 764 00:41:16,090 --> 00:41:17,989 posición del alumno con ese NIF? 765 00:41:18,650 --> 00:41:20,289 ojalá la tuviera, pero no la tengo 766 00:41:20,289 --> 00:41:21,570 ¡ah! 767 00:41:22,070 --> 00:41:22,530 ojo 768 00:41:22,530 --> 00:41:26,090 las listas tienen un método 769 00:41:26,090 --> 00:41:28,369 que es el método 770 00:41:28,369 --> 00:41:29,409 indexOf 771 00:41:29,409 --> 00:41:32,090 que no tienen los conjuntos 772 00:41:32,090 --> 00:41:34,309 porque los conjuntos no tienen posiciones 773 00:41:34,309 --> 00:41:36,929 entonces las listas 774 00:41:36,929 --> 00:41:38,170 sí que tienen este método 775 00:41:38,170 --> 00:41:40,489 que este método 776 00:41:40,489 --> 00:41:41,449 te devuelve 777 00:41:41,449 --> 00:41:44,610 la primera posición 778 00:41:44,610 --> 00:41:46,349 en la que ha encontrado 779 00:41:46,349 --> 00:41:48,269 un objeto igual a este 780 00:41:48,269 --> 00:41:49,010 que tú le des 781 00:41:49,010 --> 00:41:52,530 entonces esto te va a devolver 782 00:41:52,530 --> 00:41:53,110 una posición 783 00:41:53,110 --> 00:41:58,099 ¿y qué posición te va a devolver? 784 00:41:58,219 --> 00:42:00,840 te va a devolver la posición dentro de la lista 785 00:42:00,840 --> 00:42:03,840 La primera en la que ha encontrado un objeto igual a ese 786 00:42:03,840 --> 00:42:05,519 Pues justo lo que queremos 787 00:42:05,519 --> 00:42:10,659 Vamos a pasarle aquí un objeto igual al alumno que estamos buscando 788 00:42:10,659 --> 00:42:12,860 Un objeto igual al que estamos buscando 789 00:42:12,860 --> 00:42:14,059 Y ya tengo su posición 790 00:42:14,059 --> 00:42:20,159 Pues venga, para eso me creo un alumno igual al que estoy buscando 791 00:42:20,159 --> 00:42:23,699 Y como el criterio de igualdad que hemos programado en Equals 792 00:42:23,699 --> 00:42:25,460 Solo se basa en alumno 793 00:42:25,460 --> 00:42:29,559 Pues yo aquí le paso cualquier nombre y cualquier cosa al constructor 794 00:42:29,559 --> 00:42:31,599 si tuviera un constructor solo con clave primaria 795 00:42:31,599 --> 00:42:33,199 con el nif, pues más cómodo 796 00:42:33,199 --> 00:42:33,780 no lo tengo 797 00:42:33,780 --> 00:42:36,960 vale, pues ya está, genial 798 00:42:36,960 --> 00:42:39,280 este índice me da 799 00:42:39,280 --> 00:42:41,960 la posición, la primera posición que ha encontrado 800 00:42:41,960 --> 00:42:43,420 única, porque 801 00:42:43,420 --> 00:42:45,219 cuando estamos insertando alumnos 802 00:42:45,219 --> 00:42:47,500 no los estamos insertando repetidos, gracias a este 803 00:42:47,500 --> 00:42:47,960 contains 804 00:42:47,960 --> 00:42:51,480 la primera y única posición 805 00:42:51,480 --> 00:42:53,400 en este caso, que ha encontrado donde hay un alumno 806 00:42:53,400 --> 00:42:55,739 con ese nif, ostras, pues magnífico 807 00:42:55,739 --> 00:42:57,579 me voy a la lista 808 00:42:57,579 --> 00:43:00,679 y ahora ya a esta lista 809 00:43:00,679 --> 00:43:02,920 recupero el alumno por su posición 810 00:43:02,920 --> 00:43:04,619 cosa que puedo hacer 811 00:43:04,619 --> 00:43:05,679 porque es una lista 812 00:43:05,679 --> 00:43:07,619 no es un conjunto 813 00:43:07,619 --> 00:43:09,780 lo recupero por su posición 814 00:43:09,780 --> 00:43:11,320 y ahora ya a este alumno le digo 815 00:43:11,320 --> 00:43:14,119 tú, nota la que me han pasado 816 00:43:14,119 --> 00:43:15,039 y ya está 817 00:43:15,039 --> 00:43:17,699 ¿vale? y ya está 818 00:43:17,699 --> 00:43:19,699 entonces 819 00:43:19,699 --> 00:43:22,079 si he llegado hasta aquí 820 00:43:22,079 --> 00:43:23,559 es que he encontrado el profe 821 00:43:23,559 --> 00:43:25,280 dentro del profe 822 00:43:25,280 --> 00:43:37,139 Vale, he encontrado el alumno, bueno, espérate, porque index of, si no encuentra, hay que ver que te devuelve pos, menos 1, ¿vale? 823 00:43:37,139 --> 00:43:50,739 Cuidadín, te devuelve menos 1, entonces esto habría que meterlo dentro de un if pos diferente de menos 1, no vaya a ser que hagamos un get menos 1, excepción, ¿vale? 824 00:43:50,739 --> 00:43:53,360 Si post es 825 00:43:53,360 --> 00:43:56,940 E mayor 826 00:43:56,940 --> 00:43:58,780 O igual que 0 827 00:43:58,780 --> 00:44:01,119 Es decir, me ha encontrado una posición 828 00:44:01,119 --> 00:44:03,159 0, 1, 2, 3, la que sea 829 00:44:03,159 --> 00:44:04,340 Me ha encontrado una posición 830 00:44:04,340 --> 00:44:06,179 Ahí, ojo 831 00:44:06,179 --> 00:44:09,280 Y ya aprovecho y con el retun me voy de ahí 832 00:44:09,280 --> 00:44:11,559 Como si fuera un break 833 00:44:11,559 --> 00:44:13,139 Aprovecho 834 00:44:13,139 --> 00:44:15,719 Ya encontré el profe, ya encontré el alumno 835 00:44:15,719 --> 00:44:17,460 A la aprovecho y me piro 836 00:44:17,460 --> 00:44:19,500 Me piro con un retun true 837 00:44:19,500 --> 00:44:21,099 Porque se ha hecho 838 00:44:21,099 --> 00:44:22,000 Todo lo que había que hacer 839 00:44:22,000 --> 00:44:24,820 me piro de ahí, pero ya sabemos 840 00:44:24,820 --> 00:44:26,739 lógicamente que el compilador que mira 841 00:44:26,739 --> 00:44:28,420 la línea de flujo, dice 842 00:44:28,420 --> 00:44:30,800 ah, sí, claro, ¿y qué pasa si nunca 843 00:44:30,800 --> 00:44:32,739 encuentras profesor 844 00:44:32,739 --> 00:44:34,860 con lo cual nunca entras en este if 845 00:44:34,860 --> 00:44:36,699 o si entrando en ese if 846 00:44:36,699 --> 00:44:38,639 no encuentras al alumno, luego 847 00:44:38,639 --> 00:44:40,280 no sales por aquí, ¿qué pasa? 848 00:44:40,519 --> 00:44:42,139 si llegamos a este punto de aquí 849 00:44:42,139 --> 00:44:44,719 pues si llegamos a ese punto 850 00:44:44,719 --> 00:44:45,280 de ahí 851 00:44:45,280 --> 00:44:48,519 lo que ha pasado es que no hemos 852 00:44:48,519 --> 00:44:49,179 encontrado 853 00:44:49,179 --> 00:44:52,360 los datos que buscábamos 854 00:44:52,360 --> 00:44:54,599 pues entonces tenemos que irnos del método igualmente 855 00:44:54,599 --> 00:44:56,619 pero en este caso devolviendo falso 856 00:44:56,619 --> 00:44:57,960 vale 857 00:44:57,960 --> 00:45:00,519 el compilador se queda tranquilo 858 00:45:00,519 --> 00:45:01,679 y el método bien hecho 859 00:45:01,679 --> 00:45:04,000 vale pues ya está 860 00:45:04,000 --> 00:45:07,179 a ver vamos a parar aquí un momentito