20260127 InstanceOf - 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:
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