1 00:00:00,000 --> 00:00:06,419 Voy a grabar esta clase, por lo tanto, si habláis me dais el permiso de grabaros, ¿vale? 2 00:00:06,520 --> 00:00:08,359 Y os invito a hablar y preguntar, ¿vale? 3 00:00:09,320 --> 00:00:14,419 Entonces, una vez vista herencia y cómo funcionan los objetos, 4 00:00:15,120 --> 00:00:19,559 hemos empezado en la clase anterior, en el ejercicio anterior, 5 00:00:19,679 --> 00:00:24,679 hemos visto algunos ejemplos de cómo funciona la clase y las herencias 6 00:00:24,679 --> 00:00:29,660 y han salido algunos temas, como por ejemplo las clases abstractas 7 00:00:29,660 --> 00:00:32,100 y aún si no lo sabéis, el polimorfismo, ¿vale? 8 00:00:32,619 --> 00:00:36,399 Entonces, vamos a darle un poquito más de concepto. 9 00:00:36,480 --> 00:00:41,600 La clase abstracta la hemos visto, la hemos hecho un ejemplo ahora y más o menos ha entendido, ¿vale? 10 00:00:42,240 --> 00:00:46,859 Es que hay veces en que una clase está definiendo un concepto, como siempre hacemos, 11 00:00:46,859 --> 00:00:52,719 pero es un concepto muy genérico, un concepto que no se puede instanciar como tal, ¿vale? 12 00:00:52,920 --> 00:00:59,480 Es tan genérico lo que estamos modelizando que no tiene sentido tener un objeto de ese tipo, ¿vale? 13 00:00:59,660 --> 00:01:01,880 Es una cosa más bien abstracta, ¿vale? 14 00:01:02,580 --> 00:01:06,180 Ejemplos de esto pueden ser una figura geométrica, que es el ejemplo que hemos hecho nosotros, 15 00:01:06,340 --> 00:01:09,140 una figura geométrica por sí misma puede hacer muchas cosas. 16 00:01:09,260 --> 00:01:12,100 Yo puedo calcular el área adecuada de las figuras geométricas, 17 00:01:12,200 --> 00:01:14,000 puedo calcular el perímetro de las figuras geométricas, 18 00:01:14,000 --> 00:01:21,480 pero no sé cómo hasta que no especifico qué tipo de figura geométrica es, ¿sí? 19 00:01:21,840 --> 00:01:23,260 Lo mismo puede ser un vehículo. 20 00:01:23,580 --> 00:01:28,640 El vehículo puede tener la capacidad de moverse, la velocidad con que se mueve, 21 00:01:28,780 --> 00:01:29,500 muchas características. 22 00:01:29,659 --> 00:01:35,959 Hay muchas funcionalidades, pero hasta que no especifico qué vehículo concreto es, 23 00:01:36,340 --> 00:01:41,599 tampoco puedo saber mucho, sí, sí, su velocidad, su tipo de movimiento, 24 00:01:41,879 --> 00:01:45,939 qué puede juntar, qué ciudades o qué sí, ¿vale? 25 00:01:46,519 --> 00:01:51,659 Entonces, la idea es, hay una forma de hacer una clase abstracta, 26 00:01:53,039 --> 00:01:57,659 que sustancialmente es una mezcla entre cosas implementadas, 27 00:01:57,659 --> 00:01:57,879 ¿vale? 28 00:01:57,879 --> 00:01:57,939 ¿Vale? 29 00:01:57,939 --> 00:01:57,959 ¿Vale? 30 00:01:57,959 --> 00:01:58,019 ¿Vale? 31 00:01:58,019 --> 00:01:58,079 ¿Vale? 32 00:01:58,079 --> 00:01:58,140 ¿Vale? 33 00:01:58,140 --> 00:01:58,199 ¿Vale? 34 00:01:58,199 --> 00:01:58,259 ¿Vale? 35 00:01:58,259 --> 00:01:58,359 ¿Vale? 36 00:01:58,359 --> 00:01:58,420 ¿Vale? 37 00:01:58,420 --> 00:01:58,519 ¿Vale? 38 00:01:58,519 --> 00:01:58,539 ¿Vale? 39 00:01:58,539 --> 00:01:58,599 ¿Vale? 40 00:01:58,599 --> 00:01:58,819 ¿Vale? 41 00:01:58,819 --> 00:01:58,879 ¿Vale? 42 00:01:58,879 --> 00:01:59,060 ¿Vale? 43 00:01:59,060 --> 00:01:59,120 ¿Vale? 44 00:01:59,120 --> 00:01:59,640 ¿Vale? 45 00:01:59,640 --> 00:01:59,659 ¿Vale? 46 00:01:59,659 --> 00:02:00,000 ¿Vale? 47 00:02:00,119 --> 00:02:00,399 ¿Vale? 48 00:02:00,399 --> 00:02:00,439 ¿Vale? 49 00:02:00,439 --> 00:02:00,560 ¿Vale? 50 00:02:00,560 --> 00:02:00,619 ¿Vale? 51 00:02:02,640 --> 00:02:07,280 Atributos, o sea, datos implementados y métodos implementados, 52 00:02:07,479 --> 00:02:12,039 y algunos métodos que en vez de, tú dices, mira, en este concepto, 53 00:02:12,039 --> 00:02:14,079 tiene sentido que esté este método, 54 00:02:14,319 --> 00:02:17,439 tiene sentido implementar esta funcionalidad, 55 00:02:17,840 --> 00:02:20,139 pero no a este nivel de extracción. 56 00:02:20,599 --> 00:02:23,620 A este nivel de extracción es todavía demasiado abstracto 57 00:02:23,620 --> 00:02:25,060 para saber cómo se hace. 58 00:02:25,259 --> 00:02:28,400 Por lo tanto, lo pongo allí, 59 00:02:28,400 --> 00:02:30,080 Como si fuera un 60 00:02:30,080 --> 00:02:31,980 Un contrato 61 00:02:31,980 --> 00:02:34,140 Que ponga allí, oye mira 62 00:02:34,140 --> 00:02:36,480 Aquí tiene que haber el calcular la área 63 00:02:36,480 --> 00:02:37,719 De las figuras geométricas 64 00:02:37,719 --> 00:02:40,300 Pero no lo voy a implementar yo 65 00:02:40,300 --> 00:02:43,020 Lo voy a dejar allí para que cualquier 66 00:02:43,020 --> 00:02:45,040 Clase 67 00:02:45,040 --> 00:02:46,680 Que en un futuro me extienda a mi 68 00:02:46,680 --> 00:02:48,080 Sea obligada 69 00:02:48,080 --> 00:02:50,099 A implementar este método 70 00:02:50,099 --> 00:02:52,240 Si no esas trata ella también 71 00:02:52,240 --> 00:02:53,580 ¿Si? 72 00:02:55,200 --> 00:02:56,099 Cuidado que 73 00:02:56,099 --> 00:02:58,960 Yo podría hacer una clase 74 00:02:58,960 --> 00:03:01,039 Extracta que implementa 75 00:03:01,039 --> 00:03:03,039 Algunos de los métodos 76 00:03:03,039 --> 00:03:04,759 Extractos de las superclases 77 00:03:04,759 --> 00:03:07,060 Y deje abstractos 78 00:03:07,060 --> 00:03:08,900 Otros y cree otros 79 00:03:08,900 --> 00:03:10,039 Más abstractos 80 00:03:10,039 --> 00:03:12,979 No es que necesariamente si es abstracta no implementa nada 81 00:03:12,979 --> 00:03:15,039 Puede haber una implementación 82 00:03:15,039 --> 00:03:16,280 De una parte 83 00:03:16,280 --> 00:03:17,479 Pero no de todos 84 00:03:17,479 --> 00:03:21,219 Siempre que aparezca al menos un método abstracto 85 00:03:21,219 --> 00:03:23,039 Pues la clase tiene que ser abstracta 86 00:03:23,719 --> 00:03:24,900 Si la clase no es abstracta 87 00:03:24,900 --> 00:03:27,000 Tengo que implementar todos los métodos 88 00:03:27,000 --> 00:03:27,580 ¿Si? 89 00:03:29,640 --> 00:03:31,120 Entonces ¿Cómo se define 90 00:03:31,120 --> 00:03:32,640 Un método abstracto? 91 00:03:32,680 --> 00:03:35,360 Pues poniendo la palabra reservada abstract 92 00:03:35,360 --> 00:03:36,840 Después de public 93 00:03:36,840 --> 00:03:38,840 ¿Vale? Esto me está diciendo 94 00:03:38,840 --> 00:03:41,640 Oye mira, este método tiene que existir 95 00:03:41,640 --> 00:03:43,340 Pero como no tengo 96 00:03:43,340 --> 00:03:44,860 La capacidad actual de 97 00:03:44,860 --> 00:03:47,159 Hacer una implementación concreta 98 00:03:47,159 --> 00:03:49,439 Porque los datos siguen siendo 99 00:03:49,439 --> 00:03:51,120 Demasiados abstractos 100 00:03:51,120 --> 00:03:52,040 Para poder hacer 101 00:03:52,040 --> 00:03:54,819 Para poder hacer una implementación real 102 00:03:54,819 --> 00:03:54,879 ¿Si? 103 00:03:54,900 --> 00:03:56,340 Pues te lo pongo aquí 104 00:03:56,340 --> 00:03:59,300 Sin el cuerpo 105 00:03:59,300 --> 00:04:01,200 Esto es como si estoy definiendo 106 00:04:01,200 --> 00:04:03,900 El prototipo del método 107 00:04:03,900 --> 00:04:04,520 ¿Vale? 108 00:04:04,599 --> 00:04:06,120 Esto es el prototipo del método 109 00:04:06,120 --> 00:04:08,439 Sin poner el cuerpo del método 110 00:04:08,439 --> 00:04:10,140 Falta la implementación 111 00:04:10,140 --> 00:04:12,120 ¿Quién tendrá que hacer la implementación? 112 00:04:12,599 --> 00:04:14,599 Las clases que hereden de mi 113 00:04:14,599 --> 00:04:16,899 Si no son abstractas 114 00:04:17,660 --> 00:04:19,160 Las clases 115 00:04:19,160 --> 00:04:20,899 No abstractas 116 00:04:21,579 --> 00:04:22,840 Que hereden de mi 117 00:04:22,840 --> 00:04:24,699 ¿Si? ¿Se entiende? 118 00:04:24,899 --> 00:04:27,319 Y fijaos que si yo 119 00:04:27,319 --> 00:04:30,079 Heredo de una clase abstracta 120 00:04:30,079 --> 00:04:31,399 Estoy obligado 121 00:04:31,399 --> 00:04:32,939 A implementarlo 122 00:04:32,939 --> 00:04:34,899 Si yo no quiero ser abstracto 123 00:04:34,899 --> 00:04:37,299 ¿Se entiende o no? 124 00:04:38,279 --> 00:04:38,959 ¿Dudas? 125 00:04:39,839 --> 00:04:41,419 Este es un mecanismo para 126 00:04:41,419 --> 00:04:43,500 Modelizar conceptos más complejos 127 00:04:43,500 --> 00:04:45,099 ¿Vale? Y es siempre 128 00:04:45,099 --> 00:04:47,419 Acordaos porque la idea viene un poco por allí 129 00:04:47,419 --> 00:04:49,299 Para organizar 130 00:04:50,359 --> 00:04:51,299 Y reutilizar 131 00:04:51,299 --> 00:04:53,519 Lo máximo posible 132 00:04:53,519 --> 00:04:54,819 El código que yo creo 133 00:04:54,819 --> 00:04:56,540 ¿Vale? Entonces 134 00:04:56,540 --> 00:04:57,939 Dentro del vehículo 135 00:04:57,939 --> 00:05:00,740 Habrá algunos métodos implementados 136 00:05:00,740 --> 00:05:03,040 Y algunos datos que son propios 137 00:05:03,040 --> 00:05:04,599 De todos los vehículos del mundo 138 00:05:04,599 --> 00:05:06,439 Y eso es interesante 139 00:05:06,439 --> 00:05:08,819 Porque cuando yo heredaré 140 00:05:08,819 --> 00:05:09,839 De estos vehículos 141 00:05:09,839 --> 00:05:11,639 Pues seguramente 142 00:05:11,639 --> 00:05:15,279 Esas cosas implementadas 143 00:05:15,279 --> 00:05:17,279 Ya las estoy heredando y las puedo utilizar 144 00:05:17,279 --> 00:05:17,899 ¿Vale? 145 00:05:18,500 --> 00:05:20,500 La clase abstracta deriva del hecho que 146 00:05:20,500 --> 00:05:22,500 Vale, pero cuando intento hacer estas generalizaciones 147 00:05:23,219 --> 00:05:24,000 A veces 148 00:05:24,000 --> 00:05:26,540 No puedo implementar todo 149 00:05:26,540 --> 00:05:28,399 Entonces me dejo como 150 00:05:28,399 --> 00:05:30,579 Trabajo futuro, hago un contrato 151 00:05:30,579 --> 00:05:32,459 Diciendo a que cualquier persona 152 00:05:32,459 --> 00:05:34,079 Que quiera implementar 153 00:05:34,079 --> 00:05:37,019 Una clase que utilice lo que yo ya he creado 154 00:05:37,019 --> 00:05:38,779 Pues necesariamente 155 00:05:38,779 --> 00:05:40,860 Tendrá que implementar 156 00:05:40,860 --> 00:05:42,680 Una cosa concreta 157 00:05:42,680 --> 00:05:45,259 De mis métodos abstractos 158 00:05:45,259 --> 00:05:46,699 Una implementación concreta 159 00:05:46,699 --> 00:05:48,500 De mis métodos abstractos 160 00:05:48,500 --> 00:05:49,459 ¿Se entiende? 161 00:05:50,839 --> 00:05:51,339 ¿Dudas? 162 00:05:54,000 --> 00:05:56,879 ¿Se entiende? 163 00:05:56,879 --> 00:05:56,959 ¿Se entiende? 164 00:05:56,959 --> 00:05:57,040 ¿Se entiende? 165 00:05:57,040 --> 00:05:57,060 ¿Se entiende? 166 00:05:57,060 --> 00:05:57,100 ¿Se entiende? 167 00:05:57,100 --> 00:05:57,160 ¿Se entiende? 168 00:05:57,160 --> 00:05:58,980 Sustancialmente, formalmente 169 00:05:58,980 --> 00:06:01,319 Permiten declarar en la superclase 170 00:06:01,319 --> 00:06:04,300 Un comportamiento, un método, unas funciones 171 00:06:04,300 --> 00:06:04,620 ¿Vale? 172 00:06:04,620 --> 00:06:06,639 Que deberán cumplimentar 173 00:06:06,639 --> 00:06:07,819 Todas las subclases 174 00:06:07,819 --> 00:06:10,620 Pero sin decir nada sobre su implementación 175 00:06:10,620 --> 00:06:12,279 Esto lo tendrás que hacer 176 00:06:12,279 --> 00:06:13,720 Pero no te digo cómo 177 00:06:13,720 --> 00:06:16,920 Todas las figuras geométricas 178 00:06:16,920 --> 00:06:18,759 Tendrán que ser capaces de calcular 179 00:06:18,759 --> 00:06:19,379 Su área 180 00:06:19,379 --> 00:06:21,060 Pero no te digo cómo 181 00:06:21,060 --> 00:06:23,300 El círculo la calculará de una forma 182 00:06:23,300 --> 00:06:24,379 El cuadrado de otra forma 183 00:06:24,379 --> 00:06:25,379 El triángulo de otra forma 184 00:06:25,379 --> 00:06:28,579 Todos serán capaces de calcular su perímetro 185 00:06:28,579 --> 00:06:31,540 Pero no sé cómo se calcula cada uno con su fondo 186 00:06:31,540 --> 00:06:32,800 ¿Sí? 187 00:06:36,620 --> 00:06:37,220 ¿UML? 188 00:06:37,620 --> 00:06:38,580 ¿Habéis visto algo de UML? 189 00:06:39,920 --> 00:06:41,199 Lo veréis, espera 190 00:06:41,199 --> 00:06:41,720 ¿Vale? 191 00:06:42,259 --> 00:06:45,639 En UML que son como gráficos y diagramas 192 00:06:45,639 --> 00:06:46,360 Que permiten 193 00:06:46,360 --> 00:06:49,360 Definir un sistema 194 00:06:49,360 --> 00:06:51,280 Y cómo interaccionan las clases 195 00:06:51,280 --> 00:06:52,000 Entre ellas 196 00:06:52,000 --> 00:06:53,259 Pues hay un diagrama 197 00:06:53,259 --> 00:06:54,420 Que es el diagrama de clases 198 00:06:54,420 --> 00:06:56,099 Donde se definen las clases 199 00:06:56,099 --> 00:06:57,279 Que son parecidas a estas 200 00:06:57,279 --> 00:06:58,360 Cajitas así 201 00:06:58,360 --> 00:06:59,519 A veces lo hemos visto 202 00:06:59,519 --> 00:07:00,719 En los ejercicios que he puesto 203 00:07:00,719 --> 00:07:01,439 ¿Vale? 204 00:07:01,480 --> 00:07:02,099 El nombre 205 00:07:02,099 --> 00:07:03,399 Aquí los atributos 206 00:07:03,399 --> 00:07:04,599 Y aquí los métodos 207 00:07:04,599 --> 00:07:04,959 ¿Vale? 208 00:07:05,980 --> 00:07:07,980 Formalmente si estás utilizando UML 209 00:07:07,980 --> 00:07:10,459 Universal Modeling Language 210 00:07:10,459 --> 00:07:13,879 Pues lo que van en cursiva 211 00:07:13,879 --> 00:07:16,599 Nombres o métodos en cursiva 212 00:07:16,599 --> 00:07:18,159 Son abstractos 213 00:07:18,159 --> 00:07:19,120 ¿Sí? 214 00:07:19,759 --> 00:07:21,099 Entonces si yo puedo definirte 215 00:07:21,099 --> 00:07:22,000 Una superclase así 216 00:07:22,000 --> 00:07:23,219 Sé que esto lo tengo que implementar 217 00:07:23,259 --> 00:07:24,439 Mientras este de aquí 218 00:07:24,439 --> 00:07:26,019 Lo tengo que declarar como abstracto 219 00:07:26,019 --> 00:07:27,420 Y se implementará 220 00:07:27,420 --> 00:07:30,279 Cuando una clase herede de esta aquí 221 00:07:30,279 --> 00:07:31,879 La herencia es una flecha 222 00:07:31,879 --> 00:07:33,579 ¿Sí? 223 00:07:34,920 --> 00:07:36,839 Lo deberíais ver en algún momento 224 00:07:36,839 --> 00:07:38,879 En entornos de desarrollo 225 00:07:38,879 --> 00:07:41,319 ¿Vale? 226 00:07:42,300 --> 00:07:44,439 Particularidades de la clase abstracta 227 00:07:44,439 --> 00:07:46,279 No se pueden instanciar 228 00:07:46,279 --> 00:07:48,300 Si la clase abstracta 229 00:07:48,300 --> 00:07:49,620 No puedo hacer 230 00:07:49,620 --> 00:07:51,980 Figura X es igual a new figura 231 00:07:51,980 --> 00:07:53,099 New figura 232 00:07:53,259 --> 00:07:54,399 No puede existir 233 00:07:54,399 --> 00:07:56,019 No se puede hacer un new 234 00:07:56,019 --> 00:07:58,879 De una clase que sea abstracta 235 00:07:58,879 --> 00:07:59,219 ¿Por qué? 236 00:07:59,300 --> 00:08:00,360 Porque le faltan cosas 237 00:08:00,360 --> 00:08:01,560 ¿Sí? 238 00:08:02,199 --> 00:08:04,659 Yo puedo crear un objeto concreto 239 00:08:04,659 --> 00:08:06,819 De una subclase que herede de allí 240 00:08:06,819 --> 00:08:08,240 Que implemente todos los métodos 241 00:08:08,240 --> 00:08:09,639 Pero no de esta abstracta 242 00:08:09,639 --> 00:08:11,680 Porque luego si amarra 243 00:08:11,680 --> 00:08:12,899 Uno de los métodos abstractos 244 00:08:12,899 --> 00:08:13,680 No sé qué hacer 245 00:08:13,680 --> 00:08:16,939 Porque no tengo la implementación 246 00:08:16,939 --> 00:08:17,519 De ese método 247 00:08:17,519 --> 00:08:19,019 Por lo tanto no se puede hacer 248 00:08:19,019 --> 00:08:21,399 Ahora veremos qué se puede hacer 249 00:08:21,399 --> 00:08:21,599 ¿Vale? 250 00:08:22,180 --> 00:08:22,560 ¿Qué es? 251 00:08:22,560 --> 00:08:22,620 ¿Qué es? 252 00:08:23,259 --> 00:08:25,120 Se pueden instanciar clases heredadas 253 00:08:25,120 --> 00:08:27,240 Siempre que no sean abstractas a su vez 254 00:08:27,240 --> 00:08:28,279 ¿Sí? 255 00:08:28,920 --> 00:08:30,639 Y se pueden instanciar subclases 256 00:08:30,639 --> 00:08:33,460 Utilizando la referencia a clases padre 257 00:08:33,460 --> 00:08:36,019 O sea figura F es igual a new rectángulo 258 00:08:36,019 --> 00:08:36,720 Lo hemos hecho 259 00:08:36,720 --> 00:08:38,179 Esto me vale 260 00:08:38,179 --> 00:08:39,179 ¿Sí? 261 00:08:39,879 --> 00:08:43,399 F podrá utilizar los métodos abstractos 262 00:08:43,399 --> 00:08:45,620 Por lo que sabemos ya 263 00:08:45,620 --> 00:08:47,259 Que en realidad no se utilizarán 264 00:08:47,819 --> 00:08:49,059 Los métodos de F 265 00:08:49,059 --> 00:08:51,419 Sino que se utilizarán los métodos de rectángulo 266 00:08:51,419 --> 00:08:52,419 Y como rectángulo 267 00:08:53,259 --> 00:08:55,120 Al extenderme 268 00:08:55,120 --> 00:08:57,120 Ha tenido que implementar 269 00:08:57,120 --> 00:08:58,899 Los métodos abstractos 270 00:08:58,899 --> 00:09:00,279 Pues ese método lo tiene 271 00:09:00,279 --> 00:09:02,639 ¿Me explico? 272 00:09:03,639 --> 00:09:04,240 Repito 273 00:09:04,240 --> 00:09:08,139 Si aquí la clase figura 274 00:09:08,139 --> 00:09:09,659 Tiene el método abstracto dibuja 275 00:09:09,659 --> 00:09:12,000 Yo sé que cualquier hijo de figura 276 00:09:12,000 --> 00:09:14,419 Tendrá que implementar dibuja 277 00:09:14,419 --> 00:09:16,659 Porque dibuja es abstracto 278 00:09:16,659 --> 00:09:18,559 Entonces cuando hago rectángulo 279 00:09:18,559 --> 00:09:20,299 Pues él tendrá que implementar eso 280 00:09:20,299 --> 00:09:20,919 Si no da error 281 00:09:20,919 --> 00:09:23,120 Entonces cuando hago una cosa como esta 282 00:09:23,259 --> 00:09:25,819 De figura F es igual a new rectángulo 283 00:09:25,819 --> 00:09:29,139 Yo sé que rectángulo al crearse 284 00:09:29,139 --> 00:09:32,019 Tiene este método de aquí 285 00:09:32,019 --> 00:09:34,779 Y no obstante yo lo use como figura 286 00:09:34,779 --> 00:09:36,200 Entonces F dirá 287 00:09:36,200 --> 00:09:37,080 ¿Qué métodos tendrá? 288 00:09:37,340 --> 00:09:38,960 Pues F tendrá el método dibuja 289 00:09:38,960 --> 00:09:42,580 Pero por eso que es el polimorfismo 290 00:09:42,580 --> 00:09:43,480 Que veremos dentro de un rato 291 00:09:43,480 --> 00:09:45,399 Pero por esa funcionalidad 292 00:09:45,399 --> 00:09:46,559 Que hemos visto en Java 293 00:09:46,559 --> 00:09:48,159 Que siempre se utiliza el método 294 00:09:48,159 --> 00:09:50,080 Más específico a la instancia 295 00:09:50,080 --> 00:09:52,480 Java no va a usar 296 00:09:52,480 --> 00:09:53,080 El dibujar 297 00:09:53,259 --> 00:09:53,779 De figura 298 00:09:53,779 --> 00:09:54,659 Que sería abstracto 299 00:09:54,659 --> 00:09:55,379 Y no existiría 300 00:09:55,379 --> 00:09:57,519 Va a utilizar el dibujar de rectángulo 301 00:09:57,519 --> 00:10:00,059 Porque tú dentro de esta referencia figura 302 00:10:00,059 --> 00:10:02,200 Tienes un objeto rectángulo 303 00:10:02,200 --> 00:10:03,759 La instancia de rectángulo 304 00:10:03,759 --> 00:10:06,679 Entonces usas el método más específico 305 00:10:06,679 --> 00:10:08,980 La sobrescriptura más específica 306 00:10:08,980 --> 00:10:09,720 Para ese método 307 00:10:09,720 --> 00:10:10,899 O sea este 308 00:10:10,899 --> 00:10:13,220 Que no es abstracto 309 00:10:13,220 --> 00:10:17,240 Si también rectángulo fuera abstracto 310 00:10:17,240 --> 00:10:19,519 No podrías hacer new rectángulo 311 00:10:19,519 --> 00:10:22,179 ¿Sí? 312 00:10:23,259 --> 00:10:28,319 ¿Qué es el método polimorfismo? 313 00:10:28,319 --> 00:10:28,559 ¿Vale? 314 00:10:28,879 --> 00:10:30,460 El polimorfismo es el concepto 315 00:10:30,460 --> 00:10:32,600 Que dos métodos son polimórficos 316 00:10:32,600 --> 00:10:35,080 Si con el mismo nombre 317 00:10:35,080 --> 00:10:36,759 Hacen funciones distintas 318 00:10:36,759 --> 00:10:39,539 Aunque similares en objetos distintos 319 00:10:39,539 --> 00:10:40,700 Es el concepto de 320 00:10:40,700 --> 00:10:41,819 Yo tengo el método 321 00:10:41,819 --> 00:10:44,740 Calcular área 322 00:10:44,740 --> 00:10:47,799 Y este método hace cosas parecidas 323 00:10:47,799 --> 00:10:48,919 Porque es calcular el área 324 00:10:48,919 --> 00:10:51,879 Pero de forma distinta en objetos distintos 325 00:10:51,879 --> 00:10:53,220 No es lo mismo 326 00:10:53,220 --> 00:10:54,519 Calcular el área del cuadrado 327 00:10:54,519 --> 00:10:55,980 Que calcular el área del triángulo 328 00:10:55,980 --> 00:10:57,399 Que calcular el área de otra cosa 329 00:10:57,399 --> 00:10:58,080 ¿Vale? 330 00:10:58,399 --> 00:11:01,259 Entonces cuando yo luego pillo un objeto 331 00:11:01,259 --> 00:11:03,040 Y le digo calcula tu área 332 00:11:03,040 --> 00:11:05,580 El polimorfismo es lo que me permite 333 00:11:05,580 --> 00:11:07,800 Seleccionar el método 334 00:11:07,800 --> 00:11:08,820 Más 335 00:11:08,820 --> 00:11:12,180 Concreto para esa instancia 336 00:11:12,180 --> 00:11:13,120 ¿Sí? 337 00:11:13,399 --> 00:11:15,759 Que va de la mano con las clases abstractas 338 00:11:15,759 --> 00:11:17,040 Por esta razón de aquí 339 00:11:17,040 --> 00:11:19,200 Figura 340 00:11:19,200 --> 00:11:21,320 Me está diciendo que existe dibuja 341 00:11:21,320 --> 00:11:21,779 ¿Vale? 342 00:11:21,779 --> 00:11:22,980 Luego yo tengo rectángulo 343 00:11:23,220 --> 00:11:24,360 Con dibuja 344 00:11:24,360 --> 00:11:25,980 Y círculo con dibuja 345 00:11:25,980 --> 00:11:28,420 Y dependiendo de si la instancia 346 00:11:28,420 --> 00:11:29,080 Que tengo 347 00:11:29,080 --> 00:11:30,240 Que estoy trabajando 348 00:11:30,240 --> 00:11:32,740 Es una instancia de rectángulo 349 00:11:32,740 --> 00:11:34,139 O una instancia de círculo 350 00:11:34,139 --> 00:11:36,560 Utilizaré este dibujo de aquí 351 00:11:36,560 --> 00:11:37,680 Esta implementación de aquí 352 00:11:37,680 --> 00:11:39,200 O esta implementación de aquí 353 00:11:39,200 --> 00:11:41,960 Y eso lo hace de forma automática Java 354 00:11:41,960 --> 00:11:45,340 Java va a pillar la referencia 355 00:11:45,340 --> 00:11:46,519 ¿Vale? 356 00:11:46,639 --> 00:11:49,540 En este caso ignora el tipo de la referencia 357 00:11:49,540 --> 00:11:51,019 Lo único que mira para el tipo de referencia 358 00:11:51,019 --> 00:11:53,019 Es a ver qué método puede utilizarla 359 00:11:53,220 --> 00:11:54,259 Utilizar 360 00:11:54,259 --> 00:11:56,360 Es lo que hemos hecho antes con 361 00:11:56,360 --> 00:11:57,899 Con triángulo ¿No? 362 00:11:58,080 --> 00:12:00,879 Hemos visto que si yo pillaba la figura geométrica 363 00:12:00,879 --> 00:12:02,720 Pues no me daba el método 364 00:12:02,720 --> 00:12:04,139 Que solo existía en 365 00:12:04,139 --> 00:12:05,940 En triángulo 366 00:12:05,940 --> 00:12:06,560 ¿Os acordáis? 367 00:12:08,040 --> 00:12:09,259 Sin embargo 368 00:12:09,259 --> 00:12:11,360 F sí que tiene dibuja 369 00:12:11,360 --> 00:12:12,840 De forma abstracta 370 00:12:12,840 --> 00:12:14,300 Pero por polimorfismo 371 00:12:14,300 --> 00:12:16,920 Cuando se va a ejecutar 372 00:12:16,920 --> 00:12:20,399 Este F.dibuja 373 00:12:20,399 --> 00:12:22,440 Él elegirá 374 00:12:22,440 --> 00:12:23,200 Cual es la forma de dibujar 375 00:12:23,220 --> 00:12:25,340 El método digamos 376 00:12:25,340 --> 00:12:26,580 Más apropiados 377 00:12:26,580 --> 00:12:30,220 En base al tipo de la instancia 378 00:12:30,220 --> 00:12:31,960 No al tipo de la referencia 379 00:12:31,960 --> 00:12:33,220 ¿Entendéis? 380 00:12:37,060 --> 00:12:37,580 Vale 381 00:12:37,580 --> 00:12:38,899 Un ejemplo de polimorfismo 382 00:12:38,899 --> 00:12:40,100 Es el método calcular 383 00:12:40,100 --> 00:12:41,600 De rectángulo de círculo 384 00:12:41,600 --> 00:12:41,840 ¿Vale? 385 00:12:42,040 --> 00:12:47,180 Si hablamos de clases 386 00:12:47,180 --> 00:12:49,399 Es lo que nos permite crear una clase 387 00:12:49,399 --> 00:12:50,660 Con la referencia padre 388 00:12:50,660 --> 00:12:51,340 ¿Vale? 389 00:12:51,340 --> 00:12:53,180 Pero que apunta a una clase hija 390 00:12:53,220 --> 00:12:54,340 Esta cosa aquí 391 00:12:54,340 --> 00:12:55,500 En un cierto sentido 392 00:12:55,500 --> 00:12:57,580 Polimorfismo es muchas formas 393 00:12:57,580 --> 00:12:59,600 Muchos aspectos 394 00:12:59,600 --> 00:13:00,399 En un cierto sentido 395 00:13:00,399 --> 00:13:03,259 Y lo que me permite hacer es 396 00:13:03,259 --> 00:13:04,279 Intercambiar 397 00:13:04,279 --> 00:13:05,019 O sea poner 398 00:13:05,019 --> 00:13:07,519 Allá donde debería ir una figura 399 00:13:07,519 --> 00:13:08,879 Otra cosa 400 00:13:08,879 --> 00:13:10,440 Que pero es una figura 401 00:13:10,440 --> 00:13:11,580 ¿Vale? 402 00:13:11,759 --> 00:13:13,060 Lo que me permite decir 403 00:13:13,060 --> 00:13:15,000 Pongo una subclase 404 00:13:15,000 --> 00:13:18,100 Dentro de una referencia superclase 405 00:13:18,100 --> 00:13:19,460 Lo puedo hacer 406 00:13:19,460 --> 00:13:20,740 Porque hay polimorfismo 407 00:13:20,740 --> 00:13:22,860 Porque esta figura 408 00:13:23,220 --> 00:13:28,040 En realidad es una versión más genérica 409 00:13:28,040 --> 00:13:30,820 Más abstracta del rectángulo 410 00:13:30,820 --> 00:13:33,100 Entonces un rectángulo es una figura 411 00:13:33,100 --> 00:13:35,379 Y todo lo que puede hacer sobre una figura 412 00:13:35,379 --> 00:13:36,960 Lo puede hacer sobre un rectángulo 413 00:13:36,960 --> 00:13:39,240 El rectángulo puede hacer más cosas 414 00:13:39,240 --> 00:13:40,740 ¿Vale? 415 00:13:41,379 --> 00:13:44,300 Pero estoy seguro que todo lo que hace figura 416 00:13:44,300 --> 00:13:45,160 Lo hace un rectángulo 417 00:13:45,160 --> 00:13:46,779 Porque el rectángulo es una figura 418 00:13:46,779 --> 00:13:48,340 ¿Si? 419 00:13:49,399 --> 00:13:50,779 No va al revés 420 00:13:50,779 --> 00:13:52,580 No puede hacer rectángulo R 421 00:13:52,580 --> 00:13:53,200 Es igual a R 422 00:13:53,220 --> 00:13:53,820 A ningún figura 423 00:13:53,820 --> 00:13:56,200 Porque estaría diciendo que 424 00:13:56,200 --> 00:13:58,759 Puede hacer métodos de rectángulo 425 00:13:58,759 --> 00:14:00,379 Que pero en figura no existe 426 00:14:00,379 --> 00:14:01,899 ¿Me explico? 427 00:14:02,160 --> 00:14:04,279 Hasta si figura no fuera abstracta 428 00:14:04,279 --> 00:14:08,800 Cuando se usa un método sobre un objeto 429 00:14:08,800 --> 00:14:10,940 Se usará el de la clase 430 00:14:10,940 --> 00:14:12,420 La que objeto de instancia 431 00:14:12,420 --> 00:14:12,759 ¿Vale? 432 00:14:13,000 --> 00:14:14,460 O sea lo que decíamos antes 433 00:14:14,460 --> 00:14:17,480 No cuenta la referencia 434 00:14:17,480 --> 00:14:19,460 Más cuenta la instancia que estoy trabajando 435 00:14:19,460 --> 00:14:20,200 ¿Si? 436 00:14:20,200 --> 00:14:23,000 Y usaré el método más específico 437 00:14:23,220 --> 00:14:23,860 Esa instancia 438 00:14:23,860 --> 00:14:26,080 Si se ha sobrescrito en rectángulo 439 00:14:26,080 --> 00:14:27,240 El método que estoy utilizando 440 00:14:27,240 --> 00:14:27,920 Uso S 441 00:14:27,920 --> 00:14:29,440 Si no se ha sobrescrito 442 00:14:29,440 --> 00:14:30,200 Será el de figura 443 00:14:30,200 --> 00:14:31,580 El que está definido en figura 444 00:14:31,580 --> 00:14:33,240 Recordaros que la clase abstracta 445 00:14:33,240 --> 00:14:35,399 Algunos métodos puede implementarlo 446 00:14:35,399 --> 00:14:37,759 Seguramente 447 00:14:37,759 --> 00:14:40,899 Si el método en figura es abstracto 448 00:14:40,899 --> 00:14:44,080 En rectángulo he tenido que sobrescribirlo 449 00:14:44,080 --> 00:14:45,060 Si no me daría error 450 00:14:45,060 --> 00:14:48,000 Entonces usaré siempre el de rectángulo 451 00:14:48,000 --> 00:14:51,360 Si pero el método en figura no es abstracto 452 00:14:51,360 --> 00:14:53,080 Pues si no lo he sobrescrito 453 00:14:53,220 --> 00:14:55,180 En rectángulo usaré el de figura 454 00:14:55,180 --> 00:14:58,120 Si si lo he sobrescrito en rectángulo 455 00:14:58,120 --> 00:15:00,820 Pues entonces usaré el de rectángulo 456 00:15:00,820 --> 00:15:02,120 ¿Dudas? 457 00:15:05,860 --> 00:15:06,540 Vale 458 00:15:06,540 --> 00:15:10,060 Podemos usar la superclase como parámetro formal 459 00:15:10,060 --> 00:15:12,120 Y luego usar el método apropiado 460 00:15:12,120 --> 00:15:13,940 Basándonos sobre el objeto pasado 461 00:15:13,940 --> 00:15:14,860 Como parámetro actual 462 00:15:14,860 --> 00:15:15,320 ¿Vale? 463 00:15:15,800 --> 00:15:16,279 Es decir 464 00:15:16,279 --> 00:15:19,960 Puedo utilizar figura como parámetro formal 465 00:15:19,960 --> 00:15:20,600 Una relación 466 00:15:20,600 --> 00:15:22,460 Lo que viene a decir 467 00:15:22,460 --> 00:15:23,200 Lo que acabamos de decir 468 00:15:23,220 --> 00:15:23,840 Otra vez 469 00:15:23,840 --> 00:15:24,060 ¿Vale? 470 00:15:24,660 --> 00:15:26,720 Sin embargo luego como parámetro actual 471 00:15:26,720 --> 00:15:28,360 Cuando luego se va a utilizar eso 472 00:15:28,360 --> 00:15:29,899 Pues lo que estáis mirando 473 00:15:29,899 --> 00:15:31,379 Es el objeto propio 474 00:15:31,379 --> 00:15:32,440 ¿Sí? 475 00:15:33,899 --> 00:15:35,399 Cuando tenemos que crear un objeto 476 00:15:35,399 --> 00:15:36,240 En una clase de edad 477 00:15:36,240 --> 00:15:38,660 Podemos utilizar como clase referenciada 478 00:15:38,660 --> 00:15:39,940 La del padre o la del hijo 479 00:15:39,940 --> 00:15:40,300 ¿Vale? 480 00:15:40,800 --> 00:15:42,200 Estas tres opciones de aquí 481 00:15:42,200 --> 00:15:43,200 Que son las tres opciones 482 00:15:43,200 --> 00:15:44,220 Que hemos probado antes 483 00:15:44,220 --> 00:15:45,279 Con triángulo 484 00:15:45,279 --> 00:15:46,259 Y 485 00:15:46,259 --> 00:15:48,500 Y figura geométrica 486 00:15:48,500 --> 00:15:48,940 ¿Vale? 487 00:15:49,279 --> 00:15:50,279 En el vídeo anterior 488 00:15:50,279 --> 00:15:50,759 O en 489 00:15:50,759 --> 00:15:51,899 Esta mañana 490 00:15:51,899 --> 00:15:53,200 Antes en la clase secundaria 491 00:15:53,220 --> 00:15:53,740 Anteriores 492 00:15:53,740 --> 00:15:55,740 Pues hemos hecho estas cosas aquí 493 00:15:55,740 --> 00:15:57,259 Utilizando como padre 494 00:15:57,259 --> 00:15:58,620 Figura geométrica 495 00:15:58,620 --> 00:15:59,300 Y como hijo 496 00:15:59,300 --> 00:16:00,220 Triángulo 497 00:16:00,220 --> 00:16:00,820 Entonces 498 00:16:00,820 --> 00:16:01,960 Puedo poner 499 00:16:01,960 --> 00:16:04,500 Una instancia subclase 500 00:16:04,500 --> 00:16:05,639 Dentro de una referencia 501 00:16:05,639 --> 00:16:07,120 Superclase 502 00:16:07,120 --> 00:16:08,060 Se puede hacer 503 00:16:08,060 --> 00:16:09,279 Puedo poner 504 00:16:09,279 --> 00:16:11,879 Una instancia superclase 505 00:16:11,879 --> 00:16:13,940 Dentro de una referencia superclase 506 00:16:13,940 --> 00:16:15,120 Siempre y cuando 507 00:16:15,120 --> 00:16:16,759 La superclase 508 00:16:16,759 --> 00:16:18,740 No sea abstracta 509 00:16:18,740 --> 00:16:20,660 Si padre fuera abstract 510 00:16:20,660 --> 00:16:21,860 Pues no puede hacer ni un padre 511 00:16:23,220 --> 00:16:25,779 Pero por ejemplo nosotros 512 00:16:25,779 --> 00:16:27,300 Cuando hemos empezado al principio 513 00:16:27,300 --> 00:16:28,440 Y no hemos puesto que 514 00:16:28,440 --> 00:16:30,360 Figura geométrica fuera abstracta 515 00:16:30,360 --> 00:16:31,180 Si que lo hemos hecho 516 00:16:31,180 --> 00:16:32,399 Os acordáis que luego 517 00:16:32,399 --> 00:16:34,519 Lo he tenido que borrar del main 518 00:16:34,519 --> 00:16:37,899 Y finalmente puedo poner 519 00:16:37,899 --> 00:16:39,340 Una instancia hijo 520 00:16:39,340 --> 00:16:40,840 Dentro de una referencia hijo 521 00:16:40,840 --> 00:16:41,899 Todas estas tres cosas 522 00:16:41,899 --> 00:16:42,519 Lo puedo hacer 523 00:16:42,519 --> 00:16:43,840 Lo que no puedo hacer 524 00:16:43,840 --> 00:16:45,000 Es la cuarta opción 525 00:16:45,000 --> 00:16:46,519 O sea crear 526 00:16:46,519 --> 00:16:47,860 Un padre 527 00:16:47,860 --> 00:16:49,879 Y ponerlo en una instancia hijo 528 00:16:49,879 --> 00:16:50,820 ¿Vale? 529 00:16:51,180 --> 00:16:52,440 Porque un padre no es un hijo 530 00:16:52,440 --> 00:16:53,200 Un hijo es un padre 531 00:16:53,220 --> 00:16:54,840 ¿Sí? 532 00:16:55,460 --> 00:16:55,960 ¿Dudas? 533 00:16:59,960 --> 00:17:00,480 Vale 534 00:17:00,480 --> 00:17:02,920 Tres formas posibles de instanciarla 535 00:17:02,920 --> 00:17:04,500 Que son las que hemos visto ahora 536 00:17:04,500 --> 00:17:04,660 ¿Vale? 537 00:17:05,440 --> 00:17:05,880 Entonces 538 00:17:05,880 --> 00:17:08,120 Esta de aquí es la más obvia 539 00:17:08,120 --> 00:17:09,019 Tengo un hijo 540 00:17:09,019 --> 00:17:10,100 La pongo en un variable hijo 541 00:17:10,100 --> 00:17:10,480 ¿Vale? 542 00:17:10,880 --> 00:17:13,299 Puedo acceder a todos los métodos del hijo 543 00:17:13,299 --> 00:17:16,339 A todos los métodos del padre 544 00:17:16,339 --> 00:17:19,140 Y si hay métodos sobre escritos 545 00:17:19,140 --> 00:17:21,059 Solo se accede a los del hijo 546 00:17:21,059 --> 00:17:22,120 No del padre 547 00:17:23,220 --> 00:17:25,200 Hasta si hago upcasting 548 00:17:25,200 --> 00:17:27,779 O sea si casteo a la del padre 549 00:17:27,779 --> 00:17:29,740 Lo vimos aquí en un ejemplo anterior 550 00:17:29,740 --> 00:17:31,980 Pues sigo utilizando la del hijo 551 00:17:31,980 --> 00:17:33,500 ¿Sí? 552 00:17:34,880 --> 00:17:36,360 Si hago esta de aquí 553 00:17:36,360 --> 00:17:39,259 Puedo acceder a todos los métodos 554 00:17:39,259 --> 00:17:40,640 Y atributos del padre 555 00:17:40,640 --> 00:17:41,480 ¿Vale? 556 00:17:42,279 --> 00:17:45,059 Pero es imposible acceder a los del hijo 557 00:17:45,059 --> 00:17:47,740 Porque esto no los tiene la parte del hijo 558 00:17:47,740 --> 00:17:48,640 No tiene ni los métodos 559 00:17:48,640 --> 00:17:49,799 Ni los atributos del hijo 560 00:17:49,799 --> 00:17:50,660 ¿Sí? 561 00:17:50,660 --> 00:17:50,720 ¿Vale? 562 00:17:50,720 --> 00:17:54,880 Cuando tengo una cosa de este estilo en vez 563 00:17:54,880 --> 00:17:55,160 ¿Vale? 564 00:17:55,220 --> 00:17:57,100 Hasta aquí es más claro 565 00:17:57,100 --> 00:17:59,420 Porque creo un hijo y lo meto en un hijo 566 00:17:59,420 --> 00:18:00,779 Creo un padre y lo meto en un padre 567 00:18:00,779 --> 00:18:03,759 Cuando hago esto de crear un hijo 568 00:18:03,759 --> 00:18:05,360 Y ponerlo en una instancia 569 00:18:05,360 --> 00:18:06,900 De tipo del padre 570 00:18:06,900 --> 00:18:08,680 De tipo de una superclase 571 00:18:08,680 --> 00:18:10,360 Pues puedo acceder 572 00:18:10,360 --> 00:18:13,039 A los métodos y atributos del padre 573 00:18:13,039 --> 00:18:14,400 No del hijo 574 00:18:14,400 --> 00:18:16,740 Es lo que veíamos antes 575 00:18:16,740 --> 00:18:19,759 Cuando hicimos una instancia FG 576 00:18:19,759 --> 00:18:20,700 Y hacemos FG 577 00:18:20,720 --> 00:18:23,440 Y no aparecía el método del hijo 578 00:18:23,440 --> 00:18:24,519 ¿Sí? 579 00:18:25,220 --> 00:18:27,180 Pero si hay un modo 580 00:18:27,180 --> 00:18:29,339 Para acceder a las cosas del hijo 581 00:18:29,339 --> 00:18:31,079 Que es hacer un downcasting 582 00:18:31,079 --> 00:18:31,799 ¿Vale? 583 00:18:32,120 --> 00:18:35,360 Para poder acceder al del hijo 584 00:18:35,360 --> 00:18:37,279 Tendré que decirle específicamente 585 00:18:37,279 --> 00:18:39,360 Oye, trátame esta variable 586 00:18:39,360 --> 00:18:41,140 Como si fuera de tipo hijo 587 00:18:41,140 --> 00:18:43,339 Y ahora sí que me aparecerán 588 00:18:43,339 --> 00:18:44,600 Los métodos 589 00:18:44,600 --> 00:18:46,220 Y las funciones 590 00:18:46,220 --> 00:18:49,180 Y los atributos del hijo 591 00:18:49,180 --> 00:18:50,500 ¿Sí? 592 00:18:50,720 --> 00:18:52,460 Lo que viene a ser 593 00:18:52,460 --> 00:18:53,779 El downcasting 594 00:18:53,779 --> 00:18:54,720 ¿Sí? 595 00:18:55,200 --> 00:18:56,400 ¿Cómo se hace el downcasting? 596 00:18:56,680 --> 00:18:56,900 Así 597 00:18:56,900 --> 00:19:00,759 Si var h es 598 00:19:00,759 --> 00:19:03,799 De tipo padre 599 00:19:03,799 --> 00:19:06,740 En el momento en que le digo 600 00:19:06,740 --> 00:19:07,339 Hijo 601 00:19:07,339 --> 00:19:08,900 Pues lo que estoy diciendo es 602 00:19:08,900 --> 00:19:10,220 Trátame esto como hijo 603 00:19:10,220 --> 00:19:12,319 Entonces si luego accedo 604 00:19:12,319 --> 00:19:15,100 A ver que hay allí 605 00:19:15,100 --> 00:19:18,100 Pues me saldrán las variables del hijo 606 00:19:18,100 --> 00:19:19,620 Me saldrán los métodos del hijo 607 00:19:20,720 --> 00:19:22,200 ¿Dudas? 608 00:19:24,759 --> 00:19:26,860 Cuidado que si intento hacer esto 609 00:19:26,860 --> 00:19:28,339 Y no puedo hacerlo 610 00:19:28,339 --> 00:19:30,079 Porque no se puede hacer la conversión 611 00:19:30,079 --> 00:19:32,519 Porque el objeto real dentro de esta variable 612 00:19:32,519 --> 00:19:35,539 No es lo que estoy casteando 613 00:19:35,539 --> 00:19:37,240 Pues me salta una excepción 614 00:19:37,240 --> 00:19:38,900 Un error que es la class cast exception 615 00:19:38,900 --> 00:19:40,400 Class cast exception 616 00:19:40,400 --> 00:19:42,700 ¿Dudas? 617 00:19:48,299 --> 00:19:49,900 Si una clase 618 00:19:49,900 --> 00:20:12,480 Que solo tiene métodos abstractos es una cosa un poquito distinta y es una interfaz. Tiene que ser un contrato puro en el que yo digo, mira, yo no te implemento nada, pero si alguien quiere implementar mi interfaz, esto es lo que tiene que hacer. 619 00:20:12,480 --> 00:20:35,720 Y todas las clases del mundo que implementen mi interfaz seguramente podrán hacer estas cosas, podrán tener estos métodos. Esto se usa mucho en términos de cuando hay un sistema muy grande y tengo que dividir el trabajo en varios grupos de trabajo, ¿vale? 620 00:20:35,799 --> 00:20:41,720 Como no puedo yo hacer que un grupo dependa de lo que está desarrollando el otro, le digo, mira, el otro implementa... 621 00:20:42,480 --> 00:20:50,500 El otro implementará esta interfaz. Es decir, que los objetos que están creando el otro grupo podrán hacer esto, esto, esto, esto con estos parámetros. 622 00:20:51,440 --> 00:21:02,559 Ahora tú, en tu parte, en tu módulo, puedes hacer todas las llamadas a objetos de ese tipo con estos métodos porque ellos luego lo implementarán. 623 00:21:02,559 --> 00:21:08,519 Ahora no están implementados, pero ellos sí que lo implementarán. Y te permite organizarse entre el grupo de trabajo. 624 00:21:10,400 --> 00:21:11,559 Pero las interfaces... 625 00:21:11,559 --> 00:21:16,519 Las interfaces las vamos a ver con más detalle la próxima vez, ¿vale? 626 00:21:18,980 --> 00:21:19,679 Y ya está.