Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 26-01-24 - 3 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
¿Vale?
00:00:00
Entonces, el objetivo de este constructor, por tanto,
00:00:03
como casi todos los constructores,
00:00:05
es recibir datos y con esos datos inicializar las propiedades
00:00:07
de la clase.
00:00:12
Las propiedades de la clase en este caso es un array.
00:00:14
Pues, entonces, tiene que recibir datos para inicializar
00:00:16
ese array.
00:00:19
¿Vale?
00:00:20
¿Qué datos recibe el constructor?
00:00:21
Recibe una cadena.
00:00:23
Esta, por ejemplo.
00:00:26
Esta.
00:00:28
Y ahora, el problema es que como recibe los datos en una única
00:00:30
cadena, los tengo yo que sacar para inicializar ese array.
00:00:32
Bueno, pues, es lo que hemos hecho.
00:00:36
Hemos sacado de esa cadena, hemos sacado los datos
00:00:39
separados por punto y coma.
00:00:46
Cada dato es una app.
00:00:48
Pues, ahora ya me creo el store, que es el array de apps con el
00:00:50
mismo tamaño que los datos que yo he sacado de mi cadena,
00:00:53
el mismo tamaño.
00:00:56
Y ahora ya recorro cada una de las subcadenas que son cada app,
00:00:58
las recorro, saco de ellas los 3 datos,
00:01:02
saco de ellas los 3 datos.
00:01:07
Y ya que tengo los 3 datos, instancio el objeto y a la
00:01:10
posición del almacén correspondiente,
00:01:12
a la posición correspondiente.
00:01:14
Bueno, pues, ya ha hecho el constructor.
00:01:16
Ya ha hecho el constructor que crea un almacén de aplicaciones
00:01:18
con las aplicaciones que yo le doy.
00:01:21
Nombre, versión y tamaño.
00:01:23
Vale.
00:01:25
Bueno, pues, ya tenemos el constructor del almacén de
00:01:26
aplicaciones que está en el móvil, se supone.
00:01:31
El almacén de aplicaciones.
00:01:34
Bueno, pues, venga, ¿qué más cosas hay que hacer en esta
00:01:36
clase?
00:01:40
Pues, lo que me diga el enunciado,
00:01:41
porque el enunciado ya ha hecho un diseño, ya lo ha hecho.
00:01:42
Pues, yo lo respeto.
00:01:45
Vale, ya hemos hecho.
00:01:48
Bueno, el constructor ya está.
00:01:49
Y ahora tiene más métodos.
00:01:52
Tiene todos estos.
00:01:55
Tiene install, change version, lista de aplicaciones y check
00:01:57
update.
00:02:00
Tiene todo eso.
00:02:02
¿Vale?
00:02:03
Pues, hay que hacer esos 4 métodos.
00:02:04
Vale.
00:02:08
Vamos a hacer el primer método.
00:02:09
Install.
00:02:11
Install dice que recibe el nombre de una aplicación y
00:02:12
devuelve una copia del objeto A que está en ese almacén
00:02:18
correspondiente.
00:02:23
A ver, la idea de esto es, el teléfono, el terminal,
00:02:26
el teléfono, tiene ahí todas las aplicaciones que puede usar.
00:02:29
Todas las que puede usar.
00:02:35
Pero son similares en todas instaladas.
00:02:37
Son las que puede usar.
00:02:39
Entonces, cuando le damos a instalar a una de ellas a
00:02:40
través de este método, cuando le damos a instalar,
00:02:43
coge una y la instala, pero hace una copia.
00:02:45
Entonces, la que se instala y luego se ejecutará es una
00:02:49
copia.
00:02:51
¿Vale?
00:02:52
Y el almacén tiene sus propias aplicaciones,
00:02:53
tiene las aplicaciones.
00:02:55
Pero hace una copia, hace una copia del objeto aplicación,
00:02:58
hace una copia y esa es la que se queda instalada y
00:03:02
ejecutada.
00:03:05
De ahí lo de devuelve una copia.
00:03:06
Vale, vamos a intentar entender esto bien.
00:03:09
Venga, pues, vamos a hacer el método de instalar.
00:03:12
Que tiene solo una línea o prácticamente,
00:03:15
pero luego tiene su gracia entenderlo, que es la idea.
00:03:18
Pues, venga, método install de la aplicación esta.
00:03:21
Este es el auxiliar, lo dejo ahí abajo por si acaso lo uso.
00:03:26
El método install sí que se va a usar desde fuera, entonces.
00:03:30
Dice, ¿qué dice?
00:03:34
Devuelve una copia de la aplicación cuyo nombre se ha
00:03:37
pasado por parámetro, porque se ha pasado un string.
00:03:42
Pues, venga, install.
00:03:46
Entonces, el valor de retorno se queda aquí.
00:03:49
El método install recibe un nombrecito, nombre app.
00:03:54
Y se supone que con este nombre que recibe,
00:04:03
buscará en el almacén que está aquí arriba,
00:04:07
buscará el almacén.
00:04:10
Por eso no hay que pasárselo al método.
00:04:11
Buscará el almacén y devolverá una copia de la aplicación que
00:04:14
tenga ese nombre.
00:04:18
Luego, el valor de retorno de este método, ¿cuál será?
00:04:19
Que tengo que poner ahí.
00:04:22
Exactamente, app, ¿vale?
00:04:25
Porque va a devolver un objeto a aplicación.
00:04:28
Entonces, uno podría, a lo mejor, plantearse hacer esto.
00:04:32
Vamos a buscar la aplicación que se llama así en todo el
00:04:40
array.
00:04:42
Vamos a recorrer el array.
00:04:46
Vamos a recorrerlo y comparamos nombres.
00:04:56
Si store de i, que es la aplicación que está en la
00:05:00
posición i del almacén, su nombre resulta que es igual al
00:05:04
nombrecito que me han pasado, uno podría decir, ah,
00:05:14
ya la he encontrado.
00:05:19
Y podría decir, pues, venga, devuelvo esa aplicación.
00:05:20
¿Vale?
00:05:32
Bueno, ahora voy haciendo preguntas.
00:05:34
Primero, digo lo que he escrito.
00:05:41
Tengo el almacén de objetos app, que es una propiedad de la
00:05:44
clase en la que estoy, el almacén de objetos app.
00:05:47
Lo recorro para cada aplicación que está en ese array.
00:05:49
Si su nombre es igual al que me han pasado,
00:05:53
devuelvo esa aplicación enterita.
00:05:56
Devuelvo esa aplicación enterita.
00:05:59
Bueno, eso es lo que yo he escrito ahí.
00:06:01
Vale, primera pregunta, ¿qué hago?
00:06:05
¿Por qué el compilador me lo marca en rojo?
00:06:08
No lo miréis y me lo leáis.
00:06:10
¿Por qué creéis que el compilador me marca en rojo un
00:06:14
error de compilación ahí?
00:06:17
No, al fin y al cabo, el tipo de dato está bien.
00:06:19
Bueno, lo que creáis.
00:06:21
¿Con qué creéis que está relacionado que el compilador
00:06:32
me ponga eso rojo?
00:06:34
Vale, vamos dando pistas.
00:06:44
El método tiene que devolver un objeto app sí o sí.
00:06:47
Eso está claro, ¿no?
00:06:49
Porque yo he puesto aquí app, tiene que devolver un objeto
00:06:51
app sí o sí.
00:06:53
Eso está claro.
00:06:54
Vale.
00:06:55
¿Este método va a devolver un objeto app sí o sí?
00:06:57
No.
00:07:05
Explícate más.
00:07:07
Explícate más.
00:07:13
Sí, la respuesta es no, efectivamente.
00:07:14
O sea, la respuesta es no siempre.
00:07:23
A ver, devolverá un objeto app si esto es true alguna vez.
00:07:26
Pero imaginaos que no hay ninguna aplicación en almacén
00:07:32
cuyo nombre sea igual que este, que no hay ninguna.
00:07:35
Entonces, jamás entra en el if, saldría del for, por aquí,
00:07:37
saldría y nunca jamás habría entrado aquí.
00:07:41
Pues es lo que dice el compilador.
00:07:45
Te dice, oye, perdona, que hay alguna aplicación aquí cuyo
00:07:46
nombre coincide.
00:07:50
Genial, no te digo nada, no te pongo pegas.
00:07:51
Vas a devolverme el objeto app.
00:07:53
Pero te dice, oye, ¿qué pasa si el for ha terminado con lo
00:07:55
cual he saltado este punto y yo jamás entré en el if?
00:08:00
Te dice, entonces, ¿qué?
00:08:03
Me tienes que devolver un app sí o sí.
00:08:04
Claro, siempre tiene que devolver, si yo aquí pongo app,
00:08:07
siempre tiene que devolver un objeto app, siempre.
00:08:09
Pase lo que pase.
00:08:13
Y con lo que yo he escrito, si este if nunca es true,
00:08:15
el for terminaría, seguiríamos por aquí y ahí no hay ningún
00:08:20
retún que devuelva nada.
00:08:23
Entonces, es lo que me dice el compilador, me dice, oye,
00:08:25
siempre pase lo que pase, se cumple la condición alguna vez,
00:08:28
no se cumple nunca.
00:08:31
Siempre tienes que devolver un objeto app, ¿vale?
00:08:32
Entendéis por qué lo pone rojo, ¿no?
00:08:37
Bueno, pues, entonces, yo, si he llegado a este punto sin haber
00:08:41
salido aquí por el retún, si he llegado a este punto,
00:08:50
es porque esto nunca fue true.
00:08:53
Pues, tengo que darle algo, tengo que darle algo para que
00:08:55
se calle.
00:08:57
Tengo que darle un objeto app, algo.
00:08:57
¿Qué sería natural devolverle ahí?
00:09:00
¿Un retún tengo que hacerle?
00:09:01
INTERLOCUTOR 1.
00:09:02
Haces que primero retún y esto sea un null y luego devuelves.
00:09:03
INTERLOCUTOR 2.
00:09:06
Ah, no, esto no lo puedo tocar, esto tiene los apps.
00:09:07
A ver, no os compliquéis la vida.
00:09:09
Le digo, pues, si no hay ninguna, ¿yo qué te voy a hacer,
00:09:11
hijo mío?
00:09:14
Le digo, es que no he encontrado ninguna que se llame así,
00:09:15
pues, te devuelvo una app null, ya está, ¿no?
00:09:18
Entonces, este método, recorre el almacén, va uno por uno.
00:09:26
¿Que tiene la suerte de encontrar una aplicación cuyo
00:09:31
nombre sea igual a nombre?
00:09:34
Genial.
00:09:36
La devuelve, lo de la copia y todo eso,
00:09:36
ahora ya nos metemos, devuelve esa aplicación y todo termina,
00:09:39
se acabó.
00:09:42
¿Que no ha tenido la suerte, no ha tenido la suerte de
00:09:44
encontrar una aplicación cuyo nombre sea igual al que me han
00:09:47
pasado?
00:09:49
El for ha acabado y el método sigue, el método sigue.
00:09:50
¿Qué hace?
00:09:54
Le digo, pues, chico, no tengo nada que devolverte,
00:09:55
no tengo nada que devolverte, pero un objeto hay que
00:09:57
devolver, un objeto hay que devolver sí o sí,
00:09:59
porque yo me he comprometido poniendo ahí app.
00:10:01
Pues, te devuelvo null, ¿qué te voy a devolver?
00:10:03
No voy a inventar una app cualquiera,
00:10:05
porque te estaría mintiendo.
00:10:07
Si yo me invento una app y te la devuelvo,
00:10:08
tú te vas a creer que esa app es la que estaba en el almacén.
00:10:10
No te puedo mentir.
00:10:14
Pues, la forma de expresar esa idea de que no estaba la
00:10:16
aplicación es devolverle un null.
00:10:20
A devolverle un null, porque un null es un objeto también.
00:10:22
Entonces, siempre que hay que devolver un objeto,
00:10:27
se puede devolver null, porque un null es un objeto.
00:10:29
Lo que pasa es que es un objeto null.
00:10:31
Si este método devolviera string,
00:10:35
returnNull también sería válido, porque null es un objeto.
00:10:37
Null lo puedo devolver siempre que necesite yo devolver un
00:10:42
objeto.
00:10:45
Pero, claro, tengo que devolver null cuando tenga sentido dentro
00:10:46
de lo que yo quiero expresar.
00:10:49
Y aquí está claro, una app tengo que devolver.
00:10:52
Si entro por este camino, la voy a devolver.
00:10:55
Genial.
00:10:57
Pero si no entro por aquí y llego aquí,
00:10:58
pues tengo que devolver null.
00:11:01
Repito, porque la alternativa si no sería construirme yo una app
00:11:04
y devolver esa.
00:11:07
Pero es que entonces estoy confundiendo.
00:11:09
Parecería que esa app que me construí y devuelvo es la del
00:11:11
almacén.
00:11:14
Y no, no había ninguna en el almacén.
00:11:14
Vale, entonces devuelvo null.
00:11:18
Esta sería la forma de hacerlo.
00:11:19
Vale, vale, ahora.
00:11:23
Vale, entonces, cuando uno hace métodos de clases,
00:11:26
tiene que documentar estas cosas y decir, oye,
00:11:30
este método devuelve null si no encuentra aplicación.
00:11:34
Para que el que lo use sepa que se puede encontrar un null si
00:11:38
no lo encuentra.
00:11:42
Y esté prevenido el de los posibles null pointer excepción
00:11:44
cuando el use ese método, etcétera.
00:11:47
Entonces, vale.
00:11:50
Pues, hombre, lo ideal, si hacemos bien las cosas,
00:11:51
es documentar esto.
00:11:54
Nombre de la aplicación a buscar en el array.
00:11:57
¿Qué devuelve?
00:12:07
Con lo de la copia nos metemos ahora.
00:12:10
Voy a poner lo que devuelve de verdad,
00:12:13
aunque tal y como lo tenemos no es eso.
00:12:15
Pero, bueno.
00:12:17
Una copia de la aplicación del, buscar en él,
00:12:19
voy a llamarlo store para que quede claro.
00:12:27
Una copia de la aplicación del store.
00:12:31
O null, o null si no la encuentra.
00:12:41
Vale, esto ya está bien documentado.
00:12:48
Con esto podríamos generar el jabado,
00:12:51
como generamos el otro día.
00:12:52
Si lo enlazamos con el eclipse, que es lo que el otro día se
00:12:54
quedó por hacer, por eso no veíamos la ayuda en línea.
00:12:57
Si lo enlazamos con el eclipse o exportamos el puente, vamos.
00:13:00
El que desarrolle con el eclipse verá la ayuda en línea y verá
00:13:03
esto que hemos explicado y dirá, ah, qué bien, vale, estupendo.
00:13:06
Cuidado, voy a usar install, pero cuidado,
00:13:10
porque puede ser null si no lo encuentra, vale.
00:13:12
Si no, hombre, si no documentamos las cosas,
00:13:15
el que use luego nuestra aplicación esta para su móvil,
00:13:18
pues, a lo mejor, luego no va a poder desarrollar sobre ella.
00:13:23
Vale, bueno, entonces, esta primera versión de método que
00:13:27
hemos hecho no es exactamente la que nos piden,
00:13:30
porque esta, ¿qué es lo que hace?
00:13:33
Devuelve directamente el objeto del array.
00:13:35
Devuelve directamente, no una copia.
00:13:38
Es decir, vámonos al paint ese.
00:13:40
Estupendo.
00:13:45
Vale, a ver, este es nuestro array de aplicaciones.
00:13:56
La propiedad de store está de aquí.
00:14:00
Jolines, vamos a ver, que este, ah, está aquí.
00:14:01
Es que este paint no lo he usado nunca, creo.
00:14:17
De verdad, estoy imbécil.
00:14:24
Ah, sí, vale.
00:14:26
Entonces, ahora, bueno.
00:14:28
Joe, bueno, vale, da igual.
00:14:43
Vale, esta es nuestra propiedad de store de la clase,
00:14:46
la que tiene las aplicaciones, que tiene unas cuantas.
00:14:49
Las que se ha inicializado en el constructor.
00:14:53
Tiene unas cuantas.
00:14:55
Esto.
00:14:59
Vale, ¿qué hace mi método install?
00:15:00
A ver si consigo hacerlo más grande.
00:15:03
¿Qué hace el método install cuando yo le paso un nombre?
00:15:11
¿Qué hace este método?
00:15:21
Bueno, pues, tal y como yo lo he programado,
00:15:22
este método empieza a recorrer el array.
00:15:24
Y cuando encuentra una aplicación aquí en el array,
00:15:27
en la posición que sea, cuyo nombre es el nombre este que
00:15:31
me han pasado, cuando lo encuentra,
00:15:34
devuelve directamente esto.
00:15:37
Directamente la aplicación es la que devuelve con orden retorno.
00:15:40
Directamente este objeto.
00:15:45
¿Veis?
00:15:48
Devuelve directamente ese objeto.
00:15:49
Que ya sabemos nosotros, por otra parte,
00:15:53
que es una dirección de memoria.
00:15:55
Ya lo sabemos, que es una dirección de memoria.
00:15:57
Esto, en realidad, como es un objeto aplicación,
00:15:59
esto sabemos que es una dirección de memoria hacia
00:16:01
donde está la app, en realidad.
00:16:04
Pero el retune es directamente de store de i, directamente.
00:16:06
Es el retune de eso.
00:16:09
Luego, no está devolviendo una copia.
00:16:12
Entonces, esto se supone que trata de simular que, pues,
00:16:16
tú lanzas una aplicación en el móvil y se está ejecutando,
00:16:20
que es después de hacer el install.
00:16:24
Pero lo que tú realmente estás lanzando y ejecutando es una
00:16:27
copia del software de base.
00:16:30
Entonces, si ese software que está conectado a la Play Store
00:16:33
o lo que sea, cambia de versión, el tuyo que se está ejecutando
00:16:36
no cambia, porque es una copia, ¿verdad?
00:16:39
No cambia.
00:16:41
Entonces, si tú quieres actualizar a la versión,
00:16:42
pues, tendrías que actualizarle y volver a instalar la nueva.
00:16:44
Es decir, estos serían tus softwares posibles que están
00:16:48
ahí, pues, en el firmware o donde sea.
00:16:52
Y después del install te haces una copia,
00:16:55
que es la que se ejecuta.
00:16:57
Es lo que intentas simular.
00:16:59
Bueno, pues, el install tiene que devolver una copia de esto,
00:17:01
no esto, una copia, ¿vale?
00:17:05
Vale, pues, entonces, vamos a modificarlo para que vuelva una
00:17:08
copia.
00:17:13
A ver si esto que hago os gusta.
00:17:15
Venga, a ver si esto que hago os gusta.
00:17:18
INTERLOCUTOR 1. Entonces, necesitas un método para
00:17:20
instalarla y es lo que vas a usar.
00:17:22
INTERLOCUTORA 1. ¿Perdón?
00:17:23
INTERLOCUTOR 1. Necesitas un método para instalarla.
00:17:24
INTERLOCUTOR 1. Y es lo que vas a usar.
00:17:27
INTERLOCUTORA 1. Sí, o sea, este install la pone en memoria,
00:17:28
pero no está lanzando a ejecutar.
00:17:30
Este install sería como cargarla en memoria, ¿vale?
00:17:33
Como cargarla, ¿vale?
00:17:35
Pero en cualquier caso cargas una copia, ¿vale?
00:17:36
Eso sí, cargas una copia.
00:17:39
Vale, entonces, este install lo cargas en la memoria RAM,
00:17:42
pero una copia de lo que tienes tú en tu,
00:17:46
lo cargas en la memoria RAM.
00:17:48
Vale, vamos a ver si ahora esto os gusta como para devolver,
00:17:50
como idea de devolver copia.
00:17:53
INTERLOCUTOR 1. Si quieres, me refiero a que cuando no la
00:17:57
tienes, la abres y la buscas a instalar.
00:18:00
Lo primero que te instala es la app que tengas en la RAM.
00:18:02
¿Listo?
00:18:07
La abres y nada.
00:18:09
INTERLOCUTORA 1. Sí, y luego, sí, la parte de ejecutar.
00:18:09
INTERLOCUTOR 1. Sí, después, cuando ya tengas instalada.
00:18:12
INTERLOCUTORA 1. La ejecutas.
00:18:14
Sí, sí, sí, pero esa parte todavía no nos han pedido,
00:18:15
sí, pero esa parte, tenemos un método de ejecutar al que
00:18:17
podríamos llamar, pero no nos han pedido que la ejecutemos.
00:18:19
O sea, nos han dicho, instale solamente para cargarla.
00:18:21
INTERLOCUTOR 1. ¿Y para qué vamos a hacer la copia?
00:18:24
INTERLOCUTORA 1. Bueno, porque funciona así.
00:18:27
Porque lo que tienes que simular es que lo que tienes en memoria
00:18:29
RAM no es directamente, físicamente,
00:18:33
los bits que tienes en el disco duro.
00:18:36
Siempre son copias.
00:18:38
Es lo que intentas simular.
00:18:39
Pues, eso es una copia.
00:18:41
O sea, no es lo mismo.
00:18:43
Es como, a ver, tú tienes.
00:18:45
INTERLOCUTOR 1. Una vez ya la has instalado,
00:18:46
ya no tienes eso, estás creyendo.
00:18:48
INTERLOCUTORA 1. Claro.
00:18:49
A ver, espera, esto es como, vamos a ver.
00:18:50
Tú tienes en el disco duro tu ordenador,
00:18:53
tienes tu sistema operativo, está en el disco duro.
00:18:54
Está en el disco duro.
00:18:56
Cuando tú arrancas, esos bits del disco duro,
00:18:58
que son tu sistema operativo, esos bits se van a la RAM.
00:19:01
Vale, entonces, tú tienes bits en el disco duro y bits en la
00:19:05
RAM, que no son los mismos.
00:19:08
O sea, pueden tener el mismo contenido, pero son copias.
00:19:10
Vale, pues, esa es la idea.
00:19:13
Lo que vamos a simular es que lo que te devuelve el objeto es
00:19:14
una copia.
00:19:19
Ya está.
00:19:20
Si lo único que queremos simular es la idea de copia,
00:19:20
copia de objeto o mismo objeto.
00:19:23
Vale.
00:19:26
O sea, tú cuando tienes un sistema operativo ejecutándose,
00:19:26
lo estás ejecutando de lo que se ha cargado en la RAM.
00:19:29
No lo ejecutas desde el disco duro nunca, ¿verdad?
00:19:32
Pues, eso.
00:19:34
Lo único que quiero decir es que en el disco duro hay unos bits
00:19:35
y en la RAM hay otros.
00:19:40
Y para conseguir los que están en la RAM,
00:19:41
los has conseguido haciendo previamente una copia.
00:19:43
Ya está, nada más.
00:19:46
¿Vale?
00:19:47
¿Vale? ¿Ya está?
00:19:48
Bueno, pues, entonces, vamos a ver si os gusta cómo copia esta
00:19:49
solución que voy a hacer yo aquí.
00:19:56
Vale, pues, entonces, no queremos devolver esto, no.
00:20:00
Lo voy a comentar porque esto era lo que no nos gusta porque
00:20:04
esto no es copia.
00:20:06
Esto es el propio objeto.
00:20:08
Esto es lo que hemos quitado porque esto es el propio objeto,
00:20:10
el que yo devolvería con el retún.
00:20:18
¿Sería este mismo que yo devolvería?
00:20:20
No.
00:20:21
Queremos hacer una copia del objeto.
00:20:22
Vale.
00:20:24
Pues, voy a ver si esto os gusta como copia del objeto.
00:20:24
Vamos a ver.
00:20:28
Me hago un objeto a, a, no tengo ni variable, se llame a, ¿no?
00:20:29
A.
00:20:37
Y en el objeto a, guardo este.
00:20:38
Y ahora devuelvo a.
00:20:44
¿Vale?
00:20:51
¿Vale?
00:20:54
Es otra cosa que he hecho.
00:20:57
Me he hecho un objeto a.
00:20:59
En este objeto a, copio esto, lo que yo antes estaba devolviendo
00:21:00
directamente.
00:21:05
Copio esto.
00:21:06
Y ahora devuelvo a.
00:21:07
¿Vale?
00:21:09
Estamos pensando en objetos.
00:21:10
Vale.
00:21:14
Mi pregunta es, ¿ahora ya estoy realmente devolviendo una copia
00:21:15
del objeto o no?
00:21:19
¿No?
00:21:23
Estoy creando otra dirección.
00:21:30
No, no, no.
00:21:32
No estoy creando ningún objeto.
00:21:33
Estoy creando otra dirección de memoria que lleva al mismo
00:21:34
objeto.
00:21:37
¿Vale?
00:21:39
Esto es lo que estoy haciendo.
00:21:39
A ver.
00:21:41
Yo tengo aquí mi objeto, store de i,
00:21:43
vamos a suponer que es este de aquí,
00:21:46
el que yo quiero devolver.
00:21:49
Este de aquí.
00:21:50
¿Vale?
00:21:51
Entonces, con a, ¿qué estoy creando?
00:21:52
Con a estoy creando.
00:21:54
Entonces, este store de i, como es un objeto a,
00:21:56
esto en realidad es una dirección de memoria hacia el
00:22:00
verdadero objeto.
00:22:04
¿Vale?
00:22:06
O sea, esta es la aplicación de verdad.
00:22:06
Esta de aquí.
00:22:09
El objeto app está aquí.
00:22:11
Joder, no se ve nada.
00:22:13
Vale.
00:22:15
Vale, esto es lo que yo tengo.
00:22:27
Y este es store de i que está aquí.
00:22:28
Bueno, esta es más o menos la situación.
00:22:41
Esta es store de i que en realidad es una dirección de
00:22:45
memoria, es una dirección de memoria al verdadero objeto.
00:22:48
Eso está claro, ¿no?
00:22:50
Es lo que hemos visto siempre.
00:22:51
Esto es una ray de objetos, por lo tanto,
00:22:53
es una ray de direcciones de memoria donde cada una es una
00:22:55
dirección de memoria al objeto.
00:22:58
Vale.
00:23:00
Ahora, ¿qué estoy haciendo cuando yo hago esto de aquí?
00:23:01
Esta línea.
00:23:06
Cuando yo hago esta línea.
00:23:07
Cuando yo hago esta línea, estoy creando una variable a.
00:23:09
Eso está claro.
00:23:14
Una variable a.
00:23:16
Hasta ahí está claro.
00:23:20
Estoy creando una variable.
00:23:21
Estoy creando una dirección adicional.
00:23:25
Estoy creando esto.
00:23:27
Claro, jolines, que yo quiero una cosa grande ahí.
00:23:31
Leches, qué torpe.
00:23:34
A ver.
00:23:37
Ala, y ahora pincho.
00:23:39
Ahora, sí.
00:23:43
Bueno, vale.
00:23:45
Vale, entonces, claro.
00:23:48
Entonces, ¿qué estoy haciendo con A, P, A?
00:23:51
Estoy creando una dirección de memoria a la que le estoy
00:23:55
asignando esto que hay aquí.
00:23:58
Entonces, como le estoy asignando esto que hay aquí,
00:24:01
esta dirección de memoria me está apuntando aquí también.
00:24:03
Con lo cual, me da igual hacer retuneStoreDei,
00:24:07
retuneA, como si me hago 200 aún.
00:24:11
¿Me da lo mismo?
00:24:14
No estoy devolviendo ninguna copia.
00:24:15
Aquí nadie ha creado ninguna copia de nada.
00:24:17
Aquí sigue habiendo un único objeto.
00:24:19
Me da igual hacer retuneStoreDei,
00:24:22
que hacer retuneA, que hacer lo que sea,
00:24:24
porque sigo devolviendo el mismo objeto.
00:24:26
No he creado ninguna copia.
00:24:28
Y no es eso lo que me piden.
00:24:31
Lo que me piden es, no, haz una copia de este,
00:24:32
haz una copia de este y devuelve la copia.
00:24:35
Es lo que me están diciendo.
00:24:39
Lo que me están diciendo que haga es, no hagas esto,
00:24:41
haz una copia del objeto otra.
00:24:44
¿Y qué significa una copia?
00:24:47
Una copia significa que tenga los mismos valores.
00:24:49
Lo que viene a ser un clon, que es distinto.
00:24:52
Es distinto.
00:24:56
Esto sí es una copia.
00:24:58
Otro objeto que tiene los mismos valores.
00:24:59
Es una copia.
00:25:02
Y te dicen, hazme una copia, un clon,
00:25:03
algo que tenga los mismos valores y devuélveme una
00:25:06
dirección a esa.
00:25:11
Eso es lo que me dice.
00:25:13
Dice, oye, no, devuélveme esto, una dirección a esta, la copia.
00:25:14
No me devuelvas una dirección al mismo.
00:25:17
Devuélveme esto.
00:25:19
Con la idea de que lo que está instalado es una cosa y lo que
00:25:21
tienes todo el dígito es otra.
00:25:24
Y ya van por libre, ya van por libre.
00:25:27
Bueno, pues, entonces, para hacer esto,
00:25:34
tenemos entonces que crear un objeto nuevo,
00:25:37
instanciarlo de nuevas, copiar las propiedades y ahora ya sí
00:25:40
devolver eso.
00:25:44
Entonces, para hacer esto que hemos dicho,
00:25:46
que es ya crear una copia de verdad y devolver la dirección
00:25:48
de esa copia, tendremos que hacer ya, pues,
00:25:51
en lugar de esto de aquí que tampoco nos vale,
00:25:54
todo esto fuera, pues, tendremos que hacer.
00:25:57
Vamos a crear un objeto app, pero nuevo enterito,
00:26:02
una instancia nueva.
00:26:05
App de a igual a new app.
00:26:07
Y qué bien que tengamos el constructor sin parámetros.
00:26:12
Con esto ya me he hecho este cuadradito.
00:26:15
Ya me he hecho este cuadradito.
00:26:20
Ya me he hecho esto.
00:26:22
Ahora ya sí que tengo un objeto distinto.
00:26:23
Porque he hecho un new.
00:26:25
He hecho un new e instanciado uno distinto.
00:26:26
Ya sí que tengo esto.
00:26:28
Ahora, ¿qué me falta?
00:26:30
Copiarle las propiedades, copiárselas.
00:26:32
Es lo único que me falta, copiárselas.
00:26:34
Y ya tendré una copia, un clon.
00:26:36
Vale, pues, entonces, ahora ya se tratará simplemente,
00:26:41
vamos a setearle las propiedades.
00:26:44
El nombre, pues, que sea story de i punto get nombre.
00:26:46
Y lo mismo para la dirección y lo mismo para la dirección.
00:26:58
Para la versión y lo mismo para el tamaño.
00:27:03
Set versión, story de i punto get versión.
00:27:10
Y lo mismo para el tamaño.
00:27:19
Apunto set tamaño, story de i punto get tamaño.
00:27:21
Esto sí es otro objeto diferente, pero con los mismos datos.
00:27:35
Esto sí es un clon.
00:27:39
Y ahora nos falta devolverlo, obviamente.
00:27:43
Si no lo devuelvo, pues, no hemos hecho nada.
00:27:45
Esto sí.
00:27:52
Entonces, esto no devuelve una copia.
00:27:53
Devuelve una dirección del mismo objeto.
00:27:56
Esto tampoco.
00:27:58
Devuelve una dirección del mismo objeto.
00:27:59
Esto sí.
00:28:01
Ha creado un objeto distinto.
00:28:02
Distinto, que es este.
00:28:05
¿Y lo que está arriba qué es?
00:28:07
¿Qué es lo que está arriba?
00:28:09
¿Vuelve el new?
00:28:11
¿El bloque qué es?
00:28:14
Esta es a, la dirección de memoria, a, esta es a.
00:28:16
Ah, vale, pero eso es lo que has creado.
00:28:18
Claro, claro, esto es a.
00:28:19
Bueno, a ver, pero es que, a ver, espera.
00:28:21
Lo que tú has creado con el new, vamos a ver.
00:28:25
Esta línea, espera, espera, calma.
00:28:27
Escúchame.
00:28:31
Silencio.
00:28:32
Esta línea tiene dos partes, obviamente.
00:28:34
La parte de declaración, la a, y la parte de distanciación.
00:28:37
Entonces, con el new, lo que se crea es esto.
00:28:41
Y lo que tú estás devolviendo es la dirección.
00:28:45
Claro, pero es que la dirección te apunta al objeto.
00:28:48
No, no, no, no, no, no, no, no, no, no, no, no, no, no, no.
00:28:51
Vale.
00:28:53
¿Ha quedado claro igualmente?
00:28:55
¿Sí?
00:28:57
Eres muy.
00:29:00
No, no.
00:29:00
¿Qué más te voy a decir?
00:29:05
Bueno, lo importante es que haya quedado claro.
00:29:08
¿Vale?
00:29:09
¿Está claro?
00:29:10
Bueno, pues, entonces, devolvemos el objeto.
00:29:14
Entonces, lo que tenéis es que, obviamente,
00:29:16
manejar y entender que direcciones de memoria,
00:29:19
objetos, son cosas que van unidas.
00:29:22
¿Vale?
00:29:26
Entonces, manejamos indistintamente instancia,
00:29:26
dirección de memoria, objeto.
00:29:28
¿Vale?
00:29:30
Entonces, esto sí es una copia.
00:29:31
Y es importante, es importante distinguirlo porque muchas
00:29:33
veces necesitamos trabajar con copias de objetos en lugar de
00:29:38
con el propio objeto.
00:29:43
Lo necesitamos.
00:29:44
Y no nos damos cuenta.
00:29:45
Creemos que estamos trabajando con copias.
00:29:46
Hacemos cosas con esos objetos.
00:29:48
Y, en realidad, estamos modificando el otro.
00:29:50
Entonces, siempre hay que tener muy claro estas cosas.
00:29:53
¿Vale?
00:29:56
Simplemente por eso.
00:29:57
Porque hay situaciones en las cuales yo quiero copias,
00:29:58
no quiero el propio objeto.
00:30:01
Porque quiero modificar solo en una situación,
00:30:04
no quiero modificarla en todas.
00:30:07
Entonces, me hago una copia para esa situación, etcétera,
00:30:08
etcétera.
00:30:11
¿Vale?
00:30:12
¿Vale?
00:30:13
Entonces, esto es hacer un clon que lo hemos hecho a mano.
00:30:14
Pero hay una interfaz clonable que ahora mismo todavía no
00:30:17
podemos entender para hacer clones precisamente por eso.
00:30:19
Porque esta es una situación que podemos necesitar.
00:30:23
¿Vale?
00:30:25
Vale.
00:30:28
A ver, ¿qué más métodos tenemos?
00:30:29
Venga, ¿queréis que lo dejemos aquí?
00:30:36
Venga, pues dejémoslo aquí.
00:30:39
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 6
- Fecha:
- 28 de enero de 2024 - 18:59
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Duración:
- 30′ 44″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 136.15 MBytes