Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Ejercicio090500PersonaTelefonos02 ComposicionHerencia
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:
Ejercicio090500PersonaTelefonos02 ComposicionHerencia
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
sí
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:
- 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