1 00:00:00,050 --> 00:00:01,250 ¿A lo que íbamos? 2 00:00:05,490 --> 00:00:06,129 ¡Leche! 3 00:00:06,929 --> 00:00:08,029 ¿Que no sales? 4 00:00:08,349 --> 00:00:08,730 Ah, ahí. 5 00:00:09,230 --> 00:00:10,109 Ah, esto no quería. 6 00:00:16,300 --> 00:00:18,800 Vale, pues siguiente cosita interesante. 7 00:00:19,440 --> 00:00:20,320 De aquí. 8 00:00:22,100 --> 00:00:22,359 Vale. 9 00:00:24,300 --> 00:00:27,140 Bueno, una aplicación son un montón de clases. 10 00:00:27,800 --> 00:00:28,219 ¿Vale? 11 00:00:28,839 --> 00:00:32,740 Las clases inevitablemente se relacionan entre sí. 12 00:00:33,659 --> 00:00:39,100 Una forma de relacionarse ya la hemos visto, ya la hemos usado, 13 00:00:39,579 --> 00:00:43,799 que es la relación que se podría llamar de composición. 14 00:00:44,899 --> 00:00:56,579 Es decir, de hecho, en este mismo ejercicio ya hemos visto que nuestra clase cliente tenía dentro, 15 00:00:57,920 --> 00:01:01,560 en este caso era un array, pero podría ser un único objeto. 16 00:01:01,560 --> 00:01:04,159 entonces ya hemos visto que las clases 17 00:01:04,159 --> 00:01:05,079 relacionan entre sí 18 00:01:05,079 --> 00:01:08,439 una forma de relacionarse es la relación 19 00:01:08,439 --> 00:01:09,760 de composición que es 20 00:01:09,760 --> 00:01:11,939 este objeto 21 00:01:11,939 --> 00:01:13,700 tiene a este otro 22 00:01:13,700 --> 00:01:16,280 esto se traduce en 23 00:01:16,280 --> 00:01:18,439 un cliente 24 00:01:19,019 --> 00:01:20,540 tiene 25 00:01:20,540 --> 00:01:23,719 un pedido 26 00:01:23,719 --> 00:01:26,439 ¿vale? 27 00:01:27,540 --> 00:01:29,599 es la relación de 28 00:01:29,599 --> 00:01:31,019 composición 29 00:01:31,019 --> 00:01:37,090 entre clases, es decir 30 00:01:37,090 --> 00:01:39,170 como resultado de mi diseño 31 00:01:39,170 --> 00:01:40,549 de estudiar yo mi situación 32 00:01:40,549 --> 00:01:42,329 pues he visto que 33 00:01:42,329 --> 00:01:44,590 uno de mis objetos 34 00:01:44,590 --> 00:01:46,810 está contenido dentro del otro 35 00:01:46,810 --> 00:01:49,090 ¿cómo se mapea eso 36 00:01:49,090 --> 00:01:50,969 en la escritura 37 00:01:50,969 --> 00:01:53,170 de mi código? pues que una propiedad 38 00:01:53,170 --> 00:01:54,750 de una clase es 39 00:01:54,750 --> 00:01:57,329 tipo la otra clase 40 00:01:57,329 --> 00:01:58,290 y ya está 41 00:01:58,290 --> 00:02:00,709 y eso no tiene ya para nosotros 42 00:02:00,709 --> 00:02:02,890 a la hora ya de trabajar con ello ningún problema 43 00:02:02,890 --> 00:02:05,230 que quiero yo acceder a los datos 44 00:02:05,230 --> 00:02:07,189 del pedido del cliente C 45 00:02:07,189 --> 00:02:09,590 pues C.P 46 00:02:09,590 --> 00:02:10,650 será su pedido 47 00:02:10,650 --> 00:02:13,050 que además pedido tiene un precio 48 00:02:13,050 --> 00:02:15,430 pues punto precio o punto 49 00:02:15,430 --> 00:02:16,789 el getter, lo que sea 50 00:02:16,789 --> 00:02:19,289 no tiene ningún problema, es lo que hemos estado 51 00:02:19,289 --> 00:02:21,490 usando y esto se puede encadenar 52 00:02:21,490 --> 00:02:23,530 hasta el infinito si precia a su vez 53 00:02:23,530 --> 00:02:25,030 por un objeto de otra clase 54 00:02:25,030 --> 00:02:26,270 y ya está 55 00:02:26,270 --> 00:02:29,310 esa relación es natural, la de que un objeto 56 00:02:29,310 --> 00:02:30,370 tenga otro dentro 57 00:02:30,370 --> 00:02:33,449 y sabemos manejarla. 58 00:02:35,009 --> 00:02:37,370 Bueno, pero hay otra idea en la realidad 59 00:02:37,370 --> 00:02:40,750 que no se puede representar de esta manera, 60 00:02:42,050 --> 00:02:46,349 que necesitaríamos poder representarla también 61 00:02:46,349 --> 00:02:49,629 y que no podemos con lo que sabemos hasta ahora. 62 00:02:51,270 --> 00:02:54,050 Y es la idea de que un objeto puede ser 63 00:02:54,050 --> 00:02:57,949 un caso particular de otro. 64 00:02:57,949 --> 00:03:00,389 a ver, ¿cuándo podemos 65 00:03:00,389 --> 00:03:02,449 necesitar representar 66 00:03:02,449 --> 00:03:04,550 esa idea a nivel de código? representarla 67 00:03:04,550 --> 00:03:06,449 para poder hacer aplicaciones que trabajen 68 00:03:06,449 --> 00:03:08,469 con esa idea y programar, pues por 69 00:03:08,469 --> 00:03:10,129 ejemplo, si usamos 70 00:03:10,129 --> 00:03:11,409 esta misma 71 00:03:11,409 --> 00:03:13,969 este mismo 72 00:03:13,969 --> 00:03:15,889 caso que estamos haciendo 73 00:03:15,889 --> 00:03:18,409 esta misma aplicación que tenemos en la 74 00:03:18,409 --> 00:03:20,050 cabeza ahora mismo de clientes y pedidos 75 00:03:20,050 --> 00:03:22,169 pues nada, mi aplicación ya está hecha, está 76 00:03:22,169 --> 00:03:24,370 funcionando, está todo estupendo ya 77 00:03:24,370 --> 00:03:26,509 ya la tengo ahí, pero de repente 78 00:03:26,509 --> 00:03:28,650 el que usa mi aplicación 79 00:03:28,650 --> 00:03:30,750 y viene y me dice 80 00:03:30,750 --> 00:03:31,110 ¡Ay! 81 00:03:32,870 --> 00:03:34,509 He metido un nuevo 82 00:03:34,509 --> 00:03:36,490 concepto en mi negocio 83 00:03:36,490 --> 00:03:38,590 y el nuevo concepto de mi negocio 84 00:03:38,590 --> 00:03:40,229 es que ahora tengo 85 00:03:40,229 --> 00:03:42,729 clientes especiales, a los que 86 00:03:42,729 --> 00:03:43,949 trato de forma especial 87 00:03:43,949 --> 00:03:46,689 entonces son clientes distintos 88 00:03:46,689 --> 00:03:48,629 una cosa será el cliente normal 89 00:03:48,629 --> 00:03:50,810 el cliente genérico, tengo a mi cliente 90 00:03:50,810 --> 00:03:51,349 genérico 91 00:03:51,349 --> 00:03:56,240 al cliente 92 00:03:56,240 --> 00:03:59,259 tal y como está en la aplicación 93 00:03:59,259 --> 00:04:01,039 pero es que acabo de incorporar 94 00:04:01,039 --> 00:04:03,080 la posibilidad de tener clientes 95 00:04:03,080 --> 00:04:04,919 especiales porque han 96 00:04:04,919 --> 00:04:07,000 acumulado un volumen de compras de no sé qué 97 00:04:07,000 --> 00:04:09,139 y esos clientes los trato 98 00:04:09,139 --> 00:04:10,939 de forma especial porque les mando 99 00:04:10,939 --> 00:04:13,159 una felicitación en navidad y una cesta 100 00:04:13,159 --> 00:04:15,000 de navidad, entonces esos clientes 101 00:04:15,000 --> 00:04:17,139 los tengo que distinguir de los 102 00:04:17,139 --> 00:04:19,379 otros porque necesito 103 00:04:19,379 --> 00:04:20,980 más datos para ellos, pues como 104 00:04:20,980 --> 00:04:22,519 la dirección de su casa 105 00:04:22,519 --> 00:04:25,259 el nombre de su perrito 106 00:04:25,259 --> 00:04:27,160 lo que sea, entonces 107 00:04:27,160 --> 00:04:28,779 uno diría, bueno pues 108 00:04:28,779 --> 00:04:30,199 necesitamos otra clase 109 00:04:30,199 --> 00:04:33,399 porque los clientes especiales 110 00:04:33,399 --> 00:04:35,199 se caracterizan por un conjunto de 111 00:04:35,199 --> 00:04:36,319 propiedades distintas 112 00:04:36,319 --> 00:04:39,279 entonces si de repente me aparece una entidad 113 00:04:39,279 --> 00:04:41,220 que necesita 114 00:04:41,220 --> 00:04:42,899 otras propiedades distintas 115 00:04:42,899 --> 00:04:44,459 pues es otra clase 116 00:04:44,459 --> 00:04:47,139 bueno, vale, pues entonces 117 00:04:47,139 --> 00:04:48,959 podríamos hacer cliente general 118 00:04:48,959 --> 00:04:52,920 y cliente 119 00:04:52,920 --> 00:04:54,720 especial, el cliente 120 00:04:54,720 --> 00:04:55,899 este 121 00:04:55,899 --> 00:04:58,480 esta con sus propiedades 122 00:04:58,480 --> 00:05:00,639 y esta con sus propiedades 123 00:05:00,639 --> 00:05:02,360 y yo hago mi aplicación así 124 00:05:02,360 --> 00:05:04,279 vale, pues ya está 125 00:05:04,279 --> 00:05:05,800 y así puedo tirar mi aplicación 126 00:05:05,800 --> 00:05:08,139 pero a ver, es un poco 127 00:05:08,139 --> 00:05:10,319 absurdo, porque enseguida me doy 128 00:05:10,319 --> 00:05:12,379 cuenta de que estoy duplicando información 129 00:05:12,379 --> 00:05:14,480 porque las propiedades 130 00:05:14,480 --> 00:05:16,000 que tiene aquí el cliente 131 00:05:16,000 --> 00:05:17,879 también las tiene este otro 132 00:05:17,879 --> 00:05:19,860 otra cosa es que tenga más 133 00:05:19,860 --> 00:05:22,379 que además tenga más, pero las que 134 00:05:22,379 --> 00:05:23,300 tiene, él las tiene 135 00:05:23,300 --> 00:05:28,639 Entonces, automáticamente nos damos cuenta de que ahí surge una relación 136 00:05:28,639 --> 00:05:34,519 Que ojalá Java y los lenguajes de programación me permitieran reflejarla 137 00:05:34,519 --> 00:05:37,259 De tal manera que me facilitara la escritura del código 138 00:05:37,259 --> 00:05:39,600 Bueno, pues ¿qué relación ha surgido aquí? 139 00:05:40,519 --> 00:05:44,920 Ha surgido lo que en lenguajes de programación se llama una relación de herencia 140 00:05:44,920 --> 00:05:50,480 la relación de herencia 141 00:05:50,480 --> 00:05:52,740 yo la identifico 142 00:05:52,740 --> 00:05:54,779 cuando puedo enunciar 143 00:05:54,779 --> 00:05:56,899 la siguiente frase 144 00:05:56,899 --> 00:05:58,939 esta clase 145 00:05:58,939 --> 00:06:00,980 es esta otra 146 00:06:00,980 --> 00:06:03,079 cuando a la frase 147 00:06:03,079 --> 00:06:03,740 es 148 00:06:03,740 --> 00:06:06,000 x es y 149 00:06:06,000 --> 00:06:08,379 cuando esta frase tiene sentido 150 00:06:08,379 --> 00:06:10,839 entonces automáticamente aparece 151 00:06:10,839 --> 00:06:12,540 una relación de herencia y eso lo tengo que 152 00:06:12,540 --> 00:06:14,259 transformar en mi código 153 00:06:14,259 --> 00:06:16,680 programando en coherencia con eso 154 00:06:16,680 --> 00:06:19,360 entonces, cliente VIP 155 00:06:19,360 --> 00:06:21,220 es cliente genérico 156 00:06:21,220 --> 00:06:23,939 si, un cliente VIP es cliente genérico 157 00:06:23,939 --> 00:06:26,100 tiene más cosas, pero cliente genérico 158 00:06:26,100 --> 00:06:27,959 es, porque, ¿qué significa ser 159 00:06:27,959 --> 00:06:29,959 cliente genérico? que todo lo que hay aquí 160 00:06:29,959 --> 00:06:32,019 lo tiene, todo lo que hay aquí lo tiene 161 00:06:32,019 --> 00:06:33,600 tiene más cosas, pero 162 00:06:33,600 --> 00:06:35,740 es cliente genérico, ¿no? el ejemplo 163 00:06:35,740 --> 00:06:37,540 típico que 164 00:06:37,540 --> 00:06:39,899 se pone en los libros cuando se estudia esto 165 00:06:39,899 --> 00:06:41,800 es, tú tienes una clase 166 00:06:41,800 --> 00:06:43,500 animal porque trabajas con animales 167 00:06:43,500 --> 00:06:45,839 y de repente tu aplicación se 168 00:06:45,839 --> 00:06:47,839 amplía y quieres tratar de forma diferente a los 169 00:06:47,839 --> 00:06:49,839 gatos, a los perros y a los ratones 170 00:06:49,839 --> 00:06:51,399 pues entonces 171 00:06:51,399 --> 00:06:54,040 tienes la clase 172 00:06:54,040 --> 00:06:55,939 gato, la clase perro, la clase 173 00:06:55,939 --> 00:06:57,879 ratón y tú puedes decir 174 00:06:57,879 --> 00:07:00,139 oye, un gato es un animal 175 00:07:00,139 --> 00:07:01,560 claro que un gato es un animal 176 00:07:01,560 --> 00:07:03,819 con lo cual mi clase gato 177 00:07:03,819 --> 00:07:05,939 es heredera de la 178 00:07:05,939 --> 00:07:07,939 clase animal, que eso se va a 179 00:07:07,939 --> 00:07:09,079 traducir en como programa 180 00:07:09,079 --> 00:07:11,860 mi clase perro es heredera 181 00:07:11,860 --> 00:07:13,980 de la clase animal, porque el perro es 182 00:07:13,980 --> 00:07:15,939 un animal, pues aquí igual 183 00:07:15,939 --> 00:07:17,879 mi cliente VIP 184 00:07:17,879 --> 00:07:20,019 es un cliente genérico, sí, esa frase 185 00:07:20,019 --> 00:07:21,839 tiene sentido, pues entonces 186 00:07:21,839 --> 00:07:23,439 aparece esta relación de herencia 187 00:07:23,439 --> 00:07:26,079 y eso tiene implicaciones a la hora 188 00:07:26,079 --> 00:07:27,899 de la escritura del código que van a 189 00:07:27,899 --> 00:07:29,899 facilitar, van a facilitar 190 00:07:29,899 --> 00:07:31,120 el desarrollo de la aplicación 191 00:07:31,120 --> 00:07:33,899 ese es el objetivo, que la 192 00:07:33,899 --> 00:07:36,060 facilite de alguna manera, porque si no 193 00:07:36,060 --> 00:07:38,079 si 194 00:07:38,079 --> 00:07:39,980 el identificar esta relación luego no tuviera 195 00:07:39,980 --> 00:07:42,199 implicaciones a la hora de desarrollar la aplicación 196 00:07:42,199 --> 00:07:44,500 pues me hago dos clases separadas y ya está 197 00:07:44,500 --> 00:07:46,160 pero claro que las tiene, tiene muchísimas 198 00:07:46,160 --> 00:07:47,620 el identificar, las tiene un montón 199 00:07:47,620 --> 00:07:52,420 entonces esta relación de aquí 200 00:07:52,420 --> 00:07:54,720 lógicamente no es una relación 201 00:07:54,720 --> 00:07:56,639 de herencia, porque uno no puede decir 202 00:07:56,639 --> 00:07:58,379 oye, un pedido 203 00:07:58,379 --> 00:08:00,360 es un cliente, no 204 00:08:00,360 --> 00:08:02,740 un pedido no es un cliente 205 00:08:02,740 --> 00:08:04,620 con lo cual la clase pedido nunca 206 00:08:04,620 --> 00:08:06,000 heredaría de cliente 207 00:08:06,000 --> 00:08:07,639 si yo hago un diseño 208 00:08:07,639 --> 00:08:10,579 en la cual la clase pedido herede 209 00:08:10,579 --> 00:08:12,620 de cliente con las herramientas de herencia 210 00:08:12,620 --> 00:08:14,060 que ahora veremos 211 00:08:14,060 --> 00:08:15,939 y empiezo a tirar de ahí 212 00:08:15,939 --> 00:08:18,480 me monto un lío y hago una aplicación 213 00:08:18,480 --> 00:08:20,579 al final que es que es imposible arreglar eso 214 00:08:20,579 --> 00:08:22,360 porque el diseño inicial ya está mal 215 00:08:22,360 --> 00:08:24,740 porque un pedido no es un cliente 216 00:08:24,740 --> 00:08:26,240 luego la relación no es de herencia 217 00:08:26,240 --> 00:08:28,639 sino que es la de composición 218 00:08:28,639 --> 00:08:30,959 que es la de un cliente 219 00:08:30,959 --> 00:08:32,360 tiene un pedido 220 00:08:32,360 --> 00:08:34,580 que es otra cosa, una cosa es tener 221 00:08:34,580 --> 00:08:35,960 y otra cosa es ser 222 00:08:35,960 --> 00:08:37,600 son dos cosas distintas 223 00:08:37,600 --> 00:08:39,539 entonces cuando yo identifico 224 00:08:39,539 --> 00:08:41,740 X tiene ahí 225 00:08:41,740 --> 00:08:44,279 pues habrá una propiedad de clase Y 226 00:08:44,279 --> 00:08:46,460 dentro de la clase X, que es lo que hemos hecho hasta ahora 227 00:08:46,460 --> 00:08:48,580 si yo identifico 228 00:08:48,580 --> 00:08:49,799 X es Y 229 00:08:49,799 --> 00:08:52,299 pues ahí no, ahí no habrá una propiedad 230 00:08:52,299 --> 00:08:53,840 X dentro de la clase Y 231 00:08:53,840 --> 00:08:56,559 ahí lo que habrá será una relación entre clases X e Y 232 00:08:56,559 --> 00:08:58,600 que me va a facilitar 233 00:08:58,600 --> 00:09:00,000 el trabajo, ¿vale? 234 00:09:00,059 --> 00:09:01,379 pues aquí perfectamente 235 00:09:01,379 --> 00:09:04,440 está esa relación, un cliente Y que es un cliente genérico 236 00:09:04,440 --> 00:09:06,240 ¿vale? 237 00:09:06,379 --> 00:09:07,620 ¿eso en qué se traduce? 238 00:09:07,620 --> 00:09:10,379 escrito así de mala manera, luego ya lo escribimos 239 00:09:10,379 --> 00:09:15,720 ahí mejor. Vale, pues yo aquí tendría 240 00:09:15,720 --> 00:09:22,700 mi clase cliente 241 00:09:22,700 --> 00:09:24,700 genérico 242 00:09:24,700 --> 00:09:26,559 pues con sus propiedades 243 00:09:26,559 --> 00:09:28,159 por ejemplo 244 00:09:28,159 --> 00:09:30,320 vamos a suponer que tiene solamente el NIF 245 00:09:30,320 --> 00:09:32,559 es lo único que nos interesa del cliente genérico 246 00:09:32,559 --> 00:09:34,059 y lo que pueda. Vale 247 00:09:34,059 --> 00:09:36,639 y mi aplicación 248 00:09:36,639 --> 00:09:37,620 ha trabajado con esto 249 00:09:37,620 --> 00:09:40,340 ahora es cuando yo he decidido que la voy a 250 00:09:40,340 --> 00:09:42,440 ampliar porque ahora hay clientes especiales 251 00:09:42,440 --> 00:09:44,279 pues nada 252 00:09:44,279 --> 00:09:46,179 entonces yo añado otra clase 253 00:09:46,179 --> 00:09:48,779 añado mi clase 254 00:09:48,779 --> 00:09:50,879 es que esto pinta cada vez con el color 255 00:09:50,879 --> 00:09:52,299 que le da la gana según la 256 00:09:52,299 --> 00:09:54,440 la inclinación 257 00:09:54,440 --> 00:09:56,179 si está gordo o está delgado 258 00:09:56,179 --> 00:09:58,340 vale, entonces digo 259 00:09:58,340 --> 00:10:00,220 a ver, cliente 260 00:10:00,220 --> 00:10:02,639 es una entidad nueva que ha aparecido 261 00:10:02,639 --> 00:10:04,500 en la ampliación de mi aplicación 262 00:10:04,500 --> 00:10:05,360 una entidad nueva 263 00:10:05,360 --> 00:10:07,940 vale, pero yo me doy cuenta 264 00:10:07,940 --> 00:10:10,320 es lo importante, me doy cuenta de que hay 265 00:10:10,320 --> 00:10:11,419 una relación de herencia 266 00:10:11,419 --> 00:10:13,659 entre esta 267 00:10:13,659 --> 00:10:14,220 y esta 268 00:10:14,220 --> 00:10:17,399 hay una relación de herencia 269 00:10:17,399 --> 00:10:19,679 me acabo de dar cuenta, menos mal que me he dado cuenta 270 00:10:19,679 --> 00:10:21,539 porque gracias a eso la aplicación va a cobrar 271 00:10:21,539 --> 00:10:22,279 mucho más sentido 272 00:10:22,279 --> 00:10:25,659 entonces al darme cuenta que un cliente 273 00:10:25,659 --> 00:10:27,240 VIP es un cliente genérico 274 00:10:27,240 --> 00:10:29,720 ¿qué añado yo? pues añado aquí 275 00:10:29,720 --> 00:10:31,840 antes de la llavecita en este hueco 276 00:10:31,840 --> 00:10:33,740 añado un 277 00:10:33,740 --> 00:10:34,539 extends 278 00:10:34,539 --> 00:10:39,509 cliente G 279 00:10:39,509 --> 00:10:43,159 entonces con esto 280 00:10:43,159 --> 00:10:45,360 hago constar 281 00:10:45,360 --> 00:10:48,200 la relación de herencia entre esta y esta 282 00:10:48,200 --> 00:10:49,100 la hago constar 283 00:10:49,100 --> 00:10:52,480 por traducción de Stents 284 00:10:52,480 --> 00:10:53,940 es lo que por muchas veces 285 00:10:53,940 --> 00:10:56,059 podréis leer cliente VIP 286 00:10:56,059 --> 00:10:58,299 extiende a cliente G 287 00:10:58,299 --> 00:11:00,200 realmente 288 00:11:00,200 --> 00:11:02,600 es cliente VIP hereda de cliente G 289 00:11:02,600 --> 00:11:04,440 pero bueno, por la traducción normal 290 00:11:04,440 --> 00:11:05,980 a veces se dice que cliente VIP 291 00:11:05,980 --> 00:11:08,059 extiende a cliente G, es lo mismo 292 00:11:08,059 --> 00:11:09,080 significa lo mismo 293 00:11:09,080 --> 00:11:10,740 ¿por qué no te he dicho eso? 294 00:11:12,639 --> 00:11:13,740 no, pues que si 295 00:11:13,740 --> 00:11:15,960 veis vídeos, veis cosas, veis rollos, 296 00:11:16,519 --> 00:11:18,200 pues muchas veces, a veces se dice 297 00:11:18,200 --> 00:11:20,340 que esta clase extiende a esta 298 00:11:20,340 --> 00:11:22,039 porque se traduce directamente el 299 00:11:22,039 --> 00:11:24,120 estense. Entonces, cuando se dice 300 00:11:24,120 --> 00:11:26,220 eso, lo que se quiere decir es que esta clase hereda 301 00:11:26,220 --> 00:11:27,740 de esta. Vamos, que es 302 00:11:27,740 --> 00:11:29,860 la idea sinónima. Dime. 303 00:11:35,659 --> 00:11:37,039 No, solo puedes 304 00:11:37,039 --> 00:11:38,539 heredar de una clase. 305 00:11:40,000 --> 00:11:41,080 Claro, sí, 306 00:11:41,200 --> 00:11:43,039 lo que puedes es hacer muchos casos 307 00:11:43,039 --> 00:11:44,779 de clientes. Cliente VIP, 308 00:11:45,399 --> 00:11:46,299 cliente moroso, 309 00:11:47,039 --> 00:11:48,279 también hereda de cliente. 310 00:11:48,759 --> 00:11:50,980 cliente es súper guapo, también hereda 311 00:11:50,980 --> 00:11:52,820 de este, los clientes que quieras, 312 00:11:53,840 --> 00:11:54,799 ¿vale? Pero 313 00:11:54,799 --> 00:11:56,220 cada clase, cada uno, 314 00:11:56,639 --> 00:11:58,059 será un caso particular. 315 00:11:59,159 --> 00:12:00,600 Pero, una 316 00:12:00,600 --> 00:12:02,580 clase solamente 317 00:12:02,580 --> 00:12:04,000 puede heredar de otra. 318 00:12:05,039 --> 00:12:06,679 No puede ser un caso particular 319 00:12:06,679 --> 00:12:08,200 de varias clases distintas. 320 00:12:09,059 --> 00:12:10,500 Lo cual es un problema. 321 00:12:11,120 --> 00:12:12,620 Es un problema, un segundín. 322 00:12:12,720 --> 00:12:14,820 Es un problema porque hay realidades 323 00:12:14,820 --> 00:12:16,720 que yo quiero manejar 324 00:12:16,720 --> 00:12:18,600 en las cuales un concepto puede 325 00:12:18,600 --> 00:12:23,139 ser un caso particular de muchas cosas no por ejemplo yo puedo tener mi aplicación o en mi 326 00:12:23,139 --> 00:12:29,679 taller mecánico pues yo que se tiene la idea de pieza y luego tiene la de pieza pues para hacer 327 00:12:29,679 --> 00:12:34,360 las reparaciones y luego la de producto en la parte de ventas entonces a lo mejor tengo una 328 00:12:34,360 --> 00:12:40,860 rueda y una rueda es una pieza dentro de la parte de mi aplicación que gestiona reparaciones pero 329 00:12:40,860 --> 00:12:45,659 una rueda también es un producto dentro de la parte que gestiona entonces dijo pieza no puede 330 00:12:45,659 --> 00:12:54,100 tener todo lo de perdón rueda no puede tener todo lo de pieza y todo lo de producto pues no no puede 331 00:12:54,100 --> 00:13:03,000 con lo cual no puede con esta relación de herencia pero sí con la siguiente relación que veremos que 332 00:13:03,000 --> 00:13:08,820 es la de implementación pero eso es otra cosa con la adherencia tal cual sólo se puede dar de una 333 00:13:08,820 --> 00:13:09,980 clase. Dime. 334 00:13:10,159 --> 00:13:12,200 ¿Y si haces una clase de cliente VIP? 335 00:13:14,840 --> 00:13:16,639 Puedes. La herencia puede ir hasta el 336 00:13:16,639 --> 00:13:18,600 infinito. Puedes tener nietos, 337 00:13:18,700 --> 00:13:20,360 tratar a nietos. Puede haber 338 00:13:20,360 --> 00:13:22,899 cliente VIP 339 00:13:22,899 --> 00:13:25,019 extranjero. Pues cliente 340 00:13:25,019 --> 00:13:26,720 VIP extranjero hereda 341 00:13:26,720 --> 00:13:28,100 cliente VIP. 342 00:13:28,539 --> 00:13:30,120 Puedes hacer estés cliente VIP. 343 00:13:32,179 --> 00:13:32,700 No. 344 00:13:33,120 --> 00:13:34,000 Lo que no puedes es 345 00:13:34,000 --> 00:13:36,860 una clase, después de su estés 346 00:13:36,860 --> 00:13:38,740 solo puede tener una. Es decir, 347 00:13:38,820 --> 00:13:39,539 Ah, vale, que no puede. 348 00:13:39,539 --> 00:13:39,759 Claro. 349 00:13:39,899 --> 00:13:40,279 Vale, vale. 350 00:13:40,879 --> 00:13:44,779 Es decir, la relación de herencia, tú tienes aquí esta clase C, ¿vale? 351 00:13:45,320 --> 00:13:49,139 De la clase C pueden heredar muchas, C1, C2, C3, 352 00:13:49,320 --> 00:13:54,360 pero cada una de ellas solo puede tener una superclase que se llama. 353 00:13:54,879 --> 00:14:00,059 Esto es lo que se llama superclase y estas las subclases. 354 00:14:01,740 --> 00:14:06,120 Cada una de ellas sería C1 estén C, pero solo estén C, 355 00:14:06,200 --> 00:14:07,419 solo puede heredar de una. 356 00:14:07,419 --> 00:14:10,519 C2 extens C, pero C2 solo de una 357 00:14:10,519 --> 00:14:12,720 C3 extens C, pero C puede tener 358 00:14:12,720 --> 00:14:14,379 tantos hijos como quiera 359 00:14:14,379 --> 00:14:16,480 ¿vale? pero a su vez 360 00:14:16,480 --> 00:14:18,399 cada una de estas, que son subclases 361 00:14:18,399 --> 00:14:19,480 de esta porque heredan 362 00:14:19,480 --> 00:14:22,220 pueden tener otra subclase a su vez 363 00:14:22,220 --> 00:14:24,100 entonces aquí podría haber una C4 364 00:14:24,100 --> 00:14:26,620 y esta C4 extens C2 365 00:14:26,620 --> 00:14:27,779 ningún problema 366 00:14:27,779 --> 00:14:30,159 que a su vez C2 extens C 367 00:14:30,159 --> 00:14:32,379 la relación jerárquica 368 00:14:32,379 --> 00:14:33,500 puede ir 369 00:14:33,500 --> 00:14:36,559 funciona así y se puede extender hasta el infinito 370 00:14:36,559 --> 00:14:38,259 otra cosa es que 371 00:14:38,259 --> 00:14:40,779 tiene sentido hacer una relación de clases 372 00:14:40,779 --> 00:14:43,299 no, porque la idea es 373 00:14:43,299 --> 00:14:45,220 con esto facilitar 374 00:14:45,220 --> 00:14:46,840 el desarrollo, no complicarlo 375 00:14:46,840 --> 00:14:49,460 y normalmente cuando uno hace una aplicación 376 00:14:49,460 --> 00:14:50,480 pues hombre 377 00:14:50,480 --> 00:14:53,139 no está representando algo 378 00:14:53,139 --> 00:14:55,100 tan absolutamente complejo 379 00:14:55,100 --> 00:14:57,360 una relación tan compleja, no hay necesidad 380 00:14:57,360 --> 00:14:57,919 dime 381 00:14:57,919 --> 00:15:01,279 pero la subclase, por ejemplo la C4 382 00:15:01,279 --> 00:15:03,379 ¿le daría también las cosas de la C4? 383 00:15:03,379 --> 00:15:05,159 claro, la C4 384 00:15:05,159 --> 00:15:07,039 heredaba lo de C2, ahora ya vemos en detalle 385 00:15:07,039 --> 00:15:09,039 que se hereda y cómo se hereda, pero vamos 386 00:15:09,039 --> 00:15:11,240 avanzamos, C4 coge 387 00:15:11,240 --> 00:15:13,200 todo lo de C2 más lo añadido 388 00:15:13,200 --> 00:15:15,000 y como C2 ya había 389 00:15:15,000 --> 00:15:17,019 cogido todo lo de C, pues 390 00:15:17,019 --> 00:15:18,779 entonces este a través de su padre 391 00:15:18,779 --> 00:15:19,980 pues coge lo de su abuelo 392 00:15:19,980 --> 00:15:21,879 ¿vale? 393 00:15:30,279 --> 00:15:32,980 Sí, en los diseños 394 00:15:32,980 --> 00:15:35,019 de bases de datos, esta idea 395 00:15:35,019 --> 00:15:36,860 también está, claro 396 00:15:36,860 --> 00:15:38,820 en los modelos de entidad-relación 397 00:15:38,820 --> 00:15:40,980 también está la relación de herencia 398 00:15:40,980 --> 00:15:42,100 ¿no? 399 00:15:49,009 --> 00:15:50,529 vale, pues entonces 400 00:15:50,529 --> 00:15:56,720 entonces yo me he dado cuenta 401 00:15:56,720 --> 00:15:58,720 identificado afortunadamente para 402 00:15:58,720 --> 00:16:01,320 el bien del éxito de mi aplicación 403 00:16:01,320 --> 00:16:03,340 que un cliente 404 00:16:03,340 --> 00:16:04,759 VIP es un cliente genérico 405 00:16:04,759 --> 00:16:06,779 entonces en lugar de hacer una clase para él 406 00:16:06,779 --> 00:16:07,379 de cero 407 00:16:07,379 --> 00:16:10,700 hago un hereda cliente genérico 408 00:16:10,700 --> 00:16:12,659 bueno, ya he puesto el 409 00:16:12,659 --> 00:16:14,799 extens, ahora, ¿qué implicaciones tiene 410 00:16:14,799 --> 00:16:15,980 que yo ya he puesto el extens? 411 00:16:17,179 --> 00:16:18,559 pues las implicaciones que tiene 412 00:16:18,559 --> 00:16:20,679 es que todas las propiedades que estén 413 00:16:20,679 --> 00:16:22,120 aquí, todas 414 00:16:22,120 --> 00:16:24,639 es como si estuvieran aquí 415 00:16:24,639 --> 00:16:26,879 yo no las veo físicamente 416 00:16:26,879 --> 00:16:28,059 ni tengo que escribirlas 417 00:16:28,059 --> 00:16:30,240 pero es que están directamente 418 00:16:30,240 --> 00:16:32,580 ¿vale? no tengo que 419 00:16:32,580 --> 00:16:34,940 escribirlas, todas las propiedades 420 00:16:34,940 --> 00:16:36,720 del cliente genérico están aquí, entonces yo 421 00:16:36,720 --> 00:16:38,159 me limito a escribir 422 00:16:38,159 --> 00:16:40,159 lo único que quiera añadir 423 00:16:40,159 --> 00:16:42,159 pues por ejemplo su dirección postal 424 00:16:42,159 --> 00:16:43,600 para enviarle un regalito 425 00:16:43,600 --> 00:16:46,690 pues ya está 426 00:16:46,690 --> 00:16:48,549 añado lo nuevo 427 00:16:48,549 --> 00:16:50,029 y se acabó 428 00:16:50,029 --> 00:16:58,360 y no solo pasa con las propiedades 429 00:16:58,360 --> 00:17:00,840 que todas tal cual 430 00:17:00,840 --> 00:17:03,100 las que estén aquí es como si estuvieran aquí 431 00:17:03,100 --> 00:17:04,339 ¿vale? 432 00:17:05,619 --> 00:17:07,299 sino que los métodos también 433 00:17:07,299 --> 00:17:09,119 si yo aquí tengo 434 00:17:09,119 --> 00:17:10,500 métodos de cualquier tipo 435 00:17:10,500 --> 00:17:16,960 lo que sea 436 00:17:16,960 --> 00:17:20,019 pues esos métodos 437 00:17:20,019 --> 00:17:21,779 tal cual es como si estuvieran aquí 438 00:17:21,779 --> 00:17:23,759 no tengo que escribirlos, los mismos métodos 439 00:17:23,759 --> 00:17:25,619 es como si se hiciera 440 00:17:25,619 --> 00:17:27,079 un copia y pega 441 00:17:27,079 --> 00:17:29,859 ¿vale? y es realmente 442 00:17:29,859 --> 00:17:31,799 un copia y pega, no es que el 443 00:17:31,799 --> 00:17:33,700 cliente VIP cuando 444 00:17:33,700 --> 00:17:35,579 llame a mostrar o a dirección 445 00:17:35,579 --> 00:17:37,900 esté llamando a mostrar dirección de un cliente 446 00:17:37,900 --> 00:17:39,039 genérico, no, no, no, no 447 00:17:39,039 --> 00:17:41,880 los clientes VIP serán unos objetos cliente VIP 448 00:17:41,880 --> 00:17:43,900 cliente genérico, otros objetos 449 00:17:43,900 --> 00:17:44,460 distintos 450 00:17:44,460 --> 00:17:46,839 lo que pasa es que aquí 451 00:17:46,839 --> 00:17:48,559 es como si hubiéramos hecho un copia y pega 452 00:17:48,559 --> 00:17:50,519 aunque yo no lo vea 453 00:17:50,519 --> 00:17:51,720 ¿vale? 454 00:17:52,880 --> 00:17:55,279 que es lo único que nos hereda 455 00:17:55,279 --> 00:17:58,099 los constructores 456 00:17:58,099 --> 00:18:03,200 este es sus métodos constructores 457 00:18:03,200 --> 00:18:04,539 esto 458 00:18:04,539 --> 00:18:06,420 nos hereda 459 00:18:06,420 --> 00:18:09,380 aquí hay que hacerle sus métodos constructores 460 00:18:09,380 --> 00:18:11,059 específicos o dejar el método 461 00:18:11,059 --> 00:18:12,140 por defecto, lo que sea 462 00:18:12,140 --> 00:18:14,339 el método constructor nos hereda 463 00:18:14,339 --> 00:18:20,670 ¿Y el constructor aquí cómo sería? 464 00:18:20,769 --> 00:18:22,990 ¿Le pasaría los parámetros? ¿Sería un cliente G? 465 00:18:23,329 --> 00:18:24,710 Le tienes que pasar todos 466 00:18:24,710 --> 00:18:26,710 Todos, porque este 467 00:18:26,710 --> 00:18:28,369 Aunque yo solo vea DIR 468 00:18:28,369 --> 00:18:29,490 Este tiene DIR y NIF 469 00:18:29,490 --> 00:18:32,589 Luego a este constructor, si yo quiero hacer el constructor con parámetros 470 00:18:32,589 --> 00:18:34,869 Hay que pasarle todas sus propiedades 471 00:18:34,869 --> 00:18:36,109 Esta, esta, todas 472 00:18:36,109 --> 00:18:38,670 ¿Pero podría tener un constructor que fuese cliente G 473 00:18:38,670 --> 00:18:40,609 Y dirección? Porque digamos que 474 00:18:40,609 --> 00:18:42,349 Tengo un cliente G 475 00:18:42,349 --> 00:18:43,710 Que ha hecho 100 pedidos 476 00:18:43,710 --> 00:18:45,349 A partir de los 100 pedidos se vuelve VIP 477 00:18:45,349 --> 00:18:47,630 No, pero no 478 00:18:47,630 --> 00:18:49,470 Claro, pero tú no puedes 479 00:18:49,470 --> 00:18:51,589 Cambiar el tipo de una variable 480 00:18:51,589 --> 00:18:52,410 Una vez creada 481 00:18:52,410 --> 00:18:55,250 Lo que tendrías que hacer en un caso así es 482 00:18:55,250 --> 00:18:57,150 Ese objeto cliente G 483 00:18:57,150 --> 00:18:59,849 Te crearías un objeto nuevo cliente B 484 00:18:59,849 --> 00:19:01,410 Copiarías los datos 485 00:19:01,410 --> 00:19:02,230 De uno en otro 486 00:19:02,230 --> 00:19:05,210 Y ya está, y ese desaparecería hasta que lo 487 00:19:05,210 --> 00:19:06,150 Haciera el colector de basura 488 00:19:06,150 --> 00:19:08,309 O sea, una variable ya instanciada 489 00:19:08,309 --> 00:19:10,869 Sea entera, sea de un objeto 490 00:19:10,869 --> 00:19:12,430 No puede cambiar su tipo 491 00:19:12,430 --> 00:19:15,250 Entonces, si tú un cliente 492 00:19:15,250 --> 00:19:17,130 Lo has instanciado como cliente genérico 493 00:19:17,130 --> 00:19:18,349 va a ser cliente genérico siempre 494 00:19:18,349 --> 00:19:21,109 si tú los datos de ese cliente 495 00:19:21,109 --> 00:19:22,970 los quieres volcar ahora ya 496 00:19:22,970 --> 00:19:24,849 en un objeto cliente VIP porque ha cambiado 497 00:19:24,849 --> 00:19:27,150 te tienes que instanciar un cliente VIP 498 00:19:27,150 --> 00:19:28,329 volcar en él sus datos 499 00:19:28,329 --> 00:19:31,069 y ya está, y trabajar a partir de ahí 500 00:19:31,069 --> 00:19:31,529 con ese 501 00:19:31,529 --> 00:19:34,309 ¿cómo funcionaría 502 00:19:34,309 --> 00:19:39,839 lo que establece 503 00:19:39,839 --> 00:19:42,160 que pasas de cliente G a cliente VIP? 504 00:19:42,519 --> 00:19:43,339 es que no pasas 505 00:19:43,339 --> 00:19:44,759 no pasas 506 00:19:44,759 --> 00:19:47,579 no pasas, tú tienes 507 00:19:47,579 --> 00:19:49,859 tu aplicación tendrá objetos 508 00:19:49,859 --> 00:19:52,039 cliente genérico y objetos 509 00:19:52,039 --> 00:19:54,279 cliente VIP. Y eso está en infinito. 510 00:19:54,660 --> 00:19:56,140 No se convierte uno a otro. 511 00:19:56,299 --> 00:19:57,859 Pero si un cliente VIP, por ejemplo, 512 00:19:58,480 --> 00:20:00,079 se establece cuando un cliente 513 00:20:00,079 --> 00:20:02,119 ha hecho un 20%... Vale, es justo 514 00:20:02,119 --> 00:20:04,019 lo que está diciendo él. Bueno, pues si tú 515 00:20:04,019 --> 00:20:06,059 ese objeto lo has instanciado como cliente 516 00:20:06,059 --> 00:20:07,920 genérico y a partir 517 00:20:07,920 --> 00:20:10,059 de ese momento quieres que sea cliente VIP, 518 00:20:10,539 --> 00:20:12,099 no puedes cambiar el tipo de dato. 519 00:20:12,420 --> 00:20:14,079 Una variable, sea variable objeto 520 00:20:14,079 --> 00:20:16,119 o variable primitiva, que ya está declarada, 521 00:20:16,880 --> 00:20:17,980 no puede cambiar 522 00:20:17,980 --> 00:20:18,980 el tipo de datos, jamás. 523 00:20:19,759 --> 00:20:21,680 Entonces, tendrías que crearte un objeto 524 00:20:21,680 --> 00:20:24,119 cliente VIP, volcar los datos 525 00:20:24,119 --> 00:20:25,900 de uno en otro y trabajar a partir de él 526 00:20:25,900 --> 00:20:27,079 con él, ¿vale? 527 00:20:28,339 --> 00:20:29,519 Entonces, la pregunta, 528 00:20:29,740 --> 00:20:31,960 antes de ver ya los detalles de la aprobación de todo esto, 529 00:20:32,680 --> 00:20:33,460 la pregunta 530 00:20:33,460 --> 00:20:35,519 interesante de esto es, 531 00:20:36,240 --> 00:20:38,079 aparte de para ahorrarme el copia 532 00:20:38,079 --> 00:20:40,019 y pega, que tampoco es que me ahorre 533 00:20:40,019 --> 00:20:41,240 tanto un copia y pega, 534 00:20:42,200 --> 00:20:43,940 ¿qué ventaja saco de esto? 535 00:20:45,119 --> 00:20:46,099 Pues, sacamos 536 00:20:46,099 --> 00:20:47,480 una ventaja enorme. 537 00:20:47,980 --> 00:20:49,799 Es que es el núcleo, en realidad, 538 00:20:49,920 --> 00:20:50,619 de la programación. 539 00:20:51,380 --> 00:20:52,259 Una ventaja enorme. 540 00:20:52,579 --> 00:20:52,980 ¿Eh? 541 00:20:55,480 --> 00:20:57,799 No, ahorramos memoria porque los objetos son los mismos. 542 00:21:06,359 --> 00:21:08,160 ¿Cómo que tienes nulo en 50 minutos? 543 00:21:11,059 --> 00:21:13,220 A ver, pero los objetos que tienes en memoria 544 00:21:13,220 --> 00:21:14,299 son los mismos. 545 00:21:15,640 --> 00:21:17,319 Tú es que esto lo puedes ver 546 00:21:17,319 --> 00:21:19,339 como si hubieras hecho dos 547 00:21:19,339 --> 00:21:21,319 clases distintas y en lugar 548 00:21:21,319 --> 00:21:23,319 de hacer herencia, hubieras 549 00:21:23,319 --> 00:21:25,380 hecho un copia y pega. Es lo mismo. 550 00:21:25,900 --> 00:21:27,460 Con lo cual, en memoria, los objetos 551 00:21:27,460 --> 00:21:29,259 que tienes son los mismos. Que tienes 20 BIP 552 00:21:29,259 --> 00:21:31,299 y tres genéricos. Me da igual que 553 00:21:31,299 --> 00:21:33,200 a la hora de declarar el código yo haya puesto 554 00:21:33,200 --> 00:21:35,420 tendrás tres clientes genéricos, 555 00:21:35,519 --> 00:21:37,339 tres BIP. Los objetos son los mismos. 556 00:21:37,859 --> 00:21:39,180 O sea, no ahorras nada de memoria. 557 00:21:39,319 --> 00:21:39,799 No ahorras nada. 558 00:21:42,140 --> 00:21:43,480 No, los dibujos que tienes son los mismos. 559 00:21:44,059 --> 00:21:45,200 Lo que pasa es que tú no los has 560 00:21:45,200 --> 00:21:46,539 escrito aquí físicamente. 561 00:21:47,319 --> 00:21:53,279 Pero cliente VIP, o sea, no es que cliente VIP esté apuntando a los de un cliente genérico, no. 562 00:21:53,859 --> 00:21:55,079 Son dos objetos distintos. 563 00:21:55,619 --> 00:22:01,559 Cuando tú instancias un cliente VIP, instanciarás una cosa con sus dos campos. 564 00:22:02,160 --> 00:22:04,240 Como si hubieras puesto aquí string if igual. 565 00:22:04,700 --> 00:22:08,519 Cuando instancias cliente genérico, instanciarás una con un campo. 566 00:22:08,960 --> 00:22:11,579 Que ahora instancias otro cliente VIP, otro con dos campos. 567 00:22:11,680 --> 00:22:13,759 O sea, no estás ganando nada en cuanto a memoria. 568 00:22:13,759 --> 00:22:16,880 No, pero me refiero, o sea, como directamente. 569 00:22:19,140 --> 00:22:32,460 ¿Cómo que no? Ah, vale, ya te entiendo. Claro, que si todos los hiciéramos así, porque no tuviéramos esta, habría un montón de objetos en los cuales este campo no serviría para nada. 570 00:22:32,460 --> 00:22:45,500 Claro, para optimizar el diseño, claro, lógicamente. Para optimizar un poquito, sí. Pero sí, no estaba pensando en eso. Por supuesto, una herramienta es, hago un diseño más fiel a la realidad, lógicamente. 571 00:22:45,500 --> 00:22:47,240 a un diseño más fiel 572 00:22:47,240 --> 00:22:49,640 pero me estaba refiriendo a otra cosa 573 00:22:49,640 --> 00:22:52,059 silencio y nos vamos 574 00:22:52,059 --> 00:22:53,740 me refería a 575 00:22:53,740 --> 00:22:56,339 si resulta que esta clase 576 00:22:56,339 --> 00:22:57,319 hereda de esta otra 577 00:22:57,319 --> 00:22:59,660 ahora yo ya me pongo a hacer mi aplicación 578 00:22:59,660 --> 00:23:02,480 mi aplicación va a trabajar con clientes 579 00:23:02,480 --> 00:23:03,980 entonces 580 00:23:03,980 --> 00:23:12,009 vale, mi aplicación va a trabajar 581 00:23:12,009 --> 00:23:14,049 con clientes, entonces ahora uno diría 582 00:23:14,049 --> 00:23:15,710 uff, que rollo 583 00:23:15,710 --> 00:23:17,549 ahora tengo dos tipos de clientes 584 00:23:17,549 --> 00:23:19,430 tan rollo, ves que se duerme 585 00:23:19,430 --> 00:23:21,670 vale, uno diría, ¿qué rollo? 586 00:23:21,750 --> 00:23:23,109 tengo dos tipos de clientes 587 00:23:23,109 --> 00:23:25,049 voy a tener que hacerme 588 00:23:25,049 --> 00:23:27,569 dos arrays 589 00:23:27,569 --> 00:23:31,990 un array clientes 590 00:23:31,990 --> 00:23:33,789 G con mis 591 00:23:33,789 --> 00:23:36,349 clientes genéricos 592 00:23:36,349 --> 00:23:37,630 y menudo rollo 593 00:23:37,630 --> 00:23:39,390 otro array 594 00:23:39,390 --> 00:23:41,029 clientes B 595 00:23:41,029 --> 00:23:43,490 con mis clientes normales 596 00:23:43,490 --> 00:23:44,869 entonces diríais, pues 597 00:23:44,869 --> 00:23:48,150 solamente por evitarme un copia y pega 598 00:23:48,150 --> 00:23:50,109 a la hora de escribir código, ya ves 599 00:23:50,109 --> 00:23:51,930 tu que tontería, he complicado 600 00:23:51,930 --> 00:23:54,329 la aplicación porque tengo dos datos en paralelo 601 00:23:54,329 --> 00:23:56,269 los que son así y los que son así 602 00:23:56,269 --> 00:23:58,150 habrá algunos que estarán 603 00:23:58,150 --> 00:23:59,569 instanciados como este 604 00:23:59,569 --> 00:24:01,910 y habrá otros que estarán instanciados como este 605 00:24:01,910 --> 00:24:04,210 entonces, menudo 606 00:24:04,210 --> 00:24:05,569 rollo, pues 607 00:24:05,569 --> 00:24:08,309 no, porque gracias a que 608 00:24:08,309 --> 00:24:10,190 esta clase hereda 609 00:24:10,190 --> 00:24:11,009 de esta otra 610 00:24:11,009 --> 00:24:14,410 objetos de la clase 611 00:24:14,410 --> 00:24:15,369 cliente VIP 612 00:24:15,369 --> 00:24:19,190 se pueden guardar en referencias 613 00:24:19,190 --> 00:24:21,269 de la clase cliente G 614 00:24:21,269 --> 00:24:22,690 es decir 615 00:24:22,690 --> 00:24:25,490 y este es el núcleo en realidad 616 00:24:25,490 --> 00:24:27,589 de la programación orientada a objetos 617 00:24:27,589 --> 00:24:31,430 en una referencia de tipo cliente G 618 00:24:31,430 --> 00:24:33,369 y eso ahora lo vemos 619 00:24:33,369 --> 00:24:35,410 en detalle 620 00:24:35,410 --> 00:24:42,549 en una referencia de tipo clientes G 621 00:24:42,549 --> 00:24:44,509 yo por supuesto 622 00:24:44,509 --> 00:24:47,089 como hemos visto hasta ahora 623 00:24:47,089 --> 00:24:50,309 yo me puedo hacer un cliente G, está claro 624 00:24:50,309 --> 00:24:51,569 esto es lo que hemos visto 625 00:24:51,569 --> 00:24:54,410 pero al heredar cliente B de cliente G 626 00:24:54,410 --> 00:24:58,390 en un tipo de dato o referencia 627 00:24:58,390 --> 00:24:59,730 de tipo clientes G 628 00:24:59,730 --> 00:25:01,589 también 629 00:25:01,589 --> 00:25:03,849 puedo guardar, si quiero 630 00:25:03,849 --> 00:25:05,609 un objeto 631 00:25:05,609 --> 00:25:08,289 instanciado como cualquiera 632 00:25:08,289 --> 00:25:09,410 de sus herederos 633 00:25:09,410 --> 00:25:15,960 es decir, esto también lo puedo 634 00:25:15,960 --> 00:25:17,799 hacer, porque esta clase 635 00:25:17,799 --> 00:25:19,799 hereda de esta 636 00:25:19,799 --> 00:25:23,289 entonces 637 00:25:23,289 --> 00:25:26,269 esa es la potencia que tiene 638 00:25:26,269 --> 00:25:27,809 y de esta tontería 639 00:25:27,809 --> 00:25:30,309 ha surgido todo el mundo 640 00:25:30,309 --> 00:25:31,410 que ha permitido 641 00:25:31,410 --> 00:25:34,549 que la programación de entradas de objetos 642 00:25:34,549 --> 00:25:35,829 haya triunfado 643 00:25:35,829 --> 00:25:36,809 cosa que 644 00:25:36,809 --> 00:25:38,930 tiene menos implicaciones 645 00:25:38,930 --> 00:25:40,890 entonces, ¿qué significa esto? 646 00:25:41,990 --> 00:25:43,609 ¿este objeto cómo se ha creado? 647 00:25:43,710 --> 00:25:45,049 como cliente VIP, está claro 648 00:25:45,049 --> 00:25:46,650 porque su NEO es cliente VIP 649 00:25:46,650 --> 00:25:49,029 con lo cual tiene sus dos propiedades 650 00:25:49,029 --> 00:25:51,049 este no, este se ha creado 651 00:25:51,049 --> 00:25:53,109 como cliente genérico, luego solo tiene una 652 00:25:53,109 --> 00:25:54,450 pero 653 00:25:54,450 --> 00:25:57,230 la referencia 654 00:25:57,230 --> 00:25:58,089 que lo apunta 655 00:25:58,089 --> 00:26:01,130 la referencia que lo apunta como está declarado 656 00:26:01,130 --> 00:26:02,710 en ambos casos 657 00:26:02,710 --> 00:26:05,029 puede ser esta, ¿por qué? 658 00:26:05,529 --> 00:26:07,210 porque esta hereda de esta 659 00:26:07,210 --> 00:26:09,410 otra, entonces esto se me permite 660 00:26:09,410 --> 00:26:11,150 se me permite 661 00:26:11,150 --> 00:26:13,289 aunque el objeto 662 00:26:13,289 --> 00:26:13,890 sea así 663 00:26:13,890 --> 00:26:17,089 vale, pues eso 664 00:26:17,089 --> 00:26:19,069 que me permite que yo 665 00:26:19,069 --> 00:26:21,210 declaro mi variable o mi 666 00:26:21,210 --> 00:26:23,069 array, depende de lo... Y luego 667 00:26:23,069 --> 00:26:25,150 ya, a la hora de crear los 668 00:26:25,150 --> 00:26:27,390 clientes, puedo decidir 669 00:26:27,390 --> 00:26:29,369 si es VIP, si es genérico, 670 00:26:29,490 --> 00:26:30,990 me da igual. La referencia 671 00:26:30,990 --> 00:26:32,349 es de la superclase. 672 00:26:32,910 --> 00:26:34,890 La referencia es de la superclase. 673 00:26:35,670 --> 00:26:37,029 Luego, el objeto en 674 00:26:37,029 --> 00:26:39,049 concreto puede ser 675 00:26:39,049 --> 00:26:40,890 de cualquiera de las subclases. 676 00:26:41,250 --> 00:26:43,009 De cualquiera. Entonces, yo 677 00:26:43,009 --> 00:26:45,589 tengo un único array de clientes genéricos 678 00:26:45,589 --> 00:26:46,970 y luego, a la hora de ir 679 00:26:46,970 --> 00:26:48,869 metiendo cada dato, meto el que me dé 680 00:26:48,869 --> 00:26:50,829 la gana, pero todos metidos 681 00:26:50,829 --> 00:26:52,650 en un único array. 682 00:26:53,509 --> 00:26:57,740 ¿Vale? Entonces, 683 00:26:57,900 --> 00:26:58,900 repito y ya nos vamos. 684 00:27:00,039 --> 00:27:01,460 Cuando tú tienes una variable, 685 00:27:01,660 --> 00:27:03,619 una referencia, recordad que 686 00:27:03,619 --> 00:27:05,259 las variables de objeto le llamamos referencias, 687 00:27:06,079 --> 00:27:07,539 declarada como 688 00:27:07,539 --> 00:27:08,200 una clase, 689 00:27:09,200 --> 00:27:11,839 puedes meter objetos en ella. 690 00:27:12,819 --> 00:27:13,720 Tanto de esa 691 00:27:13,720 --> 00:27:15,559 clase, por supuesto, como 692 00:27:15,559 --> 00:27:17,799 de cualquiera de las subclases que tenga. 693 00:27:18,059 --> 00:27:18,880 De cualquiera. 694 00:27:20,200 --> 00:27:21,319 De un array de animales. 695 00:27:21,660 --> 00:27:43,420 Puedes meter perros, gatos, leones, lo que te dé la gana, siempre y cuando todos ellos se hereden, ¿vale? En una referencia o clase de vivienda puedes meter chalet, piso, ático, sótano, lo que quieras, ¿vale? 696 00:27:43,420 --> 00:27:52,140 Bajo el paraguas de una idea, bajo el paraguas de una idea, puedes meter todos los casos diferentes que quieras, ¿vale? 697 00:27:53,299 --> 00:27:59,519 No tienes que hacer variables separadas para cada uno o arrays separados para cada uno porque sería una locura. 698 00:28:01,440 --> 00:28:08,779 Realmente, para cada idea hay muchos casos concretos, pues de eso se trata, de hacer un paraguas y luego yo meto cada caso, 699 00:28:09,559 --> 00:28:12,299 meto dentro de ese paraguas todos los casos particulares. 700 00:28:15,299 --> 00:28:18,640 bueno, pues ahora luego después vemos 701 00:28:18,640 --> 00:28:20,599 todo esto 702 00:28:20,599 --> 00:28:21,599 porque es interesante