Saltar navegación

Clase 12-04-24 - 3 - Contenido educativo

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 13 de abril de 2024 por Raquel G.

6 visualizaciones

Descargar la transcripción

Bueno, pues entonces, si uno arranca con el primer método, datos, pues nada, ese es el más sencillo, insertar alumno, insertar alumno es insertar en el map, entonces nos situamos para insertar un par en un map, pues el método put, pues ya está, alumnos put, ¿qué necesitamos? 00:00:00
la clave que es el 00:00:19
nif y el objeto alumno 00:00:21
pues nada, instanciamos el objeto 00:00:23
alumno y ya está, instanciamos 00:00:25
el objeto alumno con la clave 00:00:27
y sería esto, en este caso 00:00:29
sin verificar nada más 00:00:31
este método no verifica nada 00:00:33
yo aquí como la excepción además 00:00:35
la había dejado antes como 00:00:37
runtime exception 00:00:39
aquí no me sale ningún error de compilación 00:00:40
si esta excepción 00:00:43
fuera así 00:00:45
si esta excepción fuera así 00:00:46
automáticamente este método 00:00:49
me diría, uy, cuidado que al meter 00:00:51
un nuevo alumno en el map 00:00:53
puede que te salga 00:00:55
la excepción de que el año es negativo 00:00:57
cuidado, entonces pues aquí 00:00:59
haría un try catch 00:01:01
si quiero 00:01:03
hago el throw, lo que sea, lo que me pidan 00:01:07
lo que me pidan 00:01:09
pero vamos, lo que importa es 00:01:10
entender que como este método generaba 00:01:13
una excepción, si es de tipo 00:01:15
exception, aquí me veo en la obligación 00:01:17
de decidir qué hacer con ella 00:01:19
decidir si hay excepción, si quiero que 00:01:21
la propague al de arriba o la capturo 00:01:23
y en ese caso 00:01:25
pues aviso 00:01:26
no se ha podido, muestro 00:01:31
un mensaje por consola, no se ha podido meter en el 00:01:33
map, para que el usuario que llama al 00:01:35
método pues lo sepa, lo que sea 00:01:37
pero bueno, para no tener que arrastrar 00:01:39
ese error, le voy a poner el run time 00:01:41
este, y así ya 00:01:43
Pues nada, insertar sería esto 00:01:47
Nada más 00:01:49
Inserto la clave y el objeto 00:01:50
Y ya está 00:01:52
¿Vale? 00:01:54
Es que luego que me han metido un número negativo 00:01:57
Va a ser una excepción en tiempo de ejecución 00:01:59
Va a ser una excepción en tiempo de ejecución 00:02:01
Bueno, pues entonces 00:02:02
Añadir nota 00:02:05
Bueno, pues añadir nota tenemos que 00:02:06
La ventaja del map es que ahora es 00:02:08
Facilísimo operar 00:02:11
Si en lugar de estar los alumnos en un map 00:02:12
Estuvieran en un set 00:02:15
de alumnos y dentro del objeto alumno 00:02:17
tuviéramos el nif 00:02:20
pues entonces tendríamos que de esa colección 00:02:21
sacar el objeto 00:02:24
correspondiente iterando por ella 00:02:26
etcétera, pero es que aquí no hace falta 00:02:28
porque ya tenemos el método get que yo cojo 00:02:30
el map, le digo sácame 00:02:32
el objeto con esta clave 00:02:34
sácame el objeto con esta 00:02:36
clave, muy bien, ya tenemos el objeto con esa 00:02:38
clave, es mucho más sencillo que 00:02:40
encontrar en una colección 00:02:41
un objeto cuya propiedad es tal 00:02:43
es mucho más fácil 00:02:46
bueno, pues el alumno con ese nif 00:02:47
saca sus notas 00:02:50
y a su nota añade la nueva 00:02:52
y ya está 00:02:54
aquí lo único es que claro 00:02:55
que estas notas 00:02:57
si el alumno está recién creado 00:02:59
y su colección es null 00:03:02
me va a dar null pointer exception 00:03:04
pero claro, eso me di cuenta 00:03:06
la primera vez que lo pruebo 00:03:07
y decimos, ah, cuidado, espera, espérate 00:03:08
en la propiedad notas de alumno 00:03:10
vamos a inicializarla 00:03:13
con una colección vacía, pero no nula, vacía, 00:03:15
para que el alumno recién creado no tenga notas, 00:03:19
pero al menos la colección no sea vacía. 00:03:21
Y así ya nos ahorramos que cuando yo haga el getNotas, 00:03:24
esto ya nunca va a ser nul. 00:03:28
Puede ser una colección vacía, pero nunca nul. 00:03:29
Entonces, ¿que yo le meto la primera de las notas? 00:03:32
Pues ya está, la primera. 00:03:35
¿Que no es la primera, sino que es la siguiente? 00:03:36
Pues la siguiente. Esto va a funcionar siempre. 00:03:38
De nuevo, este método hay una cosa que no está verificando. 00:03:42
que no existe un alumno con este nif 00:03:45
porque si no existe 00:03:47
alumno con ese nif, el get nif 00:03:49
me va a dar null 00:03:51
y entonces aquí me saldría un null pointer exception 00:03:52
entonces este método 00:03:55
podríamos hacer una verificación 00:03:57
que fuera, if alumnos 00:03:59
get nif es diferente de null 00:04:01
entonces ahora 00:04:03
ya sí, haz esto 00:04:05
y si no, pues no hagas nada 00:04:07
muestras un mensajito, el alumno con ese nif 00:04:09
no existe, con lo cual no le puedo añadir la nota 00:04:11
lo que sea 00:04:13
vale 00:04:14
pues entonces, si yo no quiero verificar nada 00:04:16
y simplemente, si el alumno no existe 00:04:21
null pointer exception y ya está 00:04:23
pues esta línea sería suficiente 00:04:25
pero si no quiero que salga 00:04:27
un null pointer exception, pues tendría que hacer 00:04:29
pues eso 00:04:31
¿no? 00:04:32
en ese método no habría notas 00:04:33
en la lista de notas 00:04:35
pero ¿para qué? 00:04:44
para hacer notas 00:04:47
pero ¿para qué le quieres pasar 00:04:49
lista de notas, es que le complicas 00:04:51
la vida al que te está llamando 00:04:53
porque entonces el que te está llamando antes de llamarte 00:04:55
a ti tiene que irse al map, sacar la lista 00:04:57
de notas del alumno, entonces para eso ya que 00:04:59
la tiene, la añade 00:05:01
él directamente 00:05:03
no tiene sentido hacer un método 00:05:04
para añadir notas a una lista 00:05:06
y a ese método le pasas tú la lista 00:05:08
es que entonces ya en el principal te haces 00:05:11
tu NAT en esa lista y ya está 00:05:13
entonces este método es útil si tú 00:05:15
dices, tengo este GIF y tengo esta 00:05:17
nota, añádemelo 00:05:19
y ya está, porque si tienes que pasar tú la lista 00:05:21
antes de llamarlo tienes que 00:05:24
buscarla, encontrarla, pues ya para eso 00:05:25
haces tu ELA 00:05:27
entonces le pasas NIF y nota 00:05:28
que es lo que tú piensas 00:05:32
lo que va a 00:05:34
necesitar pasar el que está sentado 00:05:35
en la secretaría 00:05:37
estos datos son los que tienes de secretaría 00:05:38
el de secretaría no tiene por qué tener 00:05:42
una lista, nada, el de secretaría dice 00:05:43
yo quiero un NIF y una nota nueva 00:05:45
esto es lo que te doy 00:05:48
Esto es lo que te doy. 00:05:49
Tú ya haces dentro lo que quieras. 00:05:50
Pero si me pides que yo te dé la lista de notas 00:05:52
que ya tiene, que no sé cuánto, 00:05:54
pues para eso ya lo hago yo. 00:05:56
Vale, pues le pasamos el NIF, la nota nueva 00:06:00
y él ya pues se busca la vida, 00:06:03
que es coge el alumno con ese NIF, 00:06:04
saca sus notas 00:06:07
y de esas notas añade la nueva. 00:06:08
¿Vale? 00:06:11
Entonces, repito, 00:06:13
esto en tiempo de ejecución 00:06:15
me podría salir null pointer exception 00:06:16
si no hay alumno con este NIF. 00:06:18
Podría salirme null pointer exception 00:06:20
Si yo no quiero que salga eso 00:06:22
Pues hombre, siempre puedo hacer esto 00:06:24
¿No? Si alumnos getNif 00:06:25
Resulta que es igual a null 00:06:31
Pues hombre, pues a lo mejor 00:06:34
Puedes avisar y hacer un retun 00:06:36
Entonces el de secretaría 00:06:38
Que estáis sentados usando ese método 00:06:47
Pues dice, ah, no existe ese alumno 00:06:49
En lugar de salirle un null pointer exception 00:06:51
Que es mucho más feo 00:06:53
No existe alumno y retun 00:06:54
Ala 00:06:57
si no hemos salido por el retune 00:06:58
hemos llegado aquí y entonces ya hacemos esto 00:07:02
bueno, pues ya está 00:07:04
con esto hemos añadido ya notas a un alumno 00:07:10
vale 00:07:12
¿nota media de quién? 00:07:13
del alumno con este NIF 00:07:16
lo mismo de antes 00:07:17
el de secretaría quiere un NIF 00:07:20
y que tú saques la nota media 00:07:22
no quiere además tener que pasarle las notas 00:07:24
hacerla, no, para eso hace la media 00:07:27
entonces le pasas un NIF y el ya 00:07:29
el método hace lo que tiene que hacer 00:07:30
vale, pues ¿qué tendrá que hacer? 00:07:32
Bueno, pues entonces, yo aquí lo he puesto compacto, pero vamos, el alumno con este NIF es este, gracias a que tenemos un map, es facilísimo sacar alumno con ese NIF, ya está, alumno es NIF, esa es la ventaja del map, tengo una clave, automáticamente tengo al objeto con esa clave, lo tengo, 00:07:34
no es como cuando tengo, repito 00:07:54
un set o un list que tengo que 00:07:57
iterar hasta que encuentro el que cumple 00:07:59
esa propiedad, no, tengo 00:08:01
ya, al map le doy la clave 00:08:03
y él me dice, este es el valor asociado a esa clave 00:08:05
vale, bueno 00:08:07
pues el valor 00:08:09
el alumno con esa clave tiene estas notas 00:08:12
tiene estas notas 00:08:15
luego estas son las, el listado de notas 00:08:17
el listado de notas es este 00:08:19
es el listado de notas 00:08:21
Pues yo itero y me hago la media, voy sumando las notas de ese listado, esta es la suma de todas las notas y ahora ya cuando tengo toda la suma la divido entre el total, entre el total de notas que será el tamaño de la colección y ya está. 00:08:23
aquí 00:08:41
más para acá 00:08:47
vale, aquí lo mismo 00:08:50
este método no está verificando 00:08:53
que el nif que me han pasado sea válido 00:08:54
si el nif que yo le paso 00:08:56
no es válido, paz 00:08:58
aquí automáticamente sale un null pointer exception 00:09:00
porque esto es null 00:09:03
y aquí llamamos a esto 00:09:04
entonces si el nif no es válido, paz, null pointer exception 00:09:06
se va para el programa 00:09:08
de nuevo yo podría aquí meter un nif 00:09:09
if alumnos.getNif igual a null 00:09:11
no hay nada que hacer, no hay nota media que sacar 00:09:14
retún cero, ya está 00:09:17
y si no, pues ya hago esto 00:09:18
¿y la nota media 00:09:21
del curso? 00:09:33
¿la nota media del curso? 00:09:36
bueno, pues yo aquí 00:09:38
lo que he hecho es 00:09:39
vale, voy a 00:09:40
ahora ya sí que tengo que iterar 00:09:47
porque necesito 00:09:49
todos los alumnos 00:09:51
cuyo curso es el que me han pedido 00:09:53
todos los alumnos 00:09:55
cuyo curso es el que me han pedido 00:09:57
pues en este caso, ¿cuál es la forma más cómoda de iterar? 00:09:58
vale, me hago yo 00:10:01
un conjunto con las claves 00:10:03
recordad que tenemos 00:10:05
este método 00:10:07
en triset 00:10:08
no, con las claves no, con todo 00:10:17
perdón que lo he dicho mal 00:10:18
aquí tenemos que iterar por el map 00:10:19
vale, pues entonces 00:10:22
para iterar por el map 00:10:24
me hago 00:10:26
este set 00:10:27
que es un set de objetos 00:10:29
que envuelven los pares 00:10:31
vale, pues ya está, me hago este set 00:10:32
y ahora itero por él 00:10:35
itero por él y ahora 00:10:36
para cada 00:10:39
objeto 00:10:41
si el curso 00:10:43
es el que me han dado 00:10:46
pues sumo 00:10:48
la nota media 00:10:50
del alumno con ese nif 00:10:52
vale, entonces a ver si entendéis esto 00:10:54
E es el objeto que envuelve 00:10:58
tanto la clave como el valor 00:11:01
E es el objeto que envuelve tanto la clave como el valor 00:11:04
entonces yo voy iterando por E 00:11:08
entonces, para cada par 00:11:09
que está metido en E, envuelto, para cada par 00:11:14
si el curso del alumno de ese par 00:11:16
porque el alumno lo saco del value, si el curso del alumno es igual al curso 00:11:19
que me han dado, pues ahora tengo que 00:11:22
lo que sumo a la media es la nota media 00:11:25
de ese alumno 00:11:28
entonces la nota media del alumno, ¿cómo la saco? 00:11:29
tengo el método nota media al que tengo que pasar un NIF 00:11:32
a nota media 00:11:34
le paso el NIF de ese alumno 00:11:36
¿vale? o sea, E 00:11:38
es el objeto 00:11:41
que tiene dentro envuelto 00:11:42
tanto el NIF que es la clave 00:11:45
como el alumno que es el valor 00:11:47
este es el NIF 00:11:48
y este es el alumno 00:11:50
tengo este método 00:11:52
que le paso el NIF y me devuelve la nota media 00:11:55
bueno, pues para ese alumno 00:11:57
si su curso es el que corresponde 00:11:59
saco su nota media 00:12:02
y la agrego a la suma total 00:12:04
la agrego a la suma total 00:12:05
¡ay! me falta aquí la división 00:12:07
¿vale? no he hecho la división 00:12:10
entonces he devuelto la suma de todas las notas medias 00:12:12
no he hecho la división 00:12:14
tengo que dividir aquí entre el total de elementos que he sumado 00:12:16
voy a tener que hacer un contador aquí para contar 00:12:19
los que 00:12:23
cada vez que incorporo un sumando nuevo 00:12:26
a la suma, le cuento 00:12:38
y ahora ya me falta esto, claro 00:12:40
vale, pues de nuevo, repito 00:12:44
con el método ese en triset de ahí 00:12:54
con este método 00:12:56
en triset 00:12:59
saco un conjunto 00:12:59
de objetos 00:13:02
que tienen dentro la clave y el valor 00:13:03
que yo saco con getKey y getValue 00:13:06
y ya las uso como me dé la gana 00:13:08
pues las estoy usando 00:13:09
para el alumno 00:13:12
cuyo curso es el que me han dado 00:13:14
este es su NIF 00:13:16
pues uso el NIF 00:13:19
para sacar su nota media 00:13:21
la agrego al sumatorio y le cuento 00:13:22
y luego ya devuelvo 00:13:25
esa suma 00:13:27
entre el total 00:13:30
y ya está 00:13:31
y luego bueno, para comprobar luego en el main que todo funcionaba 00:13:36
en las pruebas que he hecho y tal 00:13:41
pues uno podría incorporar un listal alumnos 00:13:42
y ya está, un listal alumnos 00:13:45
que otra vez estoy recorriendo 00:13:50
Otra vez estoy recorriendo 00:13:51
Listo los alumnos 00:13:53
Para cada alumno 00:13:55
Pues muestro su NIF 00:13:56
Y su nota media, por ejemplo 00:13:59
Bueno, pues nada 00:14:00
Ya subiré esto 00:14:05
Vale, en el aula virtual 00:14:07
Siguiente, ¿qué más tenemos? 00:14:09
Aquí donde ponen el tema 00:14:17
Cuatro colecciones 00:14:19
Enunciar, grito y repaso 00:14:21
Bueno, pues si descargáis eso 00:14:22
Que está ahí 00:14:24
Sí, bueno, incluso ahora mismo 00:14:25
Por ejemplo 00:14:30
¿qué podéis hacer rápidamente? 00:14:31
este sí que es el típico programa rápido 00:14:33
porque no es de gestionar 00:14:35
de alumnos, de no sé qué, que es pesado 00:14:37
un diccionario 00:14:39
un diccionario 00:14:41
yo me quiero llevar mi propio diccionario 00:14:42
pues me voy a hacer mi aplicación diccionario 00:14:45
yo le digo una palabra y me la da en inglés 00:14:46
los datos de los que se va a nutrir 00:14:49
son todos estos 00:14:52
estos son los datos 00:14:53
¿vale? 00:14:56
entonces los tenéis aquí ya, podéis hacer un copia y pega 00:14:59
entonces, a ver 00:15:01
esto cambia la idea 00:15:03
de ejercicio, es un ejercicio más rápido 00:15:05
el tema es, yo quiero hacer un diccionario 00:15:07
mi propio diccionario, porque quiero 00:15:09
que trabaje con la interfaz que yo le hago 00:15:11
en nuestro caso por consola 00:15:14
y él va a estar todo el rato pidiéndome 00:15:15
palabras para traducir, introduce palabra 00:15:17
no sé qué, y me la escribe 00:15:19
en inglés, y así todo el rato, un bucle infinito 00:15:22
un bucle infinito que está todo el rato pidiéndome 00:15:23
palabras para traducir 00:15:25
¿vale? entonces 00:15:28
ahora, ya habría 00:15:29
hay que pensar, vale, los datos del diccionario 00:15:33
¿cuáles son los datos del diccionario? 00:15:35
son todas las palabras de las que tiene traducción 00:15:37
todas las palabras de las que tiene traducción 00:15:40
vamos a suponer que son estas 00:15:41
ese listado que tenéis ahí 00:15:43
entonces, el diccionario se tiene que 00:15:44
nutrir con esos datos 00:15:47
bueno, pues entonces, la forma 00:15:48
más cómoda para trabajar 00:15:51
es que los datos 00:15:53
estén en un map 00:15:55
y haya un listado de pares donde cada par 00:15:56
sea palabra en español, palabra en inglés 00:15:59
palabra en español, palabra en inglés 00:16:02
en inglés, palabra en español, palabra en inglés 00:16:03
porque si los tenemos así 00:16:05
luego el diccionario es facilísimo 00:16:06
tú le das una palabra y él te busca en el map 00:16:08
el valor de esa 00:16:11
palabra, te lo muestra, etc. 00:16:13
y se podría hacer 00:16:15
tanto en la traducción en un sentido como en el otro 00:16:17
en el sentido español 00:16:19
inglés es inmediata, se hace el 00:16:21
get key, en el sentido 00:16:23
inglés español no es 00:16:25
inmediata porque ahora buscamos 00:16:27
por el valor, luego entonces hay que iterar 00:16:29
¿vale? bueno 00:16:31
aquí, ¿cuál es lo más 00:16:33
entre comillas complicado 00:16:36
de este ejercicio? 00:16:37
de un string así de largo 00:16:39
de este string tan largo 00:16:41
que es un pedazo de string 00:16:44
que tiene este formato 00:16:45
palabra en español, guión, palabra en inglés 00:16:47
punto y coma, palabra en español, guión 00:16:50
pues de este string tan largo 00:16:52
sacar los datos 00:16:54
para el mapa 00:16:56
pero para eso tenéis el split, tenéis todo eso 00:16:57
pues venga, vamos a hacer 00:17:00
rápido, antes de irnos, son 10 minutos 00:17:02
este diccionario 00:17:05
inglés español, está en el aula denunciado este 00:17:06
para que copiéis y peguéis ese 00:17:08
ese estilo 00:17:10
en tema 4, en tema 4 al final 00:17:12
pone, no en el tema 00:17:15
perdón, en el de colecciones 00:17:16
el tema de colecciones, que no sé cuál es, el 4, el 5 00:17:18
pues el que sea 00:17:20
en el de colecciones 00:17:22
en el de colecciones 00:17:23
es que no sé cuál es 00:17:26
aquí 00:17:27
al final de todo, donde pone enunciado, ejercicio y repaso 00:17:28
pues es el segundo que hay en esa lista 00:17:33
pues hala, a ver cómo hacéis ese diccionario antes de irnos 00:17:35
hasta luego 00:17:41
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
6
Fecha:
13 de abril de 2024 - 13:54
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
19′ 27″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
94.23 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid