1 00:00:00,500 --> 00:00:20,420 A ver, que estábamos aquí, estábamos aquí. Una forma es poner el get, pero a ver, esto en realidad también es un poco feo, porque a lo mejor en mi entidad cliente, pues yo no quiero hacer los dos públicos, porque solamente quiero dar permiso de lectura para las clases que están fuera, etc. 2 00:00:20,420 --> 00:00:22,019 entonces la heredera 3 00:00:22,019 --> 00:00:24,660 es que es una clase especial, la quiero distinguir 4 00:00:24,660 --> 00:00:26,620 de las demás, entonces que la 5 00:00:26,620 --> 00:00:28,760 heredera entre por el mismo camino 6 00:00:28,760 --> 00:00:30,940 que entran los extraños 7 00:00:30,940 --> 00:00:32,439 pues hombre es feo 8 00:00:32,439 --> 00:00:34,640 más que nada porque a lo mejor yo ni siquiera 9 00:00:34,640 --> 00:00:36,219 he habilitado los dos caminos 10 00:00:36,219 --> 00:00:38,560 a lo mejor he habilitado solamente el get 11 00:00:38,560 --> 00:00:39,859 y el set no 12 00:00:39,859 --> 00:00:42,679 o he habilitado 13 00:00:42,679 --> 00:00:44,619 solamente el get de nombre pero el de nid 14 00:00:44,619 --> 00:00:46,359 no, entonces 15 00:00:46,359 --> 00:00:48,719 ¿cuál es la alternativa habitual? 16 00:00:48,719 --> 00:00:51,939 Pues poner el cuarto 17 00:00:51,939 --> 00:00:53,439 Modificador de datos 18 00:00:53,439 --> 00:00:55,899 Que mencionamos que existía 19 00:00:55,899 --> 00:00:58,020 Pero que dijimos, tiene que ver con la lección y lo dejamos 20 00:00:58,020 --> 00:00:59,200 ¿Qué era? 21 00:00:59,840 --> 00:01:00,640 Nadie habrá tenido 22 00:01:00,640 --> 00:01:03,219 Una visión en la cabeza 23 00:01:03,219 --> 00:01:05,900 Que de repente 24 00:01:05,900 --> 00:01:06,620 Se ha acordado 25 00:01:06,620 --> 00:01:09,319 De hace dos meses que lo mencionamos, ¿verdad? 26 00:01:12,260 --> 00:01:13,799 No, a ver, que era una tontería 27 00:01:13,799 --> 00:01:14,739 ¿Quién se va a acordar de eso? 28 00:01:15,159 --> 00:01:16,700 ¿Os acordáis que mencioné esto? 29 00:01:17,340 --> 00:01:20,219 Y dije, nos falta este modificador de acceso 30 00:01:20,219 --> 00:01:22,700 pero todavía no podemos entender 31 00:01:22,700 --> 00:01:24,439 qué significa, perdón, no es aquí donde quiero 32 00:01:24,439 --> 00:01:26,540 ponerlo, perdón, no era aquí 33 00:01:26,540 --> 00:01:28,659 lo quiero poner 34 00:01:28,659 --> 00:01:30,500 en aquí, es decir 35 00:01:30,500 --> 00:01:32,840 problema que estoy tratando de resolver 36 00:01:32,840 --> 00:01:34,719 esta es la clase 37 00:01:34,719 --> 00:01:36,560 cliente, que está diseñada 38 00:01:36,560 --> 00:01:38,280 como Dios manda 39 00:01:38,280 --> 00:01:40,680 propiedades privadas, get y set 40 00:01:40,680 --> 00:01:42,159 ¿vale? 41 00:01:42,739 --> 00:01:43,980 entonces, ¿qué significa? 42 00:01:44,579 --> 00:01:46,019 que ninguna clase 43 00:01:46,019 --> 00:01:49,000 que no sea cliente puede hacer referencia 44 00:01:49,000 --> 00:01:49,939 a nombre y nif 45 00:01:49,939 --> 00:01:52,719 pero se nos queda una situación absurda 46 00:01:52,719 --> 00:01:53,939 que es la que acabamos de ver 47 00:01:53,939 --> 00:01:56,439 que cliente VIP es una clase 48 00:01:56,439 --> 00:01:57,719 diferente a cliente 49 00:01:57,719 --> 00:02:00,579 pero ella claro que tiene nombre y NIP dentro 50 00:02:00,579 --> 00:02:02,599 los tiene dentro porque los ha heredado 51 00:02:02,599 --> 00:02:04,439 los tiene, pero se da la situación 52 00:02:04,439 --> 00:02:06,379 absurda de que no puede hacer 53 00:02:06,379 --> 00:02:08,400 referencia a ellos, no puede porque hay un 54 00:02:08,400 --> 00:02:10,460 private aquí y el compilador 55 00:02:10,460 --> 00:02:11,340 es muy estricto 56 00:02:11,340 --> 00:02:14,639 bueno pues para eso existe el modificador 57 00:02:14,639 --> 00:02:15,620 protected 58 00:02:15,620 --> 00:02:19,639 y ya es el último modificador de acceso 59 00:02:19,639 --> 00:02:21,819 que es igual 60 00:02:21,819 --> 00:02:23,759 a todos los efectos que private 61 00:02:23,759 --> 00:02:25,780 igual, pero 62 00:02:25,780 --> 00:02:27,139 deja como excepción 63 00:02:27,139 --> 00:02:28,719 a las subclases 64 00:02:28,719 --> 00:02:31,900 luego, con el modificador protected 65 00:02:31,900 --> 00:02:33,620 nadie puede acceder a nombre 66 00:02:33,620 --> 00:02:35,460 inif, salvo 67 00:02:35,460 --> 00:02:36,740 las subclases 68 00:02:36,740 --> 00:02:39,400 con lo cual 69 00:02:39,400 --> 00:02:41,939 tiene todo el sentido, ahora yo ya desde cliente 70 00:02:41,939 --> 00:02:43,740 vip, cuando yo quiera 71 00:02:43,740 --> 00:02:45,280 acceder a mi nombre, que lo tengo 72 00:02:45,280 --> 00:02:46,979 porque lo he heredado, yo tengo mi nombre 73 00:02:46,979 --> 00:02:49,280 ¿vale? pues ya podré 74 00:02:49,280 --> 00:02:52,680 Y cuando yo quiera acceder a mi NIF 75 00:02:52,680 --> 00:02:54,759 Que lo tengo, lo tengo dentro, lo he heredado 76 00:02:54,759 --> 00:02:56,780 Es que forma parte de mi objeto 77 00:02:56,780 --> 00:02:58,280 Pues ya podré 78 00:02:58,280 --> 00:02:59,560 ¿Vale? 79 00:03:10,680 --> 00:03:11,439 Sí, dime 80 00:03:11,439 --> 00:03:15,520 ¿No has dicho tu profe, Diego? 81 00:03:16,520 --> 00:03:17,800 Yo sí que tengo una voz en la cabeza 82 00:03:17,800 --> 00:03:22,020 Lo ha dicho, pero no lo sabe 83 00:03:22,020 --> 00:03:32,240 Bueno, pues esto sería lo más normal 84 00:03:32,240 --> 00:03:37,539 ala pues volvemos 85 00:03:37,539 --> 00:03:38,039 otra vez 86 00:03:38,039 --> 00:03:41,020 entonces este método es un método 87 00:03:41,020 --> 00:03:43,000 que está sobre escrito 88 00:03:43,000 --> 00:03:44,800 es un método sobre escrito 89 00:03:44,800 --> 00:03:47,259 y yo ya lo puedo dejar así 90 00:03:47,259 --> 00:03:48,960 tranquilamente y ya está y ya sabemos 91 00:03:48,960 --> 00:03:50,460 las implicaciones que tiene esto 92 00:03:50,460 --> 00:03:52,819 que cuando desde cualquier sitio 93 00:03:52,819 --> 00:03:54,539 por ejemplo desde este main 94 00:03:54,539 --> 00:03:56,979 yo llame a este se llamará 95 00:03:56,979 --> 00:03:58,340 la versión de cliente 96 00:03:58,340 --> 00:04:00,860 pero sin embargo cuando lo llame 97 00:04:00,860 --> 00:04:02,900 desde C2 se llamará 98 00:04:02,900 --> 00:04:04,280 a la versión de este otro 99 00:04:04,280 --> 00:04:06,639 ya lo sabemos, por eso es un método 100 00:04:06,639 --> 00:04:08,580 polimórfico que tiene diferentes formas 101 00:04:08,580 --> 00:04:11,990 para efectos de 102 00:04:11,990 --> 00:04:13,169 clarificar el código 103 00:04:13,169 --> 00:04:15,990 lo que se suele hacer es incluir 104 00:04:15,990 --> 00:04:18,350 cuando uno sobrescribe un método 105 00:04:18,350 --> 00:04:20,149 como aquí que lo hemos sobrescrito 106 00:04:20,149 --> 00:04:22,089 estaría 107 00:04:22,089 --> 00:04:22,730 estupendo 108 00:04:22,730 --> 00:04:26,110 poner 109 00:04:26,110 --> 00:04:28,110 algo que lo explicara 110 00:04:28,110 --> 00:04:30,069 me diríais 111 00:04:30,069 --> 00:04:31,990 pues un comentario, pues si los comentarios siempre 112 00:04:31,990 --> 00:04:34,149 vienen bien, pero los comentarios son para los humanos 113 00:04:34,149 --> 00:04:36,470 los comentarios luego cuando 114 00:04:36,470 --> 00:04:38,649 las clases se compilan 115 00:04:38,649 --> 00:04:40,970 los comentarios lógicamente desaparecidos son para los humanos 116 00:04:40,970 --> 00:04:42,990 entonces existe otra cosa 117 00:04:42,990 --> 00:04:44,629 que 118 00:04:44,629 --> 00:04:47,050 este año prácticamente lo tendremos que utilizar 119 00:04:47,050 --> 00:04:48,470 pero el año que viene continuamente 120 00:04:48,470 --> 00:04:50,790 pero hay que configurarlo todo, existe otra cosa que se llaman 121 00:04:50,790 --> 00:04:51,889 anotaciones 122 00:04:51,889 --> 00:04:54,970 y las anotaciones no es que sea 123 00:04:54,970 --> 00:04:56,449 no es código que se ejecuta 124 00:04:56,449 --> 00:04:59,110 pero si es información 125 00:04:59,110 --> 00:05:00,550 relacionada con el código 126 00:05:00,550 --> 00:05:03,129 que el compilador tiene en cuenta 127 00:05:03,129 --> 00:05:04,850 vale 128 00:05:04,850 --> 00:05:07,129 y la máquina virtual también tiene en cuenta 129 00:05:07,129 --> 00:05:08,529 para generar ciertas cosas 130 00:05:08,529 --> 00:05:11,209 aunque ahora todavía no podamos 131 00:05:11,209 --> 00:05:12,149 tener ningún ejemplo 132 00:05:12,149 --> 00:05:14,170 y las anotaciones 133 00:05:14,170 --> 00:05:16,910 empiezan por un arroba 134 00:05:16,910 --> 00:05:19,170 y en este caso la anotación 135 00:05:19,170 --> 00:05:20,490 que nos vendría maravillosa 136 00:05:20,490 --> 00:05:22,189 es 137 00:05:22,189 --> 00:05:24,750 uy la he puesto en cliente, perdón 138 00:05:24,750 --> 00:05:26,689 aquí no, control x 139 00:05:26,689 --> 00:05:28,170 aquí 140 00:05:28,170 --> 00:05:29,389 entonces 141 00:05:29,389 --> 00:05:32,589 yo he sobrescrito este método 142 00:05:32,589 --> 00:05:35,370 lo he sobrescrito, este es un método sobrescrito 143 00:05:35,370 --> 00:05:42,060 esto si es un comentario 144 00:05:42,060 --> 00:05:47,160 super clase 145 00:05:47,160 --> 00:05:50,550 vale, pues si además 146 00:05:50,550 --> 00:05:52,110 soy tan hábil y me acuerdo 147 00:05:52,110 --> 00:05:54,310 de avisar 148 00:05:54,310 --> 00:05:56,350 de que este es un método sobrescrito 149 00:05:56,350 --> 00:05:58,569 con esto que es 150 00:05:58,569 --> 00:05:59,610 una anotación 151 00:05:59,610 --> 00:06:02,029 que empieza con un arroba y hay 152 00:06:02,029 --> 00:06:03,829 millones de miles de anotaciones 153 00:06:03,829 --> 00:06:06,389 en particular la anotación que expresa 154 00:06:06,389 --> 00:06:08,709 sobrescritura es overwrite 155 00:06:08,709 --> 00:06:10,170 ¿vale? 156 00:06:10,170 --> 00:06:12,610 Pues si yo me acuerdo de poner la anotación 157 00:06:12,610 --> 00:06:14,290 Diréis, pues ya está, no pasa nada 158 00:06:14,290 --> 00:06:16,769 Hombre, pasa un montón 159 00:06:16,769 --> 00:06:19,250 Es decir, el código funciona exactamente igual 160 00:06:19,250 --> 00:06:20,670 Todo se ejecuta igual 161 00:06:20,670 --> 00:06:21,949 No hay ningún cambio 162 00:06:21,949 --> 00:06:25,670 Pero, ostras, el código es muchísimo mejor 163 00:06:25,670 --> 00:06:26,670 Queda mucho más claro 164 00:06:26,670 --> 00:06:28,329 Este es un método sobrescrito 165 00:06:28,329 --> 00:06:30,089 Entonces yo ya sé 166 00:06:30,089 --> 00:06:33,889 Que esto está ocultando la versión de la superclase 167 00:06:33,889 --> 00:06:35,709 Ya sé eso 168 00:06:35,709 --> 00:06:38,250 Entonces ya tiene cierto interés 169 00:06:38,250 --> 00:06:39,769 ¿Para qué me vale tan bien? 170 00:06:40,170 --> 00:06:44,699 por ejemplo, imaginaos que yo mi intención era 171 00:06:44,699 --> 00:06:47,139 sobre escribir el método, mostrar datos 172 00:06:47,139 --> 00:06:49,079 porque no me gusta la versión de cliente 173 00:06:49,079 --> 00:06:50,639 no me gusta nada esta versión 174 00:06:50,639 --> 00:06:52,740 o más que no me gusta, no me vale 175 00:06:52,740 --> 00:06:55,180 esta no me vale porque se queda corta 176 00:06:55,180 --> 00:06:56,600 entonces yo la sobre escribo 177 00:06:56,600 --> 00:06:58,600 y me equivoco 178 00:06:58,600 --> 00:07:00,920 y pongo una S de más 179 00:07:00,920 --> 00:07:02,579 por poner un ejemplo tonto 180 00:07:02,579 --> 00:07:05,360 pues ahí me quedo tan tranquila 181 00:07:05,360 --> 00:07:07,379 pensando que he sobre escrito el método 182 00:07:07,379 --> 00:07:08,959 y ya está 183 00:07:08,959 --> 00:07:10,060 mi método está sobre escrito 184 00:07:10,060 --> 00:07:12,240 y yo luego cuando yo ofrezca esto 185 00:07:12,240 --> 00:07:14,220 mi main, pues mi main llama 186 00:07:14,220 --> 00:07:15,220 a mostrar datos 187 00:07:15,220 --> 00:07:17,420 y no hay ningún error 188 00:07:17,420 --> 00:07:20,439 claro, no hay ningún error, pero a qué mostrador estará llamando 189 00:07:20,439 --> 00:07:26,160 ahora, al de la superclase 190 00:07:26,160 --> 00:07:27,560 porque no lo ha sobrescrito 191 00:07:27,560 --> 00:07:31,149 es decir, si yo me he equivocado 192 00:07:31,149 --> 00:07:33,329 y me he creado este método con esta otra S 193 00:07:33,329 --> 00:07:35,350 ahora en cliente 194 00:07:35,350 --> 00:07:37,069 tengo dos que están 195 00:07:37,069 --> 00:07:39,589 coexistiendo, el heredado 196 00:07:39,589 --> 00:07:41,629 que yo no lo veo, que es este 197 00:07:41,629 --> 00:07:43,589 el heredado que yo no lo estoy 198 00:07:43,589 --> 00:07:43,930 viendo 199 00:07:43,930 --> 00:07:45,930 pero que está aquí 200 00:07:45,930 --> 00:07:47,649 y este nuevo 201 00:07:47,649 --> 00:07:49,189 que es otro distinto 202 00:07:49,189 --> 00:07:50,930 ¿por qué? porque tiene otro nombre 203 00:07:50,930 --> 00:07:53,410 luego es otro distinto, tiene dos 204 00:07:53,410 --> 00:07:55,750 ¿vale? no es sobrescrito nada 205 00:07:55,750 --> 00:07:58,069 ha hecho otro distinto porque la firma es distinta 206 00:07:58,069 --> 00:07:59,569 en este caso el nombre 207 00:07:59,569 --> 00:08:03,089 entonces, ahora ya 208 00:08:03,089 --> 00:08:04,949 mi clase tiene dos métodos 209 00:08:04,949 --> 00:08:06,790 y cuando yo desde mi main 210 00:08:06,790 --> 00:08:08,970 llame a mostrar datos, estaré llamando 211 00:08:08,970 --> 00:08:10,050 al de la superclase 212 00:08:10,050 --> 00:08:12,990 y si llamara a este otro, que no lo haría 213 00:08:12,990 --> 00:08:14,050 porque se supone que ha sido por 214 00:08:14,050 --> 00:08:16,970 error, ¿vale? 215 00:08:19,199 --> 00:08:20,379 Estaría llamando 216 00:08:20,379 --> 00:08:24,389 al de... 217 00:08:24,389 --> 00:08:26,230 No, bueno, aquí no puedo porque en este ejemplo no puedo. 218 00:08:32,610 --> 00:08:34,450 ¿Vale? Y si llamo a este otro, 219 00:08:35,549 --> 00:08:36,450 estoy llamando al otro. 220 00:08:36,769 --> 00:08:38,350 Es decir, tengo dos versiones. 221 00:08:42,000 --> 00:08:42,779 Esta y esta. 222 00:08:43,399 --> 00:08:44,960 Tengo dos. ¿Vale? 223 00:08:45,080 --> 00:08:47,519 Esta es la heredada y esta es esta otra. 224 00:08:48,340 --> 00:08:49,399 ¿Vale? ¿Pero qué situación 225 00:08:49,399 --> 00:08:51,460 estaba recreando yo? Que yo no 226 00:08:51,460 --> 00:08:53,620 quería esto. Yo no quería esto. Me he equivocado. 227 00:08:53,740 --> 00:08:55,279 Yo creía que estaba sobrescribiendo, 228 00:08:55,279 --> 00:08:56,779 pero me he equivocado y he puesto otra S 229 00:08:56,779 --> 00:08:58,500 y yo tiro con mi aplicación para adelante 230 00:08:58,500 --> 00:08:59,879 con lo cual esto no está 231 00:08:59,879 --> 00:09:02,659 y digo, jolines, pero ¿por qué no funciona? 232 00:09:02,759 --> 00:09:04,860 ¿por qué no funciona? ¿por qué está llamando al de la superclase? 233 00:09:04,940 --> 00:09:06,679 ¿por qué está llamando al de la superclase? ¿por qué no me funciona? 234 00:09:08,259 --> 00:09:08,580 tú no 235 00:09:08,580 --> 00:09:10,500 no es fácil detectar el error, no es fácil 236 00:09:10,500 --> 00:09:12,519 y el error ha sido que no has puesto la 237 00:09:12,519 --> 00:09:15,000 cabecera igual, con lo cual al compilador le da igual 238 00:09:15,000 --> 00:09:16,919 dice, pues será que estás haciendo otro nuevo 239 00:09:16,919 --> 00:09:18,519 al compilador que más le da 240 00:09:18,519 --> 00:09:19,779 será que estás haciendo otro 241 00:09:19,779 --> 00:09:22,820 bueno, pues si nosotros 242 00:09:22,820 --> 00:09:24,799 nos acostumbráramos a poner 243 00:09:24,799 --> 00:09:26,100 la anotación overwrite 244 00:09:26,100 --> 00:09:28,539 en todos los métodos 245 00:09:28,539 --> 00:09:31,059 que nuestra intención es que sean sobrescritos 246 00:09:31,059 --> 00:09:32,799 si nos acostumbráramos 247 00:09:33,539 --> 00:09:34,940 aquí ya 248 00:09:34,940 --> 00:09:36,379 sí que se produce una validación 249 00:09:36,379 --> 00:09:38,740 porque el compilador 250 00:09:38,740 --> 00:09:40,860 dice, ah, que tu 251 00:09:40,860 --> 00:09:42,419 intención con esto 252 00:09:42,419 --> 00:09:44,980 es sobrescribir un método 253 00:09:44,980 --> 00:09:45,539 de arriba 254 00:09:45,539 --> 00:09:48,580 porque has puesto la anotación, entonces se le hace ya una 255 00:09:48,580 --> 00:09:50,500 validación en tiempo de compilación 256 00:09:50,500 --> 00:09:52,740 ah, espérate, que tu intención 257 00:09:52,740 --> 00:09:54,299 era sobrescribir un método de arriba 258 00:09:54,299 --> 00:09:57,200 va y dice, uy, pues mal vas 259 00:09:57,200 --> 00:09:59,340 porque es que arriba no hay ningún método que se llame así 260 00:09:59,340 --> 00:10:01,539 entonces tú ya 261 00:10:01,539 --> 00:10:03,360 puedes detectar 262 00:10:03,360 --> 00:10:04,960 en tiempo de 263 00:10:04,960 --> 00:10:07,200 compilación, puede detectar que te has 264 00:10:07,200 --> 00:10:09,559 equivocado, y dices, pero ¿cómo puede ser? 265 00:10:09,639 --> 00:10:11,019 pero que sí que hay un método que se llama 266 00:10:11,019 --> 00:10:13,120 mostrar datos, ¿por qué no me dejas sobreescribirlo? 267 00:10:13,279 --> 00:10:15,360 ah, vale, es que no lo he 268 00:10:15,360 --> 00:10:22,059 escrito bien, luego 269 00:10:22,059 --> 00:10:23,200 poner esta anotación 270 00:10:23,200 --> 00:10:25,019 no es que sea obligatorio 271 00:10:25,019 --> 00:10:27,799 y el programa va a funcionar exactamente igual 272 00:10:27,799 --> 00:10:30,740 pero me permite detectar en tiempo de escritura 273 00:10:30,740 --> 00:10:32,440 mía de código, me permite detectar 274 00:10:32,440 --> 00:10:34,480 cosas que a lo mejor estoy haciendo mal 275 00:10:34,480 --> 00:10:36,480 por error y que el compilador no se va a enterar 276 00:10:36,480 --> 00:10:38,539 como ese ejemplo que he dicho antes 277 00:10:38,539 --> 00:10:40,220 llamar a esta mal 278 00:10:40,220 --> 00:10:42,620 entonces yo me creo que estoy sobre escribiendo 279 00:10:42,620 --> 00:10:44,440 la de arriba pero estoy 280 00:10:44,440 --> 00:10:46,679 haciendo otro añadido, otro adicional 281 00:10:46,679 --> 00:10:48,440 y luego cuando 282 00:10:48,440 --> 00:10:50,320 llame al de arriba se va a llamar al original 283 00:10:50,320 --> 00:10:52,620 no al sobre escrito, lógicamente porque el sobre escrito 284 00:10:52,620 --> 00:10:53,100 no existe 285 00:10:53,100 --> 00:10:55,460 y esos errores 286 00:10:55,460 --> 00:10:57,559 no que sean errores 287 00:10:57,559 --> 00:10:59,639 Sino que 288 00:10:59,639 --> 00:11:01,419 Hemos hecho mal la aplicación 289 00:11:01,419 --> 00:11:03,460 Con lo cual la aplicación funciona perfectamente 290 00:11:03,460 --> 00:11:05,379 Pero no está haciendo lo que nosotros queremos 291 00:11:05,379 --> 00:11:11,179 Porque recordad 292 00:11:11,179 --> 00:11:12,220 Hay tres situaciones 293 00:11:12,220 --> 00:11:15,419 La que la facilonga 294 00:11:15,419 --> 00:11:17,600 Errores de compilación, estupendo 295 00:11:17,600 --> 00:11:19,720 Todavía no he entregado mi aplicación 296 00:11:19,720 --> 00:11:21,620 Y es que el compilador me dice que hay algo mal 297 00:11:21,620 --> 00:11:23,779 Yo los arreglo con sus indicaciones 298 00:11:23,779 --> 00:11:25,500 Y sobre todo con mis conocimientos 299 00:11:25,500 --> 00:11:27,639 Pues sus indicaciones pueden ser más confusas 300 00:11:27,639 --> 00:11:28,179 Que otra cosa 301 00:11:28,179 --> 00:11:30,960 Ahora mi aplicación ya no tiene errores de compilación 302 00:11:30,960 --> 00:11:31,679 Creo que está bien 303 00:11:31,679 --> 00:11:33,419 la llevo a fase 304 00:11:33,419 --> 00:11:35,919 de pruebas o lo que sea 305 00:11:35,919 --> 00:11:37,919 ahí ya me pueden salir dos tipos de errores 306 00:11:37,919 --> 00:11:39,580 de ejecución 307 00:11:39,580 --> 00:11:41,000 es decir, yo la arranco 308 00:11:41,000 --> 00:11:43,820 y me sale una excepción, no funciona, errores de ejecución 309 00:11:43,820 --> 00:11:45,700 esos también son buenos 310 00:11:45,700 --> 00:11:48,059 porque los puedo detectar 311 00:11:48,059 --> 00:11:49,620 porque la aplicación no funciona 312 00:11:49,620 --> 00:11:51,820 porque, ¿qué ha pasado? y los arreglo 313 00:11:51,820 --> 00:11:53,840 pero luego ya está el escenario 314 00:11:53,840 --> 00:11:55,960 horrible, que es mi aplicación 315 00:11:55,960 --> 00:11:57,960 no tiene errores de compilación, no tiene errores de ejecución 316 00:11:57,960 --> 00:11:59,899 pero no hace 317 00:11:59,899 --> 00:12:02,000 lo que tiene que hacer 318 00:12:02,000 --> 00:12:03,220 hace otra cosa 319 00:12:03,220 --> 00:12:05,379 pues ese es el problema 320 00:12:05,379 --> 00:12:07,720 y este sería un caso en el cual 321 00:12:07,720 --> 00:12:09,419 ni de error de compilación 322 00:12:09,419 --> 00:12:11,460 ni de error de ejecución funciona 323 00:12:11,460 --> 00:12:13,159 pero lo que hace no tiene nada que ver 324 00:12:13,159 --> 00:12:14,639 con aquello que me han pedido 325 00:12:14,639 --> 00:12:16,480 que es el peor escenario posible 326 00:12:16,480 --> 00:12:19,039 el que tendríamos que evitar 327 00:12:19,039 --> 00:12:21,240 y se evita con un buen análisis 328 00:12:21,240 --> 00:12:22,960 un buen diseño, etc. 329 00:12:25,639 --> 00:12:29,590 y se evita 330 00:12:29,590 --> 00:12:30,110 pues cuando 331 00:12:30,110 --> 00:12:33,070 te retiran el proyecto y dices 332 00:12:33,070 --> 00:12:35,250 o espabilo o me muero de hambre 333 00:12:35,250 --> 00:12:40,539 vale 334 00:12:40,539 --> 00:12:43,990 dudas 335 00:12:43,990 --> 00:12:50,169 no hay dudas, es que para poder ya hacer algo 336 00:12:50,169 --> 00:12:52,409 y hacer alguno de los ejercicios de los que os voy a subir 337 00:12:52,409 --> 00:12:54,450 ya sé que es mucho rollo y mucho hablar 338 00:12:54,450 --> 00:12:56,169 mucho, tenemos que incorporar 339 00:12:56,169 --> 00:12:57,350 lo de los constructores 340 00:12:57,350 --> 00:12:59,090 pero eso es muy rápido 341 00:12:59,090 --> 00:13:01,169 os lo prometo 342 00:13:01,169 --> 00:13:03,409 si de repente quieres transformar 343 00:13:03,409 --> 00:13:05,990 un objeto que tenías un cliente normal 344 00:13:05,990 --> 00:13:07,269 de repente ha hecho tres pedidos 345 00:13:07,269 --> 00:13:12,210 pues entonces, vale, por ejemplo 346 00:13:12,210 --> 00:13:13,809 este cliente C1 347 00:13:13,809 --> 00:13:15,870 que es un cliente normal 348 00:13:15,870 --> 00:13:18,370 pues has verificado cualquier cosa 349 00:13:18,370 --> 00:13:20,230 ¿no? entonces imagínate que la aplicación 350 00:13:20,230 --> 00:13:22,269 viene por aquí y ha pasado 351 00:13:22,269 --> 00:13:22,809 algo 352 00:13:22,809 --> 00:13:25,509 que se está cumpliendo 353 00:13:25,509 --> 00:13:27,029 ¿eh? 354 00:13:30,289 --> 00:13:30,929 bueno 355 00:13:30,929 --> 00:13:34,110 esto sustituye a esa 356 00:13:34,110 --> 00:13:35,990 condición de pedidos, no sé qué 357 00:13:35,990 --> 00:13:37,769 la que sea y tú le quieres 358 00:13:37,769 --> 00:13:39,629 hacer VIP 359 00:13:39,629 --> 00:13:41,470 pues porque resulta 360 00:13:41,470 --> 00:13:44,009 vamos a poner una condición que dé menos 361 00:13:44,009 --> 00:13:44,549 angustia 362 00:13:44,549 --> 00:13:47,889 resulta que su NIF 363 00:13:47,889 --> 00:13:50,210 empieza 364 00:13:50,210 --> 00:13:51,870 por cero y todos 365 00:13:51,870 --> 00:13:53,450 los que su NIF empieza por cero 366 00:13:53,450 --> 00:13:55,990 te caen tan bien 367 00:13:55,990 --> 00:13:57,090 que los quieres hacer 368 00:13:57,090 --> 00:13:58,230 VIP 369 00:13:58,230 --> 00:14:01,409 pues es que 370 00:14:01,409 --> 00:14:03,409 este no se le puede hacer VIP 371 00:14:03,409 --> 00:14:04,730 tienes que hacer otro 372 00:14:04,730 --> 00:14:07,169 es decir, ¿qué cosa tan rara 373 00:14:07,169 --> 00:14:08,070 tendrías que hacer aquí? 374 00:14:09,350 --> 00:14:11,350 pues te creas un cliente VIP 375 00:14:11,350 --> 00:14:16,669 claro, auxiliar 376 00:14:16,669 --> 00:14:18,809 por ejemplo, ¿vale? y al cliente VIP 377 00:14:18,809 --> 00:14:20,090 no le puedes asignar C1 378 00:14:20,090 --> 00:14:22,830 no puedes, ¿por qué? 379 00:14:23,090 --> 00:14:24,909 C1 es cliente 380 00:14:24,909 --> 00:14:26,669 entonces a un cliente le puedes asignar 381 00:14:26,669 --> 00:14:28,029 un cliente VIP, pero al revés no 382 00:14:28,029 --> 00:14:30,809 entonces, ¿qué tendrías que hacer? 383 00:14:31,289 --> 00:14:32,529 pues tú te instancias aquí 384 00:14:32,529 --> 00:14:33,529 un cliente VIP 385 00:14:33,529 --> 00:14:42,799 No, a un cliente 386 00:14:42,799 --> 00:14:45,220 Un cliente, pero al revés, ¿no? 387 00:14:45,720 --> 00:14:47,240 Claro, es decir 388 00:14:47,240 --> 00:14:49,700 Un animal es un gato 389 00:14:49,700 --> 00:14:52,080 Pero un gato no es un animal 390 00:14:52,080 --> 00:14:53,620 Es decir, ¿no? 391 00:14:53,679 --> 00:14:55,100 Claro, un gato 392 00:14:55,100 --> 00:14:56,879 Encaja dentro del concepto de animal 393 00:14:56,879 --> 00:14:59,019 Pero un animal 394 00:14:59,019 --> 00:15:01,080 No encaja dentro del concepto de gato 395 00:15:01,080 --> 00:15:03,360 Es decir, en un animal tú puedes hacer 396 00:15:03,360 --> 00:15:05,139 New gato, porque gato 397 00:15:05,139 --> 00:15:07,320 Encaja el concepto de animal, pero un gato 398 00:15:07,320 --> 00:15:08,840 No puedes hacer new animal 399 00:15:08,840 --> 00:15:11,500 porque animal no encaja en el concepto de gato 400 00:15:11,500 --> 00:15:12,259 es más grande 401 00:15:12,259 --> 00:15:15,379 entonces cliente VIP no puede asignarle C1 402 00:15:15,379 --> 00:15:17,600 porque C1 es cliente 403 00:15:17,600 --> 00:15:19,779 no puede asignarle algo más grande que él 404 00:15:19,779 --> 00:15:25,039 bueno en ese caso es que son tipos distintos 405 00:15:25,039 --> 00:15:27,220 no es que en este caso 406 00:15:27,220 --> 00:15:28,600 uno está incluido dentro del otro 407 00:15:28,600 --> 00:15:28,899 vale 408 00:15:28,899 --> 00:15:32,860 entonces pues te tendrías que hacer algo nuevo 409 00:15:32,860 --> 00:15:34,700 copiar los datos 410 00:15:34,700 --> 00:15:38,110 aux 411 00:15:38,110 --> 00:15:40,470 Punto nif 412 00:15:40,470 --> 00:15:42,730 Igual a c1 413 00:15:42,730 --> 00:15:43,950 Punto nif 414 00:15:43,950 --> 00:15:46,149 Aux 415 00:15:46,149 --> 00:15:47,950 Punto nombre 416 00:15:47,950 --> 00:15:54,669 Igual a 417 00:15:54,669 --> 00:15:56,929 ¿Por qué me deja acceder a las propiedades 418 00:15:56,929 --> 00:15:57,590 A lo bestia? 419 00:16:03,460 --> 00:16:05,139 Ah, ahora se ha enterado, vale, es que como arrastra 420 00:16:05,139 --> 00:16:06,740 Los errores de compilación de antes no se enteraba 421 00:16:06,740 --> 00:16:08,360 Ah no, pero a nif me ha dejado 422 00:16:08,360 --> 00:16:11,039 No, aquí no se ha enterado, aux cliente 423 00:16:11,039 --> 00:16:11,220 B 424 00:16:11,220 --> 00:16:14,179 Cliente B 425 00:16:14,179 --> 00:16:16,440 Cliente 426 00:16:16,440 --> 00:16:18,179 Protete 427 00:16:18,179 --> 00:16:19,799 Domain, no hereda de 428 00:16:19,799 --> 00:16:28,139 C1 429 00:16:28,139 --> 00:16:30,720 Punto 430 00:16:30,720 --> 00:16:31,740 Nombre 431 00:16:31,740 --> 00:16:37,539 Aux punto 432 00:16:37,539 --> 00:16:40,340 Dirección, claro que este lógicamente 433 00:16:40,340 --> 00:16:40,600 No 434 00:16:40,600 --> 00:16:44,139 Aux 435 00:16:44,139 --> 00:16:45,879 Punto set 436 00:16:45,879 --> 00:16:48,480 Dirección, con la dirección que sea 437 00:16:48,480 --> 00:16:49,860 Y ahora 438 00:16:49,860 --> 00:16:52,879 Este misterio tan grande 439 00:16:52,879 --> 00:16:54,279 Alguna explicación tendrá 440 00:16:54,279 --> 00:16:56,679 vale, y ahora ya tendrías que ser 441 00:16:56,679 --> 00:16:58,360 hace uno, voy a pisarlo 442 00:16:58,360 --> 00:17:00,379 y ahora hace uno que sea 443 00:17:00,379 --> 00:17:02,399 aus, pues siempre 444 00:17:02,399 --> 00:17:03,460 podías hacer este apaño 445 00:17:03,460 --> 00:17:05,319 vale 446 00:17:05,319 --> 00:17:08,460 es decir, crear una instancia 447 00:17:08,460 --> 00:17:10,440 nueva de cliente vivo, una instancia nueva 448 00:17:10,440 --> 00:17:12,420 esa instancia nueva que 449 00:17:12,420 --> 00:17:13,819 copie los datos, es como 450 00:17:13,819 --> 00:17:16,160 borro el formulario, tengo aquí 451 00:17:16,160 --> 00:17:18,740 mi fichita con el cliente 452 00:17:18,740 --> 00:17:20,579 paz, lo borro 453 00:17:20,579 --> 00:17:22,359 me hago una hoja nueva con los datos 454 00:17:22,359 --> 00:17:23,619 nuevos y al archivo 455 00:17:23,619 --> 00:17:26,420 vale, pero no puedes en la misma 456 00:17:26,420 --> 00:17:28,119 hojita borrar lo que hay 457 00:17:28,119 --> 00:17:30,319 y ponerle otra 458 00:17:30,319 --> 00:17:32,539 cosa, esa hoja la tiras a la basura 459 00:17:32,539 --> 00:17:34,319 te creas una hoja con los datos nuevos 460 00:17:34,319 --> 00:17:36,220 y pin, sustituyes una por la otra 461 00:17:36,220 --> 00:17:38,279 no hay otra, vale, una situación 462 00:17:38,279 --> 00:17:39,900 como esa, vale 463 00:17:39,900 --> 00:17:40,400 y 464 00:17:40,400 --> 00:17:44,099 el que 465 00:17:44,099 --> 00:17:46,200 yo lo que no pillo 466 00:17:46,200 --> 00:17:48,220 es porque me ha dejado a mi poner aux.nif 467 00:17:48,220 --> 00:17:51,500 con el 468 00:17:51,500 --> 00:17:53,740 protect 469 00:17:53,740 --> 00:17:59,049 ¿Pero qué es lo que tú no pillas? 470 00:18:00,349 --> 00:18:01,509 Antes de mirar eso 471 00:18:01,509 --> 00:18:09,990 A ver, aquí esto es una cosa muy particular 472 00:18:09,990 --> 00:18:11,230 Vale 473 00:18:11,230 --> 00:18:14,849 Esto no es una cosa 474 00:18:14,849 --> 00:18:17,630 Que vayas a hacer en una aplicación en general 475 00:18:17,630 --> 00:18:18,309 Habitualmente 476 00:18:18,309 --> 00:18:27,140 Porque normalmente 477 00:18:27,140 --> 00:18:30,980 Si tú tienes clientes 478 00:18:30,980 --> 00:18:32,319 Que se pueden convertir en VIP 479 00:18:32,319 --> 00:18:34,240 tú lo diseñarías de otra manera 480 00:18:34,240 --> 00:18:36,380 que es poniendo un campo boolean que fuera 481 00:18:36,380 --> 00:18:38,480 es VIP y ese campo de boolean lo marcas 482 00:18:38,480 --> 00:18:40,200 a true o false, ¿vale? 483 00:18:40,220 --> 00:18:42,500 es decir que el, si tú consideras 484 00:18:42,500 --> 00:18:44,519 que un cliente puede ser VIP o puede no serlo 485 00:18:44,519 --> 00:18:46,740 y durante el tiempo de vida de tu aplicación 486 00:18:46,740 --> 00:18:48,460 puede ir cambiando, ahora lo soy, ahora no lo soy 487 00:18:48,460 --> 00:18:49,539 ahora lo soy, ahora no lo soy 488 00:18:49,539 --> 00:18:51,980 no harías el diseño, ahora vamos a ver 489 00:18:51,980 --> 00:18:54,220 esto, pero antes déjame que completemos esto 490 00:18:54,220 --> 00:18:55,900 ¿vale? es decir, si tú 491 00:18:55,900 --> 00:18:58,160 cuando estudias tu situación, dices 492 00:18:58,160 --> 00:19:00,059 mis clientes, a veces son VIP 493 00:19:00,059 --> 00:19:01,259 a veces no 494 00:19:01,259 --> 00:19:03,940 entonces, frente a esa situación 495 00:19:03,940 --> 00:19:05,980 tú no harías un diseño 496 00:19:05,980 --> 00:19:07,319 en el cual haces dos clases 497 00:19:07,319 --> 00:19:09,680 y dirías, mi cliente 498 00:19:09,680 --> 00:19:11,900 ahora es un objeto de esta y otro es un objeto de esta 499 00:19:11,900 --> 00:19:13,859 otra, sería una cosa un poco rara 500 00:19:13,859 --> 00:19:15,819 lo que harías es, como mis clientes 501 00:19:15,819 --> 00:19:18,000 se caracterizan por ser VIP o no serlo 502 00:19:18,000 --> 00:19:19,880 pues les pongo un boolean 503 00:19:19,880 --> 00:19:21,859 que sea, es VIP o no es VIP 504 00:19:21,859 --> 00:19:23,819 y eso lo va a hacer mucho más 505 00:19:24,640 --> 00:19:25,599 vale, entonces estoy diciendo que 506 00:19:25,599 --> 00:19:27,700 las subclases en el momento en el que se crea 507 00:19:27,700 --> 00:19:28,740 cada objeto debería 508 00:19:28,740 --> 00:19:31,200 determinaste cuál debería ser. 509 00:19:31,259 --> 00:19:32,220 O sea, en una aplicación normal. 510 00:19:32,660 --> 00:19:34,599 Claro, o sea, si tú has hecho un diseño en el cual 511 00:19:34,599 --> 00:19:36,500 tienes esta clase y tienes esta otra, 512 00:19:36,880 --> 00:19:38,660 es porque los objetos 513 00:19:38,660 --> 00:19:41,079 no van a cambiar de tipo. Lo normal es que los objetos 514 00:19:41,079 --> 00:19:42,259 no tengan que cambiar de tipo. 515 00:19:43,160 --> 00:19:44,720 Claro, si tú has hecho una aplicación 516 00:19:44,720 --> 00:19:46,700 en la cual un objeto de repente 517 00:19:46,700 --> 00:19:48,839 ya no le pega a ser de esa clase, 518 00:19:48,839 --> 00:19:50,799 sino de repente debería pasar a ser de otra, 519 00:19:51,519 --> 00:19:52,839 pues cambia el diseño, porque es 520 00:19:52,839 --> 00:19:54,440 muy raro. ¿Vale? 521 00:19:54,960 --> 00:19:56,519 Entonces, si tus clientes 522 00:19:56,519 --> 00:19:58,720 A veces van a ser VIP y a veces no 523 00:19:58,720 --> 00:20:00,640 Con lo cual tienen que cambiar de clase 524 00:20:00,640 --> 00:20:03,099 Pues como de camisa 525 00:20:03,099 --> 00:20:05,460 Pues entonces no hagas dos clases 526 00:20:05,460 --> 00:20:06,579 Sino haz una única clase 527 00:20:06,579 --> 00:20:07,980 Y márcalo con un boolean 528 00:20:07,980 --> 00:20:09,940 ¿Vale? Tendría más sentido 529 00:20:09,940 --> 00:20:12,720 Y ahora, tu pregunta 530 00:20:12,720 --> 00:20:14,619 ¿No has entendido lo que queríamos hacer aquí? 531 00:20:15,220 --> 00:20:16,299 Sí, más o menos 532 00:20:16,299 --> 00:20:17,559 Tarnapillo 533 00:20:17,559 --> 00:20:19,180 Lo en sí 534 00:20:19,180 --> 00:20:19,960 Lo de 535 00:20:19,960 --> 00:20:24,420 Ah, no, esto es un ejemplo 536 00:20:24,420 --> 00:20:25,839 Esto me he inventado yo 537 00:20:25,839 --> 00:20:27,440 ¿por qué le interesa al usuario 538 00:20:27,440 --> 00:20:28,960 un cliente que da normal hacerlo VIP? 539 00:20:29,700 --> 00:20:31,799 Pues porque empezaba por cero y eso le gusta. 540 00:20:32,200 --> 00:20:33,460 Yo qué sé, porque he puesto true 541 00:20:33,460 --> 00:20:35,579 y se ha angustiado, entonces por eso he puesto una condición 542 00:20:35,579 --> 00:20:37,680 cualquiera. O sea, lo que me ha dicho es 543 00:20:37,680 --> 00:20:39,799 y si pasa algo en lo cual 544 00:20:39,799 --> 00:20:41,619 a ti de repente te apetece que un 545 00:20:41,619 --> 00:20:42,900 cliente normal sea VIP, 546 00:20:43,619 --> 00:20:45,220 ¿qué harías? Pues tienes que cambiar su tipo 547 00:20:45,220 --> 00:20:46,660 y su tipo no se puede. 548 00:20:47,799 --> 00:20:49,339 Entonces tienes que hacer uno nuevo 549 00:20:49,339 --> 00:20:51,799 de ese otro tipo, copiarle los datos 550 00:20:51,799 --> 00:20:53,160 y sustituir 551 00:20:53,160 --> 00:20:55,099 la referencia C1 por esta. 552 00:20:55,839 --> 00:21:13,740 Entonces, cuando esta llave ha terminado, cuando estamos aquí abajo, C1 sigue vivo, por supuesto, porque C1 está declarado aquí, C1 sigue vivo, pero C1 ahora es un objeto instanciado como cliente VIP. 553 00:21:14,400 --> 00:21:20,700 Si yo ahora hago aquí un instance of cliente VIP, me va a decir true, porque ahora C1 está instanciado como cliente VIP. 554 00:21:20,700 --> 00:21:23,079 y AUX 555 00:21:23,079 --> 00:21:24,480 fue un temporal 556 00:21:24,480 --> 00:21:26,799 que como se declaró localmente 557 00:21:26,799 --> 00:21:27,539 en este bloque 558 00:21:27,539 --> 00:21:30,119 AUX ha estado local en este bloque 559 00:21:30,119 --> 00:21:32,220 entonces en cuanto salgo de la llave 560 00:21:32,220 --> 00:21:34,559 el AUX ya ha desaparecido 561 00:21:34,559 --> 00:21:35,160 y no molesta 562 00:21:35,160 --> 00:21:38,319 pero no es una situación 563 00:21:38,319 --> 00:21:40,619 que normalmente nos veamos 564 00:21:40,619 --> 00:21:42,380 en la tesitura de resolver, cambiar un tío por otro 565 00:21:42,380 --> 00:21:43,019 porque es raro 566 00:21:43,019 --> 00:21:46,299 en relación a lo que estaba diciendo allí 567 00:21:46,299 --> 00:21:48,519 si por ejemplo 568 00:21:48,519 --> 00:21:49,940 hicimos de manera de que 569 00:21:49,940 --> 00:21:52,660 pones lo del bulan es VIP 570 00:21:52,660 --> 00:21:55,640 puedes hacer una condición 571 00:21:55,640 --> 00:21:57,420 en la clase 572 00:21:57,420 --> 00:21:58,859 que sea que si es VIP 573 00:21:58,859 --> 00:22:00,480 declara 574 00:22:00,480 --> 00:22:04,650 si es VIP aparece una variable 575 00:22:04,650 --> 00:22:05,289 no, no, no 576 00:22:05,289 --> 00:22:08,289 no, claro 577 00:22:08,289 --> 00:22:10,750 las propiedades 578 00:22:10,750 --> 00:22:11,670 tienen que ser las mismas 579 00:22:11,670 --> 00:22:12,049 vale 580 00:22:12,049 --> 00:22:17,269 vale, a ver 581 00:22:17,269 --> 00:22:19,069 ahora, el gran misterio 582 00:22:19,069 --> 00:22:21,490 ¿por qué 583 00:22:21,490 --> 00:22:29,630 me deja acceder 584 00:22:29,630 --> 00:22:30,150 a 585 00:22:30,150 --> 00:22:34,970 porque está 586 00:22:34,970 --> 00:22:36,170 en el mismo paquete 587 00:22:36,170 --> 00:22:37,730 vale, vale, es que no 588 00:22:37,730 --> 00:22:40,930 claro, claro, sí, sí, porque está en el mismo paquete, es que normalmente no es lo habitual 589 00:22:40,930 --> 00:22:42,890 que el main esté en el mismo paquete, por ejemplo 590 00:22:42,890 --> 00:22:44,650 lo habitual sería 591 00:22:44,650 --> 00:22:46,549 que nuestro main estuviera aquí fuera 592 00:22:46,549 --> 00:22:47,910 vale 593 00:22:47,910 --> 00:22:51,089 entonces si nuestro main lo movemos aquí fuera 594 00:22:51,089 --> 00:22:52,769 pero protectek no es 595 00:22:52,769 --> 00:22:54,650 para las clases 596 00:22:54,650 --> 00:23:01,500 si, todas las clases 597 00:23:01,500 --> 00:23:02,220 del mismo 598 00:23:02,220 --> 00:23:05,079 Vale, a ver, es que 599 00:23:05,079 --> 00:23:08,319 Sí, sí, sí 600 00:23:08,319 --> 00:23:09,359 Ahora 601 00:23:09,359 --> 00:23:11,599 Lógicamente lo tendría que hacer con el set 602 00:23:11,599 --> 00:23:13,539 Vale 603 00:23:13,539 --> 00:23:15,539 Set nif 604 00:23:15,539 --> 00:23:16,900 Nif 605 00:23:16,900 --> 00:23:26,200 Punto set 606 00:23:26,200 --> 00:23:27,119 Nombre 607 00:23:27,119 --> 00:23:32,019 C1 punto set 608 00:23:32,019 --> 00:23:32,619 Nombre 609 00:23:32,619 --> 00:23:35,319 Ay no, perdón, get nombre 610 00:23:35,319 --> 00:23:43,680 Y ahora c1 punto 611 00:23:43,680 --> 00:23:45,140 Get nif 612 00:23:45,140 --> 00:23:46,720 Vale 613 00:23:46,720 --> 00:23:48,619 Vale 614 00:23:48,619 --> 00:23:51,440 Entonces Protected 615 00:23:51,440 --> 00:23:52,440 Vamos a recopilarlo 616 00:23:52,440 --> 00:23:55,019 Porque aquí tenía yo una pequeña confusión 617 00:23:55,019 --> 00:23:57,680 Como normalmente se hacen diferentes paquetes 618 00:23:57,680 --> 00:23:59,140 Entonces 619 00:23:59,140 --> 00:24:00,380 Ah vale, sí, sí 620 00:24:00,380 --> 00:24:02,579 Protected 621 00:24:02,579 --> 00:24:03,720 Es 622 00:24:03,720 --> 00:24:07,259 A las del paquete 623 00:24:07,259 --> 00:24:08,500 Te deja todas 624 00:24:08,500 --> 00:24:11,259 Y fuera del paquete 625 00:24:11,259 --> 00:24:13,240 Te mete como excepción 626 00:24:13,240 --> 00:24:14,880 Las subclases 627 00:24:14,880 --> 00:24:22,160 Las subclases independientemente del paquete 628 00:24:22,160 --> 00:24:22,880 Donde estén 629 00:24:22,880 --> 00:24:25,720 Pueden ver a esa propiedad 630 00:24:25,720 --> 00:24:33,710 Vale, por ejemplo 631 00:24:33,710 --> 00:24:34,950 Si nosotros 632 00:24:34,950 --> 00:24:37,170 Metiéramos aquí 633 00:24:37,170 --> 00:24:39,529 Por ejemplo he sacado cliente VIP 634 00:24:39,529 --> 00:24:40,750 Solo para probarlo 635 00:24:40,750 --> 00:24:43,390 Para asegurarnos de que lo hemos dicho completamente bien 636 00:24:43,390 --> 00:24:45,569 Cliente VIP lo he sacado fuera 637 00:24:45,569 --> 00:24:47,789 En main 638 00:24:47,789 --> 00:24:49,329 Y cliente VIP 639 00:24:49,329 --> 00:24:51,589 sigue pudiendo ver a nombre 640 00:24:51,589 --> 00:24:54,509 porque es protected, ¿vale? 641 00:24:54,950 --> 00:24:56,309 Cliente ir sigue pudiendo. 642 00:25:12,349 --> 00:25:14,029 Bueno, pues vemos lo de los constructores 643 00:25:14,029 --> 00:25:15,049 y nos vamos, ¿vale? 644 00:25:16,470 --> 00:25:17,809 Que es poquita cosa. 645 00:25:20,750 --> 00:25:21,069 Vale. 646 00:25:23,230 --> 00:25:24,789 Hemos dicho que una clase 647 00:25:24,789 --> 00:25:27,049 que hereda con stents 648 00:25:27,049 --> 00:25:32,400 lo hereda todo menos los constructores, ¿vale? 649 00:25:32,440 --> 00:25:33,220 Pues entonces hay que hacer 650 00:25:33,220 --> 00:25:34,599 constructores específicos. 651 00:25:34,599 --> 00:25:38,519 Por ejemplo, esta clase cliente de aquí 652 00:25:38,519 --> 00:25:42,339 No tiene ahora mismo ningún constructor 653 00:25:42,339 --> 00:25:45,500 Es como si tuviera el constructor por defecto 654 00:25:45,500 --> 00:25:49,019 Pero yo le puedo hacer el constructor con parámetros de toda la vida 655 00:25:49,019 --> 00:25:50,180 Que sería lo ideal 656 00:25:50,180 --> 00:25:53,940 Me hago yo un constructor con parámetros 657 00:25:53,940 --> 00:25:57,000 Este de aquí 658 00:25:57,000 --> 00:26:06,140 Aquí tengo mi constructor con parámetros 659 00:26:06,140 --> 00:26:08,839 vale, recordad que 660 00:26:08,839 --> 00:26:11,140 desde el momento en que hago algún constructor 661 00:26:11,140 --> 00:26:13,220 el constructor por defecto 662 00:26:13,220 --> 00:26:14,200 queda deshabilitado 663 00:26:14,200 --> 00:26:18,980 vale, ahora 664 00:26:18,980 --> 00:26:20,500 cliente VIP 665 00:26:20,500 --> 00:26:22,900 cliente VIP, yo me tendría que 666 00:26:22,900 --> 00:26:24,940 hacer un constructor con todos 667 00:26:24,940 --> 00:26:25,660 sus parámetros 668 00:26:25,660 --> 00:26:28,579 y tiene tres, entonces 669 00:26:28,579 --> 00:26:30,720 el constructor que yo tendría que hacerme con 670 00:26:30,720 --> 00:26:33,220 cliente VIP, que me lo tengo que hacer específico 671 00:26:33,220 --> 00:26:34,819 tiene que tenerlos 672 00:26:34,819 --> 00:26:35,319 todos 673 00:26:35,319 --> 00:26:37,539 String 674 00:26:37,539 --> 00:26:38,180 Nif 675 00:26:38,180 --> 00:26:40,839 String nombre 676 00:26:40,839 --> 00:26:44,859 String dirección 677 00:26:44,859 --> 00:26:50,160 ¿Vale? Porque cliente 678 00:26:50,160 --> 00:26:51,539 Tiene 679 00:26:51,539 --> 00:26:54,759 Cliente vip tiene las tres propiedades 680 00:26:54,759 --> 00:26:56,400 Nif, nombre y dirección 681 00:26:56,400 --> 00:26:57,799 ¿Vale? 682 00:26:58,440 --> 00:26:59,259 Entonces 683 00:26:59,259 --> 00:27:02,400 Podríamos hacerlo así 684 00:27:02,400 --> 00:27:04,259 Directamente, dis.nif 685 00:27:04,259 --> 00:27:06,160 Igual a nif 686 00:27:06,160 --> 00:27:09,940 Dis.nombre 687 00:27:09,940 --> 00:27:13,559 Igual a nombre 688 00:27:13,559 --> 00:27:16,980 Y dis.dirección 689 00:27:16,980 --> 00:27:19,180 Igual a dirección 690 00:27:19,180 --> 00:27:21,240 ¿Vale? 691 00:27:21,920 --> 00:27:31,529 ¿Vale? 692 00:27:32,789 --> 00:27:33,950 ¿Pero qué ocurre? 693 00:27:34,509 --> 00:27:36,710 Estamos repitiendo código en realidad 694 00:27:36,710 --> 00:27:38,890 Cliente tiene ya aquí 695 00:27:38,890 --> 00:27:41,089 A ver, es que lo he puesto en otro orden 696 00:27:41,089 --> 00:27:43,430 Pero bueno, da igual 697 00:27:43,430 --> 00:27:45,710 lo voy a poner el mismo para que se vea más claro. 698 00:27:45,849 --> 00:27:47,049 Aquí he puesto nombre y nif. 699 00:27:48,049 --> 00:27:49,569 Pues voy a poner aquí también 700 00:27:49,569 --> 00:27:53,950 nombre y nif. 701 00:27:57,420 --> 00:27:57,779 Vale. 702 00:27:59,339 --> 00:28:00,559 Vale, del rojo olvidados. 703 00:28:00,700 --> 00:28:02,559 Ahora lo vemos por qué sale. 704 00:28:03,039 --> 00:28:04,359 Bueno, pues este sería mi constructor 705 00:28:04,359 --> 00:28:06,500 con parámetros. Lo del rojo es al margen de esto. 706 00:28:07,319 --> 00:28:08,359 No tiene nada que ver, lo quitamos. 707 00:28:08,480 --> 00:28:10,279 Mi constructor con parámetros que yo he hecho a mano. 708 00:28:11,720 --> 00:28:12,559 Lo normal no es 709 00:28:12,559 --> 00:28:13,500 repetir todo esto. 710 00:28:14,700 --> 00:28:16,660 Porque aquí tengo solo tres propiedades. 711 00:28:16,660 --> 00:28:18,980 pero imaginaos que yo heredo de una clase 712 00:28:18,980 --> 00:28:21,259 que tiene 50 propiedades 713 00:28:21,259 --> 00:28:22,960 que a su vez 714 00:28:22,960 --> 00:28:24,500 hereda de otra que tiene 20 715 00:28:24,500 --> 00:28:26,960 entonces cada vez que me haga el constructor 716 00:28:26,960 --> 00:28:28,680 me tengo que poner aquí todas otra vez 717 00:28:28,680 --> 00:28:30,019 es una pérdida de tiempo 718 00:28:30,019 --> 00:28:32,960 podría, pero lo habitual es apoyarme 719 00:28:32,960 --> 00:28:34,519 en el constructor del de arriba 720 00:28:34,519 --> 00:28:36,259 es 721 00:28:36,259 --> 00:28:39,240 aprovechando que el constructor mío de arriba 722 00:28:39,240 --> 00:28:40,740 ya hace estas dos cosas 723 00:28:40,740 --> 00:28:43,140 ya las hace, que hace estas dos 724 00:28:43,140 --> 00:28:44,680 pues hombre 725 00:28:44,680 --> 00:28:47,339 si consiguiera llamarlo de alguna manera 726 00:28:47,339 --> 00:28:49,200 ya tendría esta 727 00:28:49,200 --> 00:28:51,200 parte hecha. Pues, ¿cómo 728 00:28:51,200 --> 00:28:52,420 se llama el constructor 729 00:28:52,420 --> 00:28:54,799 de la superclase? 730 00:28:55,400 --> 00:28:56,460 Con esta llamada. 731 00:29:11,519 --> 00:29:11,559 Constructor 732 00:29:11,559 --> 00:29:15,390 de la 733 00:29:15,390 --> 00:29:18,950 superclase. 734 00:29:20,920 --> 00:29:21,519 ¿Vale? 735 00:29:26,210 --> 00:29:27,809 Super es una llamada 736 00:29:27,809 --> 00:29:29,490 que se usa en los constructores 737 00:29:29,490 --> 00:29:31,849 para llamar al constructor de arriba 738 00:29:31,849 --> 00:29:33,670 y así ahorrar código 739 00:29:33,670 --> 00:29:35,589 aquí. Ya ahorras código. Entonces, 740 00:29:35,730 --> 00:29:37,470 este llama al constructor de arriba. ¿El de arriba 741 00:29:37,470 --> 00:29:39,430 qué hace? Coger nombre y 742 00:29:39,430 --> 00:29:41,450 nif y llevarlo a las propiedades que 743 00:29:41,450 --> 00:29:43,430 están ahí ocultas. Pero esta 744 00:29:43,430 --> 00:29:45,089 me falta. Pues así que tengo que hacer a mano. 745 00:29:46,109 --> 00:29:47,609 ¿Vale? Así que tengo que hacer a mano. 746 00:29:51,410 --> 00:29:51,769 ¿Eh? 747 00:29:53,589 --> 00:29:55,269 Sí, el error es que ya he quitado el 748 00:29:55,269 --> 00:29:56,309 constructor sin parámetros. 749 00:29:57,289 --> 00:29:59,430 ¿Vale? Entonces, lo he 750 00:29:59,430 --> 00:30:01,410 quitado. ¿Vale? Pero podemos añadir 751 00:30:01,410 --> 00:30:03,289 todos los constructores que queramos para no retocar 752 00:30:03,289 --> 00:30:05,109 el main, vamos a añadir un 753 00:30:05,109 --> 00:30:06,410 constructor sin parámetros 754 00:30:06,410 --> 00:30:09,150 public cliente 755 00:30:09,150 --> 00:30:11,170 vale, aquí 756 00:30:11,170 --> 00:30:12,849 tengo mi constructor sin parámetros 757 00:30:12,849 --> 00:30:14,690 si 758 00:30:14,690 --> 00:30:17,109 que lo hemos usado 759 00:30:17,109 --> 00:30:18,569 aquí 760 00:30:18,569 --> 00:30:21,509 vale, pero también hemos usado el sin parámetros 761 00:30:21,509 --> 00:30:23,509 para cliente VIP, pues lo tengo que crear 762 00:30:23,509 --> 00:30:25,049 lo tengo que crear 763 00:30:25,049 --> 00:30:26,789 pues vamos a crear aquí 764 00:30:26,789 --> 00:30:33,859 mi constructor sin parámetros 765 00:30:33,859 --> 00:30:35,059 vale 766 00:30:35,059 --> 00:30:39,549 y ya está 767 00:30:39,549 --> 00:30:52,130 vale, pues recordad esta llamada 768 00:30:52,130 --> 00:30:54,269 porque significa siempre 769 00:30:54,269 --> 00:30:55,710 llamar a la superclase 770 00:30:55,710 --> 00:30:57,990 si yo la llamo sin más, a quien la estoy 771 00:30:57,990 --> 00:30:59,109 llamando es al constructor 772 00:30:59,109 --> 00:31:07,289 ¿vale? pero bueno, se puede 773 00:31:07,289 --> 00:31:09,390 usar en otros contextos también, pero por ahora no vamos 774 00:31:09,390 --> 00:31:09,710 a liar 775 00:31:09,710 --> 00:31:12,730 entonces, más o menos 776 00:31:12,730 --> 00:31:15,009 esta es la idea de herencia 777 00:31:15,009 --> 00:31:17,569 sobre la que faltan matices 778 00:31:17,569 --> 00:31:18,210 pero bueno 779 00:31:18,210 --> 00:31:23,299 lo que nos tiene que quedar de herencia 780 00:31:23,299 --> 00:31:25,819 cuidado con la herencia 781 00:31:25,819 --> 00:31:27,180 que es una herramienta 782 00:31:27,180 --> 00:31:30,059 que puede complicar más que otra cosa 783 00:31:30,059 --> 00:31:31,839 ¿vale? no se trata de 784 00:31:31,839 --> 00:31:33,660 hacer diseños con jerarquías muy 785 00:31:33,660 --> 00:31:35,200 complejas, muy profundas, no 786 00:31:35,200 --> 00:31:37,119 ¿vale? 787 00:31:38,200 --> 00:31:39,599 solamente pues cuando sea necesario 788 00:31:39,599 --> 00:31:41,880 nos ahorre trabajo, solo en ese caso 789 00:31:41,880 --> 00:31:43,859 pero nunca hay diseños 790 00:31:43,859 --> 00:31:45,819 con unos arbolitos ahí de clases 791 00:31:45,819 --> 00:31:47,259 porque eso sería una locura 792 00:31:47,259 --> 00:31:49,920 ¿vale? pero sí que nos ahorra 793 00:31:49,920 --> 00:31:51,759 precisamente 794 00:31:51,759 --> 00:31:53,799 el tratar a diferentes objetos que tienen 795 00:31:53,799 --> 00:31:55,660 parte en común, a tratarlos con métodos 796 00:31:55,660 --> 00:31:57,140 separados cada uno de ellos. Eso sí. 797 00:31:58,579 --> 00:31:59,019 ¿Vale? 798 00:32:03,319 --> 00:32:04,880 Bueno, pues 799 00:32:04,880 --> 00:32:07,200 bueno, os quedan muchas cosas por ver. 800 00:32:08,259 --> 00:32:08,700 No...