Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

Ejercicio090500PersonaTelefonos02 ComposicionHerencia

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 4 de mayo de 2020 por Andres R.

184 visualizaciones

Ejercicio090500PersonaTelefonos02 ComposicionHerencia

Descargar la transcripción

Vale, pues tenemos la grabación en curso ya, ahí está, esto me dice aquí y nada, pues aquí está la grabación. 00:00:02
Así que tienen una, lo que ven es una pantalla de color verde, ¿no? Así más o menos. 00:00:09
Sí, el Google Chrome con ejercicios. 00:00:14
Vale, ejercicios que vamos a ver, sí. Bueno, es que ahora tengo la pantalla de la grabadora que se me pone encima del Chrome y no veo. 00:00:17
A ver ahora. Vale, ahí está. 00:00:25
Bueno, pues miren, lo que vamos a ver es estos dos ejercicios que tengo aquí preparados. 00:00:28
El de los teléfonos 00:00:31
Es una simple agenda de teléfonos 00:00:33
El ejercicio conceptualmente es muy simple 00:00:35
Pero ilustra muy bien 00:00:37
Algunas de las cosas 00:00:39
Algunos aspectos muy importantes 00:00:39
Del curso 00:00:42
Entonces vamos a ver cada uno de ellos 00:00:44
Voy a pasar un poco rápido en algunas cosas 00:00:46
Porque los ejercicios los tienen para revisárselos 00:00:48
Si se le plantea alguna duda 00:00:50
Me lo dicen y yo paro un momentito y lo vemos 00:00:53
Entonces, el ejercicio es simplemente 00:00:55
Hacer una 00:00:57
Una agenda 00:00:58
con diferentes personas y que cada persona tiene diferentes teléfonos. 00:01:01
Esa es en principio la idea. 00:01:07
Y lo vamos a hacer de dos formas distintas, 00:01:08
abordando el tema desde un punto de vista de composición 00:01:10
y abordando el tema desde un punto de vista de herencia. 00:01:12
Y por supuesto, como vamos a organizar información, datos, 00:01:15
utilizamos colecciones. 00:01:18
Una colección para las personas, para almacenar a esas personas, 00:01:19
y otra colección para que cada una de esas personas almacene un número de teléfonos. 00:01:23
Lo hacemos de una forma muy sencillita, pero muy ilustrativa. 00:01:27
Pero eso quería llevar este sentido. 00:01:32
Lo primero que vamos a centrar, vamos a empezar viendo cómo organizamos esta información en composición. 00:01:34
Acuérdense de las formas de organizar la información, que es en el capítulo, no me acuerdo si es el 5, el 6 o por ahí. 00:01:42
Ahí está. 00:01:48
Bueno, lo primero que vamos a analizar un momentito es la clase Persona. 00:01:49
Vamos a hablar un poquito de la clase Persona. 00:01:51
Entonces, miren 00:01:53
En composición, miren lo que tenemos hecho 00:01:56
Bueno, antes de hablar de las expresiones, esperen un momentito 00:01:58
Les voy a enseñar primero cómo lo vamos a hacer 00:02:00
Entonces, lo que he hecho es un dibujo esquemático 00:02:02
Perdonen mi 00:02:04
Grafía, que no es muy adecuada 00:02:06
No es la mejor del mundo, pero 00:02:08
Es que dibujo fatal 00:02:10
Y bueno, pues aquí lo tienen 00:02:11
Entonces, ¿qué es lo que vamos a tener? 00:02:14
Miren, esto representa lo que vamos a tener 00:02:16
Vamos a tener una colección de personas 00:02:18
Lo ven aquí, una primera persona 00:02:20
¿Perdón? 00:02:22
Voy a hacer un poco más grande 00:02:25
Yo puedo ampliar la pantalla 00:02:26
¿Ahí? Pero si lo hago 00:02:28
¿Aquí lo ven mejor o qué? 00:02:33
Perfecto, perfecto 00:02:34
Entonces miren, esto sería el MP mapa 00:02:35
Bueno, colección de personas 00:02:37
Esta sería la referencia que inicia esta colección de personas 00:02:39
Entonces esto sería una persona 00:02:42
Lo ven aquí, tiene su ID 00:02:44
Este es el mapa de personas 00:02:45
Tenemos el ID del mapa y aquí está la persona 00:02:47
Toda esta información sería relativa a la persona 00:02:50
Yo insisto mucho siempre que se dibujen las cosas 00:02:52
Porque es lo que nos sirve para entender un poquito 00:02:54
Qué es lo que queremos organizar 00:02:57
Entonces esto me parece que representa 00:02:59
Es que no me acuerdo de memoria 00:03:03
Esto representa un mapa de personas 00:03:04
Que tiene un ID y persona 00:03:10
ID y persona 00:03:12
Vale, un linked map, creo recordar 00:03:13
Yo sé que era esto 00:03:16
Pero lo interesante es esto de aquí 00:03:17
Cómo se organiza la información 00:03:19
Entonces tenemos el ID 00:03:21
la parte que almacena la persona 00:03:22
y fíjense que importante es 00:03:25
el dibujar lo que estamos haciendo 00:03:27
miren como almacena cada persona 00:03:29
como almacena los teléfonos 00:03:31
los teléfonos cada persona tiene 00:03:32
aquí esto es una referencia 00:03:35
y tiene un tree 00:03:37
set 00:03:38
una organización de teléfonos 00:03:40
cada teléfono tiene una identificación del teléfono y el número 00:03:42
aquí pondría trabajo y el número 00:03:44
oficina y el número 00:03:46
casa y el número, ¿lo ven? 00:03:48
se van organizando en forma de un tree 00:03:50
pero fíjense que es en composición 00:03:53
cada persona está compuesta 00:03:55
por, compone 00:03:57
internamente, tiene compuesto 00:03:59
internamente una agenda 00:04:01
de teléfonos, ¿vale? esto es lo importante 00:04:03
aquí está la composición, en contraposición 00:04:05
lo que vamos a ver después cuando lo veamos 00:04:07
en herencia, ¿vale? entonces tenemos 00:04:09
este mapa de personas, tenemos el ID 00:04:11
la persona y cada persona tiene 00:04:12
en composición una agenda de teléfonos 00:04:15
¿vale? fíjense tenemos aquí el 00:04:17
primero, este apuntaría al siguiente 00:04:19
igual aquí tendríamos el que apunta al siguiente 00:04:21
su ID, su persona, su agenda 00:04:23
de teléfonos, esto sería una agenda de teléfonos vacía 00:04:25
este apuntaría al siguiente, al siguiente 00:04:27
y hasta el último 00:04:29
el último en una lista 00:04:30
se termina con un null 00:04:33
ya no hay más, lo que quiere decir que este es el último 00:04:35
aquí estaría la información de la persona y fíjense 00:04:37
que esta persona tiene a su vez 00:04:39
una referencia 00:04:40
que inicia la agenda de teléfonos de esta última 00:04:43
persona, ¿vale? 00:04:45
quiero que entiendan esto, vamos a ver entonces 00:04:47
ahora vamos a ver cómo organizaríamos 00:04:49
los objetos del tipo persona 00:04:51
¿y por qué mapa y tree? 00:04:53
bueno, pues porque son las 00:04:56
estructuras que se han elegido, esto lo vamos a ver 00:04:57
ahora en el código, se han elegido esas 00:04:59
no nos pedían ninguna en concreto, pues se han elegido 00:05:01
esas dos 00:05:03
entonces miren 00:05:04
miren lo que pasa, lo primero 00:05:07
vamos a 00:05:10
organizar la clase persona 00:05:11
cuando desarrollamos una clase es importante 00:05:14
ya a estas alturas del cuplé 00:05:17
hacer lo que sea una clase completa 00:05:18
es decir, que la clase tiene que tener 00:05:21
un montón de cosas, pues tiene que tener 00:05:23
syssetters, tiene que tener toString, tiene que tener 00:05:25
equals, tiene que tener hashMap 00:05:27
el hashCode, perdón 00:05:29
y por ejemplo, si queremos organizar 00:05:31
cosas que almacenen 00:05:33
personas, pues claro, tenemos que tener 00:05:35
un implements comparable para que 00:05:37
podamos comparar personas y 00:05:39
podemos establecer los criterios de comparación 00:05:40
entonces 00:05:44
la clase personal, ahora la van a ver que es bastante completita 00:05:45
Una persona tiene un ID de persona 00:05:47
Tiene un nombre, así de sencillo 00:05:50
Sin complicar la vida 00:05:53
Y una altura, tiene unos atributos muy simples 00:05:54
Y fíjense lo que tiene 00:05:57
Tengo una agenda de teléfonos 00:05:58
Una agenda de teléfonos 00:06:01
Que se compone de cada elemento de la agenda 00:06:03
Se compone de dos cosas 00:06:05
String, string 00:06:06
El primer string va a ser el identificador del teléfono 00:06:07
Y el segundo va a ser el número de teléfono 00:06:10
Lo almacenamos en forma de string 00:06:12
Porque si, no le busquen 00:06:14
no tiene mayor relevancia y fíjense el tipo base es un shorted map del instanciado para string 00:06:17
string por ejemplo el teléfono de casa pues el 91 tal tal tal tal teléfono móvil pues el 649 00:06:30
esto tiene la ventaja de que nos permitiría meter signos por ejemplo más 34 o más 1 si 00:06:37
Estados Unidos, no sé qué, tal, tal, tal, ¿vale? 00:06:44
Constructor de persona, pues fíjense lo que hacemos con la persona. 00:06:46
Pues le pasamos su identidad, 00:06:49
su nombre, su altura, pin, pin, se lo establecemos 00:06:50
y mire la persona cuando 00:06:52
construimos una persona, mire lo que hacemos con la agenda de teléfonos. 00:06:54
Decimos, oye, 00:06:57
persona, créate, Manolo, ¿vale? 00:06:59
Y de número de identificación 00:07:01
443-7431, 00:07:03
el nombre Manolo Pérez Jiménez, 00:07:05
altura 1,84 00:07:06
y tu agenda de teléfono, 00:07:07
Manolo, que no me esfuerzas a tomar un teléfono, 00:07:10
hacemos que creemos un new tree map 00:07:12
vacío, no tienes todavía teléfonos 00:07:14
pero ya tiene el sitio donde 00:07:16
podemos albergar los teléfonos 00:07:18
esto es súper importante, inicializar 00:07:20
todos los elementos del objeto, ¿vale? 00:07:22
en este caso la agenda, la agenda es un trimath 00:07:24
o sea, está organizado como un trimath 00:07:26
bueno, pues los getter y setter 00:07:27
getter y setter, getter y setter 00:07:32
pasamos el método toString, método muy importante 00:07:33
en todas las clases, para poder transformar 00:07:36
toda la información en una cadena de caracteres 00:07:38
pues aquí le pasamos personas, papapapa 00:07:39
y miren, para la agenda de teléfonos, ¿qué hacemos? 00:07:42
Pues no nos complicamos la asistencia 00:07:43
Para sacar toda la agenda de teléfonos 00:07:45
Decimos, de la agenda de teléfonos 00:07:49
Aplicamos el toString de la agenda de teléfonos 00:07:50
Y nos lo sueltas tal cual 00:07:52
Y miren lo que hago 00:07:54
Este toString de la agenda de teléfonos 00:07:56
Me va a separar los teléfonos por una coma 00:07:58
Pues reemplazo las comas 00:07:59
Al salir la agenda de teléfonos 00:08:02
Reemplazo las comas por tabuladores 00:08:03
Y así me los separa 00:08:05
Un truquito, que hay para cuando lo veamos 00:08:06
Ahora vamos a ver la ejecución y lo vemos 00:08:09
Importante el compareTo 00:08:10
necesitamos un compareTo 00:08:12
porque arriba 00:08:14
teníamos que nuestra clase 00:08:16
implementa comparable 00:08:18
entonces tengo que implementar compareTo 00:08:20
y implemento el equals 00:08:21
y implemento el hashCode 00:08:24
y nada más 00:08:25
y luego, si quiero encapsular 00:08:30
la grabación y adquisición de teléfonos 00:08:33
miren lo que hago 00:08:34
puedo añadir teléfono 00:08:35
y puedo obtener teléfono de una persona 00:08:38
yo puedo añadir un teléfono, le digo 00:08:40
Oye, te voy a pasar el teléfono 00:08:41
Pues vas a tener el teléfono de clave oficina 00:08:43
Y de número 4413373 00:08:46
Pues miren lo que hacemos 00:08:49
Para poner un teléfono 00:08:51
Acudo a la agenda y le digo 00:08:52
Put clave teléfono 00:08:54
Y ya está, ya se ha metido el teléfono 00:08:55
Y me despreocupo de todo, fíjense 00:08:56
Qué fantásticas son las colecciones 00:08:58
Con qué poquito hacemos cuánto 00:09:00
Esto me lo organiza por clave 00:09:01
Está ordenado ya por este campo 00:09:04
No sé qué, tal, tal, tal 00:09:06
Es fantástico, es un trip 00:09:07
Es un trimap, ¿de acuerdo? 00:09:09
y si yo quiero obtener un teléfono, digo pues dame el teléfono de casa 00:09:11
de Manolo, pues digo Manolo.getTeléfono 00:09:15
casa, ¿qué me devuelve? me devuelve 00:09:19
el elemento cuyo teléfono 00:09:21
¿vale? tiene clave casa 00:09:24
porque yo le estoy diciendo que obtenme el que tiene clave casa 00:09:27
y él me devuelve el teléfono correspondiente 00:09:30
¿vale? para eso es un mapa 00:09:33
¿vale? y un trimón 00:09:36
pues esto sería la clase 00:09:38
persona, ahí la tienen 00:09:40
entonces, ¿cómo la utilizamos? 00:09:43
pues miren, por ejemplo, les voy a enseñar la salida del programa 00:09:45
para que lo vean un poquito 00:09:47
qué es lo que vamos a hacer 00:09:48
¿ven la salida? ¿aquí ven la salida? 00:09:50
hola 00:09:55
qué bajo la oigo, Sara 00:09:55
se ve, se ve 00:09:58
a ver, ¿quién es el que ha hablado ahí? 00:09:59
¿quién ha dicho se ve, se ve? 00:10:01
yo, Antonio 00:10:04
pues Antonio, hable usted, macho, porque le oigo mucho mejor 00:10:05
Mejor, mejor. 00:10:08
Antonio, está bien. 00:10:09
Como quieras. 00:10:10
Sí, sí, estoy aquí. 00:10:11
Dígame algo de vez en cuando para no estar agobiado. 00:10:12
Es que tengo una sensación de que estás hablando solo aquí para las teclas. 00:10:14
Me agobio un poco. 00:10:18
Vale, miren, esto es la salida del programa. 00:10:22
¿Ven la salida del programa? 00:10:23
Sí. 00:10:25
A ver, esto es la salida del programa, pero esto está en HTML. 00:10:26
Esto sería texto, pero yo le paso a HTML para que vean el resaltado sintáctico. 00:10:29
A veces se observa. 00:10:32
Pues bien, esto es persona número uno. 00:10:34
Sí, hay aquí algo de ruido a fondo en casa. 00:10:36
Hoy nos damos con la convicción, ¿eh? 00:10:49
No, no, no nos damos bien con la convicción. 00:10:52
No sé si lo vamos a dejar hoy o qué, porque no sé qué pasa hoy que no sale esto, ¿eh? 00:10:54
Hay días que no hay manera. 00:11:02
Bueno, esta es la ejecución del programa. 00:11:05
Entonces sale la colección de personas, la ven aquí 00:11:06
Persona 1 00:11:08
Esto es la forma rápida de salir y esto es una forma 00:11:08
Un poco más ordenada 00:11:12
Una salida del almacén a lo bestia 00:11:13
Sácalo todo ahí 00:11:16
Esta es una salida un poquito ordenada, lo ven aquí 00:11:17
Lo mismo, pero como ven 00:11:19
Un poquitín más ordenado, con un forage 00:11:22
Es el de la persona 1 00:11:24
Su ID, su nombre, Juan 00:11:26
Altura, tanto, los teléfonos de Juan 00:11:28
Este y este, vale 00:11:30
Miren, este, la persona 2 00:11:31
La persona 2 00:11:33
Pues tiene ID 180 00:11:35
Nombre, Luis, altura 1,97 00:11:37
Este es un gigante 00:11:39
Teléfonos, no tiene teléfonos 00:11:40
La persona 3, María 00:11:41
Altura, tanto, pues teléfonos 00:11:45
El móvil, no sé qué 00:11:47
La persona 4, Ana 00:11:48
La persona 5, Pepe 00:11:49
Altura y tiene estos dos teléfonos 00:11:52
¿Lo ven ahí? 00:11:53
Y luego además en el main van a ver que además digo 00:11:55
Oye, sácame los teléfonos de Juan 00:11:57
Pues mira, de casa este y de trabajo no tiene 00:11:59
¿Lo ven ahí, no? 00:12:01
lo tiene el programa para que lo vean 00:12:03
ustedes con detenimiento, yo quiero 00:12:07
comentar lo más relevante 00:12:08
una pregunta 00:12:10
¿cómo? 00:12:12
una pregunta decía, perdona 00:12:14
en la salida que acabas de enseñar 00:12:15
cuando ponía trabajo nul es porque hemos dado 00:12:18
de alta el de trabajo pero vacío 00:12:21
porque si no no saldría ni trabajo 00:12:23
me imagino que sí, creo que es por eso 00:12:24
ahora lo veremos en el main 00:12:25
esto es lo que sale del main 00:12:29
de todas formas ustedes 00:12:30
cuando lo prueben en su casa lo van a obtener 00:12:33
todo esto mismo 00:12:35
vale, nada 00:12:36
no hay problema, también tienen el dibujo 00:12:39
y todo, tienen todo, el dibujo y todo 00:12:41
ahí lo tienen todo, vale 00:12:43
y por último vamos a ver 00:12:45
el programa principal, fíjense 00:12:46
lo que ocurre cuando ya tenemos estructuras 00:12:49
de datos un poquito más elaboradas 00:12:51
con muy poco de código 00:12:52
se hace muchísimo, eso es lo que sucede aquí 00:12:55
el código se implementa en las 00:12:57
clases, se implementa 00:12:59
En las clases, las estructuras de datos y tal, se cogen y con muy poquito luego se hace un montón. 00:13:01
Entonces, fíjense lo que hacemos. 00:13:07
Vamos a implementar un almacén de personas, ¿vale? 00:13:10
Este almacén de personas es un HashMap, ¿vale? 00:13:13
O sea, es un mapa que nos hace parejas Integer, Persona, Integer, Persona, Integer, Persona. 00:13:16
Miren, Integer 1, Persona, toda esta información. 00:13:23
Integer 2, Persona, toda esta información. 00:13:26
Integer 3, Persona, toda esta información. 00:13:28
en taller cuatro personas de información lo ven ahí no es un tipo map vale en este caso 00:13:29
y se llama almacén de personas lo que hacemos decimos hoy almacén de personas vamos a meter 00:13:37
una persona pues putt la persona de interior clave uno le vamos a dar de alta a esa persona 00:13:42
en este momento la damos de alta en este instante decimos new persona y esa persona va a tener el 00:13:51
El identificador interno como persona tiene el identificador 100, se llama Juan y mide 1,65. 00:13:57
Vale, ya está. 00:14:03
¿Sí? 00:14:05
Y fíjense lo siguiente lo que hacemos. 00:14:06
Del almacén de personas obtengo la que tiene clave 1, que es la que acabo de dar de alta. 00:14:09
¿Lo ven aquí? 00:14:14
Sería este, Juan. 00:14:15
Y a esa persona le añado un teléfono de características casa con este número de teléfono. 00:14:16
Entonces obtengo a la persona 1 00:14:25
Que tiene clave 1 dentro del mapa 00:14:27
Y le añado el teléfono 00:14:29
Con las características 00:14:31
Identificador casa, número de teléfono este de aquí 00:14:32
Y le añado otro más 00:14:35
Y Juan tiene otro teléfono 00:14:36
De identificador Pepe 00:14:40
Y el número de teléfono de Pepe 00:14:41
Si se fijan, yo le he hecho aposta a esto 00:14:43
Pepe, que es este de aquí 00:14:45
Es la persona que tiene clave 5 00:14:46
Pepe, uno de los teléfonos que le pongo de Pepe 00:14:48
Es el de su casa, que es este de aquí 00:14:50
Bueno, sería el móvil, pero bueno 00:14:52
se me ha ido la pinza 00:14:53
¿vale? pero Juan 00:14:55
tiene guardado también el teléfono de Pepe 00:14:58
¿lo ven aquí, no? ¿sí? 00:15:00
00:15:03
vale, fantástico, entonces fíjense 00:15:03
con qué poquito hacemos tanto, estamos gestionando 00:15:06
todo ese gráfico que hemos visto 00:15:08
antes, que van las personas, ese mapa 00:15:10
de personas enlazado 00:15:12
¿vale? se va enlazando uno con otro 00:15:13
y ahí lo tenemos 00:15:15
y se enlaza uno con otro y ahí los tenemos 00:15:17
¿de acuerdo? entonces, miren a continuación 00:15:20
lo que hago? Pues hago la salida 00:15:22
bruta del HashMap. Digo, almacén 00:15:24
personas, venga, entero. Pues almacén 00:15:26
personas tiene un toString, ¿vale? Un HashMap 00:15:28
tiene un toString implementado, ¿vale? 00:15:30
Que yo no he tenido que implementarlo, ya me lo tiene 00:15:32
la estructura. Y claro, ¿qué me sale? Me sale este 00:15:34
chorizo de aquí, esta llave desde aquí 00:15:36
hasta que se cierre, que a ver si la encuentro. 00:15:38
Esta. Todo esto. 00:15:41
Esa es la salida 00:15:43
bruta de ese HashMap. 00:15:44
Un toString del HashMap. Claro, esto es una 00:15:46
guarrería, ¿no? Esto es un poco... 00:15:48
No es la forma, ¿no? 00:15:50
de... ¿Hola? ¿Qué ha pasado? 00:15:52
Se oye, se oye. 00:15:54
¿Pero qué ha pasado? ¿Que ha sonado por ahí? 00:15:56
Se ha dejado de grabar, yo creo, Andrés. ¿Ah, sí? 00:15:57
¿Por qué? ¿No? 00:16:00
No, no, está arriba. Está grabando. 00:16:02
Está arriba el puntito rojo. Sí, sí, está grabando 00:16:03
perfectamente, sí, sí, no sé. 00:16:06
¿Estarán pidiendo acceso o algo? ¿Un participante? 00:16:07
No sé. ¿Que hay 00:16:10
solo dos personas? 00:16:12
Diez, no por aquí. A ver, un momento. 00:16:14
Ah, joder, es que de verdad... 00:16:17
Oye, que mal sale aquí en Windows. 00:16:18
Diez participantes. Sí, sí, sí, vale, vale. 00:16:19
bueno, bueno, lo veréis, vale, parece que sí 00:16:21
no sé de qué suena un sonido, no sé de qué será 00:16:24
venga, entonces 00:16:25
continuamos aquí 00:16:28
me he perdido 00:16:29
esta es la salida 00:16:32
directa, ¿no? 00:16:33
claro, así, esto es una guarrería 00:16:36
entonces, fíjense la otra salida con un 00:16:37
for each, y fíjense que además 00:16:39
hace uso del elemento 00:16:41
entry este que se usa para los mapas 00:16:43
porque claro, nosotros no podemos usar un 00:16:45
for, recuerden que no se pueden usar los for each 00:16:47
en los mapas, no sé si se acuerdan de esto 00:16:49
perdón, en los set 00:16:51
en los set 00:16:54
entonces, perdón, transformamos 00:16:55
el almacén de personas que es un mapa 00:16:57
lo transformamos en un set 00:17:00
¿de acuerdo? 00:17:01
y de este set lo tomamos como entry 00:17:03
y si se lo asignamos a esta estructura 00:17:06
que tenemos aquí, que es mi set 00:17:08
¿de acuerdo? y entonces 00:17:09
¿qué va a ocurrir? 00:17:12
voy a obtener uno a uno 00:17:13
voy a ir obteniendo cada uno de ellos y los voy visualizando 00:17:15
aquí en este for, ¿lo ven? 00:17:18
Mire, aquí lo tenemos. Y ahí visualizo uno a uno de forma ordenada. ¿Lo ven ahí? Sale el primero, luego sale el segundo. En cada vuelta del bucle sale uno. Saldría el primero, saldría el segundo. Este es el entry, entry, entry, entry, entry. 00:17:19
Me sale clave, valor, clave, valor, clave, clave, valor, clave, valor. 00:17:36
Lo ven aquí, clave, valor. Estas son las entries. 00:17:42
Esto lo recorre el bucle y me sale de forma ordenada la clave igual y a su valor, persona, tal, tal, tal. 00:17:45
Y en la persona, en tu string de persona, fíjense lo que hemos hecho antes. 00:17:51
Si se acuerdan, hemos cambiado, separarlo por comas, me lo ha cambiado por separarlo por tabuladores. 00:17:54
Ven que de aquí al siguiente teléfono lo que hay ahí es un tabulador, ¿lo ven ahí? 00:18:00
Sí, sí se ve 00:18:03
Una coma, pero como tenía el replay 00:18:06
¿Se acuerdan? De las comas 00:18:07
Por Backslash T, que es un tabulador 00:18:09
Me lo he cambiado por tabulador 00:18:11
Y sale una cosita de forma mucho más ordenada y simpática 00:18:12
Que no el chorizo este de aquí arriba 00:18:15
Que esto no hay Dios que se lea aquí nada 00:18:17
Esto es muy complicado 00:18:18
Y si practican también 00:18:21
El tema del entry 00:18:23
¿Lo ven ahí? Vale 00:18:24
Y luego, fíjense, teléfonos de Juan 00:18:27
Pues dices, oye 00:18:29
Vamos a sacar los teléfonos de Juan 00:18:31
Quiero que me saques del almacén de personas 00:18:33
Uno, que es Juan 00:18:35
Porque yo sé que Juan es el uno 00:18:37
Quiero que tengas el teléfono que se llama Casa 00:18:39
Vamos aquí arriba, Juan hemos metido uno 00:18:41
Que se llama Casa, lo tiene, ¿no? ¿Lo ven aquí? 00:18:46
¿Lo ven ahí? 00:18:48
Encuentra que Casa encuentra una ocurrencia 00:18:49
Entonces me devuelve un número de teléfono 00:18:51
Y es lo que yo visualizo 00:18:53
Y se concatena con Casa 00:18:54
Y a continuación le digo, oye, ¿y me traes también uno 00:18:57
Que se llame Trabajo? Pues es que resulta que 00:19:00
Juan, si se fijan aquí, no tiene 00:19:01
dado de alta un teléfono se me trabajó por esa razón es por lo que me ha salido un nulo si 00:19:03
hubiera sacado trabajo con el get de 5 hubiera obtenido este número de teléfono de aquí pero 00:19:08
el get de uno que es juan no tiene un teléfono de identificador trabajo lo ven aquí sí sí entonces 00:19:15
fíjense la secuencia es del almacén de personas obtengo el primer elemento que obtengo yo de aquí 00:19:25
Perdón, el primer elemento no 00:19:31
El elemento de clave 1 00:19:32
Que tengo yo de aquí 00:19:35
Un objeto del tipo persona 00:19:37
Ese objeto del tipo persona, punto 00:19:38
Que es teléfono casa 00:19:41
Este que es teléfono casa 00:19:42
Lo que hace es que llama 00:19:45
Al objeto, este objeto persona 00:19:46
Llama a su tree 00:19:49
De teléfonos, a su árbol 00:19:51
A su estructura árbol de teléfonos 00:19:53
Y obtiene el teléfono cuya clave es casa 00:19:54
Si lo encuentra me devuelve el número 00:19:57
Y si no me devuelve el número, ya está 00:19:59
Entonces, es lo que les digo 00:20:00
Una vez que se entiende bien todo esto 00:20:03
Con muy poco, fíjense con cuántas líneas de código 00:20:05
Que además, si se fijan un poco 00:20:07
La mayoría es dar de alta las cosas 00:20:09
Se dan cuenta, ¿no? 00:20:10
Con 00:20:13
Con 00:20:13
Con qué poca cantidad de código hago tanto 00:20:15
Esto es una gestión 00:20:19
De una agenda de teléfonos 00:20:20
No es la mejor del mundo 00:20:22
Pero es suficiente, ¿vale? 00:20:24
Y un poco lo que se pretende es 00:20:26
Ilustrar un poquito 00:20:28
todos estos elementos que venimos viendo 00:20:30
de los capítulos anteriores. 00:20:33
Por eso les he querido repasar un poquito esto. 00:20:35
Me ha sentido muy, muy interesante. 00:20:37
Vale. 00:20:39
Y entonces, por eso ya les digo que lo tienen 00:20:41
todo, todo, todo. 00:20:43
Y entonces, ¿en qué consiste 00:20:44
el Persona Teléfonos 3? 00:20:45
Pues consiste en lo siguiente. 00:20:48
Esto es muy interesante. 00:20:50
Aquí se ha hecho en composición. 00:20:51
Una persona está en composición 00:20:53
con la agenda de teléfonos. 00:20:55
Y aquí, la agenda de teléfonos 00:20:56
está entre una relación de herencia 00:20:58
con la persona. 00:21:01
Una persona hereda 00:21:02
una agenda de teléfono. 00:21:04
Se lo voy a mostrar esquemáticamente 00:21:08
primero para que lo entiendan. 00:21:09
A diferencia de antes, si se acuerdan antes, 00:21:11
voy a sacar los dos para que vean la diferencia 00:21:12
de uno por otro. Esto se ve muy bien 00:21:14
dejándolo en papel siempre. 00:21:16
Una persona está compuesta 00:21:18
por una agenda de teléfono 00:21:21
entonces tengo una referencia a una agenda de teléfono 00:21:22
y está fuera de la persona. 00:21:24
Bueno, pues si es en herencia, ¿qué es lo que ocurre? 00:21:26
la situación es diferente 00:21:28
este es el mapa, el que tenía el ID y la persona 00:21:31
aquí estaría la persona y esta es la parte del ID 00:21:34
entonces miren, esta es la persona 00:21:35
la persona hereda 00:21:38
la agenda de teléfonos, la agenda de teléfonos ya no está 00:21:39
por fuera, no tengo una referencia 00:21:42
que me permita acceder a la agenda de teléfonos 00:21:44
la agenda de teléfonos pertenece 00:21:46
a la persona, la persona hereda de agenda 00:21:48
de teléfonos, vamos a ver 00:21:50
ahora en el código esto como se plasma 00:21:52
¿me van siguiendo? 00:21:53
vale, vamos a ver estructuralmente 00:21:55
esto, ¿cómo se plasma? Pues esto, donde lo voy a 00:21:58
anotar muchísimo, 00:22:00
precisamente es en la clase Persona. 00:22:02
Aquí está, aquí. Pues vamos a 00:22:04
ver la clase Persona, cómo definir a la clase Persona 00:22:06
de acuerdo a lo que me han pedido. 00:22:08
Claro, evidentemente, 00:22:10
claro, yo tengo que ajustar, 00:22:12
tengo que ajustar, es que me está comiendo 00:22:14
esto, perdonen. ¿Lo siguen 00:22:16
viendo bien? Es que he tenido que reducir la ventana. 00:22:18
Sí, sí, se ve bien, se ve bien. Pues le he tenido que reducir 00:22:20
la ventana en el browser porque me estaba comiendo el WebEx 00:22:22
este, la 00:22:24
ventana y no veía bien. 00:22:25
Entonces, fíjense como ahora cambia radicalmente 00:22:28
La definición de la clase persona 00:22:34
Miren lo que sucede con la persona 00:22:35
Una persona implementa Comparable para poder comparar personas 00:22:36
Pero, fíjense 00:22:39
Hereda 00:22:41
Un trimap de StringString 00:22:43
Es decir, la persona 00:22:45
Hereda de la agenda de teléfonos 00:22:49
Un objeto por el hecho de ser una persona 00:22:51
Incorpora toda la funcionalidad 00:22:55
De la agenda de teléfonos 00:22:57
¿Sí? 00:22:58
¿Ven la diferencia con antes, verdad? 00:23:02
Antes teníamos un atributo 00:23:03
que me daba acceso a la agenda de teléfonos. 00:23:05
Ahora no, ahora heredo de ella. 00:23:09
Por eso ahora es en herencia y antes en composición. 00:23:11
Entonces miren lo que sucede. 00:23:14
Cuando yo digo a una persona, pues miren, 00:23:15
le pongo su persona, bla, bla, bla, 00:23:19
y miren lo que hago, llamo a super, 00:23:22
llamo a su clase base 00:23:23
y sin parámetros, es decir, 00:23:25
inicializa la agenda de teléfonos. 00:23:28
esto es la llamada del constructor de la clase padre 00:23:30
de TRIMAP 00:23:32
cuidado que la clase padre no es TRIMAP 00:23:33
la clase padre es TRIMAP 00:23:36
implementado en un 00:23:39
string string 00:23:41
esa es la pronuncia completa 00:23:41
es un genérico, recuerden 00:23:43
es un TRIMAP para string string 00:23:45
eso es 00:23:48
¿no me oyen? 00:23:50
¿no me oyen? ¿hola? 00:23:52
si, si, si se oye 00:23:53
vaya día que llevamos hoy 00:23:54
está curioso 00:23:58
bueno porque con porque el comparable si luego no comparamos nada porque yo les voy a pedir en 00:24:00
muchas ocasiones que hagan una clase completa y si se pide una clase completa tiene que ir toda 00:24:07
la información que será una clase para desarrollar lo que sea con esta clase y luego ordenar una 00:24:11
colección de personas necesitar tener una comparación por defecto una algo que permita 00:24:18
ordenar que me mira comparar los objetos de la clase persona igual que porque si no lo voy a 00:24:23
utilizar una clase completa y que todos los elementos necesarios para el desarrollo de 00:24:28
otros programas con esta que es verdad que no lo vamos a utilizar posiblemente pero cuando 00:24:36
nos pide una cosa completa tiene que estar toda la información pues ya les digo tu stream 00:24:42
pues toda la información los getter y setter todo lo tenemos en los apuntes en varios sitios 00:24:47
está puesto. Toda la información que 00:24:53
lleva una clase completa. 00:24:54
Bueno. 00:24:57
Entonces, lo más 00:24:59
relevante aquí es esto. Este extends. 00:25:00
¿Vale? Esto es lo más relevante. 00:25:03
Porque una persona hereda de una agenda. 00:25:04
Entonces, hereda toda la funcionalidad de una agenda. 00:25:06
Es decir, que un objeto de la 00:25:09
clase persona, por el hecho de haber heredado la agenda, 00:25:11
tiene toda la funcionalidad 00:25:13
de una agenda de teléfonos. 00:25:14
Todo. No tengo que hacer nada. 00:25:17
Ya lo tengo. Ya lo tengo. La incorporo. 00:25:18
Se incorpora. ¿Vale? 00:25:20
bien 00:25:23
entonces, si yo quiero obtener la agenda de teléfonos 00:25:24
miren lo que hago 00:25:28
si yo quiero obtener la agenda de teléfonos en forma de cadena de caracteres 00:25:29
lo que hago es que llamo a mi clase 00:25:34
padre y hago un toString 00:25:36
y aquí obtendría toda la información 00:25:38
de la agenda de teléfonos en forma de cadena 00:25:41
de caracteres 00:25:42
y con eso puedo 00:25:43
trabajar 00:25:46
fíjense, si yo quiero establecer un teléfono 00:25:47
lo único que tengo que hacer es un put 00:25:50
de hecho yo podría llamar a put directamente 00:25:52
si lo hiciera público, pero bueno 00:25:54
para establecer un teléfono lo único que hago es llamar a put 00:25:55
porque ya tengo un put 00:25:58
yo soy un agente de teléfonos 00:26:00
¿vale? 00:26:02
si quiero tener un teléfono, pues lo único que tengo que hacer 00:26:04
es llamar a get 00:26:06
¿vale? fíjense la diferencia con antes 00:26:07
antes tenía que poner 00:26:10
la referencia punto put 00:26:12
la referencia punto get, ahora no, ahora lo incorporo 00:26:14
porque he heredado de ello 00:26:16
¿sí? 00:26:17
vale 00:26:21
el toString, pues nada, la persona, la altura 00:26:21
tal, y la agenda, pues obtengo la agenda 00:26:24
como una cadena de caracteres y la visualizo 00:26:26
y ya está 00:26:28
no la visualizo, perdón, la recupero 00:26:29
y la devuelvo con un toString, lo concateno con todo lo demás 00:26:32
y ya está, para comparar personas 00:26:34
es exactamente igual que antes 00:26:36
el equals de personas es el mismo 00:26:37
equals, lo recuerdan, ¿no? 00:26:39
el método equals es importante 00:26:42
creo que este lo repasamos además en clase un día 00:26:44
me parece 00:26:46
recuerden que equals lo que hace es que me compara 00:26:47
me dice si dos objetos son iguales o no 00:26:50
me vuelve cierto, si son iguales 00:26:52
falsos son diferentes 00:26:54
lo primero es ver que lo que me han pasado no es nulo 00:26:55
lo siguiente que tienen la misma clase, porque si yo comparo 00:26:58
una persona con un chorizo de cantimpalo 00:27:00
pues no pueden ser iguales, es imposible 00:27:03
entonces tienen que tener la misma clase 00:27:04
y luego, una vez que tienen la misma clase 00:27:05
pues para mí dos personas son iguales 00:27:08
cuando el id de la persona de ambas 00:27:10
es el mismo 00:27:12
si es diferente, digo que no son iguales 00:27:13
pero si es el mismo, no ejecutaría 00:27:16
este if me vendría aquí y hago un return true 00:27:18
devolvería cierto 00:27:21
porque esas dos personas tienen el mismo id 00:27:22
¿vale? dos personas del mismo 00:27:24
id, imagínense el dni 00:27:27
dos personas que tienen el mismo dni, se supone que son dos personas 00:27:28
iguales ¿vale? bueno el hash code 00:27:31
tiene aquí dos versiones del hash code 00:27:32
esto está comentado, es uno generado manualmente 00:27:34
y otro muy interesante 00:27:37
es el que nos 00:27:39
proporciona el método hash de objects 00:27:40
¿vale? método hash de objects 00:27:43
me construye un hash directamente 00:27:45
con una serie de parámetros que yo le pase 00:27:46
y no tengo que estar construyendo yo matemáticamente 00:27:48
una multiplicación de los números primos 00:27:51
no sé qué, patatín, patatán 00:27:53
esto es lo que genera NetBeans 00:27:54
pero usar 00:27:56
el hash de objects es 00:27:59
una opción muy buena 00:28:00
y nada, pues aquí tenemos los getters y los setters 00:28:01
y ya tenemos la clase persona, entonces la gran diferencia 00:28:04
en este caso es la definición 00:28:07
de la clase persona, en este caso 00:28:09
estamos trabajando en herencia porque nos lo han pedido 00:28:10
hacerlo en herencia 00:28:12
y entonces, si vamos al main 00:28:13
pues bueno, la salida 00:28:16
pues como ven 00:28:19
va a ser relativamente parecida, lo único que está 00:28:20
ahí nos ha pillado el resaltado sintáctico 00:28:22
es algo bastante similar 00:28:25
al anterior, tiene otra 00:28:27
información por ahí metida con otras cositas 00:28:29
y la forma de salir es un poco distinta 00:28:31
pero a fin de cuentas 00:28:33
viene a ser lo mismo 00:28:35
y luego 00:28:36
vamos a ver una diferencia 00:28:38
aquí está 00:28:41
el mail lo tenemos aquí 00:28:45
y entonces 00:28:46
este es un poquitín más extenso 00:28:47
entonces miren lo que hacemos 00:28:50
vamos a ver 00:28:52
aquí lo tenemos 00:28:54
creamos este map 00:28:54
de integer persona, ¿vale? 00:28:57
este linked hash map 00:28:59
va a ser un mapa 00:29:01
en el que se esté enlazado el primero 00:29:04
con el segundo, el tercero, con el cuarto, con el quinto, así 00:29:05
¿vale? y enlazamos 00:29:07
un entero con una persona, un entero con una persona 00:29:10
un entero con una persona 00:29:12
aquí lo tenemos, miren 00:29:13
los números que le estamos asignando 00:29:15
por aquí 00:29:18
pues 00:29:20
por ejemplo 00:29:21
a esta persona P que estoy declarando aquí 00:29:24
le estoy asignando el número 77 a María 00:29:25
primero declaro a la persona 00:29:28
declaro a la persona, esto es otra forma de hacerlo 00:29:29
declaro a la persona, new persona, le pongo 00:29:31
sus teléfonos, el de trabajo tal 00:29:33
la oficina cual, el de móvil pin 00:29:35
el de la casa tal 00:29:37
y una vez que tengo la persona y tengo sus teléfonos digo 00:29:38
oye, voy a meter en mi map 00:29:41
que llamo MP 00:29:43
voy a meter con el número 77 00:29:44
a esta persona que la tengo apuntada por P 00:29:47
miren, esto lo ven fenomenal 00:29:49
aquí 00:29:51
el dibujo geomático, miren, aquí se va a ver 00:29:52
fantástico, ay es el otro 00:29:54
en el otro se veía 00:29:57
miren 00:30:01
aquí lo tengo hecho con P 00:30:05
¿lo ven? que está el P aquí 00:30:08
P inicialmente 00:30:09
apunta aquí y estoy metiendo 00:30:12
en MP estoy metiendo la primera persona 00:30:14
¿lo ven aquí? 00:30:16
Pues este 00:30:17
En MP, meto lo que está apuntado por P 00:30:19
Total, que MP está apuntando 00:30:21
La primera persona que se mete sería esta de aquí 00:30:23
¿Verdad? 00:30:25
A ver si lo ven ahí bien o no 00:30:26
¿Verdad? 00:30:29
Pues igual aquí tendríamos otra referencia P 00:30:30
Que estaría apuntando esto de aquí 00:30:33
Y dijimos, mete en MP lo que está apuntando en P 00:30:34
Pues meto en MP esta primera persona de aquí 00:30:36
Con sus teléfonos y todo 00:30:39
Que ya los hemos metido con anterioridad 00:30:41
Tenemos aquí, ¿Verdad? 00:30:43
Tenemos aquí todos los teléfonos y metemos la persona 00:30:44
A continuación, ¿qué es lo que metemos aquí? 00:30:47
Pues igual, otra persona, esta señora, Marta. 00:30:53
Y fíjense, primero, fíjense qué interesante es esto. 00:30:56
Primero declaramos la persona, metemos la persona en este, que era un LinkedHashMap, la metemos en este LinkedHashMap. 00:30:59
Y una vez que Marta está dentro del LinkedHashMap, miren lo que hago. 00:31:08
a través de P le establezco los teléfonos 00:31:11
porque tanto P como lo que acabo de introducir 00:31:15
apuntan al mismo sitio, a la misma persona que sería esta Marta 00:31:17
como P sigue apuntando, pues nada, no tengo ningún problema 00:31:20
le establezco el teléfono móvil y le establezco el teléfono de casa 00:31:24
¿lo ven aquí? 00:31:27
¿sí? 00:31:30
vale, aquí tres cuartos de lo mismo 00:31:33
meto a esta persona, la meto en el mapa 00:31:35
y luego a continuación le establezco estos teléfonos 00:31:38
¿Vale? ¿Ven? 00:31:40
Añadimos al objeto y se añaden después los teléfonos 00:31:42
¿Ven que está todo comentado? 00:31:44
¿Lo ven? Para que no se líen 00:31:45
Para que lo puedan seguir 00:31:47
Luego esto en casa de todas formas lo revisan 00:31:49
Y aquí es igual, añadimos a Yolanda 00:31:50
Añadimos aquí a Maride 00:31:53
¿Lo ven aquí? 00:31:56
En través de P 00:31:57
Igual aquí añadimos a María 00:31:58
Tenemos aquí más ejemplos que antes 00:32:01
Entonces, miren 00:32:03
Esto está muy grande ahora 00:32:04
Entonces, primero sacamos el listado 00:32:06
así gigante 00:32:09
y luego hacemos algunas cositas 00:32:11
más. Hacemos un listado 00:32:13
recorriendo las claves de todos los teléfonos 00:32:15
de casa usando un 00:32:17
key set. Entonces 00:32:19
me voy a recorrer 00:32:21
todos, ¿vale? Y solamente voy a 00:32:22
sacar aquellos cuyo nombre de teléfono 00:32:25
es casa 00:32:27
El resultado 00:32:28
lo tenemos aquí. Mira, ¿ven? 00:32:31
Me salen todos 00:32:33
pero solamente aquellos 00:32:35
cuyo valor 00:32:37
del teléfono es casa. ¿Lo ven aquí? 00:32:39
¿Estoy hablando 00:32:43
solo o hay alguien escuchando? 00:32:43
Sí, sí, sí. Se oye. 00:32:44
Sí, de vez en cuando, por favor, porque tengo un agobio 00:32:46
tremendo. Entonces, ¿ven? 00:32:48
Solamente salen aquellos cuyos teléfonos 00:32:51
es casa. 00:32:53
¿Lo ven ahí, no? 00:32:55
¿Dónde está? Ahí está. 00:32:57
¿Vale? Entonces, saldremos solamente 00:33:08
aquellos cuyo es 00:33:10
casa. Sacamos el nombre 00:33:12
y el nombre 00:33:14
obtenemos el teléfono solamente 00:33:14
para aquellos cuyo nombre de teléfono 00:33:18
lo he establecido aquí arriba en casa 00:33:21
igual como tengo un map 00:33:23
yo no puedo recorrer un map 00:33:25
pero si puedo recorrer un key set 00:33:26
transformo el map en un key set 00:33:28
se transforma momentáneamente 00:33:30
para la ejecución de este for 00:33:32
el for como el set es una collection 00:33:34
el for si puede recorrer 00:33:36
con un for puede recorrer una collection 00:33:38
un mapa no, pero una collection si 00:33:40
transformo el mapa en un set 00:33:42
que es del tipo collection 00:33:44
con esto saldría toda la información 00:33:45
Y con este de aquí hacemos exactamente lo mismo que antes que recorremos todos los valores, con el formato clave-valor, clave-valor, clave-valor. 00:33:47
Sacamos cada una de ellas. La clave es un integer, valor-persona. Vamos sacando todos ellos en este tipo entry y van a ver aquí, aquí van a ver, ven, clave-valor. 00:33:56
clave 11 valor personal y total clave 33 valor personal y tal elena teléfono 00:34:08
salta el siguiente clave 44 siguiente clave 61 y el valor sería toda la 00:34:15
información relativa a esa persona si lo ven ahí 00:34:22
fenomenal pues ahí lo tienen absolutamente todo todo todo esto lo 00:34:30
tienen estos dos ejercicios que están subidos en su aula virtual vale para que 00:34:35
vean cómo podemos utilizar de forma muy sencillita, ¿vale? 00:34:39
Y es lo que les digo, con muy poco código, a ver si lo encuentro aquí el main, 00:34:45
es que no veo nada aquí en el Windows, no veo un pimiento. 00:34:49
Lo que les decía, con muy poco código realmente, 00:34:53
porque aquí la mayoría del código es meter datos, ¿vale? 00:34:56
Y con muy poco código hacemos muchísimo. 00:34:58
Estamos gestionando una agenda de teléfonos con muy poquito. 00:35:01
Gracias a estas estructuras de datos que hemos visto ya en collections y mapas, 00:35:05
gracias a ello 00:35:09
y a declarar las clases 00:35:11
correctamente, la clase persona en este caso 00:35:14
que ya hereda 00:35:15
fíjense que sencillo construimos la agenda de teléfono 00:35:16
no hacemos nada, es un trick, es un mapa 00:35:20
ahí está 00:35:21
con eso construimos clave-valor 00:35:22
la clave es el identificador de teléfono 00:35:25
y el valor es el número de teléfono 00:35:27
¿sí? 00:35:28
muy bien, pues bueno, voy a detener la grabación 00:35:31
y si tiene alguna pregunta 00:35:34
me lo 00:35:35
me lo dicen y la vemos 00:35:36
Vamos a ver en la grabadora, vamos a ver... 00:35:38
Aquí está, de tener los... 00:35:40
Idioma/s:
es
Autor/es:
Andrés Ramos González
Subido por:
Andres R.
Licencia:
Reconocimiento - Compartir igual
Visualizaciones:
184
Fecha:
4 de mayo de 2020 - 22:23
Visibilidad:
Público
Centro:
IES ALONSO DE AVELLANEDA
Duración:
35′ 43″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
70.75 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid