1 00:00:00,050 --> 00:00:03,930 vale pues reconectemos 2 00:00:03,930 --> 00:00:05,750 en que estábamos 3 00:00:05,750 --> 00:00:08,369 que nos habíamos dado cuenta de 4 00:00:08,369 --> 00:00:10,710 que nunca íbamos a instanciar 5 00:00:10,710 --> 00:00:11,730 figuras geométricas 6 00:00:11,730 --> 00:00:14,470 pero el método perímetro tiene que estar 7 00:00:14,470 --> 00:00:16,329 el método perímetro 8 00:00:16,329 --> 00:00:17,390 tiene que estar aquí 9 00:00:17,390 --> 00:00:20,510 porque como el método perímetro 10 00:00:20,510 --> 00:00:21,489 no esté aquí 11 00:00:21,489 --> 00:00:24,210 el compilador no me deja seguir 12 00:00:24,210 --> 00:00:24,489 vale 13 00:00:24,489 --> 00:00:26,989 vale 14 00:00:26,989 --> 00:00:29,489 el método perímetro tiene que estar 15 00:00:29,489 --> 00:00:33,710 Pero como no tiene sentido implementar ahí nada, abstracto. 16 00:00:34,409 --> 00:00:36,289 Luego la clase se vuelve abstracta. 17 00:00:36,929 --> 00:00:37,950 ¿Es un problema? 18 00:00:38,310 --> 00:00:43,390 Es un problema si quisiéramos instanciar figuras geométricas en mi aplicación. 19 00:00:43,929 --> 00:00:46,409 ¿Vamos a querer instanciar figuras geométricas en la aplicación? 20 00:00:46,530 --> 00:00:48,070 No, pues entonces no es un problema. 21 00:00:49,229 --> 00:00:53,409 Luego, figura geométrica nos sirve como una especie de plantilla, 22 00:00:53,850 --> 00:00:55,549 porque no se van a crear objetos de ella. 23 00:00:55,549 --> 00:00:58,049 de plantilla que nos dice 24 00:00:58,049 --> 00:01:00,109 oye, las figuras geométricas van a tener 25 00:01:00,109 --> 00:01:01,590 nombre, número de lados 26 00:01:01,590 --> 00:01:04,170 estos métodos, además nos ofrece 27 00:01:04,170 --> 00:01:05,709 constructores como este 28 00:01:05,709 --> 00:01:08,530 y diríais, ¿qué sentido tiene un constructor 29 00:01:08,530 --> 00:01:10,370 en una clase de la que nunca se van a instanciar 30 00:01:10,370 --> 00:01:10,709 objetos? 31 00:01:11,870 --> 00:01:13,109 Pues el único sentido que tiene 32 00:01:13,109 --> 00:01:16,269 es facilitarnos la construcción 33 00:01:16,269 --> 00:01:18,209 de los constructores de las 34 00:01:18,209 --> 00:01:20,209 subclases pudiendo 35 00:01:20,209 --> 00:01:21,069 llamar yo al super 36 00:01:21,069 --> 00:01:24,129 porque con el super llama al constructor 37 00:01:24,129 --> 00:01:25,109 de la superclase 38 00:01:25,109 --> 00:01:27,430 luego ese constructor no la voy a usar 39 00:01:27,430 --> 00:01:29,209 para instanciar objetos 40 00:01:29,209 --> 00:01:30,170 figura geométrica 41 00:01:30,170 --> 00:01:32,150 pero lo estoy llamando desde aquí abajo 42 00:01:32,150 --> 00:01:34,709 cuando instanciar haya triángulos 43 00:01:34,709 --> 00:01:37,109 luego me está ayudando para construir 44 00:01:37,109 --> 00:01:38,329 código más fácil 45 00:01:38,329 --> 00:01:41,049 ¿vale? y sobre todo he ganado 46 00:01:41,049 --> 00:01:41,709 lo siguiente 47 00:01:41,709 --> 00:01:45,230 esto sí que es lo bueno y lo que he ganado 48 00:01:45,230 --> 00:01:47,109 no sólo que ya 49 00:01:47,109 --> 00:01:49,010 prohíbo que alguien por error 50 00:01:49,010 --> 00:01:51,170 instancie una figura geométrica 51 00:01:51,170 --> 00:01:52,909 ya por error 52 00:01:52,909 --> 00:01:54,569 nadie lo va a poder instanciar en la aplicación 53 00:01:54,569 --> 00:01:56,150 Porque es abstracta, sino lo siguiente 54 00:01:56,150 --> 00:01:58,170 Ah, la aplicación se amplía 55 00:01:58,170 --> 00:02:00,109 Y ahora ya resulta que 56 00:02:00,109 --> 00:02:02,590 Ah, vamos a empezar a trabajar con pentágonos 57 00:02:02,590 --> 00:02:04,930 Venga, pues vamos a meter un pentágono 58 00:02:04,930 --> 00:02:13,900 Ala 59 00:02:13,900 --> 00:02:16,599 Vamos a meter un pentágono 60 00:02:17,539 --> 00:02:18,919 Como un pentágono 61 00:02:18,919 --> 00:02:20,400 Es una figura geométrica 62 00:02:20,400 --> 00:02:22,599 Pues lo haríamos heredar de figura geométrica 63 00:02:23,259 --> 00:02:25,719 ¿Vale? 64 00:02:26,259 --> 00:02:27,719 Vamos a hacerle el constructor 65 00:02:27,719 --> 00:02:28,639 Antes que nada 66 00:02:28,639 --> 00:02:30,800 Para que 67 00:02:30,800 --> 00:02:36,680 el error del constructor no nos lo dé 68 00:02:36,680 --> 00:02:39,680 venga, tiene el constructor 69 00:02:39,680 --> 00:02:42,759 como no le he puesto propiedades adicionales 70 00:02:42,759 --> 00:02:44,400 el constructor lo único que haría 71 00:02:44,400 --> 00:02:46,099 sería llamarle la superclase y ya está 72 00:02:46,099 --> 00:02:47,000 yo aquí le pondría 73 00:02:47,000 --> 00:02:50,199 las propiedades de pentágono que serían el lado 74 00:02:50,199 --> 00:02:52,159 o los cinco lados 75 00:02:52,159 --> 00:02:53,960 si es un pentágono irregular 76 00:02:53,960 --> 00:02:56,319 yo qué sé, aunque el pentágono 77 00:02:56,319 --> 00:02:58,159 siempre es un polígono regular, creo 78 00:02:58,159 --> 00:02:58,780 por definir 79 00:02:58,780 --> 00:03:02,280 porque si no sería un polígono de cinco lados 80 00:03:02,280 --> 00:03:06,900 Sí, pero que tú puedes construir un pentágono 81 00:03:06,900 --> 00:03:08,439 Irregular, ¿verdad? 82 00:03:08,560 --> 00:03:10,400 O sea, físicamente puedes, igual que un triángulo 83 00:03:10,400 --> 00:03:11,599 Puedes construir un triángulo irregular 84 00:03:11,599 --> 00:03:14,719 Pero creo que pentágono se refiere a que tengan los mismos lados 85 00:03:14,719 --> 00:03:16,180 Si no, diríamos un polígono 86 00:03:16,180 --> 00:03:17,219 ¿No? Me imagino 87 00:03:17,219 --> 00:03:20,199 Polígono de cinco lados, diríamos 88 00:03:20,199 --> 00:03:22,060 Bueno, da igual, a lo que vamos 89 00:03:22,060 --> 00:03:24,340 Y esto es lo que ya he ganado 90 00:03:24,340 --> 00:03:25,960 Que esto sí que es lo mejor del mundo 91 00:03:25,960 --> 00:03:28,139 Yo he hecho la clase pentágono 92 00:03:28,139 --> 00:03:30,099 Porque estoy ampliando mi aplicación 93 00:03:30,099 --> 00:03:32,080 Y le digo 94 00:03:32,080 --> 00:03:33,180 cómo va a ser figura geométrica 95 00:03:33,180 --> 00:03:36,520 y se me pone en rojo 96 00:03:36,520 --> 00:03:38,699 y que me dice el compilador 97 00:03:38,699 --> 00:03:39,620 me dice 98 00:03:39,620 --> 00:03:40,919 haz el favor 99 00:03:40,919 --> 00:03:43,599 si tú que te has incorporado 100 00:03:43,599 --> 00:03:45,479 aquí a la pandilla de figuras 101 00:03:45,479 --> 00:03:47,560 si te has incorporado a la pandilla de figuras 102 00:03:47,560 --> 00:03:49,139 quieres ser figura geométrica 103 00:03:49,139 --> 00:03:51,240 lo siento mucho 104 00:03:51,240 --> 00:03:54,099 pero tienes que concretar 105 00:03:54,099 --> 00:03:55,840 lo que es abstracto 106 00:03:55,840 --> 00:03:58,139 todo lo que sea abstracto lo tienes que concretar 107 00:03:58,139 --> 00:04:00,419 antes no 108 00:04:00,419 --> 00:04:03,039 cuando yo había optado por la otra opción 109 00:04:03,039 --> 00:04:04,840 y yo había 110 00:04:04,840 --> 00:04:06,740 dicho, venga, no, perímetro no tengo 111 00:04:06,740 --> 00:04:08,580 ni idea, pero me obligan a hacerlo para que el 112 00:04:08,580 --> 00:04:10,659 compilador se calle, pues hago cualquier cosa 113 00:04:10,659 --> 00:04:12,520 y ya está, y sigo, y no pasa nada porque lo voy a 114 00:04:12,520 --> 00:04:14,819 sobrescribir, pues en este 115 00:04:14,819 --> 00:04:17,079 caso, cuando yo ampliaba 116 00:04:17,079 --> 00:04:18,860 toda mi pandilla de figuras 117 00:04:18,860 --> 00:04:20,639 con el pentágono, hacía 118 00:04:20,639 --> 00:04:22,120 stents y no pasaba nada 119 00:04:22,120 --> 00:04:24,519 ¿qué ocurre? que a mí se me olvida 120 00:04:24,519 --> 00:04:26,779 hacer perímetro y cuando luego 121 00:04:26,779 --> 00:04:28,660 alguien desde otra clase, otro 122 00:04:28,660 --> 00:04:29,819 desarrollador, llama 123 00:04:29,819 --> 00:04:31,720 al objeto pentágono 124 00:04:31,720 --> 00:04:33,740 punto perímetro, como a mí se me ha olvidado hacerlo 125 00:04:33,740 --> 00:04:35,699 no pasa nada, toda la aplicación funciona 126 00:04:35,699 --> 00:04:37,620 y todo estupendo, pero va a llamar a este 127 00:04:37,620 --> 00:04:39,860 retun9, y estupendo 128 00:04:39,860 --> 00:04:41,779 el usuario se cree que será 129 00:04:41,779 --> 00:04:43,579 ah, es que será un pentágono 130 00:04:43,579 --> 00:04:45,560 de perímetro 9, pues no es un pentágono de 131 00:04:45,560 --> 00:04:47,699 perímetro 9, lo que pasa es que el que hizo 132 00:04:47,699 --> 00:04:50,079 la clase pentágono no lo sobrescribió 133 00:04:50,079 --> 00:04:51,819 y está estirando el de arriba 134 00:04:51,819 --> 00:04:53,699 bueno, pues con la otra 135 00:04:53,699 --> 00:04:57,850 opción de diseño, al 136 00:04:57,850 --> 00:04:59,689 hacerlo abstracto, decimos 137 00:04:59,689 --> 00:05:01,889 ojo, todo el 138 00:05:01,889 --> 00:05:03,930 que herede de mí, va a tener que 139 00:05:03,930 --> 00:05:05,970 obligatoriamente implementar 140 00:05:05,970 --> 00:05:07,250 esto, porque yo le he dejado 141 00:05:07,250 --> 00:05:09,790 a medias 142 00:05:09,790 --> 00:05:11,970 con el punto y con. 143 00:05:12,850 --> 00:05:14,089 Entonces, tú, pentágono, 144 00:05:14,170 --> 00:05:15,689 que te incorporas a la pandilla de figuras 145 00:05:15,689 --> 00:05:17,870 geométricas y quieres 146 00:05:17,870 --> 00:05:19,889 ser figura geométrica, pues 147 00:05:19,889 --> 00:05:21,930 lo siento, estás obligado. Entonces, ya 148 00:05:21,930 --> 00:05:23,870 si es que yo no era consciente, 149 00:05:24,889 --> 00:05:25,850 el compilador me lo 150 00:05:25,850 --> 00:05:27,790 dice, me dice, ah, espérate, yo estoy hablando 151 00:05:27,790 --> 00:05:29,649 de figura geométrica. Figura geométrica la ha hecho 152 00:05:29,649 --> 00:05:31,250 otro desarrollador que tiene que ver conmigo. 153 00:05:31,250 --> 00:05:33,930 dice, ojo, si quiero entrar a formar 154 00:05:33,930 --> 00:05:34,990 parte de la aplicación 155 00:05:34,990 --> 00:05:37,629 tengo que dar una versión de perímetro 156 00:05:37,629 --> 00:05:39,750 ¿vale? pues como estoy 157 00:05:39,750 --> 00:05:41,149 obligado es que no puedo seguir 158 00:05:41,149 --> 00:05:43,529 no puedo seguir hasta que no la sobrescriba 159 00:05:43,529 --> 00:05:45,829 y yo aquí ya la sobrescribo 160 00:05:45,829 --> 00:05:47,649 y ya hago lo que sea, bueno, si el pentágono 161 00:05:47,649 --> 00:05:48,910 tiene su propiedad al lado 162 00:05:48,910 --> 00:05:57,060 pues aquí sería retunlado por 5 163 00:05:57,060 --> 00:06:06,029 y ya está, el override 164 00:06:06,029 --> 00:06:07,949 este lo podemos quitar, recordad que significa 165 00:06:07,949 --> 00:06:10,209 que este método sobrescribe una de las superclases 166 00:06:10,209 --> 00:06:10,730 pero 167 00:06:10,730 --> 00:06:13,209 vale, entonces 168 00:06:13,209 --> 00:06:15,009 ha sido obligatorio 169 00:06:15,009 --> 00:06:16,569 ponerlo, no he podido seguir 170 00:06:16,569 --> 00:06:18,569 porque tenía errores de compilación, si no lo pongo 171 00:06:18,569 --> 00:06:22,899 y esa es la principal ventaja de las clases 172 00:06:22,899 --> 00:06:24,220 abstractas, primero 173 00:06:24,220 --> 00:06:26,819 dar una estructura jerárquica a mis 174 00:06:26,819 --> 00:06:28,819 aplicaciones, unificar todo 175 00:06:28,819 --> 00:06:30,279 lo que comparte 176 00:06:30,279 --> 00:06:33,100 esencia, todo lo que comparte 177 00:06:33,100 --> 00:06:35,000 lo hago heredar de lo mismo y así ya comparten 178 00:06:35,000 --> 00:06:36,800 información común, y eso 179 00:06:36,800 --> 00:06:39,199 permite que puedan entrar en referencias comunes 180 00:06:39,199 --> 00:06:40,779 en arrays comunes, en todo común 181 00:06:40,779 --> 00:06:41,959 porque comparten esa esencia 182 00:06:41,959 --> 00:06:45,339 y luego aparte, si son abstractas 183 00:06:45,339 --> 00:06:48,699 hacen una especie de compromiso 184 00:06:48,699 --> 00:06:51,379 y decir, vale, muy bien 185 00:06:51,379 --> 00:06:54,420 tú vas a heredar de aquí, vas a entrar a formar parte de esto 186 00:06:54,420 --> 00:06:57,860 pues te obligo a que lo hagas 187 00:06:57,860 --> 00:07:00,139 con todas las consecuencias, que es 188 00:07:00,139 --> 00:07:03,540 dándole un cuerpo a perímetro y a todo lo que haya abstracto 189 00:07:03,540 --> 00:07:05,180 que podría haber aquí más métodos abstractos 190 00:07:05,180 --> 00:07:09,439 aquí tendría sentido que hubiera además otro método abstracto 191 00:07:09,439 --> 00:07:14,819 para el área, y lo mismo 192 00:07:14,819 --> 00:07:18,600 todo el que quiera ser figura geométrica 193 00:07:18,600 --> 00:07:21,240 el que hace la aplicación figura geométrica 194 00:07:21,240 --> 00:07:22,860 dice, vale, yo hago la superclase 195 00:07:22,860 --> 00:07:25,720 pero todo el que quiera ser figura geométrica 196 00:07:25,720 --> 00:07:27,300 lo siento, todo el que quiera 197 00:07:27,300 --> 00:07:29,560 tiene que hacer perímetro y área 198 00:07:29,560 --> 00:07:32,319 y ahora ya se empiezan a incorporar los demás 199 00:07:32,319 --> 00:07:34,319 y los demás se van incorporando 200 00:07:34,319 --> 00:07:36,160 y lo primero que hacen según se van incorporando 201 00:07:36,160 --> 00:07:38,720 es, ojo, que me están diciendo 202 00:07:38,720 --> 00:07:39,779 que tengo que incorporar área 203 00:07:39,779 --> 00:07:41,240 pues incorporo área 204 00:07:41,240 --> 00:07:45,240 como veis, triángulo, cuadrado, círculo 205 00:07:45,240 --> 00:07:46,980 se me ha puesto de golpe todo rojo 206 00:07:46,980 --> 00:07:51,360 porque no he sobrescrito en ellas el método ARIA 207 00:07:51,360 --> 00:07:52,180 que acabo de poner aquí 208 00:07:52,180 --> 00:07:55,500 luego la clase abstracta fuerza 209 00:07:55,500 --> 00:07:59,600 fuerza una obligación de que todas las herederas 210 00:07:59,600 --> 00:08:01,480 tienen que darle cuerpo a eso de ahí 211 00:08:01,480 --> 00:08:05,980 y todo esto de nuevo son herramientas 212 00:08:05,980 --> 00:08:09,000 para que los diseños tengan muchísimo más sentido 213 00:08:09,000 --> 00:08:10,319 tengan más significado 214 00:08:10,319 --> 00:08:14,259 se facilite el desarrollo de otras clases 215 00:08:14,259 --> 00:08:17,079 se eviten errores por efectos secundarios 216 00:08:17,079 --> 00:08:18,620 de cosas que uno no se ha dado cuenta 217 00:08:18,620 --> 00:08:21,740 se amplíen las cosas de manera que tenga mucho más sentido 218 00:08:21,740 --> 00:08:26,540 son herramientas que hay que usar correctamente para eso 219 00:08:26,540 --> 00:08:29,360 porque una aplicación se puede hacer de mil formas distintas 220 00:08:29,360 --> 00:08:31,920 buenas y malas 221 00:08:31,920 --> 00:08:34,539 y a lo mejor todas te funcionan exactamente igual 222 00:08:34,539 --> 00:08:36,120 todas te funcionan igual 223 00:08:36,120 --> 00:08:39,879 pero las buenas serán las que estén bien diseñadas 224 00:08:39,879 --> 00:08:40,899 utilizando herencia 225 00:08:40,899 --> 00:08:42,960 y estas cosas que estamos viendo 226 00:08:42,960 --> 00:08:45,879 y las malas, las que tengan mil clases 227 00:08:45,879 --> 00:08:47,559 cada una tirando por libre 228 00:08:47,559 --> 00:08:50,000 en las buenas 229 00:08:50,000 --> 00:08:52,039 podremos incorporar 230 00:08:52,039 --> 00:08:54,000 modificaciones de forma muy sencilla 231 00:08:54,000 --> 00:08:55,860 y muy fácil, en las malas cada cambio 232 00:08:55,860 --> 00:08:57,940 ya será una locura y ya lo estropearé 233 00:08:57,940 --> 00:09:00,309 ¿vale? 234 00:09:01,090 --> 00:09:03,549 bueno, pongo aquí este método área comentado 235 00:09:03,549 --> 00:09:05,590 para que no se me rompan todas las clases de abajo 236 00:09:05,590 --> 00:09:07,610 porque me obliga 237 00:09:07,610 --> 00:09:08,929 a sobre escribirlo y ya está 238 00:09:08,929 --> 00:09:12,820 ¿vale? 239 00:09:12,820 --> 00:09:14,539 y ahora ya 240 00:09:14,539 --> 00:09:18,700 podríamos seguir y vais a seguir 241 00:09:18,700 --> 00:09:20,480 vale, pues vamos a hacer 242 00:09:20,480 --> 00:09:21,940 ya que tenemos las tres clases 243 00:09:21,940 --> 00:09:23,840 triángulo, cuadrado, círculo 244 00:09:23,840 --> 00:09:26,159 bueno, nos hemos inventado a nosotros 245 00:09:26,159 --> 00:09:28,419 pues vamos a hacer una clase 246 00:09:28,419 --> 00:09:29,799 manejador de figuras 247 00:09:29,799 --> 00:09:32,539 que esta ya es 248 00:09:32,539 --> 00:09:34,519 una clase que representa 249 00:09:34,519 --> 00:09:36,740 un objeto que es el que 250 00:09:36,740 --> 00:09:38,659 va a hacer cosas con las figuras 251 00:09:38,659 --> 00:09:40,639 su propiedad va a ser 252 00:09:40,639 --> 00:09:42,279 una raíz de las figuras que tenga 253 00:09:42,279 --> 00:09:51,009 bueno, pues este es el 254 00:09:51,009 --> 00:09:53,389 manejador de cuadrados 255 00:09:53,389 --> 00:09:54,470 va a heredar de esta 256 00:09:54,470 --> 00:09:59,919 y un main con estas funcionalidades 257 00:09:59,919 --> 00:10:00,320 de aquí 258 00:10:00,320 --> 00:10:03,879 vale, pues este es el trabajo que os queda por hacer a vosotros 259 00:10:03,879 --> 00:10:05,539 junto con el main este de aquí 260 00:10:05,539 --> 00:10:07,980 todo lo atrasado que tengáis 261 00:10:07,980 --> 00:10:09,039 estudiaroslo todo 262 00:10:09,039 --> 00:10:10,799 ver los vídeos 263 00:10:10,799 --> 00:10:12,659 etcétera, etcétera 264 00:10:12,659 --> 00:10:15,980 junto con tomar la decisión 265 00:10:15,980 --> 00:10:17,840 de si queréis seguir 266 00:10:17,840 --> 00:10:19,080 en esto, que espero que sí 267 00:10:19,080 --> 00:10:21,320 Que espero que sí 268 00:10:21,320 --> 00:10:22,539 ¿Vale? 269 00:10:23,460 --> 00:10:25,159 Porque si salís sabiendo 270 00:10:25,159 --> 00:10:27,220 Programar y sabiendo Java 271 00:10:27,220 --> 00:10:29,059 Sabéis muchísimo 272 00:10:29,059 --> 00:10:31,019 Sabéis un montón 273 00:10:31,019 --> 00:10:32,840 ¿Vale?