1 00:00:00,430 --> 00:00:07,690 grabamos esto con sentimientos y habláis vale entonces aquí vamos a hacer algunas pruebas de 2 00:00:07,690 --> 00:00:14,289 clases abstractas entonces me he creado un paquete aquí de figuras vamos a trabajar con figuras 3 00:00:14,289 --> 00:00:23,829 geométricas porque es algo que es bastante natural lo conocéis y tiene bastante sentido en trabajarlo 4 00:00:23,829 --> 00:00:29,949 como clases abstractas vale entonces me voy a crear una nueva clase que sea una clase genérica 5 00:00:29,949 --> 00:00:31,670 Que es una clase abstracta, ¿vale? 6 00:00:31,949 --> 00:00:36,090 Si os fijáis, cuando creo, aquí me da la posibilidad de hacer la abstracta directamente 7 00:00:36,090 --> 00:00:39,130 ¿Sí? Lo puede elegir, ¿vale? 8 00:00:39,170 --> 00:00:41,350 Pero por ahora vamos a hacer una clase normal 9 00:00:41,350 --> 00:00:44,429 Y luego vamos a extraerla después, ¿vale? 10 00:00:45,070 --> 00:00:48,170 Entonces, yo creo una clase figura 11 00:00:48,170 --> 00:00:56,490 Esta es una clase normal y corriente 12 00:00:56,490 --> 00:00:59,770 Pues una figura que tiene, ¿vale? 13 00:00:59,770 --> 00:01:00,570 Ya lo hemos hecho 14 00:01:00,570 --> 00:01:01,509 Un int 15 00:01:01,509 --> 00:01:02,950 Lados 16 00:01:02,950 --> 00:01:04,269 ¿No? 17 00:01:04,370 --> 00:01:04,890 Que me dice 18 00:01:04,890 --> 00:01:05,549 Cuántos lados 19 00:01:05,549 --> 00:01:06,329 Tiene esta figura 20 00:01:06,329 --> 00:01:09,390 ¿Qué más puede hacer? 21 00:01:10,370 --> 00:01:11,069 ¿Qué pensáis 22 00:01:11,069 --> 00:01:11,950 Que puede hacer una figura? 23 00:01:13,590 --> 00:01:13,849 Pues 24 00:01:13,849 --> 00:01:14,849 Lo de siempre 25 00:01:14,849 --> 00:01:15,049 ¿No? 26 00:01:15,049 --> 00:01:15,930 Calcular su área 27 00:01:15,930 --> 00:01:16,590 Su perímetro 28 00:01:16,590 --> 00:01:16,989 ¿Vale? 29 00:01:17,390 --> 00:01:17,829 Entonces 30 00:01:17,829 --> 00:01:18,909 ¿Cómo hago 31 00:01:18,909 --> 00:01:20,329 A hacer public 32 00:01:20,329 --> 00:01:22,829 Int 33 00:01:22,829 --> 00:01:23,790 Doble 34 00:01:23,790 --> 00:01:29,170 Calcula 35 00:01:29,170 --> 00:01:30,909 Área 36 00:01:30,909 --> 00:01:35,819 ¿Cómo se calcula el área de una figura? 37 00:01:36,959 --> 00:01:38,420 Doble área 38 00:01:38,420 --> 00:01:40,060 Es igual a cero 39 00:01:40,060 --> 00:01:41,719 Return área 40 00:01:41,719 --> 00:01:44,140 Decidme cómo se calcula 41 00:01:44,140 --> 00:01:46,120 El área de una figura 42 00:01:46,120 --> 00:01:48,900 Depende de la figura 43 00:01:48,900 --> 00:01:50,400 Entonces yo puedo decir 44 00:01:50,400 --> 00:01:51,599 No lo sé hacer 45 00:01:51,599 --> 00:01:53,599 Por defecto devuelva un cero 46 00:01:53,599 --> 00:01:58,260 Y luego está 47 00:01:58,260 --> 00:02:01,140 Calcula perímetro 48 00:02:01,140 --> 00:02:09,340 ¿Cómo se define el perímetro de una figura? 49 00:02:09,819 --> 00:02:10,379 No lo sé 50 00:02:10,379 --> 00:02:18,610 ¿Alguna otra cosa que queremos que haga una figura? 51 00:02:23,199 --> 00:02:23,800 Por ejemplo 52 00:02:23,800 --> 00:02:25,879 Así, para hacer ejemplo 53 00:02:25,879 --> 00:02:27,539 Quiero que devuelva sus lados 54 00:02:27,539 --> 00:02:29,819 Como yo cuando creo una figura 55 00:02:29,819 --> 00:02:30,759 Le devuelvo con lados 56 00:02:30,759 --> 00:02:35,159 Pues public int getLados 57 00:02:35,159 --> 00:02:41,280 Return lados 58 00:02:41,280 --> 00:02:44,919 Queremos crearle una figura 59 00:02:44,919 --> 00:02:48,879 Public 60 00:02:48,879 --> 00:02:50,680 Figura 61 00:02:50,680 --> 00:02:56,159 Le pasamos los lados 62 00:02:56,159 --> 00:03:00,099 Int lados 63 00:03:00,099 --> 00:03:03,560 Dis.lados 64 00:03:03,560 --> 00:03:05,639 Es igual a lados 65 00:03:05,639 --> 00:03:10,719 Esto es lo que hemos hecho hasta ahora 66 00:03:10,719 --> 00:03:11,659 Fenomenal 67 00:03:11,659 --> 00:03:15,919 Vamos a crear una clase que extenda esta figura 68 00:03:15,919 --> 00:03:18,800 Entonces creo una nueva clase 69 00:03:18,800 --> 00:03:26,099 Que es la clase cuadrado 70 00:03:26,099 --> 00:03:27,000 Como no 71 00:03:27,000 --> 00:03:34,159 Decimos que la clase cuadrado extendes figura 72 00:03:34,159 --> 00:03:42,780 Se empada 73 00:03:42,780 --> 00:03:50,199 Porque no tengo el constructor por defecto de figura 74 00:03:50,199 --> 00:03:51,439 Por lo tanto lo tengo que hacer 75 00:03:51,439 --> 00:03:54,199 ¿Por qué se enfada aquí? 76 00:04:05,139 --> 00:04:06,740 Es decir, que el cuadrado no tiene constructor 77 00:04:06,740 --> 00:04:11,740 Constructor por defecto 78 00:04:11,740 --> 00:04:13,400 Constructor por defecto que llama 79 00:04:13,400 --> 00:04:18,170 Sin parámetro 80 00:04:18,170 --> 00:04:18,790 Y que llama 81 00:04:18,790 --> 00:04:22,449 ¿El constructor sin parámetro de quién? 82 00:04:24,170 --> 00:04:25,129 De figura 83 00:04:25,129 --> 00:04:27,610 Es decir, que yo aquí tengo 84 00:04:27,610 --> 00:04:30,569 Implicitamente public cuadrado 85 00:04:30,569 --> 00:04:35,459 Super 86 00:04:35,459 --> 00:04:38,759 Esto es lo que yo tengo 87 00:04:38,759 --> 00:04:40,360 Sin haber escrito nada 88 00:04:40,360 --> 00:04:43,879 Solo que como en figura 89 00:04:43,879 --> 00:04:45,920 He creado un nuevo 90 00:04:45,920 --> 00:04:48,879 ¿Cómo se llama esto? 91 00:04:48,879 --> 00:04:49,660 Un nuevo constructor 92 00:04:49,660 --> 00:04:52,100 Que tiene 93 00:04:52,100 --> 00:04:53,899 Algún parámetro 94 00:04:53,899 --> 00:04:56,680 He destruido el constructor por defecto 95 00:04:56,680 --> 00:04:58,060 El constructor sin parámetros 96 00:04:58,060 --> 00:05:01,199 Y por lo tanto cuando el intenta hacer esto 97 00:05:01,199 --> 00:05:02,720 Me dice oye mira no puedo 98 00:05:02,720 --> 00:05:05,790 ¿Si? 99 00:05:06,649 --> 00:05:08,569 Entonces ahora nosotros decimos 100 00:05:08,569 --> 00:05:22,639 si pero aunque aquí también tiene una cosa así y hace así os vale es decir que puedo tener un 101 00:05:22,639 --> 00:05:46,889 cuadrado de siete lados entonces no me gusta esto es casi pero ahora a lo mejor en un cuadrado además 102 00:05:46,889 --> 00:05:48,470 de saber cuántos lados hay 103 00:05:48,470 --> 00:05:50,509 necesito un int lado 104 00:05:50,509 --> 00:05:52,550 que es 105 00:05:52,550 --> 00:05:55,029 cuánto es el lado del cuadrado 106 00:05:55,029 --> 00:05:59,149 cuando yo estoy en una figura 107 00:05:59,149 --> 00:06:00,689 genérica 108 00:06:00,689 --> 00:06:03,069 ¿tiene sentido saber el tamaño de cada uno 109 00:06:03,069 --> 00:06:03,589 de mis lados? 110 00:06:04,970 --> 00:06:05,750 ¿por qué no? 111 00:06:08,110 --> 00:06:08,850 y porque 112 00:06:08,850 --> 00:06:10,850 no sé cuántos lados tengo, o sea, pues sí, lo sé 113 00:06:10,850 --> 00:06:12,389 sé que tengo cinco lados, ¿vale? 114 00:06:12,430 --> 00:06:14,569 pero no sé si son todos iguales, todos distintos 115 00:06:14,569 --> 00:06:16,730 o sea, no puedo poner aquí 116 00:06:16,730 --> 00:06:18,490 Lado 1, lado 2, lado 3 117 00:06:18,490 --> 00:06:20,069 Entonces aquí pongo solo lados 118 00:06:20,069 --> 00:06:21,050 Cuantos lados tengo 119 00:06:21,050 --> 00:06:22,610 Interesante 120 00:06:22,610 --> 00:06:25,149 Cuando estoy a este nivel 121 00:06:25,149 --> 00:06:26,509 Lo que estoy haciendo es 122 00:06:26,509 --> 00:06:30,350 Dame el lado del cuadrado 123 00:06:30,350 --> 00:06:32,250 Y yo seguramente llamo 124 00:06:32,250 --> 00:06:33,750 El constructor de figura 125 00:06:33,750 --> 00:06:34,990 Con 4 lados 126 00:06:34,990 --> 00:06:37,589 Porque soy un cuadrado y seguramente tengo 4 lados 127 00:06:37,589 --> 00:06:40,110 Y en particular 128 00:06:40,110 --> 00:06:41,870 Me acuerdo que 129 00:06:41,870 --> 00:06:44,370 This.lado es igual a 130 00:06:44,370 --> 00:06:48,910 O sea que ahora el constructor del cuadrado 131 00:06:48,910 --> 00:06:49,910 Lo que recibe aquí 132 00:06:49,910 --> 00:06:51,649 No es el número de lados 133 00:06:51,649 --> 00:06:54,110 Porque el número de lados de cuadrado yo lo sé 134 00:06:54,110 --> 00:06:59,170 Es el tamaño del cuadrado 135 00:06:59,170 --> 00:07:01,089 Cuanto mide uno de sus lados 136 00:07:01,089 --> 00:07:04,750 Ok, fenomenal 137 00:07:04,750 --> 00:07:08,129 Entonces ahora puedo empezar a sobrescribir 138 00:07:08,129 --> 00:07:10,569 ¿Qué sobrescribo? 139 00:07:10,910 --> 00:07:11,170 Pues 140 00:07:11,170 --> 00:07:14,470 Esto lo tengo que sobreescribir 141 00:07:14,470 --> 00:07:19,129 No 142 00:07:19,129 --> 00:07:20,930 Si quiero saber sus lados 143 00:07:20,930 --> 00:07:22,170 Puedo hacer getLados 144 00:07:22,170 --> 00:07:24,509 Y me vale exactamente la interpretación 145 00:07:24,509 --> 00:07:25,930 De esta clase aquí 146 00:07:25,930 --> 00:07:27,970 Lo que tengo que hacer es esto 147 00:07:27,970 --> 00:07:29,449 Bueno, estos dos 148 00:07:29,449 --> 00:07:32,939 Lo voy a sobreescribir 149 00:07:32,939 --> 00:07:36,060 Y lo que hago es 150 00:07:36,060 --> 00:07:39,560 Area 151 00:07:39,560 --> 00:07:41,040 Es igual a 152 00:07:41,040 --> 00:07:43,019 Lado por 4 153 00:07:43,019 --> 00:07:43,740 No, por lado 154 00:07:43,740 --> 00:07:48,620 Y perímetro 155 00:07:48,620 --> 00:07:52,870 es igual a perímetro 156 00:07:52,870 --> 00:07:54,990 por 4 157 00:07:54,990 --> 00:07:57,629 al lado 158 00:07:57,629 --> 00:08:02,019 si o no 159 00:08:02,019 --> 00:08:04,279 esto ya tiene más sentido 160 00:08:04,279 --> 00:08:07,459 ok 161 00:08:07,459 --> 00:08:10,079 queremos hacer también 162 00:08:10,079 --> 00:08:10,740 un 163 00:08:10,740 --> 00:08:13,079 un rectángulo 164 00:08:13,079 --> 00:08:16,120 justo para tener 165 00:08:16,120 --> 00:08:17,220 otra cosa 166 00:08:17,220 --> 00:08:21,490 una nueva clase 167 00:08:21,490 --> 00:08:24,089 hago rectángulo 168 00:08:24,089 --> 00:08:28,100 lo abro 169 00:08:28,100 --> 00:08:29,899 Rectángulo que tiene 170 00:08:29,899 --> 00:08:32,580 Int lado 1 171 00:08:32,580 --> 00:08:35,299 Int lado 2 172 00:08:35,299 --> 00:08:40,120 Tiene un public 173 00:08:40,120 --> 00:08:41,899 Rectángulo 174 00:08:41,899 --> 00:08:45,279 Int lado 1 175 00:08:45,279 --> 00:08:47,299 Int lado 2 176 00:08:47,299 --> 00:08:49,019 Por ejemplo 177 00:08:49,019 --> 00:08:50,299 ¿Qué hago aquí? 178 00:08:52,340 --> 00:08:54,620 Super 4 179 00:08:54,620 --> 00:08:56,820 ¿Por qué 4? 180 00:08:56,820 --> 00:09:00,820 Porque un rectángulo también tiene cuatro lados 181 00:09:00,820 --> 00:09:02,419 Si era un triángulo ponía tres 182 00:09:02,419 --> 00:09:03,940 Si era un pentágono ponía cinco 183 00:09:03,940 --> 00:09:11,250 Súper, pero tengo que este en su figura 184 00:09:11,250 --> 00:09:15,610 Y luego después lo que hago es que 185 00:09:15,610 --> 00:09:19,870 This.lado1 es igual a lado1 186 00:09:19,870 --> 00:09:25,370 Y this.lado2 es igual a lado2 187 00:09:25,370 --> 00:09:29,610 Ahora pillo estos de aquí 188 00:09:29,610 --> 00:09:35,419 Los pongo en rectángulo también 189 00:09:35,419 --> 00:09:40,759 ¿Cómo se calcula la área del rectángulo? 190 00:09:40,879 --> 00:09:41,320 Algo así 191 00:09:41,320 --> 00:09:44,519 ¿Cómo se hace el otro? 192 00:09:44,519 --> 00:09:46,139 Lado 1 por 2 193 00:09:46,139 --> 00:09:50,220 Más lado 2 por 2 194 00:09:50,220 --> 00:09:53,320 Quiero poner paréntesis para estar seguro 195 00:09:53,320 --> 00:10:02,440 Fijáis, lo que ha cambiado es la implementación de estos métodos 196 00:10:02,440 --> 00:10:03,379 Vale, fenomenal 197 00:10:03,379 --> 00:10:04,860 Tengo mis tres clases 198 00:10:04,860 --> 00:10:07,120 Voy a crear una clase de prueba 199 00:10:07,120 --> 00:10:08,940 Para hacer pruebas con ellas 200 00:10:08,940 --> 00:10:10,980 La clase 201 00:10:10,980 --> 00:10:14,000 Prueba figuras 202 00:10:14,000 --> 00:10:15,940 Con el main 203 00:10:15,940 --> 00:10:20,799 Entonces ahora puedo hacer muchas cosas 204 00:10:20,799 --> 00:10:21,879 Por ejemplo 205 00:10:21,879 --> 00:10:23,559 Puedo hacer un cuadrado 206 00:10:23,559 --> 00:10:24,960 Cuadrado 207 00:10:24,960 --> 00:10:28,360 C1 es igual a 208 00:10:28,360 --> 00:10:29,940 Ñu cuadrado 209 00:10:29,940 --> 00:10:33,759 De tamaño 3 210 00:10:33,759 --> 00:10:37,730 Si eso 211 00:10:37,730 --> 00:10:40,950 C1 punto 212 00:10:40,950 --> 00:10:43,210 Cálcula área 213 00:10:43,210 --> 00:10:46,789 Con más 214 00:10:46,789 --> 00:10:48,610 Un espacio 215 00:10:48,610 --> 00:10:50,529 Más C1 punto 216 00:10:50,529 --> 00:10:51,909 Cálcula perímetro 217 00:10:51,909 --> 00:10:54,149 Si 218 00:10:54,149 --> 00:10:56,129 Dale, fenomenal 219 00:10:56,129 --> 00:10:58,370 Puede hacer 220 00:10:58,370 --> 00:11:01,370 Un rectángulo 221 00:11:01,370 --> 00:11:07,120 R1 222 00:11:07,120 --> 00:11:10,980 Rectángulo 223 00:11:10,980 --> 00:11:12,860 3 224 00:11:12,860 --> 00:11:14,379 4 225 00:11:14,379 --> 00:11:15,779 ¿Vale? 226 00:11:16,200 --> 00:11:17,120 Este es un rectángulo 227 00:11:17,120 --> 00:11:21,970 Y luego haré 228 00:11:21,970 --> 00:11:24,309 R1 punto calcula área 229 00:11:24,309 --> 00:11:27,889 Y R1 punto calcula perímetro 230 00:11:27,889 --> 00:11:28,669 ¿Vale? 231 00:11:28,669 --> 00:11:30,570 Vamos a ver si esto funciona todo bien 232 00:11:30,570 --> 00:11:31,570 Le doy al play 233 00:11:31,570 --> 00:11:34,350 Me sale el primer 234 00:11:34,350 --> 00:11:36,370 El cuadrado 235 00:11:36,370 --> 00:11:37,909 Y el rectángulo 236 00:11:37,909 --> 00:11:39,909 Fenomenal 237 00:11:39,909 --> 00:11:40,389 ¿Si? 238 00:11:41,450 --> 00:11:42,529 Puedo hacer 239 00:11:42,529 --> 00:11:45,509 Figura 240 00:11:45,509 --> 00:11:48,110 F1 es igual 241 00:11:48,110 --> 00:11:49,669 A new figura 242 00:11:49,669 --> 00:11:53,070 De 3 243 00:11:53,070 --> 00:11:58,539 Tranquilamente 244 00:11:58,539 --> 00:12:02,019 ¿He usado abstract hasta ahora? 245 00:12:02,799 --> 00:12:07,860 ¿No? Este señor es una clase normal y corriente. 246 00:12:09,059 --> 00:12:12,399 ¿Eh? Es una figura de tres lados. 247 00:12:12,679 --> 00:12:15,980 ¡Mmm! ¡Qué guay! Vamos a ver qué hace esta figura de tres lados. 248 00:12:16,980 --> 00:12:21,980 Calculamos su área y su perímetro. 249 00:12:24,360 --> 00:12:25,080 Lanzo. 250 00:12:25,840 --> 00:12:34,090 ¿Pero cómo? Un triángulo, ¿eh? Una figura con tres lados, tiene área cero. 251 00:12:35,330 --> 00:12:41,450 Claro, porque no sabe, hemos dicho que en la figura no podemos hacer 252 00:12:41,450 --> 00:12:47,009 Y aquí empieza el razonamiento de por qué vamos hacia el abstracto 253 00:12:47,009 --> 00:12:48,389 ¿Tiene sentido esto? 254 00:12:49,309 --> 00:12:51,710 O sea, ¿qué gano yo con esta cosa aquí? 255 00:12:52,330 --> 00:12:58,990 Con haber implementado un método que luego utilizarlo no me sirve de nada 256 00:12:58,990 --> 00:13:02,269 Porque técnicamente no lo puedo utilizar 257 00:13:02,269 --> 00:13:06,169 Me puede decir, mira, tienes cuatro lados 258 00:13:06,169 --> 00:13:09,450 Si vale, ¿qué eres? ¿Un cuadrado? ¿Un rectángulo? ¿Un rombo? 259 00:13:09,870 --> 00:13:11,090 ¿Y cómo calculo tu área? 260 00:13:13,230 --> 00:13:13,909 No puedo 261 00:13:13,909 --> 00:13:16,850 Yo lo puedo dejar así, funciona 262 00:13:16,850 --> 00:13:21,870 Pero esto me expone a que alguien cree un triángulo así 263 00:13:21,870 --> 00:13:25,509 Este es un triángulo, tiene tres lados 264 00:13:25,509 --> 00:13:27,529 Probablemente es un triángulo 265 00:13:27,529 --> 00:13:32,129 Pero no pueda calcular ni su área ni su perímetro 266 00:13:32,129 --> 00:13:33,789 O lo calcula porque lo hace 267 00:13:33,789 --> 00:13:35,610 Pero lo está haciendo mal 268 00:13:35,610 --> 00:13:40,250 Por lo tanto 269 00:13:40,250 --> 00:13:43,350 Una forma es decir 270 00:13:43,350 --> 00:13:44,629 Es razonar y decir 271 00:13:44,629 --> 00:13:45,909 Vale, ok, perfecto 272 00:13:45,909 --> 00:13:48,350 Yo sé que esto no lo puedo definir 273 00:13:48,350 --> 00:13:48,809 A nivel de 274 00:13:48,809 --> 00:13:51,509 De figura 275 00:13:51,509 --> 00:13:53,409 Pues entonces decido 276 00:13:53,409 --> 00:13:55,929 Crear esta clase figura 277 00:13:55,929 --> 00:13:57,330 Como abstracta 278 00:13:57,330 --> 00:14:03,100 Y estos dos métodos 279 00:14:03,100 --> 00:14:17,759 Y en vez de darle un cuerpo que no sirve de nada, decido no dárselo. 280 00:14:20,429 --> 00:14:29,970 Decido definir que estos métodos tienen que existir en cualquier figura. 281 00:14:30,549 --> 00:14:38,149 Cualquier cosa que extienda esta figura y que entonces es una figura tendrá que poder calcular el área, calcular el perímetro. 282 00:14:38,149 --> 00:14:39,889 Pero 283 00:14:39,889 --> 00:14:43,470 No te digo cómo 284 00:14:43,470 --> 00:14:44,990 Lo sabrás 285 00:14:44,990 --> 00:14:47,149 Lo tendrás que implementar tú 286 00:14:47,149 --> 00:14:48,850 A la hora de concretar 287 00:14:48,850 --> 00:14:49,330 ¿Qué es esto? 288 00:14:53,000 --> 00:14:53,460 ¿Dudas? 289 00:14:55,299 --> 00:14:56,460 Vamos a ver 290 00:14:56,460 --> 00:15:04,230 Sí, sí, efectivamente 291 00:15:04,230 --> 00:15:05,809 Es un listado 292 00:15:05,809 --> 00:15:07,350 Un menú 293 00:15:07,350 --> 00:15:10,330 Tienes que hacer esto 294 00:15:10,330 --> 00:15:11,370 ¿Vale? 295 00:15:11,590 --> 00:15:12,350 Pero cuidado 296 00:15:12,350 --> 00:15:14,809 Pero una pizca más 297 00:15:14,809 --> 00:15:17,809 Porque este de aquí lo va al abstracto 298 00:15:17,809 --> 00:15:19,990 ¿Por qué no? 299 00:15:25,279 --> 00:15:29,179 Porque este de aquí sí lo puedo implementar a este nivel 300 00:15:29,179 --> 00:15:32,159 ¿Sí? 301 00:15:32,879 --> 00:15:35,799 Y aquí vamos a ver 302 00:15:35,799 --> 00:15:36,720 ¿Y esto? 303 00:15:51,269 --> 00:15:54,149 Pero, si lo estoy usando 304 00:15:54,149 --> 00:16:09,299 Este de aquí en realidad no lo puedo utilizar 305 00:16:09,299 --> 00:16:11,200 Porque la clase lo he definido como abstracto 306 00:16:11,200 --> 00:16:21,779 Pero en realidad, cuando yo haré un hijo, el hijo llamará a este constructor para hacer la parte de figura, pues sí que tiene sentido. 307 00:16:22,299 --> 00:16:29,299 Si os acordáis cómo funciona un constructor, un constructor antes crea la instancia de su padre y luego lo deshijo. 308 00:16:29,419 --> 00:16:35,080 Es verdad que yo no puedo crear una instancia figura directamente, es normal, porque esto no está implementado. 309 00:16:35,080 --> 00:16:39,659 Pero en el momento en que yo hago una extensión 310 00:16:39,659 --> 00:16:42,700 Y que entonces implementaré estos 311 00:16:42,700 --> 00:16:44,460 Ya están implementados 312 00:16:44,460 --> 00:16:47,840 El concepto de poder utilizar el constructor de mi padre 313 00:16:47,840 --> 00:16:51,399 Es porque sigo teniendo que construir la parte de mi padre 314 00:16:51,399 --> 00:16:52,539 Hasta si es abstracta 315 00:16:52,539 --> 00:16:54,120 A lo mejor hasta no tengo que hacer nada 316 00:16:54,120 --> 00:16:57,899 Pero en este caso, por ejemplo, sí que algo tengo que hacer 317 00:16:57,899 --> 00:17:00,500 Porque lados no es abstracto 318 00:17:00,500 --> 00:17:02,960 Lados es concreto, es algo concreto 319 00:17:02,960 --> 00:17:05,240 Y este constructor lo que me está rellenando 320 00:17:05,240 --> 00:17:07,519 Es la parte concreta de esta cosa 321 00:17:07,519 --> 00:17:10,519 Una clase abstracta 322 00:17:10,519 --> 00:17:13,900 No es una clase completamente abstracta 323 00:17:13,900 --> 00:17:16,119 Es una clase que puede tener una parte concreta 324 00:17:16,119 --> 00:17:18,039 Que entonces tendré que gestionar 325 00:17:18,039 --> 00:17:19,200 Como cualquier otra clase 326 00:17:19,200 --> 00:17:21,819 Y una parte abstracta 327 00:17:21,819 --> 00:17:23,039 Que no existe 328 00:17:23,039 --> 00:17:25,319 Y que tendré que implementar cuando la extenda 329 00:17:25,319 --> 00:17:28,900 Nota para el futuro 330 00:17:28,900 --> 00:17:31,759 Para coger con pinzas 331 00:17:31,759 --> 00:17:37,079 Una clase completamente abstracta es una interfaz 332 00:17:37,079 --> 00:17:43,450 Si yo tengo una clase que solo tiene métodos abstractos 333 00:17:43,450 --> 00:17:46,230 Esa no es una clase abstracta, es una interfaz 334 00:17:46,230 --> 00:17:50,309 Que es lo que veremos mañana o el viernes 335 00:17:50,309 --> 00:17:52,809 ¿Vale? 336 00:17:53,950 --> 00:17:55,910 ¿Qué problema me surge aquí? 337 00:17:58,339 --> 00:18:01,319 Que ahora ya esto no lo puede hacer 338 00:18:01,319 --> 00:18:05,960 ¿Por qué no lo puede hacer? 339 00:18:05,960 --> 00:18:07,660 Vamos a preguntárselo 340 00:18:07,660 --> 00:18:08,700 ¿Qué pasa? 341 00:18:10,500 --> 00:18:13,259 Cannot instantiate the type figura 342 00:18:13,259 --> 00:18:14,599 Why not? 343 00:18:17,170 --> 00:18:18,710 Porque es abstracto 344 00:18:18,710 --> 00:18:20,410 Lo que decíamos antes 345 00:18:20,410 --> 00:18:22,349 No puedo hacer un new 346 00:18:22,349 --> 00:18:24,809 De una clase abstracta 347 00:18:24,809 --> 00:18:26,829 Fijaos que si puedo hacer 348 00:18:26,829 --> 00:18:28,809 Un new de rectángulo y cuadrado 349 00:18:28,809 --> 00:18:30,930 Porque no son abstractos 350 00:18:30,930 --> 00:18:33,089 Entonces esto de figura 351 00:18:33,089 --> 00:18:34,430 Ya no lo puedo hacer 352 00:18:34,430 --> 00:18:36,930 Con la ventaja que ahora 353 00:18:36,930 --> 00:18:39,269 llamar esto no tendría sentido 354 00:18:39,269 --> 00:18:41,269 porque en una instancia de figura 355 00:18:41,269 --> 00:18:42,470 esto no está definido 356 00:18:42,470 --> 00:18:44,549 justo 357 00:18:44,549 --> 00:18:46,410 por lo tanto esto 358 00:18:46,410 --> 00:18:48,450 lo tengo que cambiar de alguna forma 359 00:18:48,450 --> 00:18:51,730 lo que si podría hacer 360 00:18:51,730 --> 00:18:57,619 es esto 361 00:18:57,619 --> 00:19:02,819 ahora yo puedo crear una figura 362 00:19:02,819 --> 00:19:03,859 genérica 363 00:19:03,859 --> 00:19:06,420 y asociarle, ponerle dentro 364 00:19:06,420 --> 00:19:08,160 un rectángulo del lado 5 365 00:19:08,160 --> 00:19:10,799 lo que estoy creando 366 00:19:10,799 --> 00:19:12,119 es un cuadrado 367 00:19:12,119 --> 00:19:15,359 Pero lo referencio como una figura 368 00:19:15,359 --> 00:19:19,200 ¿Y cuando hago esto, qué pasa? 369 00:19:21,559 --> 00:19:26,160 ¿Estoy llamando el cálculo área de figura o el cálculo área de cuadrado? 370 00:19:27,500 --> 00:19:28,660 De cuadrado 371 00:19:28,660 --> 00:19:32,200 Si llamara el cálculo área de figura, explotaría 372 00:19:32,200 --> 00:19:34,200 Porque no está, no existe, es abstracto 373 00:19:35,039 --> 00:19:38,759 ¿Y por qué llama el de cuadrado en vez de figura? 374 00:19:39,440 --> 00:19:40,420 ¿Por qué principio? 375 00:19:40,420 --> 00:19:50,319 principio del 376 00:19:50,319 --> 00:19:55,880 polimorf 377 00:19:55,880 --> 00:19:57,640 muy bien 378 00:19:57,640 --> 00:20:01,480 por el concepto de polimorfismo 379 00:20:01,480 --> 00:20:02,680 que cuando nosotros 380 00:20:02,680 --> 00:20:05,319 tenemos calcularia que es el mismo 381 00:20:05,319 --> 00:20:07,299 nombre con funciones distintas 382 00:20:07,299 --> 00:20:08,339 una abstracta y una 383 00:20:08,339 --> 00:20:11,039 implementada y se llama 384 00:20:11,039 --> 00:20:12,819 el de la instancia 385 00:20:12,819 --> 00:20:14,859 no el de la referencia 386 00:20:16,859 --> 00:20:17,599 entonces se llama 387 00:20:17,599 --> 00:20:18,339 El de cuadrado 388 00:20:18,339 --> 00:20:21,220 No el de la referencia 389 00:20:21,220 --> 00:20:22,460 A figura 390 00:20:22,460 --> 00:20:24,240 ¿Sí? 391 00:20:26,240 --> 00:20:27,440 Interesante, vale 392 00:20:27,440 --> 00:20:28,180 Fenomenal 393 00:20:28,180 --> 00:20:31,180 Y esto debería funcionar 394 00:20:31,180 --> 00:20:33,940 Fijaos 395 00:20:33,940 --> 00:20:35,160 Que yo aquí estoy 396 00:20:35,160 --> 00:20:37,079 Utilizando un constructor de figura 397 00:20:37,079 --> 00:20:39,119 Lo estoy utilizando aquí dentro 398 00:20:39,119 --> 00:20:42,880 Pero no directamente 399 00:20:42,880 --> 00:20:44,680 Lo utilizo solo cuando creo el hijo 400 00:20:44,680 --> 00:20:46,359 Que es una clase concreta 401 00:20:46,359 --> 00:20:54,359 y que utilizará esta parte de aquí para construir la parte concreta de la clase abstracta. 402 00:20:57,819 --> 00:21:00,640 ¿Qué más quería hacer? 403 00:21:00,759 --> 00:21:05,299 ¿Y qué pasa si yo me creo rectángulo y no creo calcularia? 404 00:21:09,819 --> 00:21:15,240 ¿Veis? Hay un error. ¿Qué error es? Vamos a leerlo. 405 00:21:15,240 --> 00:21:24,299 El tipo rectángulo tiene que implementar el inheritado método abstracto 406 00:21:24,299 --> 00:21:26,660 El método abstracto heredado 407 00:21:26,660 --> 00:21:28,940 Figura.calcularia 408 00:21:28,940 --> 00:21:30,160 Me está diciendo 409 00:21:30,160 --> 00:21:34,339 Oye, mira, tú aquí has dicho que esto implementa figura 410 00:21:34,339 --> 00:21:38,000 Vale, dentro de figura está un método abstracto que es calcularia 411 00:21:38,000 --> 00:21:39,900 Y tú no lo estás implementando 412 00:21:39,900 --> 00:21:41,299 Tienes que implementar 413 00:21:41,299 --> 00:21:50,859 Nadie me prohíbe 414 00:21:50,859 --> 00:21:54,640 De decir, sí, te lo implemento 415 00:21:54,640 --> 00:21:55,380 Pero no hago nada 416 00:21:55,380 --> 00:22:07,079 Has hecho un mal diseño 417 00:22:07,079 --> 00:22:10,710 Una figura 418 00:22:10,710 --> 00:22:13,250 Tiene todo lo que es 419 00:22:13,250 --> 00:22:14,269 De forma abstracta 420 00:22:14,269 --> 00:22:15,970 Te define como tiene que ser una figura 421 00:22:15,970 --> 00:22:17,589 Tú estás diciendo, no, un cuadrado 422 00:22:17,589 --> 00:22:19,230 No necesita calcular su área 423 00:22:19,230 --> 00:22:21,549 Un cuadrado sí necesita calcular su área 424 00:22:21,549 --> 00:22:25,920 No es una figura 425 00:22:25,920 --> 00:22:30,289 Lo que estamos considerando nosotros como figura 426 00:22:30,289 --> 00:22:31,650 Son figuras bidimensionales 427 00:22:31,650 --> 00:22:33,410 Son polígonos 428 00:22:33,410 --> 00:22:36,869 A lo mejor lo que podéis hacer es 429 00:22:36,869 --> 00:22:40,150 Una superclase de figura geométrica global 430 00:22:40,150 --> 00:22:42,769 Pero a lo mejor deberías tener otras cosas 431 00:22:42,769 --> 00:22:49,240 Depende de cómo lo organizas 432 00:22:49,240 --> 00:22:51,500 Podrías hacer que un cilindro 433 00:22:51,500 --> 00:22:54,140 En realidad son dos círculos 434 00:22:54,140 --> 00:22:56,619 Y un objeto raro 435 00:22:56,619 --> 00:23:00,440 O un círculo, concretamente 436 00:23:00,440 --> 00:23:01,819 Luego multiplicado por una altura 437 00:23:01,819 --> 00:23:05,700 Pero probablemente figura 3D 438 00:23:05,700 --> 00:23:08,319 Que sería un padre de figuras 439 00:23:08,319 --> 00:23:10,339 Pues tendría también volumen 440 00:23:10,339 --> 00:23:11,259 Por ejemplo, no lo sé 441 00:23:11,259 --> 00:23:16,519 Eso depende de cómo lo creas tú 442 00:23:16,519 --> 00:23:18,700 Y depende de lo que estás modelizando 443 00:23:18,700 --> 00:23:20,200 Está claro que si estás modelizando 444 00:23:20,200 --> 00:23:21,339 Toda la geometría 445 00:23:21,339 --> 00:23:25,440 Pues a lo mejor tendrás todo un árbol 446 00:23:25,440 --> 00:23:27,400 De herencia de todas las posibles 447 00:23:27,400 --> 00:23:30,940 Figuras 2D, 3D 448 00:23:30,940 --> 00:23:32,359 Las líneas, el punto 449 00:23:32,359 --> 00:23:34,960 Por eso tendrás tú que 450 00:23:34,960 --> 00:23:36,660 Gestionarlo como quieras 451 00:23:36,660 --> 00:23:38,420 Ahora, por ejemplo, estamos 452 00:23:38,420 --> 00:23:40,119 Haciendo el otro, lo hemos llamado figura 453 00:23:40,119 --> 00:23:42,599 En realidad sería polígono 454 00:23:42,599 --> 00:23:42,799 ¿Sí? 455 00:23:43,839 --> 00:23:45,480 Lo que podríamos hacer es, vale 456 00:23:45,480 --> 00:23:48,000 Si yo hago así, esto me lo da por bueno 457 00:23:48,000 --> 00:23:49,880 Pero claramente luego funciona mal 458 00:23:49,880 --> 00:23:52,740 ¿Sí? Cuando llego a calcularme 459 00:23:52,740 --> 00:23:54,200 La área del rectángulo 460 00:23:54,200 --> 00:23:54,920 Pues me da cero 461 00:23:54,920 --> 00:23:57,319 ¿Sí? Entonces 462 00:23:57,319 --> 00:23:59,980 ¿Qué estoy haciendo? Estoy 463 00:23:59,980 --> 00:24:04,970 Jugando mal 464 00:24:04,970 --> 00:24:17,190 ¿Vale? Es decir, ¿lo puedes hacer? Sí. Ahí ya estoy haciendo un programa que solo necesita calcular perímetros. Entonces, ¿para qué ponerme a calcular el área? 465 00:24:17,190 --> 00:24:34,470 Pero técnicamente, cuando tú extendes esta figura de aquí, tú te estás pillando el honor, entre comillas, de implementar estos métodos de aquí. Y estos métodos de aquí normalmente están descritos. Te dicen qué tienen que hacer. 466 00:24:34,970 --> 00:24:39,509 Calculara, calculará la área de la figura relacionada a las cosas así 467 00:24:39,509 --> 00:24:42,829 Y cuando tú extendes esta cosa en concreto 468 00:24:42,829 --> 00:24:46,769 En un cierto momento estás haciendo como un contrato a nivel de programador 469 00:24:46,769 --> 00:24:48,309 Diciendo, vale, te la hago bien 470 00:24:48,309 --> 00:24:51,910 Porque si mañana llega tu compañero y dice 471 00:24:51,910 --> 00:24:56,730 Voy a reutilizar tu clase rectángulo porque ya la has implementado en otro proyecto 472 00:24:56,730 --> 00:24:59,369 Y resulta que tu clase rectángulo cuando calcula la área 473 00:24:59,369 --> 00:25:03,130 La calcula devolviendo cero, pues a lo mejor no le funciona nada 474 00:25:03,130 --> 00:25:05,029 Entonces que hago 475 00:25:05,029 --> 00:25:07,670 Si yo tengo que hacer una cosa que solo me calcula el perímetro 476 00:25:07,670 --> 00:25:09,130 Pues posiblemente no es esta 477 00:25:09,130 --> 00:25:11,069 La clase que quiero implementar 478 00:25:11,069 --> 00:25:11,930 Que quiero extender 479 00:25:11,930 --> 00:25:14,589 A lo mejor debería extender otra cosa 480 00:25:14,589 --> 00:25:16,549 O crearme una figura 481 00:25:16,549 --> 00:25:17,750 Solo perímetro 482 00:25:17,750 --> 00:25:19,750 Y allí gestionar la otra 483 00:25:19,750 --> 00:25:25,170 O hasta si no la utilizo nunca 484 00:25:25,170 --> 00:25:26,930 Ponerme aquí a implementar el calcular 485 00:25:26,930 --> 00:25:28,809 Y cuando se reutilice 486 00:25:28,809 --> 00:25:29,970 En otros proyectos 487 00:25:29,970 --> 00:25:31,690 Pues a lo mejor se utiliza 488 00:25:31,690 --> 00:25:39,000 Y vamos a meter otro escalón por aquí 489 00:25:39,000 --> 00:25:39,380 ¿Vale? 490 00:25:39,440 --> 00:25:42,039 Creamos otra figura 491 00:25:42,039 --> 00:25:48,940 O sea, otra clase que sea cuadrilátero 492 00:25:48,940 --> 00:25:50,640 ¿Existe cuadrilátero en español? 493 00:25:51,000 --> 00:25:52,359 Vale, muy bien 494 00:25:52,359 --> 00:25:56,140 ¿Dónde pondríamos cuadrilátero? 495 00:25:56,180 --> 00:25:57,220 ¿Cuadrilátero extiende qué? 496 00:26:01,750 --> 00:26:02,309 Figura 497 00:26:02,309 --> 00:26:05,019 ¿Sí? 498 00:26:05,019 --> 00:26:11,039 nosotros hacemos 499 00:26:11,039 --> 00:26:13,980 public 500 00:26:13,980 --> 00:26:16,460 cuadrilátero 501 00:26:16,460 --> 00:26:18,839 si creo un cuadrilátero 502 00:26:18,839 --> 00:26:20,819 lo que tengo seguro es que es 503 00:26:20,819 --> 00:26:21,319 super 504 00:26:21,319 --> 00:26:24,140 de cuatro 505 00:26:24,140 --> 00:26:27,339 todo 506 00:26:27,339 --> 00:26:37,980 un tiempo de método 507 00:26:37,980 --> 00:26:48,140 cuadrilátero 508 00:26:48,140 --> 00:26:50,519 no, cuadrilátero 509 00:26:50,519 --> 00:26:51,079 ahora si 510 00:26:51,079 --> 00:26:54,099 vale, os gusta 511 00:26:54,099 --> 00:26:54,900 esta cosa aquí 512 00:26:54,900 --> 00:26:57,319 He creado un cuadrilátero 513 00:26:57,319 --> 00:26:59,000 Un cuadrilátero la única cosa que sé 514 00:26:59,000 --> 00:27:00,180 Es que tiene cuatro lados 515 00:27:00,180 --> 00:27:02,339 Por lo tanto, como estén de figura 516 00:27:02,339 --> 00:27:03,700 Pues suben de cuatro 517 00:27:03,700 --> 00:27:07,519 ¿Qué más tengo aquí? 518 00:27:08,519 --> 00:27:09,500 Que tiene un cuadrilátero 519 00:27:09,500 --> 00:27:10,500 Respecto a otras cosas 520 00:27:10,500 --> 00:27:11,759 No lo sé, nada 521 00:27:11,759 --> 00:27:15,240 Cuidado, si yo estendo figura 522 00:27:15,240 --> 00:27:16,440 Me dice 523 00:27:16,440 --> 00:27:17,900 Oye, mira, tienes que 524 00:27:17,900 --> 00:27:19,519 Hacer cálcula área 525 00:27:19,519 --> 00:27:20,940 Y cálcula 526 00:27:20,940 --> 00:27:23,140 Perímetro 527 00:27:23,140 --> 00:27:24,519 ¿Qué tienes que hacer? 528 00:27:24,900 --> 00:27:25,799 ¿Vale? 529 00:27:26,259 --> 00:27:27,279 Entonces lo debería hacer 530 00:27:27,279 --> 00:27:29,680 Ahora, ¿cómo se calcula el perímetro de un cuadrilátero? 531 00:27:34,220 --> 00:27:36,519 Así, en un rectángulo se hace cuatro por el lado 532 00:27:36,519 --> 00:27:37,319 Pregunto 533 00:27:37,319 --> 00:27:39,539 Ni idea 534 00:27:39,539 --> 00:27:41,500 Tampoco 535 00:27:41,500 --> 00:27:44,599 Lo que implica que este señor también es 536 00:27:44,599 --> 00:27:56,210 Estoy especificando que esta es una categoría 537 00:27:56,210 --> 00:27:57,450 Distinta 538 00:27:57,450 --> 00:27:58,190 Estoy haciendo 539 00:27:58,190 --> 00:28:02,569 Una jerarquía 540 00:28:02,569 --> 00:28:04,809 Basada en 541 00:28:04,809 --> 00:28:05,910 Aquí hay 542 00:28:05,910 --> 00:28:09,079 Figuras 543 00:28:09,079 --> 00:28:14,230 Aquí hay 544 00:28:14,230 --> 00:28:16,730 Cuadriláteros 545 00:28:16,730 --> 00:28:19,289 Cuadriláteros 546 00:28:21,130 --> 00:28:26,039 Y ahora aquí debajo 547 00:28:26,039 --> 00:28:26,700 ¿Qué le pondré? 548 00:28:28,160 --> 00:28:29,119 El cuadrado 549 00:28:29,119 --> 00:28:32,319 Así, el cuadrado y el rectángulo 550 00:28:32,319 --> 00:28:36,359 ¿Sí? 551 00:28:37,240 --> 00:28:39,299 Como tampoco es del cuadrilátero 552 00:28:39,299 --> 00:28:39,940 No puedo 553 00:28:39,940 --> 00:28:53,220 Si fuera que todos los cuadriláteros se calcularan con el perímetro lado por 4, podría yo aquí implementar el método abstracto, calcular perímetro, dejando el área libre. 554 00:28:54,279 --> 00:28:58,960 Podría ir implementando uno y dejando otro abstracto. 555 00:28:59,099 --> 00:29:06,299 Está claro que mientras que haya métodos abstractos que siguen siendo abstractos, no puede ser la clase concreta, tiene que ser abstracta también. 556 00:29:06,299 --> 00:29:08,839 Entonces ahora me voy a cuadrado 557 00:29:08,839 --> 00:29:10,200 En vez de extender figura 558 00:29:10,200 --> 00:29:13,099 Extendo cuadrilátero 559 00:29:13,099 --> 00:29:15,599 Y ahora así 560 00:29:15,599 --> 00:29:21,799 Hasta puede hacer así 561 00:29:21,799 --> 00:29:26,269 Y rectángulo 562 00:29:26,269 --> 00:29:28,730 También extende cuadrilátero 563 00:29:28,730 --> 00:29:32,940 Y también tiene así 564 00:29:32,940 --> 00:29:35,519 Porque esto 565 00:29:35,519 --> 00:29:37,660 Llamará super 566 00:29:37,660 --> 00:29:39,200 Sin parámetros 567 00:29:39,200 --> 00:29:41,619 Que será este de aquí 568 00:29:41,619 --> 00:29:43,579 Super sin parámetros 569 00:29:43,579 --> 00:29:46,240 Llama super de 4 570 00:29:46,240 --> 00:29:47,099 De figura 571 00:29:47,099 --> 00:29:49,240 Entonces le pondrá 4 lados 572 00:29:49,240 --> 00:29:51,460 Este paso de aquí 573 00:29:51,460 --> 00:29:54,119 Lo que me está gestionando son los lados 574 00:29:54,119 --> 00:29:56,779 Todos los cuadriláteros son de 4 lados 575 00:29:56,779 --> 00:29:58,700 Por lo tanto estoy seguro de esta cosa aquí 576 00:29:58,700 --> 00:30:00,259 Esta parte de aquí la he implementado 577 00:30:00,259 --> 00:30:02,640 Y todos los que 578 00:30:02,640 --> 00:30:05,200 Son de 4 lados como el cuadrado de rectángulo 579 00:30:05,200 --> 00:30:06,539 Extenderán el cuadrilátero 580 00:30:06,539 --> 00:30:08,779 Está claro que un triángulo no extende cuadrilátero 581 00:30:09,519 --> 00:30:10,819 El triángulo 582 00:30:10,819 --> 00:30:11,579 Extenderá 583 00:30:11,579 --> 00:30:15,619 Figura 584 00:30:15,619 --> 00:30:20,160 A lo mejor podría hacer un triángulo abstracto 585 00:30:20,160 --> 00:30:23,019 Y luego poner tres tipos de triángulos por debajo 586 00:30:23,019 --> 00:30:26,000 Equilátero, escaleno e isócele 587 00:30:26,000 --> 00:30:32,839 Esto funciona 588 00:30:32,839 --> 00:30:38,109 Sigue funcionando 589 00:30:38,109 --> 00:30:40,950 Fijaos aquí 590 00:30:40,950 --> 00:30:43,930 Que ahora estoy haciendo 591 00:30:43,930 --> 00:30:46,609 Un salto 592 00:30:46,609 --> 00:30:49,009 Al abuelo 593 00:30:49,009 --> 00:30:52,230 Figura no es el padre de cuadrado 594 00:30:52,230 --> 00:30:54,809 Es el abuelo de cuadrado 595 00:30:54,809 --> 00:30:56,230 ¿Vale? 596 00:30:56,450 --> 00:30:57,650 Pero cuadrado 597 00:30:57,650 --> 00:31:00,549 Es un cuadrilátero 598 00:31:00,549 --> 00:31:01,470 Que es una figura 599 00:31:01,470 --> 00:31:03,990 Entonces puedo tener una referencia figura 600 00:31:03,990 --> 00:31:05,750 A una instancia cuadrada 601 00:31:05,750 --> 00:31:09,470 ¿Si o no? 602 00:31:12,579 --> 00:31:14,299 ¿Puedo crear un cuadrilátero? 603 00:31:16,259 --> 00:31:17,039 ¿Por qué no? 604 00:31:17,039 --> 00:31:19,599 Porque cuadrilátero es abstracto 605 00:31:19,599 --> 00:31:21,200 No se puede hacer ni un cuadrilátero 606 00:31:21,200 --> 00:31:23,779 Pero puedo hacer cuadrilátero x 607 00:31:23,779 --> 00:31:25,380 Es igual a ni un rectángulo 608 00:31:25,380 --> 00:31:28,039 Tranquilamente 609 00:31:28,039 --> 00:31:32,980 Entonces probamos a hacer 610 00:31:32,980 --> 00:31:35,259 Cuadrilátero 611 00:31:35,259 --> 00:31:38,779 Q1 612 00:31:38,779 --> 00:31:40,900 Que C ya lo he utilizado 613 00:31:40,900 --> 00:31:42,559 Es igual a ni un 614 00:31:42,559 --> 00:31:44,259 Rectángulo 615 00:31:44,259 --> 00:31:48,359 Uno, dos, tres 616 00:31:48,359 --> 00:31:53,059 Ningún problema 617 00:31:53,059 --> 00:32:09,460 Y puedo pedir Q1 y Q2 aquí. 618 00:32:09,900 --> 00:32:14,259 O sea, puedo hacerlo esto, pero así en cuadrilátero no están los métodos. 619 00:32:14,839 --> 00:32:26,859 Extendiendo figuras, estoy importando estos abstractos, pero los estoy importando. 620 00:32:27,839 --> 00:32:33,240 Y entonces luego estos van a cuadrado, donde cuadrado se han implementado, 621 00:32:33,240 --> 00:32:35,720 o rectángulo, no sé cuál era, se han implementado 622 00:32:35,720 --> 00:32:36,960 entonces se utilizarán esto 623 00:32:36,960 --> 00:32:38,839 vale 624 00:32:38,839 --> 00:32:41,299 y entonces aquí 625 00:32:41,299 --> 00:32:43,900 ahora tenemos 1, 2, 3, 4 626 00:32:43,900 --> 00:32:45,980 objetos y aquí viene 627 00:32:45,980 --> 00:32:47,759 lo que hemos 628 00:32:47,759 --> 00:32:49,400 hecho varias otras veces 629 00:32:49,400 --> 00:32:51,660 es decir, ¿y qué pasa si yo hago un 630 00:32:51,660 --> 00:32:52,220 figura 631 00:32:52,220 --> 00:32:54,740 array 632 00:32:54,740 --> 00:32:56,900 figuras 633 00:32:56,900 --> 00:32:59,299 es igual a new 634 00:32:59,299 --> 00:33:01,880 figura de 4 635 00:33:01,880 --> 00:33:07,640 Y empiezo a poner estos objetos que he creado aquí dentro 636 00:33:07,640 --> 00:33:15,920 Por ejemplo, en figuras de 0 pongo C1 637 00:33:15,920 --> 00:33:28,940 Figura de 1, figura de 2, figura de 3 638 00:33:28,940 --> 00:33:33,039 En el 1 pongo C1, en el 2 pongo R1 639 00:33:33,039 --> 00:33:37,980 En el 2 pongo F1 640 00:33:37,980 --> 00:33:40,299 Y en el 3 pongo Q1 641 00:33:40,299 --> 00:33:43,440 ¿Estáis viendo lo que hago? 642 00:33:45,099 --> 00:33:47,480 Tengo un array de figuras 643 00:33:47,480 --> 00:33:52,039 Estos son un array con 4 celdas 644 00:33:52,039 --> 00:33:54,420 Y cada celda tiene una figura dentro 645 00:33:54,420 --> 00:33:56,559 Y le estoy metiendo un cuadrado 646 00:33:56,559 --> 00:33:58,640 Un rectángulo 647 00:33:58,640 --> 00:34:00,119 Una figura 648 00:34:00,119 --> 00:34:01,960 Y un cuadrilátero 649 00:34:01,960 --> 00:34:04,460 Aquí dentro 650 00:34:04,460 --> 00:34:06,579 No hay ni un figura 651 00:34:06,579 --> 00:34:09,139 Porque en realidad distancia de figuras 652 00:34:09,139 --> 00:34:09,920 ¿Cuántas hay aquí? 653 00:34:13,500 --> 00:34:13,780 Cero 654 00:34:13,780 --> 00:34:19,730 Distancias de figuras 655 00:34:19,730 --> 00:34:22,010 ¿Cuántas veces se ha hecho ni un figura? 656 00:34:23,670 --> 00:34:23,929 Cero 657 00:34:23,929 --> 00:34:24,409 ¿Por qué? 658 00:34:25,630 --> 00:34:27,570 Porque figura es abstracta, no lo puede hacer 659 00:34:27,570 --> 00:34:29,710 ¿Cuántos cuadriláteros hay aquí dentro? 660 00:34:30,610 --> 00:34:31,250 Cero 661 00:34:31,250 --> 00:34:35,360 Porque cuadrilátero 662 00:34:35,360 --> 00:34:37,019 También es abstracto 663 00:34:37,019 --> 00:34:40,059 Y no he hecho en ningún lado ni un cuadrilátero 664 00:34:40,059 --> 00:34:43,019 Hablando de instancias 665 00:34:43,019 --> 00:34:46,119 ¿Cuántos cuadrados hay aquí dentro? 666 00:34:47,739 --> 00:34:48,300 Dos 667 00:34:48,300 --> 00:34:52,360 Este es un cuadrado porque he hecho un cuadrado 668 00:34:52,360 --> 00:34:55,960 Y F1 es un cuadrado porque he hecho un cuadrado 669 00:34:55,960 --> 00:34:58,360 Estas son instancias de cuadrados, estos dos 670 00:34:58,360 --> 00:35:00,460 ¿Y cuántos rectángulos? 671 00:35:01,139 --> 00:35:01,699 Dos 672 00:35:01,699 --> 00:35:04,599 Esta es una instancia de rectángulos, esta es una instancia de rectángulos 673 00:35:04,599 --> 00:35:06,599 Otra cosa es que hablara de referencias 674 00:35:06,599 --> 00:35:09,280 Dentro hay referencias figuras 675 00:35:09,280 --> 00:35:10,320 Hay referencias cuadradas 676 00:35:10,320 --> 00:35:12,800 Hay referencias cuadrilaterales 677 00:35:12,800 --> 00:35:14,679 Pero como instancias 678 00:35:14,679 --> 00:35:16,900 Yo tengo dos cuadrados y dos rectángulos 679 00:35:16,900 --> 00:35:19,420 Y toda la pregunta es 680 00:35:19,420 --> 00:35:21,159 ¿Y si ahora yo hago 681 00:35:21,159 --> 00:35:26,460 For int is igual a cero 682 00:35:26,460 --> 00:35:31,260 Y menor que figuras.length 683 00:35:31,260 --> 00:35:33,480 Y más más 684 00:35:33,480 --> 00:35:36,639 Y me digo 685 00:35:36,639 --> 00:35:40,420 System.out.println 686 00:35:40,420 --> 00:35:40,900 De 687 00:35:40,900 --> 00:35:44,179 Figuras 688 00:35:44,179 --> 00:35:45,860 De i 689 00:35:45,860 --> 00:35:47,380 Punto 690 00:35:47,380 --> 00:35:49,420 Calcularia 691 00:35:49,420 --> 00:35:54,239 ¿Qué calcularia se está utilizando? 692 00:35:54,320 --> 00:35:55,039 ¿Qué me da esto? 693 00:35:55,139 --> 00:35:56,179 Porque estas son figuras 694 00:35:56,179 --> 00:36:00,659 Entonces debería explotar 695 00:36:00,659 --> 00:36:02,119 Sin embargo 696 00:36:02,119 --> 00:36:04,679 Me pone las áreas 697 00:36:04,679 --> 00:36:06,920 Cada una 698 00:36:06,920 --> 00:36:09,099 calculada como 699 00:36:09,099 --> 00:36:10,480 la instancia me pide 700 00:36:10,480 --> 00:36:12,599 ¿vale? si es 701 00:36:12,599 --> 00:36:15,000 un cuadrado calculado como 702 00:36:15,000 --> 00:36:17,179 lado por lado y si es un rectángulo 703 00:36:17,179 --> 00:36:19,139 calculado como lado 1 por lado 2 704 00:36:19,139 --> 00:36:22,719 ¿si? 705 00:36:23,139 --> 00:36:24,960 o sea que se está utilizando la correcta ¿por qué? 706 00:36:25,440 --> 00:36:27,099 porque aquí subentra el 707 00:36:27,099 --> 00:36:29,119 polimorfismo, este señor 708 00:36:29,119 --> 00:36:31,219 de aquí calcula área, yo sé que cualquier 709 00:36:31,219 --> 00:36:31,980 figura 710 00:36:31,980 --> 00:36:35,059 tiene que tener calcula área 711 00:36:35,059 --> 00:36:36,940 por lo tanto yo lo puedo llamar 712 00:36:36,940 --> 00:36:42,920 este método sobre todos los objetos que están aquí. Pero la implementación concreta que 713 00:36:42,920 --> 00:36:48,599 se va a utilizar es la que está en cada instancia. O sea, la implementación que se utilizará 714 00:36:48,599 --> 00:36:53,219 para esto será de la instancia de cuadrado, de la instancia de rectángulo, de la instancia 715 00:36:53,219 --> 00:36:59,099 de cuadrado, de la instancia de rectángulo. Si os fijáis, cosa interesante también de 716 00:36:59,099 --> 00:37:04,840 por qué hacemos todo esto. Cuando yo hago el punto aquí, punto, me salen los métodos 717 00:37:04,840 --> 00:37:06,500 Que puedo llamar sobre figura 718 00:37:06,500 --> 00:37:08,920 Y figura 719 00:37:08,920 --> 00:37:11,679 Amete calcular el cálculo de perímetro 720 00:37:11,679 --> 00:37:13,539 Cualquier figura 721 00:37:13,539 --> 00:37:16,219 Tiene que calcular el cálculo de perímetro 722 00:37:16,219 --> 00:37:18,179 ¿Presentada cómo? 723 00:37:18,280 --> 00:37:18,860 No lo sé 724 00:37:18,860 --> 00:37:20,219 Porque la figura no lo sabe 725 00:37:20,219 --> 00:37:23,619 Pero sabe que existen estos dos 726 00:37:23,619 --> 00:37:25,059 Por lo tanto yo puedo 727 00:37:25,059 --> 00:37:27,179 Tranquilamente pillar mi array de figuras 728 00:37:27,179 --> 00:37:29,679 Y hacer cálculos de área de perímetro 729 00:37:29,679 --> 00:37:31,619 Sobre cualquiera de las figuras que están ahí dentro 730 00:37:31,619 --> 00:37:33,699 La implementación 731 00:37:33,699 --> 00:37:34,619 Que se usará 732 00:37:34,619 --> 00:37:38,480 Será la que está en la clase de la Estad. 733 00:37:41,099 --> 00:37:41,739 ¿Dudas? 734 00:37:51,500 --> 00:37:52,940 ¿Queréis probar otra cosa? 735 00:37:55,679 --> 00:37:56,539 No, no. 736 00:37:57,579 --> 00:37:58,739 Con esto. 737 00:37:59,320 --> 00:38:00,579 ¿Queréis hacer alguna cosa? 738 00:38:00,639 --> 00:38:01,099 ¡Ay, sí! 739 00:38:01,739 --> 00:38:04,019 ¿Qué pasaría si...? 740 00:38:04,019 --> 00:38:04,820 ¿Se os ocurre algo? 741 00:38:06,019 --> 00:38:08,860 Más o menos yo los ejemplos que quería hacer los he hecho. 742 00:38:09,340 --> 00:38:11,260 Os he hecho varias... 743 00:38:11,260 --> 00:38:13,300 De las cuatro clases que hemos creado. 744 00:38:13,300 --> 00:38:14,679 Cuatro instancias. 745 00:38:14,800 --> 00:38:16,239 Que tengan dentro de las cosas 746 00:38:16,239 --> 00:38:19,000 Hemos visto cual no funcionan 747 00:38:19,000 --> 00:38:21,800 Hemos creado un array de figuras 748 00:38:21,800 --> 00:38:23,519 Podría hacer un array de cuadriláteros 749 00:38:23,519 --> 00:38:24,199 También 750 00:38:24,199 --> 00:38:27,960 Solo que triángulos no podría ponerlos dentro 751 00:38:27,960 --> 00:38:29,500 Si tuviera triángulos 752 00:38:29,500 --> 00:38:32,380 ¿Dudas?