Clase 12-04-24 - 2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Vale, en función de lo que queramos hacer con él, pues interesarán unas propiedades u otras. Pues bueno, vamos a ponerle también el curso en el que está matriculado como un entero, pues curso 1, 2, 3, 4, 5, el curso que sea.
00:00:00
y vamos a ponerle también
00:00:17
una lista de notas
00:00:20
venga, un listado de notas
00:00:28
las notas sin más, sin poner ni la asignatura
00:00:38
a la que están asociadas ni nada
00:00:40
porque estamos haciendo cosas cortitas
00:00:41
que podamos hacer rápidamente
00:00:43
bueno, pues venga, entonces ahora ya este alumno
00:00:46
se pueden hacer un poco más de cosas con él
00:00:55
tiene su nombre, tiene el curso en el que está matriculado
00:00:57
curso 1, 2, 3, 4, 5
00:01:00
y tiene una lista de notas decimales
00:01:02
que se supone que son de sus asignaturas
00:01:05
la lista que sea
00:01:07
y el año en el que ha nacido
00:01:08
entonces bueno, a esta entidad
00:01:10
al menos habría que ponerle
00:01:13
los get y set de las propiedades
00:01:15
que nos faltan
00:01:20
los get y set de las que nos faltan
00:01:21
que son curso y notas
00:01:23
y ahora se ha quedado aquí
00:01:25
el crear alumno
00:01:27
pues este crear alumno
00:01:29
se ha quedado solamente con dos datos
00:01:31
vamos a crear al alumno
00:01:34
poniéndole también el curso
00:01:37
y las notas en principio
00:01:41
se quedan a null y así irían añadiendo
00:01:43
vamos a añadir al método crear alumno
00:01:46
vamos a añadir también el curso
00:01:49
le añadimos el curso
00:01:51
entonces el constructor famoso privado
00:01:55
también le añadimos el curso
00:01:58
le añadimos el curso al constructor privado
00:02:01
entonces
00:02:06
vale, he añadido al constructor el curso
00:02:08
nada más
00:02:15
entonces a crear alumno
00:02:17
le paso ese tercer parámetro
00:02:18
y cuando llamo aquí al constructor
00:02:21
le paso también el curso
00:02:23
vale, es decir, he modificado el alumno
00:02:26
para que refleje dos propiedades más
00:02:29
el curso en el que está
00:02:31
y un listado de notas decimales
00:02:34
vale
00:02:35
entonces, ahora
00:02:37
la aplicación va a trabajar
00:02:39
con alumnos, vale, va a trabajar
00:02:44
con alumnos, entonces el
00:02:46
dato que identifica unívocamente
00:02:48
a los alumnos
00:02:50
y por el que se va
00:02:51
a operar, resulta que es
00:02:54
el NIF
00:02:56
y el NIF
00:02:58
no está aquí dentro
00:03:00
pero vamos a optar
00:03:01
por guardar nuestro listado de alumnos
00:03:04
entonces en una estructura de qué tipo
00:03:08
en una estructura map
00:03:10
que cada par sea nif del alumno
00:03:12
objeto alumno con los datos
00:03:14
nif del alumno, objeto alumno con los datos
00:03:16
entonces vamos a hacernos
00:03:18
una clase
00:03:20
que es la que tenga los datos
00:03:22
y tenga la operativa sobre los datos
00:03:24
entonces por ejemplo
00:03:25
vamos a hacernos aquí un paquete
00:03:28
un paquete de datos, le voy a llamar
00:03:30
bueno, no es un nombre que me guste mucho
00:03:35
porque es muy genérico, pero bueno
00:03:36
datos
00:03:38
y vamos a hacer aquí una clase
00:03:39
datos
00:03:42
que va a tener
00:03:48
los datos con los que trabajamos
00:03:50
que en nuestro caso es el conjunto de alumnos
00:03:52
y luego los métodos
00:03:55
que vamos a hacer con esos alumnos
00:03:57
vamos a hacer esta estructura
00:03:59
bueno, pues hemos dicho
00:04:00
si la clave primaria de mis alumnos
00:04:02
esa propiedad por la que yo voy a operar
00:04:05
va a ser el NIF
00:04:09
y el NIF no está en objeto alumno
00:04:11
aquí es que no tengo alternativa
00:04:13
la estructura de datos que se adecua
00:04:14
es un map
00:04:19
mis datos van a estar en un map
00:04:20
y este map
00:04:24
¿de qué dos tipos será?
00:04:27
Pues si el nif es string, será string y el valor alumno.
00:04:32
La clave será el nif, que es un string, y el valor será el objeto alumno correspondiente.
00:04:37
Vale, aquí están mis alumnos.
00:04:44
Los puedo ya dejar instanciados.
00:04:47
Sí.
00:04:50
Vale.
00:04:52
Para cambiar, vamos a hacer un trimap.
00:04:53
Vamos a hacer un trimap.
00:04:56
Entonces, este map que sea un trimap.
00:04:58
importamos
00:05:00
map, importamos
00:05:13
alumno
00:05:15
e importamos trimap
00:05:16
vale, desde el momento en que
00:05:19
vemos aquí que instanciamos un trimap
00:05:24
ya se nos enciende la primera alerta
00:05:26
que la primera alerta es
00:05:28
uy, ¿qué significa que eso sea un trimap?
00:05:29
significa que las claves
00:05:32
y solo las claves
00:05:34
porque tenemos
00:05:35
las claves por un lado y los valores
00:05:37
por otro y cada clave asociada a un valor
00:05:40
eso está claro, pero las claves están por un lado
00:05:42
los valores por otro, cada clave asociada a un valor
00:05:44
bueno, pues el conjunto
00:05:46
de las claves
00:05:48
ahora ya sabemos que es un triset
00:05:49
sabemos que es un triset
00:05:51
porque en un trimap las claves
00:05:53
se almacenan en un triset, entonces si las claves
00:05:56
van en un triset
00:05:58
para que ese triset pueda funcionar
00:05:59
correctamente tal y como está programado por dentro
00:06:01
ya sabemos que entonces
00:06:04
el tipo al que pertenecen las claves
00:06:05
tiene que ser ordenable, si lo es
00:06:07
ya por sí mismo fenomenal, si no lo es
00:06:10
le tenemos que dar nosotros
00:06:12
una ordenación por encima
00:06:13
nuestras claves que son
00:06:16
string, los string son
00:06:17
ya ordenables por sí mismos, pues sí
00:06:19
tenemos la suerte de que sí, porque los
00:06:21
string implementan
00:06:23
comparable, tienen un compare
00:06:25
tú, ese compare tú en particular es el orden
00:06:27
alfabético, entonces
00:06:29
ya está, no tenemos nada que hacer, ya está todo
00:06:31
fenomenal
00:06:33
con lo cual a partir de aquí
00:06:34
me da igual un trimap
00:06:37
que un hashmap
00:06:39
que me da lo mismo
00:06:41
el uso es igual
00:06:43
ya es satisfecho
00:06:44
las características necesarias
00:06:46
para instanciarlo, ya las tengo
00:06:49
y es que el tipo de las claves
00:06:50
sea ordenable, ya lo tengo, a partir de ahí el uso es el mismo
00:06:53
si esto fuera un hash map
00:06:55
en vez de
00:06:57
un trimap, habría que
00:06:58
satisfacer otros requisitos, que serían
00:07:01
cuáles, que en el tipo
00:07:03
de las claves, al ser un hash set
00:07:06
estuviera el hash code y el equals
00:07:08
en string también está
00:07:10
el hash code y el equals
00:07:12
con lo cual, de poner un trimap
00:07:13
a poner un hashmap, de aquí hacia abajo
00:07:16
ya a partir de ahí
00:07:18
ya es igual, el uso es lo mismo
00:07:20
el put, el get, todo
00:07:22
es lo mismo, ya va a funcionar
00:07:24
por dentro correctamente
00:07:26
¿cuál va a ser? lo que pasa es que
00:07:27
puedo ver diferencias a ojo
00:07:30
cuando ejecute, la única diferencia
00:07:32
que voy a ver es, si recordáis
00:07:34
que los conjuntos triset
00:07:36
cuando iterábamos por ellos
00:07:38
me aparecía todo ordenado
00:07:39
según el criterio de ordenación
00:07:42
entonces si yo hago el método ese famoso
00:07:43
que me devuelve el conjunto de las claves
00:07:46
que era el keyset
00:07:48
e itero por el keyset
00:07:50
va a dar la casualidad
00:07:52
de que me van a aparecer ordenados
00:07:53
alfabéticamente por DNI
00:07:56
va a ocurrir eso
00:07:58
y si yo tengo aquí un hashMap
00:07:59
e itero por las claves, no van a aparecer
00:08:02
ordenadas por orden alfabético, es la única diferencia
00:08:04
pero nada más, todo lo demás va a ser
00:08:06
igual, entonces bueno
00:08:08
pues si resulta que aquí
00:08:10
en lugar de DNI, pues a lo mejor fueran nombres
00:08:12
o fuera algo, y a mí me viene bien
00:08:14
que a la hora de iterar me aparezcan
00:08:16
ordenados alfabéticamente, si me viene bien eso
00:08:18
porque tengo que sacar listados
00:08:20
y no tengo que ordenar porque ya tengo
00:08:22
el orden hecho, pues si me viene bien
00:08:24
que esté ese orden, pues mira, el trimap
00:08:25
comodísimo, porque es que ya en la iteración
00:08:28
me aparecen ordenados
00:08:30
pues entonces no tengo ni que ordenar luego
00:08:31
en este caso son DNIs
00:08:34
pues entre que aparezca ordenado y no
00:08:35
tampoco, pero bueno
00:08:37
Metemos el trimad y ya está
00:08:39
Vale, mis datos van ahí
00:08:41
Y ahora ya, ¿qué ocurre?
00:08:43
Estos datos van a ser los datos
00:08:46
Con los que trabaje
00:08:47
La aplicación
00:08:49
Datos, una única instancia de estos datos
00:08:51
Solo una
00:08:54
Entonces, hombre
00:08:54
Pongámosle el static
00:08:56
¿Vale?
00:08:59
Uf, que
00:09:03
Ya sé que se puede poner así
00:09:03
Pero es que me hace daño en la vista
00:09:07
Ver ese orden
00:09:08
me gusta mucho más este
00:09:09
el modificador de acceso
00:09:10
siempre el primero
00:09:13
no es que sea estricto
00:09:15
pero hombre es lo que se ha hecho toda la vida
00:09:17
y si lo ves cambiado
00:09:19
te da un poco de angustia
00:09:20
modificador de acceso el primero es más habitual
00:09:22
luego ya el si es estático o no
00:09:25
y luego ya el tipo de dato de retorno
00:09:27
si es final o no
00:09:29
pues también después del estático
00:09:31
pero vamos no es que el orden tenga que ser así
00:09:32
venga pues ya está
00:09:35
Y ahora ya, ¿qué queremos hacer con los alumnos?
00:09:37
¿Qué queremos hacer con los alumnos?
00:09:41
Pues uno ya lo decide, pues entonces
00:09:42
Vamos a hacer estos
00:09:44
Métodos de aquí
00:09:46
¿Vale?
00:09:48
Los dejo en blanco para que los hagáis ahora
00:10:04
Rápidamente
00:10:06
Vale, hago insertar para que luego
00:10:07
En el main cuando lo podáis probar
00:10:10
Pues
00:10:12
Entonces este también ya podemos avanzar
00:10:12
Que será estático, claro, y si lo quiero llamar desde fuera
00:10:16
Pues lo hago public
00:10:18
porque si no lo hago public lo voy a poder llamar desde fuera
00:10:20
venga, insertar un objeto
00:10:21
alumno en el map
00:10:24
vale, ahora
00:10:26
¿qué vamos a hacer también?
00:10:28
pues vamos a
00:10:30
ponerle, añadirle
00:10:31
una nota más, por ejemplo
00:10:34
podemos hacer esta
00:10:36
funcionalidad, add nota
00:10:38
entonces al alumno
00:10:47
con el nif correspondiente
00:10:49
que yo le de como
00:10:51
valor de para, le vamos
00:10:53
a añadir esta nota
00:10:55
Esta nota le vamos a añadir
00:10:56
Para que tenga una nota más
00:10:58
Es otra funcionalidad que podemos hacer con los datos
00:11:00
A un alumno con un NIF le añado una nota más a su listado de notas
00:11:03
¿Qué otra funcionalidad puede ser interesante para esta aplicación?
00:11:07
Pues por ejemplo, calcular nota media de un alumno
00:11:13
Está claro
00:11:16
La nota media que la devuelva como valor de retorno
00:11:17
Yo le doy un alumno
00:11:23
Y de ese alumno me devuelve
00:11:27
La nota media que tiene
00:11:35
¿Vale?
00:11:36
Para que no me salga error de compilación
00:11:38
Le voy a poner aquí retuncero
00:11:40
Pero luego ya habrá que poner lo que sea, claro
00:11:41
Y ahora, ¿qué otra cosa
00:11:43
Tenía yo en mente?
00:11:46
Vale
00:11:48
Pues dado un curso
00:11:48
Dado un curso académico
00:12:01
Dado un curso, el 1, el 2, el 3, el 4
00:12:04
Pues la nota media
00:12:06
De ese curso
00:12:08
O sea, de todos los alumnos, de todas sus notas
00:12:09
Nota media del curso
00:12:13
Dando ahora el qué
00:12:27
Dando un curso
00:12:29
Yo doy un curso y la nota media del curso
00:12:29
Y le voy a poner aquí también
00:12:32
Reto un cero
00:12:37
Bueno, pues entonces
00:12:38
Los datos están aquí
00:12:43
Hay una razón por la que hemos elegido que estén aquí los datos
00:12:45
Y esa razón
00:12:48
Nos ha hecho decidir un map
00:12:50
Un trimap, porque nos gustaba el orden de las claves
00:12:52
Y ya está, los datos están ahí
00:12:55
Esos son los datos
00:12:56
y ahora, ¿qué queremos hacer con esos datos?
00:12:57
esto
00:13:00
quiero poder insertar un alumno nuevo
00:13:00
quiero poder añadirle nota a un alumno
00:13:03
y quiero poder sacar las medias
00:13:06
tanto de un alumno como de un curso
00:13:08
eso es lo que por ahora
00:13:10
quiero hacer
00:13:12
¿vale? pues venga
00:13:12
eh, haced estos cuatro métodos
00:13:15
entonces, luego ya habrá un main
00:13:18
que ya llame a esto
00:13:19
¿no? la idea es que luego ya
00:13:21
uno
00:13:23
pues podría probar esto
00:13:24
en un main, llamémosle 2
00:13:28
por ejemplo
00:13:31
en un main 2, pues uno ya
00:13:32
podría probar estos métodos
00:13:35
aquí hombre, lo ideal sería hacer un menú
00:13:37
¿qué desea hacer? insertar alumno, no sé cuándo
00:13:39
no sé qué, pero vamos, dentro de ese menú
00:13:41
pues lo que al final va a acabar haciendo es esto
00:13:43
insertar alumno
00:13:45
añadir nota
00:13:47
al alumno
00:13:53
ahora ya desde el main
00:13:54
uno puede hacer las pruebas de estos métodos
00:13:57
que ha hecho, que son métodos estáticos
00:13:59
puedo hacer las pruebas, o ya hacer
00:14:01
la propia aplicación, con un
00:14:03
menú, etcétera, pero bueno, ahora mismo
00:14:05
nuestro trabajo, ahora mismo
00:14:06
es
00:14:09
que hagáis
00:14:09
estos cuatro métodos de aquí
00:14:12
el primero es
00:14:15
inmediato, vale
00:14:16
pues venga, esos cuatro
00:14:18
y vamos a completar lo de los turnos
00:14:27
entonces, vale
00:14:31
¿Quién más de los que no están aquí tiene
00:14:53
FOL? Claudia tiene FOL, ¿verdad?
00:14:56
Vale
00:15:02
Vale, Claudia
00:15:02
Que se apellida, que estoy hoy
00:15:05
¿Cómo se apellida Claudia?
00:15:08
Claudia Guerrero, eso
00:15:13
Vale, ¿quién más hemos
00:15:14
Dicho que tenía FOL?
00:15:19
Alejandro García tiene FOL
00:15:20
Claudia Guerrero, vale, Alejandro García
00:15:22
¿Quién más?
00:15:31
David Jiménez también, ¿no?
00:15:35
David Jiménez también
00:15:38
¿De los tuyos esto de atrás?
00:15:39
Edison
00:15:50
Vale, Edison
00:15:50
Claro, como tiene un segundo nombre
00:16:04
que es Edison Patricio, el apellido se me olvida
00:16:06
¿Cuál es el apellido de Edison?
00:16:09
Ya, a ver, esperamos a
00:16:13
Edison
00:16:15
y luego teníamos
00:16:17
A Daniel Gallego, hemos dicho, ¿no?
00:16:19
Porque a Andoni Ferrero no
00:16:20
Ah, también
00:16:21
Bueno, nos hemos pasado casi
00:16:23
Yo creo que Edison es García
00:16:26
Edison García, creo, era lo mismo
00:16:30
Daniel Gallego, Andoni
00:16:32
Pues sí que tenéis fall en este curso
00:16:34
Un montón de gente
00:16:38
Uno, dos, tres, cuatro
00:16:39
Cinco, seis, siete
00:16:42
Ocho, nueve, diez, once
00:16:44
Vale, bueno
00:16:46
Edison
00:16:47
vale, y alumnos entonces que me faltan
00:16:49
son de esta primera fila, estáis todos
00:16:54
colocados
00:16:56
de aquí también
00:16:56
de ahí
00:16:59
voy a pasar lista
00:17:01
y así
00:17:08
ah, perdón, tienes toda la razón
00:17:09
claro, se me ha olvidado
00:17:18
Sí, sí, sí, sí, claro. Insertar alumno, hay que darle el NIF, claro. Sí, sí. Falta un dato, claro. Efectivamente. El NIF y el objeto alumno con los datos. Claro, a ver, es que aquí lo natural sería insertar alumno. Y aquí realmente en un, ah.
00:17:19
Bueno, es que el map ya tiene acceso a él
00:17:37
Porque es una variable estática de la propia clase
00:17:43
Puedes acceder directamente
00:17:45
No hace falta
00:17:47
Este método puede acceder aquí
00:17:48
Sin problema
00:17:50
Vale, entonces
00:17:51
Sigue estando pausado, ¿no?
00:17:53
Eso
00:17:58
Claro, se me había olvidado
00:17:59
A ver, aquí en realidad
00:18:00
Este método
00:18:01
Como este método se supone que es el método
00:18:03
Que va a usar el usuario directamente
00:18:05
esto verdaderamente en condiciones
00:18:07
normales, lo que aquí se pasaría
00:18:09
serían los datos del alumno. Y ya insertar
00:18:11
al alumno lo crearía dentro. O sea, esto realmente
00:18:13
sería mucho mejor.
00:18:15
Si le ponemos string alumno,
00:18:17
el resto de datos del alumno
00:18:20
que son string nombre,
00:18:21
el curso
00:18:26
y el año. Porque las notas
00:18:27
hemos dicho que se le crea como nombre. O sea,
00:18:31
este método estaría mejor.
00:18:33
Y ahora aquí este
00:18:36
que haga lo que sea. Porque
00:18:37
Que el que llama a este método igual no tiene acceso a la clase alumno.
00:18:39
El que llama a este método puede ser una interfaz gráfica que recoge los datos
00:18:43
y llama al método para pasárselos, pero puede no tener ni acceso a la clase alumno.
00:18:46
Entonces, este método está mejor así.
00:18:52
Pasas los datos y este hace dentro.
00:18:55
Entonces, para las cabeceras, para las APIs que hemos llamado,
00:19:04
la clase alumno debería ser transparente.
00:19:07
Es dentro donde ya sí que se usa.
00:19:09
No, porque inicialmente se crean con notas vacías.
00:19:17
Luego ya hay un método de añadir nota para añadirla
00:19:19
Uy, yo no he parado esto
00:19:22
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 5
- Fecha:
- 13 de abril de 2024 - 13:53
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 19′ 25″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 93.14 MBytes