1 00:00:00,000 --> 00:00:06,339 Estoy grabando, por lo tanto si habláis me dais el permiso de grabar vuestra voz 2 00:00:06,339 --> 00:00:14,660 Entonces, nosotros hemos hablado de clases de herencia 3 00:00:14,660 --> 00:00:16,800 Clases padres, clases hijas, etc. 4 00:00:17,240 --> 00:00:21,679 Hemos visto la clase abstracta y hemos visto un poco que es el polimorfismo 5 00:00:21,679 --> 00:00:23,900 En vídeos anteriores 6 00:00:23,900 --> 00:00:28,120 Entonces, el último concepto interesante que hemos visto 7 00:00:28,120 --> 00:00:49,900 Era esta de aquí, del... bueno, que no es interesante. Era eso de las clases abstractas y los métodos abstractos, ¿vale? Entonces, yo utilizo un método abstracto cuando a este nivel, cuando estoy modelizando esta clase, no sé todavía cómo se implementa este método, pero entiendo que este método es útil para esta clase. 8 00:00:49,899 --> 00:00:51,199 Yo estoy creando 9 00:00:51,199 --> 00:00:53,539 El ejemplo es la clase coche 10 00:00:53,539 --> 00:00:55,119 Y es útil que cada coche 11 00:00:55,119 --> 00:00:56,280 Perdón, la clase vehículo 12 00:00:56,280 --> 00:00:58,200 Y es útil que cada vehículo se mueva 13 00:00:58,200 --> 00:01:00,000 Por lo tanto, puedo decir 14 00:01:00,000 --> 00:01:01,899 Oye, mira, cada vehículo tiene que tener 15 00:01:01,899 --> 00:01:05,259 Su método de moverse 16 00:01:05,259 --> 00:01:06,359 ¿Vale? 17 00:01:06,459 --> 00:01:08,420 Luego, cómo se implementa de verdad 18 00:01:08,420 --> 00:01:10,180 Depende de si es un coche o un avión 19 00:01:10,180 --> 00:01:11,819 El coche dirá 20 00:01:11,819 --> 00:01:13,060 Voy andando 21 00:01:13,060 --> 00:01:15,680 Voy cocheando 22 00:01:15,680 --> 00:01:18,000 Y el avión dirá 23 00:01:18,000 --> 00:01:18,599 Voy volando 24 00:01:18,599 --> 00:01:19,000 ¿Vale? 25 00:01:19,060 --> 00:01:19,840 Pero me da igual 26 00:01:19,840 --> 00:01:22,500 Lo mismo, figura geométrica 27 00:01:22,500 --> 00:01:24,100 Pues si yo tengo una figura geométrica 28 00:01:24,100 --> 00:01:27,079 Tiene sentido que todas las figuras geométricas tengan un área 29 00:01:27,079 --> 00:01:28,700 ¿Vale? Se puede calcular área 30 00:01:28,700 --> 00:01:29,780 Método calcular área 31 00:01:29,780 --> 00:01:32,420 Pero ¿Cómo se calcula el área de una figura geométrica? 32 00:01:32,520 --> 00:01:33,159 No lo sé 33 00:01:33,159 --> 00:01:35,920 Hasta que no sé cuál es la figura geométrica 34 00:01:35,920 --> 00:01:38,820 Por lo tanto, tengo los métodos abstractos 35 00:01:38,820 --> 00:01:42,439 Los métodos abstractos me crean una clase abstracta 36 00:01:42,439 --> 00:01:46,620 Os recuerdo que las clases abstractas no se pueden instanciar 37 00:01:46,620 --> 00:01:49,980 Si yo tengo la clase abstracta figura geométrica 38 00:01:49,980 --> 00:01:52,020 No puedo hacer ni un figura geométrica 39 00:01:52,020 --> 00:01:55,439 ¿Vale? No se puede crear una instancia de una clase abstracta 40 00:01:55,439 --> 00:01:57,719 ¿Por qué? Porque es abstracta, no es concreto 41 00:01:57,719 --> 00:02:00,840 Porque le faltaría parte del código 42 00:02:00,840 --> 00:02:04,800 Porque hay algunos métodos que no están implementados 43 00:02:04,800 --> 00:02:06,380 ¿Sí? 44 00:02:07,380 --> 00:02:10,960 Vale, hay una situación extrema 45 00:02:10,960 --> 00:02:14,020 En el que podríamos decir 46 00:02:14,020 --> 00:02:16,140 vale, mas si yo en vez de hacer una clase 47 00:02:16,140 --> 00:02:17,760 que como figura geométrica 48 00:02:17,760 --> 00:02:20,020 que tenía algunas cosas que si podía 49 00:02:20,020 --> 00:02:21,900 implementar y otras no 50 00:02:21,900 --> 00:02:23,920 pues tengo una idea 51 00:02:23,920 --> 00:02:25,860 un concepto, un algo 52 00:02:25,860 --> 00:02:28,040 que estoy modelizando y nada 53 00:02:28,040 --> 00:02:30,420 de eso lo puedo instanciar 54 00:02:30,420 --> 00:02:32,400 lo puedo implementar 55 00:02:32,400 --> 00:02:33,620 vale, es decir 56 00:02:33,620 --> 00:02:36,060 tengo varios métodos que serían 57 00:02:36,060 --> 00:02:37,760 útiles para este concepto que estoy 58 00:02:37,760 --> 00:02:40,080 modelizando, pero todos son 59 00:02:40,080 --> 00:02:41,920 métodos abstractos 60 00:02:41,920 --> 00:02:43,800 vale, si una clase 61 00:02:43,800 --> 00:02:47,300 Tiene métodos solo abstractos 62 00:02:47,300 --> 00:02:49,140 Lo más probable 63 00:02:49,140 --> 00:02:50,580 Hay excepciones 64 00:02:50,580 --> 00:02:53,200 Pero es que en realidad no sea una clase 65 00:02:53,200 --> 00:02:54,980 Sea una interfaz 66 00:02:54,980 --> 00:02:55,680 ¿Vale? 67 00:02:56,580 --> 00:03:00,420 La interfaz es un concepto parecido a la clase abstracta 68 00:03:00,420 --> 00:03:03,260 Solo que os recuerdo que la clase abstracta no es solo abstracta 69 00:03:03,260 --> 00:03:06,939 La clase abstracta puede tener métodos que yo implemento y los escribo directamente 70 00:03:06,939 --> 00:03:09,580 Y luego hay 1, 2, 3, 7 métodos 71 00:03:09,580 --> 00:03:13,000 Que digo, vale, estos de aquí los dejo a mis hijos 72 00:03:13,000 --> 00:03:34,240 Lo implementarán mis hijos. Te digo aquí que existen estos métodos, pero luego serán mis hijos los que lo implementarán. Oye, ¿por qué esto? ¿Qué cosa interesante tiene esto de decir, a nivel de superclase, existe moverse y luego dejar que sean los hijos que lo implementen? 73 00:03:34,240 --> 00:03:41,860 Por polimorfismo 74 00:03:41,860 --> 00:03:45,280 Porque si yo me creo la figura geométrica 75 00:03:45,280 --> 00:03:48,900 Y le digo, oye mira, calcula área, tiene que estar 76 00:03:48,900 --> 00:03:49,780 ¿Vale? 77 00:03:49,780 --> 00:03:52,540 Y luego mis hijos lo implementarán 78 00:03:52,540 --> 00:03:58,640 Lo que puedo hacer ahora es crearme un array de figuras geométricas 79 00:03:58,640 --> 00:04:02,780 Y llamar directamente sobre estos objetos figura geométrica 80 00:04:02,780 --> 00:04:04,939 Calcularia 81 00:04:04,939 --> 00:04:07,580 Porque no se usará el calcularia 82 00:04:07,580 --> 00:04:08,659 De figura geométrica 83 00:04:08,659 --> 00:04:11,680 Mas se usará el calcularia de mi subclase 84 00:04:11,680 --> 00:04:13,340 Por polimorfismo 85 00:04:13,340 --> 00:04:15,819 Si 86 00:04:15,819 --> 00:04:17,639 Vale 87 00:04:17,639 --> 00:04:21,259 Entonces volviendo a las interfaces 88 00:04:21,259 --> 00:04:22,180 Cuando 89 00:04:22,180 --> 00:04:25,660 Todos los métodos que yo estoy 90 00:04:25,660 --> 00:04:28,180 Definiendo son abstractos 91 00:04:28,180 --> 00:04:30,040 Muy probablemente estoy hablando 92 00:04:30,040 --> 00:04:31,160 De una interfaz 93 00:04:31,160 --> 00:04:32,519 Una interfaz 94 00:04:32,519 --> 00:04:44,319 Es un molde, es un contrato, es una forma de decirme, de meter por escrito en cierto sentido 95 00:04:44,319 --> 00:04:54,219 Una estructura, un conjunto de métodos que mi clase seguramente tendrá que tener 96 00:04:54,219 --> 00:05:01,539 Es decir, yo tendré una clase y esta clase puede, como antes se extendía a otra clase 97 00:05:01,540 --> 00:05:05,580 Puede implementar una interfaz 98 00:05:05,580 --> 00:05:09,220 Si mi clase, mi clase vehículo 99 00:05:09,220 --> 00:05:14,160 Implementa la interfaz poder moverse 100 00:05:14,160 --> 00:05:17,620 Quiere decir que dentro del vehículo 101 00:05:17,620 --> 00:05:22,920 Tiene que estar implementados todos los métodos 102 00:05:22,920 --> 00:05:27,020 Que la interfaz puede moverse me define 103 00:05:27,020 --> 00:05:29,080 Entonces en la interfaz poder moverse 104 00:05:29,080 --> 00:05:31,000 Yo tendré el método moverse 105 00:05:31,000 --> 00:05:37,699 tendré el método moverse rápido, tendré el método parar, tendré el método repostar, qué sé yo. 106 00:05:38,000 --> 00:05:45,439 Todos estos, ¿vale? Son como un contrato que tú me firmas diciendo, mira, en el momento que implementas mi interfaz, 107 00:05:46,000 --> 00:05:51,019 te comprometes a cumplir que todos estos métodos serán implementados. 108 00:05:51,019 --> 00:05:52,539 Entonces cuando coche 109 00:05:52,539 --> 00:05:54,639 Extende vehículo 110 00:05:54,639 --> 00:05:55,779 Implementa 111 00:05:55,779 --> 00:05:58,159 Poder moverse 112 00:05:58,159 --> 00:06:00,579 Pues yo sé que en coche tendrá que aparecer 113 00:06:00,579 --> 00:06:02,419 Moverse, moverse rápido 114 00:06:02,419 --> 00:06:03,899 Repostar y pararse 115 00:06:03,899 --> 00:06:08,919 ¿Para qué me sirve en la vida real? 116 00:06:09,199 --> 00:06:10,259 Pues por muchas cosas 117 00:06:10,259 --> 00:06:10,899 ¿Vale? 118 00:06:12,060 --> 00:06:14,439 Primero porque puedo dividir trabajo 119 00:06:14,439 --> 00:06:15,740 Entre grupos de trabajo 120 00:06:15,740 --> 00:06:18,060 ¿Vale? Yo te doy una interfaz 121 00:06:18,060 --> 00:06:18,620 Diciendo mira 122 00:06:18,620 --> 00:06:21,720 Tus objetos tienen que cumplir 123 00:06:21,720 --> 00:06:22,579 Con esta interfaz 124 00:06:22,579 --> 00:06:25,000 Luego tú lo trabajas 125 00:06:25,000 --> 00:06:27,399 Pero desde fuera otro equipo 126 00:06:27,399 --> 00:06:30,000 Ya puede saber cuáles son los métodos 127 00:06:30,000 --> 00:06:31,519 Que puede utilizar solo tus objetos 128 00:06:31,519 --> 00:06:34,220 Porque si tú cumples la interfaz 129 00:06:34,220 --> 00:06:35,800 Esos métodos tendrán que estar 130 00:06:35,800 --> 00:06:37,579 Yo puedo decir a vosotros 131 00:06:37,579 --> 00:06:39,340 Implementad este vehículo 132 00:06:39,340 --> 00:06:40,439 Que puede moverse 133 00:06:40,439 --> 00:06:43,540 Y por otro lado 134 00:06:43,540 --> 00:06:45,680 Tengo un programa gestional 135 00:06:45,680 --> 00:06:47,060 Que usa vehículos 136 00:06:47,060 --> 00:06:50,280 Y que pueda utilizar tranquilamente los métodos 137 00:06:50,280 --> 00:06:52,759 Moverse, moverse rápido o repostar 138 00:06:52,759 --> 00:06:54,980 Porque no sabe cómo están hechos 139 00:06:54,980 --> 00:06:58,120 Pero saben que vosotros lo vais a implementar 140 00:06:58,120 --> 00:06:59,340 Porque tiene la interfaz 141 00:06:59,340 --> 00:07:00,480 ¿Se entiende? 142 00:07:00,819 --> 00:07:03,319 Es como un punto de unión entre otros 143 00:07:03,319 --> 00:07:08,259 ¿Cómo pasaba con las clases abstractas? 144 00:07:08,720 --> 00:07:12,779 Yo puedo crear objetos de tipo interfaz 145 00:07:12,779 --> 00:07:13,519 ¿Vale? 146 00:07:13,579 --> 00:07:15,980 Si mi interfaz es poder moverse 147 00:07:15,980 --> 00:07:19,680 Pues yo puedo crear un objeto poder moverse 148 00:07:19,680 --> 00:07:21,980 Poder moverse x es igual 149 00:07:21,980 --> 00:07:24,420 Pero luego como instancia 150 00:07:24,420 --> 00:07:26,980 No puedo poner ni un poder moverse 151 00:07:26,980 --> 00:07:29,360 Porque poder moverse es completamente abstracto 152 00:07:29,360 --> 00:07:30,100 Es una interfaz 153 00:07:30,100 --> 00:07:32,480 No puedo crear una interfaz 154 00:07:32,480 --> 00:07:35,000 Una instancia de una interfaz 155 00:07:35,000 --> 00:07:36,980 Lo que si puedo crear 156 00:07:36,980 --> 00:07:41,080 Es cualquier objeto que implemente esa interfaz 157 00:07:41,080 --> 00:07:45,580 Entonces si yo puedo hacer 158 00:07:45,579 --> 00:07:50,139 Poder moverse, que se llama X, es igual a new coche 159 00:07:50,139 --> 00:07:54,779 Si el coche implementa poder moverse 160 00:07:54,779 --> 00:08:00,379 Vale, tened en cuenta que 161 00:08:00,379 --> 00:08:05,939 Mientras yo estoy forzado a extender como mucho una sola clase 162 00:08:05,939 --> 00:08:10,500 Siempre cuando hago extends de herencia en Java 163 00:08:10,500 --> 00:08:13,000 Se puede extender una sola clase 164 00:08:13,000 --> 00:08:17,920 En realidad yo puedo implementar cuantas interfaces me da la gana 165 00:08:17,920 --> 00:08:21,579 Interfaces puedo implementar 7, si quiero 166 00:08:21,579 --> 00:08:28,920 Y es la forma que usa Java para implementar un mecanismo parecido a lo que es la herencia múltiple 167 00:08:28,920 --> 00:08:33,899 ¿Vale? En otros lenguajes, como en C++, tú puedes heredar de varias clases 168 00:08:33,899 --> 00:08:40,139 En Java heredas de una clase sola, pero puedes implementar muchas otras interfaces 169 00:08:40,139 --> 00:08:43,779 Se parece a la clase abstracta 170 00:08:43,779 --> 00:08:44,919 Pero con la diferencia que 171 00:08:44,919 --> 00:08:45,539 Estas 172 00:08:45,539 --> 00:08:48,919 Todas sus métodos son 173 00:08:48,919 --> 00:08:50,340 Obviamente abstractos 174 00:08:50,340 --> 00:08:53,819 Como todos los métodos son abstractos 175 00:08:53,819 --> 00:08:55,460 Dentro de una interfaz 176 00:08:55,460 --> 00:08:57,199 No hace falta poner el abstract 177 00:08:57,199 --> 00:08:58,100 El abstract 178 00:08:58,100 --> 00:08:59,740 La palabra abstract 179 00:08:59,740 --> 00:09:01,799 En una clase 180 00:09:01,799 --> 00:09:04,840 Tú puedes tener métodos normales y métodos abstractos 181 00:09:04,840 --> 00:09:06,960 Entonces tiene que marcar cuáles son normales 182 00:09:06,960 --> 00:09:07,960 Y cuáles son abstractos 183 00:09:07,960 --> 00:09:12,259 En una interfaz no puedes tener métodos que se implementan 184 00:09:12,259 --> 00:09:13,519 Son todos abstractos 185 00:09:13,519 --> 00:09:16,840 Entonces no hace falta marcar cuáles son de un tipo o cuáles son de otro 186 00:09:16,840 --> 00:09:25,360 En Java se usa interface 187 00:09:25,360 --> 00:09:29,780 Cuando tú dices public, class, no sé qué y la implementas 188 00:09:29,780 --> 00:09:32,300 Si quieres hacer una interfaz en vez de una clase 189 00:09:32,300 --> 00:09:36,580 Pues haces public interface y el nombre de la interface 190 00:09:36,580 --> 00:09:40,100 Para crear una clase 191 00:09:40,100 --> 00:09:42,020 Que escriba código para los métodos 192 00:09:42,020 --> 00:09:43,520 De una interfaz, se obtendrá la palabra 193 00:09:43,520 --> 00:09:45,620 Implements, en vez que extends 194 00:09:45,620 --> 00:09:47,400 O sea, mi clase 195 00:09:47,400 --> 00:09:49,820 Extend, clase padre 196 00:09:49,820 --> 00:09:51,600 Implements 197 00:09:51,600 --> 00:09:53,259 La interfaz que quiero 198 00:09:53,259 --> 00:09:57,680 Puedo no extender 199 00:09:57,680 --> 00:09:59,960 O sea, public class 200 00:09:59,960 --> 00:10:01,560 Mi clase 201 00:10:01,560 --> 00:10:03,000 Implements 202 00:10:03,000 --> 00:10:04,220 Con verbo 203 00:10:04,220 --> 00:10:15,399 Se pueden declarar referencias a objetos cuyo tipo sea una interfaz 204 00:10:15,399 --> 00:10:17,360 ¿Vale? En lugar que una clase 205 00:10:17,360 --> 00:10:20,180 O sea, si yo tengo la interfaz comparable 206 00:10:20,180 --> 00:10:25,180 Pues lo que puedo hacer es hacer comparable nombre de la variable 207 00:10:25,180 --> 00:10:30,560 Es igual, pero la instancia no puede ser esta interfaz 208 00:10:30,560 --> 00:10:34,019 No puede hacer comparable x es igual a new comparable 209 00:10:34,019 --> 00:10:35,139 No existe 210 00:10:35,139 --> 00:10:38,279 No puedo crear una instancia de una interfaz 211 00:10:38,279 --> 00:10:40,360 Lo que sí puedo hacer es 212 00:10:40,360 --> 00:10:45,699 Comparable x es igual a new cocodrilo 213 00:10:45,699 --> 00:10:52,620 Siempre y cuando cocodrilo implemente esta interfaz 214 00:10:52,620 --> 00:10:53,579 ¿Sí? 215 00:10:54,299 --> 00:10:55,179 ¿Me seguís? 216 00:10:55,799 --> 00:10:57,019 Ahora luego hacemos ejemplos 217 00:10:57,019 --> 00:11:02,740 Su principal función es establecer y estabilizar las interfaces 218 00:11:02,740 --> 00:11:04,860 De una clase para que 219 00:11:04,860 --> 00:11:06,899 Sus deseadores puedan coordinarse 220 00:11:06,899 --> 00:11:09,580 La interfaz se llama así 221 00:11:09,580 --> 00:11:10,600 Porque al fin y al cabo 222 00:11:10,600 --> 00:11:11,940 ¿Qué es una interfaz? 223 00:11:13,279 --> 00:11:15,200 Es la forma con que 224 00:11:15,200 --> 00:11:16,159 Por ejemplo 225 00:11:16,159 --> 00:11:18,019 Un usuario 226 00:11:18,019 --> 00:11:21,440 Se conecta 227 00:11:21,440 --> 00:11:22,720 Puede interactuar 228 00:11:22,720 --> 00:11:23,940 Con un programa 229 00:11:23,940 --> 00:11:25,539 La interfaz de usuario 230 00:11:25,539 --> 00:11:26,419 Por ejemplo 231 00:11:26,419 --> 00:11:29,480 En Windows 232 00:11:29,480 --> 00:11:32,600 Cuando vosotros encendéis el Windows 233 00:11:32,740 --> 00:11:34,259 Eso no es el Windows 234 00:11:34,259 --> 00:11:36,399 Lo que veis vosotros no es el Windows 235 00:11:36,399 --> 00:11:38,139 Windows es otra cosa 236 00:11:38,139 --> 00:11:39,419 Es un conjunto de programas 237 00:11:39,419 --> 00:11:41,240 Que es el kernel que se ha cargado en memoria 238 00:11:41,240 --> 00:11:41,759 Está allí 239 00:11:41,759 --> 00:11:43,840 Que nadie puede trabajar con él 240 00:11:43,840 --> 00:11:44,720 ¿Vale? 241 00:11:45,539 --> 00:11:47,560 A vosotros se os enseñan 242 00:11:47,560 --> 00:11:48,980 Ventanitas bonitas 243 00:11:48,980 --> 00:11:50,500 Con botones grandes así 244 00:11:50,500 --> 00:11:52,419 Y vosotros clicáis sobre los botones 245 00:11:52,419 --> 00:11:53,480 ¿Sí? 246 00:11:53,860 --> 00:11:55,080 Pues esa es una interfaz 247 00:11:55,080 --> 00:11:57,899 La interfaz entre el sistema operativo 248 00:11:57,899 --> 00:11:58,680 Que está por debajo 249 00:11:58,680 --> 00:12:00,799 Que es el que gestiona el acceso a la red 250 00:12:00,800 --> 00:12:02,860 Gestiona el acceso a los ficheros 251 00:12:02,860 --> 00:12:05,360 Carga los programas, crea los procesos 252 00:12:05,360 --> 00:12:06,420 Etcétera, etcétera 253 00:12:06,420 --> 00:12:08,680 Tiene una interfaz bonita 254 00:12:08,680 --> 00:12:10,220 De ventanitas y botones 255 00:12:10,220 --> 00:12:11,740 Que vosotros utilizáis 256 00:12:11,740 --> 00:12:13,440 Pues esto es un poquito lo mismo 257 00:12:13,440 --> 00:12:16,660 Yo creo un punto de acceso a mi sistema 258 00:12:16,660 --> 00:12:18,400 Y digo a los demás, oye mirad 259 00:12:18,400 --> 00:12:21,120 Vosotros aquí podéis utilizar estos métodos 260 00:12:21,120 --> 00:12:23,220 Cualquiera que acceda a esta interfaz 261 00:12:23,220 --> 00:12:25,400 Estos son los métodos que yo proporciono 262 00:12:25,400 --> 00:12:27,500 Es un menú, es un contrato 263 00:12:27,500 --> 00:12:29,400 Esto es lo que puede hacer 264 00:12:29,399 --> 00:12:31,720 Ahora úsame como te da la gana 265 00:12:31,720 --> 00:12:33,480 Pero estos son los métodos que me puede llamar 266 00:12:33,480 --> 00:12:34,819 ¿Y cómo están implementados? 267 00:12:34,959 --> 00:12:36,120 No te interesa 268 00:12:36,120 --> 00:12:40,559 Yo los he implementado como se tenían que implementar 269 00:12:40,559 --> 00:12:43,199 Pero estas son las cosas que tienen que funcionar 270 00:12:43,199 --> 00:12:49,000 El objeto, el método moverse de la clase puede moverse 271 00:12:49,000 --> 00:12:50,519 ¿Cómo está implementado? 272 00:12:50,819 --> 00:12:53,299 Pues no lo sé, depende de la clase que lo implemente 273 00:12:53,299 --> 00:12:56,439 La clase coche implementará este método de una forma 274 00:12:56,439 --> 00:12:58,759 La clase avión de otra forma 275 00:12:58,759 --> 00:13:00,220 A la clase, se traen de otra forma 276 00:13:00,220 --> 00:13:03,220 Pero yo sé que como estas tres clases 277 00:13:03,220 --> 00:13:04,639 Implementan 278 00:13:04,639 --> 00:13:06,620 La interfaz puede moverse 279 00:13:06,620 --> 00:13:08,919 Pues los tres tienen que tener 280 00:13:08,919 --> 00:13:09,840 El método de moverse 281 00:13:09,840 --> 00:13:12,639 ¿Se entiende? 282 00:13:20,939 --> 00:13:21,799 Vamos a ver 283 00:13:21,799 --> 00:13:26,379 Esto es más o menos lo que he dicho ahora 284 00:13:26,379 --> 00:13:28,659 Tened en cuenta que 285 00:13:28,659 --> 00:13:31,779 Imaginaos que yo tenga dos grupos de trabajo 286 00:13:31,779 --> 00:13:34,000 Este grupo es el que está encargado 287 00:13:34,000 --> 00:13:35,100 De implementar 288 00:13:35,100 --> 00:13:37,899 Estos métodos, vale, entonces le paso la interfaz 289 00:13:37,899 --> 00:13:39,039 Le digo, mira, la interfaz 290 00:13:39,039 --> 00:13:41,459 Puede moverse, moverse rápidamente 291 00:13:41,459 --> 00:13:43,559 No sé qué, vale, implementalos tú 292 00:13:43,559 --> 00:13:45,439 Y luego le digo a otro grupo 293 00:13:45,439 --> 00:13:47,740 Mira, tú tendrás en el futuro 294 00:13:47,740 --> 00:13:49,139 Este 295 00:13:49,139 --> 00:13:51,740 Objeto implementado que puede hacer 296 00:13:51,740 --> 00:13:53,079 Estas cosas, pero ahora no 297 00:13:53,079 --> 00:13:54,939 Porque estamos trabajando en paralelo 298 00:13:54,939 --> 00:13:58,079 Entonces, claro, el sistema que va a usar 299 00:13:58,080 --> 00:14:01,240 Este objeto 300 00:14:01,240 --> 00:14:03,060 Sabe por contrato 301 00:14:03,060 --> 00:14:04,660 Cuáles son los métodos 302 00:14:04,660 --> 00:14:06,500 Pero claro, si intenta utilizarlos 303 00:14:06,500 --> 00:14:07,940 Todavía no tiene la clase 304 00:14:07,940 --> 00:14:09,580 Y por lo tanto no funcionaría 305 00:14:09,580 --> 00:14:12,480 Existe una técnica avanzada 306 00:14:12,480 --> 00:14:14,040 Que son los objetos mock 307 00:14:14,040 --> 00:14:15,180 ¿Vale? 308 00:14:15,400 --> 00:14:17,740 Son objetos falsos 309 00:14:17,740 --> 00:14:19,780 Son objetos que 310 00:14:19,780 --> 00:14:22,160 En vez de hacer 311 00:14:22,160 --> 00:14:24,100 Que el coche se mueva de verdad 312 00:14:24,100 --> 00:14:25,940 Como lo implementará en el grupo 313 00:14:25,940 --> 00:14:27,900 De trabajo que implementa los coches 314 00:14:27,899 --> 00:14:30,059 Lo que hace es que te escribe simplemente 315 00:14:30,059 --> 00:14:31,819 Si has conseguido mover el coche 316 00:14:31,819 --> 00:14:39,179 Una forma falsa de implementar esta interfaz 317 00:14:39,179 --> 00:14:42,480 Que sirve para que los dos programadores 318 00:14:42,480 --> 00:14:45,000 O sea, los dos grupos de programadores puedan trabajar a la vez 319 00:14:45,000 --> 00:14:47,439 Está claro que el sistema no funcionará 320 00:14:47,439 --> 00:14:51,059 Lo que recibirá son solo informaciones falsas 321 00:14:51,059 --> 00:14:53,159 Informaciones mock, ¿vale? 322 00:14:53,620 --> 00:14:56,360 Pero puede funcionar 323 00:14:56,360 --> 00:14:59,919 Volvemos sobre esto cuando entendemos un poquito más de interfaces 324 00:14:59,919 --> 00:15:00,240 ¿Vale? 325 00:15:01,440 --> 00:15:02,399 Ejemplo 326 00:15:02,399 --> 00:15:06,240 Entonces, imaginaos que yo creo 327 00:15:06,240 --> 00:15:09,159 La interfaz animal 328 00:15:09,159 --> 00:15:10,539 ¿Vale? 329 00:15:11,039 --> 00:15:12,720 La interfaz animal 330 00:15:12,720 --> 00:15:17,220 Tiene el método habla 331 00:15:17,220 --> 00:15:19,240 ¿Vale? 332 00:15:19,659 --> 00:15:21,360 Este método, ¿cómo es? 333 00:15:22,560 --> 00:15:24,159 Tiene una implementación 334 00:15:24,159 --> 00:15:26,939 ¿Puede tener una implementación? 335 00:15:32,120 --> 00:15:32,799 ¿Aquí? 336 00:15:33,719 --> 00:15:34,399 No 337 00:15:34,399 --> 00:15:36,679 Porque estoy en una interfaz 338 00:15:36,679 --> 00:15:38,480 Eh, pero deberías poner abstract 339 00:15:38,480 --> 00:15:41,100 No, porque en una interfaz 340 00:15:41,100 --> 00:15:43,559 Todos los métodos que declaro son abstractos 341 00:15:43,559 --> 00:15:45,419 ¿Me acuerdo con esto? 342 00:15:46,559 --> 00:15:47,600 Entonces, si yo he creado 343 00:15:47,600 --> 00:15:49,939 Una interfaz, que es un contrato 344 00:15:49,939 --> 00:15:51,939 Si tú quieres cumplir 345 00:15:51,939 --> 00:15:53,819 Con el contrato que te he dado yo 346 00:15:53,820 --> 00:15:57,000 O sea, si tu clase implementa animal 347 00:15:57,000 --> 00:16:00,140 Entonces, por algún lado de tu clase 348 00:16:00,140 --> 00:16:03,360 Tendrás que poner una implementación de habla 349 00:16:03,360 --> 00:16:06,260 ¿Está claro hasta aquí? 350 00:16:07,360 --> 00:16:07,920 ¿Tú das? 351 00:16:08,960 --> 00:16:09,180 Va 352 00:16:09,180 --> 00:16:12,700 Entonces, por ejemplo, puedo crear la clase perro 353 00:16:12,700 --> 00:16:15,120 Que implementa animal 354 00:16:15,120 --> 00:16:17,080 Entonces, ¿qué quiere decir? 355 00:16:17,080 --> 00:16:19,640 Que la clase perro puede tener lo que le da la gana 356 00:16:19,640 --> 00:16:23,220 Pero por algún lado tendrá que tener un public void habla 357 00:16:23,220 --> 00:16:24,759 Que es lo que ponía antes 358 00:16:24,759 --> 00:16:25,220 ¿Vale? 359 00:16:25,720 --> 00:16:28,940 E implementar que el perro hace guau 360 00:16:28,940 --> 00:16:31,000 ¿Si? 361 00:16:32,340 --> 00:16:34,240 Y puede implementar 362 00:16:34,240 --> 00:16:36,420 La clase gato 363 00:16:36,420 --> 00:16:39,740 Que implementa la interfaz animal 364 00:16:39,740 --> 00:16:40,879 Esto quiere decir que 365 00:16:40,879 --> 00:16:42,180 Gato será colusea 366 00:16:42,180 --> 00:16:45,300 Pero por algún lado tendrá que tener el método habla 367 00:16:45,300 --> 00:16:47,320 Y implementarlo 368 00:16:47,320 --> 00:16:49,500 ¿Están de acuerdo con esto? 369 00:16:50,080 --> 00:16:50,360 Vale 370 00:16:50,360 --> 00:16:53,180 Entonces con estas dos clases 371 00:16:53,180 --> 00:16:54,920 Fijaos que aquí es class 372 00:16:54,920 --> 00:16:56,380 Y aquí es interface 373 00:16:56,380 --> 00:16:59,060 Entonces tengo dos classes 374 00:16:59,060 --> 00:16:59,820 Y una interfaz 375 00:16:59,820 --> 00:17:01,720 ¿Qué puedo hacer con eso? 376 00:17:03,940 --> 00:17:05,200 Puedo crear 377 00:17:05,200 --> 00:17:06,740 Un animal dog 378 00:17:06,740 --> 00:17:08,200 Fijaos esta es la interfaz 379 00:17:08,200 --> 00:17:11,060 Con dentro una instancia perro 380 00:17:11,060 --> 00:17:13,400 Y un animal cat 381 00:17:13,400 --> 00:17:15,180 Con dentro una instancia gato 382 00:17:15,180 --> 00:17:16,700 Esto lo puedo hacer 383 00:17:16,700 --> 00:17:18,279 Puedo hacer 384 00:17:18,279 --> 00:17:19,960 Gato dog es igual a 385 00:17:19,960 --> 00:17:22,240 Perro dog es igual a perro 386 00:17:22,240 --> 00:17:24,200 a new perro, o gato 387 00:17:24,200 --> 00:17:25,779 cat es igual a new gato 388 00:17:25,779 --> 00:17:28,319 o puedo hacer animal dog 389 00:17:28,319 --> 00:17:30,220 es igual a new perro 390 00:17:30,220 --> 00:17:32,180 lo puedo hacer, lo que no 391 00:17:32,180 --> 00:17:34,440 puedo hacer es animal 392 00:17:34,440 --> 00:17:36,220 no sé qué, es igual a new 393 00:17:36,220 --> 00:17:38,279 animal, new animal 394 00:17:38,279 --> 00:17:40,140 no tiene sentido, porque 395 00:17:40,140 --> 00:17:41,559 animal no es una clase 396 00:17:41,559 --> 00:17:44,000 es una interfaz 397 00:17:44,000 --> 00:17:48,279 pero esto es muy parecido a lo que hemos visto 398 00:17:48,279 --> 00:17:49,900 con el polimorfismo 399 00:17:49,900 --> 00:17:52,340 Y ahora tengo objetos-animal 400 00:17:52,340 --> 00:17:54,560 Podría tener un array de animales 401 00:17:54,560 --> 00:17:56,840 Un array de objetos-animal 402 00:17:56,840 --> 00:18:02,100 Y dentro poner gato, perros, cocodrilos y ranas 403 00:18:02,100 --> 00:18:03,660 ¿Sí? 404 00:18:04,380 --> 00:18:05,740 Ahora, ¿qué pasa? 405 00:18:05,840 --> 00:18:07,640 Que todos los animales 406 00:18:07,640 --> 00:18:10,820 Que no es una clase, repito 407 00:18:10,820 --> 00:18:12,019 Es un intervalo 408 00:18:12,019 --> 00:18:14,200 Tienen necesariamente que tener habla 409 00:18:14,200 --> 00:18:17,780 Entonces, en todas las instancias animal 410 00:18:17,779 --> 00:18:20,139 Yo puedo decirle que hable 411 00:18:20,139 --> 00:18:23,700 Solo que por polimorfismo 412 00:18:23,700 --> 00:18:25,759 No se usará el habla 413 00:18:25,759 --> 00:18:28,920 De la interfaz animal 414 00:18:28,920 --> 00:18:30,099 Que además es abstracto 415 00:18:30,099 --> 00:18:31,200 Y no tiene una implementación 416 00:18:31,200 --> 00:18:32,980 Mas se usará 417 00:18:32,980 --> 00:18:35,619 El habla 418 00:18:35,619 --> 00:18:37,119 De la clase 419 00:18:37,119 --> 00:18:38,839 De la instancia 420 00:18:38,839 --> 00:18:41,480 Lo que decíamos antes con el polimorfismo 421 00:18:41,480 --> 00:18:42,639 Cuando hay 422 00:18:42,639 --> 00:18:45,720 Un método que es sobrescrito 423 00:18:45,720 --> 00:18:47,379 En una clase que hereda 424 00:18:47,380 --> 00:18:51,800 En este caso, en la clase que implementa esta interfaz 425 00:18:51,800 --> 00:18:56,760 Pues se va a utilizar el método más específico de esa clase, de esa instancia 426 00:18:56,760 --> 00:19:00,500 No de la superclase o de la interfaz 427 00:19:00,500 --> 00:19:03,380 Por lo tanto, cuando yo hago dog.habla 428 00:19:03,380 --> 00:19:06,420 No voy a usar la implementación de animal 429 00:19:06,420 --> 00:19:07,920 Y fijaos que dog es un animal 430 00:19:07,920 --> 00:19:10,340 La referencia de dog es un animal 431 00:19:10,340 --> 00:19:12,040 Justo 432 00:19:12,040 --> 00:19:16,240 Pero en realidad la instancia es un perro 433 00:19:16,240 --> 00:19:20,339 Por lo tanto, se va a utilizar habla de la clase perro. 434 00:19:21,000 --> 00:19:23,720 O sea, que dog.habla me dirá, wow. 435 00:19:25,980 --> 00:19:30,539 Cuando aquí cat, que de su tipo es animal, ¿vale? 436 00:19:30,759 --> 00:19:35,180 Pero dentro tiene una instancia gato, hace habla, ¿puede llamar habla? 437 00:19:35,339 --> 00:19:39,819 Sí, porque habla está definido dentro de la interfaz animal. 438 00:19:40,000 --> 00:19:41,779 Y por lo tanto, sí se verá este método. 439 00:19:41,779 --> 00:19:44,440 Pero a la hora de ejecutarlo 440 00:19:44,440 --> 00:19:46,480 Java me va a buscar 441 00:19:46,480 --> 00:19:48,819 El habla más específico 442 00:19:48,819 --> 00:19:49,859 De la instancia 443 00:19:49,859 --> 00:19:50,940 Cat 444 00:19:50,940 --> 00:19:53,180 Y la instancia cat es un gato 445 00:19:53,180 --> 00:19:55,059 Y por lo tanto me dirá miau 446 00:19:55,059 --> 00:19:58,859 ¿Se entiende? 447 00:20:00,259 --> 00:20:02,799 Esto es lo mismo que hemos visto antes 448 00:20:02,799 --> 00:20:04,259 En polimorfismo 449 00:20:04,259 --> 00:20:07,039 Pero un poquito cambiado 450 00:20:07,039 --> 00:20:08,559 En vez de utilizar 451 00:20:08,559 --> 00:20:10,379 Clases abstractas estoy utilizando 452 00:20:10,380 --> 00:20:12,640 esta versión nueva que son las interfaces 453 00:20:12,640 --> 00:20:14,960 entonces ahora 454 00:20:14,960 --> 00:20:15,880 yo me puedo hacer 455 00:20:15,880 --> 00:20:18,880 un array de animales 456 00:20:18,880 --> 00:20:22,700 poner que en animales 457 00:20:22,700 --> 00:20:24,900 de 0 bad dog, en animales de 1 bad cat 458 00:20:24,900 --> 00:20:26,500 porque estos son animales 459 00:20:26,500 --> 00:20:27,920 no son gato y perro 460 00:20:27,920 --> 00:20:31,040 y puedo llamar 461 00:20:31,040 --> 00:20:32,160 que hablen todos 462 00:20:32,160 --> 00:20:33,880 pasándole este array 463 00:20:33,880 --> 00:20:37,100 ¿qué es que hablen todos? pues es un 464 00:20:37,100 --> 00:20:38,860 metodito que lo que hace 465 00:20:38,860 --> 00:20:41,100 es recibir una rey de animales 466 00:20:41,100 --> 00:20:43,140 y por cada animal 467 00:20:43,140 --> 00:20:44,660 de la rey de animales 468 00:20:44,660 --> 00:20:45,860 hace que hable 469 00:20:45,860 --> 00:20:59,340 ¿cuánto? 470 00:21:08,860 --> 00:21:12,240 Si usas como animal 471 00:21:12,240 --> 00:21:14,520 No, la referencia es animal 472 00:21:14,520 --> 00:21:16,340 Te aparecerán solo los métodos 473 00:21:16,340 --> 00:21:17,000 Definidos aquí 474 00:21:17,000 --> 00:21:20,060 Si quería habla, come y salta 475 00:21:20,060 --> 00:21:21,900 Pues te vendrán los métodos 476 00:21:21,900 --> 00:21:22,800 Definidos en animal 477 00:21:22,800 --> 00:21:25,200 Pero siempre puedes hacer un casting 478 00:21:25,200 --> 00:21:26,500 ¿Vale? 479 00:21:26,840 --> 00:21:28,780 Tú puedes pillar este dog 480 00:21:28,780 --> 00:21:31,660 Decirle perro de dog 481 00:21:31,660 --> 00:21:34,100 Y como esta es una instancia de perro 482 00:21:34,100 --> 00:21:34,820 Pues te funciona 483 00:21:34,820 --> 00:21:37,340 Si no lo sé, si es una instancia o no 484 00:21:37,339 --> 00:21:39,220 Siempre me queda el preguntarlo 485 00:21:39,220 --> 00:21:41,119 If 486 00:21:41,119 --> 00:21:43,559 Dog instants of 487 00:21:43,559 --> 00:21:45,220 Perro, entonces 488 00:21:45,220 --> 00:21:47,399 Castea perro 489 00:21:47,399 --> 00:21:49,259 De dog 490 00:21:49,259 --> 00:21:50,459 Y usa los métodos 491 00:21:50,459 --> 00:21:53,699 Ahora hacemos ejemplos luego físicos 492 00:21:53,699 --> 00:21:53,899 ¿Vale? 493 00:21:55,139 --> 00:21:56,819 Se entiende más o menos esto 494 00:21:56,819 --> 00:21:57,599 No es 495 00:21:57,599 --> 00:22:00,359 Muy nuevo 496 00:22:00,359 --> 00:22:02,179 Si habéis entendido 497 00:22:02,179 --> 00:22:04,699 Polimorfismo 498 00:22:04,699 --> 00:22:06,919 Y clases abstractas 499 00:22:06,920 --> 00:22:08,900 es más de lo mismo 500 00:22:08,900 --> 00:22:11,259 ¿vale? si no lo habéis entendido 501 00:22:11,259 --> 00:22:12,779 lo acabamos de repasar antes 502 00:22:12,779 --> 00:22:14,620 y lo acabamos de repasar ahora 503 00:22:14,620 --> 00:22:16,360 grabado, entonces 504 00:22:16,360 --> 00:22:18,740 escucháoslo con calma en casa 505 00:22:18,740 --> 00:22:20,180 una y otra vez 506 00:22:20,180 --> 00:22:22,640 hasta que como mínimo 507 00:22:22,640 --> 00:22:24,160 sepáis cuál es vuestra duda 508 00:22:24,160 --> 00:22:26,620 dónde os perdéis en este razonamiento 509 00:22:26,620 --> 00:22:28,480 ¿ok? aún así 510 00:22:28,480 --> 00:22:30,539 haremos más ejercicios 511 00:22:30,539 --> 00:22:31,779 y más pruebas 512 00:22:31,779 --> 00:22:39,680 Existen 513 00:22:39,680 --> 00:22:42,200 Interfaces 514 00:22:42,200 --> 00:22:44,200 Bien conocidas 515 00:22:44,200 --> 00:22:45,899 Como por ejemplo 516 00:22:45,899 --> 00:22:47,680 Muy importante que utilizaremos 517 00:22:47,680 --> 00:22:49,119 La interfaz comparable 518 00:22:49,119 --> 00:22:52,200 La interfaz comparable es una interfaz 519 00:22:52,200 --> 00:22:53,399 Que no he creado yo 520 00:22:53,399 --> 00:22:55,460 Que está en el Java API 521 00:22:55,460 --> 00:22:57,639 Que está en el core de Java 522 00:22:57,639 --> 00:22:59,680 Y es sustancialmente una interfaz 523 00:22:59,680 --> 00:23:02,100 Para decir que si tu implementas 524 00:23:02,100 --> 00:23:02,799 Comparable 525 00:23:02,799 --> 00:23:05,500 Estas dando a tus objetos 526 00:23:05,500 --> 00:23:08,039 La posibilidad de ser comparado 527 00:23:08,039 --> 00:23:08,740 Entre ellos 528 00:23:08,740 --> 00:23:11,600 Cuando yo implemento 529 00:23:11,600 --> 00:23:12,480 Comparable 530 00:23:12,480 --> 00:23:14,900 Quiere decir que por algún lado 531 00:23:14,900 --> 00:23:16,940 Tendré que implementar 532 00:23:16,940 --> 00:23:20,080 Este método de aquí 533 00:23:20,080 --> 00:23:21,460 ¿Vale? 534 00:23:21,460 --> 00:23:23,279 Y este método de aquí 535 00:23:23,279 --> 00:23:25,340 Me permite 536 00:23:25,340 --> 00:23:27,259 Comparar 537 00:23:27,259 --> 00:23:29,200 Entre ellos dos objetos 538 00:23:29,200 --> 00:23:31,299 De mi clase, yo creo la clase perro 539 00:23:31,299 --> 00:23:31,860 ¿Vale? 540 00:23:33,019 --> 00:23:34,279 Digo que perro 541 00:23:34,279 --> 00:23:36,480 Implements comparable 542 00:23:36,480 --> 00:23:39,400 Quiere decir que por algún lado tendré que implementar 543 00:23:39,400 --> 00:23:40,660 Int compare to 544 00:23:40,660 --> 00:23:42,580 Objeto, ¿vale? 545 00:23:43,000 --> 00:23:45,120 Y el resultado de este mensaje 546 00:23:45,120 --> 00:23:47,299 Es, de este método es 547 00:23:47,299 --> 00:23:48,620 Menos uno 548 00:23:48,620 --> 00:23:50,740 Si this 549 00:23:50,740 --> 00:23:52,480 Si el objeto que está 550 00:23:52,480 --> 00:23:54,460 Que está implementando es menor 551 00:23:54,460 --> 00:23:55,779 Que el objeto que te paso 552 00:23:55,779 --> 00:23:58,980 Cero, si son iguales 553 00:23:58,980 --> 00:24:00,579 O un número positivo 554 00:24:00,579 --> 00:24:02,759 Si this es mayor 555 00:24:02,759 --> 00:24:04,240 Que el objeto que te pasó 556 00:24:04,240 --> 00:24:06,700 Esto me permite 557 00:24:06,700 --> 00:24:08,640 Ordenar mis objetos 558 00:24:08,640 --> 00:24:10,620 Por ejemplo, ordenar perros 559 00:24:10,620 --> 00:24:16,559 Lo tienes que definir tú 560 00:24:16,559 --> 00:24:18,740 Tú has creado los objetos perros 561 00:24:18,740 --> 00:24:20,640 ¿Cuándo un perro es menor que otro? 562 00:24:23,140 --> 00:24:24,900 Lo tendrás que definir tú 563 00:24:24,900 --> 00:24:26,980 Es exactamente el concepto 564 00:24:26,980 --> 00:24:35,259 La comparable es un contrato que te está diciendo, oye, mira, si quieres implementar comparable, porque puedes no implementarlo, entonces tus perros no serán comparables. 565 00:24:35,759 --> 00:24:46,880 Pero si tú quieres poder comparar dos objetos entre ellos y ordenarlos, por ejemplo, de mayor a menor, me tienes que definir tú cuál es el concepto de ordenado. 566 00:24:47,579 --> 00:24:54,160 ¿Cuál es? ¿Un perro menor o un perro mayor? ¿Lo haces por tamaño, por edad, por tamaño y edad? Elíjelo tú. 567 00:24:54,160 --> 00:24:57,100 Y tendrás que dentro de compare to 568 00:24:57,100 --> 00:24:58,940 Definir como se hace 569 00:24:58,940 --> 00:25:00,980 Entonces darás tus cálculos y cosas por el estilo 570 00:25:00,980 --> 00:25:03,460 Al final me darás un número negativo 571 00:25:03,460 --> 00:25:05,220 Si el objeto 572 00:25:05,220 --> 00:25:06,759 Que estás llamando este método 573 00:25:06,759 --> 00:25:08,800 Es menor que el objeto 574 00:25:08,800 --> 00:25:10,019 Que te he pasado de parámetro 575 00:25:10,019 --> 00:25:12,180 Cero si son iguales 576 00:25:12,180 --> 00:25:14,660 O positivo si yo soy mayor 577 00:25:14,660 --> 00:25:16,160 Del objeto que me estás comparando 578 00:25:16,160 --> 00:25:18,680 Con esta forma de aquí, con compare to 579 00:25:18,680 --> 00:25:20,460 La cosa interesante es que hay un montón 580 00:25:20,460 --> 00:25:22,759 De clases ya creadas 581 00:25:22,759 --> 00:25:29,000 que te pillan un objeto comparable y, por ejemplo, te lo ordenan. 582 00:25:30,480 --> 00:25:34,960 Entonces, cualquier objeto que vosotros creáis, el objeto gato, 583 00:25:35,960 --> 00:25:44,759 implementáis el comparable y ya podéis utilizar un montón de métodos creados por otros 584 00:25:44,759 --> 00:25:50,440 que te ordenan a raíz de gatos o a raíz de perros, sin tener que implementarlo vosotros. 585 00:25:50,440 --> 00:25:52,539 ¿Por qué? Porque usarán este 586 00:25:52,539 --> 00:25:54,559 Comper2, ¿y cómo saben que yo 587 00:25:54,559 --> 00:25:56,539 He creado Comper2? Porque implemento 588 00:25:56,539 --> 00:25:58,640 Comparable, y si implemento Comparable 589 00:25:58,640 --> 00:25:59,580 Esto tiene que estar 590 00:25:59,580 --> 00:26:02,660 No sé si se entiende la potencia 591 00:26:02,660 --> 00:26:03,100 De esto 592 00:26:03,100 --> 00:26:06,299 Y hay un montón de cosas así 593 00:26:06,299 --> 00:26:08,980 Hay Comparable, hay Serializable 594 00:26:08,980 --> 00:26:10,640 Serializable 595 00:26:10,640 --> 00:26:12,440 Quiere decir que sostantivamente 596 00:26:12,440 --> 00:26:14,920 Puedo pillar mi objeto y transformarlo 597 00:26:14,920 --> 00:26:16,480 En un array de bytes 598 00:26:16,480 --> 00:26:18,440 Y si puedo hacer esto 599 00:26:18,440 --> 00:26:21,360 Lo puedo mandar por internet, lo puedo escribir en un fichero 600 00:26:21,360 --> 00:26:22,860 Lo puedo mandar a otro proceso 601 00:26:22,860 --> 00:26:24,259 Puede hacer un montón de cosas 602 00:26:24,259 --> 00:26:26,100 Si el objeto es serializable 603 00:26:26,100 --> 00:26:27,600 Puede hacer un montón de cosas 604 00:26:27,600 --> 00:26:29,900 Que no puede hacer si no es serializable 605 00:26:29,900 --> 00:26:35,100 Tendré que mirarme 606 00:26:35,100 --> 00:26:37,299 Que interfaz hay 607 00:26:37,299 --> 00:26:38,559 Y para que sirven 608 00:26:38,559 --> 00:26:41,460 Y en determinados casos para poder utilizar un método 609 00:26:41,460 --> 00:26:43,519 Tendré que implementar una determinada 610 00:26:43,519 --> 00:26:44,860 Interfaz 611 00:26:44,860 --> 00:26:47,059 Haremos más ejemplos sobre todo con comparable 612 00:26:47,059 --> 00:26:49,179 Porque luego nos servirán para el siguiente tema 613 00:26:49,179 --> 00:26:50,079 Que son las colecciones 614 00:26:50,079 --> 00:26:51,859 Duda 615 00:26:51,859 --> 00:27:01,279 Esta de aquí 616 00:27:01,279 --> 00:27:02,639 Lo pone por aquí, creo 617 00:27:02,639 --> 00:27:06,179 Si los dos 618 00:27:06,179 --> 00:27:09,460 Si la interfaz 619 00:27:09,460 --> 00:27:11,339 Si tú intentas comparar 620 00:27:11,339 --> 00:27:12,319 Un gato y un perro 621 00:27:12,319 --> 00:27:14,779 Lo que deberías hacer es explotar 622 00:27:14,779 --> 00:27:16,960 Y lanzarte probablemente una infección 623 00:27:16,960 --> 00:27:21,860 No te puede decir, no, un gato y un perro son un en menor, un en mayor o son iguales 624 00:27:21,860 --> 00:27:23,340 Porque no son comparables 625 00:27:23,340 --> 00:27:28,100 Entonces debería explotar un tipo de excepción por algún lado 626 00:27:28,100 --> 00:27:30,299 Hemos hecho las excepciones todavía, ya lo queremos 627 00:27:30,299 --> 00:27:35,480 Ya está 628 00:27:35,480 --> 00:27:38,440 Seguimos luego