1 00:00:02,990 --> 00:00:35,270 Bueno, pues a partir de la idea, de la idea de gestionar un conjunto de discos, ¿vale? Pues, bueno, pues mi colección de, ¿vale? Entonces, la discoteca tiene una temática. 2 00:00:35,270 --> 00:00:44,030 Tienes que crear 3 00:00:44,030 --> 00:00:46,289 Claro, porque Remusol necesita una colección 4 00:00:46,289 --> 00:00:48,289 Entonces tienes que pasarle una colección 5 00:00:48,289 --> 00:00:49,789 Que hayas creado previamente 6 00:00:49,789 --> 00:00:52,670 Bueno, pues entonces 7 00:00:52,670 --> 00:00:54,109 String temática 8 00:00:54,109 --> 00:01:04,980 Y ahora vamos a hacer que la discoteca tenga 9 00:01:04,980 --> 00:01:07,500 Una lista de discos 10 00:01:07,500 --> 00:01:08,680 ¿Vale? 11 00:01:08,680 --> 00:01:10,400 Pero discos 12 00:01:10,400 --> 00:01:11,540 Que sea una interfaz 13 00:01:11,540 --> 00:01:13,599 Porque como podemos tener varios tipos de discos 14 00:01:13,599 --> 00:01:15,640 Podemos tener, vamos a inventarnos 15 00:01:15,640 --> 00:01:16,760 Yo que sé, cualquier chorrada 16 00:01:16,760 --> 00:01:17,859 Pues 17 00:01:17,859 --> 00:01:26,599 Es que solo se me ocurre vinilo 18 00:01:26,599 --> 00:01:28,459 O CD 19 00:01:28,459 --> 00:01:30,760 Y habría que poner 20 00:01:30,760 --> 00:01:32,459 Características, venga 21 00:01:32,459 --> 00:01:34,680 Aunque salga cosarra, vamos a hacerlo así 22 00:01:34,680 --> 00:01:35,739 ¿Vale? O sea 23 00:01:35,739 --> 00:01:38,859 La discoteca se caracteriza por la temática 24 00:01:38,859 --> 00:01:40,659 Esta es sobre rock, vale 25 00:01:40,659 --> 00:01:42,579 Ya está, mi temática es sobre rock 26 00:01:42,579 --> 00:01:44,959 y tengo un conjunto de discos en ella 27 00:01:44,959 --> 00:01:45,840 que voy a gestionar 28 00:01:45,840 --> 00:01:48,099 que son de diferentes tipos 29 00:01:48,099 --> 00:01:50,879 pero yo me voy a crear una interfaz 30 00:01:50,879 --> 00:01:53,040 disco, una interfaz disco 31 00:01:53,040 --> 00:01:55,079 y lo que tenga 32 00:01:55,079 --> 00:01:56,859 en esa discoteca van a ser 33 00:01:56,859 --> 00:01:59,140 discos, del tipo que sea, no lo sé 34 00:01:59,140 --> 00:02:03,180 y ahora ya pues podemos 35 00:02:03,180 --> 00:02:05,019 hacer aquí un constructor 36 00:02:05,019 --> 00:02:13,620 con los parámetros 37 00:02:13,620 --> 00:02:15,879 bueno, un gettyset 38 00:02:15,879 --> 00:02:16,319 perdón 39 00:02:16,319 --> 00:02:19,099 y un constructor 40 00:02:19,099 --> 00:02:30,460 y un constructor sin parámetros 41 00:02:30,460 --> 00:02:40,810 vale, y list 42 00:02:40,810 --> 00:02:42,669 lo podemos importar de java útil 43 00:02:42,669 --> 00:02:45,009 bueno, no me... 44 00:02:45,009 --> 00:02:46,969 luego lo importamos cuando tengamos disco hecho 45 00:02:46,969 --> 00:02:48,750 vale, entonces, ahora esta 46 00:02:48,750 --> 00:02:51,150 aplicación se amplía 47 00:02:51,150 --> 00:02:52,849 porque ahora ya discos 48 00:02:52,849 --> 00:02:54,930 decidimos que podemos tener varios 49 00:02:54,930 --> 00:02:56,889 tipos de discos y cada uno de ellos funciona 50 00:02:56,889 --> 00:02:58,930 de una manera distinta, entonces hacer 51 00:02:58,930 --> 00:03:00,930 una única clase disco 52 00:03:00,930 --> 00:03:02,789 que recoja todo 53 00:03:02,789 --> 00:03:04,930 pues a lo mejor embarbulla la aplicación 54 00:03:04,930 --> 00:03:07,129 entonces decidimos, no, mejor tengo 55 00:03:07,129 --> 00:03:09,430 dos clases, para dos tipos de discos distintos 56 00:03:09,430 --> 00:03:11,090 y dejo que disco sea 57 00:03:11,090 --> 00:03:12,849 la interfaz que la implementan 58 00:03:12,849 --> 00:03:14,110 y ya está, pues por ejemplo 59 00:03:14,110 --> 00:03:16,909 lo estoy haciendo sobre la marcha 60 00:03:16,909 --> 00:03:18,189 para ver situaciones que nos van dando 61 00:03:18,189 --> 00:03:20,509 vale, pero antes que lo entendamos 62 00:03:20,509 --> 00:03:22,770 bueno, pues en ese caso disco sería una interfaz 63 00:03:22,770 --> 00:03:24,030 y entonces 64 00:03:24,030 --> 00:03:26,349 todos mis discos van a ser 65 00:03:26,349 --> 00:03:28,569 implementaciones concretas de esta interfaz 66 00:03:28,569 --> 00:03:30,389 pero algunos serán 67 00:03:30,389 --> 00:03:32,789 discos de vinilo y otros de eso 68 00:03:32,789 --> 00:03:33,870 como se quiera ver 69 00:03:33,870 --> 00:03:36,870 Bueno, pues entonces vamos a crear esa interfaz disco 70 00:03:36,870 --> 00:03:47,590 Bueno, y aquí 71 00:03:47,590 --> 00:03:49,370 Aquí 72 00:03:49,370 --> 00:03:52,590 ¿Qué propiedades comunes van a tener? 73 00:03:53,229 --> 00:03:54,250 No, perdón, es una interfaz 74 00:03:54,250 --> 00:03:55,569 Aquí no hay propiedades, olvidadlo 75 00:03:55,569 --> 00:03:58,110 Vale, entonces aquí podríamos decir 76 00:03:58,110 --> 00:04:00,430 A ver, ¿qué funcionalidades queremos asociar 77 00:04:00,430 --> 00:04:01,349 A los discos? 78 00:04:01,789 --> 00:04:04,169 A todos ellos, sean de vinilo o sean de CD 79 00:04:04,169 --> 00:04:04,810 Me da lo mismo 80 00:04:04,810 --> 00:04:06,469 Pues por ejemplo 81 00:04:06,469 --> 00:04:09,969 Todos ellos nos vamos a querer a lo mejor reproducir 82 00:04:09,969 --> 00:04:10,969 Por ejemplo, ¿no? 83 00:04:11,289 --> 00:04:13,889 pues vamos a suponer que hacemos un método 84 00:04:13,889 --> 00:04:16,170 que se llama 85 00:04:16,170 --> 00:04:18,269 reproducir 86 00:04:18,269 --> 00:04:24,759 vale, me da igual que la aplicación 87 00:04:24,759 --> 00:04:25,899 tenga mucho sentido o no lo tenga 88 00:04:25,899 --> 00:04:27,920 ahora mismo lo que queremos es 89 00:04:27,920 --> 00:04:30,519 practicar con el funcionamiento 90 00:04:30,519 --> 00:04:32,860 de interfaces, colecciones, todo eso 91 00:04:32,860 --> 00:04:36,759 una interfaz, pues método abstracto 92 00:04:37,360 --> 00:04:40,740 vale, no hace falta que ponga public 93 00:04:40,740 --> 00:04:42,939 porque por defecto todas las interfaces 94 00:04:42,939 --> 00:04:44,060 sus métodos son public 95 00:04:44,060 --> 00:04:44,819 vale 96 00:04:44,819 --> 00:04:48,360 Podría dar una implementación por defecto 97 00:04:48,360 --> 00:04:50,160 Hay cosas de interfaces 98 00:04:50,160 --> 00:04:51,620 Que no hemos visto 99 00:04:51,620 --> 00:04:53,199 Para no embarullar 100 00:04:53,199 --> 00:04:55,259 Ya saldrán, ya irán saliendo 101 00:04:55,259 --> 00:04:57,680 Para nosotros 102 00:04:57,680 --> 00:04:59,660 Ahora mismo una interfaz es una colección 103 00:04:59,660 --> 00:05:01,019 De métodos vacíos 104 00:05:01,019 --> 00:05:03,839 Que luego ya las clases que los implementen 105 00:05:03,839 --> 00:05:05,040 Decidirán cómo lo hacen 106 00:05:05,040 --> 00:05:07,480 Y luego además puede haber 107 00:05:07,480 --> 00:05:09,019 Constantes ahí 108 00:05:09,019 --> 00:05:11,800 Porque si hay información interesante 109 00:05:11,800 --> 00:05:13,300 Relevante para todos los discos 110 00:05:13,300 --> 00:05:15,279 para todos, entonces puedo meter 111 00:05:15,279 --> 00:05:17,279 ahí una constante a lo mejor, pero si no 112 00:05:17,279 --> 00:05:19,139 necesito eso, pues no lo pongo 113 00:05:19,139 --> 00:05:21,439 ¿vale? ¿algún otro método que se le ocurra 114 00:05:21,439 --> 00:05:22,879 a alguien que puedan 115 00:05:22,879 --> 00:05:25,579 alguna otra funcionalidad 116 00:05:25,579 --> 00:05:27,160 asociada a todos los discos? bueno 117 00:05:27,160 --> 00:05:29,439 vamos a dejar una y ya está, como siempre lo mismo 118 00:05:29,439 --> 00:05:31,740 ¿vale? pues entonces 119 00:05:31,740 --> 00:05:33,339 disco ya lo 120 00:05:33,339 --> 00:05:35,259 tenemos, ya ponemos aquí importar list 121 00:05:35,259 --> 00:05:38,180 entonces aquí 122 00:05:38,180 --> 00:05:41,139 ya sí que no puedo hacer 123 00:05:41,139 --> 00:05:43,399 esa protección 124 00:05:43,399 --> 00:05:45,120 entre comillas que hacíamos a veces 125 00:05:45,120 --> 00:05:46,759 oye, no pasa nada 126 00:05:46,759 --> 00:05:49,040 vamos ya directamente a inicializar 127 00:05:49,040 --> 00:05:51,199 esta propiedad, a inicializarla 128 00:05:51,199 --> 00:05:52,779 creando una lista vacía 129 00:05:52,779 --> 00:05:55,199 y así cuando 130 00:05:55,199 --> 00:05:56,759 se crea un objeto discoteca 131 00:05:56,759 --> 00:05:59,220 inicialmente no tiene discos, a menos que 132 00:05:59,220 --> 00:06:01,420 luego yo se los vaya metiendo en el set o lo que sea 133 00:06:01,420 --> 00:06:03,220 pero al menos esto no es nul 134 00:06:03,220 --> 00:06:05,160 entonces eso 135 00:06:05,160 --> 00:06:06,819 siempre es un protege 136 00:06:06,819 --> 00:06:09,160 porque si alguien usa esa clase 137 00:06:09,160 --> 00:06:11,579 y de partida se pone a meter aquí 138 00:06:11,579 --> 00:06:14,259 y esto es null inicialmente 139 00:06:14,259 --> 00:06:15,939 le va a ser null pointer exception 140 00:06:15,939 --> 00:06:17,699 entonces recordad que decíamos 141 00:06:17,699 --> 00:06:18,980 bueno, no es mala práctica 142 00:06:18,980 --> 00:06:21,660 si yo tengo una propiedad que es una colección 143 00:06:21,660 --> 00:06:24,360 en una clase, aprovechar y dejarla 144 00:06:24,360 --> 00:06:25,300 instanciada 145 00:06:25,300 --> 00:06:27,540 y me aseguro 146 00:06:27,540 --> 00:06:28,160 uy, perdón 147 00:06:28,160 --> 00:06:42,000 ¿vale? y me aseguro 148 00:06:42,000 --> 00:06:43,600 de que no me va a seguir el null pointer exception 149 00:06:43,600 --> 00:06:44,560 ¿vale? 150 00:06:48,449 --> 00:06:49,970 lo único es que insisto 151 00:06:49,970 --> 00:06:53,209 Aquí uno ya se está comprometiendo 152 00:06:53,209 --> 00:06:54,129 A la implementación 153 00:06:54,129 --> 00:06:56,750 No pasa nada, luego uno puede usar 154 00:06:56,750 --> 00:06:59,269 Esta clase y sobreescribir 155 00:06:59,269 --> 00:07:01,250 Discos con otra colección, si le interesa 156 00:07:01,250 --> 00:07:02,589 ¿Vale? Sobreescribirla 157 00:07:02,589 --> 00:07:05,149 Bueno, pues esto es simplemente 158 00:07:05,149 --> 00:07:06,709 De cara a, oye 159 00:07:06,709 --> 00:07:08,529 Que de partida no sea nul 160 00:07:08,529 --> 00:07:10,910 No vaya a ser que alguien me use mal, no verifique 161 00:07:10,910 --> 00:07:12,370 Que esto no existe 162 00:07:12,370 --> 00:07:13,689 Se ponga a hacer un add 163 00:07:13,689 --> 00:07:15,930 ¿Vale? Bueno 164 00:07:15,930 --> 00:07:18,430 ¿Vale? Pues entonces 165 00:07:18,430 --> 00:07:19,470 Ahora 166 00:07:19,470 --> 00:07:21,970 los discos 167 00:07:21,970 --> 00:07:23,970 aquí es donde hemos decidido, nos hemos dado cuenta 168 00:07:23,970 --> 00:07:25,310 que hay dos tipos de discos 169 00:07:25,310 --> 00:07:28,209 pues entonces me hago una interfaz que unifique 170 00:07:28,209 --> 00:07:30,029 lo común, en este caso lo común 171 00:07:30,029 --> 00:07:32,230 se ha quedado muy escasito, se ha quedado en reproducir 172 00:07:32,230 --> 00:07:34,009 pero bueno, unifica 173 00:07:34,009 --> 00:07:35,870 lo común y ahora yo me hago ya 174 00:07:35,870 --> 00:07:37,250 dos 175 00:07:37,250 --> 00:07:39,689 implementaciones de esta interfaz 176 00:07:39,689 --> 00:07:43,610 pues entonces 177 00:07:43,610 --> 00:07:45,850 tengo 178 00:07:45,850 --> 00:07:57,300 vinilo que implementa 179 00:07:57,300 --> 00:07:59,300 disco, entonces al implementar 180 00:07:59,300 --> 00:08:01,420 disco tiene que obligatoriamente 181 00:08:01,420 --> 00:08:05,160 añadir 182 00:08:05,160 --> 00:08:07,000 la 183 00:08:07,000 --> 00:08:09,240 implementación de este método 184 00:08:09,240 --> 00:08:12,519 que habría que decidirla, claro 185 00:08:12,519 --> 00:08:14,899 cómo se reproduce el vinilo 186 00:08:14,899 --> 00:08:17,079 por lo pronto vamos a caracterizar sus propiedades 187 00:08:17,079 --> 00:08:19,040 pues las propiedades del vinilo 188 00:08:19,040 --> 00:08:21,180 que sean, pues por ejemplo 189 00:08:21,180 --> 00:08:21,879 el título 190 00:08:21,879 --> 00:08:30,069 y la colección 191 00:08:30,069 --> 00:08:32,549 de algo que lo pueda 192 00:08:32,549 --> 00:08:34,490 distinguir de un CD que solo tenga un vinilo 193 00:08:34,490 --> 00:08:35,330 que no tenga un CD 194 00:08:35,330 --> 00:08:38,070 vosotros 195 00:08:38,070 --> 00:08:38,309 claro 196 00:08:38,309 --> 00:08:39,210 vosotros un vinilo 197 00:08:39,210 --> 00:08:40,289 no sabéis ni lo que es 198 00:08:40,289 --> 00:08:41,250 eso que adornan 199 00:08:41,250 --> 00:08:42,190 las habitaciones infantiles 200 00:08:42,190 --> 00:08:42,370 ¿no? 201 00:08:43,350 --> 00:08:43,629 digamos 202 00:08:43,629 --> 00:08:44,970 ¿eh? 203 00:08:47,210 --> 00:08:47,409 hombre 204 00:08:47,409 --> 00:08:48,549 los frikis de la música 205 00:08:48,549 --> 00:08:49,570 lo siguen comprando 206 00:08:49,570 --> 00:08:52,970 bueno 207 00:08:52,970 --> 00:08:53,889 pues una cosa 208 00:08:53,889 --> 00:08:54,909 que puede caracterizar 209 00:08:54,909 --> 00:08:55,389 a los vinilos 210 00:08:55,389 --> 00:08:55,970 que no caracterizan 211 00:08:55,970 --> 00:08:56,350 a los CDs 212 00:08:56,350 --> 00:08:57,190 puede ser el radio 213 00:08:57,190 --> 00:08:58,470 porque los había pequeñitos 214 00:08:58,470 --> 00:08:58,929 y grandes 215 00:08:58,929 --> 00:08:59,669 ¿no? 216 00:09:02,340 --> 00:09:02,659 entonces 217 00:09:02,659 --> 00:09:03,919 es por poner una propiedad 218 00:09:03,919 --> 00:09:04,580 que tenga sentido 219 00:09:04,580 --> 00:09:05,200 que esté aquí 220 00:09:05,200 --> 00:09:06,500 y que no esté en el otro sitio 221 00:09:06,500 --> 00:09:09,980 Venga, pues ala, el radio 222 00:09:09,980 --> 00:09:13,320 Es que ni siquiera sé si se llamaba radio 223 00:09:13,320 --> 00:09:14,139 ¿Cómo se llamaba eso? 224 00:09:14,820 --> 00:09:16,259 Eran de 45 y de 33 225 00:09:16,259 --> 00:09:17,740 Ah, no, eso eran los disquetes 226 00:09:17,740 --> 00:09:21,679 No, los disquetes eran de 5 y medio y 3 y cuarto 227 00:09:21,679 --> 00:09:23,159 No, de 3 y medio y 5 y cuarto 228 00:09:23,159 --> 00:09:26,639 Y los vinilos eran de 45 y de 33 revoluciones 229 00:09:26,639 --> 00:09:27,080 Vale 230 00:09:27,080 --> 00:09:30,200 Claro, los pequeñitos tenían que ir a 45 revoluciones 231 00:09:30,200 --> 00:09:31,240 Y los grandes a 30 232 00:09:31,240 --> 00:09:32,639 Bueno, da igual 233 00:09:32,639 --> 00:09:36,580 Número de revoluciones por minuto 234 00:09:36,580 --> 00:09:38,779 Esto es lo que caracteriza 235 00:09:38,779 --> 00:09:40,620 El vinilo, que esto en un CD no tiene sentido 236 00:09:40,620 --> 00:09:41,220 Obviamente 237 00:09:41,220 --> 00:09:43,659 Vale, y ahora 238 00:09:43,659 --> 00:09:45,620 La colección de 239 00:09:45,620 --> 00:09:52,299 Número de revoluciones por minuto 240 00:09:52,299 --> 00:09:54,440 Venga, estamos a dejarlo así, sin nada más 241 00:09:54,440 --> 00:09:54,860 Ya está 242 00:09:54,860 --> 00:09:57,480 Pues reproducir 243 00:09:57,480 --> 00:09:59,980 Reproducir el vinilo 244 00:09:59,980 --> 00:10:01,860 Pues vamos a hacer que sea 245 00:10:01,860 --> 00:10:07,230 mostrar un mensajito reproduciendo 246 00:10:07,230 --> 00:10:12,350 este, ya está 247 00:10:12,350 --> 00:10:16,529 y aquí ponemos rápidamente los get y los set 248 00:10:16,529 --> 00:10:25,669 y un constructor sin parámetros 249 00:10:25,669 --> 00:10:29,169 para ir rápidos 250 00:10:29,169 --> 00:10:32,470 no le ponemos constructores, con lo cual se queda uno sin parámetros 251 00:10:32,470 --> 00:10:35,389 y luego ya podemos fijar con get y set y ya está 252 00:10:35,389 --> 00:10:37,809 vale, y ahora vamos a hacer el otro 253 00:10:37,809 --> 00:10:53,330 el cd, pues el cd también 254 00:10:53,330 --> 00:10:57,289 implementadisco 255 00:10:57,289 --> 00:11:00,070 implementadisco 256 00:11:00,070 --> 00:11:01,690 y aquí sus propiedades van a ser 257 00:11:01,690 --> 00:11:03,210 también el título 258 00:11:03,210 --> 00:11:09,139 el título es común en ambas 259 00:11:09,139 --> 00:11:11,200 pero no lo hemos podido poner en la interfaz 260 00:11:11,200 --> 00:11:13,220 porque la interfaz no admite propiedades 261 00:11:13,220 --> 00:11:15,720 si hubiéramos hecho otro diseño con una clase abstracta 262 00:11:15,720 --> 00:11:17,279 pues entonces sí 263 00:11:17,279 --> 00:11:19,220 podríamos haber puesto título en la clase abstracta 264 00:11:19,220 --> 00:11:21,539 pero como es una interfaz 265 00:11:21,539 --> 00:11:22,580 ahí no puede haber propiedades 266 00:11:22,580 --> 00:11:25,620 y aquí le vamos a poner que el cd se caracteriza 267 00:11:25,620 --> 00:11:27,919 por un conjunto de pistas 268 00:11:27,919 --> 00:11:29,159 de pistas 269 00:11:29,159 --> 00:11:42,899 y va a ser un conjunto 270 00:11:42,899 --> 00:11:44,639 con lo cual no van a tener posición 271 00:11:44,639 --> 00:11:47,059 sino que hay que seleccionarlas por el nombre 272 00:11:47,059 --> 00:11:48,080 de la pista 273 00:11:48,080 --> 00:11:50,100 por el nombre, vale 274 00:11:50,100 --> 00:11:52,500 un conjunto de pistas, va a tener el cd 275 00:11:52,500 --> 00:12:12,190 vale, luego 276 00:12:12,190 --> 00:12:15,929 hacemos este método, vamos a hacerle los get y los set 277 00:12:15,929 --> 00:12:17,509 para que 278 00:12:17,509 --> 00:12:21,620 para quitarlos de en medio 279 00:12:21,620 --> 00:12:23,659 cuanto antes, los get y set de esto 280 00:12:23,659 --> 00:12:33,120 sin constructor, constructor sin parámetros 281 00:12:33,120 --> 00:12:34,600 vale, importamos set 282 00:12:34,600 --> 00:12:37,340 no me deja todavía hasta que no 283 00:12:37,340 --> 00:12:38,940 bueno, entonces 284 00:12:38,940 --> 00:12:41,139 pista es otra clase a propósito 285 00:12:41,139 --> 00:12:43,259 es otra clase que pista va a tener 286 00:12:43,259 --> 00:12:44,019 dos propiedades 287 00:12:44,019 --> 00:12:46,860 el título y la duración 288 00:12:46,860 --> 00:12:49,080 y ya está, pues vamos a crear 289 00:12:49,080 --> 00:12:49,960 la clase pista 290 00:12:49,960 --> 00:12:56,399 con el título de la pista 291 00:12:56,399 --> 00:13:03,370 y la duración 292 00:13:03,370 --> 00:13:09,580 get y set 293 00:13:09,580 --> 00:13:17,440 bueno, a ver, pista 294 00:13:17,440 --> 00:13:20,639 Pista no es superclase 295 00:13:20,639 --> 00:13:21,379 Ni subclase 296 00:13:21,379 --> 00:13:24,879 No, pero pista no hereda de CD 297 00:13:24,879 --> 00:13:26,519 O sea, pista está en CD 298 00:13:26,519 --> 00:13:28,639 O sea, un CD 299 00:13:28,639 --> 00:13:29,899 Tiene pistas dentro 300 00:13:29,899 --> 00:13:32,460 Pero eso no es heredar, eso es composición 301 00:13:32,460 --> 00:13:34,279 O sea, esa relación está aquí ya 302 00:13:34,279 --> 00:13:35,519 Es decir, un CD 303 00:13:35,519 --> 00:13:37,919 Tiene pistas dentro 304 00:13:37,919 --> 00:13:39,440 O sea, hay una relación que es 305 00:13:39,440 --> 00:13:42,080 Una clase contiene dentro la otra 306 00:13:42,080 --> 00:13:43,600 Esa relación de composición 307 00:13:43,600 --> 00:13:45,200 Y una es heredar, que es 308 00:13:45,200 --> 00:13:47,919 Una clase es la otra 309 00:13:47,919 --> 00:13:49,419 Entonces la relación de herencia sería 310 00:13:49,419 --> 00:13:50,200 Si yo puedo decir 311 00:13:50,200 --> 00:13:52,500 Una pista es un CD 312 00:13:52,500 --> 00:13:54,059 No, una pista no es un CD 313 00:13:54,059 --> 00:13:56,139 Una pista está en un CD 314 00:13:56,139 --> 00:13:58,259 Entonces cuando tú tienes dos entidades 315 00:13:58,259 --> 00:13:59,279 Se puede relacionar como 316 00:13:59,279 --> 00:14:00,679 Esta es esta 317 00:14:00,679 --> 00:14:02,440 O esta está en esta 318 00:14:02,440 --> 00:14:03,820 Si tú puedes decir 319 00:14:03,820 --> 00:14:05,100 Esta es esta 320 00:14:05,100 --> 00:14:06,000 Una hereda de la otra 321 00:14:06,000 --> 00:14:09,320 ¿Perdón? 322 00:14:12,960 --> 00:14:13,600 Efectivamente 323 00:14:13,600 --> 00:14:16,480 entonces una pista está en un CD 324 00:14:16,480 --> 00:14:17,720 pero una pista no es un CD 325 00:14:17,720 --> 00:14:19,600 entonces no puedes hacer pista 326 00:14:19,600 --> 00:14:20,639 extens CD 327 00:14:20,639 --> 00:14:23,700 esa relación será que dentro 328 00:14:23,700 --> 00:14:25,679 de CD, dentro, aparece 329 00:14:25,679 --> 00:14:27,919 esto, dentro, que es la relación 330 00:14:27,919 --> 00:14:29,720 de composición, en realidad 331 00:14:29,720 --> 00:14:31,659 esto se llama composición, un CD 332 00:14:31,659 --> 00:14:33,200 está compuesto de pistas 333 00:14:33,200 --> 00:14:34,879 está compuesto de pistas 334 00:14:34,879 --> 00:14:37,740 vale, pues ya tenemos 335 00:14:37,740 --> 00:14:38,580 nuestra 336 00:14:38,580 --> 00:14:41,639 pista con duración y 337 00:14:41,639 --> 00:14:42,820 título y ya está 338 00:14:42,820 --> 00:14:46,580 y el cd que contiene pistas 339 00:14:46,580 --> 00:14:48,740 y tengo que importar 340 00:14:48,740 --> 00:14:49,240 set 341 00:14:49,240 --> 00:14:52,399 y poner esto bien, claro 342 00:14:52,399 --> 00:14:57,399 vale, reproducir 343 00:14:57,399 --> 00:14:59,799 pues el método reproducir de cd va a cambiar 344 00:14:59,799 --> 00:15:01,600 un poco, porque ahora el método 345 00:15:01,600 --> 00:15:03,720 reproducir, en un vinilo 346 00:15:03,720 --> 00:15:06,000 hemos asumido que cuando tú le das a reproducir 347 00:15:06,000 --> 00:15:07,379 ¡pam! reproduce 348 00:15:07,379 --> 00:15:09,139 porque no va a haber ningún humano ahí 349 00:15:09,139 --> 00:15:11,179 moviendo la agujita 350 00:15:11,179 --> 00:15:13,940 hemos querido asumir eso, entonces tú le das a reproducir 351 00:15:13,940 --> 00:15:15,559 y es, está reproduciendo patatín 352 00:15:15,559 --> 00:15:18,360 vale, pero aquí 353 00:15:18,360 --> 00:15:19,539 reproducir 354 00:15:19,539 --> 00:15:22,720 vamos a hacerlo que solicite una pista 355 00:15:22,720 --> 00:15:24,460 vale 356 00:15:24,460 --> 00:15:25,860 la localice 357 00:15:25,860 --> 00:15:28,799 y te diga voy a reproducir 358 00:15:28,799 --> 00:15:30,320 pista con la duración tal 359 00:15:30,320 --> 00:15:32,759 y deje el sistema 360 00:15:32,759 --> 00:15:34,639 ahí parado 361 00:15:34,639 --> 00:15:36,639 todos los segundos que dure la pista 362 00:15:36,639 --> 00:15:37,840 por ejemplo, para cambiar 363 00:15:37,840 --> 00:15:40,259 vale, pues entonces este método de reproducir 364 00:15:40,259 --> 00:15:41,860 solicita un nombre de pista 365 00:15:41,860 --> 00:15:44,360 y deja ahí 366 00:15:44,360 --> 00:15:47,960 Nuestro programa 367 00:15:47,960 --> 00:15:48,840 Parado 368 00:15:48,840 --> 00:15:50,779 Todo el tiempo que dura la pista 369 00:15:50,779 --> 00:15:53,379 Es nuestra forma de emular 370 00:15:53,379 --> 00:15:54,639 Que está reproduciendo una pista 371 00:15:54,639 --> 00:15:57,019 Vale, pues entonces aquí tenemos que 372 00:15:57,019 --> 00:15:58,720 Pedir una pista 373 00:15:58,720 --> 00:16:01,179 Localizarla en el set 374 00:16:01,179 --> 00:16:03,059 Para sacar de ella 375 00:16:03,059 --> 00:16:05,559 Su duración 376 00:16:05,559 --> 00:16:08,519 Vale 377 00:16:08,519 --> 00:16:10,879 Bueno, pues entonces 378 00:16:10,879 --> 00:16:12,779 Bueno, tengo que importar haset 379 00:16:12,779 --> 00:16:17,850 Pues nada, este reproducir pista 380 00:16:17,850 --> 00:16:18,710 Va a ser 381 00:16:18,710 --> 00:16:21,250 Título de pista 382 00:16:21,250 --> 00:16:23,990 Dime el título de pista que quieres 383 00:16:23,990 --> 00:16:28,330 Pues leemos la pista 384 00:16:28,330 --> 00:16:30,230 Voy a meter 385 00:16:30,230 --> 00:16:31,149 La otra clase 386 00:16:31,149 --> 00:16:35,980 Ah, que ya la tenía, vale 387 00:16:35,980 --> 00:16:37,799 Claro, que estoy en el mismo proyecto 388 00:16:37,799 --> 00:16:43,960 Vale, pues el título mío de pista 389 00:16:43,960 --> 00:16:46,279 Lo leo 390 00:16:46,279 --> 00:16:51,289 Y ahora ya tengo 391 00:16:51,289 --> 00:16:52,289 El dato de entrada 392 00:16:52,289 --> 00:16:55,750 El dato de entrada no lo he puesto que lo reciba por parámetro 393 00:16:55,750 --> 00:16:59,190 Porque reproducir es el método 394 00:16:59,190 --> 00:17:00,870 que implementa la 395 00:17:00,870 --> 00:17:02,509 interfaz, entonces 396 00:17:02,509 --> 00:17:04,630 la cabecita tiene que ser idéntica, clavada 397 00:17:04,630 --> 00:17:07,049 yo me podría hacer otro método aparte 398 00:17:07,049 --> 00:17:09,130 me lo podría hacer, pero este le tengo 399 00:17:09,130 --> 00:17:10,329 que implementar sí o sí 400 00:17:10,329 --> 00:17:13,069 el que está en la interfaz, y la interfaz me dice 401 00:17:13,069 --> 00:17:15,069 oye, implementa un método reproducir sin 402 00:17:15,069 --> 00:17:16,529 parámetros, pues lo tengo que hacer así 403 00:17:16,529 --> 00:17:18,930 bueno, pues nada, título de pista 404 00:17:18,930 --> 00:17:20,710 y ahora que tenemos que hacer aquí, pues hemos dicho 405 00:17:20,710 --> 00:17:22,269 vamos a buscar en las pistas 406 00:17:22,269 --> 00:17:24,210 y cuando 407 00:17:24,210 --> 00:17:26,849 la encontremos, pues ya está 408 00:17:26,849 --> 00:17:28,769 que reproduzca, entonces aquí 409 00:17:28,769 --> 00:17:29,690 Podemos hacer varias cosas 410 00:17:29,690 --> 00:17:31,930 Por ejemplo, podríamos hacer 411 00:17:31,930 --> 00:17:40,210 Sí, pista ya la he hecho para que tenga título y duración 412 00:17:40,210 --> 00:17:41,670 Una pista de un CD 413 00:17:41,670 --> 00:17:43,470 Se caracteriza por su título y su duración 414 00:17:43,470 --> 00:17:44,789 Nada más, ya está 415 00:17:44,789 --> 00:17:46,670 Estoy obviando las posiciones 416 00:17:46,670 --> 00:17:49,549 En un CD sí que tiene posiciones 417 00:17:49,549 --> 00:17:51,509 La 1, la 2, la 3, pero las he obviado 418 00:17:51,509 --> 00:17:52,890 Para usar un set precisamente 419 00:17:52,890 --> 00:17:56,910 Bueno, pues entonces 420 00:17:56,910 --> 00:17:59,349 Vamos a imaginarnos 421 00:17:59,349 --> 00:18:01,650 Que yo ahora quisiera ver primero de todos 422 00:18:01,650 --> 00:18:03,430 Imaginaos que yo quiero comprobar 423 00:18:03,430 --> 00:18:06,430 que esta pista está en el CD 424 00:18:06,430 --> 00:18:08,230 lo primero de todos 425 00:18:08,230 --> 00:18:12,210 la puedo recorrer y comprobarlo 426 00:18:12,210 --> 00:18:14,029 o también podría hacer esto 427 00:18:14,029 --> 00:18:16,289 para eso tenemos un método 428 00:18:16,289 --> 00:18:18,230 contains, si yo lo quiero hacer con contains 429 00:18:18,230 --> 00:18:18,630 porque 430 00:18:18,630 --> 00:18:29,460 imaginaos que yo quiero ver 431 00:18:29,460 --> 00:18:30,059 si 432 00:18:30,059 --> 00:18:35,779 la colección 433 00:18:35,779 --> 00:18:36,980 de pistas que es esta 434 00:18:36,980 --> 00:18:38,640 contiene la lista 435 00:18:38,640 --> 00:18:41,519 imaginaos que yo quiero ver si la colección de pistas 436 00:18:41,519 --> 00:18:43,000 contiene esa pista, que quiero ver eso 437 00:18:43,000 --> 00:18:44,500 con este método 438 00:18:44,500 --> 00:18:47,339 para que en el caso de que no la contenga 439 00:18:47,339 --> 00:18:48,880 por ejemplo, si no la contiene 440 00:18:48,880 --> 00:18:53,200 pues yo quiero a lo mejor decir 441 00:18:53,200 --> 00:18:56,660 no existe esa pista 442 00:18:56,660 --> 00:19:02,079 ¿vale? imaginaos que 443 00:19:02,079 --> 00:19:04,240 yo empiezo haciendo esta parte de aquí 444 00:19:04,240 --> 00:19:05,859 ahora os pregunto 445 00:19:05,859 --> 00:19:07,440 ¿aquí qué pongo? 446 00:19:08,440 --> 00:19:10,119 para ver si esa pista está o no 447 00:19:10,119 --> 00:19:11,140 ¿qué pondría aquí? 448 00:19:14,259 --> 00:19:15,619 el título de la pista 449 00:19:15,619 --> 00:19:21,119 si yo pongo el título de la pista 450 00:19:21,119 --> 00:19:23,420 claro 451 00:19:23,420 --> 00:19:25,539 el compilador se ha quedado 452 00:19:25,539 --> 00:19:26,099 tan ancho 453 00:19:26,099 --> 00:19:29,119 pero llamemos que 454 00:19:29,119 --> 00:19:30,680 me salga un aviso 455 00:19:30,680 --> 00:19:36,930 ese aviso a que se corresponde 456 00:19:36,930 --> 00:19:38,470 ese aviso se corresponde 457 00:19:38,470 --> 00:19:40,789 a que pistas es una colección 458 00:19:40,789 --> 00:19:41,809 no es de cadenas 459 00:19:41,809 --> 00:19:43,210 no es de títulos 460 00:19:43,210 --> 00:19:46,289 pistas es una colección de objetos pista 461 00:19:46,289 --> 00:19:48,609 entonces al contains le tengo que pasar 462 00:19:48,609 --> 00:19:49,809 un objeto pista 463 00:19:49,809 --> 00:19:52,569 A Contains hay que pasarle un objeto pista 464 00:19:52,569 --> 00:19:54,410 Para que él me diga si está en esta colección 465 00:19:54,410 --> 00:19:55,470 Y yo le he pasado una cadena 466 00:19:55,470 --> 00:19:58,490 Entonces él me dice, tú pásame lo que quieras 467 00:19:58,490 --> 00:19:59,569 Pero es que yo te voy a decir que no 468 00:19:59,569 --> 00:20:01,710 Porque una cadena no va a estar 469 00:20:01,710 --> 00:20:04,549 En un conjunto de objetos pista 470 00:20:04,549 --> 00:20:06,670 Tú pásame una pista y ya está 471 00:20:06,670 --> 00:20:07,750 Con lo cual una cadena 472 00:20:07,750 --> 00:20:09,289 No le podemos pasar 473 00:20:09,289 --> 00:20:11,009 Vale, pues entonces, ¿qué le pasamos? 474 00:20:11,069 --> 00:20:12,269 Le tenemos que pasar un objeto pista 475 00:20:12,269 --> 00:20:13,210 ¿Qué le pasaríais? 476 00:20:16,359 --> 00:20:18,799 Con el título, pero sea creando un igual 477 00:20:18,799 --> 00:20:19,960 Y eso es lo difícil 478 00:20:19,960 --> 00:20:21,140 Efectivamente 479 00:20:21,140 --> 00:20:23,539 aquí el problema que nos falta es 480 00:20:23,539 --> 00:20:25,640 vale, yo tengo que ver si esta 481 00:20:25,640 --> 00:20:27,680 pista está, para la cual 482 00:20:27,680 --> 00:20:29,779 solo dejo el título, entonces yo automáticamente 483 00:20:29,779 --> 00:20:31,720 me hace volver a algo 484 00:20:31,720 --> 00:20:33,539 que hemos pasado por alto cuando he 485 00:20:33,539 --> 00:20:35,140 hecho estas clases y es, vamos a ver 486 00:20:35,140 --> 00:20:37,640 aquí hay algo que identifique 487 00:20:37,640 --> 00:20:39,119 de forma única las pistas 488 00:20:39,119 --> 00:20:40,680 porque si lo hay 489 00:20:40,680 --> 00:20:42,200 dejémoslo ya 490 00:20:42,200 --> 00:20:45,480 dejémoslo ya reflejado 491 00:20:45,480 --> 00:20:47,119 aquí, pues sí 492 00:20:47,119 --> 00:20:49,579 cada pista se caracteriza por un título 493 00:20:49,579 --> 00:20:52,140 la duración no 494 00:20:52,140 --> 00:20:54,140 porque puede haber diferentes 495 00:20:54,140 --> 00:20:56,039 pistas del CD con la misma duración 496 00:20:56,039 --> 00:20:58,420 con la misma, luego duración no caracteriza 497 00:20:58,420 --> 00:20:59,740 de forma única las pistas 498 00:20:59,740 --> 00:21:01,259 pero título sí 499 00:21:01,259 --> 00:21:04,099 entonces conviene 500 00:21:04,099 --> 00:21:05,900 que yo incorpore el método 501 00:21:05,900 --> 00:21:07,720 equals para que me diga, oye 502 00:21:07,720 --> 00:21:10,579 pistas de igual título son iguales 503 00:21:10,579 --> 00:21:11,619 ¿vale? eso para empezar 504 00:21:11,619 --> 00:21:13,539 bueno, pues entonces aquí 505 00:21:13,539 --> 00:21:19,880 yo me puedo hacer 506 00:21:19,880 --> 00:21:22,880 mi equals con título 507 00:21:22,880 --> 00:21:25,369 vale 508 00:21:25,369 --> 00:21:30,799 yo tengo entonces aquí ya hecho mi criterio 509 00:21:30,799 --> 00:21:31,859 de igualdad que me dice 510 00:21:31,859 --> 00:21:34,480 si una pista tiene el mismo título 511 00:21:34,480 --> 00:21:36,920 que otra, a todos los efectos 512 00:21:36,920 --> 00:21:38,539 para la aplicación son la misma 513 00:21:38,539 --> 00:21:43,299 bueno 514 00:21:43,299 --> 00:21:45,559 entonces ahora vuelvo aquí 515 00:21:45,559 --> 00:21:48,299 ahora vuelvo a 516 00:21:48,299 --> 00:21:49,920 donde estaba 517 00:21:49,920 --> 00:21:53,650 en CD 518 00:21:53,650 --> 00:21:55,009 si aquí estaba 519 00:21:55,009 --> 00:21:56,470 aquí, vale 520 00:21:56,470 --> 00:21:59,269 entonces aquí hemos dicho 521 00:21:59,269 --> 00:22:01,849 vamos a pasarle un objeto pista con ese título 522 00:22:01,849 --> 00:22:04,529 un objeto pista con ese título 523 00:22:04,529 --> 00:22:06,230 y entonces 524 00:22:06,230 --> 00:22:08,609 con taste me va a decir a ver si hay 525 00:22:08,609 --> 00:22:10,549 alguno igual que 526 00:22:10,549 --> 00:22:12,730 este objeto pista con ese título en la colección 527 00:22:12,730 --> 00:22:14,329 entonces como 528 00:22:14,329 --> 00:22:16,630 la igualdad viene por el título 529 00:22:16,630 --> 00:22:18,549 me da igual que este objeto pista no tenga 530 00:22:18,549 --> 00:22:20,670 duración puesta o tenga la duración que a mi me dé la gana 531 00:22:20,670 --> 00:22:22,789 vale 532 00:22:22,789 --> 00:22:23,390 entonces 533 00:22:23,390 --> 00:22:26,549 como yo no he puesto constructores 534 00:22:26,549 --> 00:22:28,190 lo tengo que hacer con getDiset 535 00:22:28,190 --> 00:22:30,170 pues vamos a 536 00:22:30,170 --> 00:22:32,150 hacer una pista por aquí 537 00:22:32,150 --> 00:22:34,940 y ahora 538 00:22:34,940 --> 00:22:37,279 p.set título 539 00:22:37,279 --> 00:22:44,089 este, vale 540 00:22:44,089 --> 00:22:46,230 esto ya tiene más sentido porque 541 00:22:46,230 --> 00:22:47,930 yo le paso una pista con un título y 542 00:22:47,930 --> 00:22:49,750 contains ya sabemos que lo que hace es 543 00:22:49,750 --> 00:22:51,950 buscar si hay alguna 544 00:22:51,950 --> 00:22:53,549 pista en este conjunto 545 00:22:53,549 --> 00:22:54,990 igual a esta 546 00:22:54,990 --> 00:22:57,269 y para ver si es igual 547 00:22:57,269 --> 00:23:00,170 el criterio de igualdad que hemos fijado es el título 548 00:23:00,170 --> 00:23:01,809 por eso solo he fijado el título 549 00:23:01,809 --> 00:23:03,849 la duración me da igual porque la va a ignorar 550 00:23:03,849 --> 00:23:05,470 el contains va a ignorar la dirección 551 00:23:05,470 --> 00:23:08,349 vale, entonces con esto 552 00:23:08,349 --> 00:23:09,269 ya lo tendríamos 553 00:23:09,269 --> 00:23:12,589 ya lo encontraría, con test ya funcionaría 554 00:23:12,589 --> 00:23:17,210 aquí lo que no se nos puede 555 00:23:17,210 --> 00:23:19,190 olvidar es, oye, que tipo 556 00:23:19,190 --> 00:23:20,950 de colección es esta 557 00:23:20,950 --> 00:23:21,670 no tienes que poner 558 00:23:21,670 --> 00:23:26,369 pero si ya la tengo 559 00:23:26,369 --> 00:23:32,309 claro, pero es que yo no tengo 560 00:23:32,309 --> 00:23:34,230 como no he hecho constructor con parámetros 561 00:23:34,230 --> 00:23:36,910 por eso lo he hecho fuera, por vaguería 562 00:23:36,910 --> 00:23:38,430 no he hecho constructor, pero vamos, es igual 563 00:23:38,430 --> 00:23:40,769 es lo mismo, vale, entonces 564 00:23:40,769 --> 00:23:43,069 aquí, claro 565 00:23:43,069 --> 00:23:45,069 que no se nos tiene que olvidar nunca 566 00:23:45,069 --> 00:23:47,150 el pensar, a ver, espérate 567 00:23:47,150 --> 00:23:49,009 ¿con qué tipo 568 00:23:49,009 --> 00:23:50,529 de colección estás trabajando? 569 00:23:51,349 --> 00:23:53,170 porque en función del tipo de colección 570 00:23:53,170 --> 00:23:54,269 con el que estás trabajando 571 00:23:54,269 --> 00:23:57,190 los métodos de esa colección 572 00:23:57,190 --> 00:24:01,130 verifican la igualdad de una manera 573 00:24:01,130 --> 00:24:01,589 o de otra 574 00:24:01,589 --> 00:24:04,970 las listas, sea linked list o array list 575 00:24:04,970 --> 00:24:07,029 ya sabemos que verifican la igualdad 576 00:24:07,029 --> 00:24:08,230 con el equals y ya está 577 00:24:08,230 --> 00:24:11,009 pero esto no es una lista 578 00:24:11,009 --> 00:24:13,049 pistas no es una lista 579 00:24:13,049 --> 00:24:15,109 pistas es un 580 00:24:15,109 --> 00:24:15,549 haset 581 00:24:15,549 --> 00:24:17,609 ¿no? 582 00:24:18,789 --> 00:24:20,809 luego como pistas es un haset 583 00:24:20,809 --> 00:24:23,410 los métodos de pistas 584 00:24:23,410 --> 00:24:25,349 el contains, el remove, etc 585 00:24:25,349 --> 00:24:27,170 cuando tienen que ver si un objeto 586 00:24:27,170 --> 00:24:27,950 es igual a otro 587 00:24:27,950 --> 00:24:31,150 no usan solo el equals, ¿qué más usan? 588 00:24:33,039 --> 00:24:33,940 el hashCode 589 00:24:33,940 --> 00:24:36,599 usaban primero el Haskell y luego el Equals 590 00:24:36,599 --> 00:24:38,819 y yo en pista 591 00:24:38,819 --> 00:24:40,900 no he hecho el Haskell, he hecho el Equals solo 592 00:24:40,900 --> 00:24:42,619 entonces si esto fuera 593 00:24:42,619 --> 00:24:44,640 una lista, si esto fuera 594 00:24:44,640 --> 00:24:46,660 un list, ya está, no tengo más que hacer 595 00:24:46,660 --> 00:24:48,799 si esto fuera un list, no tengo más que hacer 596 00:24:48,799 --> 00:24:50,779 porque el 597 00:24:50,779 --> 00:24:52,279 contains de aquí 598 00:24:52,279 --> 00:24:54,920 va a ir aplicando el Equals 599 00:24:54,920 --> 00:24:56,759 de este con todos y cada 600 00:24:56,759 --> 00:24:58,519 uno de los de aquí, va a ir aplicando el Equals 601 00:24:58,519 --> 00:25:00,579 en cuanto encuentra una que el Equals le da true 602 00:25:00,579 --> 00:25:02,519 ya está, magnífico 603 00:25:02,519 --> 00:25:23,140 Pero pistas no son list, pistas es un hash set, con lo cual el contains de ese hash set, donde estoy, el contains de hash set es diferente del contains de list, es distinto, este es el contains de hash set, ¿por qué eso es un hash set? 604 00:25:23,140 --> 00:25:25,420 pues el context de hashSet lo que hace es 605 00:25:25,420 --> 00:25:27,440 coge este objeto y va 606 00:25:27,440 --> 00:25:29,079 uno por uno haciendo hashCode 607 00:25:29,079 --> 00:25:31,259 igual, hashCode equals, porque así es como vimos que 608 00:25:31,259 --> 00:25:33,579 funcionaba, así es como vimos que funcionaba 609 00:25:33,579 --> 00:25:35,480 y cuando encuentra uno 610 00:25:35,480 --> 00:25:37,339 en el cual la secuencia de 611 00:25:37,339 --> 00:25:39,259 hashCode equals le da true, entonces 612 00:25:39,259 --> 00:25:41,240 dice, ah pues está, claro pero 613 00:25:41,240 --> 00:25:42,279 entonces tengo que hacer el hashCode 614 00:25:42,279 --> 00:25:45,119 porque si no lo hago, ya sabéis que esto que 615 00:25:45,119 --> 00:25:47,319 le pasa, entonces el hashCode solo da true 616 00:25:47,319 --> 00:25:48,519 si son el mismo objeto 617 00:25:48,519 --> 00:25:50,920 la misma dirección de memoria, uno encima del otro 618 00:25:50,920 --> 00:25:52,599 ¿vale? 619 00:25:53,140 --> 00:25:58,900 Claro, pues entonces aquí nunca me va a encontrar esta pista, aquí nunca, aunque el título sea igual, 620 00:25:59,019 --> 00:26:03,920 aunque el título sea igual, nunca me la va a encontrar si yo no pongo aquí el hashCode, si no lo pongo. 621 00:26:05,680 --> 00:26:13,150 Ahora ya sí, ¿vale? Ahora ya sí, ¿vale? 622 00:26:16,079 --> 00:26:28,210 Entonces, repitiendo, como este objeto es un hashSet, la clase a la que van a pertenecer los objetos que la forman, 623 00:26:28,609 --> 00:26:32,410 La clase a la que van a pertenecer tienen que ofrecer 624 00:26:32,410 --> 00:26:35,609 cómo van a implementar el hashCode y el equals, los dos. 625 00:26:36,890 --> 00:26:38,990 Porque la clase hashSet usa los dos. 626 00:26:41,490 --> 00:26:42,650 ¿Y cómo lo van a implementar? 627 00:26:42,650 --> 00:26:47,089 Pues yo decido en función de qué parámetro, de qué propiedad les interesa. 628 00:26:47,710 --> 00:26:50,930 Y va a ser de la propiedad o las propiedades que lo identifiquen de forma única. 629 00:26:52,089 --> 00:26:58,609 A ver, podríamos haber decidido que a cada pista del CD se caracterice por ambas. 630 00:26:58,609 --> 00:27:06,269 Es decir, pistas del mismo título pueden ser distintas si su duración es distinta 631 00:27:06,269 --> 00:27:10,750 Podría ser otras situaciones, que eso ya depende de cuál sea mi situación real 632 00:27:10,750 --> 00:27:12,349 Yo tengo que describir mi situación real 633 00:27:12,349 --> 00:27:16,430 Pues tu situación real es que pistas del mismo nombre son la misma 634 00:27:16,430 --> 00:27:20,029 Pues ya está, esto es lo único que forma parte del jasco de equals 635 00:27:20,029 --> 00:27:22,230 Pero tu situación podría ser, no, no, no 636 00:27:22,230 --> 00:27:26,930 Dos pistas pueden llamarse igual, pero son distintas si la duración es distinta 637 00:27:26,930 --> 00:27:28,589 si tu situación es esa 638 00:27:28,589 --> 00:27:31,069 que eso depende de la situación real 639 00:27:31,069 --> 00:27:33,309 que tienes que analizar, claro, situación es esa 640 00:27:33,309 --> 00:27:34,990 pues entonces el 641 00:27:34,990 --> 00:27:36,349 jasco de equals será distinto 642 00:27:36,349 --> 00:27:38,750 el jasco de equals implicará a los dos 643 00:27:38,750 --> 00:27:40,710 y lo generaremos de forma distinta, claro 644 00:27:40,710 --> 00:27:41,910 implicando a los dos 645 00:27:41,910 --> 00:27:44,829 y si a uno se le olvida 646 00:27:44,829 --> 00:27:47,109 y no hace jasco de equals 647 00:27:47,109 --> 00:27:49,109 y no los pone ahí, pues ¿qué está pasando? 648 00:27:49,210 --> 00:27:50,210 lo que ya hemos hecho mil veces 649 00:27:50,210 --> 00:27:52,890 ¿significa eso que la clase pista no tiene 650 00:27:52,890 --> 00:27:54,329 jasco de equals? claro que lo tiene 651 00:27:54,329 --> 00:27:55,970 tiene el heredado de object 652 00:27:55,970 --> 00:27:58,349 porque para eso pista hereda de object 653 00:27:58,349 --> 00:27:59,470 como todas las clases del mundo 654 00:27:59,470 --> 00:28:01,970 entonces si yo no lo sobrescribo 655 00:28:01,970 --> 00:28:03,769 si no lo sobrescribo 656 00:28:03,769 --> 00:28:05,009 usa el de object 657 00:28:05,009 --> 00:28:07,569 y el hascode de equals 658 00:28:07,569 --> 00:28:08,890 de object 659 00:28:08,890 --> 00:28:11,710 y el equals de object ya sabemos lo que hace 660 00:28:11,710 --> 00:28:14,130 solamente detecta igualdad 661 00:28:14,130 --> 00:28:15,849 si los objetos 662 00:28:15,849 --> 00:28:17,869 están apuntados por la misma 663 00:28:17,869 --> 00:28:19,589 y están encima del otro 664 00:28:19,589 --> 00:28:22,029 es decir, nunca van a detectar 665 00:28:22,029 --> 00:28:24,069 igualdad dos pistas del mismo título 666 00:28:24,069 --> 00:28:26,609 si no son 667 00:28:26,609 --> 00:28:28,750 un objeto apuntado por la misma 668 00:28:28,750 --> 00:28:29,470 dirección de memoria 669 00:28:29,470 --> 00:28:31,970 es decir, yo aquí le puedo pasar 670 00:28:31,970 --> 00:28:34,609 una pista con el mismo 671 00:28:34,609 --> 00:28:36,549 título y la misma duración que cualquiera 672 00:28:36,549 --> 00:28:38,430 de estas, una que me he creado con 673 00:28:38,430 --> 00:28:39,730 mismo título, misma duración 674 00:28:39,730 --> 00:28:42,130 y el context nunca me va a dar plus 675 00:28:42,130 --> 00:28:44,529 porque este objeto no va a tener 676 00:28:44,529 --> 00:28:46,250 la misma dirección de memoria que esto, no va a tenerlo 677 00:28:46,250 --> 00:28:48,730 y el jasco de equals de object 678 00:28:48,730 --> 00:28:50,269 exigen que 679 00:28:50,269 --> 00:28:52,029 la dirección de memoria sea la misma 680 00:28:52,029 --> 00:28:52,970 para dar igual 681 00:28:52,970 --> 00:28:56,130 Luego para que la aplicación funcione 682 00:28:56,130 --> 00:28:58,589 Con sentido y sus resultados tengan sentido 683 00:28:58,589 --> 00:28:59,910 Sus resultados tengan sentido 684 00:28:59,910 --> 00:29:02,509 Pues tengo que decidir esta implementación 685 00:29:02,509 --> 00:29:03,470 Tengo que decidirla 686 00:29:03,470 --> 00:29:07,319 Bueno pues entonces 687 00:29:07,319 --> 00:29:10,960 Estábamos con nuestro método reproducir 688 00:29:10,960 --> 00:29:13,140 Que pedía una pista y lo primero que hemos hecho es 689 00:29:13,140 --> 00:29:15,980 Ver si no la contiene 690 00:29:15,980 --> 00:29:16,579 No existe 691 00:29:16,579 --> 00:29:19,579 Y podríamos aprovechar ya y salir 692 00:29:19,579 --> 00:29:19,880 De 693 00:29:19,880 --> 00:29:24,410 Del 694 00:29:24,410 --> 00:29:28,380 Método con el retun 695 00:29:28,380 --> 00:29:30,480 ¿verdad? podríamos aprovechar 696 00:29:30,480 --> 00:29:31,380 ya salir con el return 697 00:29:31,380 --> 00:29:34,319 y ahora en el caso 698 00:29:34,319 --> 00:29:35,240 de que la contenga 699 00:29:35,240 --> 00:29:37,500 pues vamos a 700 00:29:37,500 --> 00:29:40,759 parar, esto es por hacer la tontería 701 00:29:40,759 --> 00:29:42,579 parar el 702 00:29:42,579 --> 00:29:43,839 programa, dejarlo detenido 703 00:29:43,839 --> 00:29:44,960 el tiempo que dure 704 00:29:44,960 --> 00:29:47,460 la pista 705 00:29:47,460 --> 00:29:49,960 y uno puede parar siempre 706 00:29:49,960 --> 00:29:51,660 un programa 707 00:29:51,660 --> 00:29:53,759 si le da la gana 708 00:29:53,759 --> 00:29:55,599 dejarlo ahí pausado, así 709 00:29:55,599 --> 00:29:57,279 con esto 710 00:29:57,279 --> 00:30:00,740 pone aquí los milisegundos 711 00:30:00,740 --> 00:30:02,500 por ejemplo 712 00:30:02,500 --> 00:30:03,940 esto dejaría parado 713 00:30:03,940 --> 00:30:06,460 lo que pasa es que tengo que propagar la excepción 714 00:30:06,460 --> 00:30:07,000 y ya está 715 00:30:07,000 --> 00:30:10,309 y entonces 716 00:30:10,309 --> 00:30:14,470 no, porque esto tendría que cambiar la interfaz 717 00:30:14,470 --> 00:30:22,539 nada, esto solamente 718 00:30:22,539 --> 00:30:23,960 pues porque haga algo distinto 719 00:30:23,960 --> 00:30:26,240 esta sentencia 720 00:30:26,240 --> 00:30:27,539 sleep lo que hace es 721 00:30:27,539 --> 00:30:29,079 deja el programa pausado 722 00:30:29,079 --> 00:30:32,400 ahí parado, tantos milisegundos 723 00:30:32,400 --> 00:30:33,299 como tú le digas 724 00:30:33,299 --> 00:30:35,119 entonces 725 00:30:35,119 --> 00:30:37,900 vale, en nuestro caso 726 00:30:37,900 --> 00:30:39,940 serán los milisegundos que 727 00:30:39,940 --> 00:30:40,619 dure la pista 728 00:30:40,619 --> 00:30:43,839 bueno, pues entonces, ahora 729 00:30:43,839 --> 00:30:46,079 ¿qué tendríamos que 730 00:30:46,079 --> 00:30:47,599 hacer ahora? bueno, la pista existe 731 00:30:47,599 --> 00:30:49,720 ahora ya tenemos que dejar el programa 732 00:30:49,720 --> 00:30:51,720 parado con esta sentencia 733 00:30:51,720 --> 00:30:53,900 tantos milisegundos 734 00:30:53,900 --> 00:30:55,799 como me diga la duración de la pista 735 00:30:55,799 --> 00:30:58,000 bueno, pues ¿qué es lo siguiente que haríais ahora? 736 00:30:58,539 --> 00:31:00,039 en este método 737 00:31:00,039 --> 00:31:01,900 ya sabemos que 738 00:31:01,900 --> 00:31:02,640 la pista existe 739 00:31:02,640 --> 00:31:05,180 hay que localizar la duración de esa pista 740 00:31:05,180 --> 00:31:06,680 ¿no? pues que es lo siguiente que haríamos 741 00:31:06,680 --> 00:31:08,980 ¿eh? 742 00:31:09,460 --> 00:31:11,119 que es lo siguiente que haríamos ahora ya 743 00:31:11,119 --> 00:31:12,240 para completar este método 744 00:31:12,240 --> 00:31:19,000 venga, conectaros, ¿en qué estáis pensando? 745 00:31:20,799 --> 00:31:21,700 a ver, la pista 746 00:31:21,700 --> 00:31:23,420 ya existe y ahora ya 747 00:31:23,420 --> 00:31:25,160 tenemos que localizar la pista 748 00:31:25,160 --> 00:31:27,440 para parar el programa todo el tiempo 749 00:31:27,440 --> 00:31:29,420 que dure, bueno, pues que es lo siguiente que haríais 750 00:31:29,420 --> 00:31:30,940 ¿eh? 751 00:31:30,940 --> 00:31:32,240 que es lo de try-catch 752 00:31:32,240 --> 00:31:34,539 esto nada 753 00:31:34,539 --> 00:31:36,940 olvídate, ya lo mencionamos cuando 754 00:31:36,940 --> 00:31:38,940 hicimos la clase teclado, dijimos ya cuando 755 00:31:38,940 --> 00:31:40,039 veamos excepciones 756 00:31:40,039 --> 00:31:42,619 ya lo haremos, ¿vale? 757 00:31:42,660 --> 00:31:44,619 que significa, intenta hacer esta sentencia 758 00:31:44,619 --> 00:31:45,920 y si no lo consigues, haz esto 759 00:31:45,920 --> 00:31:48,240 pero ya lo veremos en detalle cuando 760 00:31:48,240 --> 00:31:50,920 lo que pasa es que para llamar a este 761 00:31:50,920 --> 00:31:52,839 método tan tonto, que es un método que 762 00:31:52,839 --> 00:31:54,940 deja el programa parado, es obligatorio 763 00:31:54,940 --> 00:31:56,799 hacer el try card, por eso lo puse 764 00:31:56,799 --> 00:31:59,220 pero olvidaos del try card 765 00:31:59,220 --> 00:31:59,680 me da igual 766 00:31:59,680 --> 00:32:03,099 ahora pregunto, ahora que es lo siguiente 767 00:32:03,099 --> 00:32:04,700 que haríais, que programaríais 768 00:32:04,700 --> 00:32:06,480 para conseguir esto que digo 769 00:32:06,480 --> 00:32:09,059 que es encontrar la duración 770 00:32:09,059 --> 00:32:10,759 de la pista para dejar parada 771 00:32:10,759 --> 00:32:12,220 el programa 772 00:32:12,220 --> 00:32:16,910 bueno, recorrer 773 00:32:16,910 --> 00:32:18,670 la colección es lo que estoy esperando que me digáis 774 00:32:18,670 --> 00:32:20,910 lo siguiente que haríais, recorrer la colección hasta encontrar 775 00:32:20,910 --> 00:32:21,410 esa pista 776 00:32:21,410 --> 00:32:27,059 si 777 00:32:27,059 --> 00:32:30,759 te refieres para evitar 778 00:32:30,759 --> 00:32:32,539 el content de arriba, claro 779 00:32:32,539 --> 00:32:34,539 pero es que yo lo he separado por partes para revisar 780 00:32:34,539 --> 00:32:36,339 el content arriba, vale 781 00:32:36,339 --> 00:32:37,640 yo lo que me interesaba era 782 00:32:37,640 --> 00:32:39,420 Con lo de arriba 783 00:32:39,420 --> 00:32:42,240 Que os refrescaréis el contains 784 00:32:42,240 --> 00:32:44,160 Y el hasset, el equals y todo eso 785 00:32:44,160 --> 00:32:46,160 Vale, bueno pues ahora 786 00:32:46,160 --> 00:32:47,720 Vamos a recorrer la colección 787 00:32:47,720 --> 00:32:49,519 Vamos a recorrerla 788 00:32:49,519 --> 00:32:51,140 Hasta encontrar la pista 789 00:32:51,140 --> 00:32:54,420 Para cada pista p 790 00:32:54,420 --> 00:32:56,119 En las pistas estas 791 00:32:56,119 --> 00:32:59,599 Pues que podemos hacer 792 00:32:59,599 --> 00:33:01,980 Pues si esta es la que tengo que reproducir 793 00:33:01,980 --> 00:33:04,180 Si p.get 794 00:33:04,180 --> 00:33:05,519 Título 795 00:33:05,519 --> 00:33:08,000 Resulta que es 796 00:33:08,000 --> 00:33:09,880 igual que la pista que estoy 797 00:33:09,880 --> 00:33:11,579 buscando, pues ala, ya está 798 00:33:11,579 --> 00:33:12,519 ya puedo 799 00:33:12,519 --> 00:33:15,319 hacer esta sentencia de aquí 800 00:33:15,319 --> 00:33:21,700 y hago esta sentencia, pasándole 801 00:33:21,700 --> 00:33:23,359 ¿qué? pues pasándole 802 00:33:23,359 --> 00:33:25,619 p.getDuración 803 00:33:26,500 --> 00:33:28,119 y listo 804 00:33:28,119 --> 00:33:29,140 y ya está 805 00:33:29,140 --> 00:33:31,440 esta llave cierra esto 806 00:33:31,440 --> 00:33:33,599 y me 807 00:33:33,599 --> 00:33:35,920 falta la llave del forEach 808 00:33:35,920 --> 00:33:37,579 que 809 00:33:37,579 --> 00:33:38,319 estaría ahí 810 00:33:38,319 --> 00:33:40,940 y p es que ya la tengo 811 00:33:40,940 --> 00:33:44,039 usada 812 00:33:44,039 --> 00:34:01,430 y esto es pista 813 00:34:01,430 --> 00:34:04,009 pista, ahí, vale 814 00:34:04,009 --> 00:34:07,849 bueno, pues entonces 815 00:34:07,849 --> 00:34:11,030 este método pide la pista 816 00:34:11,030 --> 00:34:12,389 primero 817 00:34:12,389 --> 00:34:14,329 mira a ver si está o no está 818 00:34:14,329 --> 00:34:16,250 mira a ver si está o no está, si no está afuera 819 00:34:16,250 --> 00:34:18,750 y luego ya si hemos llegado 820 00:34:18,750 --> 00:34:20,030 a este punto es porque ya está 821 00:34:20,030 --> 00:34:23,750 y cuando la encuentra 822 00:34:23,750 --> 00:34:26,110 pues deja el programa parado lo que dure la pista 823 00:34:26,110 --> 00:34:27,949 y se acabó, pero vamos 824 00:34:27,949 --> 00:34:29,769 esto por poner algo 825 00:34:29,769 --> 00:34:31,869 podríamos haber puesto reproduciendo pista 826 00:34:31,869 --> 00:34:33,329 que dura no sé cuántos, me da igual 827 00:34:33,329 --> 00:34:43,650 vale, pues ya tenemos el CD 828 00:34:43,650 --> 00:34:45,989 y el vinilo con sus propiedades 829 00:34:45,989 --> 00:34:47,690 implementando 830 00:34:47,690 --> 00:34:49,550 reproducir cada uno de ellos 831 00:34:49,550 --> 00:34:54,860 vale, vamos a hacer un main 832 00:34:54,860 --> 00:34:57,079 que haga cosas con 833 00:34:57,079 --> 00:34:58,659 estos discos, esto ya 834 00:34:58,659 --> 00:34:59,980 no se parece en nada 835 00:34:59,980 --> 00:35:08,599 vamos a hacer un main aquí 836 00:35:08,599 --> 00:35:37,059 vale 837 00:35:37,059 --> 00:35:38,679 y aquí como métodos para luego 838 00:35:38,679 --> 00:35:40,340 llamar desde el mini y quedemos organizados 839 00:35:40,340 --> 00:35:41,659 aquí nos podemos plantear 840 00:35:41,659 --> 00:35:44,539 algunas funcionalidades que nos pueda interesar hacer 841 00:35:44,539 --> 00:35:49,440 con esta estructura de clases 842 00:35:49,440 --> 00:35:52,039 que ahora mismo son cinco 843 00:35:52,039 --> 00:35:54,559 discoteca, disco, vinilo, CD y pista 844 00:35:54,559 --> 00:35:57,920 son las cinco entidades de nuestro modelo de datos 845 00:35:57,920 --> 00:36:00,119 discoteca que tiene un list de discos 846 00:36:00,119 --> 00:36:03,239 la clase disco es una interfaz 847 00:36:03,239 --> 00:36:04,820 que a su vez tiene un vinilo y CD 848 00:36:04,820 --> 00:36:09,119 que se reproducen de forma distinta cada uno 849 00:36:09,119 --> 00:36:11,980 y luego cd que a su vez tiene pistas 850 00:36:11,980 --> 00:36:13,860 y cd para 851 00:36:13,860 --> 00:36:16,219 reproducirla, para reproducirse 852 00:36:16,219 --> 00:36:18,079 ha necesitado efectivamente acceder 853 00:36:18,079 --> 00:36:19,300 a las pistas que tiene 854 00:36:19,300 --> 00:36:21,059 y luego un main 855 00:36:21,059 --> 00:36:23,679 que es el main que va a hacer cosas con estas cosas 856 00:36:23,679 --> 00:36:26,119 vale, vamos a parar unos minutejos