1 00:00:00,000 --> 00:00:03,419 Vale, pues entonces 2 00:00:03,419 --> 00:00:05,679 Hacemos nuestro, estábamos haciendo 3 00:00:05,679 --> 00:00:07,799 Nuestro 4 00:00:07,799 --> 00:00:09,400 Diseño de clases 5 00:00:09,400 --> 00:00:11,140 Para gestionar este zoológico 6 00:00:11,140 --> 00:00:12,580 Del 2050 7 00:00:12,580 --> 00:00:15,119 No, bueno, del 2200 8 00:00:15,119 --> 00:00:16,899 Venga, pues ya está 9 00:00:16,899 --> 00:00:18,879 Todos los animales van a tener nombre, descripción 10 00:00:18,879 --> 00:00:20,980 Y un historial de acciones que se han hecho con ellos 11 00:00:20,980 --> 00:00:23,019 Vale, y ya está 12 00:00:23,019 --> 00:00:25,199 Y aquí podríamos poner los get, los set 13 00:00:25,199 --> 00:00:27,260 Todo el rollo moruno de toda la vida 14 00:00:27,260 --> 00:00:28,579 ¿Vale? 15 00:00:30,000 --> 00:00:33,200 venga, sí, ahora que sabemos hacer las cosas rápidamente 16 00:00:33,200 --> 00:00:34,979 un constructor 17 00:00:34,979 --> 00:00:35,939 con parámetros 18 00:00:35,939 --> 00:00:38,479 siempre ponemos 19 00:00:38,479 --> 00:00:39,859 uno sin parámetros 20 00:00:39,859 --> 00:00:42,780 ahora, si somos super clase 21 00:00:42,780 --> 00:00:44,340 de otra clase que nos va a heredar 22 00:00:44,340 --> 00:00:47,079 más que nunca viene bien un constructor sin parámetros 23 00:00:47,079 --> 00:00:48,560 porque si luego hacemos 24 00:00:48,560 --> 00:00:50,100 uno sin parámetros en la de abajo 25 00:00:50,100 --> 00:00:50,859 nos va a decir 26 00:00:50,859 --> 00:00:54,579 que este super implícito de aquí 27 00:00:54,579 --> 00:00:56,759 no tiene constructor sin parámetros arriba 28 00:00:56,759 --> 00:00:58,759 entonces, si hacemos constructores 29 00:00:58,759 --> 00:01:00,420 a lo bestia para dar y tomar 30 00:01:00,420 --> 00:01:03,320 seguramente nos ahorremos 31 00:01:03,320 --> 00:01:04,980 problemas en el futuro 32 00:01:04,980 --> 00:01:07,439 pues venga 33 00:01:07,439 --> 00:01:08,739 constructor con parámetros 34 00:01:08,739 --> 00:01:10,340 constructor sin parámetros 35 00:01:10,340 --> 00:01:16,019 nuestra clase animal 36 00:01:16,019 --> 00:01:17,980 de la cual heredarán 37 00:01:17,980 --> 00:01:20,019 gatos, perros 38 00:01:20,019 --> 00:01:21,280 caballos 39 00:01:21,280 --> 00:01:22,420 y humanos 40 00:01:22,420 --> 00:01:23,799 ¿verdad? 41 00:01:25,540 --> 00:01:27,140 vale, entonces vamos a hacer 42 00:01:27,140 --> 00:01:29,239 un humano y un perro 43 00:01:29,239 --> 00:01:30,480 ¿no? 44 00:01:30,480 --> 00:01:33,500 que heredan de animal, pues entonces 45 00:01:33,500 --> 00:01:38,219 por ahora en el zoológico los robots solo han metido perros 46 00:01:38,219 --> 00:01:42,480 por ahora, están ampliando, pero por ahora como solo han metido 47 00:01:42,480 --> 00:01:45,120 perros, pues hacemos una clase perro solo 48 00:01:45,120 --> 00:01:53,629 y el perro aparte del nombre, la descripción 49 00:01:53,629 --> 00:01:57,670 y el historial de acciones que se han hecho con él, pues el perro 50 00:01:57,670 --> 00:02:01,609 tiene algo que lo caracteriza respecto a 51 00:02:01,609 --> 00:02:03,069 otros animales que no son perros 52 00:02:03,069 --> 00:02:05,189 como por ejemplo 53 00:02:05,189 --> 00:02:09,509 una raza, sí, lo que pasa es que una raza 54 00:02:09,509 --> 00:02:12,110 se podría meter en animal, porque hay muchos animales que se caracterizan 55 00:02:12,110 --> 00:02:13,610 un perro 56 00:02:13,610 --> 00:02:15,729 yo creo que es el único 57 00:02:15,729 --> 00:02:17,129 animal que ladra 58 00:02:17,129 --> 00:02:18,849 entonces 59 00:02:18,849 --> 00:02:20,590 se le podría 60 00:02:20,590 --> 00:02:26,110 el lobo agulla 61 00:02:26,110 --> 00:02:27,750 pero no ladra 62 00:02:27,750 --> 00:02:28,969 ¿tú has oído algún lobo hacer una de 63 00:02:28,969 --> 00:02:29,830 pues no 64 00:02:29,830 --> 00:02:32,789 Yo he visto lobos 65 00:02:32,789 --> 00:02:35,550 Y vosotros también en el zoo seguro 66 00:02:35,550 --> 00:02:42,289 Bueno, pues que los robots 67 00:02:42,289 --> 00:02:45,009 En función del volumen del ladrido del perro 68 00:02:45,009 --> 00:02:46,669 Pues lo ponen en un sitio 69 00:02:46,669 --> 00:02:49,250 Donde dé más o menos por saco 70 00:02:49,250 --> 00:02:50,569 Entonces tienen que tener registrado 71 00:02:50,569 --> 00:02:51,469 El volumen del ladrido 72 00:02:51,469 --> 00:02:52,689 ¿Vale? 73 00:02:56,949 --> 00:02:57,949 Vale, pues venga 74 00:02:57,949 --> 00:02:59,689 Ponemos unos get in, unos set 75 00:02:59,689 --> 00:03:04,590 constructor, sí, puedo hacer 76 00:03:04,590 --> 00:03:06,129 constructor o no 77 00:03:06,129 --> 00:03:08,810 vale, sobre todo me importa 78 00:03:08,810 --> 00:03:10,770 en la superclase porque si luego la subclase 79 00:03:10,770 --> 00:03:12,210 va a querer hacer y no tiene 80 00:03:12,210 --> 00:03:14,569 aquí si no hago constructor 81 00:03:14,569 --> 00:03:16,870 lo único que está ocurriendo es que tengo un constructor 82 00:03:16,870 --> 00:03:19,110 sin parámetros por defecto y ya está, no pasa nada 83 00:03:19,110 --> 00:03:20,689 que es lo que sabemos de toda la vida 84 00:03:20,689 --> 00:03:22,129 que si una clase no tiene constructores 85 00:03:22,129 --> 00:03:24,229 tiene uno por defecto y escondido 86 00:03:24,229 --> 00:03:27,349 venga, tenemos el perro 87 00:03:27,349 --> 00:03:28,830 pero por dios 88 00:03:28,830 --> 00:03:32,409 Se nos ha olvidado decir que el perro hereda de animal. 89 00:03:33,729 --> 00:03:36,830 Entonces, como se nos ha olvidado decir que el perro hereda de animal, 90 00:03:36,949 --> 00:03:39,969 este perro se había quedado solo ladrando, pero no tenía nombre ni tenía nada. 91 00:03:40,530 --> 00:03:41,310 Ahora ya tiene todo. 92 00:03:42,009 --> 00:03:42,250 Vale. 93 00:03:43,129 --> 00:03:45,949 Y ahora, en el zoológico empiezan a meter humanos. 94 00:03:47,289 --> 00:03:47,830 Pues nada. 95 00:03:50,810 --> 00:03:54,909 Empezamos a meter al humano en el zoológico. 96 00:03:57,750 --> 00:03:59,750 Entonces, el humano es un animal. 97 00:03:59,750 --> 00:04:01,849 tiene su nombre, su descripción y el historial 98 00:04:01,849 --> 00:04:03,810 de acciones que se han hecho con él en el zoológico 99 00:04:03,810 --> 00:04:05,389 pues el humano 100 00:04:05,389 --> 00:04:06,849 hereda del animal 101 00:04:06,849 --> 00:04:09,250 y bueno, además incorporará cosas 102 00:04:09,250 --> 00:04:10,729 pues yo que sé, cualquier chorrada 103 00:04:10,729 --> 00:04:12,370 el 104 00:04:12,370 --> 00:04:14,189 humano 105 00:04:14,189 --> 00:04:17,290 pues lo que incorpora 106 00:04:17,290 --> 00:04:18,089 es 107 00:04:18,089 --> 00:04:28,939 bien pensado 108 00:04:28,939 --> 00:04:30,639 el cociente de inteligencia 109 00:04:30,639 --> 00:04:36,339 Porque en función de inteligencia, pues el robot decide meter al humano en una celda más segura o menos segura. 110 00:04:36,480 --> 00:04:38,639 Cuanto más tonto sea, pues menos... 111 00:04:38,639 --> 00:04:45,000 Por ejemplo, en función del cociente de inteligencia. 112 00:04:45,199 --> 00:04:47,660 Ya está, ponemos el Getty Set de esto que añade. 113 00:04:47,660 --> 00:04:52,420 Bueno, siendo justos, si los robots nos han dominado es que son más listos. 114 00:04:52,540 --> 00:04:53,839 Entonces nos van a ver como una mierda. 115 00:04:53,959 --> 00:04:55,660 Entonces les va a dar igual lo listo que somos. 116 00:04:55,660 --> 00:05:00,620 Bueno, a ver, nosotros tenemos miedo 117 00:05:00,620 --> 00:05:02,560 a entes que son más tontos 118 00:05:02,560 --> 00:05:03,139 que nosotros 119 00:05:03,139 --> 00:05:06,360 ¿Tú te enfrentarías a un 120 00:05:06,360 --> 00:05:07,180 gorila? 121 00:05:07,779 --> 00:05:08,500 Sí, depende 122 00:05:08,500 --> 00:05:11,620 Si gano, que me da 123 00:05:11,620 --> 00:05:14,759 Nuestra rendida admiración 124 00:05:14,759 --> 00:05:16,160 Eso no compensa, ¿no? 125 00:05:16,180 --> 00:05:17,259 Vale 126 00:05:17,259 --> 00:05:20,319 Vale, entonces 127 00:05:20,319 --> 00:05:21,939 el humano hereda de animal 128 00:05:21,939 --> 00:05:24,379 Pero los robots 129 00:05:24,379 --> 00:05:26,800 son malvados, entonces se encierran 130 00:05:26,800 --> 00:05:28,740 entre ellos también, porque se dominan unos 131 00:05:28,740 --> 00:05:30,079 a los otros, nosotros no hemos hecho 132 00:05:30,079 --> 00:05:31,899 zoológicos con otros humanos 133 00:05:31,899 --> 00:05:34,560 pero ellos perfectamente podrían hacer un zoológico 134 00:05:34,560 --> 00:05:35,680 en el que metan otros robots 135 00:05:35,680 --> 00:05:37,560 entonces 136 00:05:37,560 --> 00:05:39,720 claro 137 00:05:39,720 --> 00:05:42,040 entonces tenemos nuestro robot 138 00:05:42,040 --> 00:05:43,579 nuestra clase robot 139 00:05:43,579 --> 00:05:46,240 que incorpora su código 140 00:05:46,240 --> 00:05:47,980 de serie, su número de serie 141 00:05:47,980 --> 00:05:52,930 que tiene su número de serie 142 00:05:52,930 --> 00:05:54,689 vale, pero 143 00:05:54,689 --> 00:05:55,949 robot es un animal 144 00:05:55,949 --> 00:05:57,689 no es un animal 145 00:05:57,689 --> 00:05:59,470 entonces no tiene sentido que herede de animal 146 00:05:59,470 --> 00:06:01,810 hombre, ahora mismo lo que hemos puesto en animal 147 00:06:01,810 --> 00:06:03,329 lo podría heredar, pero a ver 148 00:06:03,329 --> 00:06:05,569 porque tampoco se nos ha ocurrido nada específico de animal 149 00:06:05,569 --> 00:06:08,189 podríamos poner 150 00:06:08,189 --> 00:06:09,449 en un animal también 151 00:06:09,449 --> 00:06:11,829 justo, justo iba a poner eso 152 00:06:11,829 --> 00:06:14,129 género, y un robot no tiene 153 00:06:14,129 --> 00:06:15,730 género, al menos en este mundo 154 00:06:15,730 --> 00:06:18,149 en el 2200, en el 2300 igual ya sí 155 00:06:18,149 --> 00:06:20,509 vamos a añadir el getter y el setter 156 00:06:20,509 --> 00:06:21,730 del género que hemos puesto 157 00:06:21,730 --> 00:06:30,750 Bueno, pues las amebas 158 00:06:30,750 --> 00:06:34,110 Las amebas tienen género 159 00:06:34,110 --> 00:06:36,089 Los gusanos tienen género 160 00:06:36,089 --> 00:06:38,509 Pero los robots no tienen género 161 00:06:38,509 --> 00:06:39,170 Entonces 162 00:06:39,170 --> 00:06:40,930 Aquí al 163 00:06:40,930 --> 00:06:43,850 Super robot que está haciendo esta aplicación 164 00:06:43,850 --> 00:06:45,050 Pues dice 165 00:06:45,050 --> 00:06:46,430 No puedo poner animal 166 00:06:46,430 --> 00:06:49,170 Porque mi robot no tiene género 167 00:06:49,170 --> 00:06:50,610 No puedo poner animal 168 00:06:50,610 --> 00:06:53,110 bueno, pues lo podríamos dejar así 169 00:06:53,110 --> 00:06:55,269 ahora empezamos a incorporar más funcionalidades 170 00:06:55,269 --> 00:06:57,269 a ver, que sé que el ejemplo está completamente pillado 171 00:06:57,269 --> 00:06:59,149 por los pelos, pero bueno, la idea es entender 172 00:06:59,149 --> 00:07:00,870 un poquito cómo meter una interfaz 173 00:07:00,870 --> 00:07:03,230 vale, pero resulta que los humanos y los robots 174 00:07:03,230 --> 00:07:05,610 hablan, y es importante 175 00:07:05,610 --> 00:07:07,509 poder hablar con ellos 176 00:07:07,509 --> 00:07:09,470 en los procedimientos 177 00:07:09,470 --> 00:07:11,269 del zoológico para tratar con ellos y todo 178 00:07:11,269 --> 00:07:13,430 entonces, los robots 179 00:07:13,430 --> 00:07:15,350 y los humanos tienen que implementar 180 00:07:15,350 --> 00:07:16,569 un método hablar 181 00:07:16,569 --> 00:07:17,389 vale 182 00:07:17,389 --> 00:07:58,889 Un método a hablar, pues cuando tú lo invocas, pues ya está, lo que sea. Vale, entonces, este método, pues nada, te devuelve cualquier cosa, ¿vale? Al azar. Vale, pues el robot habla, pero los humanos también hablan, entonces, los humanos también tienen que tener un método a hablar. 183 00:07:58,889 --> 00:08:01,050 Bueno, vamos a poner aquí el public 184 00:08:01,050 --> 00:08:06,290 El humano también habla 185 00:08:06,290 --> 00:08:08,949 Pero no habla como el robot 186 00:08:08,949 --> 00:08:09,790 Habla distinto 187 00:08:09,790 --> 00:08:13,589 Bueno, tendrá aquí su método hablar 188 00:08:13,589 --> 00:08:27,379 Y el humano 189 00:08:27,379 --> 00:08:28,319 Pues 190 00:08:28,319 --> 00:08:30,160 Como tiene sentimientos 191 00:08:30,160 --> 00:08:32,480 Pues en lugar de decir cualquier cosa 192 00:08:32,480 --> 00:08:34,440 Porque le da igual estar encerrado o no estar encerrado 193 00:08:34,440 --> 00:08:37,299 Pues devuelve otra cosa 194 00:08:37,299 --> 00:08:41,330 Vale 195 00:08:41,330 --> 00:08:44,500 Bueno, pues entonces 196 00:08:44,500 --> 00:08:45,980 Aquí 197 00:08:45,980 --> 00:08:48,100 el asunto es 198 00:08:48,100 --> 00:08:50,519 nosotros podemos dejar la estructura así 199 00:08:50,519 --> 00:08:51,679 y tenemos animal 200 00:08:51,679 --> 00:08:54,320 de donde heredan, perro y 201 00:08:54,320 --> 00:08:56,320 humano, vale, entonces yo aquí en mi main 202 00:08:56,320 --> 00:08:56,960 de pruebas 203 00:08:56,960 --> 00:09:00,700 yo me hago aquí un main de pruebas 204 00:09:00,700 --> 00:09:04,559 un paquete 205 00:09:04,559 --> 00:09:05,220 de main 206 00:09:05,220 --> 00:09:07,779 con mi main de pruebas 207 00:09:07,779 --> 00:09:27,509 ay 208 00:09:27,509 --> 00:09:31,009 siempre se me olvida esto 209 00:09:31,009 --> 00:09:32,970 si, hay una forma de poner 210 00:09:32,970 --> 00:09:34,250 cuál es el atajo 211 00:09:34,250 --> 00:09:38,610 de verdad, si se trata de ahorrar trabajo 212 00:09:38,610 --> 00:09:39,269 ¿cuánto sabéis? 213 00:09:41,210 --> 00:09:42,250 ay, pero me va 214 00:09:42,250 --> 00:09:44,169 y por qué no 215 00:09:44,169 --> 00:09:46,769 control espacio, pero me ofrece 216 00:09:46,769 --> 00:09:47,450 un huevo de cosas 217 00:09:47,450 --> 00:09:50,149 ah, main method está aquí, vale 218 00:09:50,149 --> 00:09:52,070 venga 219 00:09:52,070 --> 00:09:54,110 venga, entonces 220 00:09:54,110 --> 00:09:57,090 yo soy libre 221 00:09:57,090 --> 00:09:59,149 porque la inteligencia me ha hecho libre 222 00:09:59,149 --> 00:10:01,190 pero la tuya está en un estado 223 00:10:01,190 --> 00:10:02,509 todavía un poco catatónico 224 00:10:02,509 --> 00:10:04,929 o estudian más programación 225 00:10:04,929 --> 00:10:07,289 venga, entonces ahora 226 00:10:07,289 --> 00:10:09,830 el tener esta estructura, ahora ya la aplicación 227 00:10:09,830 --> 00:10:11,909 principal al super robot 228 00:10:11,909 --> 00:10:13,210 que hace la aplicación 229 00:10:13,210 --> 00:10:15,330 pues hay muchas cosas que le vienen muy bien 230 00:10:15,330 --> 00:10:17,409 pues él puede tener aquí, oye tengo aquí 231 00:10:17,409 --> 00:10:18,409 todos mis animales 232 00:10:18,409 --> 00:10:21,610 porque a estos animales 233 00:10:21,610 --> 00:10:23,350 míos, pues 234 00:10:23,350 --> 00:10:25,269 de aquí 235 00:10:25,269 --> 00:10:26,950 mis perros y mis humanos 236 00:10:26,950 --> 00:10:29,529 que resulta que me han dicho 237 00:10:29,529 --> 00:10:31,529 que me van a traer, mi zoológico 238 00:10:31,529 --> 00:10:33,490 va a tener solamente tres humanos 239 00:10:33,490 --> 00:10:35,250 y cuatro perros, pues venga 240 00:10:35,250 --> 00:10:36,210 siete personas 241 00:10:36,210 --> 00:10:41,149 vale, entonces importo esto 242 00:10:41,149 --> 00:10:43,350 lógicamente del paquete correspondiente 243 00:10:43,350 --> 00:10:45,389 y aquí ya sabemos 244 00:10:45,389 --> 00:10:47,210 aquí ya, pues podría meter el 245 00:10:47,210 --> 00:10:48,009 super robot 246 00:10:48,009 --> 00:10:51,149 en animales, pues podría 247 00:10:51,149 --> 00:10:52,769 ya poner lo que fuera 248 00:10:52,769 --> 00:10:55,429 en la posición cero, me has traído 249 00:10:55,429 --> 00:10:57,350 un humano, venga 250 00:10:57,350 --> 00:10:59,850 pues un humano 251 00:10:59,850 --> 00:11:07,889 Un nuevo humano 252 00:11:07,889 --> 00:11:09,789 Y a este humano ya le puedo poner el nombre 253 00:11:09,789 --> 00:11:10,610 Lo que sea 254 00:11:10,610 --> 00:11:14,840 Por ejemplo 255 00:11:14,840 --> 00:11:17,779 Este humano pues se llama 256 00:11:17,779 --> 00:11:19,659 Pedrito 257 00:11:19,659 --> 00:11:23,940 Y va a molestar mucho 258 00:11:23,940 --> 00:11:26,220 Con lo cual le vamos a encerrar 259 00:11:26,220 --> 00:11:28,080 Bajo 20 llaves 260 00:11:28,080 --> 00:11:29,480 Vale 261 00:11:29,480 --> 00:11:31,379 Entonces ahora al 262 00:11:31,379 --> 00:11:34,440 Super robot le llegan robots 263 00:11:34,440 --> 00:11:35,279 Vale 264 00:11:35,279 --> 00:11:38,539 Los robots no los puede meter 265 00:11:38,539 --> 00:11:40,200 En este array 266 00:11:40,200 --> 00:11:41,799 No los puede meter en este array 267 00:11:41,799 --> 00:11:43,120 ¿Vale? Entonces 268 00:11:43,120 --> 00:11:45,539 Si le van a llegar robots 269 00:11:45,539 --> 00:11:47,879 Pues bueno, para empezar tendría que hacer 270 00:11:47,879 --> 00:11:49,840 Su array específico de robots 271 00:11:49,840 --> 00:11:52,539 ¿Verdad? Tendría que hacer su array específico 272 00:11:52,539 --> 00:11:53,960 De robot 273 00:11:53,960 --> 00:11:56,340 ¿Qué? 274 00:11:57,879 --> 00:11:59,059 Bueno, da igual 275 00:11:59,059 --> 00:11:59,980 Lo que me ha ofrecido 276 00:11:59,980 --> 00:12:02,840 Efectivamente 277 00:12:02,840 --> 00:12:08,379 bueno pues si le van a llegar 278 00:12:08,379 --> 00:12:10,820 6 robots pues tendría que hacer 279 00:12:10,820 --> 00:12:12,139 su a raíz de robot 280 00:12:12,139 --> 00:12:18,340 cuidado porque hay 281 00:12:18,340 --> 00:12:20,220 en el paquete JWT 282 00:12:20,220 --> 00:12:21,240 hay una clase robot 283 00:12:21,240 --> 00:12:24,480 entonces cuidado con hacer el import automático 284 00:12:24,480 --> 00:12:26,340 esta es la primera vez que nos ocurre 285 00:12:26,340 --> 00:12:28,360 pero ocurrirá mucho 286 00:12:28,360 --> 00:12:29,139 en el futuro 287 00:12:29,139 --> 00:12:32,120 que hay varias clases 288 00:12:32,120 --> 00:12:33,360 que tú puedes hacer una clase 289 00:12:33,360 --> 00:12:35,840 y en otros paquetes 290 00:12:35,840 --> 00:12:38,659 hay otras clases que se llaman así 291 00:12:38,659 --> 00:12:41,080 entonces el Eclipse cuando te hace el import 292 00:12:41,080 --> 00:12:43,279 te ofrece todas las que ha encontrado 293 00:12:43,279 --> 00:12:45,559 dentro de tu estructura de paquetes 294 00:12:45,559 --> 00:12:46,539 que se llaman así 295 00:12:46,539 --> 00:12:48,860 pues en JWT hay una que se llama Robot 296 00:12:48,860 --> 00:12:50,139 que no sabemos que narices era 297 00:12:50,139 --> 00:12:53,980 JWT es un paquete para hacer interfaces gráficas 298 00:12:53,980 --> 00:12:55,779 entonces no sé que será eso 299 00:12:55,779 --> 00:12:59,980 cuidado con que no hagáis automáticamente el clean clean 300 00:12:59,980 --> 00:13:01,899 mirad que importéis la buena 301 00:13:01,899 --> 00:13:03,320 en nuestro caso es la de modelo 302 00:13:03,320 --> 00:13:05,340 no la de arriba, la de JWT 303 00:13:05,340 --> 00:13:07,019 es la de modelo 304 00:13:07,019 --> 00:13:10,399 vale, y aquí uno ya podría poner 305 00:13:10,399 --> 00:13:12,379 sus robots y lo que fuera 306 00:13:12,379 --> 00:13:13,980 vale 307 00:13:13,980 --> 00:13:17,820 pues el robot 308 00:13:17,820 --> 00:13:18,580 cero 309 00:13:18,580 --> 00:13:23,789 sería un nuevo robot 310 00:13:23,789 --> 00:13:25,149 uy 311 00:13:25,149 --> 00:13:31,820 pues el robot cero 312 00:13:31,820 --> 00:13:34,139 ya está, que tiene un número de serie 313 00:13:34,139 --> 00:13:34,720 el que fuera 314 00:13:34,720 --> 00:13:36,620 cero, punto 315 00:13:36,620 --> 00:13:39,960 no he puesto public el set 316 00:13:39,960 --> 00:13:42,120 de robots 317 00:13:42,120 --> 00:13:44,000 Ah, es que no le he hecho ni 318 00:13:44,000 --> 00:13:47,080 No le he hecho el 319 00:13:47,080 --> 00:13:49,059 El set del número de serie 320 00:13:49,059 --> 00:14:10,830 Vale, entonces ahora yo aquí 321 00:14:10,830 --> 00:14:12,889 Pues ya se le podría poner 322 00:14:12,889 --> 00:14:15,129 Pues yo que sé 323 00:14:15,129 --> 00:14:16,649 Número de serie, lo que fuera 324 00:14:16,649 --> 00:14:24,730 Va, el número de serie que es entero 325 00:14:24,730 --> 00:14:26,769 Luego, no es stream 326 00:14:26,769 --> 00:14:27,549 Es entero 327 00:14:27,549 --> 00:14:30,830 Vale, entonces ahora en mi zoológico tengo 328 00:14:30,830 --> 00:14:31,929 Eh 329 00:14:31,929 --> 00:14:34,269 Humanos y animales metidos aquí 330 00:14:34,269 --> 00:14:35,909 Y robots metidos aquí 331 00:14:35,909 --> 00:14:58,649 Pero están por libre. Entonces, si yo ahora quisiera ponerme a hablar, por ejemplo, con todos los que hablen, que son los humanos y los robots, pues no puedo tirar un bucle sin más que me hable con todos. 332 00:14:58,649 --> 00:15:00,590 tendría que ir recorriendo 333 00:15:00,590 --> 00:15:01,990 este array de animales 334 00:15:01,990 --> 00:15:04,929 y hablar con los que sean humanos 335 00:15:04,929 --> 00:15:06,409 haciendo el instance of 336 00:15:06,409 --> 00:15:08,669 y luego tendría que recorrer este 337 00:15:08,669 --> 00:15:10,750 porque se tratan por separado 338 00:15:10,750 --> 00:15:12,590 pero sin embargo comparten 339 00:15:12,590 --> 00:15:14,610 repito, una funcionalidad común 340 00:15:14,610 --> 00:15:15,330 que es hablar 341 00:15:15,330 --> 00:15:18,850 entonces esto ya de por sí parece 342 00:15:18,850 --> 00:15:20,169 medio feo 343 00:15:20,169 --> 00:15:23,190 uno puede, con lo que tiene de Java 344 00:15:23,190 --> 00:15:24,889 lo básico, sin que incorporemos nada más 345 00:15:24,889 --> 00:15:25,710 lo podría hacer todo 346 00:15:25,710 --> 00:15:29,830 pero la idea es las herramientas que se van incorporando 347 00:15:29,830 --> 00:15:33,269 para poder hacer aplicaciones realmente eficientes 348 00:15:33,269 --> 00:15:35,850 bueno, pues entonces, podríamos decir 349 00:15:35,850 --> 00:15:37,389 jo, lo bonito que sería 350 00:15:37,389 --> 00:15:41,350 si humano 351 00:15:41,350 --> 00:15:43,889 pudiera 352 00:15:43,889 --> 00:15:47,690 heredar de animal y por tanto 353 00:15:47,690 --> 00:15:51,169 tener todo lo de animal y también heredar de algo 354 00:15:51,169 --> 00:15:53,690 que le permitiera tener todo lo compartido 355 00:15:53,690 --> 00:15:55,389 lo compartido que tiene con robot. 356 00:15:55,610 --> 00:15:57,309 O sea, el humano tiene compartido con animal 357 00:15:57,309 --> 00:15:58,669 y compartido con robot. 358 00:15:59,149 --> 00:16:00,389 Y se tiene que pronunciar. 359 00:16:00,970 --> 00:16:02,190 ¿Tú qué haces? 360 00:16:02,250 --> 00:16:04,269 ¿Heredas de animal y te quedas con todo lo de animal 361 00:16:04,269 --> 00:16:04,909 más lo tuyo? 362 00:16:05,269 --> 00:16:08,669 ¿O heredas de otra cosa que te da todo lo compartido 363 00:16:08,669 --> 00:16:10,830 con robot y particularizas lo tuyo? 364 00:16:10,850 --> 00:16:11,529 Tienes que elegir. 365 00:16:11,610 --> 00:16:13,769 Entonces, una caca que tengas que elegir. 366 00:16:14,409 --> 00:16:17,129 Vale, pues entonces, aquí como nos vendría muy bien 367 00:16:17,129 --> 00:16:18,669 la herencia múltiple, nos vendría muy bien 368 00:16:18,669 --> 00:16:21,629 que humano pudiera heredar de dos cosas distintas, 369 00:16:21,629 --> 00:16:24,269 pues nos hacemos una interfaz 370 00:16:24,269 --> 00:16:26,750 ¿qué es una interfaz? 371 00:16:27,230 --> 00:16:28,830 vale, una interfaz 372 00:16:28,830 --> 00:16:30,950 es como si fuera una clase 373 00:16:30,950 --> 00:16:32,590 abstracta, vale 374 00:16:32,590 --> 00:16:34,190 vamos a hacernos aquí 375 00:16:34,190 --> 00:16:36,429 en lugar de una clase, una interfaz 376 00:16:36,429 --> 00:16:37,789 entonces 377 00:16:37,789 --> 00:16:40,929 esa interfaz 378 00:16:40,929 --> 00:16:43,070 yo ahora mismo la estoy abriendo 379 00:16:43,070 --> 00:16:44,750 como si fuera hacer una clase normal y corriente 380 00:16:44,750 --> 00:16:46,129 esa clase 381 00:16:46,129 --> 00:16:49,070 ahora mismo para mí va a ser 382 00:16:49,070 --> 00:16:51,309 la super clase de robots y humanos 383 00:16:51,309 --> 00:16:54,509 en la que voy a poner lo común entre robots y humanos. 384 00:16:55,450 --> 00:16:57,809 Los humanos y los animales tienen cosas comunes 385 00:16:57,809 --> 00:17:00,210 y los humanos y los robots tienen cosas comunes. 386 00:17:00,870 --> 00:17:04,329 Pues voy a poner una superclase con lo común entre animal y humano 387 00:17:04,329 --> 00:17:05,109 que ya está en animal 388 00:17:05,109 --> 00:17:08,390 y una superclase con lo común entre robot y humano. 389 00:17:11,339 --> 00:17:14,440 Mi problema, si yo lo dejo como clase tal cual, 390 00:17:14,980 --> 00:17:17,019 mi clase, pues lo común entre robot y humano, 391 00:17:17,019 --> 00:17:17,740 ¿cuál puede ser? 392 00:17:17,799 --> 00:17:18,640 Que son habladores. 393 00:17:20,019 --> 00:17:20,920 Clase hablador. 394 00:17:20,920 --> 00:17:26,730 sí, hacemos una clase 395 00:17:26,730 --> 00:17:27,990 hablador con lo común 396 00:17:27,990 --> 00:17:29,869 entre humanos y robots 397 00:17:29,869 --> 00:17:32,509 ¿vale? lo común entre humanos 398 00:17:32,509 --> 00:17:34,890 y robots, pues puede ser 399 00:17:34,890 --> 00:17:36,750 el timbre 400 00:17:36,750 --> 00:17:38,750 de la voz, porque todos los dos hablan 401 00:17:38,750 --> 00:17:50,950 ¿vale? 402 00:17:51,589 --> 00:17:52,990 y a ver, los getty set 403 00:17:52,990 --> 00:17:54,670 los voy poniendo todo el rato, porque es un rollo 404 00:17:54,670 --> 00:17:56,890 quiero que entendamos qué es esto 405 00:17:56,890 --> 00:17:58,049 antes de irnos y ya está 406 00:17:58,049 --> 00:18:00,970 entonces esto es lo que 407 00:18:00,970 --> 00:18:01,630 tienen en común 408 00:18:01,630 --> 00:18:06,549 entonces yo podría dejar esta clase así 409 00:18:06,549 --> 00:18:08,769 y luego además tienen en común que los dos pueden hablar 410 00:18:08,769 --> 00:18:10,650 de hecho 411 00:18:10,650 --> 00:18:12,029 yo había hecho ya en humano 412 00:18:12,029 --> 00:18:13,349 un método hablar 413 00:18:13,349 --> 00:18:16,509 y en robot había hecho también un método hablar 414 00:18:16,509 --> 00:18:17,950 porque los dos pueden hablar 415 00:18:17,950 --> 00:18:19,930 entonces nosotros ya de herencia sabemos 416 00:18:19,930 --> 00:18:21,309 que en este caso 417 00:18:21,309 --> 00:18:24,309 vamos a hacer por tanto un método aquí 418 00:18:24,309 --> 00:18:25,369 hablar 419 00:18:25,369 --> 00:18:30,420 como este método 420 00:18:30,420 --> 00:18:32,339 todavía se queda por definir 421 00:18:32,339 --> 00:18:34,319 porque el humano hablará de una forma 422 00:18:34,319 --> 00:18:35,539 y el robot hablará de otra 423 00:18:35,539 --> 00:18:50,960 Entonces, ahora mismo está por definir. Pues lo dejo por definir. Eso lo convierte en abstracto. Eso lo convierte en abstracto. Y ahora, al tener esta clase un método abstracto, esta clase se convierte en abstracta. 424 00:18:50,960 --> 00:19:05,079 vale, genial, ahora ya robot lo completo y digo, a ver, robot hereda de hablador, estupendo, robot me hereda de hablador, 425 00:19:07,480 --> 00:19:15,880 pero claro, humano también me debería heredar de hablador, de hecho para eso he hecho esta clase, para que sea la super clase de humanos y robots, 426 00:19:15,880 --> 00:19:18,660 pero ¿qué ocurre? lo que ya sabemos 427 00:19:18,660 --> 00:19:21,000 humano resulta 428 00:19:21,000 --> 00:19:21,960 que ya es un animal 429 00:19:21,960 --> 00:19:24,059 ojalá pudiera yo hacer esto 430 00:19:24,059 --> 00:19:26,660 que sea un animal y además 431 00:19:26,660 --> 00:19:28,700 un hablador, con lo cual se queda 432 00:19:28,700 --> 00:19:30,700 con las dos, lo que tenga animal y lo que tenga hablador 433 00:19:30,700 --> 00:19:31,259 con las dos 434 00:19:31,259 --> 00:19:35,019 pero en Java no se puede heredar de más de una clase 435 00:19:35,019 --> 00:19:37,039 desgraciadamente esto no lo podemos hacer 436 00:19:37,039 --> 00:19:39,019 luego este diseño 437 00:19:39,019 --> 00:19:41,059 que hemos hecho no funciona 438 00:19:41,059 --> 00:19:42,839 hablador 439 00:19:42,839 --> 00:19:44,500 no puede ser, no, no, no 440 00:19:44,500 --> 00:19:45,940 Apenas hay que borrar nada, tranquilos 441 00:19:45,940 --> 00:19:48,059 Vale, pues como lo arreglamos 442 00:19:48,059 --> 00:19:49,640 Ojo 443 00:19:49,640 --> 00:19:52,359 Hablador en lugar de clase 444 00:19:52,359 --> 00:19:54,299 Que sea 445 00:19:54,299 --> 00:19:56,759 Una cosa que llamamos interfaz 446 00:19:56,759 --> 00:19:57,380 Esto 447 00:19:57,380 --> 00:20:00,319 Que sea una interfaz 448 00:20:00,319 --> 00:20:01,440 Una interfaz 449 00:20:01,440 --> 00:20:10,329 Vale, bueno 450 00:20:10,329 --> 00:20:12,470 Pues que es una interfaz 451 00:20:12,470 --> 00:20:14,289 Una interfaz 452 00:20:14,849 --> 00:20:16,289 Interface 453 00:20:16,930 --> 00:20:17,769 Como lo queráis llamar 454 00:20:17,769 --> 00:20:18,890 Porque a veces cuando decimos interfaz 455 00:20:18,890 --> 00:20:21,029 lo confundimos con interfaz gráfica, eso es otra cosa 456 00:20:21,029 --> 00:20:21,329 claro 457 00:20:21,329 --> 00:20:23,970 es una clase 458 00:20:23,970 --> 00:20:26,869 que solo tiene 459 00:20:26,869 --> 00:20:31,250 métodos abstractos 460 00:20:31,250 --> 00:20:40,650 vale, voy a poner 461 00:20:40,650 --> 00:20:43,009 aquí con matices 462 00:20:43,009 --> 00:20:44,589 por ahora dejamos el con matices 463 00:20:44,589 --> 00:20:46,289 porque si alguno lo estudia por ahí dirá 464 00:20:46,289 --> 00:20:48,410 uy, me han mentido, no te he mentido 465 00:20:48,410 --> 00:20:50,390 lo que pasa es que no te he dado toda la información 466 00:20:50,390 --> 00:20:51,470 para no liar 467 00:20:51,470 --> 00:20:53,549 el con matices significa 468 00:20:53,549 --> 00:20:56,049 que estos métodos abstractos 469 00:20:56,049 --> 00:20:58,430 podrían tener una implementación por defecto 470 00:20:58,430 --> 00:20:59,769 pero eso nos olvidamos por ahora 471 00:20:59,769 --> 00:21:02,410 vamos a la definición más general de interfaz 472 00:21:02,410 --> 00:21:04,309 una interfaz es una clase 473 00:21:04,309 --> 00:21:05,849 que solo puede tener 474 00:21:05,849 --> 00:21:08,089 métodos abstractos, ni siquiera 475 00:21:08,089 --> 00:21:11,269 ni siquiera 476 00:21:11,269 --> 00:21:14,150 puede tener 477 00:21:14,150 --> 00:21:15,609 propiedades 478 00:21:15,609 --> 00:21:18,589 ni siquiera 479 00:21:18,589 --> 00:21:21,390 lo que sí que puede tener 480 00:21:21,390 --> 00:21:24,329 es variables estáticas 481 00:21:24,329 --> 00:21:24,930 esto sí 482 00:21:24,930 --> 00:21:32,779 eso es una interfaz 483 00:21:32,779 --> 00:21:35,519 entonces cuando declaramos una interfaz 484 00:21:35,519 --> 00:21:37,200 ahora ya viene la teoría 485 00:21:37,200 --> 00:21:39,019 cuando declaramos una interfaz 486 00:21:39,019 --> 00:21:40,839 en lugar de class ponemos interfaz 487 00:21:40,839 --> 00:21:42,079 vale 488 00:21:42,079 --> 00:21:45,019 cambia class por esto 489 00:21:45,019 --> 00:21:46,779 entonces 490 00:21:46,779 --> 00:21:48,759 una interfaz 491 00:21:48,759 --> 00:21:50,079 está pensada 492 00:21:50,079 --> 00:21:52,339 para ofrecer 493 00:21:52,339 --> 00:21:54,740 una sucesión de métodos vacíos 494 00:21:54,740 --> 00:21:57,160 que definen como una obligación 495 00:21:57,160 --> 00:21:58,000 de comportamiento 496 00:21:58,000 --> 00:22:00,160 dices yo soy la interfaz hablador 497 00:22:00,160 --> 00:22:03,099 entonces todo el que herede de mí 498 00:22:03,099 --> 00:22:04,740 va a ser un hablador 499 00:22:04,740 --> 00:22:06,940 y por tanto está obligado 500 00:22:06,940 --> 00:22:08,819 a implementar todos los métodos 501 00:22:08,819 --> 00:22:09,839 abstractos que yo tenga 502 00:22:09,839 --> 00:22:12,420 entonces la idea de fondo de la interfaz 503 00:22:12,420 --> 00:22:14,740 es como recoger 504 00:22:14,740 --> 00:22:16,819 un tipo de comportamiento 505 00:22:16,819 --> 00:22:18,500 normalmente, un tipo de comportamiento 506 00:22:18,500 --> 00:22:20,740 por ejemplo la interfaz hablador 507 00:22:20,740 --> 00:22:23,079 recogería el tipo de comportamiento 508 00:22:23,079 --> 00:22:24,680 de los habladores, que puede ser 509 00:22:24,680 --> 00:22:26,880 método hablar, método gritar, método 510 00:22:26,880 --> 00:22:28,839 susurrar, esos métodos 511 00:22:28,839 --> 00:22:30,579 se quedan vacíos, son abstractos 512 00:22:30,579 --> 00:22:32,779 y luego ya las clases 513 00:22:32,779 --> 00:22:34,799 que hereden de esa interfaz 514 00:22:34,799 --> 00:22:37,079 tienen ya que obligatoriamente 515 00:22:37,079 --> 00:22:39,059 dar cuerpo a esos métodos 516 00:22:39,059 --> 00:22:41,180 entonces una interfaz es una especie 517 00:22:41,180 --> 00:22:42,539 de contrato vinculante 518 00:22:42,539 --> 00:22:44,799 es decir, yo 519 00:22:44,799 --> 00:22:47,140 defino lo que 520 00:22:47,140 --> 00:22:48,299 tiene que hacer un hablador 521 00:22:48,299 --> 00:22:50,599 y el que me herede 522 00:22:50,599 --> 00:22:52,579 ahora vemos como se le da una interfaz 523 00:22:52,579 --> 00:22:54,539 una interfaz, como lo queréis llamar 524 00:22:54,539 --> 00:23:01,859 el que me herede, tiene que obligatoriamente ya definir cómo va a hacer él cada una de las cosas. 525 00:23:02,980 --> 00:23:05,339 Esta interfaz solo tiene un método, pero debería tener varias. 526 00:23:06,079 --> 00:23:07,859 Luego, ese es más o menos el sentido que tiene. 527 00:23:08,160 --> 00:23:12,539 Es como una especie de contrato vinculante de acciones. 528 00:23:13,420 --> 00:23:15,119 Porque es lo único que puede tener, métodos. 529 00:23:15,299 --> 00:23:16,460 No puede tener ni propiedades. 530 00:23:17,759 --> 00:23:22,160 Entonces, propiedades estáticas como constantes globales, 531 00:23:22,160 --> 00:23:24,059 y se le deja una constante global para decidir 532 00:23:24,059 --> 00:23:26,200 algo global, entonces de hecho es tan así 533 00:23:26,200 --> 00:23:28,220 que no hace falta ni poner el static 534 00:23:28,220 --> 00:23:30,140 si yo pongo aquí una propiedad 535 00:23:30,140 --> 00:23:32,279 como las interfaces obligatoriamente 536 00:23:32,279 --> 00:23:34,220 solo pueden tener propiedades estáticas 537 00:23:34,220 --> 00:23:35,799 si yo pongo aquí una propiedad 538 00:23:35,799 --> 00:23:38,160 esta propiedad por defecto es static 539 00:23:38,160 --> 00:23:39,599 por defecto, aunque yo no lo ponga 540 00:23:39,599 --> 00:23:42,059 de hecho me la he puesto en cursiva, en cuanto yo he cambiado 541 00:23:42,059 --> 00:23:43,980 esto, class por interfaz 542 00:23:43,980 --> 00:23:46,400 cuando la tenía 543 00:23:46,400 --> 00:23:48,519 en class, no estaba en cursiva 544 00:23:48,519 --> 00:23:50,059 porque era una propiedad normal 545 00:23:50,059 --> 00:23:52,480 cuando yo lo cambio 546 00:23:52,480 --> 00:23:54,660 a interfaz 547 00:23:54,660 --> 00:23:56,539 me lo pone en cursiva 548 00:23:56,539 --> 00:23:58,680 que le eclipse, él porque le da la gana 549 00:23:58,680 --> 00:24:00,599 a él, pone en cursiva las propiedades 550 00:24:00,599 --> 00:24:02,839 estáticas, entonces esto 551 00:24:02,839 --> 00:24:04,940 cuando esto es una interfaz 552 00:24:04,940 --> 00:24:06,759 cualquier cosa que yo ponga 553 00:24:06,759 --> 00:24:08,559 aquí, es 554 00:24:08,559 --> 00:24:10,619 static o no, no da igual 555 00:24:10,619 --> 00:24:12,700 que lo ponga o no lo ponga, es que es static, sí o sí 556 00:24:12,700 --> 00:24:14,400 entonces aquí en particular 557 00:24:14,400 --> 00:24:16,339 me aparece en rojo, perdón 558 00:24:16,339 --> 00:24:18,359 sí en rojo, porque si recordáis 559 00:24:18,359 --> 00:24:19,940 las variables estáticas 560 00:24:19,940 --> 00:24:22,519 hay que definirlas en el momento de declararlas. 561 00:24:22,519 --> 00:24:26,980 Si no las defines, pues te daría problemas. 562 00:24:27,519 --> 00:24:27,619 ¿Vale? 563 00:24:29,680 --> 00:24:34,720 Entonces, bueno, aquí el timbre voz, 564 00:24:34,920 --> 00:24:37,519 como es particular de cada heredero, 565 00:24:38,279 --> 00:24:40,460 no tendría sentido poner aquí timbre voz. 566 00:24:40,920 --> 00:24:43,700 Las interfaces no pueden incluir propiedades. 567 00:24:44,099 --> 00:24:46,740 Todo lo que sean propiedades tiene que ir en las subclases. 568 00:24:46,900 --> 00:24:47,079 Todo. 569 00:24:47,079 --> 00:24:50,019 La interfaz solo vale para definir un comportamiento. 570 00:24:50,579 --> 00:24:51,980 Entonces, esta propiedad aquí. 571 00:24:54,440 --> 00:24:56,500 No, no, no, no, no, los métodos jamás. 572 00:24:57,079 --> 00:24:57,819 Las propiedades. 573 00:24:58,920 --> 00:25:01,940 Porque solamente puede tener propiedades estáticas, solo. 574 00:25:03,099 --> 00:25:05,079 Lo normal es que las estéticas no tengan propiedades. 575 00:25:05,519 --> 00:25:08,799 Pues las propiedades estáticas te valen para información global. 576 00:25:08,940 --> 00:25:10,700 Información global puedes tener muy poquita. 577 00:25:11,299 --> 00:25:12,660 Pero si hay alguna que te interese, 578 00:25:12,720 --> 00:25:14,680 la puedes poner ahí como variable estática. 579 00:25:14,680 --> 00:25:17,220 Pero normal es que no tengan variables, ni siquiera variables estáticas. 580 00:25:18,119 --> 00:25:24,480 Bueno, pues entonces los métodos de una interfaz, por defecto, como son abstractos, el abstract ni se pone. 581 00:25:25,680 --> 00:25:30,240 Y el public tampoco, porque obligatoriamente los métodos de una interfaz son públicos. 582 00:25:30,640 --> 00:25:33,480 Luego esto es que ni se pone, esto se queda así. 583 00:25:35,180 --> 00:25:39,980 Y aunque se quede así, esto es abstracto y público. 584 00:25:39,980 --> 00:25:43,519 luego, los métodos de las interfaces 585 00:25:43,519 --> 00:25:45,660 y sus propiedades estáticas en caso de haberlas 586 00:25:45,660 --> 00:25:46,960 todas 587 00:25:46,960 --> 00:25:48,880 son implícitamente 588 00:25:48,880 --> 00:25:51,480 públicas, lo ponga yo o no lo ponga 589 00:25:51,480 --> 00:25:53,319 porque en una interfaz 590 00:25:53,319 --> 00:25:55,279 se entiende que es como una plantilla 591 00:25:55,279 --> 00:25:57,099 que está ahí y que la podemos 592 00:25:57,099 --> 00:25:59,240 heredar de mil sitios, entonces debería 593 00:25:59,240 --> 00:25:59,839 ser pública 594 00:25:59,839 --> 00:26:02,319 entonces implícitamente 595 00:26:02,319 --> 00:26:04,359 vale, entonces lo voy a poner ahí 596 00:26:04,359 --> 00:26:08,740 todos los 597 00:26:08,740 --> 00:26:09,980 métodos 598 00:26:09,980 --> 00:26:12,579 de una 599 00:26:12,579 --> 00:26:13,859 interfaz 600 00:26:13,859 --> 00:26:16,299 son 601 00:26:16,299 --> 00:26:18,680 implícitamente, es decir, aunque yo no lo ponga 602 00:26:18,680 --> 00:26:19,680 de forma implícita, 603 00:26:21,039 --> 00:26:21,700 públicos. 604 00:26:22,839 --> 00:26:24,099 Luego los puede usar 605 00:26:24,099 --> 00:26:26,400 desde cualquier otro paquete sin 606 00:26:26,400 --> 00:26:27,099 ningún problema. 607 00:26:30,799 --> 00:26:31,500 De hecho, 608 00:26:32,519 --> 00:26:34,359 este public creo que ni siquiera tenemos que ponerlo, 609 00:26:34,359 --> 00:26:36,079 aunque eso no estoy segura. 610 00:26:37,400 --> 00:26:38,119 Sí, o sea, 611 00:26:38,160 --> 00:26:40,380 podríamos no ponerlo y también ahí es como si estuviera 612 00:26:40,380 --> 00:26:42,059 implícitamente el public puesto. 613 00:26:42,180 --> 00:26:44,140 Lo que pasa es que a mí verlo así me da como un poco 614 00:26:44,140 --> 00:26:46,240 de dolor. Muchas veces vais 615 00:26:46,240 --> 00:26:48,099 a ver el public puesto en los métodos, pero es que da 616 00:26:48,099 --> 00:26:49,380 igual que esté puesto o que no esté puesto. 617 00:26:51,440 --> 00:26:51,660 ¿Vale? 618 00:26:55,309 --> 00:26:55,670 Entonces, 619 00:26:56,269 --> 00:26:57,650 repito que de esto hay matices. 620 00:26:58,029 --> 00:26:59,829 Es que puede haber 621 00:26:59,829 --> 00:27:02,250 una implementación por defecto en la interfaz, 622 00:27:02,450 --> 00:27:03,730 pero eso lo dejamos para más adelante. 623 00:27:04,470 --> 00:27:05,890 Que puede haber cositas 624 00:27:05,890 --> 00:27:07,829 aquí. Aquí puede haber más cosas y más rollo 625 00:27:07,829 --> 00:27:09,829 relacionado con la operación funcional 626 00:27:09,829 --> 00:27:11,150 que dejamos un poco para más adelante. 627 00:27:11,809 --> 00:27:13,690 Pero ahora mismo nos quedamos con lo básico 628 00:27:13,690 --> 00:27:15,549 y con lo único que realmente necesitamos 629 00:27:15,549 --> 00:27:17,690 para trabajar, que es que 630 00:27:17,690 --> 00:27:19,789 una interfaz es esto, una clase 631 00:27:19,789 --> 00:27:21,369 que se pone interfaz en vez de class 632 00:27:21,369 --> 00:27:23,829 que solamente tiene métodos abstractos 633 00:27:23,829 --> 00:27:25,710 y vale para 634 00:27:25,710 --> 00:27:28,250 unificar subclases 635 00:27:28,250 --> 00:27:29,670 bueno, pues entonces 636 00:27:29,670 --> 00:27:31,630 ahora ya tenemos esta interfaz, porque en nuestra 637 00:27:31,630 --> 00:27:33,410 aplicación hemos decidido que va a haber habladores 638 00:27:33,410 --> 00:27:35,490 va a haber habladores, pues tienen 639 00:27:35,490 --> 00:27:37,450 su interfaz hablador con su comportamiento 640 00:27:37,450 --> 00:27:39,410 y a lo mejor esos habladores 641 00:27:39,410 --> 00:27:41,670 pues yo que sé, vamos a, pueden hacer más cosas 642 00:27:41,670 --> 00:27:41,869 ¿no? 643 00:27:43,690 --> 00:27:54,670 Bueno, pues entonces, ahora ya, mi robot es un hablador, pues ¿cómo se hereda una interfaz? 644 00:27:54,670 --> 00:28:09,670 No se pone extens, justo, muy bien, a una interfaz se la implementa, a una clase o clase abstracta se la hereda o extiende y a una interfaz se la implementa. 645 00:28:09,670 --> 00:28:24,390 Implementa. Implementa significa dar cuerpo a los métodos que tiene. Entonces, robot implementa hablador. Tiene que implementar hablador y por tanto, pues al implementar hablador, tiene que dar cuerpo a los métodos que tiene. 646 00:28:24,390 --> 00:28:36,970 Tiene que implementar hablar, que ya lo implementaba, que es este. Y tiene que implementar susurrar. Pues ya está, pues susurrar cualquier cosa. 647 00:28:43,089 --> 00:28:52,269 vale 648 00:28:52,269 --> 00:28:54,670 y ahora que ocurre con humano 649 00:28:54,670 --> 00:28:57,250 pues humano 650 00:28:57,250 --> 00:28:58,670 este override 651 00:28:58,670 --> 00:29:01,029 nos lo pone el eclipse automáticamente 652 00:29:01,029 --> 00:29:01,789 pero ahora mismo 653 00:29:01,789 --> 00:29:04,289 lo podemos quitar porque no 654 00:29:04,289 --> 00:29:05,529 nos aporta nada 655 00:29:05,529 --> 00:29:07,269 y que ocurre con el humano 656 00:29:07,269 --> 00:29:10,230 pues que el humano que lo que queríamos era 657 00:29:10,230 --> 00:29:12,609 que tuviera 658 00:29:12,609 --> 00:29:15,650 de los dos 659 00:29:15,650 --> 00:29:17,789 pues hereda de animal 660 00:29:17,789 --> 00:29:20,109 y al heredar 661 00:29:20,109 --> 00:29:23,150 nos quedamos con propiedades, con métodos 662 00:29:23,150 --> 00:29:24,569 y todo, porque animal es una clase 663 00:29:24,569 --> 00:29:27,130 y además implementa 664 00:29:27,130 --> 00:29:29,130 hablador, pues después del stents 665 00:29:29,130 --> 00:29:30,809 ponemos el implements 666 00:29:30,809 --> 00:29:35,380 vale, entonces 667 00:29:35,380 --> 00:29:37,539 mi humano hereda de animal 668 00:29:37,539 --> 00:29:38,539 con todo lo que animal tenga 669 00:29:38,539 --> 00:29:41,039 y además implementa hablador 670 00:29:41,039 --> 00:29:43,099 con todo lo que hablador tenga 671 00:29:43,099 --> 00:29:44,819 que solamente van a ser métodos 672 00:29:44,819 --> 00:29:47,019 solamente van a ser métodos 673 00:29:47,019 --> 00:29:49,279 vale, pues al implementar 674 00:29:49,279 --> 00:29:50,799 de hablador, está 675 00:29:50,799 --> 00:29:52,559 condenado a 676 00:29:52,559 --> 00:29:54,960 dar cuerpo a los métodos de 677 00:29:54,960 --> 00:29:57,099 hablador. Al hablar ya le daba 678 00:29:57,099 --> 00:29:59,339 cuerpo y vamos a 679 00:29:59,339 --> 00:30:02,500 darle cuerpo al otro de susurrar. 680 00:30:14,859 --> 00:30:21,859 Y esta es la única forma 681 00:30:21,859 --> 00:30:23,759 de implementar la herencia múltiple 682 00:30:23,759 --> 00:30:24,920 en Java. 683 00:30:26,380 --> 00:30:28,220 Y con estas herramientas 684 00:30:28,220 --> 00:30:30,240 de clases, clases abstractas, interfaces, 685 00:30:30,980 --> 00:30:32,299 herencias e implementaciones, 686 00:30:32,740 --> 00:30:33,559 pues uno trata 687 00:30:33,559 --> 00:30:35,019 de reflejar 688 00:30:35,019 --> 00:30:38,000 de la manera más fidedigna 689 00:30:38,000 --> 00:30:39,440 y con el mayor sentido posible 690 00:30:39,440 --> 00:30:40,559 la situación 691 00:30:40,559 --> 00:30:42,880 entonces, normalmente 692 00:30:42,880 --> 00:30:46,559 elegimos clases y clases abstractas 693 00:30:46,559 --> 00:30:48,359 cuando lo que queremos 694 00:30:48,359 --> 00:30:49,519 recoger en esa entidad 695 00:30:49,519 --> 00:30:51,460 no solo es comportamiento 696 00:30:51,460 --> 00:30:53,160 sino también es propiedades 697 00:30:53,160 --> 00:30:54,799 queremos recoger propiedades 698 00:30:54,799 --> 00:30:57,519 como en animal, queríamos recoger nombre, descripción 699 00:30:57,519 --> 00:30:59,420 e interfaces 700 00:30:59,420 --> 00:31:01,400 las interfaces están pensadas 701 00:31:01,400 --> 00:31:03,079 para recoger comportamientos 702 00:31:03,079 --> 00:31:23,759 Por eso las interfaces suelen acabar con nombre hable, hablable, titulable, pesable, modificable, porque las interfaces lo que recogen son comportamientos, métodos, acciones, y el que implementa la interfaz da cuerpo a esas acciones, y el que hereda de una clase da cuerpo a lo que tenga abstracto y a sus propiedades. 703 00:31:33,079 --> 00:31:51,500 Sí, y eso te permite, igual que la herencia, meter la misma referencia, ¿vale? 704 00:31:51,500 --> 00:31:56,619 Es decir, ahora yo, al robot y humano, al implementar los dos hablador, 705 00:31:57,440 --> 00:32:02,380 a mí ahora en mi aplicación se me abre esta posibilidad que antes no tenía. 706 00:32:03,079 --> 00:32:40,599 Vale, entonces, ahora yo aquí, en mi array este de habladores, si habladores es una interfaz, pues en mi array este, ahora de nuevo tengo la flexibilidad de, puedo meter un humano, puedo meter un robot. 707 00:32:40,599 --> 00:32:41,720 entonces 708 00:32:41,720 --> 00:32:44,279 cuando 709 00:32:44,279 --> 00:32:54,759 vale, entonces efectivamente 710 00:32:54,759 --> 00:32:56,619 el significado que tiene una interfaz 711 00:32:56,619 --> 00:32:59,039 es describir un comportamiento 712 00:32:59,039 --> 00:33:00,880 y entonces todas las clases 713 00:33:00,880 --> 00:33:02,140 que implementa una interfaz 714 00:33:02,140 --> 00:33:04,500 se supone que tienen un comportamiento común 715 00:33:04,500 --> 00:33:06,680 aunque cada una lo haga de una manera distinta 716 00:33:06,680 --> 00:33:08,519 pero todos hablan, todos corren 717 00:33:08,519 --> 00:33:09,380 todos lo que sea 718 00:33:09,380 --> 00:33:12,779 entonces efectivamente una interfaz 719 00:33:12,779 --> 00:33:14,579 es una manera de 720 00:33:14,579 --> 00:33:16,160 catalogar, como dices tú 721 00:33:16,160 --> 00:33:17,339 un comportamiento 722 00:33:17,339 --> 00:33:20,500 y luego ya cada clase que lo implemente 723 00:33:20,500 --> 00:33:22,279 ya da las particularidades de cómo lo hace 724 00:33:22,279 --> 00:33:24,339 y aparte de eso 725 00:33:24,339 --> 00:33:26,339 de diseño, de dar una especie 726 00:33:26,339 --> 00:33:28,220 de foto un poquito más real 727 00:33:28,220 --> 00:33:30,299 aparte de eso me permite lo mismo 728 00:33:30,299 --> 00:33:31,259 que me permite la herencia 729 00:33:31,259 --> 00:33:34,500 ahora yo puedo tener una caja de habladores 730 00:33:34,500 --> 00:33:35,859 de toda la gente que se comporta igual 731 00:33:35,859 --> 00:33:37,819 entonces yo aquí en esta caja tengo 732 00:33:37,819 --> 00:33:40,240 todos los que tienen ese comportamiento 733 00:33:40,240 --> 00:33:41,579 de habladores, todos los que tienen 734 00:33:41,579 --> 00:33:44,359 yo aquí puedo tener humanos y robots tranquilamente 735 00:33:44,359 --> 00:33:46,180 entonces los humanos 736 00:33:46,180 --> 00:33:48,200 pueden estar en cajas de habladores 737 00:33:48,200 --> 00:33:50,480 y en cajas de animales, tranquilamente 738 00:33:50,480 --> 00:33:52,359 en las dos, porque los humanos se ayudan 739 00:33:52,359 --> 00:33:53,559 de animales e implementan robots. 740 00:33:54,180 --> 00:33:56,400 El robot puede estar en cajas de habladores 741 00:33:56,400 --> 00:33:58,319 y los animales 742 00:33:58,319 --> 00:34:00,299 y los perros, pues en cajas 743 00:34:00,299 --> 00:34:02,539 de perros, o sea, de animales. 744 00:34:03,180 --> 00:34:03,299 Claro. 745 00:34:08,409 --> 00:34:09,650 Entonces, esta de nuevo es la 746 00:34:09,650 --> 00:34:10,090 ventaja. 747 00:34:11,670 --> 00:34:13,489 El que todos los que se comportan 748 00:34:13,489 --> 00:34:15,269 igual y por tanto implementan la misma 749 00:34:15,269 --> 00:34:17,409 interfaz, pues pueden 750 00:34:17,409 --> 00:34:21,769 Estar bajo una interfaz 751 00:34:21,769 --> 00:34:23,690 Bajo una referencia común 752 00:34:23,690 --> 00:34:26,050 ¿Vale? Y meterlos en la misma caja, etc 753 00:34:26,050 --> 00:34:29,849 Entonces de nuevo nos abre 754 00:34:29,849 --> 00:34:31,269 Las posibilidades 755 00:34:31,269 --> 00:34:33,969 ¿Vale? Entonces el próximo día 756 00:34:33,969 --> 00:34:36,389 Hacemos ya un ejercicio 757 00:34:36,389 --> 00:34:38,369 Un poco más concreto, más tocable 758 00:34:38,369 --> 00:34:42,389 Para verlo un poquito mejor 759 00:34:42,389 --> 00:34:43,429 ¿Vale? 760 00:34:44,429 --> 00:34:45,889 Venga, pues vamos a parar aquí