1 00:00:00,000 --> 00:00:04,400 Vamos a acabar esta aplicación que estamos muy hartos y aburridos de hacer lo mismo una y otra vez. 2 00:00:05,200 --> 00:00:06,000 ¡Hala! Pues ya está. 3 00:00:06,980 --> 00:00:09,179 Ahora ya vamos a hacer una aplicación, vamos a hacer un main. 4 00:00:11,720 --> 00:00:18,660 El main, en este caso, cambia respecto al que teníamos de pruebas, 5 00:00:18,800 --> 00:00:22,420 porque nosotros en nuestro main original, en nuestra aplicación, 6 00:00:23,339 --> 00:00:27,440 nuestro main trabajaba con un único departamento 7 00:00:27,440 --> 00:00:29,500 y ahora ya nuestro main agregaba 8 00:00:29,500 --> 00:00:31,719 empleado a ese único departamento 9 00:00:31,719 --> 00:00:33,039 etcétera, vale 10 00:00:33,039 --> 00:00:35,640 entonces, vamos a dejar 11 00:00:35,640 --> 00:00:39,740 este main así 12 00:00:39,740 --> 00:00:45,259 empleado temporal tiene sus getsuse 13 00:00:45,259 --> 00:00:46,399 y no tenía nada más 14 00:00:46,399 --> 00:00:47,399 no, ok 15 00:00:47,399 --> 00:01:01,780 Aquí está 16 00:01:01,780 --> 00:01:03,399 Echa el otro día 17 00:01:03,399 --> 00:01:06,739 Esto lo escribimos el otro día 18 00:01:06,739 --> 00:01:08,219 Y nos fuimos con ello ya escrito 19 00:01:08,219 --> 00:01:09,079 Sí 20 00:01:09,079 --> 00:01:12,819 Ah, pero pensaba que eso era de la empresa 21 00:01:12,819 --> 00:01:14,319 Ah, espera un momento 22 00:01:14,319 --> 00:01:15,780 Este es nuestro antiguo mail 23 00:01:15,780 --> 00:01:17,579 entonces al que acabo de entrar 24 00:01:17,579 --> 00:01:19,599 y nuestro antiguo main 25 00:01:19,599 --> 00:01:24,260 nuestro antiguo main 26 00:01:24,260 --> 00:01:25,840 lo hicimos para hacer pruebas 27 00:01:25,840 --> 00:01:27,739 con las clases que teníamos hasta ese momento 28 00:01:27,739 --> 00:01:30,200 que eran departamento, gerente y empleado 29 00:01:30,200 --> 00:01:31,719 pues nos creamos 30 00:01:31,719 --> 00:01:32,739 un departamento 31 00:01:32,739 --> 00:01:35,879 y agregamos empleados al departamento 32 00:01:35,879 --> 00:01:37,560 y mostramos el total del departamento 33 00:01:37,560 --> 00:01:39,879 ¿vale? vamos a hacernos 34 00:01:39,879 --> 00:01:42,040 un main 2, bueno lo vamos a dejar esbozado 35 00:01:42,040 --> 00:01:43,799 ya lo completáis vosotros para que podamos 36 00:01:43,799 --> 00:01:44,799 pasar a otro ejercicio 37 00:01:44,799 --> 00:01:47,719 vamos a dejar ya un main 2 38 00:01:47,719 --> 00:01:49,939 esbozado, que ya sería el main 39 00:01:49,939 --> 00:01:51,680 que me piden en el ejercicio 40 00:01:51,680 --> 00:01:54,019 pues venga, nos vamos a hacer una clase 41 00:01:54,019 --> 00:02:03,409 bueno, vamos a llamar 42 00:02:03,409 --> 00:02:05,170 vamos a refactorizar la anterior 43 00:02:05,170 --> 00:02:06,609 para que sea main pruebas 44 00:02:06,609 --> 00:02:09,090 porque es el main que hicimos el otro día para probar 45 00:02:09,090 --> 00:02:10,370 las clases que teníamos 46 00:02:10,370 --> 00:02:13,330 entonces a mi clase main antigua 47 00:02:13,330 --> 00:02:15,409 le voy a cambiar el nombre 48 00:02:15,409 --> 00:02:16,990 con refactor rename 49 00:02:16,990 --> 00:02:19,449 para que se llame 50 00:02:19,449 --> 00:02:20,330 main pruebas 51 00:02:20,330 --> 00:02:23,229 ya se llama 52 00:02:23,229 --> 00:02:23,969 main pruebas 53 00:02:23,969 --> 00:02:26,969 y ahora me voy a hacer un main 54 00:02:26,969 --> 00:02:29,490 que será el propio main de este ejercicio 55 00:02:29,490 --> 00:02:31,270 o al menos lo vamos a dejar 56 00:02:31,270 --> 00:02:32,469 planteado, vale 57 00:02:32,469 --> 00:02:34,889 pues venga 58 00:02:34,889 --> 00:02:35,930 nos hacemos 59 00:02:35,930 --> 00:02:39,110 mi verdadera clase main 60 00:02:39,110 --> 00:02:40,250 con su método main 61 00:02:40,250 --> 00:02:47,340 sí, entonces 62 00:02:47,340 --> 00:02:48,800 dime 63 00:02:48,800 --> 00:02:55,530 si esta clase 64 00:02:55,530 --> 00:02:56,870 puede heredar de otra 65 00:02:56,870 --> 00:02:59,310 esténs, pues imagínate 66 00:02:59,310 --> 00:03:01,569 a ver, puede tener sentido 67 00:03:01,569 --> 00:03:03,090 puede no tenerlo, pero claro que puede heredar 68 00:03:03,090 --> 00:03:05,189 o sea, la clase main es una clase más 69 00:03:05,189 --> 00:03:08,110 que un main herede de otra clase main 70 00:03:08,110 --> 00:03:10,430 a ver 71 00:03:10,430 --> 00:03:12,469 una clase 72 00:03:12,469 --> 00:03:14,949 sí, vamos a ver, una clase main 73 00:03:14,949 --> 00:03:17,490 es una clase normal y corriente en todos los 74 00:03:17,490 --> 00:03:19,409 aspectos, salvo porque tiene 75 00:03:19,409 --> 00:03:21,469 este método, es lo único que la diferencia 76 00:03:21,469 --> 00:03:22,909 que tiene ese método 77 00:03:22,909 --> 00:03:25,629 y ese método es un método especial 78 00:03:25,629 --> 00:03:27,310 porque no se invoca 79 00:03:27,310 --> 00:03:29,330 por código, sino que lo arranca la máquina 80 00:03:29,330 --> 00:03:30,990 virtual, pero como 81 00:03:30,990 --> 00:03:33,289 las clases main son clases normales 82 00:03:33,289 --> 00:03:35,129 y corrientes, yo podría tener otra clase 83 00:03:35,129 --> 00:03:36,210 main, por ejemplo, 84 00:03:40,629 --> 00:03:40,870 ¿vale? 85 00:03:41,870 --> 00:03:43,969 Y puede heredar perfectamente. 86 00:03:44,389 --> 00:03:46,009 Claro, hereda, pero en el momento que crece 87 00:03:46,009 --> 00:03:48,430 el public, esta tipo de main... 88 00:03:48,430 --> 00:03:50,330 Entonces, esta clase, claro, 89 00:03:50,449 --> 00:03:52,349 estaría heredando todo lo que tiene 90 00:03:52,349 --> 00:03:54,349 esta otra, en ese caso su main, 91 00:03:54,509 --> 00:03:56,090 pero aquí tendrías un problema. 92 00:03:56,969 --> 00:03:58,490 Y es que tienes ahora dos clases 93 00:03:58,490 --> 00:04:00,550 con dos métodos 94 00:04:00,550 --> 00:04:02,949 main. Entonces, la aplicación 95 00:04:02,949 --> 00:04:04,689 ya no tiene un único punto de arranque 96 00:04:04,689 --> 00:04:06,430 entonces 97 00:04:06,430 --> 00:04:08,990 a la máquina virtual habría que decirle 98 00:04:08,990 --> 00:04:11,349 cuál de las dos es el punto de arranque 99 00:04:11,349 --> 00:04:12,189 de la aplicación 100 00:04:12,189 --> 00:04:14,310 ¿vale? 101 00:04:15,349 --> 00:04:15,710 entonces 102 00:04:15,710 --> 00:04:19,209 hacerlo puedes, pero la situación que generas 103 00:04:19,209 --> 00:04:21,389 pues tienes luego que saber manejarla y gestionarla 104 00:04:21,389 --> 00:04:23,290 entonces lo tendrías que hacer 105 00:04:23,290 --> 00:04:24,949 con un manifest, mf 106 00:04:24,949 --> 00:04:27,329 que es el fichero en el que dices cuál es el punto de arranque 107 00:04:27,329 --> 00:04:28,370 de la aplicación 108 00:04:28,370 --> 00:04:30,790 cuando hacíamos el hard veíamos que había un fichero 109 00:04:30,790 --> 00:04:43,610 Sí, pero esa no sería la manera de hacer 110 00:04:43,610 --> 00:04:45,490 esa situación no la harías así, en cualquier caso 111 00:04:45,490 --> 00:04:46,329 siempre harías un main 112 00:04:46,329 --> 00:04:49,410 y tú en función del administrador 113 00:04:49,410 --> 00:04:51,189 efectivamente pues 114 00:04:51,189 --> 00:04:53,629 se lo podrías pasar como parámetro 115 00:04:53,629 --> 00:04:55,550 al main porque el main, aunque no lo hemos usado 116 00:04:55,550 --> 00:04:57,550 hasta ahora, el main 117 00:04:57,550 --> 00:04:59,569 es un método que en realidad 118 00:04:59,569 --> 00:05:00,870 puede recibir parámetros 119 00:05:00,870 --> 00:05:03,569 esos parámetros, ¿quién se los pasa? 120 00:05:04,470 --> 00:05:06,029 la máquina virtual cuando la llama 121 00:05:06,029 --> 00:05:07,490 como nosotros 122 00:05:07,490 --> 00:05:09,769 estamos llamando directamente 123 00:05:09,769 --> 00:05:11,930 a la aplicación sin más, no le está pasando nada 124 00:05:11,930 --> 00:05:13,829 y esos parámetros están 125 00:05:13,829 --> 00:05:14,649 a null todos 126 00:05:14,649 --> 00:05:17,990 pero esos parámetros podemos decirle a la máquina virtual 127 00:05:17,990 --> 00:05:20,069 cuando ejecutamos, cuando hacemos la teclita 128 00:05:20,069 --> 00:05:22,089 verde, además de hacer la teclita 129 00:05:22,089 --> 00:05:23,970 verde, podemos decirle 130 00:05:23,970 --> 00:05:25,569 ahora podemos ver cómo, oye 131 00:05:25,569 --> 00:05:27,949 no solo ejecútate, sino además 132 00:05:27,949 --> 00:05:29,310 te voy a pasar estos parámetros 133 00:05:29,310 --> 00:05:32,290 y esos parámetros van a rellenar automáticamente 134 00:05:32,290 --> 00:05:34,089 este array, de tal manera que 135 00:05:34,089 --> 00:05:35,889 el primero, vamos a hacer una prueba 136 00:05:35,889 --> 00:05:37,990 rapidísima, tengo aquí 137 00:05:37,990 --> 00:05:39,750 mi main pruebas, este main por ahora no tiene nada 138 00:05:39,750 --> 00:05:41,850 hasta olvidémonos de él, vale 139 00:05:41,850 --> 00:05:44,129 voy a hacer aquí mi main 140 00:05:44,129 --> 00:05:46,329 de pruebas y voy a decirle 141 00:05:46,329 --> 00:05:47,649 que antes de arrancar 142 00:05:47,649 --> 00:05:50,149 me muestre los parámetros que ha recibido 143 00:05:50,149 --> 00:05:53,990 vale, por ejemplo el primero 144 00:05:53,990 --> 00:06:00,579 y el segundo, vale 145 00:06:00,579 --> 00:06:02,100 entonces 146 00:06:02,100 --> 00:06:04,620 esta sentencia la puedo hacer 147 00:06:04,620 --> 00:06:06,920 entonces args0 ¿cuál es? 148 00:06:07,519 --> 00:06:09,579 la cadena 149 00:06:09,579 --> 00:06:11,319 que está en la primera 150 00:06:11,319 --> 00:06:12,920 posición de este array args 151 00:06:12,920 --> 00:06:15,439 args1 ¿quién es? la cadena 152 00:06:15,439 --> 00:06:17,399 que está en la segunda posición 153 00:06:17,399 --> 00:06:19,199 de este array args ¿qué tiene este array 154 00:06:19,199 --> 00:06:21,420 args? lo que la máquina virtual le haya pasado 155 00:06:21,420 --> 00:06:23,300 si nosotros ejecutamos 156 00:06:23,300 --> 00:06:25,319 la aplicación como la estamos ejecutando hasta ahora 157 00:06:25,319 --> 00:06:27,519 que es ejecuta y me callo 158 00:06:27,519 --> 00:06:29,500 no digo una palabra más, ahí no hay nada 159 00:06:29,500 --> 00:06:31,079 de hecho vamos a ejecutar este 160 00:06:31,079 --> 00:06:31,980 main pruebas 161 00:06:31,980 --> 00:06:38,139 bueno, claro 162 00:06:38,139 --> 00:06:40,980 lo primero que me dice es esto 163 00:06:40,980 --> 00:06:42,879 porque no hay arc 0 164 00:06:42,879 --> 00:06:44,379 no tiene nada, entonces es null 165 00:06:44,379 --> 00:06:48,620 me ha salido una excepción 166 00:06:48,620 --> 00:06:49,199 porque 167 00:06:49,199 --> 00:06:54,139 aquí no le he pasado nada 168 00:06:54,139 --> 00:06:56,040 yo he llamado a la máquina virtual 169 00:06:56,040 --> 00:06:57,220 y luego no le he dicho 170 00:06:57,220 --> 00:06:59,139 oye y además recibe parámetros 171 00:06:59,139 --> 00:07:00,879 con lo cual efectivamente 172 00:07:00,879 --> 00:07:03,819 en lugar de no salir de excepción 173 00:07:03,819 --> 00:07:05,139 voy a decir 174 00:07:05,139 --> 00:07:07,660 Que me muestre la longitud de ese array 175 00:07:07,660 --> 00:07:09,300 La longitud de ese array 176 00:07:09,300 --> 00:07:10,800 Ah, me va a dar error 177 00:07:10,800 --> 00:07:12,019 No, la longitud de ese array no 178 00:07:12,019 --> 00:07:13,100 Porque me va a dar cero 179 00:07:13,100 --> 00:07:16,519 Pues si es nulo o no es nulo 180 00:07:16,519 --> 00:07:18,560 Por ejemplo esto 181 00:07:18,560 --> 00:07:20,100 Vamos a hacer esto 182 00:07:20,100 --> 00:07:33,100 Pasado parámetros 183 00:07:33,100 --> 00:07:37,240 Y él sé que los muestre 184 00:07:37,240 --> 00:07:40,379 Que los muestre recorriendo el array 185 00:07:40,379 --> 00:07:43,540 Para cada string 186 00:07:43,540 --> 00:07:45,360 Aquí 187 00:07:45,360 --> 00:07:47,959 arts, pues que lo muestre 188 00:07:47,959 --> 00:07:53,509 vale, pues lo primero 189 00:07:53,509 --> 00:07:55,550 que hace este programa cuando lo arranquemos es 190 00:07:55,550 --> 00:07:57,649 ver si la máquina virtual le ha dado 191 00:07:57,649 --> 00:07:59,269 alguna colección de parámetros 192 00:07:59,269 --> 00:08:01,889 si no le ha dado ninguna colección de parámetros 193 00:08:01,889 --> 00:08:03,069 me dirá, no has pasado parámetros 194 00:08:03,069 --> 00:08:05,449 y si sí que se la ha dado, la recorrerá 195 00:08:05,449 --> 00:08:07,129 para mostrar cada parámetro 196 00:08:07,129 --> 00:08:09,189 vale, y luego ya sigue 197 00:08:09,189 --> 00:08:10,850 entonces si ejecutamos esto 198 00:08:10,850 --> 00:08:12,290 pues 199 00:08:12,290 --> 00:08:16,769 como es que me debería decir 200 00:08:16,769 --> 00:08:17,730 no has 201 00:08:17,730 --> 00:08:20,290 Ah, bueno, es que igual en lugar de null 202 00:08:20,290 --> 00:08:21,949 Lo que me hace es crear uno de posición 0 203 00:08:21,949 --> 00:08:23,350 Si args es igual 204 00:08:23,350 --> 00:08:25,089 Si args es igual a null 205 00:08:25,089 --> 00:08:29,050 O args.len 206 00:08:29,050 --> 00:08:32,100 Es 207 00:08:32,100 --> 00:08:33,840 Igual a 0 208 00:08:33,840 --> 00:08:36,659 Es decir, si me has pasado un parámetro null o 1 209 00:08:36,659 --> 00:08:38,460 Con ninguna 210 00:08:38,460 --> 00:08:39,519 Posición 211 00:08:39,519 --> 00:08:42,340 Ahora ya sí que, bueno, vamos a 212 00:08:42,340 --> 00:08:43,740 Pararlo 213 00:08:43,740 --> 00:08:45,759 Antes que nada 214 00:08:45,759 --> 00:08:48,159 Lo volvemos a ejecutar 215 00:08:48,159 --> 00:08:49,240 Vale 216 00:08:49,240 --> 00:08:51,379 no has pasado parámetros 217 00:08:51,379 --> 00:08:52,539 y luego ya el programa arranca 218 00:08:52,539 --> 00:08:54,860 vale, bueno, pues resulta que 219 00:08:54,860 --> 00:08:56,960 además viene bien porque esto en algún momento 220 00:08:56,960 --> 00:08:58,919 teníamos que contar, que arrancamos esto 221 00:08:58,919 --> 00:09:00,840 todo el rato, lo arrastramos y no sabemos 222 00:09:00,840 --> 00:09:02,980 lo que significa, vale, pues entonces podemos 223 00:09:02,980 --> 00:09:05,139 ahora arrancar un programa y además 224 00:09:05,139 --> 00:09:06,259 el momento de arrancarlo 225 00:09:06,259 --> 00:09:09,019 pasarle unos cuantos parámetros, que son cadenas 226 00:09:09,019 --> 00:09:10,279 de texto, las que me den la gana 227 00:09:10,279 --> 00:09:13,059 entonces, eso, si lo hacemos 228 00:09:13,059 --> 00:09:14,059 desde consola 229 00:09:14,059 --> 00:09:17,259 cuando arrancamos nuestra aplicación desde consola 230 00:09:17,259 --> 00:09:18,399 recordad que lo hacíamos 231 00:09:18,399 --> 00:09:20,840 siempre así 232 00:09:20,840 --> 00:09:23,419 java y luego poníamos el nombre 233 00:09:23,419 --> 00:09:25,100 de la clase a ejecutar 234 00:09:25,100 --> 00:09:27,759 podríamos pasárselo así 235 00:09:27,759 --> 00:09:28,799 los parámetros 236 00:09:28,799 --> 00:09:31,879 java, el nombre de la clase 237 00:09:31,879 --> 00:09:33,259 a ejecutar, el programa que fuera 238 00:09:33,259 --> 00:09:35,919 y luego le podemos pasar aquí ya los parámetros 239 00:09:35,919 --> 00:09:37,259 lo que a mi me dé la gana 240 00:09:37,259 --> 00:09:41,700 entonces aquí estaría ejecutando 241 00:09:41,700 --> 00:09:43,440 este código y además 242 00:09:43,440 --> 00:09:44,299 pasándole parámetros 243 00:09:44,299 --> 00:09:47,779 como nosotros no estamos ejecutando desde consola 244 00:09:47,779 --> 00:09:49,399 sino desde el eclipse 245 00:09:49,399 --> 00:09:51,559 el eclipse tiene que tener una manera 246 00:09:51,559 --> 00:09:53,440 de indicar, oye 247 00:09:53,440 --> 00:09:54,720 cuando tú le das al verde 248 00:09:54,720 --> 00:09:57,779 quieres ejecutarlo 249 00:09:57,779 --> 00:09:59,480 solamente o además quieres pasar 250 00:09:59,480 --> 00:10:01,440 parámetros, eso se 251 00:10:01,440 --> 00:10:03,820 configura en el entorno de configuración 252 00:10:03,820 --> 00:10:05,539 en configuraciones de ejecución 253 00:10:05,539 --> 00:10:06,379 lo que aparece aquí 254 00:10:06,379 --> 00:10:09,200 venga, pues entonces 255 00:10:09,200 --> 00:10:11,379 ¿veis? y aquí me aparece 256 00:10:11,379 --> 00:10:13,460 una pestañita que dice argumentos 257 00:10:13,460 --> 00:10:15,620 ¿veis que hay una 258 00:10:15,620 --> 00:10:16,639 pestaña que dice argumentos? 259 00:10:16,639 --> 00:10:18,940 o sea, aquí a mí me aparece main 260 00:10:18,940 --> 00:10:21,159 que me dice, ¿qué clase quieres ejecutar? main pruebas 261 00:10:21,159 --> 00:10:22,000 vale, estupendo 262 00:10:22,000 --> 00:10:23,919 ¿qué argumentos quieres pasar? 263 00:10:25,159 --> 00:10:26,919 pues ahora mismo no tenemos pasando argumentos 264 00:10:26,919 --> 00:10:27,919 vamos a pasarle 265 00:10:27,919 --> 00:10:30,279 hola, ¿qué tal? 266 00:10:30,519 --> 00:10:32,580 creo que hay que pasárselos ahí separados por espacio 267 00:10:32,580 --> 00:10:34,779 creo, vale 268 00:10:34,779 --> 00:10:36,000 y apply 269 00:10:36,000 --> 00:10:41,409 vale, y ahora ya vamos a ejecutarlo 270 00:10:41,409 --> 00:10:45,370 ¿veis? entonces 271 00:10:45,370 --> 00:10:47,889 él ahora ya, además de ejecutar 272 00:10:47,889 --> 00:10:50,389 la máquina virtual 273 00:10:50,389 --> 00:10:53,490 ha recibido los parámetros que le he pasado 274 00:10:53,490 --> 00:10:55,190 porque están aquí en la 275 00:10:55,190 --> 00:10:57,529 pestañita de parámetros 276 00:10:57,529 --> 00:10:59,549 y esos parámetros 277 00:10:59,549 --> 00:11:01,710 han ido a parar 278 00:11:01,710 --> 00:11:05,399 a este array 279 00:11:05,399 --> 00:11:06,399 ¿vale? 280 00:11:06,919 --> 00:11:08,720 entonces, situación que me decías tú 281 00:11:08,720 --> 00:11:11,820 pues que una aplicación arranque de una manera 282 00:11:11,820 --> 00:11:13,639 u otra en función de que usó el arranque 283 00:11:13,639 --> 00:11:15,379 la forma de programar eso 284 00:11:15,379 --> 00:11:17,159 nunca la haríamos con 285 00:11:17,159 --> 00:11:18,460 diferentes main 286 00:11:18,460 --> 00:11:21,100 o con diferentes métodos main, no 287 00:11:21,100 --> 00:11:23,519 una aplicación de escritorio siempre tiene que tener 288 00:11:23,519 --> 00:11:24,500 un único método main 289 00:11:24,500 --> 00:11:27,600 y ahora ya que ese método main distinga 290 00:11:27,600 --> 00:11:29,500 que tiene que hacer para irse por un método 291 00:11:29,500 --> 00:11:32,039 o por otro y ya está, entonces la forma de distinguir 292 00:11:32,039 --> 00:11:33,679 si has entrado como perfil 293 00:11:33,679 --> 00:11:35,200 de usuario, como perfil de lo que sea 294 00:11:35,200 --> 00:11:36,440 pues puede ser a partir de aquí 295 00:11:36,440 --> 00:11:39,240 por ejemplo, puede ser a partir de aquí 296 00:11:39,240 --> 00:11:40,539 y entonces este distinguiría 297 00:11:40,539 --> 00:11:43,379 el parámetro que me has pasado es parámetro del perfil 298 00:11:43,379 --> 00:11:45,120 de usuario, parámetro del perfil 299 00:11:45,120 --> 00:11:47,240 de administrador, pues yo ya tiro por un lado o por otro 300 00:11:47,240 --> 00:11:48,639 sería una opción, otra 301 00:11:48,639 --> 00:11:51,059 que el main lo primero que hiciera 302 00:11:51,059 --> 00:11:53,460 fuera pedirte 303 00:11:53,460 --> 00:11:55,460 tu login y conectarse a la sede de datos 304 00:11:55,460 --> 00:11:57,559 para ver cuál es tu perfil. Mil formas 305 00:11:57,559 --> 00:11:59,679 diferentes para distinguir cuál es tu perfil y a partir 306 00:11:59,679 --> 00:12:01,539 de ahí irse por un camino o por otro. Pero siempre 307 00:12:01,539 --> 00:12:03,600 un main. ¿Vale? Siempre un main 308 00:12:03,600 --> 00:12:05,620 en la aplicación. ¿Vale? 309 00:12:05,720 --> 00:12:07,419 Pero, aparte, dicho esto, 310 00:12:08,279 --> 00:12:09,840 una clase main, como es una clase 311 00:12:09,840 --> 00:12:11,620 como otra cualquiera, salvo que tiene 312 00:12:11,620 --> 00:12:13,460 ese método main, que debe ser único, 313 00:12:13,980 --> 00:12:15,279 puede heredar de quien quiera. 314 00:12:15,500 --> 00:12:17,559 Y si hereda, pues recibe todo lo que tiene. 315 00:12:18,360 --> 00:12:18,580 Claro. 316 00:12:18,580 --> 00:12:21,899 pero hacer que una clase 317 00:12:21,899 --> 00:12:23,340 en main que tiene un método main 318 00:12:23,340 --> 00:12:24,799 herede de otra que también tiene método main 319 00:12:24,799 --> 00:12:26,659 todo eso 320 00:12:26,659 --> 00:12:29,460 no vas a ganar nada, nada más que hacer 321 00:12:29,460 --> 00:12:31,860 un lío que vete a saber por dónde sale 322 00:12:31,860 --> 00:12:33,139 ¿vale? 323 00:12:33,519 --> 00:12:35,679 bueno, pues todo, ahora este era 324 00:12:35,679 --> 00:12:38,220 nuestro main del ejercicio 325 00:12:38,220 --> 00:12:40,840 y ahora este main 326 00:12:40,840 --> 00:12:44,039 va a trabajar para una empresa 327 00:12:44,039 --> 00:12:45,840 esta es una aplicación, ahora ya para una empresa 328 00:12:45,840 --> 00:12:47,759 luego, los datos 329 00:12:47,759 --> 00:12:49,840 de esta aplicación van a ser la empresa 330 00:12:49,840 --> 00:12:50,840 con la que está trabajando 331 00:12:50,840 --> 00:12:53,580 pues esta empresa, esta única empresa 332 00:12:53,580 --> 00:12:57,230 bueno, no he puesto ni el método 333 00:12:57,230 --> 00:12:58,190 aquí 334 00:12:58,190 --> 00:13:10,259 vale, pues 335 00:13:10,259 --> 00:13:12,120 estos son los datos, los datos es la empresa 336 00:13:12,120 --> 00:13:13,480 en la que estoy y se acabó 337 00:13:13,480 --> 00:13:19,019 como tenía un constructor solo con el nombre 338 00:13:19,019 --> 00:13:21,179 pues ya está 339 00:13:21,179 --> 00:13:27,200 vale, y ahora esta empresa 340 00:13:27,200 --> 00:13:28,220 ya está creada 341 00:13:28,220 --> 00:13:31,019 esta empresa no tiene departamentos 342 00:13:31,019 --> 00:13:31,639 todavía 343 00:13:31,639 --> 00:13:34,580 y ya está 344 00:13:34,580 --> 00:13:38,340 y ahora ya a través de la aplicación de gestión del menú 345 00:13:38,340 --> 00:13:39,659 ya hago las cosas que tenga que hacer. 346 00:13:40,600 --> 00:13:41,779 Entonces, ¿qué funcionalidades? 347 00:13:43,059 --> 00:13:46,379 Dice, bueno, aquí dice con cuatro departamentos sin empleados. 348 00:13:46,899 --> 00:13:48,960 Venga, vamos a hacer este main tal cual para este ejercicio. 349 00:13:49,039 --> 00:13:51,860 Vamos a hacerlo porque tendría quizá más utilidad 350 00:13:51,860 --> 00:13:56,080 que en el menú hubiera una opción que fuera agregar un departamento. 351 00:13:56,960 --> 00:13:58,500 Pero bueno, vamos a hacer lo que nos dice, 352 00:13:58,600 --> 00:14:02,240 que es vamos a crear la empresa con cuatro departamentos. 353 00:14:02,240 --> 00:14:04,440 bueno pues entonces 354 00:14:04,440 --> 00:14:05,860 la empresa 355 00:14:05,860 --> 00:14:08,440 sus departamentos van a estar en este 356 00:14:08,440 --> 00:14:10,379 array, entonces esto lo podemos hacer de mil maneras 357 00:14:10,379 --> 00:14:12,120 que es 358 00:14:12,120 --> 00:14:14,179 crear directamente en el main 359 00:14:14,179 --> 00:14:16,559 un array de cuatro departamentos sin empleados 360 00:14:16,559 --> 00:14:17,399 y meter el array 361 00:14:17,399 --> 00:14:19,799 y ya está, podemos hacer eso y se acabó 362 00:14:19,799 --> 00:14:40,809 y ahora vamos a crear 363 00:14:40,809 --> 00:14:42,009 los departamentos 364 00:14:42,009 --> 00:14:44,289 departamento 365 00:14:44,289 --> 00:14:46,009 ojo, esto 366 00:14:46,009 --> 00:14:48,669 un for each que era mi tentación por la costumbre 367 00:14:48,669 --> 00:14:51,129 sí que aquí ya sí que jamás 368 00:14:51,129 --> 00:14:53,690 porque ahora vamos a recorrer este array 369 00:14:53,690 --> 00:14:55,450 para ahora ya sí crear 370 00:14:55,450 --> 00:14:57,470 un objeto nuevo, departamento para 371 00:14:57,470 --> 00:14:59,409 cada posición, luego al crear un objeto 372 00:14:59,409 --> 00:15:01,070 creo una dirección de memoria nueva 373 00:15:01,070 --> 00:15:03,049 si lo hago a través del for each 374 00:15:03,049 --> 00:15:05,450 esa dirección de memoria iría a la copia 375 00:15:05,450 --> 00:15:07,289 no iría a la verdadera posición del array 376 00:15:07,289 --> 00:15:08,450 luego no me serviría de nada 377 00:15:08,450 --> 00:15:11,190 luego aquí sí que un for each 378 00:15:11,190 --> 00:15:13,129 no tendría error de sintaxis 379 00:15:13,129 --> 00:15:15,029 pero no te crearía nada en el array 380 00:15:15,029 --> 00:15:17,629 crearía objetos que luego desaparecerían 381 00:15:17,629 --> 00:15:23,789 Claro, tiene que ser un for normal, sí o sí. 382 00:15:24,850 --> 00:15:26,230 ¿Pero el for each no sirve? 383 00:15:27,230 --> 00:15:29,370 No, porque si yo hago esto con un for each, 384 00:15:31,409 --> 00:15:36,370 para cada departamento de mi array de departamentos. 385 00:15:37,289 --> 00:15:38,309 ¿Vale? ¿Qué vamos a hacer? 386 00:15:38,370 --> 00:15:39,710 Vamos a crear un departamento. 387 00:15:41,289 --> 00:15:44,370 New departamento. 388 00:15:46,590 --> 00:15:48,730 ¿Qué propiedades necesita el departamento? 389 00:15:48,889 --> 00:15:51,750 Vamos a ponerle sin empleados por ahora, solamente con el nombre. 390 00:15:51,750 --> 00:15:53,309 Pues venga 391 00:15:53,309 --> 00:15:54,710 D.set 392 00:15:54,710 --> 00:15:56,450 Nombre 393 00:15:56,450 --> 00:15:59,629 Y que lo vaya pidiendo 394 00:15:59,629 --> 00:16:01,190 Por teclado 395 00:16:01,190 --> 00:16:03,990 Vale, entonces este array teóricamente 396 00:16:03,990 --> 00:16:05,850 Cuatro veces 397 00:16:05,850 --> 00:16:07,509 Porque este array tiene cuatro posiciones 398 00:16:07,509 --> 00:16:09,929 Me instancia un objeto departamento 399 00:16:09,929 --> 00:16:11,990 Y le pone como nombre una cadena 400 00:16:11,990 --> 00:16:13,710 Que me ha pedido, y así cuatro veces 401 00:16:13,710 --> 00:16:14,750 Vale 402 00:16:14,750 --> 00:16:18,090 Nos creemos que el array ya está construido 403 00:16:18,090 --> 00:16:19,330 Con departamentos dentro de él 404 00:16:19,330 --> 00:16:20,629 Vamos a recorrerlo, a ver 405 00:16:20,629 --> 00:16:22,870 vamos a recorrerlo para mostrar 406 00:16:22,870 --> 00:16:24,870 los nombres de los departamentos 407 00:16:24,870 --> 00:16:25,769 que acabamos de crear 408 00:16:25,769 --> 00:16:29,049 para cada departamento en este array 409 00:16:29,049 --> 00:16:30,889 que aparentemente he creído 410 00:16:30,889 --> 00:16:33,509 rellenar 411 00:16:33,509 --> 00:16:35,289 vamos a mostrar 412 00:16:35,289 --> 00:16:37,269 de punto 413 00:16:37,269 --> 00:16:38,269 getNombre 414 00:16:38,269 --> 00:16:41,429 vale, pues ejecutamos este main 415 00:16:41,429 --> 00:16:48,250 vale, y me va pidiendo 416 00:16:48,250 --> 00:16:49,570 los nombres de los cuatro departamentos 417 00:16:49,570 --> 00:16:52,549 departamento 1, departamento 2 418 00:16:52,549 --> 00:16:53,730 departamento 3 419 00:16:53,730 --> 00:16:55,090 departamento 4 420 00:16:55,090 --> 00:16:57,889 y me sale un null pointer exception 421 00:16:57,889 --> 00:17:00,350 claro, es justo lo que os estaba diciendo 422 00:17:00,350 --> 00:17:02,389 ¿por qué me sale un null pointer exception? 423 00:17:03,470 --> 00:17:04,869 esto que ya se os quede 424 00:17:04,869 --> 00:17:06,789 grabado en la cabeza 425 00:17:06,789 --> 00:17:08,289 para siempre 426 00:17:08,289 --> 00:17:10,329 porque yo aquí 427 00:17:10,329 --> 00:17:12,230 en la instancia de un nuevo objeto de departamento 428 00:17:12,230 --> 00:17:13,089 ¿qué estamos haciendo? 429 00:17:13,769 --> 00:17:15,089 aparece un nuevo objeto en memoria 430 00:17:15,089 --> 00:17:16,809 con una dirección que se acaba de reservar 431 00:17:16,809 --> 00:17:17,910 una dirección que aparece en una 432 00:17:17,910 --> 00:17:20,970 esa dirección se la asignamos 433 00:17:20,970 --> 00:17:22,750 a este objeto de 434 00:17:22,750 --> 00:17:24,890 y este objeto D 435 00:17:24,890 --> 00:17:26,109 es una copia 436 00:17:26,109 --> 00:17:29,009 de la dirección que tiene 437 00:17:29,009 --> 00:17:31,049 el array, no es la propia 438 00:17:31,049 --> 00:17:32,150 posición del array 439 00:17:32,150 --> 00:17:34,569 entonces el objeto lo dejo apuntado 440 00:17:34,569 --> 00:17:36,869 por D que es una copia, no lo dejo 441 00:17:36,869 --> 00:17:38,410 apuntado por la posición del array 442 00:17:38,410 --> 00:17:40,549 entonces el array no se ha enterado de nada 443 00:17:40,549 --> 00:17:42,789 estoy creando todo el rato variables D 444 00:17:42,789 --> 00:17:44,769 que apunta a un nuevo departamento, otra variable D 445 00:17:44,769 --> 00:17:46,990 otra variable D y otra variable D 446 00:17:46,990 --> 00:17:47,910 y ya está 447 00:17:47,910 --> 00:17:49,710 entonces el array no se ha enterado 448 00:17:49,710 --> 00:17:53,549 si yo simplemente quiero consultar 449 00:17:53,549 --> 00:17:55,009 sí, porque me da igual 450 00:17:55,009 --> 00:17:57,089 consultar en la propia posición del array 451 00:17:57,089 --> 00:17:59,150 que en una copia de esa 452 00:17:59,150 --> 00:18:01,430 porque ambas son direcciones que me llevan al mismo sitio 453 00:18:01,430 --> 00:18:05,269 pero si estoy cambiando la dirección 454 00:18:05,269 --> 00:18:07,410 a donde apunta, no la puedo cambiar 455 00:18:07,410 --> 00:18:09,170 ahí, la tengo que cambiar aquí 456 00:18:09,170 --> 00:18:13,579 bueno, pues entonces, esto con un 457 00:18:13,579 --> 00:18:15,660 for each, por tanto, nunca lo podríamos hacer 458 00:18:15,660 --> 00:18:16,880 lo tendríamos que hacer 459 00:18:16,880 --> 00:18:26,529 y ahora esto sería 460 00:18:26,529 --> 00:18:29,130 de 2di 461 00:18:29,130 --> 00:18:31,069 Igual al new departamento 462 00:18:31,069 --> 00:18:36,809 Esto ya sí, si ejecutamos esto 463 00:18:36,809 --> 00:18:38,809 Me van a salir ya los nombres perfectamente 464 00:18:38,809 --> 00:18:41,029 De uno 465 00:18:41,029 --> 00:18:43,049 De dos, de tres 466 00:18:43,049 --> 00:18:44,210 De cuatro 467 00:18:44,210 --> 00:18:46,690 Ya están, de uno, de dos, de tres, de cuatro 468 00:18:46,690 --> 00:18:51,599 Vale 469 00:18:51,599 --> 00:18:54,380 Bueno, entonces ya tenemos 470 00:18:54,380 --> 00:18:56,500 El array de cuatro departamentos creado 471 00:18:56,500 --> 00:18:58,480 Vamos a ponérselo a la empresa 472 00:18:58,480 --> 00:18:59,779 Como su array de departamentos 473 00:18:59,779 --> 00:19:01,980 Bueno, pues ya está, la empresa para eso 474 00:19:01,980 --> 00:19:04,440 La empresa que acabamos de crear 475 00:19:04,440 --> 00:19:05,640 Tiene su método set 476 00:19:05,640 --> 00:19:08,519 a la que yo le doy un array 477 00:19:08,519 --> 00:19:09,579 y lo pone como 478 00:19:09,579 --> 00:19:12,559 valor para esa propiedad array, pues ya está 479 00:19:12,559 --> 00:19:13,880 la empresa ya tiene entonces 480 00:19:13,880 --> 00:19:16,619 su nombre, que se lo he dado en el 481 00:19:16,619 --> 00:19:18,500 constructor, y su 482 00:19:18,500 --> 00:19:20,480 array de departamentos, los cuatro que 483 00:19:20,480 --> 00:19:21,220 acabo de crear 484 00:19:21,220 --> 00:19:24,480 ya tendría empresa, sus dos 485 00:19:24,480 --> 00:19:25,940 propiedades, las únicas que necesita 486 00:19:25,940 --> 00:19:30,329 y ahora ya, pues 487 00:19:30,329 --> 00:19:31,750 me dice el main, venga, pues 488 00:19:31,750 --> 00:19:34,470 ¿qué funcionalidades queremos para esa empresa 489 00:19:34,470 --> 00:19:36,250 que tiene cuatro departamentos 490 00:19:36,250 --> 00:19:38,250 por ahora sin empleados 491 00:19:38,250 --> 00:19:40,210 porque del departamento solamente le hemos puesto el nombre 492 00:19:40,210 --> 00:19:42,410 cada departamento a su vez 493 00:19:42,410 --> 00:19:44,349 tiene una raíz de empleados que está a cero 494 00:19:44,349 --> 00:19:45,289 vale 495 00:19:45,289 --> 00:19:48,049 pero es que para eso ya está 496 00:19:48,049 --> 00:19:50,029 las opciones del menú 497 00:19:50,029 --> 00:19:52,650 incorporar un empleado 498 00:19:52,650 --> 00:19:53,690 a un departamento 499 00:19:53,690 --> 00:19:56,369 vale, pidiendo para ello 500 00:19:56,369 --> 00:19:58,569 nombre del departamento al que los vas a incorporar 501 00:19:58,569 --> 00:20:00,269 y datos del empleado 502 00:20:00,269 --> 00:20:02,710 si es gerente o temporal, metelo en ese departamento 503 00:20:02,710 --> 00:20:04,410 mostrar 504 00:20:04,410 --> 00:20:05,589 la salida total de la empresa 505 00:20:05,589 --> 00:20:08,210 y mostrar departamento 506 00:20:08,210 --> 00:20:09,430 que más salario paga. 507 00:20:10,470 --> 00:20:12,250 Pues hacéis esas tres 508 00:20:12,250 --> 00:20:13,450 funcionalidades. 509 00:20:14,269 --> 00:20:17,670 ¿Ahora? No. 510 00:20:19,190 --> 00:20:20,049 Ahora no. 511 00:20:20,230 --> 00:20:20,650 En casa. 512 00:20:22,410 --> 00:20:23,549 Vale, a ver. 513 00:20:25,210 --> 00:20:26,069 Pues eso, 514 00:20:26,170 --> 00:20:27,869 nuestro main ahora sería esto. 515 00:20:30,440 --> 00:20:31,339 Una opción, 516 00:20:31,579 --> 00:20:33,720 y ahora ya todo el rato, el do 517 00:20:33,720 --> 00:20:44,740 incorporar 518 00:20:44,740 --> 00:20:45,980 empleado 519 00:20:45,980 --> 00:20:54,500 a departamento 520 00:20:54,500 --> 00:20:57,559 dado nombre 521 00:20:57,559 --> 00:21:00,259 departamento 522 00:21:00,259 --> 00:21:03,819 y solicitando datos del empleado. 523 00:21:03,819 --> 00:21:05,940 Estoy poniendo la opción larguísima para que quede claro. 524 00:21:15,210 --> 00:21:17,809 Datos del empleado también, si es gerente, temporal, etc. 525 00:21:19,880 --> 00:21:22,000 En realidad es lo mismo que esto. 526 00:21:22,160 --> 00:21:23,519 Ya lo hemos hecho en este main de aquí. 527 00:21:23,940 --> 00:21:25,500 Agregar empleado. Lo que pasa es que en este 528 00:21:25,500 --> 00:21:29,619 el empleado lo agregábamos al único departamento que teníamos. 529 00:21:29,640 --> 00:21:33,059 al único, o sea es utilizar esto 530 00:21:33,059 --> 00:21:37,700 pero en lugar de agregarlo al único departamento que teníamos en el otro main 531 00:21:37,700 --> 00:21:40,839 que solo teníamos uno, que era este, solo uno 532 00:21:40,839 --> 00:21:45,279 pues tenemos que una vez que tenemos el empleado ya leído por teclado 533 00:21:45,279 --> 00:21:48,960 que ya lo tenemos aquí ya leído por teclado este empleado 534 00:21:48,960 --> 00:21:53,500 tendremos que recorrer todos los departamentos de la empresa para ver 535 00:21:53,500 --> 00:21:57,480 cuál es el que se llama como me han pedido y agregárselo a ese 536 00:21:57,480 --> 00:22:33,180 O sea, será, cambiará respecto a esta versión del main de pruebas el meter esto en un for, el único que cambiará, meter eso en un for para agregarse al departamento que toque, ya está, meter eso en un for y listo, tendremos la opción 2, que será mostrar salario total de la empresa, que será lo mismo meter en un for el salario total de cada departamento, 537 00:22:33,180 --> 00:22:36,420 pues mostrar salario total de la empresa 538 00:22:36,420 --> 00:22:42,880 pues mostrar salario 539 00:22:42,880 --> 00:22:43,400 de empresa 540 00:22:43,400 --> 00:22:46,240 será en nuestro main de pruebas 541 00:22:46,240 --> 00:22:48,900 mostrábamos el salario del único 542 00:22:48,900 --> 00:22:50,660 departamento que teníamos, que era esto 543 00:22:50,660 --> 00:22:53,039 pues lo único que cambiará 544 00:22:53,039 --> 00:22:54,119 será meter esto en un for 545 00:22:54,119 --> 00:22:56,420 para que haga la suma acumulativa de todos 546 00:22:56,420 --> 00:22:58,640 ni siquiera, porque ya hay un método 547 00:22:58,640 --> 00:22:59,640 en la clase empresa 548 00:22:59,640 --> 00:23:02,839 ya hay un método en la clase empresa que hemos hecho 549 00:23:02,839 --> 00:23:04,059 para mostrar el sueldo total 550 00:23:04,059 --> 00:23:06,480 de la empresa 551 00:23:06,480 --> 00:23:08,440 y hay un método en la clase empresa 552 00:23:08,440 --> 00:23:10,200 que muestra todo lo que paga la empresa 553 00:23:10,200 --> 00:23:12,519 pues esta opción 2 554 00:23:12,519 --> 00:23:14,420 será llamar ese método para este objeto 555 00:23:14,420 --> 00:23:15,880 esta opción 2 es una línea 556 00:23:15,880 --> 00:23:18,339 es para mi empresa llamar al método 557 00:23:18,339 --> 00:23:20,079 sueldo total y se acabó 558 00:23:20,079 --> 00:23:21,079 esa será la opción 2 559 00:23:21,079 --> 00:23:25,759 y la opción 3 de nuevo es recordar 560 00:23:25,759 --> 00:23:27,420 la programación, recordarla 561 00:23:27,420 --> 00:23:28,940 hacer máximos, mínimos, etc 562 00:23:28,940 --> 00:23:31,160 recordarlo 563 00:23:31,160 --> 00:23:33,660 mostrando el departamento que más se gasta 564 00:23:33,660 --> 00:23:35,619 pues tendréis que hacer un máximo 565 00:23:35,619 --> 00:23:37,920 dentro de todo el array 566 00:23:37,920 --> 00:23:40,019 de departamentos 567 00:23:40,019 --> 00:23:41,420 de mi empresa, ver 568 00:23:41,420 --> 00:23:47,250 el departamento que más paga, etcétera 569 00:23:47,250 --> 00:23:53,230 y esto de aquí, estas tres funciones 570 00:23:53,230 --> 00:23:54,990 son, ya esto ni es herencia 571 00:23:54,990 --> 00:23:56,430 ni es nada, es lo de siempre 572 00:23:56,430 --> 00:23:58,890 lo de siempre una y otra vez 573 00:23:58,890 --> 00:24:03,299 y aquí pues como siempre 574 00:24:03,299 --> 00:24:04,539 le demos la opción 575 00:24:04,539 --> 00:24:11,619 y ahora ya pues lo de siempre 576 00:24:11,619 --> 00:24:22,319 en el caso 577 00:24:22,319 --> 00:24:23,980 de que sea uno, pues lo que haya que hacer 578 00:24:23,980 --> 00:24:27,720 que es un copia y pega de nuestro main de pruebas 579 00:24:27,720 --> 00:24:28,680 pero añadiendo un bucle 580 00:24:28,680 --> 00:24:31,420 en el caso 2 581 00:24:31,420 --> 00:24:32,339 una línea 582 00:24:32,339 --> 00:24:35,900 una línea, es el caso 2 583 00:24:35,900 --> 00:24:39,099 y el caso 3, pues hacer un máximo 584 00:24:39,099 --> 00:24:43,720 dentro de la raíz de departamentos 585 00:24:43,720 --> 00:24:47,799 y aquí acabaría 586 00:24:47,799 --> 00:24:48,619 mi switch 587 00:24:48,619 --> 00:24:50,880 y aquí acaba 588 00:24:50,880 --> 00:24:53,460 aquí acaba el switch 589 00:24:53,460 --> 00:24:57,009 y el doom 590 00:24:57,009 --> 00:25:00,759 esta me sobra 591 00:25:00,759 --> 00:25:02,960 Y aquí es el while 592 00:25:02,960 --> 00:25:04,339 Opción 593 00:25:04,339 --> 00:25:07,059 Diferente de la de salir, sea la que sea 594 00:25:07,059 --> 00:25:09,960 La 0 por ejemplo 595 00:25:09,960 --> 00:25:24,460 Bueno, pues esto 596 00:25:24,460 --> 00:25:26,980 Otra cosa que hacéis en casa 597 00:25:26,980 --> 00:25:27,960 Completar este main 598 00:25:27,960 --> 00:25:29,420 Que es nada 599 00:25:29,420 --> 00:25:32,339 Esto es hacer un máximo 600 00:25:32,339 --> 00:25:33,920 Que son 4 o 5 líneas 601 00:25:33,920 --> 00:25:37,000 Si se sabe hacer un máximo 602 00:25:37,000 --> 00:25:42,549 Si 603 00:25:42,549 --> 00:25:45,730 Porque en casa hay que vencer la pereza 604 00:25:45,730 --> 00:25:46,470 Y hacer cosas 605 00:25:46,470 --> 00:25:48,170 ¿Vale? 606 00:25:48,230 --> 00:25:50,410 Ya me encargaré personalmente 607 00:25:50,410 --> 00:25:53,839 De que no apruebe nadie 608 00:25:53,839 --> 00:25:55,480 Solamente por venir a clase 609 00:25:55,480 --> 00:25:58,519 Vale, a ver 610 00:25:58,519 --> 00:25:59,960 Figura geométrica 611 00:25:59,960 --> 00:26:05,240 Este ejercicio que nos va a permitir ya 612 00:26:05,240 --> 00:26:07,559 Introducir las clases abstractas 613 00:26:07,559 --> 00:26:08,960 Venga 614 00:26:08,960 --> 00:26:14,279 Ejercicio 615 00:26:14,279 --> 00:26:23,609 Lo voy a meter 616 00:26:23,609 --> 00:26:24,589 En un paquete 617 00:26:24,589 --> 00:26:27,470 Que ponga ejercicio 618 00:26:27,470 --> 00:26:29,529 Figuras 619 00:26:29,529 --> 00:26:33,150 Porque son un montón de clases 620 00:26:33,150 --> 00:26:37,950 Una clase por cada figura, entonces cada ejercicio lo estaba metiendo en un paquete 621 00:26:37,950 --> 00:26:40,730 que a su vez todos en un mismo proyecto para subirlo así a la aula virtual. 622 00:26:41,849 --> 00:26:44,309 Lo que digo una y otra vez, pues eso, otra vez. 623 00:26:46,160 --> 00:26:50,819 Que efectivamente me repito muchísimo porque... 624 00:26:50,819 --> 00:27:01,769 Venga, pues vamos a hacer este. 625 00:27:06,319 --> 00:27:11,279 Se supone que esta es una aplicación para hacer funcionalidades 626 00:27:11,279 --> 00:27:14,220 con figuras geométricas. 627 00:27:14,220 --> 00:27:17,829 en este caso 628 00:27:17,829 --> 00:27:18,970 perímetros y áreas 629 00:27:18,970 --> 00:27:20,809 lo típico 630 00:27:20,809 --> 00:27:23,910 vale, una aplicación que me permita de forma 631 00:27:23,910 --> 00:27:26,049 rápida calcular perímetros y áreas 632 00:27:26,049 --> 00:27:27,369 de 633 00:27:27,369 --> 00:27:28,950 diferentes figuras 634 00:27:28,950 --> 00:27:32,319 bueno, en particular 635 00:27:32,319 --> 00:27:35,359 ahora mismo va a trabajar 636 00:27:35,359 --> 00:27:37,339 con triángulos cuadrados y círculos 637 00:27:37,339 --> 00:27:38,980 vale 638 00:27:38,980 --> 00:27:41,799 entonces yo podría hacer la aplicación 639 00:27:41,799 --> 00:27:46,960 sin herencia 640 00:27:46,960 --> 00:27:51,799 haciendo una clase triángulo, una clase cuadrado y una clase círculo 641 00:27:51,799 --> 00:27:56,539 o haciendo, viendo que todas son figuras geométricas 642 00:27:56,539 --> 00:27:59,920 pues decir, oye, voy a meter una arquitectura de herencia 643 00:27:59,920 --> 00:28:03,559 voy a hacer una superclase figura geométrica 644 00:28:03,559 --> 00:28:04,839 y que todas se hereden de ella 645 00:28:04,839 --> 00:28:08,680 porque así a lo mejor, a lo largo del desarrollo 646 00:28:08,680 --> 00:28:12,299 puedo ver que incluyendo cosas en la superclase 647 00:28:12,299 --> 00:28:15,279 se me facilitan las cosas 648 00:28:15,279 --> 00:28:17,660 ¿Vale? Pues entonces 649 00:28:17,660 --> 00:28:20,440 Una vez que hemos identificado 650 00:28:20,440 --> 00:28:22,380 Que tiene sentido hacer un modelo de herencia 651 00:28:22,380 --> 00:28:24,880 En el cual haya una superclase figura geométrica 652 00:28:24,880 --> 00:28:26,680 Y las subclases que ahí me den la gana 653 00:28:26,680 --> 00:28:28,859 Pues vamos a hacer 654 00:28:28,859 --> 00:28:30,220 Esa superclase 655 00:28:30,220 --> 00:28:35,079 Pues es lo primero que hacemos 656 00:28:35,079 --> 00:28:36,400 La superclase 657 00:28:36,400 --> 00:28:41,700 Figura 658 00:28:41,700 --> 00:28:44,380 Geométrica 659 00:28:44,380 --> 00:28:45,980 Geométrica 660 00:28:45,980 --> 00:28:53,400 Vale, aquí ya como el diseño me lo han hecho 661 00:28:53,400 --> 00:28:55,220 No tenemos que pensar mucho, pero me dicen 662 00:28:55,220 --> 00:28:58,319 todas las figuras van a tener un nombre 663 00:28:58,319 --> 00:28:59,779 pues entonces 664 00:28:59,779 --> 00:29:01,500 como todas van a tener un nombre 665 00:29:01,500 --> 00:29:02,920 esa propiedad nombre 666 00:29:02,920 --> 00:29:06,039 la puedo poner en la superclase 667 00:29:06,039 --> 00:29:07,940 porque todas, me da igual que sean 668 00:29:07,940 --> 00:29:09,440 triángulos, cuadrados, círculos 669 00:29:09,440 --> 00:29:11,480 trapezoides, polígonos 670 00:29:11,480 --> 00:29:14,160 pentágonos, todas van a tener 671 00:29:14,160 --> 00:29:16,160 un nombre, pues entonces esa propiedad 672 00:29:16,160 --> 00:29:17,319 la pongo en la superclase 673 00:29:17,319 --> 00:29:29,519 vale, y además 674 00:29:29,519 --> 00:29:32,079 como parece ser que ya después de 675 00:29:32,079 --> 00:29:33,740 haber analizado cosas del futuro 676 00:29:33,740 --> 00:29:37,660 de esta aplicación, alguien ha debido ver que saber 677 00:29:37,660 --> 00:29:40,019 los lados que tiene esa figura es interesante 678 00:29:40,019 --> 00:29:45,460 pues dice, vamos a hacer una propiedad específicamente para guardar el número de lados que tenga 679 00:29:45,460 --> 00:29:49,460 5, 7, 8, entonces como todas las figuras geométricas 680 00:29:49,460 --> 00:29:55,809 tienen lados, el círculo no 681 00:29:55,809 --> 00:29:58,170 con lo cual esta se queda un poco fea, pero bueno 682 00:29:58,170 --> 00:30:03,869 el que hizo el diseño nos ha dicho que pongamos una propiedad número de lados en figura 683 00:30:03,869 --> 00:30:07,990 geométrica, no sé que se entiende por 684 00:30:07,990 --> 00:30:18,690 el número de lados en círculo, pero bueno, vale, venga, pues un constructor 685 00:30:18,690 --> 00:30:46,730 que inicialice los atributos, get y set y tirando, vale 686 00:30:46,730 --> 00:30:50,950 ahora ya sí vamos a ver que figuras geométricas vamos a trabajar 687 00:30:50,950 --> 00:30:55,150 en esta aplicación, pues nos dice, vamos a trabajar 688 00:30:55,150 --> 00:30:59,609 con triángulo, con cuadrado 689 00:30:59,609 --> 00:31:02,349 y con círculo 690 00:31:02,349 --> 00:31:06,650 triángulo se caracteriza por los tres lados que tiene 691 00:31:06,650 --> 00:31:10,930 cuadrado solo por uno porque el cuadrado 692 00:31:10,930 --> 00:31:15,170 todos sus lados son iguales, luego con poner la medida de uno solo 693 00:31:15,170 --> 00:31:19,069 tengo la medida de los tres, a diferencia del triángulo que sus lados pueden ser distintos 694 00:31:19,069 --> 00:31:22,089 entonces tengo que poner las tres medidas y círculo 695 00:31:22,089 --> 00:31:25,509 con tener el radio ya lo tengo completamente caracterizado 696 00:31:25,509 --> 00:31:28,890 pues venga, hacemos las tres subclases 697 00:31:28,890 --> 00:31:42,059 Triángulo 698 00:31:42,059 --> 00:31:48,819 Que herede de 699 00:31:48,819 --> 00:31:52,339 Figura geométrica 700 00:31:52,339 --> 00:31:54,140 Vale 701 00:31:54,140 --> 00:31:58,339 Vamos a hacerle su constructor 702 00:31:58,339 --> 00:31:59,940 Bueno, vamos a añadir primero 703 00:31:59,940 --> 00:32:03,819 Sus tres propiedades específicas 704 00:32:03,819 --> 00:32:10,630 Que son las tres longitudes 705 00:32:10,630 --> 00:32:11,630 De sus tres lados 706 00:32:11,630 --> 00:32:17,259 Y ahora ya un constructor 707 00:32:17,259 --> 00:32:19,079 Porque el constructor ya no nos vale 708 00:32:19,079 --> 00:32:37,349 Vale, entonces al constructor 709 00:32:37,349 --> 00:32:39,089 Le paso todas las cinco cosas 710 00:32:39,089 --> 00:32:41,930 nombre, num, lados, lado 1, lado 2, lado 3 711 00:32:41,930 --> 00:32:45,769 llamo al constructor de la clase padre 712 00:32:45,769 --> 00:32:50,509 el constructor llamando al super lo podéis generar automáticamente 713 00:32:50,509 --> 00:32:54,910 con generar constructor y os acordáis de aquí arriba 714 00:32:54,910 --> 00:32:56,170 seleccionar la super clase 715 00:32:56,170 --> 00:33:01,950 seleccionáis la super clase 716 00:33:01,950 --> 00:33:06,869 y ya te genera él, la llamada, el constructor de la super clase 717 00:33:06,869 --> 00:33:07,869 Con super, etc 718 00:33:07,869 --> 00:33:12,950 Vale, y luego get y set de las tres cosas que nos faltan 719 00:33:12,950 --> 00:33:20,859 Vale, ya tenemos el triángulo 720 00:33:20,859 --> 00:33:22,779 Pues lo mismo con el cuadrado 721 00:33:22,779 --> 00:33:36,309 Cuadrado solo añade una propiedad propia 722 00:33:36,309 --> 00:33:38,369 Que es la longitud del lado 723 00:33:38,369 --> 00:33:40,730 Como todos tienen la misma longitud 724 00:33:40,730 --> 00:33:43,549 Pues solo añade una propiedad propia 725 00:33:43,549 --> 00:33:47,049 Entonces, ponemos el constructor 726 00:33:47,049 --> 00:33:50,690 Ahí se me olvidó poner el extens 727 00:33:50,690 --> 00:33:53,910 El extens de figura geométrica 728 00:33:53,910 --> 00:34:04,079 y ahora ya si genero el constructor 729 00:34:04,079 --> 00:34:22,820 vale, y el getty set de la única propiedad que he añadido 730 00:34:22,820 --> 00:34:37,159 tenemos el cuadrado con sus particularidades 731 00:34:37,159 --> 00:34:39,980 y nos quedaría el círculo 732 00:34:39,980 --> 00:34:49,500 bueno, pues el círculo 733 00:34:49,500 --> 00:35:01,969 también hereda de figura geométrica y este añade 734 00:35:01,969 --> 00:35:05,309 el radio, estoy haciendo todo en int 735 00:35:05,309 --> 00:35:10,039 tendré que hacer el constructor específico 736 00:35:10,039 --> 00:35:11,820 para él porque los heredados 737 00:35:11,820 --> 00:35:12,599 no le valen 738 00:35:12,599 --> 00:35:18,539 hago el constructor apoyándome en el de arriba 739 00:35:18,539 --> 00:35:20,139 y el get y set para el nuevo 740 00:35:20,139 --> 00:35:34,239 ¡Hala! pues ya tenemos 741 00:35:34,239 --> 00:35:36,480 tres subclases de la superclase 742 00:35:36,480 --> 00:35:38,360 todas ellas tienen 743 00:35:38,360 --> 00:35:40,119 un nombre y un número de lados 744 00:35:40,119 --> 00:35:42,320 sus get, set y todo eso 745 00:35:42,320 --> 00:35:44,119 y luego cada una de ellas tiene algo propio 746 00:35:44,119 --> 00:35:45,219 bueno 747 00:35:45,219 --> 00:35:47,980 vale, luego aquí la aplicación 748 00:35:47,980 --> 00:35:52,019 ahora sigue 749 00:35:52,019 --> 00:35:53,639 haciendo la clase manejador de figuras 750 00:35:53,639 --> 00:35:55,500 manejador de cuadros, manejador de círculos 751 00:35:55,500 --> 00:35:57,639 que ahora hacemos 752 00:35:57,639 --> 00:35:58,340 ¿vale? 753 00:35:58,940 --> 00:36:00,739 pero, primera cosa que 754 00:36:00,739 --> 00:36:02,480 vamos a pensar 755 00:36:02,480 --> 00:36:05,519 entonces, se supone que 756 00:36:05,519 --> 00:36:07,500 esta aplicación es para 757 00:36:07,500 --> 00:36:09,619 calcular perímetros 758 00:36:09,619 --> 00:36:11,460 y áreas de 759 00:36:11,460 --> 00:36:12,840 figuras geométricas 760 00:36:12,840 --> 00:36:15,500 como triángulo, cuadrado y círculo 761 00:36:15,500 --> 00:36:17,019 y todas las que yo quiera incorporar 762 00:36:17,019 --> 00:36:19,639 vale, pero esas cosas 763 00:36:19,639 --> 00:36:21,360 que va a calcular como 764 00:36:21,360 --> 00:36:22,300 perímetros y áreas 765 00:36:22,300 --> 00:36:25,199 solo tiene sentido calcularlas 766 00:36:25,199 --> 00:36:29,440 sobre objetos, sobre figuras ya concretas 767 00:36:29,440 --> 00:36:31,320 como un triángulo, un cuadrado, un círculo 768 00:36:31,320 --> 00:36:34,519 es decir, figura geométrica es una superclase 769 00:36:34,519 --> 00:36:36,980 pero que no es nada en realidad 770 00:36:36,980 --> 00:36:39,980 una figura geométrica es un concepto 771 00:36:39,980 --> 00:36:41,820 pero no se puede concretar 772 00:36:41,820 --> 00:36:44,539 un triángulo si es así, tiene su perímetro, su área 773 00:36:44,539 --> 00:36:47,099 un círculo es así, tiene su perímetro, su área 774 00:36:47,099 --> 00:36:49,880 una figura geométrica es un concepto 775 00:36:49,880 --> 00:36:51,139 de alguna manera abstracto 776 00:36:51,139 --> 00:36:52,420 No se puede concretar. 777 00:36:53,920 --> 00:36:58,599 Luego, esta clase de aquí, 778 00:36:59,260 --> 00:37:01,280 esta clase de aquí es una clase de la cual, 779 00:37:02,219 --> 00:37:05,079 en principio ya prevemos que nunca vamos a instanciar objetos. 780 00:37:05,900 --> 00:37:07,980 No vamos a instanciar una figura geométrica, 781 00:37:08,099 --> 00:37:11,780 porque en mi aplicación no van a existir figuras geométricas. 782 00:37:11,780 --> 00:37:15,199 En mi aplicación van a existir círculos, cuadrados, triángulos, 783 00:37:15,280 --> 00:37:16,320 que son con los que trabajo. 784 00:37:17,039 --> 00:37:18,079 No van a existir figuras. 785 00:37:18,900 --> 00:37:20,679 En la aplicación anterior que hemos hecho, 786 00:37:20,679 --> 00:37:22,860 teníamos empleado 787 00:37:22,860 --> 00:37:24,659 de los cuales heredaban empleado 788 00:37:24,659 --> 00:37:26,420 temporal y gerente 789 00:37:26,420 --> 00:37:28,719 pero podíamos tener de los tres tipos 790 00:37:28,719 --> 00:37:30,559 podía haber objetos empleado 791 00:37:30,559 --> 00:37:31,780 podían existir 792 00:37:31,780 --> 00:37:34,500 existir empleados temporales y gerentes 793 00:37:34,500 --> 00:37:36,320 pero esta es una situación un poco distinta 794 00:37:36,320 --> 00:37:37,320 ya vemos que es distinta 795 00:37:37,320 --> 00:37:39,179 de la superclase 796 00:37:39,179 --> 00:37:41,960 la superclase es como una especie de conceptos 797 00:37:41,960 --> 00:37:44,699 una especie de plantilla que tiene lo básico 798 00:37:44,699 --> 00:37:46,659 pero de la superclase no van a existir objetos 799 00:37:46,659 --> 00:37:47,699 porque no existen 800 00:37:47,699 --> 00:37:50,400 figuras geométricas abstractas 801 00:37:50,400 --> 00:37:53,019 No existen en la realidad, no puedo ver una figura geométrica, 802 00:37:53,179 --> 00:37:55,219 puedo ver un triángulo, un cuadrado, una figura geométrica, 803 00:37:55,780 --> 00:37:57,920 necesito concretarla, necesito concretarla un poco más, 804 00:37:58,119 --> 00:37:59,199 no puedo verla, ¿vale? 805 00:38:00,199 --> 00:38:02,960 Vale, de hecho, por ejemplo, 806 00:38:03,440 --> 00:38:04,960 todas las figuras estas de aquí, 807 00:38:05,619 --> 00:38:07,320 triángulo, cuadrado, círculo, 808 00:38:08,099 --> 00:38:10,639 se va a poder obtener de ellas el perímetro, por ejemplo, ¿no? 809 00:38:11,260 --> 00:38:14,260 Entonces, imaginaos que queremos hacer 810 00:38:14,260 --> 00:38:16,440 un método perímetro 811 00:38:16,440 --> 00:38:19,239 para obtener los perímetros de estas figuras. 812 00:38:19,239 --> 00:38:21,039 entonces en triángulo 813 00:38:21,039 --> 00:38:22,699 necesitaríamos que hubiera un método perímetro 814 00:38:22,699 --> 00:38:25,039 en cuadrado necesitaríamos 815 00:38:25,039 --> 00:38:26,119 que hubiera un método perímetro 816 00:38:26,119 --> 00:38:27,940 y en círculo otro 817 00:38:27,940 --> 00:38:30,400 porque el perímetro de triángulo 818 00:38:30,400 --> 00:38:33,000 el de cuadrado y el de círculo se hacen de forma distinta 819 00:38:33,000 --> 00:38:34,480 vale 820 00:38:34,480 --> 00:38:37,079 entonces en las tres debería haber un método 821 00:38:37,079 --> 00:38:37,599 perímetro 822 00:38:37,599 --> 00:38:40,900 vale por ejemplo en la clase 823 00:38:40,900 --> 00:38:44,900 triángulo si 824 00:38:44,900 --> 00:38:47,480 nos 825 00:38:47,480 --> 00:38:48,739 hacemos un 826 00:38:48,739 --> 00:38:50,460 método 827 00:38:50,460 --> 00:38:55,380 perímetro para nuestra clase triángulo, pues ya sabemos 828 00:38:55,380 --> 00:38:59,179 que esta clase triángulo me devolvería como perímetro 829 00:38:59,179 --> 00:39:03,519 esto, lado 1 más lado 2 más 830 00:39:03,519 --> 00:39:07,199 lado 3, ¿vale? Sería esto simplemente, el método 831 00:39:07,199 --> 00:39:13,710 perímetro de la clase triángulo sería este, ¿verdad? Me devuelves 832 00:39:13,710 --> 00:39:17,769 la suma de los tres. El método perímetro de 833 00:39:17,769 --> 00:39:21,750 cuadrado, pues sería 834 00:39:21,750 --> 00:39:24,050 parecido, me devolvería 835 00:39:24,050 --> 00:39:25,889 lado 836 00:39:25,889 --> 00:39:27,550 multiplicado por 4 837 00:39:27,550 --> 00:39:29,869 eso es lo que me devolvería, el método 838 00:39:29,869 --> 00:39:31,250 perímetro de cuadrado 839 00:39:31,250 --> 00:39:33,489 lado por 4 840 00:39:33,489 --> 00:39:41,440 y el método perímetro de círculo 841 00:39:41,440 --> 00:39:45,159 ¿qué nos devolvería? 842 00:39:46,159 --> 00:39:47,280 pues 2 843 00:39:47,280 --> 00:39:49,139 por pi 844 00:39:49,139 --> 00:39:53,239 por 845 00:39:53,239 --> 00:39:55,219 el radio 846 00:39:55,219 --> 00:40:10,440 ¿vale? me sale en rojito 847 00:40:10,440 --> 00:40:12,420 ¿por qué? 848 00:40:12,920 --> 00:40:13,860 ¿por qué me sale en rojo? 849 00:40:16,869 --> 00:40:17,869 Por el pi, ¿qué más? 850 00:40:18,269 --> 00:40:19,389 Pero más, concreta más. 851 00:40:20,210 --> 00:40:22,389 La posibilidad que crea el número de decimales. 852 00:40:22,429 --> 00:40:25,070 Claro, porque pi es decimal. 853 00:40:25,489 --> 00:40:28,809 Entonces, cuando hacemos una operación entre decimales y enteros, 854 00:40:29,289 --> 00:40:32,150 se hace la promoción del entero al decimal, 855 00:40:32,389 --> 00:40:34,650 con lo cual el total se convierte en decimal. 856 00:40:35,510 --> 00:40:37,690 Luego este total se ha convertido en decimal, 857 00:40:38,690 --> 00:40:39,969 pero a mí me han dicho un entero. 858 00:40:40,309 --> 00:40:40,690 Pues no, casa. 859 00:40:40,969 --> 00:40:42,469 Bueno, pues si tiene que ser entero, 860 00:40:42,530 --> 00:40:44,449 porque tiene que ser entero, como yo estoy trabajando, 861 00:40:45,250 --> 00:40:46,130 pues no pasa nada. 862 00:40:46,130 --> 00:40:48,090 le hago un casting que me quita la parte decimal 863 00:40:48,090 --> 00:40:50,110 y apañado 864 00:40:50,110 --> 00:40:53,210 le hago un casting a todo 865 00:40:53,210 --> 00:40:56,369 le quito la parte decimal 866 00:40:56,369 --> 00:40:58,570 vale, pues entonces 867 00:40:58,570 --> 00:41:00,369 está claro que el método 868 00:41:00,369 --> 00:41:02,369 perímetro en cada clase tiene que ser distinto 869 00:41:02,369 --> 00:41:04,510 pero ahora 870 00:41:04,510 --> 00:41:06,090 entonces yo ya 871 00:41:06,090 --> 00:41:08,309 estoy perdiendo un poco las ventajas 872 00:41:08,309 --> 00:41:08,889 de la herencia 873 00:41:08,889 --> 00:41:12,309 he ganado la de no tener que escribir aquí 874 00:41:12,309 --> 00:41:13,929 nombre cada vez 875 00:41:13,929 --> 00:41:15,710 al hacer el instance, lo he ganado 876 00:41:15,710 --> 00:41:18,269 pero cuál era la verdadera y la importante 877 00:41:18,269 --> 00:41:21,110 que si yo quiero trabajar con muchas figuras geométricas 878 00:41:21,110 --> 00:41:22,889 pues las meto todas en una raíz 879 00:41:22,889 --> 00:41:24,750 y luego cada una de ellas puede ser 880 00:41:24,750 --> 00:41:26,909 círculo, cuadrado, me da igual porque todas serían de la misma 881 00:41:26,909 --> 00:41:28,889 pero claro 882 00:41:28,889 --> 00:41:30,809 como el método perímetro 883 00:41:30,809 --> 00:41:31,550 no está aquí 884 00:41:31,550 --> 00:41:34,590 porque la figura geométrica no tiene perímetro 885 00:41:34,590 --> 00:41:36,889 depende, depende de si es triángulo 886 00:41:36,889 --> 00:41:38,670 cuadrado, círculo, como no está aquí 887 00:41:38,670 --> 00:41:41,030 si ahora yo tuviera 888 00:41:41,030 --> 00:41:43,130 vamos a hacernos nuestro 889 00:41:43,130 --> 00:41:44,650 main de pruebas 890 00:41:44,650 --> 00:41:45,929 Para ver 891 00:41:45,929 --> 00:41:52,010 Main de pruebas aquí en el paquete 892 00:41:52,010 --> 00:41:54,889 Siempre se me olvida esto 893 00:41:54,889 --> 00:42:04,449 Vale 894 00:42:04,449 --> 00:42:07,429 Imaginaos que yo ahora voy a trabajar 895 00:42:07,429 --> 00:42:09,610 Con un montón de figuras geométricas 896 00:42:09,610 --> 00:42:12,469 Con lo cual lo meto en un array 897 00:42:12,469 --> 00:42:25,719 Aquí voy a meter todas mis figuras 898 00:42:25,719 --> 00:42:30,289 Por ejemplo 899 00:42:30,289 --> 00:42:31,869 Supongo que metemos dos 900 00:42:31,869 --> 00:42:35,190 Dos figuritas 901 00:42:35,190 --> 00:42:38,980 En la primera posición 902 00:42:38,980 --> 00:42:41,239 Voy a poner 903 00:42:41,239 --> 00:42:45,639 En figuras de 0 voy a meter un círculo 904 00:42:45,639 --> 00:42:57,760 Que se llama mi círculo 905 00:42:57,760 --> 00:43:01,119 Número de lado 0 porque es un círculo 906 00:43:01,119 --> 00:43:02,380 Y radio 4 907 00:43:02,380 --> 00:43:08,170 Y ahora en figuras de 1 voy a meter pues un cuadrado 908 00:43:08,170 --> 00:43:09,309 Por ejemplo 909 00:43:09,309 --> 00:43:24,519 Mi cuadrado, número de lados, pues 4 910 00:43:24,519 --> 00:43:29,619 Y lado del cuadrado, venga, que sea 6 911 00:43:29,619 --> 00:43:36,929 bueno, pues entonces 912 00:43:36,929 --> 00:43:39,449 aquí tengo un main concreto 913 00:43:39,449 --> 00:43:41,269 particular, un main concreto que tiene 914 00:43:41,269 --> 00:43:42,329 dos figuras 915 00:43:42,329 --> 00:43:45,329 entonces las he metido las dos en mi array de figuras 916 00:43:45,329 --> 00:43:47,690 y ahora yo ya puedo trabajar con ese array 917 00:43:47,690 --> 00:43:49,610 en conjunto, pero claro, si yo quiero 918 00:43:49,610 --> 00:43:51,570 mostrar los perímetros, pues ya sabemos 919 00:43:51,570 --> 00:43:53,929 ya avanzamos 920 00:43:53,929 --> 00:43:54,670 lo que nos va a pasar 921 00:43:54,670 --> 00:43:57,329 en el figura de abajo 922 00:43:57,329 --> 00:43:59,670 en la posición debería 923 00:43:59,670 --> 00:44:00,469 poner un nombre 924 00:44:00,469 --> 00:44:02,889 ay, perdón, sí, sí, sí, en la posición 925 00:44:02,889 --> 00:44:04,289 es que he hecho copia y pega, sí 926 00:44:04,289 --> 00:44:08,840 vale, pues si yo ahora recorro 927 00:44:08,840 --> 00:44:11,340 cada una de mis figuras geométricas 928 00:44:11,340 --> 00:44:12,679 que están en mi array 929 00:44:12,679 --> 00:44:15,219 para calcular el peri 930 00:44:15,219 --> 00:44:17,519 para que me muestre el perímetro de todas ellas 931 00:44:17,519 --> 00:44:19,400 pues efectivamente 932 00:44:19,400 --> 00:44:20,940 tengo el problema que ya prevemos 933 00:44:20,940 --> 00:44:23,039 que no tengo el método 934 00:44:23,039 --> 00:44:29,579 perímetro, vale, no lo tengo 935 00:44:29,579 --> 00:44:31,619 entonces 936 00:44:31,619 --> 00:44:33,039 lo de la herencia ha sido imprescindible 937 00:44:33,039 --> 00:44:35,559 porque si yo no puedo meter todas las figuras 938 00:44:35,559 --> 00:44:36,440 en un solo array 939 00:44:36,440 --> 00:44:39,400 y aquí tengo dos, pero si tengo tres mil 940 00:44:39,400 --> 00:44:42,539 pues no voy a trabajar con 941 00:44:42,539 --> 00:44:44,559 3000 referencias distintas 942 00:44:44,559 --> 00:44:45,599 tienen que ir todas a un array 943 00:44:45,599 --> 00:44:47,960 pero que ocurre 944 00:44:47,960 --> 00:44:50,460 que yo en la clase figura geométrica 945 00:44:50,460 --> 00:44:52,239 no he metido la propiedad 946 00:44:52,239 --> 00:44:54,380 perímetro porque aquí no tiene sentido 947 00:44:54,380 --> 00:44:56,340 porque la figura geométrica 948 00:44:56,340 --> 00:44:58,460 no tiene una forma de definir 949 00:44:58,460 --> 00:44:59,119 su perímetro 950 00:44:59,119 --> 00:45:01,360 depende de que tipo sea 951 00:45:01,360 --> 00:45:03,400 entonces el momento de definirlo es aquí abajo 952 00:45:03,400 --> 00:45:05,079 vale 953 00:45:05,079 --> 00:45:07,980 pero claro el compilador ya sabemos 954 00:45:07,980 --> 00:45:09,579 por enesísima vez 955 00:45:09,579 --> 00:45:12,039 ya sabemos que el compilador dice 956 00:45:12,039 --> 00:45:13,639 ¿de qué clase es esta referencia? 957 00:45:13,760 --> 00:45:16,039 figura geométrica, voy a verificar que en figura 958 00:45:16,039 --> 00:45:17,860 geométrica hay un método 959 00:45:17,860 --> 00:45:20,179 perímetro, uy no lo hay, pues no te dejo seguir 960 00:45:20,179 --> 00:45:22,219 vale, entonces en figura 961 00:45:22,219 --> 00:45:24,099 geométrica debería haber un metro perímetro 962 00:45:24,099 --> 00:45:25,360 porque si no, no hacemos nada 963 00:45:25,360 --> 00:45:29,380 entonces en figura geométrica hay que hacer 964 00:45:29,380 --> 00:45:30,320 un método perímetro 965 00:45:30,320 --> 00:45:36,539 perímetro 966 00:45:36,539 --> 00:45:39,480 y 967 00:45:39,480 --> 00:45:41,659 vacío 968 00:45:41,659 --> 00:45:43,579 vacío no lo puedo dejar 969 00:45:43,579 --> 00:45:46,139 porque tiene que devolver un int 970 00:45:46,139 --> 00:45:48,280 pues al menos tiene que hacer un retun 971 00:45:48,280 --> 00:45:49,360 porque devuelve int 972 00:45:49,360 --> 00:45:52,300 luego un retun al menos tiene que tener 973 00:45:52,300 --> 00:45:54,039 entonces 974 00:45:54,039 --> 00:45:55,820 vale, si yo lo dejo así 975 00:45:55,820 --> 00:45:57,360 esto ya funciona y casa 976 00:45:57,360 --> 00:45:59,980 porque ahora ya, ya sabemos 977 00:45:59,980 --> 00:46:02,000 que la máquina virtual no es el compilador 978 00:46:02,000 --> 00:46:04,260 entonces la máquina virtual 979 00:46:04,260 --> 00:46:06,079 cuando vea esto 980 00:46:06,079 --> 00:46:07,480 va a decir, oye FG 981 00:46:07,480 --> 00:46:09,139 ¿cómo te instanciaste? 982 00:46:09,139 --> 00:46:11,659 como círculo, pues llamo al perímetro 983 00:46:11,659 --> 00:46:13,739 de círculo, que es el 984 00:46:13,739 --> 00:46:15,599 bueno, oye tú 985 00:46:15,599 --> 00:46:17,840 FG, ¿cómo te instanciaste? como cuadrado 986 00:46:17,840 --> 00:46:19,480 pues llamo al perímetro de cuadrado 987 00:46:19,480 --> 00:46:21,920 que es el bueno, es decir, a este no le va a llamar 988 00:46:21,920 --> 00:46:23,340 nadie 989 00:46:23,340 --> 00:46:25,599 no le va a llamar, pero lo hemos tenido 990 00:46:25,599 --> 00:46:27,420 que hacer, porque si no el compilador se calla 991 00:46:27,420 --> 00:46:30,179 pero, esta solución 992 00:46:30,179 --> 00:46:33,679 tampoco nos gusta, porque estamos metiendo ahí 993 00:46:33,679 --> 00:46:34,579 un retún cero 994 00:46:34,579 --> 00:46:37,559 que es que el mensaje que transmites 995 00:46:37,559 --> 00:46:38,920 oye, todas las figuras del mundo 996 00:46:38,920 --> 00:46:40,260 su perímetro es 0 997 00:46:40,260 --> 00:46:41,880 porque algo hemos tenido que poner 998 00:46:41,880 --> 00:46:44,519 como si pongo esto, algo he tenido que poner 999 00:46:44,519 --> 00:46:47,260 para que se calle, entonces eso ya es feo 1000 00:46:47,260 --> 00:46:48,639 la idea que transmite 1001 00:46:48,639 --> 00:46:50,860 y de hecho puede tener efectos 1002 00:46:50,860 --> 00:46:53,079 secundarios peligrosos 1003 00:46:53,079 --> 00:46:55,019 porque tú haces de repente 1004 00:46:55,019 --> 00:46:56,179 ahora un pentágono 1005 00:46:56,179 --> 00:46:59,380 y se te olvida sobre escribir 1006 00:46:59,380 --> 00:47:01,000 la clase perímetro, se te olvida 1007 00:47:01,000 --> 00:47:03,199 cuando ahora metas 1008 00:47:03,199 --> 00:47:05,039 aquí la llamada 1009 00:47:05,039 --> 00:47:06,500 perímetro de pentágono 1010 00:47:06,500 --> 00:47:10,000 te va a devolver esta que te va a devolver cero. 1011 00:47:11,139 --> 00:47:14,460 Entonces, la aplicación va a funcionar. 1012 00:47:14,519 --> 00:47:18,900 El usuario se puede creer que el perímetro de ese pentágono es cero. 1013 00:47:18,900 --> 00:47:23,099 Y no, lo que pasa es que el desarrollador no hizo el método perímetro. 1014 00:47:24,139 --> 00:47:28,900 Luego, el tener que hacer aquí uno con un contenido absurdo, 1015 00:47:30,039 --> 00:47:32,320 aparte de feo, puede tener ese efecto. 1016 00:47:33,159 --> 00:47:35,780 Luego, ¿qué es lo que se hace en una situación como esta? 1017 00:47:36,500 --> 00:47:39,880 en la cual la superclase nunca va a ser instanciada. 1018 00:47:41,559 --> 00:47:43,280 Pues entonces, nosotros decimos, 1019 00:47:43,420 --> 00:47:47,699 oye, este método realmente lo que yo ponga aquí es un invento, 1020 00:47:47,800 --> 00:47:49,460 no vale para nada, no vale para nada. 1021 00:47:49,940 --> 00:47:51,119 Entonces no voy a poner nada 1022 00:47:51,119 --> 00:47:53,460 y lo voy a cerrar aquí con punto y coma. 1023 00:47:54,340 --> 00:47:56,219 Que es la primera vez en la vida 1024 00:47:56,219 --> 00:47:59,619 que después de un método, en lugar de abrir con llaves 1025 00:47:59,619 --> 00:48:01,340 y por el código que sea, cerramos con punto y coma. 1026 00:48:02,139 --> 00:48:03,320 Vale, pues podemos hacerlo. 1027 00:48:04,260 --> 00:48:05,579 Cuando lo cerramos con punto y coma, 1028 00:48:05,579 --> 00:48:09,579 lo que estamos diciendo es que ese método es abstracto. 1029 00:48:10,719 --> 00:48:27,480 Es decir, que está por definir, está por definir o por implementar. 1030 00:48:28,280 --> 00:48:29,360 Es una palabra más bonita. 1031 00:48:30,460 --> 00:48:32,380 Vale, justo. 1032 00:48:33,000 --> 00:48:40,800 Si el método es abstracto, estoy obligada a ponerle un abstracto, ¿vale? 1033 00:48:41,420 --> 00:48:42,760 Para indicarlo ahí. 1034 00:48:46,059 --> 00:48:46,239 Vale. 1035 00:48:46,239 --> 00:48:48,639 entonces, este método significa 1036 00:48:48,639 --> 00:48:50,880 que está por implementar 1037 00:48:50,880 --> 00:48:51,340 ¿qué? 1038 00:48:51,340 --> 00:48:53,300 esto también lo podríamos hacer con lo de cliente 1039 00:48:53,300 --> 00:48:54,480 y cliente tienda y cliente online 1040 00:48:54,480 --> 00:48:57,199 sí, claro 1041 00:48:57,199 --> 00:48:59,699 si nunca más, si no va a haber clientes 1042 00:48:59,699 --> 00:49:01,179 solos, solamente va a haber cliente tienda 1043 00:49:01,179 --> 00:49:01,980 y cliente online sí 1044 00:49:01,980 --> 00:49:05,199 bueno, pues entonces 1045 00:49:05,199 --> 00:49:07,320 este método está por 1046 00:49:07,320 --> 00:49:09,019 implementar, luego 1047 00:49:09,019 --> 00:49:11,280 lo hemos convertido en abstracto y para ello 1048 00:49:11,280 --> 00:49:13,280 aparte de cerrarse con punto y coma hay que poner aquí 1049 00:49:13,280 --> 00:49:15,300 el abstracto, ahora ¿qué ha pasado? 1050 00:49:16,239 --> 00:49:21,900 Pues desde el momento en que una clase tiene al menos un método abstracto, al menos uno, 1051 00:49:22,920 --> 00:49:25,639 la clase se convierte en clase abstracta. 1052 00:49:28,070 --> 00:49:29,969 Y convertirse en clase abstracta, ¿qué implica? 1053 00:49:30,389 --> 00:49:35,710 Que para que el compilador se calle y todo encaja, estamos obligados a poner aquí abstracto. 1054 00:49:37,130 --> 00:49:37,610 ¿Vale? 1055 00:49:39,449 --> 00:49:40,789 Sí, te lo pide seguro. 1056 00:49:41,949 --> 00:49:42,429 Vale. 1057 00:49:43,349 --> 00:49:44,710 Pues esto es una clase abstracta. 1058 00:49:44,710 --> 00:50:01,929 abstracta, clase abstracta, y ahora ya paramos un momentín, clase que tiene al menos un método abstracto, ¿vale? 1059 00:50:02,929 --> 00:50:17,880 De esa clase no se pueden instanciar objetos, desde el momento en que la ha convertido en abstracta 1060 00:50:17,880 --> 00:50:19,760 No se pueden instanciar objetos 1061 00:50:19,760 --> 00:50:21,599 Nada 1062 00:50:21,599 --> 00:50:24,099 Yo antes cuando no era abstracta 1063 00:50:24,099 --> 00:50:26,519 Podía haber hecho aquí un new figura geométrica 1064 00:50:26,519 --> 00:50:28,559 Y no habría pasado nada 1065 00:50:28,559 --> 00:50:30,039 New figura geométrica 1066 00:50:30,039 --> 00:50:31,280 Con su nombre y número de lados 1067 00:50:31,280 --> 00:50:33,420 Bueno tengo una figura geométrica 1068 00:50:33,420 --> 00:50:37,639 Podría haberlo instanciado 1069 00:50:37,639 --> 00:50:39,980 Pero si yo la hago abstracta 1070 00:50:39,980 --> 00:50:42,920 Ya no se puede instanciar 1071 00:50:42,920 --> 00:50:45,260 Si yo pretendiera aquí hacer esto 1072 00:50:45,260 --> 00:51:09,960 Esto con lo que fuera 1073 00:51:09,960 --> 00:51:12,940 el nombrecito que fuera y su número de lados 1074 00:51:12,940 --> 00:51:14,460 lo que me pida el constructor 1075 00:51:14,460 --> 00:51:17,420 pues no me deja, me deja 1076 00:51:17,420 --> 00:51:21,559 oye cuidado la clase es abstracta 1077 00:51:21,559 --> 00:51:23,460 luego no puedes instanciar esta clase 1078 00:51:23,460 --> 00:51:25,039 no puedes porque es abstracta 1079 00:51:25,039 --> 00:51:27,920 si yo no lo hubiera hecho como abstracta 1080 00:51:27,920 --> 00:51:31,260 es decir, esto en lugar de haberlo hecho así 1081 00:51:31,260 --> 00:51:34,139 hubiera optado por la otra opción que he dicho 1082 00:51:34,139 --> 00:51:36,420 dejar el método aquí vacío 1083 00:51:36,420 --> 00:51:38,500 o con un retún cualquiera 1084 00:51:38,500 --> 00:51:42,300 podría haber optado por este diseño 1085 00:51:42,300 --> 00:51:44,679 y si yo soy cuidadosa en todo lo que hago 1086 00:51:44,679 --> 00:51:46,519 y me acuerdo de sobre escribir 1087 00:51:46,519 --> 00:51:47,780 ahora bien los métodos perímetro 1088 00:51:47,780 --> 00:51:49,980 me acuerdo de hacerlo todo bien, la aplicación va a funcionar igual 1089 00:51:49,980 --> 00:51:52,260 pero aparte de que el diseño 1090 00:51:52,260 --> 00:51:54,159 es más feo, transmite un mensaje feo 1091 00:51:54,159 --> 00:51:55,820 y es que una figura geométrica abstracta 1092 00:51:55,820 --> 00:51:57,460 tiene un perímetro que es 7, pues no es mentira 1093 00:51:57,460 --> 00:51:59,260 pues aparte de eso 1094 00:51:59,260 --> 00:52:01,099 le doy la opción 1095 00:52:01,099 --> 00:52:02,940 al universo 1096 00:52:02,940 --> 00:52:05,380 de instanciar figuras geométricas 1097 00:52:05,380 --> 00:52:07,340 y eso no debería ser 1098 00:52:07,340 --> 00:52:09,380 porque eso no tiene sentido 1099 00:52:09,380 --> 00:52:12,000 una figura geométrica no se puede instanciar 1100 00:52:12,000 --> 00:52:13,719 se puede instanciar un cuadrado, un círculo 1101 00:52:13,719 --> 00:52:14,940 una figura geométrica que es 1102 00:52:14,940 --> 00:52:17,579 no es nada, no la puedo instanciar, no es real 1103 00:52:17,579 --> 00:52:18,420 no la puedo instanciar 1104 00:52:18,420 --> 00:52:21,639 luego, el diseño 1105 00:52:21,639 --> 00:52:23,480 es mucho más bonito 1106 00:52:23,480 --> 00:52:25,840 si yo identifico todo eso 1107 00:52:25,840 --> 00:52:28,019 que describe mejor mi situación 1108 00:52:28,019 --> 00:52:30,000 y digo, oye, este método está por definir 1109 00:52:30,000 --> 00:52:32,119 no tiene sentido que yo aquí lo defina 1110 00:52:32,119 --> 00:52:33,659 de cualquier manera 1111 00:52:33,659 --> 00:52:36,000 a la espera de que me sobrescriba, no tiene sentido 1112 00:52:36,000 --> 00:52:38,559 punto y coma, este queda por definir 1113 00:52:38,559 --> 00:52:39,920 le pongo el abstract 1114 00:52:39,920 --> 00:52:43,099 y ahora ya al haberle puesto el abstract 1115 00:52:43,099 --> 00:52:45,019 mi clase se convierte en abstract 1116 00:52:45,019 --> 00:52:47,599 y no pasa nada 1117 00:52:47,599 --> 00:52:49,400 acabo de prohibir 1118 00:52:49,400 --> 00:52:50,920 que me instancien 1119 00:52:50,920 --> 00:52:52,599 acabo de prohibir que me instancien 1120 00:52:52,599 --> 00:52:54,679 ya esto imposible, no me pueden instanciar 1121 00:52:54,679 --> 00:52:57,219 y aparte 1122 00:52:57,219 --> 00:52:59,000 he ganado algo más que lo decimos después 1123 00:52:59,000 --> 00:53:00,219 vale 1124 00:53:00,219 --> 00:53:01,099 me