1 00:00:00,000 --> 00:00:03,480 ¿Vale? 2 00:00:03,480 --> 00:00:05,640 Entonces, el objetivo de este constructor, por tanto, 3 00:00:05,640 --> 00:00:07,320 como casi todos los constructores, 4 00:00:07,320 --> 00:00:12,120 es recibir datos y con esos datos inicializar las propiedades 5 00:00:12,120 --> 00:00:14,040 de la clase. 6 00:00:14,040 --> 00:00:16,960 Las propiedades de la clase en este caso es un array. 7 00:00:16,960 --> 00:00:19,600 Pues, entonces, tiene que recibir datos para inicializar 8 00:00:19,600 --> 00:00:20,800 ese array. 9 00:00:20,800 --> 00:00:21,280 ¿Vale? 10 00:00:21,280 --> 00:00:23,840 ¿Qué datos recibe el constructor? 11 00:00:23,840 --> 00:00:26,480 Recibe una cadena. 12 00:00:26,480 --> 00:00:28,280 Esta, por ejemplo. 13 00:00:28,280 --> 00:00:29,240 Esta. 14 00:00:30,200 --> 00:00:32,880 Y ahora, el problema es que como recibe los datos en una única 15 00:00:32,880 --> 00:00:36,240 cadena, los tengo yo que sacar para inicializar ese array. 16 00:00:36,240 --> 00:00:39,040 Bueno, pues, es lo que hemos hecho. 17 00:00:39,040 --> 00:00:46,600 Hemos sacado de esa cadena, hemos sacado los datos 18 00:00:46,600 --> 00:00:48,360 separados por punto y coma. 19 00:00:48,360 --> 00:00:50,320 Cada dato es una app. 20 00:00:50,320 --> 00:00:53,880 Pues, ahora ya me creo el store, que es el array de apps con el 21 00:00:53,880 --> 00:00:56,480 mismo tamaño que los datos que yo he sacado de mi cadena, 22 00:00:56,480 --> 00:00:58,200 el mismo tamaño. 23 00:00:58,200 --> 00:01:02,400 Y ahora ya recorro cada una de las subcadenas que son cada app, 24 00:01:02,400 --> 00:01:07,560 las recorro, saco de ellas los 3 datos, 25 00:01:07,560 --> 00:01:10,080 saco de ellas los 3 datos. 26 00:01:10,080 --> 00:01:12,800 Y ya que tengo los 3 datos, instancio el objeto y a la 27 00:01:12,800 --> 00:01:14,600 posición del almacén correspondiente, 28 00:01:14,600 --> 00:01:16,040 a la posición correspondiente. 29 00:01:16,040 --> 00:01:18,280 Bueno, pues, ya ha hecho el constructor. 30 00:01:18,280 --> 00:01:21,400 Ya ha hecho el constructor que crea un almacén de aplicaciones 31 00:01:21,400 --> 00:01:23,640 con las aplicaciones que yo le doy. 32 00:01:23,640 --> 00:01:25,160 Nombre, versión y tamaño. 33 00:01:25,160 --> 00:01:26,920 Vale. 34 00:01:26,920 --> 00:01:31,160 Bueno, pues, ya tenemos el constructor del almacén de 35 00:01:31,160 --> 00:01:34,920 aplicaciones que está en el móvil, se supone. 36 00:01:34,920 --> 00:01:36,240 El almacén de aplicaciones. 37 00:01:36,240 --> 00:01:40,200 Bueno, pues, venga, ¿qué más cosas hay que hacer en esta 38 00:01:40,200 --> 00:01:41,320 clase? 39 00:01:41,320 --> 00:01:42,780 Pues, lo que me diga el enunciado, 40 00:01:42,780 --> 00:01:45,440 porque el enunciado ya ha hecho un diseño, ya lo ha hecho. 41 00:01:45,440 --> 00:01:48,360 Pues, yo lo respeto. 42 00:01:48,360 --> 00:01:49,280 Vale, ya hemos hecho. 43 00:01:49,280 --> 00:01:52,760 Bueno, el constructor ya está. 44 00:01:52,760 --> 00:01:55,120 Y ahora tiene más métodos. 45 00:01:55,120 --> 00:01:57,080 Tiene todos estos. 46 00:01:57,080 --> 00:02:00,800 Tiene install, change version, lista de aplicaciones y check 47 00:02:00,800 --> 00:02:02,320 update. 48 00:02:02,320 --> 00:02:03,960 Tiene todo eso. 49 00:02:03,960 --> 00:02:04,440 ¿Vale? 50 00:02:04,440 --> 00:02:08,480 Pues, hay que hacer esos 4 métodos. 51 00:02:08,480 --> 00:02:09,560 Vale. 52 00:02:09,560 --> 00:02:11,440 Vamos a hacer el primer método. 53 00:02:11,440 --> 00:02:12,720 Install. 54 00:02:12,720 --> 00:02:18,080 Install dice que recibe el nombre de una aplicación y 55 00:02:18,080 --> 00:02:23,360 devuelve una copia del objeto A que está en ese almacén 56 00:02:23,360 --> 00:02:26,400 correspondiente. 57 00:02:26,400 --> 00:02:29,480 A ver, la idea de esto es, el teléfono, el terminal, 58 00:02:29,480 --> 00:02:35,080 el teléfono, tiene ahí todas las aplicaciones que puede usar. 59 00:02:35,080 --> 00:02:37,440 Todas las que puede usar. 60 00:02:37,440 --> 00:02:39,240 Pero son similares en todas instaladas. 61 00:02:39,240 --> 00:02:40,560 Son las que puede usar. 62 00:02:40,560 --> 00:02:43,120 Entonces, cuando le damos a instalar a una de ellas a 63 00:02:43,120 --> 00:02:45,840 través de este método, cuando le damos a instalar, 64 00:02:45,840 --> 00:02:49,080 coge una y la instala, pero hace una copia. 65 00:02:49,080 --> 00:02:51,640 Entonces, la que se instala y luego se ejecutará es una 66 00:02:51,640 --> 00:02:52,880 copia. 67 00:02:52,880 --> 00:02:53,640 ¿Vale? 68 00:02:53,640 --> 00:02:55,440 Y el almacén tiene sus propias aplicaciones, 69 00:02:55,440 --> 00:02:58,360 tiene las aplicaciones. 70 00:02:58,360 --> 00:03:02,280 Pero hace una copia, hace una copia del objeto aplicación, 71 00:03:02,280 --> 00:03:05,280 hace una copia y esa es la que se queda instalada y 72 00:03:05,280 --> 00:03:06,360 ejecutada. 73 00:03:06,360 --> 00:03:09,280 De ahí lo de devuelve una copia. 74 00:03:09,280 --> 00:03:12,400 Vale, vamos a intentar entender esto bien. 75 00:03:12,400 --> 00:03:15,720 Venga, pues, vamos a hacer el método de instalar. 76 00:03:15,720 --> 00:03:18,800 Que tiene solo una línea o prácticamente, 77 00:03:18,800 --> 00:03:21,800 pero luego tiene su gracia entenderlo, que es la idea. 78 00:03:21,800 --> 00:03:26,000 Pues, venga, método install de la aplicación esta. 79 00:03:26,000 --> 00:03:30,920 Este es el auxiliar, lo dejo ahí abajo por si acaso lo uso. 80 00:03:30,920 --> 00:03:34,440 El método install sí que se va a usar desde fuera, entonces. 81 00:03:34,440 --> 00:03:37,000 Dice, ¿qué dice? 82 00:03:37,000 --> 00:03:42,240 Devuelve una copia de la aplicación cuyo nombre se ha 83 00:03:42,240 --> 00:03:46,760 pasado por parámetro, porque se ha pasado un string. 84 00:03:46,760 --> 00:03:49,040 Pues, venga, install. 85 00:03:49,040 --> 00:03:54,720 Entonces, el valor de retorno se queda aquí. 86 00:03:54,720 --> 00:04:00,240 El método install recibe un nombrecito, nombre app. 87 00:04:03,440 --> 00:04:07,640 Y se supone que con este nombre que recibe, 88 00:04:07,640 --> 00:04:10,320 buscará en el almacén que está aquí arriba, 89 00:04:10,320 --> 00:04:11,680 buscará el almacén. 90 00:04:11,680 --> 00:04:14,080 Por eso no hay que pasárselo al método. 91 00:04:14,080 --> 00:04:18,440 Buscará el almacén y devolverá una copia de la aplicación que 92 00:04:18,440 --> 00:04:19,760 tenga ese nombre. 93 00:04:19,760 --> 00:04:22,360 Luego, el valor de retorno de este método, ¿cuál será? 94 00:04:22,360 --> 00:04:25,160 Que tengo que poner ahí. 95 00:04:25,160 --> 00:04:28,040 Exactamente, app, ¿vale? 96 00:04:28,040 --> 00:04:32,720 Porque va a devolver un objeto a aplicación. 97 00:04:32,720 --> 00:04:37,200 Entonces, uno podría, a lo mejor, plantearse hacer esto. 98 00:04:40,080 --> 00:04:42,760 Vamos a buscar la aplicación que se llama así en todo el 99 00:04:42,760 --> 00:04:43,260 array. 100 00:04:46,560 --> 00:04:47,840 Vamos a recorrer el array. 101 00:04:56,560 --> 00:05:00,280 Vamos a recorrerlo y comparamos nombres. 102 00:05:00,280 --> 00:05:04,560 Si store de i, que es la aplicación que está en la 103 00:05:04,560 --> 00:05:14,240 posición i del almacén, su nombre resulta que es igual al 104 00:05:14,240 --> 00:05:19,640 nombrecito que me han pasado, uno podría decir, ah, 105 00:05:19,640 --> 00:05:20,760 ya la he encontrado. 106 00:05:20,760 --> 00:05:23,840 Y podría decir, pues, venga, devuelvo esa aplicación. 107 00:05:32,080 --> 00:05:32,580 ¿Vale? 108 00:05:34,880 --> 00:05:36,320 Bueno, ahora voy haciendo preguntas. 109 00:05:41,920 --> 00:05:44,320 Primero, digo lo que he escrito. 110 00:05:44,320 --> 00:05:47,120 Tengo el almacén de objetos app, que es una propiedad de la 111 00:05:47,120 --> 00:05:49,400 clase en la que estoy, el almacén de objetos app. 112 00:05:49,400 --> 00:05:53,280 Lo recorro para cada aplicación que está en ese array. 113 00:05:53,280 --> 00:05:56,760 Si su nombre es igual al que me han pasado, 114 00:05:56,760 --> 00:05:59,080 devuelvo esa aplicación enterita. 115 00:05:59,080 --> 00:06:01,720 Devuelvo esa aplicación enterita. 116 00:06:01,720 --> 00:06:05,160 Bueno, eso es lo que yo he escrito ahí. 117 00:06:05,160 --> 00:06:08,200 Vale, primera pregunta, ¿qué hago? 118 00:06:08,200 --> 00:06:10,280 ¿Por qué el compilador me lo marca en rojo? 119 00:06:10,280 --> 00:06:12,000 No lo miréis y me lo leáis. 120 00:06:14,920 --> 00:06:17,280 ¿Por qué creéis que el compilador me marca en rojo un 121 00:06:17,280 --> 00:06:19,400 error de compilación ahí? 122 00:06:19,400 --> 00:06:21,520 No, al fin y al cabo, el tipo de dato está bien. 123 00:06:21,520 --> 00:06:22,440 Bueno, lo que creáis. 124 00:06:32,120 --> 00:06:34,440 ¿Con qué creéis que está relacionado que el compilador 125 00:06:34,440 --> 00:06:35,280 me ponga eso rojo? 126 00:06:44,840 --> 00:06:47,040 Vale, vamos dando pistas. 127 00:06:47,040 --> 00:06:49,720 El método tiene que devolver un objeto app sí o sí. 128 00:06:49,720 --> 00:06:51,480 Eso está claro, ¿no? 129 00:06:51,480 --> 00:06:53,640 Porque yo he puesto aquí app, tiene que devolver un objeto 130 00:06:53,640 --> 00:06:54,240 app sí o sí. 131 00:06:54,240 --> 00:06:55,880 Eso está claro. 132 00:06:55,880 --> 00:06:57,560 Vale. 133 00:06:57,560 --> 00:07:00,800 ¿Este método va a devolver un objeto app sí o sí? 134 00:07:05,800 --> 00:07:07,320 No. 135 00:07:07,320 --> 00:07:08,040 Explícate más. 136 00:07:13,600 --> 00:07:14,280 Explícate más. 137 00:07:14,280 --> 00:07:16,440 Sí, la respuesta es no, efectivamente. 138 00:07:23,640 --> 00:07:26,680 O sea, la respuesta es no siempre. 139 00:07:26,680 --> 00:07:32,160 A ver, devolverá un objeto app si esto es true alguna vez. 140 00:07:32,160 --> 00:07:35,400 Pero imaginaos que no hay ninguna aplicación en almacén 141 00:07:35,400 --> 00:07:37,920 cuyo nombre sea igual que este, que no hay ninguna. 142 00:07:37,920 --> 00:07:41,960 Entonces, jamás entra en el if, saldría del for, por aquí, 143 00:07:41,960 --> 00:07:45,240 saldría y nunca jamás habría entrado aquí. 144 00:07:45,240 --> 00:07:46,600 Pues es lo que dice el compilador. 145 00:07:46,600 --> 00:07:50,360 Te dice, oye, perdona, que hay alguna aplicación aquí cuyo 146 00:07:50,360 --> 00:07:51,400 nombre coincide. 147 00:07:51,400 --> 00:07:53,920 Genial, no te digo nada, no te pongo pegas. 148 00:07:53,920 --> 00:07:55,680 Vas a devolverme el objeto app. 149 00:07:55,680 --> 00:08:00,440 Pero te dice, oye, ¿qué pasa si el for ha terminado con lo 150 00:08:00,440 --> 00:08:03,800 cual he saltado este punto y yo jamás entré en el if? 151 00:08:03,800 --> 00:08:04,800 Te dice, entonces, ¿qué? 152 00:08:04,800 --> 00:08:07,040 Me tienes que devolver un app sí o sí. 153 00:08:07,040 --> 00:08:09,840 Claro, siempre tiene que devolver, si yo aquí pongo app, 154 00:08:09,840 --> 00:08:13,520 siempre tiene que devolver un objeto app, siempre. 155 00:08:13,520 --> 00:08:15,280 Pase lo que pase. 156 00:08:15,280 --> 00:08:20,080 Y con lo que yo he escrito, si este if nunca es true, 157 00:08:20,080 --> 00:08:23,040 el for terminaría, seguiríamos por aquí y ahí no hay ningún 158 00:08:23,040 --> 00:08:25,400 retún que devuelva nada. 159 00:08:25,400 --> 00:08:28,440 Entonces, es lo que me dice el compilador, me dice, oye, 160 00:08:28,440 --> 00:08:31,480 siempre pase lo que pase, se cumple la condición alguna vez, 161 00:08:31,480 --> 00:08:32,760 no se cumple nunca. 162 00:08:32,760 --> 00:08:37,240 Siempre tienes que devolver un objeto app, ¿vale? 163 00:08:37,240 --> 00:08:38,760 Entendéis por qué lo pone rojo, ¿no? 164 00:08:41,960 --> 00:08:50,880 Bueno, pues, entonces, yo, si he llegado a este punto sin haber 165 00:08:50,880 --> 00:08:53,120 salido aquí por el retún, si he llegado a este punto, 166 00:08:53,120 --> 00:08:55,280 es porque esto nunca fue true. 167 00:08:55,280 --> 00:08:57,480 Pues, tengo que darle algo, tengo que darle algo para que 168 00:08:57,480 --> 00:08:57,960 se calle. 169 00:08:57,960 --> 00:09:00,000 Tengo que darle un objeto app, algo. 170 00:09:00,000 --> 00:09:01,640 ¿Qué sería natural devolverle ahí? 171 00:09:01,640 --> 00:09:02,920 ¿Un retún tengo que hacerle? 172 00:09:02,920 --> 00:09:03,440 INTERLOCUTOR 1. 173 00:09:03,440 --> 00:09:06,400 Haces que primero retún y esto sea un null y luego devuelves. 174 00:09:06,400 --> 00:09:07,000 INTERLOCUTOR 2. 175 00:09:07,000 --> 00:09:09,640 Ah, no, esto no lo puedo tocar, esto tiene los apps. 176 00:09:09,640 --> 00:09:11,440 A ver, no os compliquéis la vida. 177 00:09:11,440 --> 00:09:14,840 Le digo, pues, si no hay ninguna, ¿yo qué te voy a hacer, 178 00:09:14,840 --> 00:09:15,960 hijo mío? 179 00:09:15,960 --> 00:09:18,760 Le digo, es que no he encontrado ninguna que se llame así, 180 00:09:18,760 --> 00:09:21,920 pues, te devuelvo una app null, ya está, ¿no? 181 00:09:26,840 --> 00:09:31,480 Entonces, este método, recorre el almacén, va uno por uno. 182 00:09:31,480 --> 00:09:34,200 ¿Que tiene la suerte de encontrar una aplicación cuyo 183 00:09:34,200 --> 00:09:36,000 nombre sea igual a nombre? 184 00:09:36,000 --> 00:09:36,920 Genial. 185 00:09:36,920 --> 00:09:39,680 La devuelve, lo de la copia y todo eso, 186 00:09:39,680 --> 00:09:42,720 ahora ya nos metemos, devuelve esa aplicación y todo termina, 187 00:09:42,720 --> 00:09:44,320 se acabó. 188 00:09:44,320 --> 00:09:47,400 ¿Que no ha tenido la suerte, no ha tenido la suerte de 189 00:09:47,440 --> 00:09:49,720 encontrar una aplicación cuyo nombre sea igual al que me han 190 00:09:49,720 --> 00:09:50,880 pasado? 191 00:09:50,880 --> 00:09:54,520 El for ha acabado y el método sigue, el método sigue. 192 00:09:54,520 --> 00:09:55,080 ¿Qué hace? 193 00:09:55,080 --> 00:09:57,200 Le digo, pues, chico, no tengo nada que devolverte, 194 00:09:57,200 --> 00:09:59,080 no tengo nada que devolverte, pero un objeto hay que 195 00:09:59,080 --> 00:10:01,200 devolver, un objeto hay que devolver sí o sí, 196 00:10:01,200 --> 00:10:03,840 porque yo me he comprometido poniendo ahí app. 197 00:10:03,840 --> 00:10:05,680 Pues, te devuelvo null, ¿qué te voy a devolver? 198 00:10:05,680 --> 00:10:07,200 No voy a inventar una app cualquiera, 199 00:10:07,200 --> 00:10:08,840 porque te estaría mintiendo. 200 00:10:08,840 --> 00:10:10,960 Si yo me invento una app y te la devuelvo, 201 00:10:10,960 --> 00:10:14,800 tú te vas a creer que esa app es la que estaba en el almacén. 202 00:10:14,800 --> 00:10:16,640 No te puedo mentir. 203 00:10:16,640 --> 00:10:20,320 Pues, la forma de expresar esa idea de que no estaba la 204 00:10:20,320 --> 00:10:22,720 aplicación es devolverle un null. 205 00:10:22,720 --> 00:10:27,720 A devolverle un null, porque un null es un objeto también. 206 00:10:27,720 --> 00:10:29,680 Entonces, siempre que hay que devolver un objeto, 207 00:10:29,680 --> 00:10:31,840 se puede devolver null, porque un null es un objeto. 208 00:10:31,840 --> 00:10:35,080 Lo que pasa es que es un objeto null. 209 00:10:35,080 --> 00:10:37,080 Si este método devolviera string, 210 00:10:37,080 --> 00:10:42,080 returnNull también sería válido, porque null es un objeto. 211 00:10:42,080 --> 00:10:45,880 Null lo puedo devolver siempre que necesite yo devolver un 212 00:10:45,880 --> 00:10:46,380 objeto. 213 00:10:46,380 --> 00:10:49,760 Pero, claro, tengo que devolver null cuando tenga sentido dentro 214 00:10:49,760 --> 00:10:52,800 de lo que yo quiero expresar. 215 00:10:52,800 --> 00:10:55,560 Y aquí está claro, una app tengo que devolver. 216 00:10:55,560 --> 00:10:57,560 Si entro por este camino, la voy a devolver. 217 00:10:57,560 --> 00:10:58,440 Genial. 218 00:10:58,440 --> 00:11:01,200 Pero si no entro por aquí y llego aquí, 219 00:11:01,200 --> 00:11:04,080 pues tengo que devolver null. 220 00:11:04,080 --> 00:11:07,720 Repito, porque la alternativa si no sería construirme yo una app 221 00:11:07,720 --> 00:11:09,320 y devolver esa. 222 00:11:09,320 --> 00:11:11,600 Pero es que entonces estoy confundiendo. 223 00:11:11,600 --> 00:11:14,200 Parecería que esa app que me construí y devuelvo es la del 224 00:11:14,200 --> 00:11:14,800 almacén. 225 00:11:14,800 --> 00:11:18,080 Y no, no había ninguna en el almacén. 226 00:11:18,080 --> 00:11:19,240 Vale, entonces devuelvo null. 227 00:11:19,240 --> 00:11:20,560 Esta sería la forma de hacerlo. 228 00:11:23,280 --> 00:11:26,280 Vale, vale, ahora. 229 00:11:26,280 --> 00:11:30,360 Vale, entonces, cuando uno hace métodos de clases, 230 00:11:30,360 --> 00:11:34,920 tiene que documentar estas cosas y decir, oye, 231 00:11:34,920 --> 00:11:38,960 este método devuelve null si no encuentra aplicación. 232 00:11:38,960 --> 00:11:42,840 Para que el que lo use sepa que se puede encontrar un null si 233 00:11:42,880 --> 00:11:44,280 no lo encuentra. 234 00:11:44,280 --> 00:11:47,600 Y esté prevenido el de los posibles null pointer excepción 235 00:11:47,600 --> 00:11:50,160 cuando el use ese método, etcétera. 236 00:11:50,160 --> 00:11:51,560 Entonces, vale. 237 00:11:51,560 --> 00:11:54,280 Pues, hombre, lo ideal, si hacemos bien las cosas, 238 00:11:54,280 --> 00:11:57,120 es documentar esto. 239 00:11:57,120 --> 00:12:07,880 Nombre de la aplicación a buscar en el array. 240 00:12:07,880 --> 00:12:10,120 ¿Qué devuelve? 241 00:12:10,120 --> 00:12:13,800 Con lo de la copia nos metemos ahora. 242 00:12:13,800 --> 00:12:15,400 Voy a poner lo que devuelve de verdad, 243 00:12:15,400 --> 00:12:17,160 aunque tal y como lo tenemos no es eso. 244 00:12:17,160 --> 00:12:19,320 Pero, bueno. 245 00:12:19,320 --> 00:12:27,760 Una copia de la aplicación del, buscar en él, 246 00:12:27,760 --> 00:12:31,080 voy a llamarlo store para que quede claro. 247 00:12:31,080 --> 00:12:33,120 Una copia de la aplicación del store. 248 00:12:41,120 --> 00:12:45,400 O null, o null si no la encuentra. 249 00:12:48,280 --> 00:12:51,360 Vale, esto ya está bien documentado. 250 00:12:51,360 --> 00:12:52,960 Con esto podríamos generar el jabado, 251 00:12:52,960 --> 00:12:54,800 como generamos el otro día. 252 00:12:54,800 --> 00:12:57,520 Si lo enlazamos con el eclipse, que es lo que el otro día se 253 00:12:57,520 --> 00:13:00,040 quedó por hacer, por eso no veíamos la ayuda en línea. 254 00:13:00,040 --> 00:13:03,880 Si lo enlazamos con el eclipse o exportamos el puente, vamos. 255 00:13:03,880 --> 00:13:06,960 El que desarrolle con el eclipse verá la ayuda en línea y verá 256 00:13:06,960 --> 00:13:10,040 esto que hemos explicado y dirá, ah, qué bien, vale, estupendo. 257 00:13:10,040 --> 00:13:12,440 Cuidado, voy a usar install, pero cuidado, 258 00:13:12,440 --> 00:13:15,360 porque puede ser null si no lo encuentra, vale. 259 00:13:15,360 --> 00:13:18,840 Si no, hombre, si no documentamos las cosas, 260 00:13:18,840 --> 00:13:23,320 el que use luego nuestra aplicación esta para su móvil, 261 00:13:23,320 --> 00:13:27,960 pues, a lo mejor, luego no va a poder desarrollar sobre ella. 262 00:13:27,960 --> 00:13:30,480 Vale, bueno, entonces, esta primera versión de método que 263 00:13:30,480 --> 00:13:33,520 hemos hecho no es exactamente la que nos piden, 264 00:13:33,520 --> 00:13:35,200 porque esta, ¿qué es lo que hace? 265 00:13:35,200 --> 00:13:38,120 Devuelve directamente el objeto del array. 266 00:13:38,120 --> 00:13:40,920 Devuelve directamente, no una copia. 267 00:13:40,920 --> 00:13:45,360 Es decir, vámonos al paint ese. 268 00:13:45,360 --> 00:13:46,040 Estupendo. 269 00:13:56,920 --> 00:14:00,000 Vale, a ver, este es nuestro array de aplicaciones. 270 00:14:00,000 --> 00:14:01,800 La propiedad de store está de aquí. 271 00:14:01,800 --> 00:14:17,080 Jolines, vamos a ver, que este, ah, está aquí. 272 00:14:17,080 --> 00:14:18,880 Es que este paint no lo he usado nunca, creo. 273 00:14:24,880 --> 00:14:26,720 De verdad, estoy imbécil. 274 00:14:26,720 --> 00:14:28,160 Ah, sí, vale. 275 00:14:28,160 --> 00:14:32,600 Entonces, ahora, bueno. 276 00:14:43,000 --> 00:14:46,520 Joe, bueno, vale, da igual. 277 00:14:46,520 --> 00:14:49,320 Vale, esta es nuestra propiedad de store de la clase, 278 00:14:49,320 --> 00:14:53,480 la que tiene las aplicaciones, que tiene unas cuantas. 279 00:14:53,480 --> 00:14:55,800 Las que se ha inicializado en el constructor. 280 00:14:55,800 --> 00:14:56,720 Tiene unas cuantas. 281 00:14:59,000 --> 00:15:00,000 Esto. 282 00:15:00,000 --> 00:15:03,040 Vale, ¿qué hace mi método install? 283 00:15:03,040 --> 00:15:06,200 A ver si consigo hacerlo más grande. 284 00:15:11,840 --> 00:15:14,640 ¿Qué hace el método install cuando yo le paso un nombre? 285 00:15:21,480 --> 00:15:22,520 ¿Qué hace este método? 286 00:15:22,520 --> 00:15:24,600 Bueno, pues, tal y como yo lo he programado, 287 00:15:24,600 --> 00:15:27,720 este método empieza a recorrer el array. 288 00:15:27,760 --> 00:15:31,680 Y cuando encuentra una aplicación aquí en el array, 289 00:15:31,680 --> 00:15:34,120 en la posición que sea, cuyo nombre es el nombre este que 290 00:15:34,120 --> 00:15:37,880 me han pasado, cuando lo encuentra, 291 00:15:37,880 --> 00:15:40,920 devuelve directamente esto. 292 00:15:40,920 --> 00:15:45,600 Directamente la aplicación es la que devuelve con orden retorno. 293 00:15:45,600 --> 00:15:48,040 Directamente este objeto. 294 00:15:48,040 --> 00:15:49,920 ¿Veis? 295 00:15:49,920 --> 00:15:53,120 Devuelve directamente ese objeto. 296 00:15:53,120 --> 00:15:55,080 Que ya sabemos nosotros, por otra parte, 297 00:15:55,080 --> 00:15:57,360 que es una dirección de memoria. 298 00:15:57,360 --> 00:15:59,360 Ya lo sabemos, que es una dirección de memoria. 299 00:15:59,360 --> 00:16:01,720 Esto, en realidad, como es un objeto aplicación, 300 00:16:01,720 --> 00:16:04,560 esto sabemos que es una dirección de memoria hacia 301 00:16:04,560 --> 00:16:06,320 donde está la app, en realidad. 302 00:16:06,320 --> 00:16:09,920 Pero el retune es directamente de store de i, directamente. 303 00:16:09,920 --> 00:16:12,640 Es el retune de eso. 304 00:16:12,640 --> 00:16:16,520 Luego, no está devolviendo una copia. 305 00:16:16,520 --> 00:16:20,640 Entonces, esto se supone que trata de simular que, pues, 306 00:16:20,640 --> 00:16:24,360 tú lanzas una aplicación en el móvil y se está ejecutando, 307 00:16:24,360 --> 00:16:27,280 que es después de hacer el install. 308 00:16:27,280 --> 00:16:30,320 Pero lo que tú realmente estás lanzando y ejecutando es una 309 00:16:30,320 --> 00:16:33,000 copia del software de base. 310 00:16:33,000 --> 00:16:36,080 Entonces, si ese software que está conectado a la Play Store 311 00:16:36,080 --> 00:16:39,560 o lo que sea, cambia de versión, el tuyo que se está ejecutando 312 00:16:39,560 --> 00:16:41,640 no cambia, porque es una copia, ¿verdad? 313 00:16:41,640 --> 00:16:42,680 No cambia. 314 00:16:42,680 --> 00:16:44,960 Entonces, si tú quieres actualizar a la versión, 315 00:16:44,960 --> 00:16:48,520 pues, tendrías que actualizarle y volver a instalar la nueva. 316 00:16:48,520 --> 00:16:52,800 Es decir, estos serían tus softwares posibles que están 317 00:16:52,800 --> 00:16:55,280 ahí, pues, en el firmware o donde sea. 318 00:16:55,280 --> 00:16:57,680 Y después del install te haces una copia, 319 00:16:57,680 --> 00:16:59,200 que es la que se ejecuta. 320 00:16:59,200 --> 00:17:01,320 Es lo que intentas simular. 321 00:17:01,320 --> 00:17:05,160 Bueno, pues, el install tiene que devolver una copia de esto, 322 00:17:05,160 --> 00:17:08,880 no esto, una copia, ¿vale? 323 00:17:08,880 --> 00:17:13,680 Vale, pues, entonces, vamos a modificarlo para que vuelva una 324 00:17:13,680 --> 00:17:15,200 copia. 325 00:17:15,200 --> 00:17:18,320 A ver si esto que hago os gusta. 326 00:17:18,320 --> 00:17:20,320 Venga, a ver si esto que hago os gusta. 327 00:17:20,320 --> 00:17:22,320 INTERLOCUTOR 1. Entonces, necesitas un método para 328 00:17:22,320 --> 00:17:23,800 instalarla y es lo que vas a usar. 329 00:17:23,800 --> 00:17:24,880 INTERLOCUTORA 1. ¿Perdón? 330 00:17:24,880 --> 00:17:27,080 INTERLOCUTOR 1. Necesitas un método para instalarla. 331 00:17:27,080 --> 00:17:28,240 INTERLOCUTOR 1. Y es lo que vas a usar. 332 00:17:28,240 --> 00:17:30,720 INTERLOCUTORA 1. Sí, o sea, este install la pone en memoria, 333 00:17:30,720 --> 00:17:33,320 pero no está lanzando a ejecutar. 334 00:17:33,320 --> 00:17:35,560 Este install sería como cargarla en memoria, ¿vale? 335 00:17:35,560 --> 00:17:36,960 Como cargarla, ¿vale? 336 00:17:36,960 --> 00:17:39,560 Pero en cualquier caso cargas una copia, ¿vale? 337 00:17:39,560 --> 00:17:42,000 Eso sí, cargas una copia. 338 00:17:42,000 --> 00:17:46,600 Vale, entonces, este install lo cargas en la memoria RAM, 339 00:17:46,600 --> 00:17:48,760 pero una copia de lo que tienes tú en tu, 340 00:17:48,760 --> 00:17:50,040 lo cargas en la memoria RAM. 341 00:17:50,080 --> 00:17:53,680 Vale, vamos a ver si ahora esto os gusta como para devolver, 342 00:17:53,680 --> 00:17:57,240 como idea de devolver copia. 343 00:17:57,240 --> 00:18:00,680 INTERLOCUTOR 1. Si quieres, me refiero a que cuando no la 344 00:18:00,680 --> 00:18:02,680 tienes, la abres y la buscas a instalar. 345 00:18:02,680 --> 00:18:07,640 Lo primero que te instala es la app que tengas en la RAM. 346 00:18:07,640 --> 00:18:09,120 ¿Listo? 347 00:18:09,120 --> 00:18:09,920 La abres y nada. 348 00:18:09,920 --> 00:18:12,120 INTERLOCUTORA 1. Sí, y luego, sí, la parte de ejecutar. 349 00:18:12,120 --> 00:18:14,680 INTERLOCUTOR 1. Sí, después, cuando ya tengas instalada. 350 00:18:14,680 --> 00:18:15,240 INTERLOCUTORA 1. La ejecutas. 351 00:18:15,240 --> 00:18:17,080 Sí, sí, sí, pero esa parte todavía no nos han pedido, 352 00:18:17,080 --> 00:18:19,360 sí, pero esa parte, tenemos un método de ejecutar al que 353 00:18:19,360 --> 00:18:21,840 podríamos llamar, pero no nos han pedido que la ejecutemos. 354 00:18:21,840 --> 00:18:24,880 O sea, nos han dicho, instale solamente para cargarla. 355 00:18:24,880 --> 00:18:27,800 INTERLOCUTOR 1. ¿Y para qué vamos a hacer la copia? 356 00:18:27,800 --> 00:18:29,760 INTERLOCUTORA 1. Bueno, porque funciona así. 357 00:18:29,760 --> 00:18:33,560 Porque lo que tienes que simular es que lo que tienes en memoria 358 00:18:33,560 --> 00:18:36,000 RAM no es directamente, físicamente, 359 00:18:36,000 --> 00:18:38,000 los bits que tienes en el disco duro. 360 00:18:38,000 --> 00:18:39,240 Siempre son copias. 361 00:18:39,240 --> 00:18:41,520 Es lo que intentas simular. 362 00:18:41,520 --> 00:18:43,760 Pues, eso es una copia. 363 00:18:43,760 --> 00:18:45,320 O sea, no es lo mismo. 364 00:18:45,320 --> 00:18:46,440 Es como, a ver, tú tienes. 365 00:18:46,440 --> 00:18:48,280 INTERLOCUTOR 1. Una vez ya la has instalado, 366 00:18:48,280 --> 00:18:49,720 ya no tienes eso, estás creyendo. 367 00:18:49,720 --> 00:18:50,680 INTERLOCUTORA 1. Claro. 368 00:18:50,680 --> 00:18:53,040 A ver, espera, esto es como, vamos a ver. 369 00:18:53,040 --> 00:18:54,720 Tú tienes en el disco duro tu ordenador, 370 00:18:54,720 --> 00:18:56,960 tienes tu sistema operativo, está en el disco duro. 371 00:18:56,960 --> 00:18:58,560 Está en el disco duro. 372 00:18:58,560 --> 00:19:01,520 Cuando tú arrancas, esos bits del disco duro, 373 00:19:01,520 --> 00:19:05,160 que son tu sistema operativo, esos bits se van a la RAM. 374 00:19:05,160 --> 00:19:08,360 Vale, entonces, tú tienes bits en el disco duro y bits en la 375 00:19:08,360 --> 00:19:10,240 RAM, que no son los mismos. 376 00:19:10,240 --> 00:19:13,640 O sea, pueden tener el mismo contenido, pero son copias. 377 00:19:13,640 --> 00:19:14,720 Vale, pues, esa es la idea. 378 00:19:14,720 --> 00:19:19,080 Lo que vamos a simular es que lo que te devuelve el objeto es 379 00:19:19,080 --> 00:19:20,080 una copia. 380 00:19:20,080 --> 00:19:20,600 Ya está. 381 00:19:20,600 --> 00:19:23,120 Si lo único que queremos simular es la idea de copia, 382 00:19:23,120 --> 00:19:26,200 copia de objeto o mismo objeto. 383 00:19:26,200 --> 00:19:26,720 Vale. 384 00:19:26,720 --> 00:19:29,440 O sea, tú cuando tienes un sistema operativo ejecutándose, 385 00:19:29,440 --> 00:19:32,120 lo estás ejecutando de lo que se ha cargado en la RAM. 386 00:19:32,120 --> 00:19:34,920 No lo ejecutas desde el disco duro nunca, ¿verdad? 387 00:19:34,920 --> 00:19:35,440 Pues, eso. 388 00:19:35,440 --> 00:19:40,400 Lo único que quiero decir es que en el disco duro hay unos bits 389 00:19:40,400 --> 00:19:41,680 y en la RAM hay otros. 390 00:19:41,680 --> 00:19:43,520 Y para conseguir los que están en la RAM, 391 00:19:43,520 --> 00:19:46,120 los has conseguido haciendo previamente una copia. 392 00:19:46,120 --> 00:19:47,320 Ya está, nada más. 393 00:19:47,320 --> 00:19:48,680 ¿Vale? 394 00:19:48,680 --> 00:19:49,760 ¿Vale? ¿Ya está? 395 00:19:49,760 --> 00:19:56,680 Bueno, pues, entonces, vamos a ver si os gusta cómo copia esta 396 00:19:56,680 --> 00:19:58,080 solución que voy a hacer yo aquí. 397 00:20:00,720 --> 00:20:04,320 Vale, pues, entonces, no queremos devolver esto, no. 398 00:20:04,320 --> 00:20:06,720 Lo voy a comentar porque esto era lo que no nos gusta porque 399 00:20:06,720 --> 00:20:08,000 esto no es copia. 400 00:20:08,000 --> 00:20:10,720 Esto es el propio objeto. 401 00:20:10,720 --> 00:20:18,240 Esto es lo que hemos quitado porque esto es el propio objeto, 402 00:20:18,240 --> 00:20:20,240 el que yo devolvería con el retún. 403 00:20:20,240 --> 00:20:21,960 ¿Sería este mismo que yo devolvería? 404 00:20:21,960 --> 00:20:22,480 No. 405 00:20:22,480 --> 00:20:24,480 Queremos hacer una copia del objeto. 406 00:20:24,480 --> 00:20:24,960 Vale. 407 00:20:24,960 --> 00:20:28,200 Pues, voy a ver si esto os gusta como copia del objeto. 408 00:20:28,200 --> 00:20:29,720 Vamos a ver. 409 00:20:29,720 --> 00:20:37,480 Me hago un objeto a, a, no tengo ni variable, se llame a, ¿no? 410 00:20:37,480 --> 00:20:38,920 A. 411 00:20:38,920 --> 00:20:44,160 Y en el objeto a, guardo este. 412 00:20:44,160 --> 00:20:47,560 Y ahora devuelvo a. 413 00:20:51,000 --> 00:20:54,000 ¿Vale? 414 00:20:54,000 --> 00:20:54,500 ¿Vale? 415 00:20:57,760 --> 00:20:59,240 Es otra cosa que he hecho. 416 00:20:59,240 --> 00:21:00,800 Me he hecho un objeto a. 417 00:21:00,800 --> 00:21:05,440 En este objeto a, copio esto, lo que yo antes estaba devolviendo 418 00:21:05,440 --> 00:21:06,200 directamente. 419 00:21:06,200 --> 00:21:07,440 Copio esto. 420 00:21:07,440 --> 00:21:09,160 Y ahora devuelvo a. 421 00:21:09,160 --> 00:21:10,240 ¿Vale? 422 00:21:10,240 --> 00:21:11,560 Estamos pensando en objetos. 423 00:21:14,320 --> 00:21:15,240 Vale. 424 00:21:15,240 --> 00:21:19,760 Mi pregunta es, ¿ahora ya estoy realmente devolviendo una copia 425 00:21:19,760 --> 00:21:23,920 del objeto o no? 426 00:21:23,920 --> 00:21:24,420 ¿No? 427 00:21:30,680 --> 00:21:32,480 Estoy creando otra dirección. 428 00:21:32,480 --> 00:21:33,080 No, no, no. 429 00:21:33,080 --> 00:21:34,480 No estoy creando ningún objeto. 430 00:21:34,480 --> 00:21:37,920 Estoy creando otra dirección de memoria que lleva al mismo 431 00:21:37,920 --> 00:21:39,480 objeto. 432 00:21:39,480 --> 00:21:39,960 ¿Vale? 433 00:21:39,960 --> 00:21:41,240 Esto es lo que estoy haciendo. 434 00:21:41,240 --> 00:21:43,040 A ver. 435 00:21:43,040 --> 00:21:46,520 Yo tengo aquí mi objeto, store de i, 436 00:21:46,520 --> 00:21:49,480 vamos a suponer que es este de aquí, 437 00:21:49,480 --> 00:21:50,680 el que yo quiero devolver. 438 00:21:50,680 --> 00:21:51,640 Este de aquí. 439 00:21:51,640 --> 00:21:52,600 ¿Vale? 440 00:21:52,600 --> 00:21:54,960 Entonces, con a, ¿qué estoy creando? 441 00:21:54,960 --> 00:21:56,520 Con a estoy creando. 442 00:21:56,520 --> 00:22:00,120 Entonces, este store de i, como es un objeto a, 443 00:22:00,120 --> 00:22:04,620 esto en realidad es una dirección de memoria hacia el 444 00:22:04,620 --> 00:22:06,280 verdadero objeto. 445 00:22:06,280 --> 00:22:06,780 ¿Vale? 446 00:22:06,780 --> 00:22:09,600 O sea, esta es la aplicación de verdad. 447 00:22:09,600 --> 00:22:11,760 Esta de aquí. 448 00:22:11,760 --> 00:22:13,720 El objeto app está aquí. 449 00:22:13,720 --> 00:22:15,520 Joder, no se ve nada. 450 00:22:15,520 --> 00:22:16,020 Vale. 451 00:22:27,480 --> 00:22:28,800 Vale, esto es lo que yo tengo. 452 00:22:28,800 --> 00:22:30,960 Y este es store de i que está aquí. 453 00:22:41,720 --> 00:22:45,400 Bueno, esta es más o menos la situación. 454 00:22:45,400 --> 00:22:48,160 Esta es store de i que en realidad es una dirección de 455 00:22:48,160 --> 00:22:50,520 memoria, es una dirección de memoria al verdadero objeto. 456 00:22:50,520 --> 00:22:51,320 Eso está claro, ¿no? 457 00:22:51,320 --> 00:22:53,320 Es lo que hemos visto siempre. 458 00:22:53,320 --> 00:22:55,040 Esto es una ray de objetos, por lo tanto, 459 00:22:55,040 --> 00:22:58,360 es una ray de direcciones de memoria donde cada una es una 460 00:22:58,400 --> 00:23:00,600 dirección de memoria al objeto. 461 00:23:00,600 --> 00:23:01,600 Vale. 462 00:23:01,600 --> 00:23:06,720 Ahora, ¿qué estoy haciendo cuando yo hago esto de aquí? 463 00:23:06,720 --> 00:23:07,680 Esta línea. 464 00:23:07,680 --> 00:23:09,280 Cuando yo hago esta línea. 465 00:23:09,280 --> 00:23:14,960 Cuando yo hago esta línea, estoy creando una variable a. 466 00:23:14,960 --> 00:23:16,320 Eso está claro. 467 00:23:16,320 --> 00:23:17,200 Una variable a. 468 00:23:20,280 --> 00:23:21,920 Hasta ahí está claro. 469 00:23:21,920 --> 00:23:25,160 Estoy creando una variable. 470 00:23:25,160 --> 00:23:27,840 Estoy creando una dirección adicional. 471 00:23:27,840 --> 00:23:28,840 Estoy creando esto. 472 00:23:31,760 --> 00:23:34,560 Claro, jolines, que yo quiero una cosa grande ahí. 473 00:23:34,560 --> 00:23:37,200 Leches, qué torpe. 474 00:23:37,200 --> 00:23:39,920 A ver. 475 00:23:39,920 --> 00:23:43,000 Ala, y ahora pincho. 476 00:23:43,000 --> 00:23:45,360 Ahora, sí. 477 00:23:45,360 --> 00:23:48,160 Bueno, vale. 478 00:23:48,160 --> 00:23:51,280 Vale, entonces, claro. 479 00:23:51,280 --> 00:23:55,960 Entonces, ¿qué estoy haciendo con A, P, A? 480 00:23:55,960 --> 00:23:58,840 Estoy creando una dirección de memoria a la que le estoy 481 00:23:58,840 --> 00:24:01,480 asignando esto que hay aquí. 482 00:24:01,480 --> 00:24:03,800 Entonces, como le estoy asignando esto que hay aquí, 483 00:24:03,800 --> 00:24:07,720 esta dirección de memoria me está apuntando aquí también. 484 00:24:07,720 --> 00:24:11,640 Con lo cual, me da igual hacer retuneStoreDei, 485 00:24:11,640 --> 00:24:14,520 retuneA, como si me hago 200 aún. 486 00:24:14,520 --> 00:24:15,720 ¿Me da lo mismo? 487 00:24:15,720 --> 00:24:17,520 No estoy devolviendo ninguna copia. 488 00:24:17,520 --> 00:24:19,920 Aquí nadie ha creado ninguna copia de nada. 489 00:24:19,920 --> 00:24:22,760 Aquí sigue habiendo un único objeto. 490 00:24:22,760 --> 00:24:24,600 Me da igual hacer retuneStoreDei, 491 00:24:24,600 --> 00:24:26,400 que hacer retuneA, que hacer lo que sea, 492 00:24:26,400 --> 00:24:28,920 porque sigo devolviendo el mismo objeto. 493 00:24:28,920 --> 00:24:31,120 No he creado ninguna copia. 494 00:24:31,120 --> 00:24:32,280 Y no es eso lo que me piden. 495 00:24:32,280 --> 00:24:35,800 Lo que me piden es, no, haz una copia de este, 496 00:24:35,800 --> 00:24:39,320 haz una copia de este y devuelve la copia. 497 00:24:39,320 --> 00:24:41,960 Es lo que me están diciendo. 498 00:24:41,960 --> 00:24:44,280 Lo que me están diciendo que haga es, no hagas esto, 499 00:24:44,280 --> 00:24:47,320 haz una copia del objeto otra. 500 00:24:47,320 --> 00:24:49,200 ¿Y qué significa una copia? 501 00:24:49,200 --> 00:24:52,360 Una copia significa que tenga los mismos valores. 502 00:24:52,360 --> 00:24:56,560 Lo que viene a ser un clon, que es distinto. 503 00:24:56,560 --> 00:24:58,400 Es distinto. 504 00:24:58,400 --> 00:24:59,680 Esto sí es una copia. 505 00:24:59,680 --> 00:25:02,360 Otro objeto que tiene los mismos valores. 506 00:25:02,360 --> 00:25:03,360 Es una copia. 507 00:25:03,360 --> 00:25:06,080 Y te dicen, hazme una copia, un clon, 508 00:25:06,080 --> 00:25:11,000 algo que tenga los mismos valores y devuélveme una 509 00:25:11,000 --> 00:25:13,720 dirección a esa. 510 00:25:13,720 --> 00:25:14,600 Eso es lo que me dice. 511 00:25:14,600 --> 00:25:17,400 Dice, oye, no, devuélveme esto, una dirección a esta, la copia. 512 00:25:17,400 --> 00:25:19,200 No me devuelvas una dirección al mismo. 513 00:25:19,200 --> 00:25:21,360 Devuélveme esto. 514 00:25:21,360 --> 00:25:24,680 Con la idea de que lo que está instalado es una cosa y lo que 515 00:25:24,680 --> 00:25:27,480 tienes todo el dígito es otra. 516 00:25:27,480 --> 00:25:29,720 Y ya van por libre, ya van por libre. 517 00:25:34,920 --> 00:25:37,720 Bueno, pues, entonces, para hacer esto, 518 00:25:37,720 --> 00:25:40,520 tenemos entonces que crear un objeto nuevo, 519 00:25:40,520 --> 00:25:44,840 instanciarlo de nuevas, copiar las propiedades y ahora ya sí 520 00:25:44,840 --> 00:25:46,520 devolver eso. 521 00:25:46,520 --> 00:25:48,280 Entonces, para hacer esto que hemos dicho, 522 00:25:48,280 --> 00:25:51,640 que es ya crear una copia de verdad y devolver la dirección 523 00:25:51,640 --> 00:25:54,600 de esa copia, tendremos que hacer ya, pues, 524 00:25:54,600 --> 00:25:57,240 en lugar de esto de aquí que tampoco nos vale, 525 00:25:57,240 --> 00:26:02,240 todo esto fuera, pues, tendremos que hacer. 526 00:26:02,240 --> 00:26:05,000 Vamos a crear un objeto app, pero nuevo enterito, 527 00:26:05,000 --> 00:26:07,800 una instancia nueva. 528 00:26:07,800 --> 00:26:12,320 App de a igual a new app. 529 00:26:12,320 --> 00:26:15,120 Y qué bien que tengamos el constructor sin parámetros. 530 00:26:15,840 --> 00:26:20,800 Con esto ya me he hecho este cuadradito. 531 00:26:20,800 --> 00:26:22,600 Ya me he hecho este cuadradito. 532 00:26:22,600 --> 00:26:23,520 Ya me he hecho esto. 533 00:26:23,520 --> 00:26:25,600 Ahora ya sí que tengo un objeto distinto. 534 00:26:25,600 --> 00:26:26,800 Porque he hecho un new. 535 00:26:26,800 --> 00:26:28,640 He hecho un new e instanciado uno distinto. 536 00:26:28,640 --> 00:26:30,880 Ya sí que tengo esto. 537 00:26:30,880 --> 00:26:32,320 Ahora, ¿qué me falta? 538 00:26:32,320 --> 00:26:34,880 Copiarle las propiedades, copiárselas. 539 00:26:34,880 --> 00:26:36,840 Es lo único que me falta, copiárselas. 540 00:26:36,840 --> 00:26:38,720 Y ya tendré una copia, un clon. 541 00:26:41,680 --> 00:26:44,560 Vale, pues, entonces, ahora ya se tratará simplemente, 542 00:26:44,560 --> 00:26:46,680 vamos a setearle las propiedades. 543 00:26:46,680 --> 00:26:55,120 El nombre, pues, que sea story de i punto get nombre. 544 00:26:58,760 --> 00:27:03,920 Y lo mismo para la dirección y lo mismo para la dirección. 545 00:27:03,920 --> 00:27:10,800 Para la versión y lo mismo para el tamaño. 546 00:27:10,800 --> 00:27:19,720 Set versión, story de i punto get versión. 547 00:27:19,720 --> 00:27:21,240 Y lo mismo para el tamaño. 548 00:27:21,240 --> 00:27:35,280 Apunto set tamaño, story de i punto get tamaño. 549 00:27:35,280 --> 00:27:39,840 Esto sí es otro objeto diferente, pero con los mismos datos. 550 00:27:39,880 --> 00:27:43,400 Esto sí es un clon. 551 00:27:43,400 --> 00:27:45,080 Y ahora nos falta devolverlo, obviamente. 552 00:27:45,080 --> 00:27:47,720 Si no lo devuelvo, pues, no hemos hecho nada. 553 00:27:52,840 --> 00:27:53,600 Esto sí. 554 00:27:53,600 --> 00:27:56,520 Entonces, esto no devuelve una copia. 555 00:27:56,520 --> 00:27:58,200 Devuelve una dirección del mismo objeto. 556 00:27:58,200 --> 00:27:59,920 Esto tampoco. 557 00:27:59,920 --> 00:28:01,720 Devuelve una dirección del mismo objeto. 558 00:28:01,720 --> 00:28:02,920 Esto sí. 559 00:28:02,920 --> 00:28:05,360 Ha creado un objeto distinto. 560 00:28:05,360 --> 00:28:07,880 Distinto, que es este. 561 00:28:07,880 --> 00:28:09,920 ¿Y lo que está arriba qué es? 562 00:28:09,920 --> 00:28:11,160 ¿Qué es lo que está arriba? 563 00:28:11,160 --> 00:28:14,120 ¿Vuelve el new? 564 00:28:14,120 --> 00:28:16,000 ¿El bloque qué es? 565 00:28:16,000 --> 00:28:18,160 Esta es a, la dirección de memoria, a, esta es a. 566 00:28:18,160 --> 00:28:19,840 Ah, vale, pero eso es lo que has creado. 567 00:28:19,840 --> 00:28:21,840 Claro, claro, esto es a. 568 00:28:21,840 --> 00:28:25,680 Bueno, a ver, pero es que, a ver, espera. 569 00:28:25,680 --> 00:28:27,880 Lo que tú has creado con el new, vamos a ver. 570 00:28:27,880 --> 00:28:31,480 Esta línea, espera, espera, calma. 571 00:28:31,480 --> 00:28:32,520 Escúchame. 572 00:28:32,520 --> 00:28:34,280 Silencio. 573 00:28:34,320 --> 00:28:37,680 Esta línea tiene dos partes, obviamente. 574 00:28:37,680 --> 00:28:41,640 La parte de declaración, la a, y la parte de distanciación. 575 00:28:41,640 --> 00:28:45,840 Entonces, con el new, lo que se crea es esto. 576 00:28:45,840 --> 00:28:48,680 Y lo que tú estás devolviendo es la dirección. 577 00:28:48,680 --> 00:28:51,240 Claro, pero es que la dirección te apunta al objeto. 578 00:28:51,240 --> 00:28:53,800 No, no, no, no, no, no, no, no, no, no, no, no, no, no, no. 579 00:28:53,800 --> 00:28:55,440 Vale. 580 00:28:55,440 --> 00:28:57,960 ¿Ha quedado claro igualmente? 581 00:28:57,960 --> 00:29:00,000 ¿Sí? 582 00:29:00,000 --> 00:29:00,720 Eres muy. 583 00:29:00,720 --> 00:29:01,220 No, no. 584 00:29:05,080 --> 00:29:08,000 ¿Qué más te voy a decir? 585 00:29:08,000 --> 00:29:09,920 Bueno, lo importante es que haya quedado claro. 586 00:29:09,920 --> 00:29:10,960 ¿Vale? 587 00:29:10,960 --> 00:29:11,480 ¿Está claro? 588 00:29:14,520 --> 00:29:16,360 Bueno, pues, entonces, devolvemos el objeto. 589 00:29:16,360 --> 00:29:19,240 Entonces, lo que tenéis es que, obviamente, 590 00:29:19,240 --> 00:29:22,400 manejar y entender que direcciones de memoria, 591 00:29:22,400 --> 00:29:26,080 objetos, son cosas que van unidas. 592 00:29:26,080 --> 00:29:26,560 ¿Vale? 593 00:29:26,560 --> 00:29:28,920 Entonces, manejamos indistintamente instancia, 594 00:29:28,920 --> 00:29:30,440 dirección de memoria, objeto. 595 00:29:30,440 --> 00:29:31,280 ¿Vale? 596 00:29:31,280 --> 00:29:33,880 Entonces, esto sí es una copia. 597 00:29:33,880 --> 00:29:38,120 Y es importante, es importante distinguirlo porque muchas 598 00:29:38,120 --> 00:29:43,040 veces necesitamos trabajar con copias de objetos en lugar de 599 00:29:43,040 --> 00:29:44,080 con el propio objeto. 600 00:29:44,080 --> 00:29:45,160 Lo necesitamos. 601 00:29:45,160 --> 00:29:46,080 Y no nos damos cuenta. 602 00:29:46,080 --> 00:29:48,200 Creemos que estamos trabajando con copias. 603 00:29:48,200 --> 00:29:50,440 Hacemos cosas con esos objetos. 604 00:29:50,440 --> 00:29:53,840 Y, en realidad, estamos modificando el otro. 605 00:29:53,840 --> 00:29:56,600 Entonces, siempre hay que tener muy claro estas cosas. 606 00:29:56,600 --> 00:29:57,560 ¿Vale? 607 00:29:57,560 --> 00:29:58,800 Simplemente por eso. 608 00:29:58,800 --> 00:30:01,640 Porque hay situaciones en las cuales yo quiero copias, 609 00:30:01,640 --> 00:30:04,720 no quiero el propio objeto. 610 00:30:04,720 --> 00:30:07,280 Porque quiero modificar solo en una situación, 611 00:30:07,280 --> 00:30:08,640 no quiero modificarla en todas. 612 00:30:08,640 --> 00:30:11,480 Entonces, me hago una copia para esa situación, etcétera, 613 00:30:11,480 --> 00:30:12,160 etcétera. 614 00:30:12,160 --> 00:30:13,480 ¿Vale? 615 00:30:13,480 --> 00:30:14,680 ¿Vale? 616 00:30:14,680 --> 00:30:17,760 Entonces, esto es hacer un clon que lo hemos hecho a mano. 617 00:30:17,760 --> 00:30:19,960 Pero hay una interfaz clonable que ahora mismo todavía no 618 00:30:19,960 --> 00:30:23,040 podemos entender para hacer clones precisamente por eso. 619 00:30:23,040 --> 00:30:25,520 Porque esta es una situación que podemos necesitar. 620 00:30:25,520 --> 00:30:28,040 ¿Vale? 621 00:30:28,040 --> 00:30:29,760 Vale. 622 00:30:29,760 --> 00:30:31,440 A ver, ¿qué más métodos tenemos? 623 00:30:36,760 --> 00:30:39,680 Venga, ¿queréis que lo dejemos aquí? 624 00:30:39,680 --> 00:30:42,200 Venga, pues dejémoslo aquí.