1 00:00:00,110 --> 00:00:25,269 Bueno, pues seguimos. Pues nada, esta clase se nos ha convertido en abstracta. Repito, ¿es grave que sea abstracta? Hombre, vale, ¿es grave que sea abstracta? ¿No se van a poder crear objetos figura geométrica? 2 00:00:25,269 --> 00:00:27,949 pero seguramente mi aplicación 3 00:00:27,949 --> 00:00:29,690 no lo vaya a usar un objeto 4 00:00:29,690 --> 00:00:31,670 figura geométrica, va a usar un triángulo 5 00:00:31,670 --> 00:00:33,929 un cuadrado, entonces si no va a usar 6 00:00:33,929 --> 00:00:35,909 objeto figura geométrica que es lo habitual 7 00:00:35,909 --> 00:00:37,929 que se abstracta, no es grave 8 00:00:37,929 --> 00:00:38,909 es de hecho lo ideal 9 00:00:38,909 --> 00:00:40,570 ¿por qué es lo ideal? 10 00:00:41,450 --> 00:00:44,070 porque ahora todos los que hereden 11 00:00:44,070 --> 00:00:46,170 ahora ya tienen 12 00:00:46,170 --> 00:00:47,850 la orden expresa de 13 00:00:47,850 --> 00:00:50,090 oye tú, ¿qué quieres heredar de mí? 14 00:00:50,210 --> 00:00:52,030 muy bien, pero entonces 15 00:00:52,030 --> 00:00:53,649 sobrescribe este método 16 00:00:53,649 --> 00:00:55,049 a tu manera 17 00:00:55,049 --> 00:00:58,390 Por ejemplo, triángulo 18 00:00:58,390 --> 00:00:59,649 Me ha sido un error de compilación 19 00:00:59,649 --> 00:01:00,909 ¿Qué me dice el error? 20 00:01:01,549 --> 00:01:05,310 Perdona, pero triángulo debe implementar el método figura geométrica 21 00:01:05,310 --> 00:01:06,730 Debe implementarlo 22 00:01:06,730 --> 00:01:09,030 ¿Vale? 23 00:01:12,780 --> 00:01:14,340 A ver, podría haber otra cosa 24 00:01:14,340 --> 00:01:14,680 ¿Qué es? 25 00:01:15,000 --> 00:01:16,439 No, no, no, no quiero implementarlo 26 00:01:16,439 --> 00:01:17,519 No, por nada del mundo 27 00:01:17,519 --> 00:01:19,099 No quiero, que estoy ahora mismo 28 00:01:19,099 --> 00:01:21,480 Haciendo otra cosa y no me apetece 29 00:01:21,480 --> 00:01:24,500 Pero necesito quitar el error de compilación 30 00:01:24,500 --> 00:01:27,200 pues que triángulo 31 00:01:27,200 --> 00:01:28,299 se abstracta también 32 00:01:28,299 --> 00:01:34,409 es decir, pero no 33 00:01:34,409 --> 00:01:39,950 no, porque ya tiene 34 00:01:39,950 --> 00:01:45,010 claro, o sea, aquí 35 00:01:45,010 --> 00:01:46,450 me voy a triángulo 36 00:01:46,450 --> 00:01:49,469 triángulo hereda de la clase abstracta 37 00:01:49,469 --> 00:01:51,549 y por tanto hereda un método abstracto 38 00:01:51,549 --> 00:01:53,290 que está obligada a implementar 39 00:01:53,290 --> 00:01:55,450 pero yo no quiero 40 00:01:55,450 --> 00:01:57,370 implementarla en ese momento porque estoy 41 00:01:57,370 --> 00:01:59,409 haciendo pruebas en otro sitio, pero no quiero 42 00:01:59,409 --> 00:02:01,049 el error de compilación. No lo quiero. 43 00:02:02,250 --> 00:02:03,489 A ver, podría hacer esta 44 00:02:03,489 --> 00:02:05,530 abstracta también. ¿Por qué? 45 00:02:05,609 --> 00:02:07,329 Porque entonces se queda con el método 46 00:02:07,329 --> 00:02:08,250 abstracto. 47 00:02:09,710 --> 00:02:11,009 Esta, al heredar de 48 00:02:11,009 --> 00:02:13,889 figura geométrica, hereda su método abstracto 49 00:02:13,889 --> 00:02:15,750 y al no implementarlo, 50 00:02:15,810 --> 00:02:16,889 porque no me ha dado la gana, 51 00:02:17,229 --> 00:02:19,389 al no implementarlo, la he convertido en abstracto. 52 00:02:20,150 --> 00:02:21,469 Pero, hombre, esto no es lo que queremos 53 00:02:21,469 --> 00:02:23,449 hacer ahora nosotros. Porque nosotros sí 54 00:02:23,449 --> 00:02:25,389 que queremos crear objetos triángulos. Esto ha sido 55 00:02:25,389 --> 00:02:27,250 una solución temporal para quitar el error de 56 00:02:27,250 --> 00:02:28,969 compilación, pero hombre 57 00:02:28,969 --> 00:02:31,669 entonces dejaría mi aplicación 58 00:02:31,669 --> 00:02:33,129 incapaz de crear objetos 59 00:02:33,129 --> 00:02:35,210 triángulos, es que no quiero que 60 00:02:35,210 --> 00:02:36,949 se abstracta triángulo, lógicamente 61 00:02:36,949 --> 00:02:39,530 lo que quiero es 62 00:02:39,530 --> 00:02:41,189 implementar el 63 00:02:41,189 --> 00:02:43,110 método perímetro 64 00:02:43,110 --> 00:02:45,509 que esta de aquí ha dejado 65 00:02:45,509 --> 00:02:47,710 vacío, entonces 66 00:02:47,710 --> 00:02:51,189 estamos tirando mucho de atajos del 67 00:02:51,189 --> 00:02:52,710 entorno de desarrollo, demasiado 68 00:02:52,710 --> 00:02:55,250 pero bueno, quiero 69 00:02:55,250 --> 00:02:57,150 creer que tenéis criterio suficiente como 70 00:02:57,150 --> 00:02:59,069 para usar los atajos bien 71 00:02:59,069 --> 00:03:00,330 y si algo lo genera mal 72 00:03:00,330 --> 00:03:03,229 hacerlo mal, entonces, él me ofrece 73 00:03:03,229 --> 00:03:03,689 aquí 74 00:03:03,689 --> 00:03:05,870 me ofrece aquí 75 00:03:05,870 --> 00:03:09,069 hace el método que está sin implementar 76 00:03:09,069 --> 00:03:11,229 venga, pues, me gusta 77 00:03:11,229 --> 00:03:12,370 este atajo del entorno 78 00:03:12,370 --> 00:03:15,409 y aquí me lo ha puesto, ¿dónde me lo ha puesto? 79 00:03:15,569 --> 00:03:17,110 aquí, me lo ha dejado vacío 80 00:03:17,110 --> 00:03:19,250 y ahora yo ya 81 00:03:19,250 --> 00:03:20,050 le hago el bueno 82 00:03:20,050 --> 00:03:23,009 ¿vale? ¿veis? es 83 00:03:23,009 --> 00:03:24,409 método sobrescrito 84 00:03:24,409 --> 00:03:26,590 sobrescrito de la clase de arriba 85 00:03:26,590 --> 00:03:29,310 calcula perímetro del triángulo 86 00:03:29,310 --> 00:03:31,349 pues será lado 1 más lado 2 más lado 3 87 00:03:31,349 --> 00:03:31,990 no hay otra 88 00:03:31,990 --> 00:03:42,009 no hay que ponerlo, no es obligatorio 89 00:03:42,009 --> 00:03:43,789 pero es recomendable 90 00:03:43,789 --> 00:03:45,349 ¿por qué es recomendable? 91 00:03:46,169 --> 00:03:47,030 por si te equivocas 92 00:03:47,030 --> 00:03:48,870 calculas perímetro 93 00:03:48,870 --> 00:03:51,409 que te coja el 94 00:03:51,409 --> 00:03:53,650 vale, para validar 95 00:03:53,650 --> 00:03:55,449 para nivel de compilación 96 00:03:55,449 --> 00:03:57,969 validar que realmente ese es 97 00:03:57,969 --> 00:03:59,689 el de arriba y no otro nuevo que estoy 98 00:03:59,689 --> 00:04:01,669 haciendo. Si no ponemos 99 00:04:01,669 --> 00:04:03,490 a novel write, no estamos a nivel de 100 00:04:03,490 --> 00:04:04,810 compilación validando. 101 00:04:05,710 --> 00:04:07,530 ¿Vale? A este ya le tengo. Triángulo 102 00:04:07,530 --> 00:04:08,310 se quedó estupendo. 103 00:04:09,969 --> 00:04:10,409 Entonces, 104 00:04:10,770 --> 00:04:13,409 realmente el diseño con clases 105 00:04:13,409 --> 00:04:15,650 abstractas y suprima 106 00:04:15,650 --> 00:04:17,470 que suprima es luego 107 00:04:17,470 --> 00:04:19,290 la más usada 108 00:04:19,290 --> 00:04:21,310 y suprima las interfaces 109 00:04:21,310 --> 00:04:22,649 es fundamental 110 00:04:22,649 --> 00:04:25,449 porque te da un patrón de comportamiento. 111 00:04:27,250 --> 00:04:27,810 ¿Vale? 112 00:04:27,970 --> 00:04:36,610 Es decir, en figura geométrica, todo lo que yo ponga aquí abstracto, estoy obligando a los que vienen detrás de mí a que lo hagan. 113 00:04:37,170 --> 00:04:40,529 Entonces, oye, tú puedes ser figura geométrica si te da la gana. 114 00:04:41,250 --> 00:04:46,689 Pero si tú quieres ser figura geométrica, perdona, pero dime cómo calculas el perímetro. 115 00:04:46,829 --> 00:04:48,310 Si no, no seas figura geométrica. 116 00:04:49,250 --> 00:04:51,889 Entonces, impones unas plantillas de comportamiento. 117 00:04:53,750 --> 00:04:55,910 ¿Vale? Luego tiene todo el sentido como diseño. 118 00:04:55,910 --> 00:04:58,189 Pues cuadrado le pasa lo mismo 119 00:04:58,189 --> 00:05:02,550 Cuadrado al heredar de figura geométrica 120 00:05:02,550 --> 00:05:04,889 Tiene que implementar el método abstracto 121 00:05:04,889 --> 00:05:10,980 Y en este caso será 4 por la A2 122 00:05:10,980 --> 00:05:20,300 Y círculo lo mismo 123 00:05:20,300 --> 00:05:25,839 Tiene que implementar el método de la clase que hereda 124 00:05:25,839 --> 00:05:27,620 Que está sin implementar 125 00:05:27,620 --> 00:05:31,430 Y en este caso este será 126 00:05:31,430 --> 00:05:35,250 2 por pi 127 00:05:35,250 --> 00:05:38,449 que es una variable estática 128 00:05:38,449 --> 00:05:40,970 de la clase math que me da la máquina virtual 129 00:05:40,970 --> 00:05:44,089 2 por pi por el radio 130 00:05:44,089 --> 00:06:11,910 vale, entonces 131 00:06:11,910 --> 00:06:15,509 fijaos que diferencia grande 132 00:06:15,509 --> 00:06:18,269 repito otra vez, entre hacerlo abstracto 133 00:06:18,269 --> 00:06:21,050 y dejarlo vacío y que no sea abstracto 134 00:06:21,050 --> 00:06:27,139 si yo lo dejo vacío y no lo dejo como abstracto 135 00:06:27,139 --> 00:06:29,740 con lo cual aquí quito el abstract 136 00:06:29,740 --> 00:06:33,439 y aquí pongo 137 00:06:33,439 --> 00:06:35,459 pues esto 138 00:06:35,459 --> 00:06:36,939 vale 139 00:06:36,939 --> 00:06:39,560 pues esto también funciona 140 00:06:39,560 --> 00:06:43,040 y ahora triángulo 141 00:06:43,040 --> 00:06:45,019 está sobrescribiendo el calcula 142 00:06:45,019 --> 00:06:47,199 perímetro de arriba, también lo está sobrescribiendo 143 00:06:47,199 --> 00:06:49,060 y ya está y todo está bien 144 00:06:49,060 --> 00:06:50,920 pero esto es peligroso 145 00:06:50,920 --> 00:06:53,439 porque ahora meto octógono 146 00:06:53,439 --> 00:06:55,540 y octógono 147 00:06:55,540 --> 00:06:57,360 no tiene por qué sobrescribir 148 00:06:57,360 --> 00:06:59,259 calcula perímetro, no tiene por qué 149 00:06:59,259 --> 00:07:01,120 porque como este no es abstracto 150 00:07:01,120 --> 00:07:02,899 no obligas a sobreescribirlo 151 00:07:02,899 --> 00:07:05,459 con lo cual octógono se podría estar quedando 152 00:07:05,459 --> 00:07:07,019 con este retuncero que no nos gusta 153 00:07:07,019 --> 00:07:10,660 entonces esto es más peligroso 154 00:07:10,660 --> 00:07:11,819 es mucho mejor 155 00:07:11,819 --> 00:07:12,819 por tanto 156 00:07:12,819 --> 00:07:15,459 dejarlo como lo teníamos 157 00:07:15,459 --> 00:07:16,620 clase abstracta 158 00:07:16,620 --> 00:07:18,800 y método abstracto 159 00:07:18,800 --> 00:07:21,100 para que cualquiera que entre a jugar aquí 160 00:07:21,100 --> 00:07:22,120 como figura geométrica 161 00:07:22,120 --> 00:07:25,060 tenga que implementar esto por huevos 162 00:07:25,060 --> 00:07:28,459 vale pues ahora ya si 163 00:07:28,459 --> 00:07:31,259 mi método 164 00:07:31,259 --> 00:07:32,259 perímetro total 165 00:07:32,259 --> 00:07:34,920 se queda limpio y magnífico 166 00:07:34,920 --> 00:07:35,600 y estupendo 167 00:07:35,600 --> 00:07:38,100 se queda muy limpito 168 00:07:38,100 --> 00:07:40,439 yo recorro todas mis figuras 169 00:07:40,439 --> 00:07:43,079 cada figura llama calcula perímetro 170 00:07:43,079 --> 00:07:44,860 y a qué versión 171 00:07:44,860 --> 00:07:46,180 de calcula perímetro llamará 172 00:07:46,180 --> 00:07:48,079 ya sabemos cómo funciona esto 173 00:07:48,079 --> 00:07:50,480 que en tiempo de ejecución 174 00:07:50,480 --> 00:07:52,800 lo que la máquina virtual busca 175 00:07:52,800 --> 00:07:53,980 es el método 176 00:07:53,980 --> 00:07:56,620 en la versión en la que este 177 00:07:56,620 --> 00:07:58,740 se implementó, no en la que se 178 00:07:58,740 --> 00:08:00,699 declaró. Declarado está como 179 00:08:00,699 --> 00:08:02,040 figura geométrica, ya lo sabemos. 180 00:08:03,000 --> 00:08:04,899 Pero a la hora de ejecutar el método 181 00:08:04,899 --> 00:08:06,879 el que se ejecuta, es tal cual 182 00:08:06,879 --> 00:08:09,199 tú te implementaras, tú te crearas. 183 00:08:09,699 --> 00:08:10,360 ¿O no lo has creado? 184 00:08:12,220 --> 00:08:12,860 ¿Vale? Y ese es 185 00:08:12,860 --> 00:08:14,439 el polimorfismo del que hemos hablado. 186 00:08:15,540 --> 00:08:16,699 Pues perímetro total aquí 187 00:08:16,699 --> 00:08:18,360 queda tan limpio y tan estupendo. 188 00:08:18,899 --> 00:08:20,899 Gracias a este método calcula perímetro 189 00:08:20,899 --> 00:08:22,319 que está en figura geométrica 190 00:08:22,319 --> 00:08:24,519 abarcándolo todo. 191 00:08:28,920 --> 00:08:29,579 ¿Entendido, no? 192 00:08:30,040 --> 00:08:33,139 A ver, ¿qué más tenía que hacer este ejercicio? 193 00:08:35,549 --> 00:08:37,230 Manejador figuras, vale. 194 00:08:38,190 --> 00:08:43,529 Vamos a hacer un manejador cuadrados, que es más específico que manejador figuras, 195 00:08:43,970 --> 00:08:46,049 porque va a manejar solo cuadrados. 196 00:08:47,070 --> 00:08:53,960 Pues venga, vamos a hacer manejador cuadrados, que hereda de manejador figuras. 197 00:08:54,080 --> 00:08:58,120 Pues venga, dos relaciones de herencia, dos jerarquías distintas, 198 00:08:58,879 --> 00:09:01,980 una la de las figuras y otra la de los manejadores. 199 00:09:01,980 --> 00:09:03,799 dos jerarquías distintas 200 00:09:03,799 --> 00:09:09,419 manejador de cuadrados 201 00:09:09,419 --> 00:09:11,100 este es para manejar 202 00:09:11,100 --> 00:09:12,779 cuadrados específicamente 203 00:09:12,779 --> 00:09:14,779 el manejador figuras es para manejar 204 00:09:14,779 --> 00:09:16,179 figuras de diferentes tipos 205 00:09:16,179 --> 00:09:19,039 este es para manejar cuadrados 206 00:09:19,039 --> 00:09:20,019 específicamente 207 00:09:20,019 --> 00:09:23,299 vale, que nos dicen que tiene que tener 208 00:09:23,299 --> 00:09:27,519 añada un método 209 00:09:27,519 --> 00:09:29,259 para calcular el área total 210 00:09:29,259 --> 00:09:31,080 de todos los cuadrados 211 00:09:31,080 --> 00:09:32,899 del array 212 00:09:32,899 --> 00:09:35,840 a ver, esto yo lo veo un poco feo 213 00:09:35,840 --> 00:09:36,539 pero bueno 214 00:09:36,539 --> 00:10:01,129 Cuando instanciamos un manejador cuadrados, él tiene su array de figuras geométricas y que hereda este de aquí, más su método, 215 00:10:01,129 --> 00:10:08,909 pero este además tiene un método para calcular el área de todos los cuadrados. 216 00:10:08,909 --> 00:10:10,370 vale, entonces 217 00:10:10,370 --> 00:10:13,590 este public 218 00:10:13,590 --> 00:10:18,110 novel 219 00:10:18,110 --> 00:10:19,809 área 220 00:10:19,809 --> 00:10:23,879 total 221 00:10:23,879 --> 00:10:27,440 vale, entonces 222 00:10:27,440 --> 00:10:35,620 a ver, un momentito 223 00:10:35,620 --> 00:10:38,120 vale, pues en principio 224 00:10:38,120 --> 00:10:39,620 la idea, lo que yo interpretaría 225 00:10:39,620 --> 00:10:40,320 de esto es 226 00:10:40,320 --> 00:10:43,879 que cuando tu instancia es un manejador 227 00:10:43,879 --> 00:10:44,519 cuadrados 228 00:10:44,519 --> 00:10:47,639 lo que vas a meter en su array de figuras 229 00:10:47,639 --> 00:10:49,279 son cuadrados, lógicamente 230 00:10:49,279 --> 00:10:50,220 vale 231 00:10:50,220 --> 00:10:53,600 entonces, aquí no hace falta 232 00:10:53,600 --> 00:10:55,460 que distingamos por instance of 233 00:10:55,460 --> 00:10:57,379 si todos los objetos del array 234 00:10:57,379 --> 00:10:59,360 son cuadrados o no, les podemos hacer el casting 235 00:10:59,360 --> 00:11:01,759 sin más, a ver, me explico 236 00:11:01,759 --> 00:11:10,240 y ahora vamos a recorrer 237 00:11:10,240 --> 00:11:10,759 su array 238 00:11:10,759 --> 00:11:14,299 for, a ver, manejador figuras 239 00:11:14,299 --> 00:11:16,080 vamos a 240 00:11:16,080 --> 00:11:18,220 manejador figuras y vamos a ponerle 241 00:11:18,220 --> 00:11:19,879 este array 242 00:11:19,879 --> 00:11:21,379 ah, no lo tenía ni private ni nada 243 00:11:21,379 --> 00:11:23,840 vamos a ponerle 244 00:11:23,840 --> 00:11:27,769 no lo habíamos hecho 245 00:11:27,769 --> 00:11:31,210 ni un get ni un set, vamos a ponerle como protected 246 00:11:31,210 --> 00:11:35,049 y un get y un set para el array este, que no se lo habíamos hecho 247 00:11:35,049 --> 00:11:38,490 no habíamos hecho get y set para esa propiedad 248 00:11:38,490 --> 00:11:52,840 vámonos otra vez a manejador de cuadrados y ahora ya 249 00:11:52,840 --> 00:12:03,000 para cada figura geométrica 250 00:12:03,000 --> 00:12:08,419 figura en su array de figuras 251 00:12:08,419 --> 00:12:20,950 ¿qué vamos a hacer? podemos 252 00:12:20,950 --> 00:12:23,009 instanciar 253 00:12:23,009 --> 00:12:27,409 vale, podemos llamar figura geométrica 254 00:12:27,409 --> 00:12:30,610 lo mismo con el área 255 00:12:30,610 --> 00:12:32,889 podemos hacer 256 00:12:32,889 --> 00:12:35,250 suma 257 00:12:35,250 --> 00:12:37,090 más 258 00:12:37,090 --> 00:12:37,789 igual 259 00:12:37,789 --> 00:12:40,470 figura 260 00:12:40,470 --> 00:12:46,440 calcula área 261 00:12:46,440 --> 00:12:52,519 claro, pero es que 262 00:12:52,519 --> 00:12:55,120 el manejador cuadrados cuando tú lo instancies 263 00:12:55,120 --> 00:12:56,460 la idea es que 264 00:12:56,460 --> 00:12:58,139 solo tenga cuadrados en su array 265 00:12:58,139 --> 00:13:00,460 porque si no habrías hecho un manejador de figuras 266 00:13:00,460 --> 00:13:02,539 entonces como solamente 267 00:13:02,539 --> 00:13:04,120 va a tomar cuadrados en su array 268 00:13:04,120 --> 00:13:06,639 luego ya vamos a hacer 269 00:13:06,639 --> 00:13:08,460 en el main, vamos a validarlo para que solo tenga 270 00:13:08,460 --> 00:13:10,179 cuadrados, pero es el único sentido que tiene 271 00:13:10,179 --> 00:13:12,639 manejador cuadrados que en su array solo haya cuadrados 272 00:13:12,639 --> 00:13:14,419 es el único sentido que tiene 273 00:13:14,419 --> 00:13:15,360 que exista esta clase 274 00:13:15,360 --> 00:13:16,940 pero no es 275 00:13:16,940 --> 00:13:18,740 el método no sería 276 00:13:18,740 --> 00:13:21,559 que hiciera eso 277 00:13:21,559 --> 00:13:27,409 Claro, el array suyo 278 00:13:27,409 --> 00:13:29,090 Él tiene dentro su array 279 00:13:29,090 --> 00:13:29,789 Que es este 280 00:13:29,789 --> 00:13:31,429 Su array 281 00:13:31,429 --> 00:13:34,070 Manejador, ¿dónde estamos? 282 00:13:35,090 --> 00:13:35,450 Este 283 00:13:35,450 --> 00:13:44,970 No, es que es el suyo propio 284 00:13:44,970 --> 00:13:47,129 Es decir, no es que haya 285 00:13:47,129 --> 00:13:49,070 Un conjunto de figuras 286 00:13:49,070 --> 00:13:50,870 Y manejador 287 00:13:50,870 --> 00:13:53,090 Es que igual te estás confundiendo con dos cosas 288 00:13:53,090 --> 00:13:54,590 no es que en el main 289 00:13:54,590 --> 00:13:56,350 ahora cuando hagamos el main se va a entender mejor 290 00:13:56,350 --> 00:13:58,710 no es que en el main haya un conjunto de figuras 291 00:13:58,710 --> 00:14:01,830 y manejador figuras acceda a todas 292 00:14:01,830 --> 00:14:03,570 manejador cuadrados 293 00:14:03,570 --> 00:14:04,990 solo a los cuadrados 294 00:14:04,990 --> 00:14:06,769 no, o sea, manejador figuras 295 00:14:06,769 --> 00:14:08,950 tiene sus figuras, que serán de cualquier tipo 296 00:14:08,950 --> 00:14:11,029 que luego hay un manejador cuadrados 297 00:14:11,029 --> 00:14:12,710 ese es para manejar solo cuadrados 298 00:14:12,710 --> 00:14:14,490 y tendrá su propio array 299 00:14:14,490 --> 00:14:16,649 pero que en ese array solo habrá cuadrados 300 00:14:16,649 --> 00:14:19,049 ¿vale? pues este objeto 301 00:14:19,049 --> 00:14:20,970 manejador cuadrados tiene aquí su array 302 00:14:20,970 --> 00:14:22,090 que es este 303 00:14:22,090 --> 00:14:24,169 Perdón, que es este 304 00:14:24,169 --> 00:14:24,990 Tiene su array 305 00:14:24,990 --> 00:14:28,330 Y en ese array solo va a haber cuadrados 306 00:14:28,330 --> 00:14:30,330 ¿Vale? Entonces 307 00:14:30,330 --> 00:14:33,549 Este de aquí 308 00:14:33,549 --> 00:14:36,950 Ahora en el main lo vamos a entender mejor 309 00:14:36,950 --> 00:14:38,509 Vale 310 00:14:38,509 --> 00:14:39,429 Este de aquí 311 00:14:39,429 --> 00:14:41,570 ¿Por qué me dice esto? 312 00:14:43,950 --> 00:14:45,830 Ah, jolines, muy bien 313 00:14:45,830 --> 00:14:47,110 Estáis muy despiertos 314 00:14:47,110 --> 00:14:49,929 Manejador 315 00:14:49,929 --> 00:14:51,470 Manejador 316 00:14:51,470 --> 00:14:53,830 Figuras 317 00:14:53,830 --> 00:15:00,820 vale, vale, entonces 318 00:15:00,820 --> 00:15:03,919 podemos 319 00:15:03,919 --> 00:15:06,080 sacar 320 00:15:06,080 --> 00:15:12,649 bueno, vamos a hacerlo como dice aquí 321 00:15:12,649 --> 00:15:15,049 con calcular 322 00:15:15,049 --> 00:15:16,529 área nos pasa lo mismo 323 00:15:16,529 --> 00:15:18,830 si tuviéramos aquí un método 324 00:15:18,830 --> 00:15:20,850 para calcular el área de cualquier figura 325 00:15:20,850 --> 00:15:22,870 estupendo, pues podemos hacer 326 00:15:22,870 --> 00:15:24,250 lo mismo, igual que hemos hecho aquí 327 00:15:24,250 --> 00:15:26,889 un abstracto de calcular 328 00:15:26,889 --> 00:15:28,950 perímetro, vamos a 329 00:15:28,950 --> 00:15:30,929 hacer un abstracto de calcular área 330 00:15:30,929 --> 00:15:32,769 en figura, exactamente igual 331 00:15:32,769 --> 00:15:37,409 vamos a hacernos un abstracto 332 00:15:37,409 --> 00:15:42,470 calcula 333 00:15:42,470 --> 00:15:43,110 área 334 00:15:43,110 --> 00:15:46,269 entonces esta clase abstracta 335 00:15:46,269 --> 00:15:48,190 tiene dos métodos abstractos, puedes tener 336 00:15:48,190 --> 00:15:50,429 uno, dos, mil, con que tenga 337 00:15:50,429 --> 00:15:52,850 al menos uno ya se convierte en abstracta 338 00:15:52,850 --> 00:15:54,110 vale 339 00:15:54,110 --> 00:15:55,450 tiene dos 340 00:15:55,450 --> 00:15:58,669 entonces ahora, triángulo, cuadrado y círculo 341 00:15:58,669 --> 00:16:00,830 otra vez le sale error de compilación 342 00:16:00,830 --> 00:16:02,590 porque una clase 343 00:16:02,590 --> 00:16:04,950 que hereda de una abstracta, tiene que sobreescribirlo 344 00:16:04,950 --> 00:16:06,809 todo, todo, no hay 345 00:16:06,809 --> 00:16:07,289 tutía 346 00:16:07,289 --> 00:16:10,509 pues venga, vámonos una por una 347 00:16:10,509 --> 00:16:13,149 triángulo, vamos a sobreescribir 348 00:16:13,149 --> 00:16:14,789 su método 349 00:16:14,789 --> 00:16:15,870 calcula área 350 00:16:15,870 --> 00:16:21,669 calcula área de triángulo 351 00:16:21,669 --> 00:16:24,090 pues calcula área de triángulo 352 00:16:24,090 --> 00:16:26,149 buf, tenemos que 353 00:16:26,149 --> 00:16:28,009 sacar la base por la altura de los tres lados 354 00:16:28,009 --> 00:16:29,450 pero esto será una fórmula 355 00:16:29,450 --> 00:16:31,570 a través de los lados será fácil de hacer 356 00:16:31,570 --> 00:16:34,529 hay una fórmula que seguro 357 00:16:34,529 --> 00:16:35,409 que echa GPT-SAN 358 00:16:35,409 --> 00:16:39,289 Vale, a ver 359 00:16:39,289 --> 00:16:42,759 Área del 360 00:16:42,759 --> 00:16:44,700 Triángulo 361 00:16:44,700 --> 00:16:49,059 Sabiendo los lados 362 00:16:49,059 --> 00:16:51,059 Venga 363 00:16:51,059 --> 00:16:56,179 Ah, la fórmula de Herón 364 00:16:56,179 --> 00:16:57,179 Esta famosa 365 00:16:57,179 --> 00:16:59,820 Joder, pues sí que es larga la tía 366 00:16:59,820 --> 00:17:00,879 Pero bueno, vamos a hacerla 367 00:17:00,879 --> 00:17:03,200 Calculas el semiperímetro 368 00:17:03,200 --> 00:17:05,980 Y luego la raíz de todo esto 369 00:17:05,980 --> 00:17:07,680 Vale, pues venga 370 00:17:07,680 --> 00:17:09,599 Vamos a pasar esto 371 00:17:09,599 --> 00:17:14,319 Bueno, es que somos tan vagos 372 00:17:14,319 --> 00:17:16,759 A ver si me entiende así 373 00:17:16,759 --> 00:17:19,240 Lado 1, lado 2, lado 3 374 00:17:19,240 --> 00:17:21,680 Variables 375 00:17:21,680 --> 00:17:22,799 Java, dame código 376 00:17:22,799 --> 00:17:27,559 Y no tenemos ni que pasarlo 377 00:17:27,559 --> 00:17:36,950 Vale 378 00:17:36,950 --> 00:17:38,849 Este es el semiperímetro 379 00:17:38,849 --> 00:17:41,089 Y esta es la raíz de lo que faltaba 380 00:17:41,089 --> 00:17:42,529 Ala, ya lo tenemos 381 00:17:42,529 --> 00:17:53,910 Vale 382 00:17:53,910 --> 00:17:55,970 Semiperímetro 383 00:17:55,970 --> 00:17:58,029 La suma de los lados entre 2 384 00:17:58,029 --> 00:18:01,250 Y la fórmula de erón, la raíz de todo esto 385 00:18:01,250 --> 00:18:04,069 Esta es la fórmula de erón 386 00:18:04,069 --> 00:18:07,529 Y ahora ya retun 387 00:18:07,529 --> 00:18:11,410 Le paso esto al retun directamente y listo 388 00:18:11,410 --> 00:18:15,210 Retun, todo esto 389 00:18:15,210 --> 00:18:20,460 ¡Hala! Ya tengo el área del triángulo 390 00:18:20,460 --> 00:18:26,079 No hace falta copiarla de aquí porque si la estáis pidiendo echa GPT también 391 00:18:26,079 --> 00:18:28,420 O sea, me refiero, o la estáis copiando de aquí 392 00:18:28,420 --> 00:18:32,200 Bueno, pues 393 00:18:32,200 --> 00:18:37,539 Voy a bajar aquí abajo 394 00:18:37,539 --> 00:18:41,549 Para que se vea mejor 395 00:18:41,549 --> 00:19:05,720 Vale, pues hay que saber 396 00:19:05,720 --> 00:19:07,220 Cuando no hacer el trabajo sucio 397 00:19:07,220 --> 00:19:09,740 Pero claro 398 00:19:09,740 --> 00:19:12,319 El trabajo sucio 399 00:19:12,319 --> 00:19:14,160 Es el que no nos ayuda a aprender 400 00:19:14,160 --> 00:19:16,779 El que nos ayuda a aprender 401 00:19:16,779 --> 00:19:17,700 No es el trabajo sucio 402 00:19:17,700 --> 00:19:18,759 Ese sí que tenemos que hacerlo 403 00:19:18,759 --> 00:19:20,319 En ese proceso estáis vosotros 404 00:19:20,319 --> 00:19:22,759 Bueno, pues venga 405 00:19:22,759 --> 00:19:28,460 Aquí tenemos el área de este de aquí 406 00:19:28,460 --> 00:19:32,599 Ahora, en el cuadrado lo tenemos más fácil, afortunadamente 407 00:19:32,599 --> 00:19:45,430 En el cuadrado, el área del cuadrado es lado por lado 408 00:19:45,430 --> 00:19:51,690 Y el área del círculo también lo tenemos muy fácil 409 00:19:51,690 --> 00:19:57,950 El área del círculo también lo tenemos muy fácil 410 00:19:57,950 --> 00:20:01,599 porque será 411 00:20:01,599 --> 00:20:04,279 pi 412 00:20:04,279 --> 00:20:09,920 por radio 413 00:20:09,920 --> 00:20:11,359 por radio 414 00:20:11,359 --> 00:20:21,109 y ahora ya el manejador 415 00:20:21,109 --> 00:20:21,950 de cuadrados 416 00:20:21,950 --> 00:20:26,430 pues calculará el área total 417 00:20:26,430 --> 00:20:28,589 de todos los cuadrados que tienen 418 00:20:28,589 --> 00:20:29,970 su array 419 00:20:29,970 --> 00:20:32,509 que se supone que son todos los del array 420 00:20:32,509 --> 00:20:34,349 aunque no me gusta a mi mucho 421 00:20:34,349 --> 00:20:36,410 este enunciado como está explicado 422 00:20:36,410 --> 00:20:36,890 a ver 423 00:20:36,890 --> 00:20:49,140 vale, manejador círculo 424 00:20:49,140 --> 00:20:49,720 sería igual 425 00:20:49,720 --> 00:20:52,960 igual, así que el manejador círculo 426 00:20:52,960 --> 00:20:54,319 lo dejamos, vamos a hacer el main 427 00:20:54,319 --> 00:20:56,819 un main probando esto, el main vamos a 428 00:20:56,819 --> 00:20:57,619 tunearlo un poco 429 00:20:57,619 --> 00:21:00,759 manejador figuras 430 00:21:00,759 --> 00:21:08,079 en lugar de decir, vamos a decir cuadrado 431 00:21:08,079 --> 00:21:12,960 pues, vale 432 00:21:12,960 --> 00:21:14,839 bueno, vamos a hacer un main, nosotros 433 00:21:14,839 --> 00:21:16,359 un poco tuneado, para 434 00:21:16,359 --> 00:21:18,839 ejemplificar un poco 435 00:21:18,839 --> 00:21:20,859 todo el ejercicio, pasamos un poco 436 00:21:20,859 --> 00:21:21,900 del main ese de ahí 437 00:21:21,900 --> 00:21:24,599 venga, pues nuestro main 438 00:21:24,599 --> 00:21:39,950 a ver que se me da la 439 00:21:39,950 --> 00:21:41,730 la batería 440 00:21:41,730 --> 00:21:46,000 vale, pues vamos a pasar nosotros de ese main 441 00:21:46,000 --> 00:21:47,660 para hacer algo un poquito así más 442 00:21:47,660 --> 00:21:50,079 más completo, que nos lo 443 00:21:50,079 --> 00:21:52,240 muestre un poquito mejor 444 00:21:52,240 --> 00:21:54,880 venga, pues vamos a crear 445 00:21:54,880 --> 00:21:56,960 un array de figuras geométricas 446 00:21:56,960 --> 00:21:58,839 para luego mandárselas a un manejador 447 00:21:58,839 --> 00:21:59,519 que las maneje 448 00:21:59,519 --> 00:22:02,720 entonces vamos a crear primero un array de figura 449 00:22:02,720 --> 00:22:13,920 geométrica 450 00:22:13,920 --> 00:22:34,759 inicialmente 451 00:22:34,759 --> 00:22:36,099 cero, y ahora vamos a hacer un bucle 452 00:22:36,099 --> 00:22:38,119 En el que esté metiendo figuras 453 00:22:38,119 --> 00:22:39,700 Dándole a elegir entre las tres 454 00:22:39,700 --> 00:22:41,559 Hasta que el tío diga fin 455 00:22:41,559 --> 00:22:43,160 ¿Vale? 456 00:22:47,549 --> 00:22:48,750 Vale, pues entonces 457 00:22:48,750 --> 00:22:50,109 Podemos hacer 458 00:22:50,109 --> 00:23:02,369 Figuras cométricas 459 00:23:02,369 --> 00:23:04,029 No debería ser un manejador de figuras 460 00:23:04,029 --> 00:23:07,630 Cuando tenga el array 461 00:23:07,630 --> 00:23:09,029 Porque manejador de figuras 462 00:23:09,029 --> 00:23:10,170 Necesita el array 463 00:23:10,170 --> 00:23:11,970 Para manejarlas 464 00:23:11,970 --> 00:23:13,809 Voy a crear primero el array 465 00:23:13,809 --> 00:23:14,869 ¿Vale? 466 00:23:15,869 --> 00:23:16,390 Vale 467 00:23:16,390 --> 00:24:27,490 Voy a llamar a esto lectura, sea diferente de fin, vaya diferente de fin, vale, entonces primero vamos a leer, le decimos crear figura, fin para terminar, 468 00:24:31,920 --> 00:24:42,519 Y ahora le podemos poner aquí, para orientarle, triángulo, cuadrado o círculo. 469 00:24:49,420 --> 00:25:02,259 Ahora, aquí leeríamos, yo voy a meter el teclado ese para no estar con el escáner, 470 00:25:02,259 --> 00:25:03,839 que es un rollo de leer como queráis. 471 00:25:31,940 --> 00:25:35,779 ¿El hard lo tienes? 472 00:25:36,259 --> 00:25:36,420 Sí. 473 00:25:36,420 --> 00:25:39,039 Vale, pues si tienes ya el hard 474 00:25:39,039 --> 00:25:41,000 Botón derecho en el proyecto 475 00:25:41,000 --> 00:25:41,779 Buildpad 476 00:25:41,779 --> 00:25:43,720 Configure Buildpad 477 00:25:43,720 --> 00:25:46,240 Ahora una vez aquí 478 00:25:46,240 --> 00:25:48,579 Pinchas Clashpad 479 00:25:48,579 --> 00:25:50,799 Add external hash 480 00:25:50,799 --> 00:25:53,480 Y aquí ya seleccionas el hard 481 00:25:53,480 --> 00:25:54,759 Y ya lo tienes 482 00:25:54,759 --> 00:25:55,539 ¿Vale? 483 00:25:56,019 --> 00:25:59,420 Sí, botón derecho 484 00:25:59,420 --> 00:26:01,519 Buildpad 485 00:26:01,519 --> 00:26:03,440 Configure Buildpad 486 00:26:03,440 --> 00:26:06,480 Pinchas en Clashpad 487 00:26:06,480 --> 00:26:07,779 Pues no estamos usando módulos 488 00:26:07,779 --> 00:26:09,859 el módulo de path habría que declararlo 489 00:26:09,859 --> 00:26:11,660 en el módulo de info y es un rollo, class path 490 00:26:11,660 --> 00:26:13,359 add external hash 491 00:26:13,359 --> 00:26:16,750 y ya coges esa clase 492 00:26:16,750 --> 00:26:18,730 y ya está 493 00:26:18,730 --> 00:26:22,789 y cuando ya la has cogido os aparecerá 494 00:26:22,789 --> 00:26:24,390 aquí en references libraries 495 00:26:24,390 --> 00:26:26,609 os aparecerá ya la clase 496 00:26:26,609 --> 00:26:27,349 con el nombre 497 00:26:27,349 --> 00:26:29,730 para que podáis llamarlo 498 00:26:29,730 --> 00:26:42,059 vale, pues entonces 499 00:26:42,059 --> 00:26:45,180 ahora, una vez que ha leído 500 00:26:45,180 --> 00:26:47,180 esto, aquí habría un switch case 501 00:26:47,180 --> 00:26:49,119 y todo eso, pero vamos 502 00:26:49,119 --> 00:26:51,380 a aprovechar que me lo dijisteis 503 00:26:51,380 --> 00:26:53,200 ayer, pues 504 00:26:53,200 --> 00:26:54,920 este sería un caso de 505 00:26:54,920 --> 00:26:56,839 en un posible. 506 00:26:57,660 --> 00:26:58,359 Y es, vamos a ver, 507 00:27:00,220 --> 00:27:01,000 solo hay 508 00:27:01,000 --> 00:27:02,640 tres tipos posibles de figura. 509 00:27:03,220 --> 00:27:05,039 Mi tipo de figura solamente 510 00:27:05,039 --> 00:27:07,119 puede ser o triángulo, o 511 00:27:07,119 --> 00:27:09,059 cuadrado, o círculo. Solo tengo tres tipos 512 00:27:09,059 --> 00:27:09,940 posibles de figura. 513 00:27:11,680 --> 00:27:13,180 Pues, ¿por qué no me creo 514 00:27:13,180 --> 00:27:15,099 un tipo más concreto 515 00:27:15,099 --> 00:27:17,119 que el string? Porque en string cabe cualquier 516 00:27:17,119 --> 00:27:19,000 cosa. Entonces, 517 00:27:19,119 --> 00:27:21,960 ¿por qué no me creo un tipo que solo admita 518 00:27:21,960 --> 00:27:23,500 tres posibilidades? 519 00:27:24,140 --> 00:27:25,880 triángulo, cuadrado, círculo 520 00:27:25,880 --> 00:27:27,400 tres ideas ¿vale? 521 00:27:27,900 --> 00:27:29,380 esos son los tipos enumerados 522 00:27:29,380 --> 00:27:31,940 un tipo enumerado 523 00:27:31,940 --> 00:27:33,839 es un tipo que tiene 524 00:27:33,839 --> 00:27:35,880 un conjunto finito de valores 525 00:27:35,880 --> 00:27:37,880 los tipos que hemos visto 526 00:27:37,880 --> 00:27:40,279 hasta ahora, el string, el int, el double 527 00:27:40,279 --> 00:27:41,579 tiene infinito 528 00:27:41,579 --> 00:27:43,299 a ver, infinitos no, porque con int 529 00:27:43,299 --> 00:27:45,880 solamente puedes representar hasta 2 elevado a 530 00:27:45,880 --> 00:27:47,539 31 o más menos, pero 531 00:27:47,539 --> 00:27:49,099 muy grande ¿vale? 532 00:27:49,119 --> 00:27:57,259 Entonces, indouble, float, es una posibilidad enorme de valores, ¿vale? 533 00:27:57,500 --> 00:28:03,500 Pero hay veces que yo tengo una variable que solo se mueve entre tres posibilidades. 534 00:28:04,160 --> 00:28:07,940 Por ejemplo, tengo tres aulas, dam1, dam2 y dam3. 535 00:28:08,859 --> 00:28:13,720 Pues a lo mejor me apetecería crear un tipo de dato que solo tenga tres posibles valores, 536 00:28:13,960 --> 00:28:16,559 dam1, dam2 y dam3, ya está, tres posibles valores. 537 00:28:16,559 --> 00:28:18,339 me apetecería crearlo 538 00:28:18,339 --> 00:28:20,519 y ahora ya poder crear variables 539 00:28:20,519 --> 00:28:22,480 de ese tipo y esas variables voy a tener 540 00:28:22,480 --> 00:28:24,400 la garantía, la seguridad 541 00:28:24,400 --> 00:28:26,380 de que solo van a tener esos 542 00:28:26,380 --> 00:28:28,200 tres posibles valores, solo esos tres 543 00:28:28,200 --> 00:28:30,500 entonces bueno, eso puede 544 00:28:30,500 --> 00:28:31,779 hacer el diseño más bonito 545 00:28:31,779 --> 00:28:34,259 más claro 546 00:28:34,259 --> 00:28:36,259 para el que lo ve, porque si tú ves que algo 547 00:28:36,259 --> 00:28:38,160 es de ese tipo, ya sabes que 548 00:28:38,160 --> 00:28:40,019 solamente va a ser una de esas tres cosas 549 00:28:40,019 --> 00:28:42,240 me obliga luego a seguir 550 00:28:42,240 --> 00:28:44,559 programando en coherencia con eso 551 00:28:44,559 --> 00:28:46,400 bueno, es otra herramienta 552 00:28:46,400 --> 00:28:48,279 más, no es que las cosas 553 00:28:48,279 --> 00:28:50,299 se tengan que hacer de una manera o tengan 554 00:28:50,299 --> 00:28:52,420 que hacer de otra, tal cual 555 00:28:52,420 --> 00:28:53,599 no, nosotros 556 00:28:53,599 --> 00:28:55,279 vemos, estamos viendo 557 00:28:55,279 --> 00:28:58,440 herramientas ahora mismo a nivel muy básico 558 00:28:58,440 --> 00:29:00,119 con ciertas pautas en general 559 00:29:00,119 --> 00:29:01,700 de programación para usarlas 560 00:29:01,700 --> 00:29:04,279 ¿vale? de las que vamos dejando caer 561 00:29:04,279 --> 00:29:06,579 pues lo que decimos 562 00:29:06,579 --> 00:29:07,759 nada de métodos largos 563 00:29:07,759 --> 00:29:10,220 métodos cortos que hagan cosas atómicas 564 00:29:10,220 --> 00:29:14,059 si hay código compartido 565 00:29:14,059 --> 00:29:15,619 hacer una estructura jerárquica 566 00:29:15,619 --> 00:29:17,460 Ese tipo de cosas 567 00:29:17,460 --> 00:29:19,920 Bueno, pues entonces 568 00:29:19,920 --> 00:29:22,099 Vamos a aprovechar aquí entonces 569 00:29:22,099 --> 00:29:22,900 Este proyecto 570 00:29:22,900 --> 00:29:26,559 Para meter un poco por encima 571 00:29:26,559 --> 00:29:28,619 Porque tampoco tiene mucha historia 572 00:29:28,619 --> 00:29:29,480 Esto no tiene mucho interés 573 00:29:29,480 --> 00:29:31,160 El concepto de tipos enumerados 574 00:29:31,160 --> 00:29:33,680 Luego esto lo subo al proyecto, al aula virtual 575 00:29:33,680 --> 00:29:34,460 Con los comentarios 576 00:29:34,460 --> 00:29:36,759 Y lo indicamos 577 00:29:36,759 --> 00:29:38,819 Bueno, pues entonces 578 00:29:38,819 --> 00:29:41,619 Yo aquí tengo tres conceptos 579 00:29:41,619 --> 00:29:42,339 Tres ideas 580 00:29:42,339 --> 00:29:44,740 círculo, cuadrado 581 00:29:44,740 --> 00:29:46,440 y triángulo 582 00:29:46,440 --> 00:29:47,579 en esos tres me muevo 583 00:29:47,579 --> 00:29:50,619 y yo voy a pedir por teclado 584 00:29:50,619 --> 00:29:52,420 uno de esos tres conceptos 585 00:29:52,420 --> 00:29:53,759 uno de esos tres 586 00:29:53,759 --> 00:29:56,700 vale, pues entonces me voy a 587 00:29:56,700 --> 00:29:58,660 hacer ese tipo enumerado, me lo voy a 588 00:29:58,660 --> 00:29:59,119 construir 589 00:29:59,119 --> 00:30:02,599 me voy aquí a mi paquete 590 00:30:02,599 --> 00:30:06,059 y ahora aquí me creo 591 00:30:06,059 --> 00:30:10,359 directamente en new os aparece 592 00:30:10,359 --> 00:30:12,380 en un, en el entorno de desarrollo. 593 00:30:12,599 --> 00:30:14,519 En este me da igual Intel IE cualquiera. 594 00:30:16,359 --> 00:30:18,519 Y como veis, el código, aquí le damos un tipo. 595 00:30:18,660 --> 00:30:19,380 Pues, por ejemplo, 596 00:30:19,380 --> 00:30:21,640 tipo figura. 597 00:30:22,740 --> 00:30:23,539 Por ejemplo, 598 00:30:23,640 --> 00:30:31,109 vamos a llamarle. ¿Veis? 599 00:30:31,390 --> 00:30:32,809 Entonces, esto, 600 00:30:33,369 --> 00:30:35,349 el código Java para hacer un enumerado 601 00:30:35,349 --> 00:30:36,890 es como si hiciéramos una clase, 602 00:30:37,609 --> 00:30:39,049 pero aquí en lugar de clase pone 603 00:30:39,049 --> 00:30:41,289 en un. ¿Vale? En lugar de clase 604 00:30:41,289 --> 00:30:43,289 en un. Entonces, 605 00:30:43,509 --> 00:30:45,269 esto no define una clase. 606 00:30:45,269 --> 00:31:02,150 Esto no es una clase, no. Esto es un contenedor de posibilidades, ¿vale? Un contenedor de posibilidades. Es como crear un tipo personalizado para nosotros donde aquí ponemos el abanico de posibilidades. 607 00:31:02,150 --> 00:31:17,910 El tipo personalizado es tipo figura. Y ahora el conjunto de posibilidades se las ponemos aquí. ¿Cómo se suele poner? Pues directamente con el nombre del concepto en mayúscula, separado por coma. 608 00:31:17,910 --> 00:31:26,759 Tengo tres posibilidades, triángulo, círculo y cuadrado. 609 00:31:29,900 --> 00:31:32,940 Y este ya es un enum perfectamente válido, ¿vale? 610 00:31:35,450 --> 00:31:38,630 Estoy diciendo, oye, tipo figura, 611 00:31:39,789 --> 00:31:41,809 las variables que sean de tipo figura, 612 00:31:42,369 --> 00:31:45,349 porque ahora habrá variables string, variables int, 613 00:31:45,490 --> 00:31:47,990 variables double, variables alumno, 614 00:31:48,269 --> 00:31:49,829 variables figura geométrica, 615 00:31:50,529 --> 00:31:54,130 pues también puede haber variables de tipo figura. 616 00:31:54,130 --> 00:31:56,670 y esas variables solo pueden tener 3 valores 617 00:31:56,670 --> 00:31:58,569 triángulo, círculo y cuadrado 618 00:31:58,569 --> 00:32:00,210 ¿vale? 619 00:32:00,630 --> 00:32:02,470 entonces, esto no son figuras 620 00:32:02,470 --> 00:32:04,049 es el tipo de figura 621 00:32:04,049 --> 00:32:06,710 entonces 622 00:32:06,710 --> 00:32:10,150 ¿cómo podríamos usar esto aquí? 623 00:32:11,609 --> 00:32:12,690 ¿vale? pues aquí podría 624 00:32:12,690 --> 00:32:14,410 ahora ese tipo figura ¿cómo se usa? 625 00:32:15,549 --> 00:32:16,410 pues por ejemplo 626 00:32:16,410 --> 00:32:19,730 ahora este tipo 627 00:32:19,730 --> 00:32:20,730 tipo figura 628 00:32:20,730 --> 00:32:28,700 yo lo puedo usar así, tipo figura 629 00:32:28,700 --> 00:32:29,779 punto círculo 630 00:32:29,779 --> 00:32:34,559 entonces esto 631 00:32:34,559 --> 00:32:36,660 tiene dentro la posibilidad 632 00:32:36,660 --> 00:32:37,599 círculo 633 00:32:37,599 --> 00:32:41,950 y a tipo le podría dar la otra posibilidad 634 00:32:41,950 --> 00:33:06,319 no son nada 635 00:33:06,319 --> 00:33:08,220 lo que realmente son 636 00:33:08,220 --> 00:33:10,000 a ver, son 637 00:33:10,000 --> 00:33:11,900 en realidad son objetos 638 00:33:11,900 --> 00:33:14,339 objetos únicos 639 00:33:14,339 --> 00:33:16,140 es decir 640 00:33:16,140 --> 00:33:18,240 esto es que no es tan fácil de entender 641 00:33:18,240 --> 00:33:20,059 en realidad, la idea general sí 642 00:33:20,059 --> 00:33:22,160 pero como está construido 643 00:33:22,160 --> 00:33:22,839 por dentro no 644 00:33:22,839 --> 00:33:24,980 volviendo atrás un momento 645 00:33:24,980 --> 00:33:26,960 vale, esto es una variable 646 00:33:26,960 --> 00:33:29,180 normal y corriente, mi variable tipo 647 00:33:29,180 --> 00:33:31,259 como la podría llamar variable o la podría llamar como me diga 648 00:33:31,259 --> 00:33:33,500 la gana, es una variable, pero esta variable 649 00:33:33,500 --> 00:33:34,660 tiene la peculiaridad 650 00:33:34,660 --> 00:33:36,940 por ser de este tipo 651 00:33:36,940 --> 00:33:39,059 tiene la peculiaridad de tener solo 652 00:33:39,059 --> 00:33:41,400 tres valores posibles y ya está 653 00:33:41,400 --> 00:33:43,319 y sus tres valores posibles 654 00:33:43,319 --> 00:33:44,799 son este, este y este 655 00:33:44,799 --> 00:33:47,240 ya está, eso es lo básico 656 00:33:47,240 --> 00:33:49,680 del numerado, crear variables 657 00:33:49,680 --> 00:33:51,559 la voy a cambiar de nombre 658 00:33:51,559 --> 00:33:52,480 por si lo de 659 00:33:52,480 --> 00:33:53,579 bar 660 00:33:53,579 --> 00:33:56,000 lo de tipo nos lía 661 00:33:56,000 --> 00:33:58,420 o variable cualquiera, esta 662 00:33:58,420 --> 00:34:10,170 vale, entonces esto se ve mejor 663 00:34:10,170 --> 00:34:12,110 esto es muy típico, el ejemplo típico que se 664 00:34:12,110 --> 00:34:13,750 dice siempre, en el que se entiende mejor 665 00:34:13,750 --> 00:34:15,510 vamos a, por ejemplo 666 00:34:15,510 --> 00:34:18,110 mi aplicación trabaja con una idea 667 00:34:18,110 --> 00:34:19,329 que son días de la semana 668 00:34:19,329 --> 00:34:21,530 vale 669 00:34:21,530 --> 00:34:23,230 vamos a 670 00:34:23,230 --> 00:34:26,070 sacarlo de este proyecto, vamos a ponerlo 671 00:34:26,070 --> 00:34:27,929 aquí, en otro paquete, ejemplo 672 00:34:27,929 --> 00:34:29,849 enum, para verlo más claro, no, y luego ya 673 00:34:29,849 --> 00:34:33,929 venimos a este para hacerlo para este, para no, me voy a hacer aquí 674 00:34:33,929 --> 00:34:38,070 otro paquete en este proyecto que subo 675 00:34:38,070 --> 00:34:41,130 ejemplo enum, vale 676 00:34:41,130 --> 00:34:50,690 pues en ejemplo enum, voy a cerrar 677 00:34:50,690 --> 00:34:54,269 todo esto para no liarlo y esto por ahora lo voy a quitar 678 00:34:54,269 --> 00:35:00,929 de aquí, vale 679 00:35:00,929 --> 00:35:07,010 venga, ejemplo enum, lo típico, pues 680 00:35:07,010 --> 00:35:19,670 Tú tienes una aplicación, por ejemplo, en la que estás haciendo, tienes una clase que es una cita que recoge una cita médica. 681 00:35:19,909 --> 00:35:24,150 Por ejemplo, recoge una cita médica en una aplicación de citas médicas. 682 00:35:25,150 --> 00:35:30,789 Tienes aquí tu string que recoge el doctor con el que está la cita médica. 683 00:35:30,789 --> 00:35:35,789 y tienes aquí otra propiedad de mi cita médica 684 00:35:35,789 --> 00:35:39,610 que es el día de la semana en la que la tengo, 685 00:35:39,690 --> 00:35:41,289 la cita médica, ¿vale? 686 00:35:41,389 --> 00:35:43,690 Ahora mismo me olvido de Getset porque, bueno, 687 00:35:43,750 --> 00:35:45,090 todo menos ahora. 688 00:35:45,989 --> 00:35:48,269 Vale, entonces yo podría dejar así esta clase y muy bien. 689 00:35:49,090 --> 00:35:52,349 Pero, claro, se podría convertir en una especie 690 00:35:52,349 --> 00:35:55,809 de sumidero de errores porque aquí admite 691 00:35:55,809 --> 00:35:58,150 que yo en el día ponga praplaplum. 692 00:35:58,150 --> 00:36:00,730 entonces cuando yo luego consulto 693 00:36:00,730 --> 00:36:02,250 en mi aplicación 694 00:36:02,250 --> 00:36:05,070 a ver que día tengo la cita con este doctor 695 00:36:05,070 --> 00:36:07,050 me sale día plaplaplum 696 00:36:07,050 --> 00:36:08,710 pues hombre, se me ha colado el error 697 00:36:08,710 --> 00:36:11,210 pero cuando yo quería poner miércoles cuando la ingresé 698 00:36:11,210 --> 00:36:12,710 se me fue el dedo y puse 699 00:36:12,710 --> 00:36:14,809 plaplaplum, entonces eso ahora yo voy a 700 00:36:14,809 --> 00:36:16,309 consultar y no lo entiendo 701 00:36:16,309 --> 00:36:18,849 ¿por qué? porque claro 702 00:36:18,849 --> 00:36:20,489 día es un string 703 00:36:20,489 --> 00:36:22,289 pero en string cabe cualquier cosa 704 00:36:22,289 --> 00:36:24,789 entonces yo lo podría dejar así 705 00:36:24,789 --> 00:36:26,889 pero luego cuando yo 706 00:36:26,889 --> 00:36:28,909 en la parte de la aplicación de ingresar 707 00:36:28,909 --> 00:36:30,010 la cita, meta el día, 708 00:36:30,690 --> 00:36:32,769 tengo que ser muy cuidadoso de validar 709 00:36:32,769 --> 00:36:34,809 con un bucle que realmente meta un día 710 00:36:34,809 --> 00:36:35,989 válido, en fin. 711 00:36:37,070 --> 00:36:38,809 Bueno, pues, ejemplo típico 712 00:36:38,809 --> 00:36:40,030 que se usa para Enum. 713 00:36:40,670 --> 00:36:42,750 Vamos a ver. Esto solo 714 00:36:42,750 --> 00:36:44,429 tiene siete posibilidades. 715 00:36:45,030 --> 00:36:46,730 De lunes a domingo, solo tiene 716 00:36:46,730 --> 00:36:48,750 siete. Pues en lugar de 717 00:36:48,750 --> 00:36:50,530 que día pertenezca al tipo string, 718 00:36:51,329 --> 00:36:52,630 que día pertenezca a un tipo 719 00:36:52,630 --> 00:36:54,289 personalizado mío que me voy a hacer, 720 00:36:54,289 --> 00:36:57,130 que solo tenga siete posibilidades. 721 00:36:57,750 --> 00:36:58,230 Y ya está. 722 00:36:58,429 --> 00:36:59,849 Y así no hay margen de error. 723 00:37:00,469 --> 00:37:03,369 Este día, una vez que ha llegado aquí y se ha inyectado, 724 00:37:03,809 --> 00:37:08,170 ese día solamente puede ser uno de los cuatro, de los siete. 725 00:37:08,929 --> 00:37:12,449 Pues entonces me tengo que hacer ese tipo personalizado. 726 00:37:13,329 --> 00:37:15,789 Pues venga, ese tipo personalizado será un enum. 727 00:37:19,909 --> 00:37:21,969 Por ejemplo, día-semana. 728 00:37:24,909 --> 00:37:25,869 Día-semana. 729 00:37:25,869 --> 00:37:27,110 Aquí tengo mi enum. 730 00:37:28,170 --> 00:37:29,869 ¿Cuáles son las siete posibilidades? 731 00:37:30,309 --> 00:37:32,949 las 7, vamos a poner 5 732 00:37:32,949 --> 00:37:34,769 para no escribir tanto 733 00:37:34,769 --> 00:37:37,010 y porque no trabajan en fin de semana 734 00:37:37,010 --> 00:37:46,420 no, no, no 735 00:37:46,420 --> 00:37:50,239 no hace falta poner punto y coma 736 00:37:50,239 --> 00:37:52,019 lo puedes poner, pero no es necesario 737 00:37:52,019 --> 00:37:53,199 vale 738 00:37:53,199 --> 00:37:56,440 es necesario si luego le añades más cosas abajo 739 00:37:56,440 --> 00:37:57,940 pero ahora mismo todavía no se las hemos añadido 740 00:37:57,940 --> 00:38:00,559 vale, este es el enum normal y corriente, básico 741 00:38:00,559 --> 00:38:03,119 ahora, este es un tipo personalizado 742 00:38:03,119 --> 00:38:04,039 entonces yo ahora 743 00:38:04,039 --> 00:38:05,420 a cita 744 00:38:05,420 --> 00:38:08,860 le cambio y digo, oye cita no es 745 00:38:08,860 --> 00:38:09,300 string 746 00:38:09,300 --> 00:38:11,300 cita es día 747 00:38:11,300 --> 00:38:14,719 semana, mucho 748 00:38:14,719 --> 00:38:16,679 mejor diseñada así la aplicación 749 00:38:16,679 --> 00:38:18,559 porque ahora 750 00:38:18,559 --> 00:38:20,739 a día solamente se le 751 00:38:20,739 --> 00:38:22,579 puede asignar uno de esos cinco valores 752 00:38:22,579 --> 00:38:24,920 ya está, no se le puede asignar nada más 753 00:38:24,920 --> 00:38:26,860 entonces 754 00:38:26,860 --> 00:38:28,780 bueno, tiene más sentido la aplicación 755 00:38:28,780 --> 00:38:30,659 entonces vamos a poner aquí 756 00:38:30,659 --> 00:38:32,139 el main 757 00:38:32,139 --> 00:38:52,110 vale, pues entonces me voy a hacer yo 758 00:38:52,110 --> 00:38:53,190 una cita 759 00:38:53,190 --> 00:38:56,539 cualquiera 760 00:38:56,539 --> 00:38:59,800 estoy pasando de get y set y todo 761 00:38:59,800 --> 00:39:01,420 porque ahora mismo me da igual 762 00:39:01,420 --> 00:39:06,679 vale, pues a cita.doctor 763 00:39:06,679 --> 00:39:08,039 le puedo dar 764 00:39:08,039 --> 00:39:09,400 lo que me dé la gana 765 00:39:09,400 --> 00:39:12,539 es un string, le puedo dar lo que quiera 766 00:39:12,539 --> 00:39:17,940 pero a cita.día 767 00:39:17,940 --> 00:39:20,480 no le puedo dar 768 00:39:20,480 --> 00:39:21,400 lo que a mí me dé la gana 769 00:39:21,400 --> 00:39:24,420 le puedo dar solo uno de esas cinco posibilidades 770 00:39:24,420 --> 00:39:26,300 y a esas cinco posibilidades 771 00:39:26,300 --> 00:39:27,059 ¿cómo se accede? 772 00:39:27,860 --> 00:39:28,980 se accede así 773 00:39:28,980 --> 00:39:31,440 día, semana, punto 774 00:39:31,440 --> 00:39:32,519 la que sea 775 00:39:32,519 --> 00:39:38,619 o sea, es imposible darle a 776 00:39:38,619 --> 00:39:40,920 cita día algo que no sea una de esas 777 00:39:40,920 --> 00:39:42,860 cinco, entonces tiene 778 00:39:42,860 --> 00:39:43,559 mucho más sentido 779 00:39:43,559 --> 00:39:48,809 vale, ahora tú preguntabas 780 00:39:48,809 --> 00:39:50,590 pero esto físicamente que es 781 00:39:50,590 --> 00:39:52,570 físicamente en realidad 782 00:39:52,570 --> 00:39:53,449 no es un stream 783 00:39:53,449 --> 00:39:56,150 esto físicamente es un objeto 784 00:39:56,150 --> 00:39:58,909 pues que tiene recogido 785 00:39:58,909 --> 00:40:00,750 ese yo soy el objeto lunes 786 00:40:00,750 --> 00:40:02,909 físicamente 787 00:40:02,909 --> 00:40:04,250 es un objeto, sin más. 788 00:40:05,010 --> 00:40:06,150 Entonces, como es un objeto, 789 00:40:06,949 --> 00:40:08,449 tiene métodos también. 790 00:40:21,739 --> 00:40:23,380 ¿Veis? Cita.día 791 00:40:23,380 --> 00:40:24,460 que tiene este valor. 792 00:40:25,800 --> 00:40:27,300 Si veis los métodos que 793 00:40:27,300 --> 00:40:29,219 tiene, tiene un 794 00:40:29,219 --> 00:40:31,099 método. Por ejemplo, el name 795 00:40:31,099 --> 00:40:33,679 que me saca 796 00:40:33,679 --> 00:40:36,619 vamos a mostrar 797 00:40:36,619 --> 00:40:57,659 lo que me saca. Me saca 798 00:40:57,659 --> 00:40:59,599 en string lo que yo 799 00:40:59,599 --> 00:41:00,199 he escrito ahí. 800 00:41:10,769 --> 00:41:12,070 Tiene un método 801 00:41:12,070 --> 00:41:14,349 ordinal 802 00:41:14,349 --> 00:41:16,710 que me saca 803 00:41:16,710 --> 00:41:18,510 el orden en el cual 804 00:41:18,510 --> 00:41:20,750 está situado 805 00:41:20,750 --> 00:41:22,670 eso dentro del enum, que bueno 806 00:41:22,670 --> 00:41:24,610 puede tener interés, depende de la aplicación 807 00:41:24,610 --> 00:41:25,690 o puede no tenerlo 808 00:41:25,690 --> 00:41:28,869 el lunes 809 00:41:28,869 --> 00:41:30,050 está en la posición 0 810 00:41:30,050 --> 00:41:32,309 pero si yo le dijera el martes 811 00:41:32,309 --> 00:41:34,909 me va a sacar que está en la posición 1 812 00:41:34,909 --> 00:41:40,590 ¿vale? 813 00:41:42,150 --> 00:41:43,190 bueno, ¿con qué 814 00:41:43,190 --> 00:41:44,769 se conjuga esto muy bien? 815 00:41:44,769 --> 00:41:47,349 Esto se conjuga muy bien con el switch case 816 00:41:47,349 --> 00:41:50,670 Porque ahora yo ya puedo hacer un switch case 817 00:41:50,670 --> 00:41:52,690 De esta manera 818 00:41:52,690 --> 00:41:58,690 Switch cita día 819 00:41:58,690 --> 00:42:04,760 Y ahora hago aquí 820 00:42:04,760 --> 00:42:10,760 Case lunes 821 00:42:10,760 --> 00:42:12,019 Bla, bla, bla 822 00:42:12,019 --> 00:42:15,760 ¿Vale? Vamos a ponerlo así 823 00:42:15,760 --> 00:42:23,320 Case martes 824 00:42:23,320 --> 00:42:26,079 Bla, bla, bla 825 00:42:26,079 --> 00:42:28,380 ¿Vale? 826 00:42:29,159 --> 00:42:30,820 Espera, voy a ponerlo con los dos puntos 827 00:42:30,820 --> 00:42:32,860 para que me quite el error de compilación 828 00:42:32,860 --> 00:42:34,119 pero no voy a poner código ahora 829 00:42:34,119 --> 00:42:49,429 vale, entonces 830 00:42:49,429 --> 00:42:51,630 conjuga muy bien con esto 831 00:42:51,630 --> 00:43:03,420 eso es lo que ya sé que te inquieta 832 00:43:08,820 --> 00:43:16,150 vale, pues esto es para lo típico 833 00:43:16,150 --> 00:43:18,130 para lo que se usa un enum 834 00:43:18,130 --> 00:43:20,630 vale, si tú sabes 835 00:43:20,630 --> 00:43:22,570 que una variable va a tener solamente 836 00:43:22,570 --> 00:43:24,170 un conjunto finito de valores 837 00:43:24,170 --> 00:43:26,530 te haces un enum con esos 838 00:43:26,530 --> 00:43:28,730 y ya solamente puedes hacer 839 00:43:28,730 --> 00:43:30,690 hacer asignaciones de una de esas cinco 840 00:43:30,690 --> 00:43:31,429 posibilidades. 841 00:43:32,409 --> 00:43:34,590 Y luego eso encaja clavado 842 00:43:34,590 --> 00:43:35,250 con el suitcase. 843 00:43:36,690 --> 00:43:38,590 ¿Vale? Encaja y clavado en función 844 00:43:38,590 --> 00:43:40,670 de que sean estos los patatines. Hasta ahí 845 00:43:40,670 --> 00:43:42,630 vale. Entonces, clara, 846 00:43:42,869 --> 00:43:44,590 claro. Ahora la 847 00:43:44,590 --> 00:43:46,469 pregunta es, y si yo tengo, 848 00:43:46,610 --> 00:43:48,650 aquí lo he asignado directamente, le he dicho 849 00:43:48,650 --> 00:43:50,730 martes. Pero si yo lo tengo 850 00:43:50,730 --> 00:43:52,650 que meter por teclado, porque yo por teclado 851 00:43:52,650 --> 00:43:54,630 solo meto un string. Esto no 852 00:43:54,630 --> 00:43:56,250 es un string, esto no es el string 853 00:43:56,250 --> 00:43:58,409 martes, no. Esto es 854 00:43:58,409 --> 00:43:59,630 un objeto 855 00:43:59,630 --> 00:44:03,329 sin más, uno de estos cinco objetos de aquí 856 00:44:03,329 --> 00:44:06,369 aquí hay cinco objetos 857 00:44:06,369 --> 00:44:08,849 que son los cinco posibles valores 858 00:44:08,849 --> 00:44:10,849 son los cinco posibles valores 859 00:44:10,849 --> 00:44:15,090 y uno de esos cinco es el que yo he metido aquí 860 00:44:15,090 --> 00:44:18,329 entonces para meterlo por teclado 861 00:44:18,329 --> 00:44:20,989 pues solamente puedo leer un string 862 00:44:20,989 --> 00:44:24,269 entonces tengo la forma cutre 863 00:44:24,269 --> 00:44:27,389 entre comillas, pero que siempre puedo recurrir a ella 864 00:44:27,389 --> 00:44:30,590 que es leerlo, hacer un switch case 865 00:44:30,590 --> 00:44:33,829 en función del string que sea, asignarle el valor 866 00:44:33,829 --> 00:44:36,869 y en el caso de que no sea uno de ellos 867 00:44:36,869 --> 00:44:39,789 estarle metiendo en un while y ya está 868 00:44:39,789 --> 00:44:41,929 esa sería la forma de hacerlo 869 00:44:41,929 --> 00:44:45,570 lo que pasa es que para que eso no embarre mucho el main 870 00:44:45,570 --> 00:44:48,309 se puede hacer 871 00:44:48,309 --> 00:44:51,090 incluso aquí porque el enum 872 00:44:51,090 --> 00:44:54,670 admite que tú metas métodos a los que luego puedes 873 00:44:54,670 --> 00:44:58,309 llamar, lo que pasa es que bueno, esto ya nos complica 874 00:44:58,309 --> 00:45:02,610 mucho las cosas, por ejemplo, vamos a hacer un 875 00:45:02,610 --> 00:45:12,039 método que me devuelva 876 00:45:12,039 --> 00:45:13,719 un día de la semana 877 00:45:13,719 --> 00:45:19,840 leer de teclado 878 00:45:19,840 --> 00:45:27,670 vale, entonces le voy a dejar aquí el null para quitarlo de compilación, paramos un segundito 879 00:45:27,670 --> 00:45:30,269 para que lo maduréis y descanséis, ya lo vemos 880 00:45:30,269 --> 00:45:33,409 vale, entonces yo puedo meter aquí 881 00:45:33,409 --> 00:45:35,469 toda esa complejidad de leer 882 00:45:35,469 --> 00:45:37,050 por teclado el string 883 00:45:37,050 --> 00:45:39,309 compararlo a ver si es uno de los 884 00:45:39,309 --> 00:45:41,630 válidos, si no patatín 885 00:45:41,630 --> 00:45:43,090 patatán y cuando ya 886 00:45:43,090 --> 00:45:45,030 pues lo haya hecho bien devolverlo 887 00:45:45,030 --> 00:45:46,570 entonces lo puedo hacer así 888 00:45:46,570 --> 00:45:48,449 y entonces ahora yo ya de aquí 889 00:45:48,449 --> 00:45:50,590 podría llamar directamente 890 00:45:50,590 --> 00:45:52,530 a díasemana 891 00:45:52,530 --> 00:45:54,929 punto 892 00:45:54,929 --> 00:45:57,469 leer teclado 893 00:45:57,469 --> 00:45:59,789 y ya está 894 00:45:59,789 --> 00:46:02,449 ¿Vale? Sería lo más limpio 895 00:46:02,449 --> 00:46:04,050 ¿Vale? 896 00:46:04,829 --> 00:46:06,750 Y ahora metemos aquí 897 00:46:06,750 --> 00:46:09,010 El código que falta, ¿vale? Vamos a parar un momentito