1 00:00:00,300 --> 00:00:12,560 Bueno, pues lo último que hemos visto, como bien recordáis, es la herencia y sus implicaciones, ¿vale? 2 00:00:13,779 --> 00:00:17,420 Entonces, ¿la herencia qué era? 3 00:00:18,699 --> 00:00:27,719 Pues es la posibilidad de relacionar unas clases con otras mediante una relación del tipo, esto es esta otra cosa. 4 00:00:27,719 --> 00:00:36,460 Un alumno es miembro del instituto, un cliente temporal es cliente, un gato es animal. 5 00:00:37,439 --> 00:00:48,679 Entonces, si yo tengo entidades distintas, pues como gato, perro, cliente temporal, empleado temporal, empleado plantilla, 6 00:00:48,679 --> 00:00:50,600 tengo diferentes entidades 7 00:00:50,600 --> 00:00:52,679 y por tanto tengo que hacer clases distintas 8 00:00:52,679 --> 00:00:54,500 pero identifico 9 00:00:54,500 --> 00:00:56,280 que todas comparten algo 10 00:00:56,280 --> 00:00:58,539 pues entonces ahí identifico 11 00:00:58,539 --> 00:01:00,420 una relación de herencia, puedo identificarla 12 00:01:00,420 --> 00:01:02,619 y trabajar haciendo el diseño de mis clases 13 00:01:02,619 --> 00:01:04,159 completamente independientes unas de otras 14 00:01:04,159 --> 00:01:06,459 claro, como hemos dicho muchas veces hay muchos 15 00:01:06,459 --> 00:01:08,560 diseños posibles, pero la idea 16 00:01:08,560 --> 00:01:10,019 es hacerlos lo más eficiente 17 00:01:10,019 --> 00:01:11,719 que se pueda 18 00:01:11,719 --> 00:01:14,239 entonces si yo identifico que hay clases 19 00:01:14,239 --> 00:01:15,599 que comparten cosas 20 00:01:15,599 --> 00:01:18,459 como empleado temporal, empleado plantilla 21 00:01:18,459 --> 00:01:21,099 Comparten cosas, aunque algunas son distintas 22 00:01:21,099 --> 00:01:22,680 Pues identifico que lo comparten 23 00:01:22,680 --> 00:01:26,040 Me puedo hacer una superclase que coge lo común 24 00:01:26,040 --> 00:01:27,959 Empleado, por ejemplo 25 00:01:27,959 --> 00:01:31,799 Y las otras dos heredan todo lo común de esa 26 00:01:31,799 --> 00:01:33,079 Y añaden lo suyo 27 00:01:33,079 --> 00:01:38,200 Entonces, el haber establecido esa jerarquía 28 00:01:38,200 --> 00:01:40,140 Una superclase de las cuales heredan 29 00:01:40,140 --> 00:01:42,840 Tiene algunas ventajas 30 00:01:42,840 --> 00:01:44,659 ¿Qué ventaja? 31 00:01:45,120 --> 00:01:46,079 ¿Qué ventaja en realidad? 32 00:01:46,379 --> 00:01:48,280 Pues sobre todo la que más podemos ver 33 00:01:48,280 --> 00:01:49,879 la que más podemos visualizar es 34 00:01:49,879 --> 00:01:52,280 que ahora ya cuando yo tenga un almacén 35 00:01:52,280 --> 00:01:54,079 de empleados, un array de empleados 36 00:01:54,079 --> 00:01:56,019 una colección, un conjunto de empleados 37 00:01:56,019 --> 00:01:57,260 los puedo 38 00:01:57,260 --> 00:01:59,780 meter todos juntos 39 00:01:59,780 --> 00:02:01,700 porque todos son empleados 40 00:02:01,700 --> 00:02:03,599 ¿vale? todos son empleados 41 00:02:03,599 --> 00:02:05,680 los puedo meter todos juntos en el mismo array 42 00:02:05,680 --> 00:02:07,579 eso es lo que hemos visto 43 00:02:07,579 --> 00:02:08,979 nosotros de forma palpable 44 00:02:08,979 --> 00:02:10,300 que es nuestra ventaja 45 00:02:10,300 --> 00:02:12,900 que los puedo meter todos en el mismo array 46 00:02:12,900 --> 00:02:15,259 en realidad, porque si yo tengo una referencia 47 00:02:15,259 --> 00:02:16,080 empleado E 48 00:02:16,080 --> 00:02:19,240 esa referencia se puede llenar en un momento dado 49 00:02:19,240 --> 00:02:20,919 con un empleado temporal, porque hereda 50 00:02:20,919 --> 00:02:23,300 pero también se puede rellenar en otro 51 00:02:23,300 --> 00:02:25,500 momento dado con un empleado plantilla 52 00:02:25,500 --> 00:02:27,280 porque hereda, entonces eso me da 53 00:02:27,280 --> 00:02:28,120 una flexibilidad 54 00:02:28,120 --> 00:02:31,539 yo declaro la referencia 55 00:02:31,539 --> 00:02:32,400 de una superclase 56 00:02:32,400 --> 00:02:35,400 pero luego puedo meter en ella lo que me interese 57 00:02:35,400 --> 00:02:39,520 entonces eso hace que el código 58 00:02:39,520 --> 00:02:40,960 sea un poquito más eficiente 59 00:02:40,960 --> 00:02:43,379 porque si yo 60 00:02:43,379 --> 00:02:44,439 cambio algo 61 00:02:44,439 --> 00:02:46,939 del empleado temporal 62 00:02:46,939 --> 00:02:49,159 lo cambio solo en la clase 63 00:02:49,159 --> 00:02:51,599 empleado temporal, no en la superclase 64 00:02:51,599 --> 00:02:53,520 esa era más o menos 65 00:02:53,520 --> 00:02:53,960 la idea 66 00:02:53,960 --> 00:02:57,659 con esa idea ya vimos unos cuantos ejemplos 67 00:02:57,659 --> 00:02:59,680 para ver eso como se podía utilizar 68 00:02:59,680 --> 00:03:01,319 como se podía utilizar 69 00:03:01,319 --> 00:03:02,879 de manera que nos facilitara las cosas 70 00:03:02,879 --> 00:03:05,000 entonces la idea es que más o menos eso 71 00:03:05,000 --> 00:03:07,159 pues lo tengáis en la cabeza 72 00:03:07,159 --> 00:03:09,360 medio claro, entonces de ahí ya vino 73 00:03:09,360 --> 00:03:11,699 todo el rollo del polimorfismo 74 00:03:11,699 --> 00:03:13,699 de la sobrescritura de métodos 75 00:03:13,699 --> 00:03:15,719 del instance of de todo ese rollo 76 00:03:15,719 --> 00:03:17,879 que vimos ya a través de los ejercicios 77 00:03:17,879 --> 00:03:18,580 ¿vale? 78 00:03:20,949 --> 00:03:23,090 bueno, pues entonces la herramienta de la herencia está muy bien 79 00:03:23,090 --> 00:03:25,409 para hacer un diseño jerárquico 80 00:03:25,409 --> 00:03:27,349 pero 81 00:03:27,349 --> 00:03:28,930 se queda corta 82 00:03:28,930 --> 00:03:31,650 ya lo previmos 83 00:03:31,650 --> 00:03:33,110 en su momento, se queda corta 84 00:03:33,110 --> 00:03:35,169 porque la herencia es 85 00:03:35,169 --> 00:03:37,110 simple, en Java al menos 86 00:03:37,110 --> 00:03:39,150 es simple, una clase 87 00:03:39,150 --> 00:03:40,569 solo puede heredar de otra 88 00:03:40,569 --> 00:03:42,330 solo puede heredar de otra 89 00:03:42,330 --> 00:03:46,210 entonces, a lo mejor hay entidades 90 00:03:46,210 --> 00:03:47,870 que son dos cosas a la vez 91 00:03:47,870 --> 00:03:50,009 ¿vale? por ejemplo 92 00:03:50,009 --> 00:03:52,310 un diseño de clases 93 00:03:52,310 --> 00:03:53,030 de un instituto 94 00:03:53,030 --> 00:03:56,330 pues habría profesores interinos, profesores 95 00:03:56,330 --> 00:03:58,530 de plantilla, alumnos 96 00:03:58,530 --> 00:03:59,889 personal de secretaría 97 00:03:59,889 --> 00:04:01,110 hay de todo 98 00:04:01,110 --> 00:04:04,389 entonces uno tiene que decidir cómo organiza 99 00:04:04,389 --> 00:04:06,150 esas clases, cómo las organiza 100 00:04:06,150 --> 00:04:08,310 entonces si me terencia mejor 101 00:04:08,310 --> 00:04:10,110 entonces pues a ver 102 00:04:10,110 --> 00:04:12,169 un profesor interino 103 00:04:12,169 --> 00:04:14,210 es profesor 104 00:04:14,210 --> 00:04:16,189 con lo cual hereda de profesor 105 00:04:16,189 --> 00:04:18,730 pero también es 106 00:04:18,730 --> 00:04:19,730 también puede ser 107 00:04:19,730 --> 00:04:22,170 poder representar otro papel 108 00:04:22,170 --> 00:04:23,649 ¿vale? 109 00:04:23,709 --> 00:04:26,189 poder representar otro papel porque es 110 00:04:26,189 --> 00:04:27,509 miembro del equipo directivo 111 00:04:27,509 --> 00:04:30,430 por ejemplo, entonces hay una super clase que es 112 00:04:30,430 --> 00:04:32,089 directivo que tiene 113 00:04:32,089 --> 00:04:34,629 las características de los miembros del equipo directivo 114 00:04:34,629 --> 00:04:36,589 entonces ese profesor interino 115 00:04:36,589 --> 00:04:38,569 tiene que coger todo lo de 116 00:04:38,569 --> 00:04:40,410 profesor y tiene que coger 117 00:04:40,410 --> 00:04:42,949 todo lo de equipo directivo 118 00:04:42,949 --> 00:04:45,449 ¿Cómo lo hace? No puede 119 00:04:45,449 --> 00:04:46,850 O es una cosa o es la otra 120 00:04:46,850 --> 00:04:48,569 Es una limitación muy grande 121 00:04:48,569 --> 00:04:50,509 Entonces 122 00:04:50,509 --> 00:04:54,129 ¿Hacemos que entonces profesor herede de equipo directivo 123 00:04:54,129 --> 00:04:55,990 Y así profesor interino 124 00:04:55,990 --> 00:04:58,170 A través de profesor hereda de equipo directivo? 125 00:04:58,649 --> 00:04:59,790 No, porque estamos inventando 126 00:04:59,790 --> 00:05:01,589 Esa relación, no todos los profesores 127 00:05:01,589 --> 00:05:04,129 No todos heredan de equipo directivo 128 00:05:04,129 --> 00:05:04,509 Entonces 129 00:05:04,509 --> 00:05:06,649 Que la herencia sea simple 130 00:05:06,649 --> 00:05:09,290 Es una limitación 131 00:05:09,290 --> 00:05:11,730 Bueno, pues vamos a través de un ejemplo 132 00:05:11,730 --> 00:05:13,970 motivar el tema de las interfaces que es muy sencillo 133 00:05:13,970 --> 00:05:15,670 y son cuatro chorradas, nada más 134 00:05:15,670 --> 00:05:30,290 bueno pues esto que 135 00:05:30,290 --> 00:05:32,170 vamos a contar ahora 136 00:05:32,170 --> 00:05:34,410 como no tengo 137 00:05:34,410 --> 00:05:40,079 pizarra 138 00:05:40,079 --> 00:05:43,139 si, pizarra tengo 139 00:05:43,139 --> 00:05:44,939 es verdad, lo que no tengo es con que usarla 140 00:05:44,939 --> 00:05:48,959 que todos los fines de semana se me voy a comprar 141 00:05:48,959 --> 00:05:50,500 vale, pues 142 00:05:50,500 --> 00:05:53,180 esto que vamos a 143 00:05:53,180 --> 00:05:54,980 ver ahora se llama 144 00:05:54,980 --> 00:06:03,339 interfaces 145 00:06:03,339 --> 00:06:05,240 ¿Vale? No lo confundáis 146 00:06:05,240 --> 00:06:07,139 Con las interfaces gráficas 147 00:06:07,139 --> 00:06:08,920 De usuario, eso es otra cosa 148 00:06:08,920 --> 00:06:11,180 ¿Vale? Eso es otra cosa, una interfaz gráfica 149 00:06:11,180 --> 00:06:11,939 De usuario, ¿sabes lo que es? 150 00:06:12,939 --> 00:06:15,459 Una forma de comunicarse con un programa 151 00:06:15,459 --> 00:06:17,279 A través de ventanas, a través de gráficos 152 00:06:17,279 --> 00:06:18,879 No a través de consola, ¿vale? 153 00:06:19,199 --> 00:06:20,939 Esto es otra cosa, no lo confundáis 154 00:06:20,939 --> 00:06:22,079 Esto que vamos a ver ahora son 155 00:06:22,079 --> 00:06:25,699 Interfaces de Java, pero no gráficas 156 00:06:25,699 --> 00:06:27,160 Interfaces de Java 157 00:06:27,160 --> 00:06:28,819 Bueno, pues venga 158 00:06:28,819 --> 00:06:31,420 Vamos a suponer que 159 00:06:31,420 --> 00:06:34,959 En un ejemplito sencillo 160 00:06:34,959 --> 00:06:36,120 Que es lo más fácil de entender 161 00:06:36,120 --> 00:06:38,519 Pues por ejemplo con empleados 162 00:06:38,519 --> 00:06:42,000 Vamos a poner aquí 163 00:06:42,000 --> 00:06:43,420 Ejemplo interfaces 164 00:06:43,420 --> 00:06:51,699 Empleados 165 00:06:51,699 --> 00:07:01,339 Bueno pues resulta 166 00:07:01,339 --> 00:07:03,220 Que en esta empresa 167 00:07:03,220 --> 00:07:05,180 Para la que vamos a hacer esta aplicación 168 00:07:05,180 --> 00:07:07,500 De gestión de los empleados de la empresa 169 00:07:07,500 --> 00:07:09,339 Hay dos tipos de empleado 170 00:07:09,339 --> 00:07:11,139 Empleado plantilla 171 00:07:11,139 --> 00:07:11,819 Y empleado temporal 172 00:07:11,819 --> 00:07:13,920 Lo más fácil de entender 173 00:07:13,920 --> 00:07:16,800 vale, pues entonces si hay dos tipos de empleado 174 00:07:16,800 --> 00:07:18,060 con información distinta 175 00:07:18,060 --> 00:07:20,579 hay que hacer dos clases 176 00:07:20,579 --> 00:07:22,600 porque son dos entidades 177 00:07:22,600 --> 00:07:24,360 distintas que hemos identificado 178 00:07:24,360 --> 00:07:26,120 empleado plantilla, empleado temporal 179 00:07:26,120 --> 00:07:28,800 pero efectivamente después de hacer 180 00:07:28,800 --> 00:07:30,639 el análisis de las propiedades 181 00:07:30,639 --> 00:07:32,360 que caracterizan a cada empleado 182 00:07:32,360 --> 00:07:34,839 hemos visto que muchas cosas son comunes 183 00:07:34,839 --> 00:07:36,899 entonces como hemos visto 184 00:07:36,899 --> 00:07:38,639 que muchas cosas son comunes hemos dicho 185 00:07:38,639 --> 00:07:40,779 vale, pensamos, vamos a hacer 186 00:07:40,779 --> 00:07:42,980 una clase empleado y que los dos 187 00:07:42,980 --> 00:07:44,600 heredan de ella. Hasta aquí 188 00:07:44,600 --> 00:07:47,060 el mismo proceso mental que con la herencia. 189 00:07:47,220 --> 00:07:47,579 El mismo. 190 00:07:48,459 --> 00:07:51,100 Estamos en la fase de diseño y decidimos 191 00:07:51,100 --> 00:07:52,839 eso. Decidimos hacer 192 00:07:52,839 --> 00:07:53,920 una superclase. 193 00:07:59,819 --> 00:08:00,420 Decidimos 194 00:08:00,420 --> 00:08:02,420 hacer una superclase empleado 195 00:08:02,420 --> 00:08:07,670 con las propiedades comunes 196 00:08:08,230 --> 00:08:11,290 que puedan ser, por ejemplo, 197 00:08:15,889 --> 00:08:16,910 todos los empleados 198 00:08:16,910 --> 00:08:18,589 sean de plantilla, sean de no sé qué, 199 00:08:18,709 --> 00:08:20,350 tienen NIF, nombre y sueldo. 200 00:08:28,149 --> 00:09:00,379 Entonces, como todos tienen NIF, nombre y sueldo, pues esto lo ponemos en empleado, silencio, y si hacemos lo habitual, pues haríamos un GET y un SET, que ya no lo sabemos de memoria, y habitualmente incorporaríamos también un constructor con parámetros para facilitar e instanciar el objeto ya con sus tres datos, etc. 201 00:09:00,379 --> 00:09:07,360 Bueno, pues esta superclase se ha hecho simplemente para unificar 202 00:09:07,360 --> 00:09:11,500 Unificar todo lo que tienen en común los empleados de plantilla 203 00:09:11,500 --> 00:09:14,059 Y los empleados temporales, por ejemplo 204 00:09:14,059 --> 00:09:17,399 Pues venga, entonces 205 00:09:17,399 --> 00:09:20,379 Ahora ya haríamos 206 00:09:20,379 --> 00:09:36,269 Vale, el empleado plantilla, pues por ejemplo 207 00:09:36,269 --> 00:09:37,750 Necesita 208 00:09:37,750 --> 00:09:39,450 De él necesitamos saber 209 00:09:39,450 --> 00:09:40,570 Su 210 00:09:40,570 --> 00:09:42,990 Fecha de ingreso 211 00:09:42,990 --> 00:09:46,289 Entonces pues yo que sé, podríamos poner aquí 212 00:09:46,289 --> 00:09:59,809 Date 213 00:09:59,809 --> 00:10:02,049 Pues de Java útil, Java time 214 00:10:02,049 --> 00:10:03,889 De donde, Java útil 215 00:10:03,889 --> 00:10:05,450 Por ejemplo 216 00:10:05,450 --> 00:10:07,809 Pero vamos 217 00:10:07,809 --> 00:10:10,250 Esto es solo para ver un ejemplo de diseño 218 00:10:10,250 --> 00:10:11,990 No vamos a utilizar estas clases ni nada 219 00:10:11,990 --> 00:10:12,370 Solo 220 00:10:12,370 --> 00:10:15,629 Pues nada, aquí incorporaríamos solamente 221 00:10:15,629 --> 00:10:17,029 El getDLSet 222 00:10:17,029 --> 00:10:19,129 de la propiedad que falta 223 00:10:19,129 --> 00:10:20,350 bueno, espera 224 00:10:20,350 --> 00:10:22,169 nos falta el extens 225 00:10:22,169 --> 00:10:25,490 aquí diríamos 226 00:10:25,490 --> 00:10:26,970 oye, que este empleado 227 00:10:26,970 --> 00:10:29,289 de plantilla es empleado 228 00:10:29,289 --> 00:10:30,789 también, entonces tiene las 229 00:10:30,789 --> 00:10:33,210 tres propiedades de empleado y además 230 00:10:33,210 --> 00:10:34,250 tiene una fecha de ingreso 231 00:10:34,250 --> 00:10:36,629 propia solo de los de plantilla 232 00:10:36,629 --> 00:10:39,549 pues nada, pondríamos los get y set 233 00:10:39,549 --> 00:10:50,679 vale, no hago 234 00:10:50,679 --> 00:10:52,580 no voy a hacer todos los constructores y todo 235 00:10:52,580 --> 00:10:55,100 Porque esto no es, no vamos a trabajar con ellos 236 00:10:55,100 --> 00:10:57,100 Es solamente para ver el diseño que nos quedaría 237 00:10:57,100 --> 00:10:58,220 Si incorporamos interfaces 238 00:10:58,220 --> 00:10:59,519 Entonces, bueno 239 00:10:59,519 --> 00:11:02,200 No pongo el constructor con parámetros 240 00:11:02,200 --> 00:11:05,419 Entonces, en esta fase de diseño 241 00:11:05,419 --> 00:11:06,059 En la que estamos 242 00:11:06,059 --> 00:11:08,399 Hemos identificado que también tenemos 243 00:11:08,399 --> 00:11:10,539 Empleados temporales 244 00:11:10,539 --> 00:11:20,639 Vale 245 00:11:20,639 --> 00:11:23,419 Pues este empleado temporal sería también 246 00:11:23,419 --> 00:11:27,799 Empleado 247 00:11:27,799 --> 00:11:33,299 Vale, y el empleado temporal 248 00:11:33,299 --> 00:11:35,440 pues bueno, añade yo que sé, cualquier propiedad 249 00:11:35,440 --> 00:11:37,299 nos da igual, pues el empleado 250 00:11:37,299 --> 00:11:37,740 temporal 251 00:11:37,740 --> 00:11:41,220 perdón, no te he oído 252 00:11:41,220 --> 00:11:43,259 ala, venga 253 00:11:43,259 --> 00:11:45,340 le ponemos la fecha en la que 254 00:11:45,340 --> 00:11:47,240 se acaba, por poner 255 00:11:47,240 --> 00:11:47,580 algo 256 00:11:47,580 --> 00:11:53,840 fecha fin de contrato 257 00:11:53,840 --> 00:11:57,509 ya está 258 00:11:57,509 --> 00:12:06,580 y el get y el set que le falta 259 00:12:06,580 --> 00:12:13,809 bueno 260 00:12:13,809 --> 00:12:17,009 y llegados a este punto 261 00:12:17,009 --> 00:12:18,909 pues bueno, ya uno podría hacer una aplicación 262 00:12:18,909 --> 00:12:20,389 de gestión con un main 263 00:12:20,389 --> 00:12:23,009 en el cual trabaje con objetos empleado 264 00:12:23,009 --> 00:12:26,250 y claro, tendrá que haber 265 00:12:26,250 --> 00:12:29,049 establecido unos requisitos, ¿qué va a hacer mi aplicación? 266 00:12:29,129 --> 00:12:31,789 pues mi aplicación con los empleados va a hacer 267 00:12:31,789 --> 00:12:34,610 pues esto, lo otro, ¿qué pueden hacer los empleados? 268 00:12:35,350 --> 00:12:37,409 pues los empleados temporal 269 00:12:37,409 --> 00:12:40,289 y plantilla, cualquier empleado 270 00:12:40,289 --> 00:12:43,470 por ejemplo, ¿qué funcionalidad pueden tener todos ellos? 271 00:12:43,889 --> 00:12:46,049 pues generar nómina, por ejemplo 272 00:12:46,049 --> 00:12:49,509 generar nómina, bueno pues entonces 273 00:12:49,509 --> 00:13:17,240 Entonces ese método lo podríamos poner aquí, un método public string generar nómina, ¿vale? Entonces como la nómina de los empleados temporales y de plantillas es distinta, se genera de forma distinta, en la clase empleado lo dejaríamos así, ¿vale? 274 00:13:17,240 --> 00:13:19,659 Ese es un diseño que estamos haciendo dentro de todos los posibles. 275 00:13:19,799 --> 00:13:25,759 Entonces, al dejarlo así, abierto, porque generar nómina depende del tipo de empleado, 276 00:13:26,519 --> 00:13:30,220 al dejarlo así lo convertimos en un método abstracto. 277 00:13:30,220 --> 00:13:44,970 Entonces, al convertirlo en un método abstracto, lo identificamos así, ¿vale? 278 00:13:46,110 --> 00:13:53,009 Y al ser un método abstracto, automáticamente la clase se nos convierte en clase abstracta. 279 00:13:53,009 --> 00:14:01,480 y no pasa nada 280 00:14:01,480 --> 00:14:03,419 porque se convierta en clase abstracta 281 00:14:03,419 --> 00:14:05,679 silencio los de atrás 282 00:14:05,679 --> 00:14:09,539 lo que pasa al convertirse en clase abstracta 283 00:14:09,539 --> 00:14:11,039 simplemente es 284 00:14:11,039 --> 00:14:13,340 que, que implicaciones tiene 285 00:14:13,340 --> 00:14:15,580 que hayamos convertido empleado en clase abstracta 286 00:14:15,580 --> 00:14:17,320 que implicaciones tiene 287 00:14:17,320 --> 00:14:18,139 Moisés 288 00:14:18,139 --> 00:14:21,460 no lo sabes 289 00:14:21,460 --> 00:14:24,980 estas partes 290 00:14:24,980 --> 00:14:27,019 pues estas partes son unas partes muy importantes 291 00:14:27,019 --> 00:14:28,620 porque te voy a aseminar de ellas en dos semanas 292 00:14:28,620 --> 00:14:32,279 Diego, estas partes de herencia 293 00:14:32,279 --> 00:14:35,419 ¿qué implicación tiene haberla convertido en abstracta? 294 00:14:37,740 --> 00:14:39,259 la única que tiene 295 00:14:39,259 --> 00:14:40,960 a ver, Daniel 296 00:14:40,960 --> 00:14:46,240 ¿qué implicación tiene haber convertido esta clase en abstracta? 297 00:14:50,029 --> 00:14:50,889 que ya no se puede 298 00:14:50,889 --> 00:14:54,029 ¿ya no se pueden? 299 00:14:54,450 --> 00:15:00,100 no, que ya no se pueden crear objetos empleados 300 00:15:00,100 --> 00:15:03,200 cuando no era abstracta 301 00:15:03,220 --> 00:15:05,360 Yo podría instanciar un objeto empleado 302 00:15:05,360 --> 00:15:07,899 y también un objeto empleado de plantilla 303 00:15:07,899 --> 00:15:08,899 y también un objeto empleado temporal. 304 00:15:09,080 --> 00:15:10,559 Podría instanciar de los tres tipos. 305 00:15:11,620 --> 00:15:13,539 Entonces, un objeto empleado genérico 306 00:15:13,539 --> 00:15:14,639 yo podría instanciarlo. 307 00:15:15,279 --> 00:15:17,419 Si yo quiero tener un objeto que sea un empleado 308 00:15:17,419 --> 00:15:19,480 y que no tenga los datos adicionales 309 00:15:19,480 --> 00:15:21,480 ni de plantilla ni de temporal, podría. 310 00:15:22,480 --> 00:15:23,940 Al hacerla abstracta, 311 00:15:24,679 --> 00:15:26,840 ya no se pueden instanciar objetos empleados. 312 00:15:26,940 --> 00:15:27,419 No se pueden. 313 00:15:27,500 --> 00:15:29,379 Yo no podría hacer nunca un new empleado. 314 00:15:30,379 --> 00:15:32,960 Aunque tenga constructor aquí, los tiene. 315 00:15:33,220 --> 00:15:36,320 pero en realidad nunca voy a poder hacer un new empleado 316 00:15:36,320 --> 00:15:37,500 porque es abstracta 317 00:15:37,500 --> 00:15:40,100 el que tenga los constructores 318 00:15:40,100 --> 00:15:41,620 ahora mismo ya para lo único que vale 319 00:15:41,620 --> 00:15:43,559 es que desde las herederas 320 00:15:43,559 --> 00:15:45,919 yo los puedo llamar con super 321 00:15:45,919 --> 00:15:47,440 para servirme de ellos 322 00:15:47,440 --> 00:15:49,879 para hacer los propios constructores de las herederas 323 00:15:49,879 --> 00:15:52,240 es para lo único que valen ahora esos constructores 324 00:15:52,240 --> 00:15:53,879 para que las herederas 325 00:15:53,879 --> 00:15:55,919 los usen con super para construir 326 00:15:55,919 --> 00:15:57,860 los suyos propios llamando al de arriba 327 00:15:57,860 --> 00:15:58,919 y ahorrándose código 328 00:15:58,919 --> 00:16:00,539 pero ya no valen para nada más 329 00:16:00,539 --> 00:16:03,179 porque esta clase se ha convertido en abstracta y no se puede instanciar 330 00:16:03,179 --> 00:16:05,960 entonces que no se puedan instanciar objetos de esta clase 331 00:16:05,960 --> 00:16:07,360 no pasa nada 332 00:16:07,360 --> 00:16:10,440 porque me está sirviendo a nivel de código 333 00:16:10,440 --> 00:16:11,620 como plantilla 334 00:16:11,620 --> 00:16:13,799 me está sirviendo como plantilla 335 00:16:13,799 --> 00:16:16,539 para ahora las herederas 336 00:16:16,539 --> 00:16:21,019 trabajar como si hubiera hecho un corta y pega 337 00:16:21,019 --> 00:16:22,159 lo de arriba hasta abajo 338 00:16:22,159 --> 00:16:24,480 entonces me está sirviendo como plantilla de código 339 00:16:24,480 --> 00:16:27,120 y todo lo que herede de ahí es como haber hecho un copia y pega 340 00:16:27,120 --> 00:16:29,259 entonces una clase abstracta 341 00:16:29,259 --> 00:16:30,000 me sirve 342 00:16:30,000 --> 00:16:32,759 me es útil en tiempo de desarrollo 343 00:16:32,759 --> 00:16:34,860 de escritura de código, me sirve para unificar 344 00:16:34,860 --> 00:16:36,279 código, lo que yo ponga ahí 345 00:16:36,279 --> 00:16:38,779 es como si lo estuviera tecleando directamente 346 00:16:38,779 --> 00:16:40,399 en las herederas, me vale para eso 347 00:16:40,399 --> 00:16:42,399 una clase abstracta 348 00:16:42,399 --> 00:16:44,580 pero nunca voy a instanciar de ella 349 00:16:44,580 --> 00:16:46,700 en tiempo de ejecución, esa clase no 350 00:16:46,700 --> 00:16:49,000 existe, no vale para nada, en tiempo de ejecución 351 00:16:49,000 --> 00:16:50,679 nunca voy a poder instanciar objetos en pleno 352 00:16:50,679 --> 00:16:52,759 ¿vale? pero para 353 00:16:52,759 --> 00:16:54,879 lo que es la escritura de código me es muy útil 354 00:16:54,879 --> 00:16:56,860 porque yo en las herederas 355 00:16:56,860 --> 00:16:59,080 ya tengo todo lo de la superclase abstracta 356 00:16:59,080 --> 00:16:59,820 ¿vale? 357 00:17:00,960 --> 00:17:02,179 bueno, pues entonces 358 00:17:02,179 --> 00:17:04,059 la clase abstracta 359 00:17:04,059 --> 00:17:06,519 al fijarme este método 360 00:17:06,519 --> 00:17:08,779 ahora que ocurre en las herederas 361 00:17:08,779 --> 00:17:11,000 al haber fijado yo este método 362 00:17:11,000 --> 00:17:11,980 así abstracto 363 00:17:11,980 --> 00:17:14,599 automáticamente se me ha puesto rojillo 364 00:17:14,599 --> 00:17:15,619 aquí 365 00:17:15,619 --> 00:17:18,119 en las herederas que antes no estaba 366 00:17:18,119 --> 00:17:19,480 ¿por qué? 367 00:17:21,259 --> 00:17:22,779 claro, ahora ya 368 00:17:22,779 --> 00:17:25,140 si el método de la superclase es abstracto 369 00:17:25,140 --> 00:17:26,339 y tú heredas 370 00:17:26,339 --> 00:17:29,039 tienes que darle cuerpo a ese método 371 00:17:29,039 --> 00:17:30,660 tienes que dárselo obligatoriamente 372 00:17:30,660 --> 00:17:34,779 Si tú heredas de una clase abstracta con métodos abstractos, lo tienes que decir. 373 00:17:36,160 --> 00:17:43,900 Entonces, esa es otra utilidad de la clase abstracta, que está obligando, forzando a sus herederas, 374 00:17:43,960 --> 00:17:47,660 está forzando a que se comprometan en un comportamiento. 375 00:17:48,900 --> 00:17:53,980 Dile, vale, tú hereda de mí, yo este método lo dejo en blanco porque no sé cómo lo vas a hacer, 376 00:17:54,700 --> 00:17:57,799 pero te obligo a que especifiques cómo vas a hacerlo. 377 00:17:57,799 --> 00:18:00,119 ¿vale? te obligo a que lo especifique 378 00:18:00,119 --> 00:18:02,240 si tiene sentido, tiene sentido en el diseño 379 00:18:02,240 --> 00:18:04,460 de clases, que si tú quieres ser empleado 380 00:18:04,460 --> 00:18:06,380 vale, tú sé empleado 381 00:18:06,380 --> 00:18:08,319 pero entonces dime cómo vas a 382 00:18:08,319 --> 00:18:10,299 generar la nómina, dímelo, porque si no 383 00:18:10,299 --> 00:18:12,279 no seas empleado, tiene sentido 384 00:18:12,279 --> 00:18:13,359 que el diseño funcione así 385 00:18:13,359 --> 00:18:15,420 bueno, pues efectivamente 386 00:18:15,420 --> 00:18:17,720 empleado plantilla 387 00:18:17,720 --> 00:18:18,720 pues 388 00:18:18,720 --> 00:18:22,299 sobrescribiría 389 00:18:22,299 --> 00:18:23,319 obligatoriamente 390 00:18:23,319 --> 00:18:26,200 el método generar nómina 391 00:18:26,200 --> 00:18:28,039 con lo que fuera 392 00:18:28,039 --> 00:18:31,299 con lo que fuera 393 00:18:31,299 --> 00:18:38,470 aquí nos da un poco igual 394 00:18:38,470 --> 00:18:45,960 vale 395 00:18:45,960 --> 00:18:47,720 y 396 00:18:47,720 --> 00:18:49,940 ojo eh, esto 397 00:18:49,940 --> 00:18:52,079 y lo mismo 398 00:18:52,079 --> 00:18:53,720 el empleado 399 00:18:53,720 --> 00:18:55,460 temporal 400 00:18:55,460 --> 00:18:58,599 tiene que sobrescribir esto 401 00:18:58,599 --> 00:19:02,480 vale 402 00:19:02,480 --> 00:19:04,059 pues nada 403 00:19:04,059 --> 00:19:08,839 sobrescribiría también 404 00:19:08,839 --> 00:19:10,319 su generar nómina 405 00:19:10,319 --> 00:19:17,660 bueno pues nada, la aplicación 406 00:19:17,660 --> 00:19:19,400 ahí ya está funcionando, uno 407 00:19:19,400 --> 00:19:21,880 hace su main con los requisitos que haya que hacer 408 00:19:21,880 --> 00:19:23,920 mete los métodos en las 409 00:19:23,920 --> 00:19:25,799 clases de empleado temporal, empleado 410 00:19:25,799 --> 00:19:27,119 plantilla para que hagan 411 00:19:27,119 --> 00:19:29,339 las funcionalidades que tienen que hacer, ya 412 00:19:29,339 --> 00:19:31,700 lo que sea, lo que la aplicación me pida hacer con estos 413 00:19:31,700 --> 00:19:33,720 empleados, vale 414 00:19:33,720 --> 00:19:36,079 luego la aplicación va creciendo 415 00:19:36,079 --> 00:19:37,519 y 416 00:19:37,519 --> 00:19:39,920 aparece 417 00:19:39,920 --> 00:19:40,859 uy he puesto dos return 418 00:19:40,859 --> 00:19:46,420 y aparece otro tipo de empleado 419 00:19:46,420 --> 00:19:48,299 empleado 420 00:19:48,299 --> 00:19:49,559 vamos a llamarle empleado externo 421 00:19:49,559 --> 00:19:52,319 empleado externo es un empleado que te viene 422 00:19:52,319 --> 00:19:54,079 de una empresa que te lo has subcontratado 423 00:19:54,079 --> 00:19:55,960 no es temporal tuyo, pero lo has subcontratado tú 424 00:19:55,960 --> 00:19:57,059 es un empleado externo 425 00:19:57,059 --> 00:20:00,400 rápidamente vamos a suponer que hacemos un empleado externo 426 00:20:00,400 --> 00:20:00,859 por aquí 427 00:20:00,859 --> 00:20:04,460 y me sobra un punto y coma 428 00:20:04,460 --> 00:20:05,740 efectivamente 429 00:20:05,740 --> 00:20:18,970 tenemos aquí el empleado externo 430 00:20:18,970 --> 00:20:20,650 que también es un empleado 431 00:20:20,650 --> 00:20:23,130 se tiene que caracterizar 432 00:20:23,130 --> 00:20:24,390 por su nombre, nif y sueldo 433 00:20:24,390 --> 00:20:26,750 también es un empleado, pues no pasa nada 434 00:20:26,750 --> 00:20:28,289 yo lo incorporo 435 00:20:28,289 --> 00:20:30,009 lo incorporo a mi jerarquía 436 00:20:30,009 --> 00:20:32,390 ¿vale? este me ha llegado 437 00:20:32,390 --> 00:20:32,809 como 438 00:20:32,809 --> 00:20:35,049 mantenimiento 439 00:20:35,049 --> 00:20:38,309 de la aplicación, la aplicación 440 00:20:38,309 --> 00:20:40,410 estaba funcionando, lleva ya un año funcionando 441 00:20:40,410 --> 00:20:42,430 y ahora en mi empresa se incorpora 442 00:20:42,430 --> 00:20:44,269 esta posibilidad, bueno pues yo 443 00:20:44,269 --> 00:20:46,490 mantengo la aplicación incorporándole 444 00:20:46,490 --> 00:20:48,210 esto, digo no pasa nada, me hago 445 00:20:48,210 --> 00:20:50,089 otra nueva entidad, empleado externo que también 446 00:20:50,089 --> 00:20:52,329 hereda de empleado, pues muy bien 447 00:20:52,329 --> 00:20:53,329 ¿vale? 448 00:20:54,210 --> 00:20:56,349 hereda de empleado tendrá pues por ejemplo 449 00:20:56,349 --> 00:20:57,789 su propiedad adicional 450 00:20:57,789 --> 00:21:01,150 Nombre de la empresa por la que viene 451 00:21:01,150 --> 00:21:02,390 Por ejemplo, yo que sé 452 00:21:02,390 --> 00:21:05,650 Cualquier chorrada, no nos importa 453 00:21:05,650 --> 00:21:09,289 Y también necesita generar su nómina 454 00:21:09,289 --> 00:21:10,869 Porque si era de empleado 455 00:21:10,869 --> 00:21:13,130 Todos los empleados tienen que generar su nómina 456 00:21:13,130 --> 00:21:25,880 Pues venga, nómina externa 457 00:21:25,880 --> 00:21:26,500 Por ejemplo 458 00:21:26,500 --> 00:21:36,220 Vale, bueno, aquí en condiciones normales 459 00:21:36,220 --> 00:21:37,539 Pues haríamos el get y el set 460 00:21:37,539 --> 00:21:39,579 Vamos a hacerlo para que no parezca que 461 00:21:39,579 --> 00:21:44,000 Que pasamos de ellos 462 00:21:44,000 --> 00:21:46,640 vale, pues 463 00:21:46,640 --> 00:21:48,660 ahora 464 00:21:48,660 --> 00:21:50,619 resulta que aparece una nueva capacidad 465 00:21:50,619 --> 00:21:52,519 de la empresa, resulta que 466 00:21:52,519 --> 00:21:53,900 la empresa pues dice, a ver 467 00:21:53,900 --> 00:21:56,619 una funcionalidad nueva, yo tengo 468 00:21:56,619 --> 00:21:58,039 la potestad de despedir 469 00:21:58,039 --> 00:22:00,539 despedir 470 00:22:00,539 --> 00:22:01,920 y cuando despida tengo que 471 00:22:01,920 --> 00:22:04,279 hacer una acción concreta, por ejemplo 472 00:22:04,279 --> 00:22:05,940 generar finiquito, vale 473 00:22:05,940 --> 00:22:08,420 pues es una nueva funcionalidad de la aplicación 474 00:22:08,420 --> 00:22:09,299 generar finiquito 475 00:22:09,299 --> 00:22:12,319 vale, pero eso, quienes lo hacen 476 00:22:12,319 --> 00:22:14,900 solamente lo hacen los empleados 477 00:22:14,900 --> 00:22:16,640 temporales y externos 478 00:22:16,640 --> 00:22:18,599 porque no puedo despedir a los de plantilla 479 00:22:18,599 --> 00:22:20,720 entonces ahí ya 480 00:22:20,720 --> 00:22:22,559 entra algo que tengo que ver 481 00:22:22,559 --> 00:22:23,940 cómo lo incorporo 482 00:22:23,940 --> 00:22:26,200 de manera que quede bonito, que quede claro 483 00:22:26,200 --> 00:22:28,099 que quede un diseño decente en la aplicación 484 00:22:28,099 --> 00:22:29,859 entonces 485 00:22:29,859 --> 00:22:32,220 se traduce en que tengo que meter ahí 486 00:22:32,220 --> 00:22:34,380 un método nuevo, un comportamiento 487 00:22:34,380 --> 00:22:35,599 nuevo, pero sólo 488 00:22:35,599 --> 00:22:38,440 para dos entidades, para empleado externo 489 00:22:38,440 --> 00:22:39,980 y temporal 490 00:22:39,980 --> 00:22:43,410 entonces bueno, vale 491 00:22:43,410 --> 00:22:46,309 Pues yo podría decir, bueno, pues esa funcionalidad nueva, 492 00:22:46,589 --> 00:22:50,130 generar finiquito, la pongo en empleado externo dentro 493 00:22:50,130 --> 00:22:52,430 y la pongo en empleado temporal dentro. 494 00:22:53,190 --> 00:22:53,789 Y ya está. 495 00:22:53,950 --> 00:22:55,170 Y en empleado plantilla no la pongo. 496 00:22:56,170 --> 00:22:58,029 Vale, bueno, sería una solución. 497 00:22:59,829 --> 00:23:03,170 Por un lado estamos poniendo el mismo método, 498 00:23:03,549 --> 00:23:05,410 aunque sea con cuerpo distinto, el mismo método, 499 00:23:05,490 --> 00:23:08,809 el mismo nombre, lo estamos poniendo en dos clases distintas. 500 00:23:09,130 --> 00:23:10,890 Entonces eso ya nos suena como a que, oye, 501 00:23:10,890 --> 00:23:12,250 tú no puedes unificar esto 502 00:23:12,250 --> 00:23:14,589 de alguna manera con herencia o algo así 503 00:23:14,589 --> 00:23:17,250 tenemos esta herramienta 504 00:23:17,250 --> 00:23:18,809 que queremos usarla precisamente para eso 505 00:23:18,809 --> 00:23:21,109 para unificar todo lo que 506 00:23:21,109 --> 00:23:22,630 compartan diferentes clases 507 00:23:22,630 --> 00:23:25,049 no podríamos, pero claro que tenemos un problema 508 00:23:25,049 --> 00:23:26,769 que no podemos poner 509 00:23:26,769 --> 00:23:28,589 generar finiquito en empleado 510 00:23:28,589 --> 00:23:31,470 porque sería un mal sitio 511 00:23:31,470 --> 00:23:33,309 porque entonces se le daría 512 00:23:33,309 --> 00:23:34,710 generar finiquito los tres tipos 513 00:23:34,710 --> 00:23:36,710 hombre, podría 514 00:23:36,710 --> 00:23:38,630 decir, vale, no pasa nada, lo pongo ahí 515 00:23:38,630 --> 00:23:40,569 y el empleado plantilla simplemente 516 00:23:40,569 --> 00:23:42,410 ese método nunca lo va a llamar 517 00:23:42,410 --> 00:23:44,529 vale, nunca lo va a llamar, pero es que 518 00:23:44,529 --> 00:23:46,750 queda un diseño horrible, porque entonces tú tienes 519 00:23:46,750 --> 00:23:48,410 el que esté usando estas clases 520 00:23:48,410 --> 00:23:50,569 verá empleado plantilla y dirá, anda, tiene un método 521 00:23:50,569 --> 00:23:52,670 general finiquito, ¿y por qué tiene un método general finiquito? 522 00:23:52,750 --> 00:23:54,529 entonces eso ya es una aplicación fea 523 00:23:54,529 --> 00:23:55,930 no debería tener ese método 524 00:23:55,930 --> 00:23:57,930 ese método solo deberían tener los objetos 525 00:23:57,930 --> 00:24:00,769 empleado plantilla, empleado temporal y empleado externo 526 00:24:00,769 --> 00:24:01,869 entonces 527 00:24:01,869 --> 00:24:03,750 como que no acabamos de ver claro 528 00:24:03,750 --> 00:24:06,529 cómo incluir eso 529 00:24:06,529 --> 00:24:08,849 esa funcionalidad que solo afecta 530 00:24:08,849 --> 00:24:11,329 a dos de nuestras tres entidades 531 00:24:11,329 --> 00:24:14,650 claro, aquí la solución sería 532 00:24:14,650 --> 00:24:17,109 hombre, y si yo me hago otra superclase 533 00:24:17,109 --> 00:24:18,670 otra superclase 534 00:24:18,670 --> 00:24:20,609 que sea empleado despedible 535 00:24:20,609 --> 00:24:22,150 por ejemplo, yo que sé 536 00:24:22,150 --> 00:24:24,589 entonces, empleado 537 00:24:24,589 --> 00:24:26,329 temporal heredaría 538 00:24:26,329 --> 00:24:28,809 de empleado normal y de empleado despedible 539 00:24:28,809 --> 00:24:30,730 empleado plantilla 540 00:24:30,730 --> 00:24:32,190 solo de empleado normal 541 00:24:32,190 --> 00:24:34,009 y empleado externo heredaría 542 00:24:34,009 --> 00:24:36,450 de empleado normal 543 00:24:36,450 --> 00:24:38,150 Y de empleado despedible 544 00:24:38,150 --> 00:24:39,690 Eso sería lo ideal 545 00:24:39,690 --> 00:24:41,329 Pero no podemos 546 00:24:41,329 --> 00:24:44,009 Porque cada clase solo puede heredar de otra 547 00:24:44,009 --> 00:24:45,009 No puede heredar de dos 548 00:24:45,009 --> 00:24:47,670 Entonces la solución ideal sería esa 549 00:24:47,670 --> 00:24:49,490 Hacer dos plantillas 550 00:24:49,490 --> 00:24:51,769 La plantilla empleado tal y como la tenemos 551 00:24:51,769 --> 00:24:54,109 Y la plantilla empleado despedible 552 00:24:54,109 --> 00:24:55,690 Y que luego 553 00:24:55,690 --> 00:24:57,250 Nuestras tres entidades 554 00:24:57,250 --> 00:25:00,569 Empleado, plantilla, temporal y externo 555 00:25:00,569 --> 00:25:02,230 Elijan de quien heredan 556 00:25:02,230 --> 00:25:03,609 Y si quieren heredar de las dos 557 00:25:03,609 --> 00:25:04,210 Pues de las dos 558 00:25:04,210 --> 00:25:05,589 Esa es la solución ideal 559 00:25:05,589 --> 00:25:08,349 Y así se queda, cada entidad se queda 560 00:25:08,349 --> 00:25:10,450 Si necesita de las dos, se queda con las dos 561 00:25:10,450 --> 00:25:12,170 Si necesita de una sola, se queda con una 562 00:25:12,170 --> 00:25:13,930 Esa sería la solución ideal, pero no podemos 563 00:25:13,930 --> 00:25:15,890 Porque, como hemos dicho muchas veces 564 00:25:15,890 --> 00:25:17,130 En Java no podemos ir a dar de dos 565 00:25:17,130 --> 00:25:18,849 Vale, pues entonces viene 566 00:25:18,849 --> 00:25:21,150 El truco, el parche 567 00:25:21,150 --> 00:25:22,890 De las interfaces 568 00:25:22,890 --> 00:25:25,829 Vale, pues me voy a hacer una cosa 569 00:25:25,829 --> 00:25:27,769 Que se llama interfaz 570 00:25:27,769 --> 00:25:30,069 Que una interfaz en realidad 571 00:25:30,069 --> 00:25:31,490 Es 572 00:25:31,490 --> 00:25:33,789 Como si fuera una clase 573 00:25:33,789 --> 00:25:36,509 Con todos los métodos abstractos o vacíos 574 00:25:36,509 --> 00:25:38,069 ¿Vale? 575 00:25:38,089 --> 00:25:38,769 Una interfaz 576 00:25:38,769 --> 00:25:39,509 La podéis ver 577 00:25:39,509 --> 00:25:41,150 Como una clase 578 00:25:41,150 --> 00:25:44,670 Que tiene todos sus métodos abstractos 579 00:25:44,670 --> 00:25:46,190 Eso sería 580 00:25:46,190 --> 00:25:48,250 Vamos a escribirlo aquí 581 00:25:48,250 --> 00:25:50,289 Para que viéndolo se nos quede más 582 00:25:50,289 --> 00:25:58,579 Es una clase 583 00:25:58,579 --> 00:26:00,980 Con todos los 584 00:26:00,980 --> 00:26:04,450 Métodos abstractos 585 00:26:04,450 --> 00:26:07,319 ¿Vale? 586 00:26:07,400 --> 00:26:08,700 Bueno, así hasta cierta versión 587 00:26:08,700 --> 00:26:09,880 Luego ya se permite una 588 00:26:09,880 --> 00:26:11,380 Luego ya se van incorporando cosas 589 00:26:11,380 --> 00:26:13,420 Que las iremos que nosotros también diciendo 590 00:26:13,420 --> 00:26:17,140 ¿Vale? Pero en origen, su esencia viene de ahí. 591 00:26:17,359 --> 00:26:19,599 Una interfaz es una clase que tiene todos los métodos abstractos. 592 00:26:20,839 --> 00:26:21,319 ¿Vale? 593 00:26:22,700 --> 00:26:28,700 Y las clases normales de Java lo que hacen es heredar de ella, 594 00:26:29,339 --> 00:26:30,900 pero en este caso no se llama heredar. 595 00:26:31,359 --> 00:26:33,259 En este caso se llama implementar. 596 00:26:33,660 --> 00:26:34,900 Lo que hacen es implementarla. 597 00:26:36,259 --> 00:26:39,960 Es decir, dan cuerpo a sus métodos. 598 00:26:40,980 --> 00:26:42,700 Entonces, esta es la idea. 599 00:26:45,759 --> 00:26:48,539 Pues, entonces, aquí en nuestra aplicación podríamos incorporar. 600 00:26:49,400 --> 00:26:54,559 Vamos a incorporar ahora una interfaz empleado despedible. 601 00:26:55,160 --> 00:26:59,400 Empleado despedible, para que recoja el comportamiento de los 602 00:26:59,400 --> 00:27:00,940 empleados que pueden ser despedidos. 603 00:27:02,599 --> 00:27:05,220 Pues, uno haría aquí una interfaz. 604 00:27:07,920 --> 00:27:17,480 Entonces, despedible. 605 00:27:19,759 --> 00:27:20,400 Despedible. 606 00:27:22,740 --> 00:27:25,079 Vale, entonces, ¿cómo se programa, 607 00:27:25,220 --> 00:27:26,400 cómo se declara una interfaz? 608 00:27:26,599 --> 00:27:31,420 pues uno cambia el class, la palabra class la cambia por esta, ¿vale? 609 00:27:31,480 --> 00:27:34,220 La cambia por esa, ese es el primer requisito, 610 00:27:35,099 --> 00:27:39,119 la palabra class se cambia por esa, ¿vale? 611 00:27:42,559 --> 00:27:46,059 Entonces de una interfaz como tiene todos sus métodos abstractos, 612 00:27:46,200 --> 00:27:49,859 salvo los matices que se han incorporado después que ya incorporamos, 613 00:27:51,359 --> 00:27:54,920 ya incorporaremos, como tiene todos los métodos abstractos, 614 00:27:55,039 --> 00:27:57,359 de una interfaz no se pueden instanciar objetos tampoco, 615 00:27:57,359 --> 00:27:58,640 no se pueden instanciar. 616 00:27:59,200 --> 00:28:03,460 Una interfaz vale solo para heredarla o implementarla. 617 00:28:03,519 --> 00:28:04,440 Esto se llama implementarla. 618 00:28:04,599 --> 00:28:05,279 Solo vale para eso. 619 00:28:06,539 --> 00:28:09,619 Entonces, como no permite que se instancien objetos de ella, 620 00:28:10,960 --> 00:28:13,480 en una interfaz no podemos declarar propiedades. 621 00:28:13,660 --> 00:28:14,099 No podemos. 622 00:28:14,900 --> 00:28:15,160 ¿Vale? 623 00:28:16,380 --> 00:28:20,240 Yo no puedo poner aquí cosas como esta. 624 00:28:20,619 --> 00:28:24,339 Por ejemplo, el compilador ya se me queja y me dice, 625 00:28:24,460 --> 00:28:26,420 no, esto es una interfaz, no es una clase. 626 00:28:27,119 --> 00:28:28,539 Luego, no puede tener propiedades. 627 00:28:29,200 --> 00:28:40,700 O sea, si esto fuera una clase, ya sí que podría, puede tener su propiedad nombre, pero no es una clase, es una interfaz, entonces no puede. 628 00:28:43,140 --> 00:28:48,220 El sentido de esto es, como nunca vas a instanciar objetos de esto, pues no puedes tener propiedades. 629 00:28:49,420 --> 00:28:59,539 Si tú quieres una clase de la que vayan a heredar otros y que también tenga propiedades, elige una clase, elige una clase abstracta si quieres, pero no elijas una interfaz. 630 00:28:59,539 --> 00:29:01,920 porque una interfaz no puede tener 631 00:29:01,920 --> 00:29:04,440 propiedades, lo que sí que puede 632 00:29:04,440 --> 00:29:05,640 es tener 633 00:29:05,640 --> 00:29:07,480 propiedades estáticas 634 00:29:07,480 --> 00:29:12,460 ¿vale? eso sí que puede 635 00:29:12,460 --> 00:29:13,720 que además 636 00:29:13,720 --> 00:29:15,220 tienen que ser 637 00:29:15,220 --> 00:29:25,240 constantes, esto sí puede 638 00:29:25,240 --> 00:29:26,180 parecer una interfaz 639 00:29:26,180 --> 00:29:28,440 propiedades que son estáticas 640 00:29:28,440 --> 00:29:31,259 y que además no pueden cambiar 641 00:29:31,259 --> 00:29:32,980 de valor una vez que las has 642 00:29:32,980 --> 00:29:35,240 inicializado, que será el 643 00:29:35,240 --> 00:29:37,359 el modificador 644 00:29:37,359 --> 00:29:39,359 final, si recordáis. El modificador 645 00:29:39,359 --> 00:29:41,000 final, cuando se le ponía una propiedad, 646 00:29:41,460 --> 00:29:43,299 significa que esa propiedad, una vez 647 00:29:43,299 --> 00:29:45,359 que reciba valor, que tiene 648 00:29:45,359 --> 00:29:47,380 que recibirlo en el momento de declararse, 649 00:29:48,839 --> 00:29:49,480 ya no 650 00:29:49,480 --> 00:29:51,400 va a cambiar nunca de valor, no se puede cambiar. 651 00:29:52,839 --> 00:29:53,279 Bueno, pues 652 00:29:53,279 --> 00:29:54,859 las interfaces pueden tener 653 00:29:54,859 --> 00:29:56,640 propiedades estáticas. 654 00:29:57,420 --> 00:29:58,160 Eso sí. 655 00:29:59,579 --> 00:30:01,480 Entonces, para guardar información 656 00:30:01,480 --> 00:30:02,980 genérica, entonces 657 00:30:02,980 --> 00:30:05,200 yo podría usar en cualquier 658 00:30:05,200 --> 00:30:07,140 programita mía, empleado despedible, 659 00:30:07,359 --> 00:30:20,539 En este caso, por ejemplo, la funcionalidad de generar finiquito, pues a lo mejor el finiquito se va a generar para todos ellos a partir de un porcentaje. 660 00:30:20,880 --> 00:30:24,940 Imaginaos que entonces su sitio para guardarlo a lo mejor podría ser aquí. 661 00:30:29,490 --> 00:30:34,630 Entonces, variables static final sí puede tener, pero propiedades de ningún otro tipo. 662 00:30:34,910 --> 00:30:38,769 No puede tener propiedades de ningún otro tipo. Esa es la primera condición de las interfaces. 663 00:30:38,769 --> 00:30:41,089 vale 664 00:30:41,089 --> 00:30:43,690 ¿qué tiene una interfaz dentro? 665 00:30:43,849 --> 00:30:45,210 tiene métodos vacíos 666 00:30:45,210 --> 00:30:46,230 eso es lo que tiene 667 00:30:46,230 --> 00:30:49,390 en nuestro caso es una interfaz empleado despedible 668 00:30:49,390 --> 00:30:50,930 para hacer una especie de plantilla 669 00:30:50,930 --> 00:30:53,809 de empleado despedible, pues le pondríamos un método 670 00:30:53,809 --> 00:30:55,609 por ejemplo, generar 671 00:30:55,609 --> 00:30:57,150 finiquito, pues yo que sé 672 00:30:57,150 --> 00:31:10,039 y este método estaría así 673 00:31:10,039 --> 00:31:12,720 entonces, como ya se asume 674 00:31:12,720 --> 00:31:14,460 que en las interfaces todos los métodos 675 00:31:14,460 --> 00:31:16,539 son vacíos, aquí ni se pone 676 00:31:16,539 --> 00:31:18,339 el abstract, ni se pone nada, en una interfaz 677 00:31:18,339 --> 00:31:20,319 No se pone el astra en el método vacío 678 00:31:20,319 --> 00:31:21,119 No se pone 679 00:31:21,119 --> 00:31:34,619 Propiedades 680 00:31:34,619 --> 00:31:38,789 Estatic 681 00:31:38,789 --> 00:31:40,829 Y final 682 00:31:40,829 --> 00:31:42,450 ¿Vale? Eso por un lado, aquí 683 00:31:42,450 --> 00:31:44,789 No se pone el astra 684 00:31:44,789 --> 00:31:54,190 Otra cosa 685 00:31:54,190 --> 00:31:56,269 Los métodos de las interfaces 686 00:31:56,269 --> 00:31:58,390 Por definición y por 687 00:31:58,390 --> 00:32:00,710 Narices, son public 688 00:32:00,710 --> 00:32:02,650 Porque las interfaces 689 00:32:02,650 --> 00:32:04,289 Están pensadas, como luego ya 690 00:32:04,289 --> 00:32:06,410 Vamos a ver y vamos a creernos 691 00:32:06,410 --> 00:32:08,809 con más facilidad están pensadas 692 00:32:08,809 --> 00:32:10,549 para que las implementen de cualquier 693 00:32:10,549 --> 00:32:12,750 parte, para dar una especie de patrón 694 00:32:12,750 --> 00:32:14,430 de funcionamiento y que las implementen de cualquier parte 695 00:32:14,430 --> 00:32:16,630 entonces por definición y por obligación 696 00:32:16,630 --> 00:32:18,690 son public, todos los 697 00:32:18,690 --> 00:32:20,650 métodos de las interfaces son todos public 698 00:32:20,650 --> 00:32:22,190 entonces como eso es así 699 00:32:22,190 --> 00:32:23,809 ni siquiera hay que ponerlo 700 00:32:23,809 --> 00:32:26,410 es que no se puede, lo puedes poner y no pasa nada 701 00:32:26,410 --> 00:32:27,670 lo puedes poner 702 00:32:27,670 --> 00:32:31,839 y no se te va a quejar 703 00:32:31,839 --> 00:32:34,299 pero es que en este caso poner public 704 00:32:34,299 --> 00:32:36,319 y no ponerlo en los métodos de una interfaz 705 00:32:36,319 --> 00:32:37,140 es lo mismo 706 00:32:37,140 --> 00:32:40,019 porque los métodos son siempre 707 00:32:40,019 --> 00:32:42,160 public independientemente de que se ponga 708 00:32:42,160 --> 00:32:43,099 el modificador o no 709 00:32:43,099 --> 00:32:45,160 uy 710 00:32:45,160 --> 00:33:01,579 vale, aunque no esté el modificador 711 00:33:01,579 --> 00:33:03,819 que es lo habitual, que no aparezca el modificador 712 00:33:03,819 --> 00:33:05,779 son siempre public 713 00:33:05,779 --> 00:33:11,549 vale, pues una interfaz es algo así 714 00:33:11,549 --> 00:33:13,670 luego ya se incorpora 715 00:33:13,670 --> 00:33:15,589 posteriormente, que ya lo incorporaremos 716 00:33:15,589 --> 00:33:16,410 para verlo como ejemplo 717 00:33:16,410 --> 00:33:19,349 la posibilidad de darles un cuerpo 718 00:33:19,349 --> 00:33:20,509 por defecto 719 00:33:20,509 --> 00:33:23,390 y la posibilidad de meter métodos 720 00:33:23,390 --> 00:33:25,309 estáticos, pero bueno, eso lo 721 00:33:25,309 --> 00:33:27,609 ponemos luego para no liar 722 00:33:27,609 --> 00:33:29,349 entonces, ¿cuál es 723 00:33:29,349 --> 00:33:31,589 la motivación de una interfaz? generar una especie 724 00:33:31,589 --> 00:33:33,710 de patrón de comportamiento 725 00:33:33,710 --> 00:33:35,809 es decir, yo soy empleado despedible 726 00:33:35,809 --> 00:33:37,470 y el que me 727 00:33:37,470 --> 00:33:38,930 implemente, tiene que 728 00:33:38,930 --> 00:33:41,109 implementar este comportamiento 729 00:33:41,109 --> 00:33:43,349 y este, y este, y este, porque podría haber un montón 730 00:33:43,349 --> 00:33:44,789 de métodos vacíos, podría haber un montón 731 00:33:44,789 --> 00:33:47,710 entonces, una interfaz es como una especie 732 00:33:47,710 --> 00:33:49,650 de compromiso de funcionamiento 733 00:33:49,650 --> 00:33:51,589 una serie de acciones, esta, esta 734 00:33:51,589 --> 00:33:53,309 esta, esta, esta, acciones, métodos 735 00:33:53,309 --> 00:34:01,130 Y el que implementa esa interfaz, lo que hace ya es decidir cómo se concreta ese comportamiento. 736 00:34:03,410 --> 00:34:09,369 Luego, a nivel semántico de significado, una interfaz está asociada a un comportamiento, solo tiene métodos. 737 00:34:10,210 --> 00:34:12,449 Sin embargo, la herencia, como la hemos visto, es más genérica. 738 00:34:13,610 --> 00:34:20,650 Cuando nosotros hacíamos aplicaciones con animales, perros y gatos, el animal tenía cosas, tenía identidad. 739 00:34:20,650 --> 00:34:23,650 y luego el perro le añadía alguna otra 740 00:34:23,650 --> 00:34:25,849 y el gato le añadía alguna otra 741 00:34:25,849 --> 00:34:27,909 pero el animal en sí ya tenía cosas 742 00:34:27,909 --> 00:34:29,429 ¿vale? 743 00:34:29,469 --> 00:34:31,690 no tenía solamente comportamiento y métodos 744 00:34:31,690 --> 00:34:32,949 también tenía descripción 745 00:34:32,949 --> 00:34:35,429 entonces la herencia es más genérica 746 00:34:35,429 --> 00:34:37,670 una superclase dentro de la herencia 747 00:34:37,670 --> 00:34:38,610 una superclase 748 00:34:38,610 --> 00:34:41,389 tiene una descripción suya, es algo 749 00:34:41,389 --> 00:34:43,389 es algo y también hace algo 750 00:34:43,389 --> 00:34:45,730 pero una interfaz solamente 751 00:34:45,730 --> 00:34:47,690 hace algo, no es nada 752 00:34:47,690 --> 00:34:49,730 porque ser está asociado 753 00:34:49,730 --> 00:34:51,769 a que haya propiedades que te describen 754 00:34:51,769 --> 00:34:53,809 si no tienes propiedades que te describen 755 00:34:53,809 --> 00:34:55,769 no eres nada, pero si puedes 756 00:34:55,769 --> 00:34:57,889 hacer algo, hacer algo son los métodos 757 00:34:57,889 --> 00:34:59,710 pues entonces la interfaz solamente 758 00:34:59,710 --> 00:35:01,590 tiene métodos, es decir 759 00:35:01,590 --> 00:35:03,869 solamente recoge la idea 760 00:35:03,869 --> 00:35:05,030 de un comportamiento 761 00:35:05,030 --> 00:35:07,349 solamente recoge la idea de un comportamiento 762 00:35:07,349 --> 00:35:09,610 no de una identidad, de yo tengo 763 00:35:09,610 --> 00:35:11,670 mi nombre, tengo mi nif, tengo mi 764 00:35:11,670 --> 00:35:12,789 no recoge la idea de identidad 765 00:35:12,789 --> 00:35:16,989 por eso los nombres de las 766 00:35:16,989 --> 00:35:19,090 interfaces de la máquina virtual de Java 767 00:35:19,090 --> 00:35:21,369 muchas veces tienen nombres 768 00:35:21,369 --> 00:35:24,050 que están asociados a un comportamiento 769 00:35:24,050 --> 00:35:26,210 por ejemplo, yo la he llamado a propósito despedible 770 00:35:26,210 --> 00:35:28,170 porque despedible 771 00:35:28,170 --> 00:35:30,030 está asociado a que te pueden despedir 772 00:35:30,030 --> 00:35:31,469 la interfaz comparable 773 00:35:31,469 --> 00:35:34,110 como ya veremos, está asociada a que te pueden comparar 774 00:35:34,110 --> 00:35:36,110 muchos nombres acaban en el hable 775 00:35:36,110 --> 00:35:37,230 de los interfaces 776 00:35:37,230 --> 00:35:40,670 porque están asociadas a cosas que se pueden hacer 777 00:35:40,670 --> 00:35:42,550 tirable 778 00:35:42,550 --> 00:35:44,070 pintable 779 00:35:44,070 --> 00:35:45,750 lo que sea 780 00:35:45,750 --> 00:35:48,409 suelen ser los nombres habituales de las interfaces 781 00:35:48,409 --> 00:35:50,210 Significan lo que se puede hacer 782 00:35:50,210 --> 00:35:51,710 Pintar, tirar 783 00:35:51,710 --> 00:35:55,409 Sin embargo, las superclases normales de herencia 784 00:35:55,409 --> 00:35:56,969 Pues son animal, empleado 785 00:35:56,969 --> 00:35:58,710 No es solo lo que pueden hacer 786 00:35:58,710 --> 00:35:59,510 Sino también lo que son 787 00:35:59,510 --> 00:36:00,809 Tienen su nombre 788 00:36:00,809 --> 00:36:03,670 Efectivamente 789 00:36:03,670 --> 00:36:07,590 Sustantivos o calificativos 790 00:36:07,590 --> 00:36:11,869 Bueno, pues 791 00:36:11,869 --> 00:36:13,489 Entonces, ahora 792 00:36:13,489 --> 00:36:16,269 Una vez que hemos decidido tener esta interfaz 793 00:36:16,269 --> 00:36:17,849 Pues ahora ya 794 00:36:17,849 --> 00:36:20,110 Nuestra aplicación se convierte 795 00:36:20,110 --> 00:36:22,289 en que empleado 796 00:36:22,289 --> 00:36:24,010 plantilla no es despedible 797 00:36:24,010 --> 00:36:25,849 con lo cual empleado plantilla se queda así 798 00:36:25,849 --> 00:36:27,710 hereda de empleado y punto pelota 799 00:36:27,710 --> 00:36:29,170 silencio 800 00:36:29,170 --> 00:36:31,550 pero empleado temporal 801 00:36:31,550 --> 00:36:33,550 es un empleado 802 00:36:33,550 --> 00:36:36,010 pero también puede ser despedido 803 00:36:36,010 --> 00:36:38,329 entonces se tiene que quedar con las dos cosas 804 00:36:38,329 --> 00:36:40,070 vale, pues 805 00:36:40,070 --> 00:36:41,070 hereda de empleado 806 00:36:41,070 --> 00:36:44,510 y ahora hay que indicar que implementa 807 00:36:44,510 --> 00:36:45,929 la interfaz despedible 808 00:36:45,929 --> 00:36:48,090 y como se indica, pues no pasa 809 00:36:48,090 --> 00:36:49,869 nada después del extends 810 00:36:49,869 --> 00:36:52,150 uno pone implements 811 00:36:52,150 --> 00:36:53,730 que es la palabra clave 812 00:36:53,730 --> 00:36:55,949 para decir que una clase 813 00:36:55,949 --> 00:36:57,510 implementa una interfaz 814 00:36:57,510 --> 00:37:06,659 ¿vale? y ya está 815 00:37:06,659 --> 00:37:08,440 entonces empleado temporal 816 00:37:08,440 --> 00:37:09,960 hereda de empleado 817 00:37:09,960 --> 00:37:12,860 luego se queda con todo lo que tiene empleado 818 00:37:12,860 --> 00:37:14,119 propiedades y métodos 819 00:37:14,119 --> 00:37:15,860 y además 820 00:37:15,860 --> 00:37:18,039 implementa empleado despedible 821 00:37:18,039 --> 00:37:20,860 entonces al implementar empleado despedible 822 00:37:20,860 --> 00:37:22,719 está obligada 823 00:37:22,719 --> 00:37:24,519 a dar cuerpo 824 00:37:24,519 --> 00:37:26,179 a todos los métodos 825 00:37:26,179 --> 00:37:28,420 Vacíos de empleado despedible 826 00:37:28,420 --> 00:37:29,139 Está obligada 827 00:37:29,139 --> 00:37:33,920 Por eso se nos ha puesto aquí rojo 828 00:37:33,920 --> 00:37:36,920 Porque nos ha dicho, uy, si implementas de empleado despedible 829 00:37:36,920 --> 00:37:38,380 Pues vas a tener que implementar 830 00:37:38,380 --> 00:37:39,820 Generar finiquito 831 00:37:39,820 --> 00:37:41,780 Pues no pasa nada 832 00:37:41,780 --> 00:37:42,980 Ala 833 00:37:42,980 --> 00:37:45,519 Genero finiquito 834 00:37:45,519 --> 00:37:48,559 Pues cualquier cosa 835 00:37:48,559 --> 00:37:52,230 Voy a poner algo 836 00:37:52,230 --> 00:37:53,110 ¿Vale? 837 00:37:55,610 --> 00:37:58,170 Este diseño 838 00:37:58,170 --> 00:38:00,389 Es un poquito más fiel 839 00:38:00,389 --> 00:38:01,469 A lo que es la realidad 840 00:38:01,469 --> 00:38:04,949 yo voy identificando 841 00:38:04,949 --> 00:38:05,630 las diferentes 842 00:38:05,630 --> 00:38:08,630 entidades que me van saliendo 843 00:38:08,630 --> 00:38:10,570 tengo empleados, solo algunos 844 00:38:10,570 --> 00:38:12,610 se les puede despedir, pues solo algunos 845 00:38:12,610 --> 00:38:14,730 se adhieren a la posibilidad 846 00:38:14,730 --> 00:38:16,670 de ser despedidos, no todos se adhieren 847 00:38:16,670 --> 00:38:18,710 y así se pueden ir incorporando cosas 848 00:38:18,710 --> 00:38:20,750 empleado externo 849 00:38:20,750 --> 00:38:23,010 le pasaría igual, empleado externo era de empleado 850 00:38:23,010 --> 00:38:25,329 pero también puede ser despedible 851 00:38:25,329 --> 00:38:32,500 pues entonces 852 00:38:32,500 --> 00:38:34,960 no pasa nada, implementa empleado despedible 853 00:38:34,960 --> 00:38:36,699 y entonces no le queda más remedio 854 00:38:36,699 --> 00:38:38,739 que 855 00:38:38,739 --> 00:38:41,019 sobrescribir esto 856 00:38:41,019 --> 00:38:43,440 pues lo que fuera 857 00:38:43,440 --> 00:38:45,780 se supone que lo haría 858 00:38:45,780 --> 00:38:47,179 de una manera distinta al otro 859 00:38:47,179 --> 00:38:48,760 se supone 860 00:38:48,760 --> 00:38:55,280 yo ahora del código que hago dentro de los métodos 861 00:38:55,280 --> 00:38:57,139 me estoy despreocupando, me da igual lo que haya dentro 862 00:38:57,139 --> 00:38:59,179 cada uno tendría su propia forma 863 00:38:59,179 --> 00:39:00,460 de generar finiquitos, se supone 864 00:39:00,460 --> 00:39:06,599 y la suerte de las interfaces 865 00:39:06,599 --> 00:39:08,760 es que se puede heredar 866 00:39:08,760 --> 00:39:10,480 de tropecientas a la vez 867 00:39:10,480 --> 00:39:12,139 a lo mejor 868 00:39:12,139 --> 00:39:14,619 aparte del comportamiento despedible 869 00:39:14,619 --> 00:39:16,840 pues hay otro comportamiento 870 00:39:16,840 --> 00:39:18,920 o otra cosa que pueden tener 871 00:39:18,920 --> 00:39:20,719 en común, no todos los empleados 872 00:39:20,719 --> 00:39:22,519 que sea, pues yo que sé, aparte de despedir a un empleado 873 00:39:22,519 --> 00:39:23,059 ¿qué se le puede hacer? 874 00:39:24,739 --> 00:39:25,719 Felicitarle, felicitable 875 00:39:25,719 --> 00:39:29,079 pues entonces se podría ver una interfaz empleado felicitable 876 00:39:29,079 --> 00:39:31,280 y entonces uno puede implementar 877 00:39:31,280 --> 00:39:33,300 todas las que quiera separadas por comas 878 00:39:33,300 --> 00:39:34,280 entonces 879 00:39:34,280 --> 00:39:37,079 empleado externo, extens, empleado 880 00:39:37,079 --> 00:39:38,780 eso sí que solamente puede dar de una 881 00:39:38,780 --> 00:39:40,679 después del extens solo puede haber una, sí o sí 882 00:39:40,679 --> 00:39:42,519 solo puede haber uno, pero luego 883 00:39:42,519 --> 00:39:44,440 después del implements puede haber 884 00:39:44,440 --> 00:39:46,159 tropecientas separadas por comas 885 00:39:46,159 --> 00:39:48,619 uno puede implementar todos los 886 00:39:48,619 --> 00:39:50,119 comportamientos o interfaces 887 00:39:50,119 --> 00:39:52,019 que necesite 888 00:39:52,019 --> 00:39:54,559 y luego tendrá que dar código 889 00:39:54,559 --> 00:39:55,300 a todos ellos 890 00:39:55,300 --> 00:39:57,239 ¿vale? 891 00:39:58,079 --> 00:40:00,440 entonces de esta manera pues tenemos 892 00:40:00,440 --> 00:40:02,539 muchísimas más posibilidades para hacer 893 00:40:02,539 --> 00:40:04,519 diseños un poquito 894 00:40:04,519 --> 00:40:06,559 más claros, más 895 00:40:06,559 --> 00:40:07,340 pidedignos 896 00:40:07,340 --> 00:40:11,550 ¿y ahora qué pasa? 897 00:40:11,550 --> 00:40:14,889 ¿qué implicaciones tiene haber hecho esto de aquí? 898 00:40:17,090 --> 00:40:18,210 por ejemplo, si nos hacemos 899 00:40:18,210 --> 00:40:19,110 nuestro main 900 00:40:19,110 --> 00:40:23,260 constructores 901 00:40:23,260 --> 00:40:29,199 ay, que no lo ha llamado bien 902 00:40:29,199 --> 00:40:33,480 a ver, refactors 903 00:40:33,480 --> 00:40:44,949 vale, ahora ¿qué ocurre? 904 00:40:45,989 --> 00:40:46,949 pues exactamente igual que 905 00:40:46,949 --> 00:40:48,949 con la herencia que ya hemos visto, que yo puedo tener 906 00:40:48,949 --> 00:40:51,050 aquí un array con todos 907 00:40:51,050 --> 00:40:51,989 mis empleados 908 00:40:51,989 --> 00:40:56,300 o una referencia suelta 909 00:40:56,300 --> 00:40:58,219 para no meter un array, si yo tengo aquí una 910 00:40:58,219 --> 00:40:59,500 referencia suelta en e 911 00:40:59,500 --> 00:41:01,320 Está claro, ya lo sabemos 912 00:41:01,320 --> 00:41:02,480 Que en E podemos meter 913 00:41:02,480 --> 00:41:04,659 Un empleado plantilla 914 00:41:04,659 --> 00:41:07,659 Eso ya lo sabemos 915 00:41:07,659 --> 00:41:09,460 Pero en E podríamos 916 00:41:09,460 --> 00:41:11,719 Meter también un empleado temporal 917 00:41:11,719 --> 00:41:13,460 Eso es lo de la herencia que hemos visto 918 00:41:13,460 --> 00:41:15,500 Y en E podríamos 919 00:41:15,500 --> 00:41:16,480 Meter también 920 00:41:16,480 --> 00:41:18,739 Un empleado externo 921 00:41:18,739 --> 00:41:28,139 ¿Vale? En E cae cualquiera de estas cosas 922 00:41:28,139 --> 00:41:30,139 Y si fuera una RAI 923 00:41:30,139 --> 00:41:31,400 A cualquier porcentaje de la RAI cabría 924 00:41:31,400 --> 00:41:33,820 Entonces si yo hago ahora E punto 925 00:41:33,820 --> 00:41:35,820 Pues generar nómina 926 00:41:35,820 --> 00:41:38,119 pues ya sabemos lo que significa esto 927 00:41:38,119 --> 00:41:39,260 que 928 00:41:39,260 --> 00:41:42,500 al método generar nómina que se llama 929 00:41:42,500 --> 00:41:44,619 dependerá de qué tipo de objeto sea 930 00:41:44,619 --> 00:41:46,519 si es 931 00:41:46,519 --> 00:41:47,619 empleado plantilla 932 00:41:47,619 --> 00:41:50,380 ¿por qué estamos así? 933 00:41:51,280 --> 00:41:52,260 pues se llamará 934 00:41:52,260 --> 00:41:53,960 generar nómina de empleado plantilla 935 00:41:53,960 --> 00:41:58,269 ¿que no? ¿que es empleado temporal? 936 00:41:58,650 --> 00:42:00,150 pues se llamará al generar nómina 937 00:42:00,150 --> 00:42:02,309 de empleado temporal, esto ya lo sabemos 938 00:42:02,309 --> 00:42:03,110 ¿vale? 939 00:42:03,829 --> 00:42:04,550 es lo de herencia 940 00:42:04,550 --> 00:42:07,130 ¿vale? pues con las interfaces es similar 941 00:42:07,130 --> 00:42:09,469 resulta que yo tengo 942 00:42:09,469 --> 00:42:11,230 uy, tengo un montón de empleados que voy a despedir 943 00:42:11,230 --> 00:42:13,489 venga, voy a meterlos 944 00:42:13,489 --> 00:42:14,489 a todos en un array 945 00:42:14,489 --> 00:42:17,610 por ejemplo, pues yo me puedo 946 00:42:17,610 --> 00:42:18,369 hacer un array 947 00:42:18,369 --> 00:42:36,159 lo voy a poner abajo, venga 948 00:42:36,159 --> 00:42:37,699 voy a 949 00:42:37,699 --> 00:42:39,639 el new, me falta 950 00:42:39,639 --> 00:42:41,559 y la end 951 00:42:41,559 --> 00:42:44,420 vale, por ejemplo, vamos a despedir 952 00:42:44,420 --> 00:42:46,079 a 20, vamos a despedir a 20 953 00:42:46,079 --> 00:42:48,119 pueden, a 20 954 00:42:48,119 --> 00:42:49,920 pueden ser tanto 955 00:42:49,920 --> 00:42:51,360 temporales como externos 956 00:42:51,360 --> 00:42:53,119 con lo cual el array 957 00:42:53,119 --> 00:42:56,199 ¿de qué lo hacemos? de temporales, de externos 958 00:42:56,199 --> 00:42:58,280 puede ser de cualquiera de los dos tipos 959 00:42:58,280 --> 00:43:00,119 pues yo lo hago 960 00:43:00,119 --> 00:43:01,340 de empleado despedible 961 00:43:01,340 --> 00:43:03,920 pero claro, lo que cae dentro 962 00:43:03,920 --> 00:43:05,960 de esas referencias no puede ser empleado 963 00:43:05,960 --> 00:43:07,599 despedible porque es que no se puede instanciar 964 00:43:07,599 --> 00:43:10,059 ahora ya dentro de esa referencia puede caer 965 00:43:10,059 --> 00:43:10,820 cualquier cosa 966 00:43:10,820 --> 00:43:14,219 cualquier cosa, por ejemplo 967 00:43:14,219 --> 00:43:16,179 en la posición 0 968 00:43:16,179 --> 00:43:17,719 yo puedo meter 969 00:43:17,719 --> 00:43:20,340 un nuevo 970 00:43:20,340 --> 00:43:22,559 Empleado, plantilla no 971 00:43:22,559 --> 00:43:24,599 Plantilla, si yo pongo 972 00:43:24,599 --> 00:43:26,719 Este, me diría 973 00:43:26,719 --> 00:43:28,380 No, no puedes 974 00:43:28,380 --> 00:43:30,260 ¿Por qué? Porque empleado plantilla no 975 00:43:30,260 --> 00:43:32,179 Implementa esta, no la implementa 976 00:43:32,179 --> 00:43:34,559 Entonces no puedes, esto no podríamos 977 00:43:34,559 --> 00:43:38,199 Pero esto de abajo 978 00:43:38,199 --> 00:43:41,340 Pues si podemos 979 00:43:41,340 --> 00:43:43,139 Un temporal si que podemos meterle 980 00:43:43,139 --> 00:43:53,960 Y también podríamos ponerle un externo 981 00:43:53,960 --> 00:43:57,039 En cualquiera de esas posiciones 982 00:43:57,039 --> 00:43:59,239 Podríamos ponerle un externo en cualquiera de ellas 983 00:43:59,239 --> 00:44:03,820 Porque todas implementan empleado despedible 984 00:44:03,820 --> 00:44:04,920 Todas lo implementan 985 00:44:04,920 --> 00:44:07,699 Entonces esto funciona igual que la herencia 986 00:44:07,699 --> 00:44:12,460 Y ahora imaginaos que llamamos a despedir 0 987 00:44:12,460 --> 00:44:15,099 A este que llamamos al generar finiquito 988 00:44:15,099 --> 00:44:19,000 Bueno pues se estará llamando 989 00:44:19,000 --> 00:44:23,949 En este caso a generar finiquito del temporal 990 00:44:23,949 --> 00:44:25,570 Del método que hay en el temporal 991 00:44:25,570 --> 00:44:34,739 Pero si llamamos a este 992 00:44:34,739 --> 00:44:37,539 Pues estaremos llamando 993 00:44:37,539 --> 00:44:39,500 A generar finiquito, pero en la versión 994 00:44:39,500 --> 00:44:41,099 Del externo, ¿vale? 995 00:44:41,179 --> 00:44:42,460 O sea, esto es igual que la herencia 996 00:44:42,460 --> 00:44:44,460 Exactamente igual 997 00:44:44,460 --> 00:44:47,929 Efectivamente 998 00:44:47,929 --> 00:44:49,010 Efectivamente 999 00:44:49,010 --> 00:44:52,349 El tipo de dato 1000 00:44:52,349 --> 00:44:54,190 A la hora de declararlo es la interfaz 1001 00:44:54,190 --> 00:44:57,369 Luego tu instancia es cualquiera de los que lo implementan 1002 00:44:57,369 --> 00:44:58,789 Cualquiera de los que lo implementan 1003 00:44:58,789 --> 00:44:59,010 ¿Vale? 1004 00:45:00,030 --> 00:45:01,949 Vale, pues venga, nos...