Saltar navegación

20260127 InstanceOf - 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 27 de enero de 2026 por Raquel G.

1 visualizaciones

Descargar la transcripción

Pues aquí, por ejemplo, como que tenemos esto muy repe, ¿no? Estas dos sentencias de instance of. ¿Podríamos agruparlas en una? Pues sí, podemos agruparlas en una si nos damos cuenta de lo siguiente, que también tiene que ver con lo que tú me preguntaste al principio de la clase, que te dije, si implementas una, también las de arriba. ¿Vale? Que era esta cosa de aquí. ¿Dónde está esto? ¿Vale? Que era esto de aquí. 00:00:01
Teníamos el envío normal 00:00:33
De envío hereda 00:00:39
Envío rastreable 00:00:41
De envío rastreable 00:00:43
Hereda 00:00:46
Envío urgente 00:00:47
Y envío 00:00:49
No me lo digáis 00:00:51
Que tengo que desarrollar 00:00:53
Jolines 00:00:55
No me lo digáis 00:00:59
Que tengo que desarrollar la memoria 00:01:01
No me digáis la letra 00:01:03
El envío rastreable, el estándar, concha, este, el envío estándar. Y luego teníamos el envío refrigerado. Y el envío refrigerado heredaba directamente de envío. 00:01:06
Y luego, además, los envíos podían ser o no asegurables, para lo cual teníamos la interfaz asegurable. ¿Y qué envíos eran asegurables? Pues este implementaba asegurable el refrigerado y el urgente también implementaba asegurable, ¿verdad? Los dos, creo recordar. 00:01:22
Vale, esta era nuestra jerarquía. Entonces, de estos solo se pueden instanciar tres cosas. Solo se puede instanciar este, solo se puede instanciar este y solo se puede instanciar este, ya sé. No te mueras ahora, porque estás en clase y te pueden echar a mirar a culpa. 00:01:42
en otro momento 00:01:59
ya yo, eres libre 00:02:03
vale, entonces 00:02:04
estas dos son clases abstractas 00:02:08
no se pueden instanciar objetos 00:02:11
y esta es interfaz 00:02:12
no se puede instanciar objetos, se usan solo 00:02:14
para dar un diseño unificado 00:02:17
vale 00:02:19
entonces 00:02:20
el instance of 00:02:21
puede llevar un poquito a error 00:02:24
porque el instance of, como lo hemos usado 00:02:26
hasta ahora, lo hemos 00:02:29
usado, si este objeto x 00:02:31
es una instancia de 00:02:33
esta clase c, pues me dará true 00:02:35
entonces 00:02:37
el uso que hemos hecho del instance 00:02:38
of hasta ahora 00:02:41
era para devolverme 00:02:43
true o false, si este 00:02:45
objeto x se instanció 00:02:47
es decir 00:02:49
acompañó al new de esta clase 00:02:52
se instanció como esta clase, es el uso que hemos 00:02:54
dado hasta ahora 00:02:56
pero ahora añado 00:02:57
si un objeto 00:03:00
se ha instanciado como este 00:03:02
o como este o como este, es decir 00:03:03
su new se ha hecho 00:03:06
de envío urgente o de new envío estándar 00:03:07
o new envío refrigerado 00:03:10
el instance of también me va a dar 00:03:11
true para todas las 00:03:14
super clases 00:03:16
o interfaces que implemente 00:03:17
también me va a dar true, entonces 00:03:19
un envío estándar, si yo le hago 00:03:21
instance of este va a decir 00:03:23
true, pero si le hago instance of 00:03:26
este también va a decir true 00:03:28
y si le digo instance of este también va a decir true 00:03:29
y si le digo instance of 00:03:32
este no, porque este no implementaba 00:03:34
¿vale? entonces 00:03:36
cojo un objeto de estos 00:03:37
si le digo es instance of 00:03:39
envío refrigerado, por supuesto, si lo es 00:03:42
pero si hiciera 00:03:44
es instance of envío 00:03:45
normal, también me diría que true 00:03:48
si le digo instance of este 00:03:49
no, este no, porque esta clase no le da 00:03:51
de este, si le digo es instance 00:03:54
of este de aquí 00:03:56
sí, me diría que sí 00:03:57
entonces, un objeto 00:03:59
el instance of 00:04:01
me va a dar true cuando lo aplico 00:04:04
a la clase con la que está instanciado 00:04:06
pero también si lo aplico a cualquiera 00:04:08
de las superclases o interfaces 00:04:10
que implemente 00:04:12
¿vale? tiene sentido 00:04:13
entonces, eso nos permite 00:04:14
reunificar un poquito 00:04:17
el código que nos había quedado ahí 00:04:19
entonces 00:04:21
esto ya 00:04:23
nos permite 00:04:25
unificar este código 00:04:27
porque 00:04:30
envío urgente y envío refrigerado 00:04:31
los dos 00:04:34
heredan de asegurable 00:04:35
luego estos dos if 00:04:37
los podría agrupar 00:04:39
voy a ponerlo aquí arriba 00:04:41
voy a dejar esto comentado 00:04:43
un poquito 00:04:45
podría estar más 00:04:48
podría estar más 00:04:50
no, no, tendría 00:04:52
al lado de la x 00:04:53
que sí, que estaba viendo a ver todos los más pequeños que podía estar 00:04:57
ahora sí está pegando 00:05:00
vale 00:05:01
ahora está mejor 00:05:03
vale 00:05:05
vale, entonces 00:05:06
alternativa 00:05:10
a este código que acabo de comentar 00:05:12
estos dos 00:05:14
los puedo resumir en este 00:05:16
si mi envío 00:05:18
es asegurable 00:05:20
es decir 00:05:22
es de envío urgente 00:05:24
o es de envío refrigerado 00:05:26
que son las dos 00:05:28
clases que implementan 00:05:30
asegurable 00:05:31
instance of 00:05:32
envío 00:05:35
perdón 00:05:40
asegurable 00:05:41
pues esto lo podemos hacer y no pasa nada 00:05:42
¿vale? 00:05:47
entonces esto, si lo veis de buenas a primeras 00:05:56
puede generaros la confusión de 00:05:59
pero si asegurable no se puede instanciar 00:06:00
es imposible hacer un new asegurable 00:06:03
¿Cómo va a ser E una instancia de asegurable? 00:06:05
Claro, pero esto lo que significa es, 00:06:08
E es una instancia de algún objeto que implemente asegurable, 00:06:10
es lo que significa también. 00:06:15
También significa eso. 00:06:16
Bueno, pues en ese caso, si lo es, 00:06:18
es cuando queremos hacer el coste total del seguro. 00:06:20
¿Vale? 00:06:26
En ese caso es cuando queremos hacer el coste total del seguro. 00:06:27
Entonces, aquí es donde uno haría suma más igual mi envío E 00:06:29
Y yo querría llamar a calcular coste seguro. 00:06:37
Querría llamar a este método. 00:06:45
Ay, es que me lo ha hecho solito. 00:06:47
Sí, me lo ha hecho solo, pero no quiero que me lo haga solo. 00:06:48
Ahí, vale. 00:06:51
Vale, esto es lo que querríamos hacer, ¿verdad? 00:06:53
De este objeto E que implementa asegurable, 00:06:56
llamar a calcular coste seguro. 00:06:58
Claro, pero es que ya sabemos cómo funciona el compilador. 00:07:01
si tú le pides un método de un objeto 00:07:05
va a mirar cómo está 00:07:08
declarado ese objeto 00:07:09
para ver los métodos que hay en la clase declarada 00:07:10
¿y cómo está declarado? 00:07:13
como envío 00:07:15
está declarado como envío 00:07:16
luego no puedo llamar aquí a nada 00:07:19
que no esté en envío 00:07:21
no puedo 00:07:22
y calcular coste seguro 00:07:24
no está en envío, calcular coste seguro 00:07:27
está en la interfaz 00:07:29
asegurable, que luego 00:07:31
implementan en biourgente 00:07:33
en biorefrigerado, lo implementan 00:07:35
lógicamente, pero no está aquí 00:07:37
luego aquí tengo 00:07:39
pues un problemilla 00:07:41
entonces, estos 00:07:42
mini problemillas 00:07:45
sí que se arreglan, y no hay 00:07:46
otra con esa cosa tan horrible del casting 00:07:49
pero el casting 00:07:51
no es tan malo, suele ser 00:07:52
muy malo, porque nos arregla 00:07:55
errores de compilación a costa de hacer una 00:07:57
burrada, pero si está 00:07:59
controlado, ¿no? Entonces 00:08:01
aquí diríamos, oye, pues voy a hacer un casting 00:08:03
de E, voy a convertirlo 00:08:05
en algo más concreto 00:08:07
de envío, que sí que tenga 00:08:09
ese método. Entonces dirías, 00:08:11
bueno, pues lo voy a convertir en envío refrigerado 00:08:13
que tiene el método. 00:08:15
Oye, pero a lo mejor E no es envío refrigerado, 00:08:17
es envío urgente, puede ser cualquiera de los dos. 00:08:19
Entonces, ¿en qué lo convierto? ¿En refrigerado 00:08:21
o en urgente? 00:08:23
Vale, pues lo que podemos hacer es hacer un casting 00:08:25
a la interfaz. 00:08:27
Aunque no tenga 00:08:30
sentido, en principio 00:08:31
nos parezca extraño 00:08:33
asegurable 00:08:34
entonces este casting significa 00:08:37
oye compilador 00:08:42
mira este objeto 00:08:44
míralo 00:08:47
como si fuera asegurable 00:08:48
míralo como si fuera asegurable 00:08:51
es grave que lo mire 00:08:53
como si fuera asegurable, en absoluto lo es 00:08:56
porque lo implementa 00:08:58
porque de hecho es una instancia 00:08:59
de algo que implemente asegurable 00:09:01
luego si vengo de un instance of 00:09:04
el casting sin ningún miedo 00:09:08
entonces al hacer el casting 00:09:09
ahora ya puedo llamar 00:09:12
a todos los métodos de esta interfaz 00:09:13
lo puedo llamar 00:09:15
y ya está 00:09:17
me he ahorrado 00:09:19
hacer los dos if 00:09:21
aunque esto 00:09:23
repito es un poco más 00:09:25
como abstracto, más extraño 00:09:28
porque es ver si algo 00:09:30
es instancia de esto 00:09:32
Instancia de esto es imposible. Pero esto, instance of, no significa solo ser instancia de. Instance of significa, ¿es instancia de esto o de alguna de las subclases o clases que lo implementen? Eso significa. 00:09:33
¿Instance of es instancia de esto? 00:09:52
Que de esto no podría ser en este caso. 00:09:54
¿O de alguna de las clases que lo implementen? 00:09:56
Pues sí. 00:09:59
Si es instancia de alguna de las clases que lo implementen como refrigerado urgente, entro. 00:10:01
Y ahora ya el problema, llamar al método. 00:10:06
Necesito para llamar al método poner aquí algo que tenga ese método. 00:10:09
¿Vale? 00:10:15
Ese método está en envío refrigerado o urgente. 00:10:16
Pero yo no sé cuál de las dos es. 00:10:18
No lo sé. 00:10:21
Puede ser una de las dos. 00:10:21
Pero puedo hacer el casting asegurable 00:10:23
porque sea cual sea, 00:10:25
cualquiera de las dos es asegurable. 00:10:27
Entonces, puedo hacerlo de cara 00:10:30
a que el compilador me permite llamar esto. 00:10:31
Y ya está. 00:10:34
No, no, no, no, no. 00:10:39
Porque la llamada a los métodos 00:10:39
se hace siempre al objeto 00:10:41
tal y como se instanció. 00:10:43
El compilador mira cómo se ha declarado. 00:10:46
Entonces, aquí el compilador 00:10:49
al hacer el casting dice, 00:10:51
uy, qué bien, calcular coste seguro, 00:10:53
es tan asegurable, le da igual que esté vacío 00:10:54
pero luego en tiempo 00:10:57
de ejecución, cuando esto se ejecute 00:10:59
la ejecución 00:11:01
siempre se va a hacer llamando al método 00:11:02
tal y como se instanció el objeto 00:11:05
¿cómo se instanció? 00:11:07
ni idea, por ahí arriba estará 00:11:08
pero lo que sí que tenemos la seguridad 00:11:10
es que cuando esto se ejecute 00:11:12
y ya en tiempo de ejecución 00:11:14
se llame a este método 00:11:16
sí o sí se va a llamar a la versión del método 00:11:17
que está en el objeto 00:11:20
tal y como se instanció 00:11:22
Entonces, cuando entremos por aquí, siendo E una instancia de envío refrigerado, se llamará a calcular coste seguro de envío refrigerado. Cuando entremos por aquí, siendo E una instancia de envío urgente, se llamará a la versión de envío urgente. 00:11:23
¿Vale? Es justo la definición 00:11:39
De polimorfismo 00:11:42
Llamo al método que se corresponde 00:11:43
A cómo te instanciaste 00:11:46
Pero el compilador nos ha puesto 00:11:47
Un filtro previo 00:11:50
Que es, ya, pero para yo dejarte llamarlo 00:11:51
En tiempo de escritura de código 00:11:53
Necesito que lo llames desde algo 00:11:55
Que lo tenga en esa clase 00:11:58
Aunque luego la implementación esté más abajo 00:12:00
O te instancie más abajo 00:12:02
¿Vale? 00:12:03
Bueno pues con esto 00:12:09
Estábamos haciendo el otro servicio 00:12:11
Que era actualizar estado 00:12:14
Estabais haciendo 00:12:15
Y que más cosas había por aquí 00:12:16
Pues unas cuantas 00:12:19
Pues dime 00:12:21
Este mismo 00:12:24
La última línea 00:12:27
Hace falta 00:12:30
La cual 00:12:30
La de retún 00:12:33
Ah no es que se me ha olvidado 00:12:34
Poner los comentarios 00:12:37
Vale, vale, es que se me ha olvidado comentarla 00:12:38
Vale 00:12:41
Vale, pues venga ahora 00:12:43
Continuáis con el ejercicio vosotros 00:12:46
Con las dos cosas que se quedaron pendientes y con lo que falte 00:12:49
Y os concentráis 00:12:51
Y me preguntáis 00:12:53
Si algo 00:12:54
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:
27 de enero de 2026 - 12:45
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
12′ 56″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
240.53 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid