20260325 SerialVersion - 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, lo último, que no me habéis preguntado
00:00:02
y me extraña
00:00:05
con lo espabilados y listos que soy
00:00:06
mira que me extraña
00:00:10
A ver, siempre que hemos puesto
00:00:11
implement serializable
00:00:16
en una clase, porque queríamos
00:00:18
usarla dentro de
00:00:21
object output stream y object input stream
00:00:22
para moverla de un fichero a otro serializada
00:00:24
toda en filita
00:00:26
nos han obligado esas clases
00:00:27
a poner esto, ¿verdad?
00:00:30
nos han obligado a poner esta cosa
00:00:32
implement serializable
00:00:34
porque esa es la forma de darle a esas entidades
00:00:35
la capacidad de ser usadas
00:00:39
por object output string
00:00:41
y por object input string
00:00:43
y cuando lo hemos puesto
00:00:45
se nos ha puesto esto en amarillo
00:00:47
que no es grave porque es un aviso
00:00:49
solamente, es un aviso
00:00:51
entonces a los avisos uno puede no atender
00:00:52
pero si atendemos a ellos
00:00:55
a ver si nos aporta algo interesante
00:00:58
pues este aviso nos dice
00:01:00
deberías incluir o incluye
00:01:02
o te falta o algo así, un serial number, ¿no?
00:01:04
¿Ya lo sabes?
00:01:10
A ver, explícanos.
00:01:12
¿Cómo que no?
00:01:13
Bueno, un serial number es un long, ¿es un long o un int?
00:01:17
Un long, ¿verdad?
00:01:21
Muy bien, muy bien, ay, de verdad, ¿eh?
00:01:23
Ay, Dios mío, qué empollón, ay, qué, qué, qué.
00:01:26
Vale, pues es un long que uno puede incluir aquí.
00:01:30
El numerito que le dé la gana.
00:01:35
27, 32
00:01:36
él te puede generar uno
00:01:38
por defecto, de hecho
00:01:40
si atendemos a la sugerencia que nos hace
00:01:41
le digo, venga pues
00:01:44
házmelo tú, anda ya que te pones
00:01:46
pues me añade uno
00:01:48
me añade el uno, me añade esta
00:01:51
variable estática
00:01:54
veis que no es una propiedad
00:01:55
de reserva, no es una
00:01:58
propiedad, es una variable estática
00:02:00
común a todas las reservas
00:02:02
con lo cual es una información sobre la clase
00:02:04
en realidad, es una información sobre la clase
00:02:06
¿vale?
00:02:08
entonces ahora vamos a ver para qué
00:02:11
vamos a mencionar para qué sirve
00:02:12
si le digo, oye, te hago
00:02:14
una generada más bonita, pues
00:02:16
esta generada, pues, uy
00:02:18
más bonita todavía
00:02:20
¿vale? un poco
00:02:22
larga, pero bueno, el caso es que es
00:02:24
un numerito long, que acompaña
00:02:26
a la clase, uno por clase
00:02:28
nada de uno por reserva
00:02:30
porque por eso es static
00:02:32
¿Vale? ¿Cuándo es importante este número de serie? La aplicación está, funcionan, tenemos nuestra aplicación reservas que ya mete cosas, hace su object input string, su object output string, hace cosas y de repente cambiamos, reserva y le añadimos una propiedad, ¿vale?
00:02:34
pues si no tenemos número de serie
00:02:57
la hemos liado, ¿vale?
00:02:59
porque el número de serie
00:03:03
es el que identifica a esa clase
00:03:05
para la object input stream
00:03:07
independiente de las propiedades
00:03:09
que tenga
00:03:12
independiente de las propiedades que tenga
00:03:12
si yo no pongo el serial version
00:03:15
y nunca jamás cambia mi aplicación
00:03:17
no pasa nada, yo ¿qué hago?
00:03:19
con object input stream escribo una reserva
00:03:21
muy bien, el object input stream
00:03:23
necesita identificar
00:03:25
la clase reserva tal y como la tiene en la cabecera
00:03:27
¿vale? tal y como la tiene en la cabecera
00:03:30
entonces, si yo no he puesto esto
00:03:32
cada vez que yo hago un object
00:03:34
output stream
00:03:35
él genera en la cabecera
00:03:36
un serial cualquiera
00:03:39
el que le da la gana
00:03:41
entonces, el object
00:03:42
input stream para leerlo, mira ese
00:03:45
serial, busca la clase
00:03:47
y ya el casting
00:03:49
funciona
00:03:50
¿qué ocurre si de repente
00:03:52
cambio aquí
00:03:56
y pongo una propiedad diferente
00:03:57
pongo una propiedad, entonces
00:04:00
como mi clase ha cambiado
00:04:01
cuando yo haga object output string
00:04:03
como mi clase es distinta, pues va a meter
00:04:06
otro número de serie
00:04:08
¿vale?
00:04:10
entonces cuando él luego haga el casting
00:04:12
ya el casting no le va a funcionar
00:04:14
¿vale? porque el objeto que escribió
00:04:15
antes estaba con el número de serie
00:04:18
de la clase anterior, entonces
00:04:20
hace el casting, no me lo ha actualizado
00:04:22
me dice, uy, me falta aquí
00:04:24
una propiedad, yo en nueve.
00:04:26
Entonces, el número
00:04:29
de serie, si lo ponemos,
00:04:30
es interesante
00:04:33
dejarlo ahí, no molesta,
00:04:33
porque identifica la clase
00:04:36
para los diferentes cambios que haya.
00:04:37
La identifica para la aplicación.
00:04:39
Entonces, a la hora de hacer casting,
00:04:42
aunque la aplicación, aunque
00:04:44
hayan aparecido propiedades
00:04:45
nuevas, ese casting
00:04:48
va a decir, ah, espérate,
00:04:50
yo voy a hacer el casting
00:04:52
y aquí me falta una propiedad.
00:04:53
vale, pero es que esta clase
00:04:56
cambió, porque el número
00:04:58
de serie es el mismo, la clase cambió
00:05:00
entonces aunque me falte una propiedad
00:05:02
no te voy a dar problema de casting, me invento su valor
00:05:03
no sé si
00:05:06
más o menos entendéis, porque no me he explicado muy bien
00:05:08
el tema es, tú lees un objeto
00:05:10
del archivo que se generó
00:05:12
con la versión antigua
00:05:14
una propiedad no la tiene
00:05:15
la propiedad, por ejemplo
00:05:17
pues, encargado
00:05:19
dependiente que lo hizo
00:05:21
el que sea, una propiedad no la tiene
00:05:24
entonces, él cuando va a hacer el casting
00:05:25
dice, perdona, no puedo hacer el casting
00:05:28
porque yo acabo de leer un objeto
00:05:31
y no tengo la propiedad
00:05:32
encargado, no la tengo
00:05:34
no puedo hacer el casting, error de casting
00:05:36
cast, de hecho lo podríamos probar ahora
00:05:38
a cambiar una propiedad
00:05:40
y tratar de trabajar con el
00:05:43
fichero antiguo
00:05:44
sin haber hecho esto, nos diría un error
00:05:46
de casting, no puedo hacer el casting porque estoy
00:05:48
leyendo objetos
00:05:50
trato de hacer el casting y a esos objetos les
00:05:51
falta una propiedad, claro, porque los guardé cuando
00:05:54
no estaba, vale
00:05:56
si nosotros hubiéramos desde el principio
00:05:58
añadido
00:06:01
un número de serie
00:06:02
entonces cuando ahora ya el object input
00:06:03
string lee el objeto viejo
00:06:06
dice, uy ojo, perdona
00:06:08
que este objeto pertenece
00:06:10
a esta clase, porque el
00:06:12
número de serie es el mismo
00:06:14
el número de serie con el que se generó
00:06:16
es el de esta clase
00:06:18
pertenece a esta clase
00:06:19
pero le falta
00:06:21
una propiedad, no pasa nada, le doy el valor
00:06:24
por defecto, un 0 si es
00:06:25
un número, un 0 si es un objeto, no pasa nada
00:06:27
porque yo sé
00:06:30
que este objeto pertenece a la clase
00:06:31
reserva, aunque la clase reserva
00:06:33
se haya modificado, no pasa nada
00:06:36
porque yo estoy viendo en la cabecera
00:06:38
que su número de serie es este
00:06:39
entonces el número de serie es
00:06:41
el que le da el dato de que
00:06:43
es a esta clase al que le tiene que hacer el casting
00:06:45
que no pasa nada, aunque a esta clase le hayan
00:06:47
aparecido propiedades, no pasa nada
00:06:49
el número de serie me casa
00:06:51
si no hay un número de serie
00:06:53
cada vez que hemos metido un objeto
00:06:55
se puede meter con un número de serie
00:06:57
distinto, entonces cuando yo leo
00:06:59
el número de serie es otro
00:07:01
reserva, no me crees que hay
00:07:03
las propiedades, no, lo siento, no te lo puedo hacer
00:07:05
¿vale?
00:07:07
esa es la idea, conclusión
00:07:09
si vamos a serializar
00:07:11
una clase
00:07:16
ponerle un número de serie y así
00:07:17
esa clase se quede identificada de forma única
00:07:19
para futuros cambios
00:07:21
con lo cual si luego hay
00:07:23
casting de objetos que les faltan
00:07:25
esas propiedades, porque en su
00:07:27
momento no se serializaron con esas propiedades
00:07:29
ese casting va a funcionar igual
00:07:31
¿vale?
00:07:33
pero claro, esos objetos
00:07:36
tienen que haber serializado
00:07:37
estando ya el número de serie puestos, si lo ponemos después
00:07:38
no vale, tiene que estar puesto
00:07:41
desde el principio
00:07:43
o sea, si tú no le pones
00:07:44
la página virtual
00:07:45
si tú no tienes
00:07:49
el número de serie fijado
00:07:53
de tal forma que se conserve
00:07:54
en las sucesivas escrituras
00:07:56
si no tienes un número de serie fijado
00:07:58
lees un objeto
00:07:59
que escribiste
00:08:01
antiguamente, con lo cual solo escribiste
00:08:03
estas cuatro cosas
00:08:06
tratas de hacer el casting, dice no puedo
00:08:07
porque me falta una propiedad
00:08:10
te va a fallar, cast exception
00:08:11
pero si
00:08:13
se guardó ya teniendo este número de serie
00:08:15
él salva ese error
00:08:18
lo salva y dice, dice, vale
00:08:20
cambiaste una propiedad, pero me estás
00:08:22
dando una garantía de que
00:08:24
cuando lo generaste fue con esta clase
00:08:26
esa garantía la tengo
00:08:28
porque se ha serializado con este
00:08:30
número de serie, entonces la clase
00:08:32
cambió, vale, cambió, pero me estás
00:08:34
dando la seguridad de que cuando tú lo serializaste
00:08:36
el objeto pertenecía a esta clase
00:08:38
a su versión original, pero pertenecía a ella
00:08:40
porque ya en su momento me dijiste
00:08:42
oye, que soy yo con este número
00:08:44
entonces dice, vale, tengo
00:08:46
la seguridad de que tú lo generaste
00:08:48
con esta clase, porque me has dado
00:08:50
el identificador, me faltan
00:08:52
propiedades, te lo relleno
00:08:54
la relleno con lo que sea
00:08:56
¿vale? por eso tiene interés ese
00:08:57
número de serie, para
00:09:00
cambios en las
00:09:02
clases
00:09:03
en las propiedades
00:09:04
da igual, para cualquier modificación
00:09:06
El casting ya se apañará
00:09:17
El eliminará lo que le sobre
00:09:20
Ya se apañará para que no falle
00:09:23
No salga una excepción de casting
00:09:24
Incluso si los cambios de nombre
00:09:26
Si el nombre sería el mismo
00:09:27
Hombre, a ver, no, si cambias de nombre la clase
00:09:29
La clase ya es otra
00:09:31
¿Vale?
00:09:33
Hombre, me haces dudar, pero vamos
00:09:35
¿Para qué quieres hacer eso?
00:09:37
No, no, no
00:09:40
¿Y final?
00:09:40
¿Qué es?
00:09:44
Que es constante
00:09:45
el planificador final significa
00:09:46
que esta propiedad
00:09:49
una vez que le has fijado el valor
00:09:51
ya no se lo puedes cambiar
00:09:52
yo no puedo hacer aquí ahora en ningún sitio
00:09:54
porque me dé a mí la gana
00:09:56
cambiar este valor, final es como si fuera
00:09:58
constante, yo ahora ya no puedo cambiar
00:10:00
esto, por mucho que
00:10:02
quiera, esto ya no se
00:10:04
puede cambiar
00:10:06
¿Valdría también para código de reserva?
00:10:07
A ver
00:10:21
Bueno, sí, pero
00:10:22
Una vez que la has fijado
00:10:24
Ya no lo puedes cambiar
00:10:29
Sí, lo puedes poner en final, si quieres
00:10:30
Eso significa que desde el momento en que se hace
00:10:32
La primera asignación
00:10:35
Ya no vas a poder volverlo a cambiar
00:10:36
¿Vale?
00:10:38
No, aquí me está dando error porque estoy tratando
00:10:44
De darle valor a algo que ya estaba asignado
00:10:46
Claro, pero es que aquí ya estaba asignado
00:10:48
¿Vale?
00:10:50
Entonces, este es el error
00:10:52
Y aquí
00:10:53
claro
00:10:55
claro
00:11:02
en el constructor sí porque sería
00:11:05
la primera asignación, aquí sería la primera
00:11:08
pero ya más allá de eso
00:11:10
ya no, entonces hombre
00:11:13
es un poco raro, por una propiedad final
00:11:14
es un poco raro
00:11:16
a ver, no es que
00:11:18
digamos que es una sugerencia
00:11:27
inteligente de que documentes
00:11:29
el código
00:11:31
para que documentes el código
00:11:32
normalmente Java cada vez que
00:11:34
te añade Eclipse
00:11:39
cada vez que te añade código
00:11:40
pues porque tú lo has generado
00:11:42
como sea pues
00:11:45
muchas veces ya te pone el javado
00:11:47
para que tú
00:11:48
vale
00:11:49
pues entonces de ficheros
00:11:52
salvo
00:11:58
corregir esos pequeños que he
00:12:00
enviado para verlo de recursivo
00:12:02
el file input string y todo eso
00:12:04
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 1
- Fecha:
- 25 de marzo de 2026 - 14:04
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 12′ 07″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 46.84 MBytes