Saltar navegación

20260325 SerialVersion - 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 25 de marzo de 2026 por Raquel G.

1 visualizaciones

Descargar la transcripción

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

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid