1 00:00:00,000 --> 00:00:03,620 vale, entonces teníamos estas clases 2 00:00:03,620 --> 00:00:05,700 como esta aplicación era simplemente 3 00:00:05,700 --> 00:00:07,440 para obtener 4 00:00:07,440 --> 00:00:09,779 perímetros y áreas de cualquier 5 00:00:09,779 --> 00:00:11,539 figura geométrica que se podía ir 6 00:00:11,539 --> 00:00:12,939 incorporando a la aplicación 7 00:00:12,939 --> 00:00:15,699 pues las clases tenían que tener sus métodos 8 00:00:15,699 --> 00:00:17,539 perímetros y áreas, vale 9 00:00:17,539 --> 00:00:19,760 vamos a completar cada una de ellas con el método 10 00:00:19,760 --> 00:00:21,820 área, porque solamente hicimos un método 11 00:00:21,820 --> 00:00:23,280 perímetro en cada una de ellas 12 00:00:23,280 --> 00:00:24,960 de las cuatro que incorporamos 13 00:00:24,960 --> 00:00:27,940 pues vamos a hacer el método área 14 00:00:27,940 --> 00:00:29,760 entonces 15 00:00:29,760 --> 00:00:46,060 Vale, pues el área del triángulo 16 00:00:46,060 --> 00:00:49,039 ¿Cómo es el área de un triángulo? 17 00:00:56,539 --> 00:00:59,020 Eso sí, base por altura partido entre dos 18 00:00:59,020 --> 00:01:01,020 ¿Tenemos la altura? 19 00:01:01,020 --> 00:01:11,599 la base puede ser 20 00:01:11,599 --> 00:01:12,799 cualquiera de los lados 21 00:01:12,799 --> 00:01:15,019 la base puede ser cualquiera 22 00:01:15,019 --> 00:01:17,659 pero entonces la altura tendremos que hacerla 23 00:01:17,659 --> 00:01:19,140 pues como el seno 24 00:01:19,140 --> 00:01:21,379 del ángulo de no se que patatín 25 00:01:21,379 --> 00:01:23,599 como no nos apetece hacer operaciones 26 00:01:23,599 --> 00:01:25,680 matemáticas en función de los lados 27 00:01:25,680 --> 00:01:27,519 vamos a buscarlo en 28 00:01:27,519 --> 00:01:28,620 chat gpt verdad 29 00:01:28,620 --> 00:01:31,780 Estas son las cosas que se pueden buscar ahí 30 00:01:31,780 --> 00:01:35,900 Asumiendo que incluso en estas se equivoca 31 00:01:35,900 --> 00:01:37,439 Ya no te digo en las de desarrollo 32 00:01:37,439 --> 00:01:44,079 No, porque en el examen si necesitáis alguna consulta 33 00:01:44,079 --> 00:01:47,739 En el examen obviamente estará pensado 34 00:01:47,739 --> 00:01:50,000 Para que no tengáis que hacer consultas 35 00:01:50,000 --> 00:01:51,560 ¿Vale? 36 00:01:55,640 --> 00:01:56,359 Vale 37 00:01:56,359 --> 00:02:00,180 ¿Cómo puedo 38 00:02:00,180 --> 00:02:08,000 obtener 39 00:02:08,000 --> 00:02:10,900 el área de un 40 00:02:10,900 --> 00:02:14,740 triángulo a partir 41 00:02:14,740 --> 00:02:15,860 de las 42 00:02:15,860 --> 00:02:18,360 longitudes 43 00:02:18,360 --> 00:02:22,460 de sus tres lados? 44 00:02:23,300 --> 00:02:24,800 A ver si lo sabe. 45 00:02:24,800 --> 00:02:30,219 Pues la fórmula de Herón 46 00:02:30,219 --> 00:02:31,620 Magnífico 47 00:02:31,620 --> 00:02:33,080 Tiene pinta de que no se ha equivocado 48 00:02:33,080 --> 00:02:35,379 Porque tiene sentido, ¿verdad? 49 00:02:36,419 --> 00:02:38,000 Se calcula el semiperímetro 50 00:02:38,000 --> 00:02:38,699 Toma ya 51 00:02:38,699 --> 00:02:41,500 ¿Vale? 52 00:02:42,979 --> 00:02:43,840 Pues venga 53 00:02:43,840 --> 00:02:46,280 Ahora este es nuestro lado 1 54 00:02:46,280 --> 00:02:48,020 Nuestro lado 2 y nuestro lado 3 55 00:02:48,020 --> 00:02:49,879 Pues venga 56 00:02:49,879 --> 00:02:51,659 Vamos a hacer el semiperímetro primero 57 00:02:51,659 --> 00:02:58,360 Estoy trabajando todo el rato 58 00:02:58,360 --> 00:03:01,159 con enteros, lo cual es un poco chapucero 59 00:03:01,159 --> 00:03:03,340 porque estamos haciendo operaciones 60 00:03:03,340 --> 00:03:04,960 que van a dar decimales, pero como ya he empezado 61 00:03:04,960 --> 00:03:06,699 con enteros en todas las 62 00:03:06,699 --> 00:03:08,280 propiedades, lo vamos a dejar así 63 00:03:08,280 --> 00:03:10,639 pues el semiperímetro sería 64 00:03:10,639 --> 00:03:11,960 lado 1 65 00:03:11,960 --> 00:03:15,240 más lado 2 66 00:03:15,240 --> 00:03:16,840 más lado 3 67 00:03:16,840 --> 00:03:18,520 esto entre 3 68 00:03:18,520 --> 00:03:20,780 este entre 2 será 69 00:03:20,780 --> 00:03:21,699 porque si es un semi 70 00:03:21,699 --> 00:03:23,599 será la mitad, ¿no? 71 00:03:24,099 --> 00:03:25,180 a ver, vamos a 72 00:03:25,180 --> 00:03:27,699 eso, entre 2 73 00:03:27,699 --> 00:03:30,520 vale, esta es la mitad del perímetro 74 00:03:30,520 --> 00:03:31,900 lo que es lo mismo, el semiperímetro 75 00:03:31,900 --> 00:03:34,300 y ahora la fórmula de Herón, que es el área 76 00:03:34,300 --> 00:03:35,319 es 77 00:03:35,319 --> 00:03:37,860 la raíz cuadrada 78 00:03:37,860 --> 00:03:39,099 de 79 00:03:39,099 --> 00:03:42,360 una multiplicación de cuatro factores 80 00:03:42,360 --> 00:03:44,300 vale, pues la raíz cuadrada 81 00:03:44,300 --> 00:03:46,620 ahora ya sabemos que hay una clase 82 00:03:46,620 --> 00:03:47,639 que es la clase math 83 00:03:47,639 --> 00:03:50,360 que me provee de un montón de métodos 84 00:03:50,360 --> 00:03:52,180 estáticos, ahora ya que sabemos lo que es 85 00:03:52,180 --> 00:03:54,520 un método estático, son métodos como de librería 86 00:03:54,520 --> 00:03:56,639 que los podemos llamar directamente 87 00:03:56,639 --> 00:03:57,819 con el nombre de una clase 88 00:03:57,819 --> 00:03:59,280 porque por eso son estáticos 89 00:03:59,280 --> 00:04:02,580 si no fueran estáticos tendríamos que instanciar 90 00:04:02,580 --> 00:04:04,400 un objeto y llamarlo para ese objeto 91 00:04:04,400 --> 00:04:07,840 pues para los estáticos no hace falta 92 00:04:07,840 --> 00:04:09,360 pues con el nombre de la clase math 93 00:04:09,360 --> 00:04:11,099 podemos llamar a un montón de métodos 94 00:04:11,099 --> 00:04:12,800 que nos hacen utilidades matemáticas 95 00:04:12,800 --> 00:04:15,000 entre ellos la raíz 96 00:04:15,000 --> 00:04:17,540 y ahora queremos hacer la raíz 97 00:04:17,540 --> 00:04:19,920 de la multiplicación de estas cuatro cosas 98 00:04:19,920 --> 00:04:21,199 que era 99 00:04:21,199 --> 00:04:24,680 s por s menos a por s menos b por s menos c 100 00:04:24,680 --> 00:04:26,439 pues esto ya será 101 00:04:26,439 --> 00:04:31,839 S por S menos 102 00:04:31,839 --> 00:04:34,660 lado 1 por 103 00:04:34,660 --> 00:04:38,420 S menos lado 2 104 00:04:38,420 --> 00:04:43,199 por S menos lado 3 105 00:04:43,199 --> 00:04:49,990 ¡Hala! Ya tenemos nuestro área calculada 106 00:04:49,990 --> 00:04:52,550 según la fórmula de Herón 107 00:04:52,550 --> 00:04:57,509 ¿Para qué guardar una variable auxiliar? La devuelvo directamente 108 00:04:57,509 --> 00:05:01,209 la meto en un return 109 00:05:01,209 --> 00:05:03,089 y listo, la devuelvo 110 00:05:03,089 --> 00:05:05,310 lógicamente al ponerla en un return 111 00:05:05,310 --> 00:05:06,370 me ha aparecido en rojo 112 00:05:06,370 --> 00:05:07,949 ¿por qué me ha aparecido en rojo? 113 00:05:08,110 --> 00:05:12,129 porque ese QRT 114 00:05:12,129 --> 00:05:13,370 me lo devuelve con decimales 115 00:05:13,370 --> 00:05:14,189 me devuelve un double 116 00:05:14,189 --> 00:05:16,649 como yo estoy trabajando, no sé por qué 117 00:05:16,649 --> 00:05:17,709 pero ya he arrancado así 118 00:05:17,709 --> 00:05:20,569 todo con enteros, pues no pasa nada 119 00:05:20,569 --> 00:05:22,670 ¿cuál es la solución para quitar la parte decimal 120 00:05:22,670 --> 00:05:23,889 a un decimal? 121 00:05:25,829 --> 00:05:26,350 efectivamente 122 00:05:26,350 --> 00:05:27,850 Hacemos un casting 123 00:05:27,850 --> 00:05:29,589 Y a tomar por saco 124 00:05:29,589 --> 00:05:30,310 Vale 125 00:05:30,310 --> 00:05:33,470 Ya está, ya tenemos el área 126 00:05:33,470 --> 00:05:35,529 Y el área del cuadrado 127 00:05:35,529 --> 00:05:37,250 Y del círculo, el pentágono 128 00:05:37,250 --> 00:05:38,269 Es que no lo hemos sacado de la manga 129 00:05:38,269 --> 00:05:40,529 Para verlo de las clases abstractas 130 00:05:40,529 --> 00:05:43,329 Pero en el enunciado no lo decía 131 00:05:43,329 --> 00:05:45,990 El área del cuadrado es muchísimo más fácil 132 00:05:45,990 --> 00:05:47,170 Afortunadamente 133 00:05:47,170 --> 00:05:51,430 Eso lo sabe hasta Pedro 134 00:05:51,430 --> 00:05:51,790 ¿A que sí? 135 00:05:53,170 --> 00:05:54,449 ¿Cuál es el área del cuadrado? 136 00:05:56,350 --> 00:06:03,029 ¿Area del cuadrado, por Dios? 137 00:06:04,529 --> 00:06:05,709 Claro, lado por lado 138 00:06:05,709 --> 00:06:17,000 Ya, pero chat GPT 139 00:06:17,000 --> 00:06:19,779 si le preguntes el lado del cuadrado, si realmente es una inteligencia 140 00:06:19,779 --> 00:06:21,019 artificial bien hecha, te diría 141 00:06:21,019 --> 00:06:23,420 vete a la mierda, deduzco que tienes 142 00:06:23,420 --> 00:06:25,600 una edad suficiente para saber el área del cuadrado 143 00:06:25,600 --> 00:06:27,660 Y si no te contesta eso 144 00:06:27,660 --> 00:06:29,459 es que no es una inteligencia nerviosa, es solamente de curado. 145 00:06:31,160 --> 00:06:33,579 Pero si en estos años no sabes escribir todavía. 146 00:06:34,100 --> 00:06:36,060 Entonces no le puedes decir nada a ChargePT. 147 00:06:36,180 --> 00:06:38,439 Él ha deducido que tienes de 5 en adelante. 148 00:06:38,819 --> 00:06:39,480 Bueno, bueno. 149 00:06:40,240 --> 00:06:40,680 A ver. 150 00:06:40,860 --> 00:06:42,220 ¿Y área del círculo? 151 00:06:42,639 --> 00:06:45,819 El área del círculo también la sabéis porque sois muy listos. 152 00:06:49,300 --> 00:06:51,300 ¿Verdad que sí? ¿Cuál es el área del círculo? 153 00:06:51,420 --> 00:06:51,980 Sí, el recuerdo. 154 00:06:52,199 --> 00:06:53,379 Muy bien, muy bien. 155 00:06:56,379 --> 00:06:57,259 A ver. 156 00:06:57,660 --> 00:07:00,259 ¿Has perdido la oportunidad de quedar muy bien? 157 00:07:04,319 --> 00:07:06,199 Cachi, sé. A ver, está bien la sinceridad, 158 00:07:06,360 --> 00:07:08,060 pero a veces lo de mentir a veces viene 159 00:07:08,060 --> 00:07:08,459 muy bien. 160 00:07:09,819 --> 00:07:10,120 Venga. 161 00:07:13,120 --> 00:07:14,540 Oye, que la sinceridad 162 00:07:14,540 --> 00:07:15,759 está sobrevalorada. 163 00:07:15,920 --> 00:07:16,980 Una mentira a tiempo. 164 00:07:19,620 --> 00:07:20,139 Venga. 165 00:07:20,459 --> 00:07:22,100 Pi R cuadrado. 166 00:07:23,600 --> 00:07:24,939 Ese es el área, ¿verdad? 167 00:07:24,939 --> 00:07:28,660 vale, de nuevo nos salen 168 00:07:28,660 --> 00:07:30,019 rojito porque 169 00:07:30,019 --> 00:07:32,439 vamos a tener que hacer un casting 170 00:07:32,439 --> 00:07:34,860 cuidado, cuidado 171 00:07:34,860 --> 00:07:36,279 porque nosotros de repente 172 00:07:36,279 --> 00:07:38,300 a ver, os lo digo a vosotros 173 00:07:38,300 --> 00:07:39,980 aún sabiendo de que soy muy listos 174 00:07:39,980 --> 00:07:41,860 y os sobran la mayoría de las cosas que os digo 175 00:07:41,860 --> 00:07:44,600 pero yo insisto, insisto, insisto 176 00:07:44,600 --> 00:07:48,139 cuidado con que 177 00:07:48,139 --> 00:07:49,259 el compilador 178 00:07:49,259 --> 00:07:52,420 en este caso el entorno de desarrollo a través del cual 179 00:07:52,420 --> 00:07:54,279 se manifiesta el compilador con sus 180 00:07:54,279 --> 00:07:59,160 simbolitos rojos, te dice, sintácticamente esto está mal y 181 00:07:59,160 --> 00:08:00,259 te ofrece soluciones. 182 00:08:00,720 --> 00:08:03,819 Claro, pero esas soluciones no tienen, 183 00:08:04,360 --> 00:08:07,279 la mayoría de las veces, no tienen ningún sentido en 184 00:08:07,279 --> 00:08:08,360 relación a lo que tú quieres hacer. 185 00:08:08,519 --> 00:08:11,319 Son soluciones para quitar el error de compilación. 186 00:08:11,699 --> 00:08:13,420 Pero quitando un error de compilación, 187 00:08:13,579 --> 00:08:16,060 puedes haber cambiado el sentido de la aplicación completamente. 188 00:08:17,000 --> 00:08:19,680 Entonces, lógicamente, aquí la solución que nos daba era hacer 189 00:08:19,680 --> 00:08:20,079 un casting. 190 00:08:20,800 --> 00:08:23,620 Cuando la solución queda es hacer un casting, cuidado, 191 00:08:23,620 --> 00:08:25,319 porque hacer un casting la puedes cagar 192 00:08:25,319 --> 00:08:27,339 completamente. Depende de qué estás haciendo 193 00:08:27,339 --> 00:08:29,240 un casting aquí. Entonces, uno lo 194 00:08:29,240 --> 00:08:31,319 analiza y dice, a ver, si yo hago 195 00:08:31,319 --> 00:08:33,320 aquí un casting, ¿qué estoy haciendo? Estoy quitando 196 00:08:33,320 --> 00:08:34,759 la parte decimal del 197 00:08:34,759 --> 00:08:36,740 label. ¿Es lo que quiero? 198 00:08:37,279 --> 00:08:38,279 Sí. Vale. 199 00:08:39,059 --> 00:08:41,340 Pero en una aplicación, la que tú estás trabajando 200 00:08:41,340 --> 00:08:42,600 con alumnos, profesores, 201 00:08:43,179 --> 00:08:45,159 te has equivocado, has metido una 202 00:08:45,159 --> 00:08:47,139 variable que te han pasado por parámetro, la has 203 00:08:47,139 --> 00:08:49,200 permitido en una asignación. Y esa 204 00:08:49,200 --> 00:08:51,059 variable está declarada como alumno y tú estás metiendo 205 00:08:51,059 --> 00:08:53,059 un profesor. Entonces, tu error ha sido 206 00:08:53,059 --> 00:08:55,019 200 líneas más atrás 207 00:08:55,019 --> 00:08:56,899 que has pasado la variable que no era. 208 00:08:57,379 --> 00:08:59,000 El compilador obviamente de eso no tiene ni idea. 209 00:08:59,080 --> 00:09:00,340 El compilador te lo pone en rojo y te dice 210 00:09:00,340 --> 00:09:03,039 no casa. Y te ofrece el casting 211 00:09:03,039 --> 00:09:05,220 de profesor-alumno. Y tú dices, pain, casting, 212 00:09:05,360 --> 00:09:07,120 ya está, la aplicación se ha destrozado completamente. 213 00:09:07,399 --> 00:09:09,240 El error fue 200.000 líneas más atrás 214 00:09:09,240 --> 00:09:11,000 cuando tú en lugar de pasar 215 00:09:11,000 --> 00:09:12,940 una variable profesor te equivocaste y pasaste 216 00:09:12,940 --> 00:09:15,019 una variable que no era. Entonces 200.000 líneas más 217 00:09:15,019 --> 00:09:17,220 abajo ya no encajaba una con otra. 218 00:09:17,980 --> 00:09:18,820 Hacer el casting 219 00:09:18,820 --> 00:09:21,139 destroza la aplicación. Te la deja sintácticamente 220 00:09:21,139 --> 00:09:22,419 perfecta pero la destroza. 221 00:09:23,059 --> 00:09:29,779 Pues cuidado, porque tenéis una tendencia muy grande a darle al doble clic aquí al rojito para que arreglame. 222 00:09:29,899 --> 00:09:32,100 Ah, ya está, arreglado, arreglado, destrozado. 223 00:09:32,600 --> 00:09:32,779 ¿Cómo? 224 00:09:33,340 --> 00:09:33,679 Vale. 225 00:09:33,820 --> 00:09:34,299 A vida. 226 00:09:35,200 --> 00:09:35,679 Exactamente. 227 00:09:35,759 --> 00:09:40,279 Y luego vas y te estrellas con tu vida y tu futuro. 228 00:09:41,379 --> 00:09:41,860 Vale. 229 00:09:42,639 --> 00:09:46,039 Entonces, repitiendo por enésima vez lo de ayer. 230 00:09:46,379 --> 00:09:51,659 Hemos puesto el método área en cada figura del pentágono. 231 00:09:51,779 --> 00:09:52,299 ¿Nos olvidamos? 232 00:09:53,059 --> 00:09:56,860 Sí, nos olvidamos porque tampoco vamos a hacer aquí 200.000 clases. 233 00:09:57,220 --> 00:10:03,580 Hemos puesto el método ARIA en cada figura porque cada figura tiene una implementación distinta de este método. 234 00:10:03,779 --> 00:10:06,159 Entonces, tenemos que poner una en cada figura, eso está claro. 235 00:10:07,220 --> 00:10:14,480 Pero, como hay una arquitectura, una estructura jerárquica, todas son figuras geométricas 236 00:10:14,480 --> 00:10:20,919 y eso nos permitía en nuestro main de pruebas poder meterlas todas en referencias figuras geométricas, 237 00:10:20,980 --> 00:10:22,299 en una RAI y facilitarnos la vida. 238 00:10:23,059 --> 00:10:25,799 Pero lo de siempre, y de nuevo estoy repitiendo, 239 00:10:26,159 --> 00:10:30,320 pues compensando que no hagáis y estudiéis nada en casa. 240 00:10:31,679 --> 00:10:36,899 Entonces, si yo quiero ahora ampliar esta aplicación 241 00:10:36,899 --> 00:10:40,320 para que en el main, además de mostrarme el perímetro 242 00:10:40,320 --> 00:10:42,899 de todas las figuras, me muestra el área, 243 00:10:43,899 --> 00:10:45,559 pues claro, yo ahora diría, ah, vale, 244 00:10:45,679 --> 00:10:47,940 voy a incorporar lo que me falta, que es, 245 00:10:48,279 --> 00:10:49,480 muéstrame el área de todas. 246 00:10:49,480 --> 00:10:51,759 entonces aquí 247 00:10:51,759 --> 00:10:53,899 lógicamente me peta y me dice 248 00:10:53,899 --> 00:10:56,200 ¿eh? método área no existe 249 00:10:56,200 --> 00:10:57,039 ¿por qué? 250 00:10:57,980 --> 00:10:59,840 porque esto es una referencia 251 00:10:59,840 --> 00:11:00,960 figura geométrica 252 00:11:00,960 --> 00:11:03,720 ya es referencia figura geométrica 253 00:11:03,720 --> 00:11:05,659 pero se instanció como círculo 254 00:11:05,659 --> 00:11:07,879 o como cuadrado, con lo cual claro que existe área 255 00:11:07,879 --> 00:11:09,240 ya, pero el compilador no lo sabe 256 00:11:09,240 --> 00:11:11,879 el compilador solo sabe que es esto 257 00:11:11,879 --> 00:11:14,039 luego ¿qué solución hacemos? 258 00:11:14,759 --> 00:11:15,779 vale, vamos a poner aquí 259 00:11:15,779 --> 00:11:17,080 un método área 260 00:11:17,080 --> 00:11:19,799 para que el compilador se calle, este método de aquí 261 00:11:19,799 --> 00:11:24,360 entonces ponemos el método 262 00:11:24,360 --> 00:11:26,379 inicialmente haríamos esto 263 00:11:26,379 --> 00:11:29,059 pero claro, cuando estamos ya en este punto 264 00:11:29,059 --> 00:11:31,440 decimos, uy, pero que meto yo aquí 265 00:11:31,440 --> 00:11:33,240 el área de la figura geométrica, ni idea 266 00:11:33,240 --> 00:11:36,059 depende de la figura, yo ahí no tiene sentido que meta nada 267 00:11:36,059 --> 00:11:38,440 pues vacío, ups 268 00:11:38,440 --> 00:11:42,440 lo dejo vacío y lo convierto en método abstracto 269 00:11:42,440 --> 00:11:46,080 lo convierto en método abstracto 270 00:11:46,080 --> 00:11:48,600 la clase por tanto ya era abstracta 271 00:11:48,600 --> 00:11:50,539 de antes porque tenía un método 272 00:11:50,539 --> 00:11:52,879 abstracto, la clase es abstracta 273 00:11:52,879 --> 00:11:54,279 no vale para instanciar objetos 274 00:11:54,279 --> 00:11:56,460 pero ya vale perfectamente 275 00:11:56,460 --> 00:11:59,000 para incorporar 276 00:11:59,000 --> 00:12:00,720 en sus referencias 277 00:12:00,720 --> 00:12:02,000 en sus referencias 278 00:12:02,000 --> 00:12:04,620 cualquiera de los 279 00:12:04,620 --> 00:12:06,159 objetos que la heredan, cualquiera 280 00:12:06,159 --> 00:12:08,559 y ahora ya el compilador 281 00:12:08,559 --> 00:12:10,620 me dice, si ya puedo llamar a 282 00:12:10,620 --> 00:12:12,480 área, puedo llamar a área 283 00:12:12,480 --> 00:12:14,580 porque figura geométrica tiene área 284 00:12:14,580 --> 00:12:19,179 y está vacío, pero esa a mí me la pela completamente. 285 00:12:19,460 --> 00:12:20,340 Yo soy el compilador. 286 00:12:20,460 --> 00:12:23,700 Yo lo único que quiero es que exista ese método en la superclase. 287 00:12:24,779 --> 00:12:27,759 Ahora ya la máquina virtual, cuando esto se ejecute, 288 00:12:28,220 --> 00:12:31,919 cuando esto se ejecute, la máquina virtual se irá a la versión, 289 00:12:32,039 --> 00:12:35,580 se irá a la versión correspondiente del objeto. 290 00:12:36,340 --> 00:12:39,080 Eso es lo que he repetido hasta la saciedad millones de veces, 291 00:12:39,659 --> 00:12:41,679 porque esa es la definición de polimorfismo 292 00:12:41,679 --> 00:12:54,919 Y es uno de los conceptos fundamentales sobre los que se sustenta Java, porque si no, todo lo que está montado en todos los frameworks, en todo, boom, se caería, ¿vale? 293 00:12:54,919 --> 00:13:03,240 Está sustentado en que un mismo método tiene millones de formas distintas, depende de en qué clase esté. 294 00:13:03,240 --> 00:13:10,940 Y la máquina virtual tirando de esta referencia, en una ejecución irá este, en otra irá este, en otra irá este. 295 00:13:11,679 --> 00:13:16,820 Y gracias a eso, el mundo de la tecnología Java ha podido progresar, 296 00:13:16,940 --> 00:13:21,080 porque si no hubiéramos tenido que hacer millones de supermillones de clases distintas 297 00:13:21,080 --> 00:13:24,259 con millones de códigos para poder distinguir cada método. 298 00:13:24,259 --> 00:13:24,980 ¿Y el problema? 299 00:13:26,419 --> 00:13:30,379 El problema, pues que como la gente es vaga por definición, 300 00:13:31,720 --> 00:13:36,399 pues entonces si no haces una tecnología que te facilite el desarrollo, eso no va a prosperar. 301 00:13:40,679 --> 00:13:42,759 Bueno, pues entonces está clarísimo. 302 00:13:42,759 --> 00:13:58,460 Vale, ya tenemos las cuatro figuras con los cuatro métodos y recordad, ya que estamos recordando el pasado, que si además este método es abstracto, ahora cualquiera que me herede tiene la obligación de implementarlo. 303 00:13:58,460 --> 00:14:16,139 Por eso este pentágono que estaba aquí colgado, como hereda de figura geométrica, automáticamente, en cuanto yo he metido este método abstracto aquí, este se ha puesto en rojo y me ha dicho, eh, estás heredando de una clase abstracta, tienes que dar la implementación de área. 304 00:14:16,139 --> 00:14:18,419 lo siento, que te niegas 305 00:14:18,419 --> 00:14:20,179 a darla, pues tú también 306 00:14:20,179 --> 00:14:22,080 te haces abstracta, lo siento mucho 307 00:14:22,080 --> 00:14:23,639 a ver, sería una solución 308 00:14:23,639 --> 00:14:26,320 una solución a nivel de compilación 309 00:14:26,320 --> 00:14:28,019 yo pongo ahí 310 00:14:28,019 --> 00:14:30,460 uy, el abstract lo he puesto donde no es 311 00:14:30,460 --> 00:14:31,940 se pone antes de class 312 00:14:31,940 --> 00:14:36,620 yo pongo ahí mi abstract 313 00:14:36,620 --> 00:14:38,299 y el compilador 314 00:14:38,299 --> 00:14:40,279 se calla, porque dice, ah vale, eres abstracta 315 00:14:40,279 --> 00:14:42,279 te has quedado con la 316 00:14:42,279 --> 00:14:43,419 versión abstracta heredada 317 00:14:43,419 --> 00:14:46,340 no la has sobrescrito, te has quedado 318 00:14:46,340 --> 00:14:47,559 con la abstracta heredada 319 00:14:47,559 --> 00:14:49,440 con lo cual también eres abstracta 320 00:14:49,440 --> 00:14:51,039 el compilador feliz, claro 321 00:14:51,039 --> 00:14:52,940 pero que ocurre 322 00:14:52,940 --> 00:14:55,620 que en esta aplicación nunca jamás 323 00:14:55,620 --> 00:14:57,960 podremos crear objetos pentágono 324 00:14:57,960 --> 00:14:59,740 con lo cual esta clase no nos vale para nada 325 00:14:59,740 --> 00:15:02,080 nos podría valer como otro ladrillo 326 00:15:02,080 --> 00:15:03,500 intermedio de la arquitectura 327 00:15:03,500 --> 00:15:05,779 y hacer, ah me vale para ahora hacer 328 00:15:05,779 --> 00:15:07,659 pentágono bonito, pentágono feo 329 00:15:07,659 --> 00:15:09,419 pentágono tonto, pentágono listo 330 00:15:09,419 --> 00:15:10,879 para eso me podría servir 331 00:15:10,879 --> 00:15:13,039 para hacer yo herederos de pentágono 332 00:15:13,039 --> 00:15:15,539 pero para instanciar pentágono sin más 333 00:15:15,539 --> 00:15:17,740 con su propiedad lado, pues no, porque la he hecho a este lado. 334 00:15:18,960 --> 00:15:19,320 ¿Vale? 335 00:15:20,399 --> 00:15:20,759 Bueno. 336 00:15:22,220 --> 00:15:23,720 Entonces, pentágono tendría 337 00:15:23,720 --> 00:15:25,580 que sobrescribir el área si queremos 338 00:15:25,580 --> 00:15:27,460 instanciar objetos 339 00:15:27,460 --> 00:15:28,220 pentágono. 340 00:15:30,080 --> 00:15:31,679 Tendría que sobrescribirla y aquí 341 00:15:31,679 --> 00:15:33,600 pondríamos el área, lo que fuera el área 342 00:15:33,600 --> 00:15:35,240 de un pentágono de lado, 343 00:15:35,500 --> 00:15:37,559 no tengo ni idea de cuál es y no me apetece preguntarse 344 00:15:37,559 --> 00:15:39,580 a la charla GPT, así que como no lo vamos a 345 00:15:39,580 --> 00:15:40,799 usar en el ejercicio, dejamos contigo. 346 00:15:41,480 --> 00:15:43,580 Por apotema. Pero el apotema no sé 347 00:15:43,580 --> 00:15:45,320 cómo se sacará, igual el apotema es 348 00:15:45,320 --> 00:15:50,360 ya, ya, o sea, no sé cómo me sacan 349 00:15:50,360 --> 00:15:52,240 matemáticamente, yo aquí no puedo sacar 350 00:15:52,240 --> 00:15:54,279 me refiero a la fórmula a partir 351 00:15:54,279 --> 00:15:56,460 del lado, entonces la apotema 352 00:15:56,460 --> 00:15:57,259 a partir del lado 353 00:15:57,259 --> 00:16:00,019 la apotema es la altura del triángulo 354 00:16:00,019 --> 00:16:02,240 isósceles que va entre 355 00:16:02,240 --> 00:16:04,500 uno, pero claro, tendré que 356 00:16:04,500 --> 00:16:05,320 sacar el 357 00:16:05,320 --> 00:16:10,279 bueno, habría que buscar 358 00:16:10,279 --> 00:16:10,879 la fórmula 359 00:16:10,879 --> 00:16:13,860 a ver, la fórmula tiene que incluir 360 00:16:13,860 --> 00:16:19,500 tiene que incluir una función trigonométrica 361 00:16:19,500 --> 00:16:21,220 pero la función trigonométrica 362 00:16:21,220 --> 00:16:23,039 que deduzco que incluirá es el seno 363 00:16:23,039 --> 00:16:24,879 porque la apotema es 364 00:16:24,879 --> 00:16:26,039 el seno de 365 00:16:26,039 --> 00:16:29,000 depende de quién es 366 00:16:29,000 --> 00:16:30,740 vale, a ver 367 00:16:30,740 --> 00:16:34,720 vale, pues seguimos con la aplicación 368 00:16:34,720 --> 00:16:36,340 lado entre 2 369 00:16:36,340 --> 00:16:38,740 por más de la tangente de pi 370 00:16:38,740 --> 00:16:39,440 entre 5 371 00:16:39,440 --> 00:16:42,940 o sea, que queréis que pongamos 372 00:16:42,940 --> 00:16:44,519 el área, venga, vamos a poner el área 373 00:16:44,519 --> 00:16:49,399 y la del 374 00:16:49,399 --> 00:16:51,000 y la del 375 00:16:51,000 --> 00:16:53,679 pentágono 376 00:16:53,679 --> 00:16:55,460 dado su lado 377 00:16:55,460 --> 00:16:57,700 por favor 378 00:16:57,700 --> 00:17:01,879 bueno 379 00:17:01,879 --> 00:17:05,640 ya, de aquí ya ha sacado 380 00:17:05,640 --> 00:17:06,160 el apotema 381 00:17:06,160 --> 00:17:09,759 con esta fórmula ya, o sea, es esta 382 00:17:09,759 --> 00:17:11,359 un cuarto entre la raíz de no sé qué 383 00:17:11,359 --> 00:17:13,299 este es el área del pentágono a partir de su lado 384 00:17:13,299 --> 00:17:14,880 vale 385 00:17:14,880 --> 00:17:18,059 esta es el área 386 00:17:18,059 --> 00:17:20,759 y esto ya 387 00:17:20,759 --> 00:17:22,180 con la fórmula que he hecho aquí 388 00:17:22,180 --> 00:17:24,960 ya ha sacado la apotema a partir del lado 389 00:17:24,960 --> 00:17:25,839 y lo ha incluido 390 00:17:25,839 --> 00:17:28,599 a ver, que no lo puede haber dicho mal 391 00:17:28,599 --> 00:17:30,599 pero vamos, venga vamos a 392 00:17:30,599 --> 00:17:32,019 traducir esto a Java 393 00:17:32,019 --> 00:17:33,599 pues esto será 394 00:17:33,599 --> 00:17:35,539 1 entre 1 cuarto 395 00:17:35,539 --> 00:17:37,779 retún 396 00:17:37,779 --> 00:17:40,359 1 entre 4 397 00:17:40,359 --> 00:17:41,259 vale 398 00:17:41,259 --> 00:17:43,859 ¿Y 1 entre 4 multiplicado por qué? 399 00:17:44,740 --> 00:17:48,279 Pues 1 entre 4 multiplicado por la raíz, luego el más. 400 00:17:52,539 --> 00:17:53,539 ¿Qué os pasa? 401 00:17:55,220 --> 00:17:56,559 ¿La raíz de quién? 402 00:17:57,519 --> 00:18:00,839 Pues la raíz de 5 por 5 más 2, raíz de 5. 403 00:18:11,259 --> 00:18:16,460 5 por 5 más 2 404 00:18:16,460 --> 00:18:17,220 raíz de 5 405 00:18:17,220 --> 00:18:19,019 5 por 406 00:18:19,019 --> 00:18:21,880 ¿eh? 407 00:18:26,720 --> 00:18:28,500 ya, pero eso sí que no me gusta 408 00:18:28,500 --> 00:18:30,039 que lo hagáis 409 00:18:30,039 --> 00:18:31,539 hombre, a ver 410 00:18:31,539 --> 00:18:34,480 vamos a intentar pensar un poco 411 00:18:34,480 --> 00:18:36,039 aunque sea poquísimo 412 00:18:36,039 --> 00:18:36,880 al menos 413 00:18:36,880 --> 00:18:41,839 ya, vale 414 00:18:41,839 --> 00:18:45,039 tú con la fórmula de Java. 415 00:18:47,240 --> 00:18:48,819 Pero no es que me alegre por ti, 416 00:18:48,920 --> 00:18:50,599 es que es fenomenal, que seguramente 417 00:18:50,599 --> 00:18:52,920 tú sepas usar chargpt bien. 418 00:18:53,559 --> 00:18:54,740 Pero a los demás, a algunos 419 00:18:54,740 --> 00:18:56,140 demás no les viene bien saber elegir 420 00:18:56,140 --> 00:18:58,880 operaciones, multiplicaciones, divisiones, 421 00:18:58,960 --> 00:18:59,119 etc. 422 00:19:00,819 --> 00:19:01,079 ¡Hala! 423 00:19:02,680 --> 00:19:04,579 5 más 2 raíz de 5 424 00:19:04,579 --> 00:19:06,319 y ahora multiplicado por el al cuadrado. 425 00:19:07,460 --> 00:19:08,759 Y ahora todo esto, 426 00:19:08,759 --> 00:19:10,759 esto se cierra 427 00:19:10,759 --> 00:19:12,799 aquí, esta 428 00:19:12,799 --> 00:19:14,279 raíz se cierra aquí 429 00:19:14,279 --> 00:19:16,779 y esto multiplicado 430 00:19:16,779 --> 00:19:18,700 por lado y por lado. 431 00:19:19,640 --> 00:19:20,420 ¡Hala! Ya está. 432 00:19:21,039 --> 00:19:22,799 Vale, como es un casting, como es 433 00:19:22,799 --> 00:19:24,039 un double, hago el casting 434 00:19:24,039 --> 00:19:25,680 y se acabó. 435 00:19:26,420 --> 00:19:28,619 Ya tengo esto hecho. 436 00:19:28,799 --> 00:19:29,920 ¿Vale? El método área hecho. 437 00:19:35,880 --> 00:19:37,660 A ver, pero si lo único que tenéis que hacer es 438 00:19:37,660 --> 00:19:39,180 trasladar la fórmula 439 00:19:39,180 --> 00:19:41,059 operaciones matemáticas y ya está. 440 00:19:44,680 --> 00:19:45,599 Genial, ¿verdad? 441 00:19:45,819 --> 00:19:47,059 Ha cambiado tu vida. 442 00:19:48,180 --> 00:19:49,599 Hombre, pues eso 443 00:19:49,599 --> 00:19:50,960 me lo tienes que agradecer. 444 00:19:52,119 --> 00:19:53,660 Porque nunca jamás habrías 445 00:19:53,660 --> 00:19:55,619 tú calculado la forma del pentágono. 446 00:19:56,920 --> 00:19:57,220 Venga. 447 00:19:58,019 --> 00:19:59,440 ¡Hala! Pues entonces, seguimos 448 00:19:59,440 --> 00:20:00,799 haciendo el ejercicio. 449 00:20:01,819 --> 00:20:03,240 El ejercicio de aquí. 450 00:20:03,240 --> 00:20:05,180 Ahora, nuestra aplicación. 451 00:20:05,599 --> 00:20:06,740 Nuestra aplicación podría 452 00:20:06,740 --> 00:20:09,079 ser ya un main, podría 453 00:20:09,079 --> 00:20:11,240 sería un main que se pusiera a pedir 454 00:20:11,240 --> 00:20:13,359 figuras de que quieres calcular área perimetro 455 00:20:13,359 --> 00:20:15,180 de un círculo, mete el círculo, mete lo que sea 456 00:20:15,180 --> 00:20:17,000 podría ser una aplicación, pero 457 00:20:17,000 --> 00:20:19,480 por seguir forzando la práctica 458 00:20:19,480 --> 00:20:21,099 de la herencia, por seguir forzándola 459 00:20:21,099 --> 00:20:23,079 pues está 460 00:20:23,079 --> 00:20:25,099 planteada así, no es que así tenga especial 461 00:20:25,099 --> 00:20:27,039 sentido como diseño, pero 462 00:20:27,039 --> 00:20:29,160 de alguna manera hay que forzar las cosas para que 463 00:20:29,160 --> 00:20:31,319 practiquéis la herencia, en ejercicios 464 00:20:31,319 --> 00:20:32,779 pequeños, en aplicaciones grandes 465 00:20:32,779 --> 00:20:33,680 tu mano 466 00:20:33,680 --> 00:20:37,079 pero si no son ni 20 todavía, espérate que sean 467 00:20:37,079 --> 00:20:38,200 ni 20, vale 468 00:20:38,200 --> 00:20:40,759 No, los descansos no hay 20 469 00:20:40,759 --> 00:20:44,059 Segurísima, por Dios, llevo trabajando aquí 8 años 470 00:20:44,059 --> 00:20:47,960 Venga, manejador figuras 471 00:20:47,960 --> 00:20:49,319 Vamos a crear la clase 472 00:20:49,319 --> 00:20:50,180 Manejador figuras 473 00:20:50,180 --> 00:20:52,299 Esta ya no es una entidad 474 00:20:52,299 --> 00:20:54,759 De nuestro problema 475 00:20:54,759 --> 00:20:56,779 No es un círculo, no es un cuadrado 476 00:20:56,779 --> 00:20:58,019 Esto es una 477 00:20:58,019 --> 00:21:00,680 Esto es un actor 478 00:21:00,680 --> 00:21:02,480 Digamos, una especie de controlador 479 00:21:02,480 --> 00:21:03,019 Que se llama 480 00:21:03,019 --> 00:21:04,960 Es una entidad controladora 481 00:21:04,960 --> 00:21:07,519 Que es la que ejecuta cosas con las entidades 482 00:21:07,519 --> 00:21:11,400 ¿Vale? Pues venga, vamos a crear nuestra clase 483 00:21:11,400 --> 00:21:12,759 Manejador de figuras 484 00:21:12,759 --> 00:21:15,380 Todo en el mismo paquete, así a lo bestia 485 00:21:15,380 --> 00:21:15,740 Porque 486 00:21:15,740 --> 00:21:19,500 Ejercicio 487 00:21:19,500 --> 00:21:20,200 Serencio 488 00:21:20,200 --> 00:21:23,539 Ejercicio, figuras 489 00:21:23,539 --> 00:21:25,400 Manejador de figuras 490 00:21:25,400 --> 00:21:32,819 Claro, pero es que tú 491 00:21:32,819 --> 00:21:33,960 Es muy fabuloso 492 00:21:33,960 --> 00:21:37,460 Como el cerebro 493 00:21:37,460 --> 00:21:39,680 Venga 494 00:21:39,680 --> 00:21:41,400 manejador figuras 495 00:21:41,400 --> 00:21:44,559 ¿qué va a hacer manejador figuras? 496 00:21:44,640 --> 00:21:45,900 la clase manejador figuras 497 00:21:45,900 --> 00:21:48,039 es el actor, el controlador 498 00:21:48,039 --> 00:21:50,279 que está pensado 499 00:21:50,279 --> 00:21:52,039 para tener las figuras 500 00:21:52,039 --> 00:21:53,079 con las que vamos a trabajar 501 00:21:53,079 --> 00:21:55,980 vale, pues manejador figuras se va a caracterizar 502 00:21:55,980 --> 00:21:57,420 por tener dentro 503 00:21:57,420 --> 00:21:59,599 todas las figuras con las que se van a trabajar 504 00:21:59,599 --> 00:22:02,000 en forma de un array figura geométrica 505 00:22:02,000 --> 00:22:03,380 ¿vale? 506 00:22:04,000 --> 00:22:05,960 pues venga, manejador figuras 507 00:22:05,960 --> 00:22:08,579 metemos un array 508 00:22:08,579 --> 00:22:10,740 figura geométrica 509 00:22:10,740 --> 00:22:25,400 inicia 510 00:22:25,400 --> 00:22:36,420 si lo que pasa es que si es un public static 511 00:22:36,420 --> 00:22:38,380 tu aplicación no puede 512 00:22:38,380 --> 00:22:40,579 tener varios manejadores de figuras 513 00:22:40,579 --> 00:22:42,059 imagínate que tienes una aplicación 514 00:22:42,059 --> 00:22:43,380 con varias pantallas 515 00:22:43,380 --> 00:22:46,259 manejador de figuras para mi pantalla tal del juego 516 00:22:46,259 --> 00:22:47,420 manejador de figuras 517 00:22:47,420 --> 00:22:48,900 de mi pantalla tal 518 00:22:48,900 --> 00:22:55,220 O sea, solo tendrías un conjunto de figuras, no puedes tener varios, simplemente, ¿vale? 519 00:22:57,180 --> 00:23:03,599 Entonces, en función de para qué lo vayas a usar, efectivamente, pues puedes poner el static y te ahorras líos y es más fácil, 520 00:23:03,779 --> 00:23:07,059 o no, porque vas a tener varios manejadores con diferentes conjuntos de figuras. 521 00:23:10,500 --> 00:23:13,019 Puede, puede, estoy convencida. 522 00:23:15,000 --> 00:23:19,460 Cuando se le caen todos los platos en la cafetería, el corte inglés hace mucho más ruido, ¿a que sí? 523 00:23:20,660 --> 00:23:21,980 ¿No se te ha caído nunca? 524 00:23:22,980 --> 00:23:24,140 Ah, pero alguno se te ha caído. 525 00:23:30,740 --> 00:23:33,039 ¡Hala! Otro fino, de verdad, ¿eh? 526 00:23:35,400 --> 00:23:36,500 Sí, ya te veo. 527 00:23:39,779 --> 00:23:41,880 Pues no me gusta que habléis así. 528 00:23:43,539 --> 00:23:44,059 Venga. 529 00:23:44,700 --> 00:23:46,480 Manejador figuras tiene las figuras 530 00:23:46,480 --> 00:23:50,359 y un método para calcular el perímetro total 531 00:23:50,359 --> 00:23:51,920 de todas las figuras en el array. 532 00:23:52,440 --> 00:23:53,940 Pero creo que los constructores los ponemos 533 00:23:53,940 --> 00:23:56,240 en plan sin icono. 534 00:23:57,519 --> 00:23:59,579 Los constructores sin icono. 535 00:24:03,400 --> 00:24:04,680 Hazlos como quieras. 536 00:24:05,039 --> 00:24:06,400 Estamos haciendo una aplicación 537 00:24:06,400 --> 00:24:08,640 que en algún momento llegaremos a ver 538 00:24:08,640 --> 00:24:10,740 en algún main para qué sirve. 539 00:24:10,859 --> 00:24:12,019 En un main que tiene esto. 540 00:24:12,940 --> 00:24:14,539 Entonces, de alguna manera 541 00:24:14,539 --> 00:24:16,519 ya nosotros sabemos 542 00:24:16,519 --> 00:24:18,200 lo que son los constructores, los getter y setter. 543 00:24:18,200 --> 00:24:20,720 lo vais incorporando a vuestro criterio 544 00:24:20,720 --> 00:24:22,740 ya sabemos que luego en función, cuando uno ya 545 00:24:22,740 --> 00:24:24,579 hace la aplicación que trabaja con eso 546 00:24:24,579 --> 00:24:26,759 pues puede ser que identifique que le viene 547 00:24:26,759 --> 00:24:28,700 bien añadir un constructor que solo tenga este 548 00:24:28,700 --> 00:24:30,519 parámetro, lo que sea, o sea eso 549 00:24:30,519 --> 00:24:32,759 yo ya salto del 550 00:24:32,759 --> 00:24:34,960 punto de decir, directriz, constructor 551 00:24:34,960 --> 00:24:36,339 así, así, así, ya 552 00:24:36,339 --> 00:24:37,700 los hacéis vosotros 553 00:24:37,700 --> 00:24:40,259 por vuestra propia iniciativa 554 00:24:40,259 --> 00:24:42,799 asumiendo 555 00:24:42,799 --> 00:24:44,720 además que luego cuando uno 556 00:24:44,720 --> 00:24:46,940 hace ya una aplicación que usa 557 00:24:46,940 --> 00:24:51,500 a estas clases, puede ocurrir que de repente te pida el cuerpo 558 00:24:51,500 --> 00:24:53,880 hacer más constructores todavía. 559 00:24:54,180 --> 00:24:56,220 Uno que tenga solo el nombre, uno que tenga todo no sé qué. 560 00:24:57,019 --> 00:25:01,140 Lo que me importa no es que escribáis código como autómatas, 561 00:25:01,700 --> 00:25:03,279 sino que desarrolléis criterios. 562 00:25:03,740 --> 00:25:04,119 Criterio. 563 00:25:04,400 --> 00:25:06,180 Desarrolléis el criterio de tomar las decisiones. 564 00:25:07,759 --> 00:25:08,240 ¿Vale? 565 00:25:08,640 --> 00:25:12,559 Pero claro, uno puede tomar decisiones y sobre todo puede 566 00:25:12,559 --> 00:25:15,839 ejecutarlas cuando tiene las herramientas. 567 00:25:15,839 --> 00:25:18,059 por eso yo os enseño las herramientas 568 00:25:18,059 --> 00:25:20,160 pero no os enseño o intento 569 00:25:20,160 --> 00:25:22,640 no enseñaros un método de aplicarlas 570 00:25:22,640 --> 00:25:24,200 o te acabo de reír, pero no se trabaja así 571 00:25:24,200 --> 00:25:27,200 vosotros luego ya tenéis que ir tomando las decisiones 572 00:25:27,200 --> 00:25:28,440 dígame 573 00:25:28,440 --> 00:25:29,940 que ahora ya se son y 20 574 00:25:29,940 --> 00:25:32,200 vale, venga 575 00:25:32,200 --> 00:25:34,299 paramos un segundinín