Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 04-03-24 - 1 - 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, a ver, recordad
00:00:00
la mini aplicación en la que estábamos
00:00:03
para repasar esto de listas
00:00:05
para revisar esto de listas
00:00:06
recordad que en esta
00:00:08
aplicación que estábamos
00:00:11
estábamos trabajando
00:00:12
con silencio
00:00:14
¿por qué estáis hablando todos
00:00:17
entre vosotros?
00:00:18
Andoni
00:00:21
¿cómo que no?
00:00:22
¿estarás cantando? ¿movíais la boca?
00:00:25
silencio
00:00:27
el ruido de fondo me distrae
00:00:32
vale, pues entonces
00:00:35
esta aplicación nuestra trabajaba
00:00:38
con un conjunto de alumnos
00:00:40
¿vale?
00:00:42
recordad siempre, cuando uno
00:00:45
hace una aplicación, aunque esa parte
00:00:46
la obviemos
00:00:48
yo insisto en ello continuamente porque es
00:00:49
la parte más importante del desarrollo
00:00:52
la parte más importante del desarrollo
00:00:54
Claudia, también está previo a reírse
00:00:56
silencio
00:00:58
la parte más importante del desarrollo
00:01:01
en realidad no es la que estamos haciendo
00:01:04
aquí nosotros
00:01:06
porque esa casi que
00:01:07
si tú tienes claro lo que quieres hacer casi que te la hace
00:01:09
echar GPT, esa no es la más importante
00:01:12
la importante y en la que echar
00:01:14
GPT no te sustituye
00:01:16
es en entender exactamente
00:01:17
lo que el cliente quiere
00:01:20
esa es la parte más importante
00:01:22
en entender exactamente
00:01:24
cuál es su material de trabajo
00:01:26
qué necesita gestionar, qué requisitos son los que necesita satisfacer para cubrir sus necesidades.
00:01:27
Esa es la parte más importante del desarrollo.
00:01:35
Entonces, siempre hay que contextualizar el problema ahí,
00:01:39
decir, pero vamos a ver qué estoy gestionando yo, qué necesito hacer.
00:01:43
Y para todo eso se dedicará el tiempo que haga falta.
00:01:46
Se describirá, se tomarán notas, se tratará de entender el problema en profundidad,
00:01:49
se pondrá en
00:01:54
se hablará
00:01:56
con el cliente todas las veces que haga falta hasta tenerlo
00:01:58
claro, se le harán
00:02:00
prototipos, interfaces gráficas
00:02:02
este es el tipo de aplicación que tú quieres ver, etc
00:02:04
vale, bueno pues en nuestro
00:02:06
caso se trataba de
00:02:08
una secretaría que quería gestionar
00:02:10
alumnos, entonces
00:02:12
nuestro volumen de datos
00:02:14
era un conjunto de alumnos
00:02:15
lo normal entonces es diseñar
00:02:17
unas tablas en una base de datos
00:02:20
alumnos, asignaturas
00:02:22
relaciones entre alumnos, asignaturas
00:02:24
de las que está, vale, eso que estáis
00:02:26
tratando en base de datos
00:02:28
¿vale? base de datos relacionales
00:02:30
que son las que se siguen utilizando
00:02:32
bueno, en nuestro caso
00:02:33
la parte de poner en contacto la base
00:02:35
de datos con la aplicación no la sabemos
00:02:38
hacer todavía, esa ya la haremos el año
00:02:40
que viene, con lo cual nuestros
00:02:42
datos ya van a estar directamente en
00:02:44
la aplicación, ¿y cuáles
00:02:46
iban a ser nuestros datos? un montón de
00:02:48
alumnos. Un montón de alumnos, pues
00:02:50
ala, aquí están, un montón de alumnos.
00:02:52
Un montón de alumnos aquí. Ahora ya
00:02:55
no nos hace falta un array porque
00:02:58
es engorroso, es lo más
00:02:59
eficiente del mundo y lo mejor, por supuesto,
00:03:02
computacionalmente sí,
00:03:04
pero es engorroso
00:03:06
para programar con él.
00:03:07
Engorroso para programar. Pues entonces
00:03:10
una lista, ¿vale?
00:03:12
¿Qué implementación? Venga, una lista enlazada
00:03:14
que es muy buena y muy estupenda
00:03:16
para meter y sacar.
00:03:17
¿vale? Para consultar un ArrayList,
00:03:21
pero para meterse acá un LinkedList. Pues este
00:03:23
es nuestro volumen
00:03:25
de datos, los alumnos.
00:03:27
Ahora, ¿y esos alumnos, qué
00:03:29
nos interesa de ellos? Pues
00:03:31
después de hablar con el cliente, que en este caso
00:03:33
es el secretario de la secretaría, mil veces
00:03:35
nos ha dicho, lo único que yo quiero
00:03:37
de los alumnos, la única información que yo
00:03:38
necesito, es su número de matrícula,
00:03:41
su nombre, su edad y las denuncias de las que está matriculado.
00:03:43
Pues de ahí viene este diseño
00:03:46
de clase, que hemos tenido la
00:03:47
suerte de que no depende de otras
00:03:49
clases, podría depender de
00:03:51
otras, porque la asignatura
00:03:53
a lo mejor me dice el secretario, oye de cada asignatura
00:03:55
no me basta el nombre
00:03:57
de una asignatura, además
00:03:59
del nombre, necesito saber
00:04:01
los créditos que tiene
00:04:03
lo que cuesta su
00:04:04
matrícula, lo que sea, pues
00:04:07
entonces tendríamos que hacer otra
00:04:09
clase, asignatura
00:04:11
con sus propiedades, nombre
00:04:13
número de créditos, etcétera
00:04:15
este list sería de asignatura
00:04:17
entonces ya tendríamos un modelo de clases
00:04:19
con dos clases, alumno y asignatura
00:04:22
¿vale? y ya estaríamos en el diseño
00:04:24
en nuestro caso lo hemos simplificado porque lo único
00:04:26
que queríamos es usar esta
00:04:28
aplicación pequeñita para
00:04:30
poner ejemplos de los métodos de las listas
00:04:32
solamente para eso, pues en este
00:04:34
caso alumno no depende de ninguna otra clase
00:04:36
solamente de string, pero string ya está hecha
00:04:38
no tenemos que hacerla, ¿vale? como asignaturas
00:04:40
pueden ser muchas, pues de nuevo una lista
00:04:42
una array, bueno una array está
00:04:44
muy bien, de nuevo
00:04:46
pero engorroso para programar
00:04:47
maravilloso para ejecutar
00:04:50
lo mejor del mundo
00:04:52
si lo hiciéramos todo con Array
00:04:53
los programas serían muchísimo mejores
00:04:54
pero engorrosos en el momento
00:04:56
de estar sentado que quedan
00:04:59
y como ahora los ordenadores
00:05:00
son muy rápidos
00:05:02
pues pesa más la vaguería
00:05:04
y decir mira
00:05:07
voy a lo fácil que es trabajar
00:05:08
con estas clases
00:05:10
voy a lo fácil a la hora de programar
00:05:12
aunque computacionalmente sea peor que un Array
00:05:14
Porque total
00:05:17
Si el ordenador va a ser muy rápido y lo va a ejecutar bien
00:05:18
Bueno, pues entonces
00:05:21
Una lista de asignaturas
00:05:24
Los get y los set y ya está
00:05:25
Y luego ya los requisitos
00:05:27
Que nos había dicho
00:05:30
El secretario que quería hacer
00:05:32
Pues en principio eran los que habíamos
00:05:33
Escrito por aquí
00:05:35
En su momento, esto de aquí
00:05:38
Y eso estábamos haciendo el otro día, ¿verdad?
00:05:39
Bueno, pues entonces
00:05:42
Vámonos al método
00:05:43
¿Qué métodos habíamos hecho?
00:05:45
mostrar datos de un alumno dado su matrícula.
00:05:48
Pues nada, habíamos recorrido la colección,
00:05:51
la habíamos recorrido y una vez que habíamos encontrado uno
00:05:53
con esa matrícula, mostrábamos los datos.
00:05:55
Vale, bueno, los devolvíamos.
00:05:58
Habíamos usado este método, mostrar datos,
00:06:01
para ver diferentes formas de recorrer una colección,
00:06:03
una lista.
00:06:08
El for de índice, a través de este método get,
00:06:09
me da todos los alumnos de la lista.
00:06:12
el for each
00:06:15
el for each
00:06:17
de esta manera
00:06:19
¿vale? en el cual a
00:06:20
en cada iteración
00:06:23
va siendo una copia de cada uno
00:06:24
de los elementos de esta lista
00:06:27
¿vale?
00:06:29
menos eficiente
00:06:31
que el for the índice
00:06:32
porque aquí trabajo directamente
00:06:34
con una
00:06:37
con la referencia
00:06:38
al objeto de la lista
00:06:41
que es esta
00:06:43
aquí trabajo con una copia
00:06:44
de la referencia, apunto al mismo sitio
00:06:47
pero apunto a través de una copia
00:06:49
¿vale? ya lo vimos con los arrays
00:06:51
pero es cómodo, es cómodo de escribir
00:06:53
y ya está
00:06:55
y el literador, que es la opción
00:06:56
más segura para recorrer
00:06:59
una lista
00:07:01
o una colección en general
00:07:02
cuando estamos trabajando
00:07:05
con la programación multilo, etc.
00:07:06
entonces el literador
00:07:10
otra forma de recorrerla
00:07:12
ya vimos también cómo funcionaba
00:07:13
genero el objeto iterador
00:07:14
que es una especie de puntero
00:07:16
que va avanzando mediante este método
00:07:18
va avanzando
00:07:20
y en cada avance
00:07:21
me devuelve un alumno
00:07:23
de esa colección
00:07:26
y como este método me dice
00:07:27
si tengo otro más o no
00:07:29
pues lo usamos como condición del while
00:07:31
bueno pues
00:07:33
eso en cuanto al método
00:07:35
mostrar datos
00:07:37
que lo usamos
00:07:38
para ver tres diferentes maneras
00:07:41
De recorrer la lista
00:07:43
Vale, bueno, insertar alumno
00:07:44
Que lo único que hacía era añadir el alumno a la lista
00:07:47
Y ya está
00:07:49
Matricular alumno
00:07:50
Pues recorríamos
00:07:53
Hasta que encontrábamos un alumno
00:07:54
Con esa matrícula y cuando lo encontrábamos
00:07:58
Le añadíamos su asignatura a la lista de asignaturas
00:08:00
Luego matricular alumno
00:08:02
Era sencillo
00:08:04
Vale
00:08:06
Entonces este método
00:08:07
Este método
00:08:11
es sencillo, ahora que ya
00:08:14
estáis muy familiarizados con todo
00:08:17
y ya tenéis mucha soltura
00:08:19
si
00:08:20
uno ve este método así de golpe y porrazo
00:08:22
matricular alumno
00:08:25
con este número de matrícula
00:08:26
de la asignatura que yo doy aquí
00:08:29
entonces soy los
00:08:31
jefes y dicen, ah ya tengo el método
00:08:33
te lo enseño, así, ala
00:08:35
y ya tengo el método hecho
00:08:37
¿le haríais algún comentario?
00:08:39
este código como tal
00:08:50
bueno, hace lo que tiene que hacer, recorre esta lista
00:08:51
posición por posición, cuando encuentra un alumno
00:08:56
cuyo número de matrícula es igual al que me han dado, pues coge las asignaturas
00:09:01
de ese alumno y le añade la nueva
00:09:05
pero ¿le haríais algún comentario al que hizo este método?
00:09:07
exacto, yo si le haría un comentario le diría, oye cuidado, este método
00:09:16
que peligroso es, porque siempre
00:09:19
que hay un objeto que llama
00:09:24
algo, si ese objeto
00:09:25
existe la posibilidad de que sea null
00:09:28
ya sabéis que sale un null
00:09:30
pointer exception y eso que hace
00:09:32
para la aplicación, no es que te dé
00:09:33
un error y no te lo
00:09:36
haga y la aplicación siga ofreciéndote
00:09:38
el menú, no, es que la aplicación se ha
00:09:40
roto, se ha parado, se ha roto
00:09:42
y encima te muestra
00:09:43
unas líneas rojas y se ha roto
00:09:45
entonces eso es lo último que queremos cuando
00:09:47
entregamos una aplicación, que pase algo
00:09:49
que la pare
00:09:51
y que no puedas trabajar
00:09:52
y que tengas que llamar al servicio
00:09:55
técnico y decir, oye, lánzame la aplicación otra vez
00:09:58
porque es que esto no funciona, no queremos eso
00:10:00
entonces, hombre, si es un comentario
00:10:01
pues que estaría bien hacerle, decirle, oye
00:10:03
cuidado con el posible null
00:10:05
pointer exception
00:10:07
si la lista de alumnos
00:10:08
no existe
00:10:12
todavía, si es null
00:10:14
cuidado
00:10:15
¿vale?
00:10:16
entonces, bueno, esto para que nos vayamos acostumbrando
00:10:20
a ver estas cosas
00:10:22
por ejemplo uno podría hacer esto
00:10:23
si alumnos
00:10:25
es igual a null
00:10:28
porque vamos a ver
00:10:29
este método puede estar
00:10:32
dentro de una aplicación donde
00:10:34
alumnos siempre se inicializa
00:10:36
y todo eso, pero eso
00:10:38
este método no lo sabe
00:10:40
este es un método que le llamará a quien quiera
00:10:41
y él no tiene ni idea de quien le va a llamar
00:10:44
le va a llamar una clase que ha hecho
00:10:46
esa otra persona
00:10:48
y este no tiene por qué saber
00:10:49
que el que le llame
00:10:51
seguro que ha inicializado a alumnos
00:10:53
no tiene por qué saberlo
00:10:55
entonces tiene que protegerse de eso
00:10:56
un método cuanto más protegido esté
00:10:58
de excepciones mejor
00:11:00
entonces aquí
00:11:01
pues por ejemplo
00:11:03
no estaría mal hacer algo así
00:11:05
que alumnos resulta que no se ha inicializado
00:11:06
porque no
00:11:12
bueno porque la aplicación
00:11:13
que está usando este método
00:11:15
no lo inicializa
00:11:16
hasta que no insertas un alumno al principio
00:11:18
lo que sea
00:11:21
pues entonces en este caso
00:11:21
1 es igual a null
00:11:23
aquí y ya está
00:11:24
y aquí que pondríamos
00:11:37
si
00:11:38
y aquí que palabrita
00:11:39
mágica pondríais
00:11:43
return
00:11:45
esa es la palabra magia que pondríais ahí
00:11:48
return
00:11:51
se acabó el método
00:11:53
return fuera
00:11:54
si llegamos aquí
00:11:55
es porque efectivamente alumnos no es null
00:11:58
con lo cual null pointer
00:12:01
exception ya no vas a tener
00:12:03
puede ser que encuentres al alumno o que no lo encuentres
00:12:04
pero al menos null pointer exception
00:12:07
no vas a tener
00:12:09
¿vale?
00:12:10
esto que yo he puesto
00:12:16
aquí, en realidad es un poco
00:12:17
feo, porque yo estoy confiando
00:12:19
en que el que ejecuta la aplicación
00:12:21
tenga una consola
00:12:23
para ver los mensajitos
00:12:24
pero es que, con lo que
00:12:26
sabemos nosotros ahora, no tengo otra forma
00:12:29
de comunicarme con él, no tengo otra manera
00:12:31
lo normal es que
00:12:32
esto se enviara a un fichero de log
00:12:35
pero nosotros no sabemos manejar los ficheros de log
00:12:37
todavía y nada de eso
00:12:39
pero si sabéis lo que es un fichero
00:12:40
de log en general
00:12:43
cuando una aplicación se está ejecutando
00:12:44
esa aplicación se está ejecutando
00:12:47
le pueden pasar cosas
00:12:49
pues de repente se ha conectado un usuario
00:12:51
ahora ha hecho un acceso
00:12:53
ha hecho un acceso inválido a la base de datos
00:12:54
entonces la aplicación a la vez que va
00:12:57
ejecutando cosas va enviando
00:12:59
a un fichero un registro
00:13:01
de lo que va haciendo, un ficherito
00:13:03
es transparente para el que está usando la aplicación
00:13:04
el que está usando la aplicación no sabe
00:13:07
pero la aplicación
00:13:09
va mandando mensajitos a un fichero
00:13:10
que se quedan ahí guardaditos
00:13:13
entonces, ¿qué ocurre si de repente
00:13:15
te llama a ti alguien y dice
00:13:17
oye, que la aplicación ha fallado, a las 11 y 25
00:13:18
me ha fallado
00:13:21
pues tú te vas a ese ficherito
00:13:21
donde se ha quedado un registro de todo lo que ha pasado
00:13:24
y a lo mejor ves
00:13:26
11 y 25, acceso inválido
00:13:28
de usuario y contraseña, yo que sé
00:13:31
lo que sea, y le dices, ah pues es que
00:13:33
a las 11.25 pasó esto
00:13:35
entonces es la manera normal
00:13:36
de llevar un registro
00:13:39
de cuando las cosas no han ido bien
00:13:41
lo que pasa es que nosotros no sabemos crear ficheros de logs
00:13:42
todavía desde una aplicación
00:13:45
luego la información de que no hay
00:13:46
alumnos creados, la mando por
00:13:49
consola ya
00:13:51
pero vamos, a mi lo que me importa ahora
00:13:51
es que vayáis viendo situaciones
00:13:57
peligrosas, según veáis el código
00:13:59
y esta es una situación peligrosa
00:14:01
este método está asumiendo
00:14:03
que alumnos es diferente de null, pues es mucho asumir
00:14:05
a lo mejor no es diferente de null
00:14:07
entonces hay que identificar situaciones peligrosas
00:14:08
y este método también se va quedando un poco cojo
00:14:10
porque si
00:14:13
el alumno
00:14:14
está encontrado
00:14:18
le añade la asignatura, pero si el alumno no existe
00:14:21
no hace nada
00:14:23
entonces también se queda un poco cojo el método
00:14:24
porque la aplicación cuando lo llama
00:14:27
no sabe
00:14:29
no sabe si
00:14:31
realmente se insertó
00:14:33
o no se insertó alumno
00:14:35
no lo sabe, perdón, no sabe
00:14:36
si se encontró alumno para
00:14:39
matricularse en Natura o no, no lo sabe
00:14:41
puede haberse encontrado
00:14:43
y haberse añadido o pueden haberse encontrado
00:14:45
porque no existe
00:14:47
entonces a ver, funciona, funciona
00:14:48
pero es un método poco amigable
00:14:50
poco amigable, también sería bonito
00:14:52
incorporar una realimentación
00:14:54
que te diga, encontré alumno o no encontré
00:14:57
alumno, ¿verdad?
00:14:59
bien por consola o bien porque lo lleva a un registro de log
00:15:00
¿se insertó asignatura?
00:15:03
no se insertó pero no encontró alumno
00:15:05
está bien que tenga una realimentación
00:15:06
¿vale? ¿qué haríamos ahí
00:15:08
para poner una realimentación?
00:15:10
claro, el famoso boolean que te detecte
00:15:17
si has entrado aquí alguna vez o no
00:15:19
el famoso boolean que te diga si algo ha pasado o no
00:15:20
entonces, hombre, esto estaría
00:15:23
más bonito, por ejemplo
00:15:25
si hacemos esto
00:15:29
asumimos de partida
00:15:30
que no existe alumno
00:15:34
y ahora
00:15:35
cuando hemos encontrado el alumno
00:15:37
cuando hemos encontrado el alumno
00:15:42
pues avisamos
00:15:44
y decimos, ala
00:15:47
encontré
00:15:49
he encontrado alumno
00:15:50
¿vale?
00:15:53
y ahora ya
00:15:54
con este mecanismo de control
00:15:55
de partida no tengo, pero si resulta
00:15:57
que lo he encontrado, lo cambio
00:16:00
pues con este mecanismo de control
00:16:01
el mecanismo de control que ya vimos en la primera evaluación
00:16:03
de toda la vida, cuando ya el for ha terminado
00:16:06
ya sabemos si encontró alumno o no
00:16:09
entonces si lo encontró
00:16:15
pues decimos, se matriculó al alumno
00:16:17
de la asignatura, por ejemplo
00:16:26
o le decimos, no se encontró alumno
00:16:32
por ejemplo, vale
00:16:44
y de paso podemos usar este boolean
00:16:50
para que este for no esté hasta el infinito
00:16:54
una vez que ha encontrado el alumno
00:16:56
que ya no siga
00:16:58
ya de paso que lo tenemos
00:17:00
porque si lo ha encontrado el primero
00:17:02
y tenemos mil alumnos
00:17:04
este for va a seguir
00:17:06
hombre, si ya lo has encontrado no sigas
00:17:07
entonces ya que tenemos ese boolean
00:17:10
aprovechemos y situemos el boolean
00:17:12
¿dónde?
00:17:14
para parar el bucle cuando
00:17:16
ya lo haya encontrado
00:17:18
¿dónde haríamos aquí la modificación?
00:17:19
¿en qué parte?
00:17:23
para que el bucle pare cuando ya ha encontrado el 1
00:17:23
claro, modificamos la condición
00:17:29
para que el bucle siga
00:17:33
tanto cuando no ha llegado al final
00:17:35
pero también cuando no lo ha encontrado todavía
00:17:38
es decir, mientras no hayas llegado al final
00:17:41
y no lo hayas encontrado
00:17:43
mientras se den simultáneamente
00:17:48
las dos cosas
00:17:52
que no hayas llegado al final y no lo hayas encontrado
00:17:52
cuando se den simultáneamente las dos, sigues
00:17:56
de tal manera que cuando ya lo hayas
00:17:58
encontrado, esto es true
00:18:02
con lo cual esto será false
00:18:04
porque es un no delante, será false
00:18:05
y el bucle ya se parará
00:18:08
¿vale?
00:18:09
es bueno, lo de siempre
00:18:12
bueno, pues incorporar estas cosas
00:18:14
hacen nuestros códigos
00:18:18
un poquito mejores
00:18:20
vale, pues esto en cuanto a
00:18:22
matricular alumno, lo podemos mejorar
00:18:26
un poquito de esta manera
00:18:27
ahora este
00:18:29
a donde queríamos ir a parar
00:18:33
vale
00:18:35
desmatricular alumno de una asignatura
00:18:36
número de matrícula, asignatura
00:18:40
lo mismo
00:18:44
recorremos esto, podríamos añadirle
00:18:45
el encontrado también
00:18:48
para que nos diga si lo ha encontrado o no
00:18:49
para desmatricularle y aparte que pare el bucle
00:18:51
vale, pues cuando ha encontrado
00:18:53
al alumno con ese número
00:18:56
de matrícula teníamos
00:19:00
el método remove
00:19:02
al que le pasas un elemento
00:19:03
de la lista
00:19:06
entonces
00:19:07
getAsignaturas es la lista
00:19:08
de string de asignaturas
00:19:12
le pasamos un objeto string
00:19:13
que es la asignatura borrar
00:19:15
y que hace el método remove
00:19:17
se va a esta lista y te elimina
00:19:19
la primera
00:19:22
de las apariciones de este objeto
00:19:23
en esta lista, la primera
00:19:25
entonces le pasamos lengua
00:19:27
en cuanto encuentre el string lengua
00:19:28
las asignaturas lo eliminen
00:19:31
¿que hay más string lengua? no, solo te borra el primero
00:19:32
entonces ¿qué queremos hacer?
00:19:36
si está matriculado de lengua
00:19:38
mates lengua
00:19:39
¿queremos que elimine solo la primera lengua o las dos?
00:19:40
pues depende, habría que hablar con el secretario
00:19:44
y decirle, oye, es probable
00:19:46
es probable que
00:19:47
un alumno pueda estar matriculado
00:19:49
en su lista varias veces de la misma
00:19:51
porque te hayas equivocado al meter los datos
00:19:53
puede ser que eso ocurra
00:19:55
Y en el caso de que ocurra, si yo desmatriculo de lengua, ¿quieres que desaparezcan todas o solo la primera?
00:19:57
Pues bueno, solo sería cuestión de hablarlo con él a ver exactamente cómo va a funcionar la aplicación.
00:20:04
Lo que nos importa a nosotros es entender que este método te borra la primera de las apariciones de este objeto en la lista.
00:20:09
Vale, entonces, y además te devuelve true o false si encontró o no encontró.
00:20:17
por eso si queríamos
00:20:22
si queremos que te las borre todas
00:20:24
las de este objeto
00:20:26
pues lo tenemos tan fácil como meterlo en un while
00:20:27
¿vale?
00:20:30
que es lo que hicimos el otro día
00:20:32
el while tiene esto como
00:20:33
condición, luego no tiene cuerpo, luego se acaba
00:20:36
en un punto y coma, no tiene cuerpo
00:20:38
entonces te hace el primer remove
00:20:40
si encontró te devuelve true
00:20:42
con lo cual entra de nuevo a buscar
00:20:44
el segundo remove, si sigue encontrando
00:20:46
te devuelve true
00:20:48
y entra de nuevo al siguiente
00:20:50
así hasta que ya no encuentre más
00:20:52
apariciones, para lo cual devolverá
00:20:53
falso y ya saldrá el while
00:20:55
vale, pues entonces
00:20:56
el otro método que tenemos
00:20:59
relacionado con remove
00:21:02
el remove all
00:21:04
vale
00:21:10
el remove all, hay que pasarle una colección
00:21:11
no solo un objeto como aquí
00:21:14
no solo un objeto
00:21:16
hay que pasarle una colección
00:21:17
de varias cosas, lengua, matemática
00:21:19
física, lo que sea, una colección de cosas
00:21:22
hay que pasarle una colección
00:21:24
¿Y qué hace? Pues todo lo que hay aquí, lengua, mates, física, todo lo que haya, te lo elimina de la colección, pero todas las apariciones, o sea, si hay dos lenguas, dos mates, tres físicas, te elimina las dos lenguas, las tres mates, las dos físicas, todas, ¿vale? Todas.
00:21:26
Para ello, pues te hace un iterador
00:21:44
para recorrer la colección,
00:21:46
hace un meollo dentro importante.
00:21:47
Te lo metéis dentro a verlo.
00:21:49
Entonces, para borrar todas las apariciones
00:21:51
de una sola asignatura,
00:21:53
esto que hemos hecho aquí arriba,
00:21:56
esto de aquí,
00:21:58
lo podríamos efectivamente,
00:21:59
que es lo que tú dijiste el otro día,
00:22:00
si lo podríamos hacer así, pues sí,
00:22:01
podríamos hacer una lista,
00:22:04
meter en esa lista ese único objeto,
00:22:06
una lista de un único objeto, de uno.
00:22:08
Y ahora al remufol pasarle eso.
00:22:11
y esto haría lo mismo que lo de arriba
00:22:12
pero hombre, es bastante más complicado
00:22:15
porque el remove all
00:22:17
luego te hace por dentro, no solo el while
00:22:19
sino es que te saca un iterador
00:22:21
entonces tú aparte se hace una variable
00:22:22
adicional, metiendo, pasando
00:22:25
pero efectivamente esto
00:22:27
te haría lo mismo que esto, aunque lo de arriba
00:22:29
es más sencillo
00:22:31
menos instrucciones, menos sentencias
00:22:33
remove all tiene
00:22:35
muchas más dentro, muchísimas más que remove
00:22:37
¿vale?
00:22:39
entonces remove all
00:22:45
El uso que se le suele dar es cuando queremos borrar
00:22:46
Varias diferentes de golpe
00:22:48
Si queremos borrar varias diferentes
00:22:50
Entonces sí, hay que hacerlo con el remove all sí o sí
00:22:52
Porque el remove a palo seco
00:22:55
Te borra una
00:22:57
Si yo quiero borrar varias lengua, mates, física
00:22:58
Pues lo tengo que hacer con este
00:23:01
Ahí sí que sí
00:23:03
¿Vale?
00:23:04
Vale, pues dejo esto comentado aquí
00:23:06
Y lo pongo así
00:23:09
Vale, ¿qué más métodos llegamos a hacer?
00:23:18
Aparte de desmatricular
00:23:34
bueno, hicimos eliminar
00:23:35
alumno de la colección
00:23:37
¿vale? para verlo
00:23:38
del equals, que esto fue ya lo último que hicimos
00:23:41
¿vale?
00:23:43
hicimos este método
00:23:45
para dejar claro que remove
00:23:46
por dentro, o sea que uno
00:23:49
cuando uno hace algo que lo haga llamando a un método
00:23:51
no significa que sea una única
00:23:53
sentencia, no, lo que está llamando es a un método
00:23:55
y este método dentro hace ahí
00:23:57
la leche
00:23:59
¿vale? hace ahí la leche
00:24:00
lo ideal sería que uno lo programara
00:24:02
él todo, todo, y no tuviera que utilizar
00:24:05
clases, ni colecciones, ni listas
00:24:07
ni nada, porque lo programara uno todo
00:24:09
con las estructuras básicas
00:24:11
con los for, los while, los if
00:24:13
y los arrays, porque eso es
00:24:15
lo único que hay
00:24:17
todo lo demás son clases con métodos
00:24:18
que usan todo eso
00:24:21
entonces nosotros delegamos
00:24:23
llamamos a métodos que usan eso para hacer las cosas
00:24:25
y confiamos en que lo hacen bien
00:24:27
pero a saber cómo están esos por dentro
00:24:28
lo ideal es que uno lo hiciera todo
00:24:31
pero claro, le quedarían programas
00:24:34
gigantes, larguísimos
00:24:36
poco manejables
00:24:39
por eso reutilizamos clases
00:24:40
que ya están hechas y vamos a sus métodos
00:24:42
pero por comodidad
00:24:44
ahora desarrollar código, no porque sea mejor
00:24:45
no porque sea mejor
00:24:48
pero es que llega un momento en que tienes que tirar
00:24:49
de código de otros, porque es que si no
00:24:53
tus programas, cada uno de ellos tendría
00:24:55
50.000 líneas
00:24:57
bueno, pues eliminar
00:24:59
alumno lo incorporamos
00:25:02
para revisarlo de
00:25:03
equals. ¿Qué hace
00:25:05
Remus? Pues ya lo hemos dicho.
00:25:07
Coge este objeto,
00:25:10
se pone a iterar en esta lista,
00:25:12
se pone a iterar, y en cuanto
00:25:14
encuentra uno igual
00:25:16
a él, lo elimina.
00:25:17
Y ya está. En cuanto
00:25:20
encuentra uno igual a él.
00:25:22
Por eso, importante
00:25:24
que si
00:25:25
la colección
00:25:27
es de la clase alumno, de la clase
00:25:28
Pepito, pues esa clase tenga el criterio
00:25:32
de igualdad implementado
00:25:34
porque si no remove va a usar el criterio de igualdad
00:25:35
de object, que es
00:25:38
el mismo objeto uno encima de otro
00:25:40
o sea, misma dirección de memoria
00:25:42
¿vale? entonces aquí
00:25:43
como alumno teníamos el criterio de
00:25:46
igualdad implementado
00:25:48
en la colección alumnos que es de alumno
00:25:49
teníamos el criterio de igualdad implementado
00:25:51
y alumno tenía como criterio
00:25:54
de igualdad
00:25:56
el número de matrícula, ese era el criterio
00:25:56
de igualdad, dos alumnos con mismo número de matrícula
00:25:59
para la secretaría son el mismo
00:26:02
si tú llegas
00:26:04
un día con tu número de matrícula 7
00:26:06
y llegas mañana
00:26:07
con otra cara
00:26:09
con el título de matrícula 7, eres el mismo
00:26:11
da igual que tengas el diseño del pelo
00:26:14
da lo mismo, ¿vale?
00:26:16
eso te lo tiene que aclarar la secretaría
00:26:17
si el pelo te cambia
00:26:19
o no, dice, no, no, a mí me da igual
00:26:22
que tenga el pelo, a mí lo que me importa es su número
00:26:24
de matrícula, pues entonces, eso
00:26:26
te lo tiene que aclarar, que identifica de forma
00:26:28
única a los elementos de la aplicación
00:26:29
pues en este caso nos ha aclarado
00:26:32
su número de matrícula, me da igual que venga
00:26:33
hombre, mujer, con el pelo rubio o con el pelo moreno
00:26:35
su número de matrícula, pues eso fija el criterio
00:26:37
de igualdad, pues como el criterio de
00:26:39
igualdad está ya aquí recogido
00:26:41
en alumno
00:26:44
este remove va a funcionar bien
00:26:44
porque yo
00:26:48
creo un objeto cuyo número de matrícula
00:26:50
es este que me han dado, un objeto
00:26:52
aus, se lo paso a remove
00:26:54
se pone a buscar en la colección
00:26:56
uno que sea igual a este
00:26:59
o lo que es lo mismo, se pone a buscar
00:27:00
un alumno cuyo número de matrícula
00:27:03
sea este, y en cuanto
00:27:05
encuentre un alumno con número de matrícula este
00:27:07
lo elimina, que es lo que
00:27:09
queremos, que es lo que queremos
00:27:11
¿vale?
00:27:13
a ver, más métodos
00:27:17
hacer
00:27:19
mostrar el nombre del alumno que está matriculado
00:27:20
en más asignaturas
00:27:27
este, lo metemos
00:27:28
aquí en operaciones
00:27:32
vale, mostrar el nombre
00:27:33
del alumno y vamos a hacerlo que lo devuelva
00:27:36
jugador de retorno, si va a devolver
00:27:38
jugador de retorno un nombre, este va a
00:27:49
devolver un string, jugador de retorno
00:27:51
alumno con más
00:27:53
asignaturas
00:27:56
vale
00:27:58
pregunta
00:28:01
¿qué parámetro necesita
00:28:04
ese método?
00:28:08
ninguno, porque
00:28:12
este método trabaja con los
00:28:14
datos, y los
00:28:16
datos son estos, que ya están aquí arriba, con alumnos. Solamente trabaja con la colección
00:28:18
de alumnos, la recorrerá para ver qué más asignaturas tiene. Recorrerá a los alumnos
00:28:25
para verlo. Pues venga, este es nuestro siguiente método objetivo. Pues hala, venga, hacedlo.
00:28:29
Arrancadlo a ver qué...
00:28:40
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 7
- Fecha:
- 6 de marzo de 2024 - 11:47
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Duración:
- 28′ 43″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 123.57 MBytes