Saltar navegación

Herencia 4 - 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 7 de febrero de 2024 por Stefano C.

4 visualizaciones

Descargar la transcripción

Vale, entonces, ya estamos grabando, etc, etc, si me dais la autorización, si habláis 00:00:00
Hasta aquí hemos visto el estructura de constructores, la herencia, etc, etc, como se llaman, vale 00:00:06
Cuando hablamos de herencia, tenemos en mente también, o sea, se crean también algunos efectos, algunos conceptos, vale 00:00:16
Que tenemos que tener en cuenta para poder usar de forma eficiente la herencia 00:00:24
Uno de estos son el concepto de shadowing y overriding, vale, que son más o menos lo mismo 00:00:30
Pero uno pensado sobre las variables y otro pensado sobre los métodos, si 00:00:37
La idea es de poder modificar los elementos de la clase base, o sea, lo que tengo en la clase base 00:00:45
Sobrescribiendo, reescribiendo una frase 00:00:52
Una parte del código en una clase hija, vale 00:00:54
Si esto lo hago haciendo un atributo de la clase hija, de la clase, de la subclase 00:00:57
Que tiene el mismo nombre de un atributo de una superclase, esto se llama shadowing, vale 00:01:05
Estoy ocultando en un cierto sentido, haciendo sombra al atributo de la superclase 00:01:12
Renombrándolo, creando un nombre 00:01:22
Con el mismo nombre en la subclase, vale, y ahora hacemos un ejemplo 00:01:24
Si en vez de esto lo hago con el método, o sea, en una subclase creo un método que tiene la misma 00:01:30
La misma signatura, la misma firma, que un método de la superclase 00:01:36
Lo que estoy haciendo es overriding, que es lo que acabamos de hacer en el ejemplo este de aquí 00:01:42
Que si, lo veis, vale, aquí, donde ya he creado animal, que tiene el método presentarse 00:01:47
Y luego en felino, que es una subclase de animal, he creado otra vez el mismo método con la misma firma 00:01:54
Lo que estoy haciendo es sobreescribir el otro método, vale 00:02:03
Y entonces los felinos usarán esto en vez de utilizar el de animal 00:02:08
Como el de toString, cuando nosotros teníamos el toString de object 00:02:13
Y lo que hacíamos es poner un toString nuestro con ese formato y con esa firma 00:02:19
Y allí le hacemos hacer lo que nos da la gana, lo que estamos haciendo es sobreescribir el toString 00:02:24
De esa forma, cuando otros métodos llaman el toString pensando que sea un object 00:02:29
Si yo soy una clase que hereda de object, porque toda clase hereda de object al fin y al cabo 00:02:35
Y he sobreescrito el toString, voy a utilizar el toString de mi clase en vez que el de object 00:02:41
Y entonces me escribe las cosas bonitas, exactamente, vale 00:02:47
Y aquí, entonces, shadowing, ejemplo de shadowing, vale 00:02:54
Tengo una clase persona que tiene como nombre un string, vale 00:03:01
Y luego me creo una clase alumno que extiende persona 00:03:10
Y dentro de aquí, sobreescribo, oculto, nombre con un atributo distinto 00:03:15
O sea, que si yo lo considero como persona, el nombre es un string 00:03:24
Pero si lo considero como alumno, el nombre ya no es un string, es un int 00:03:29
¿Vale? Porque los alumnos no tienen nombre, tienen un número de identificación 00:03:34
Puede ser también un mismo 00:03:38
Lo que cambia es el nombre del atributo 00:03:42
El nombre del atributo hace como sombra al otro, porque cuando yo ahora estoy en alumno y pido nombre 00:03:47
Voy a buscar este nombre, no el otro 00:03:52
Entonces, si ahora en un test lo que creo es un alumno y una persona, vale 00:03:54
Y luego llamo para alumno y para nombre, fijaos que en este caso sí tiene que ver, vale 00:04:03
Tiene que ver el tipo de la referencia, no el tipo de la instancia 00:04:11
Este es un alumno, pero he guardado en una clase persona 00:04:19
Este señor de aquí 00:04:23
Me devuelve Juan 00:04:24
Este señor de aquí 00:04:26
Me devuelve un numerito 00:04:28
¿Sí? 00:04:30
O sea, que es parecido al otro 00:04:33
Pero en este caso 00:04:34
No cuenta la instancia por sí mismo 00:04:36
Sino la referencia a la que estoy utilizando 00:04:39
¿Sí? 00:04:41
Justo para complicar 00:04:42
En mi experiencia, el shadowing se ve bastante menos 00:04:43
¿Vale? 00:04:47
Con respecto al overreading 00:04:48
El overreading sí que se ve un montón 00:04:49
Pero el shadowing 00:04:51
Existerá 00:04:52
¿Vale? 00:04:54
Pero normalmente 00:04:55
Tiene un sentido un poco raro 00:04:56
¿Sí? 00:04:58
¿Sí? 00:04:58
00:05:06
De hecho 00:05:06
Vale, si definimos 00:05:07
Aquí tenéis ejemplo de cómo se llama la cosa 00:05:10
Si definimos una subclase con un atributo que es el mismo nombre 00:05:13
Y tipo que la superclase 00:05:17
¿Vale? 00:05:19
La de la superclase que es de oculta 00:05:20
¿Sí? 00:05:22
También se puede cambiar el tipo 00:05:23
Podemos acceder a la variable de la subclase 00:05:24
O de la superclase usando disesuper 00:05:28
¿Vale? 00:05:30
Esto quiere decir que 00:05:31
Si yo tengo una situación como esta aquí 00:05:32
¿Vale? 00:05:35
Que tengo transporte 00:05:35
Que puede ser tren o un vehículo 00:05:36
Y dentro del vehículo puede ser moto y coche 00:05:38
¿Vale? 00:05:40
Entonces tengo estos tres 00:05:41
Si yo uso nombre 00:05:42
Este es el nombre del coche 00:05:45
Ah, perdón 00:05:46
Esto son 00:05:47
Es el mismo 00:05:47
Redeclaro nombre 00:05:49
En cada uno de estos tres 00:05:51
Niveles 00:05:53
¿Vale? 00:05:55
Entonces si yo uso nombre 00:05:56
Estoy accediendo al nombre del coche 00:05:58
Si yo uso dis.nombre 00:06:01
Estoy utilizando siempre el coche 00:06:03
¿Vale? 00:06:05
Estoy en la clase coche 00:06:06
Si uso super.nombre 00:06:07
Me estoy yendo al vehículo 00:06:09
Entonces es como si estuviera utilizando este 00:06:11
Atributo en vez que este de aquí 00:06:15
¿Sí? 00:06:18
Y si hago algo como esto 00:06:20
Vehículo 00:06:22
De dis.nombre 00:06:23
Accedería al vehículo del nombre 00:06:24
Que es lo que he intentado hacer con el 00:06:26
Overriding 00:06:28
¿Vale? 00:06:30
Con el ejercicio de antes 00:06:30
Que pero como usa la instancia 00:06:32
En vez de utilizar el tipo de vínculo 00:06:34
Pues no funciona 00:06:36
¿Sí? 00:06:37
Si quisiera 00:06:39
Subir hasta este nivel de aquí 00:06:40
O sea hacer 00:06:43
Pillar esta 00:06:44
Variable de aquí 00:06:46
Este atributo de aquí 00:06:48
Debería hacerlo de esta forma 00:06:49
Cuidado que es super.super 00:06:51
No se puede hacer 00:06:52
No existe super.super 00:06:53
Pero existe el 00:06:55
Píllame el dis 00:06:56
Tráctamelo como un transporte 00:06:57
Acceder al número 00:06:59
Vehículo de super 00:07:00
No creo 00:07:09
No creo que 00:07:10
Que tendría mucho sentido 00:07:11
A lo mejor hasta se funciona 00:07:13
Pero 00:07:14
En el momento que haces un cast explícito 00:07:14
Te compensa decir cast explícito 00:07:17
De este objeto 00:07:19
De esta instancia que tienes 00:07:20
¿Vale? 00:07:21
No sé si 00:07:23
Si vehículo de super te funcionaría 00:07:25
Puede ser 00:07:27
No lo sé 00:07:28
No le probo 00:07:30
¿Vale? 00:07:31
La otra cosa es la reescritura de método 00:07:32
¿Vale? 00:07:35
Que me sirve normalmente 00:07:36
Como lo que hemos visto nosotros 00:07:38
Tú cuando 00:07:39
Cuando tienes una clase ya hecha 00:07:42
Y la extendes 00:07:44
Estás importando sus métodos 00:07:45
Pero es posible 00:07:47
Que la clase que estás extendiendo tú 00:07:48
Estos métodos se queden cortos 00:07:50
Tanto por eso 00:07:52
Que a lo mejor quieres añadir 00:07:53
Algo de funcionalidad 00:07:54
O porque quieres especificar más 00:07:56
La funcionalidad de este método 00:07:58
Me explico 00:08:00
En el ejemplo que hemos hecho nosotros 00:08:01
Los animales decían solo su nombre 00:08:02
Porque tenían acceso solo a su nombre 00:08:04
En el momento que tú estás en el gato 00:08:06
El gato tiene acceso a más información 00:08:08
Entonces 00:08:10
Quieres poder hacer más cosas 00:08:11
A lo mejor con la información que tiene 00:08:13
Puede hacer búsqueda de una base de datos 00:08:15
Que se yo 00:08:17
Puede hacer cosas más adelantadas 00:08:18
O simplemente utilizar también 00:08:20
Sus propias propiedades 00:08:22
Sus propios atributos 00:08:23
Para decir 00:08:24
Oye mira y son esta cosa también 00:08:25
En nuestro método 00:08:27
Que era una presentación 00:08:28
Era una descripción 00:08:29
Pues un gato claramente 00:08:30
Tiene más información para dar 00:08:32
Que un animal 00:08:34
Y por lo tanto 00:08:34
Se puede sobre escribir en esta forma 00:08:35
¿Vale? 00:08:38
Fijaos que 00:08:40
Con arrancar 00:08:41
Usa el método de coche 00:08:43
Con dispunta arrancar 00:08:44
El método de coche 00:08:45
Con superpunta arrancar 00:08:46
El método del vehículo 00:08:47
Pero por arriba del vehículo 00:08:49
Pues 00:08:51
Parece ser 00:08:52
Que es más complejo llegar 00:08:53
¿Vale? 00:08:54
Ahora luego 00:08:55
Miraremos como se puede hacer 00:08:56
Si se puede hacer 00:08:58
¿Vale? 00:08:59
Entonces 00:09:01
Ejemplo de 00:09:01
Overriding 00:09:02
¿Vale? 00:09:04
Y aquí imaginaos que tengo esta 00:09:05
Recursos 00:09:07
Aula y ordenador 00:09:09
Pero que 00:09:10
Decir descripción de aula 00:09:11
Es distinto de los demás 00:09:14
Pues entonces en recurso 00:09:15
Pongo decir descripción 00:09:18
El azul 00:09:19
¿Vale? 00:09:20
Y el ordenador 00:09:21
Heredará directamente este de aquí 00:09:22
Tendrá 00:09:25
Hará lo mismo que el recurso 00:09:25
Pero en el aula 00:09:27
Hago un 00:09:29
¿Cómo se dice? 00:09:30
Una sobrescripción 00:09:32
¿Vale? 00:09:34
Sobrescribo 00:09:35
Entonces 00:09:35
Ahora tengo mi propio método 00:09:36
¿Vale? 00:09:39
Si dentro de aula 00:09:39
Un objeto aula 00:09:41
Uso this.decir descripción 00:09:42
Estaré usando este método de aquí 00:09:44
Si uso super.decir descripción 00:09:46
Estaré usando este método de aquí 00:09:49
¿Sí? 00:09:52
Normalmente dentro 00:09:54
La aula está en un recurso 00:09:56
Puede usar el suyo 00:09:57
El método 00:10:00
Que estaba sobrescribiendo 00:10:02
Cuando tú heredas desde otra 00:10:04
Ella tendrá sus métodos 00:10:07
Y tú puedes decidir de sobrescribir sus métodos 00:10:09
¿Vale? 00:10:12
De hecho 00:10:14
Probablemente tendría poco sentido 00:10:15
Irse por arriba todavía más 00:10:17
¿Vale? 00:10:19
Porque si tú eres un aula 00:10:19
Ehm 00:10:21
, sobrescribes un método de recurso 00:10:22
Es porque tú quieres hacer algo más específico de recurso 00:10:25
Y puedes elegir si usar el tuyo más específico 00:10:28
O el de tu padre 00:10:30
Pero el de tu abuelo tendría poco sentido 00:10:31
Será el tu padre que 00:10:34
Si quieres usar 00:10:35
Usará el del abuelo 00:10:36
Con super.er 00:10:37
Entonces al mandar un mensaje a un objeto 00:10:38
El método seleccionado 00:10:46
Depende de la clase real 00:10:47
De la que el objeto es instancia 00:10:49
¿Vale? 00:10:51
Lo que decíamos antes 00:10:52
¿Vale? 00:10:53
Que no es lo que pasa en el shadowing 00:10:54
En el shadowing 00:10:56
Hemos visto que depende 00:10:58
Del tipo de 00:10:59
Ehm 00:11:01
Del tipo de variable que tú tienes 00:11:03
De la referencia 00:11:06
Digamos en un cierto sentido 00:11:08
Sin embargo 00:11:09
Aquí en el overreading 00:11:10
Se va a mirar 00:11:12
El tipo de la instancia real 00:11:13
¿Vale? 00:11:16
La clase de referencia 00:11:18
La que está asignado 00:11:19
¿Vale? 00:11:20
Como es el caso de los intubos 00:11:21
¿Sí? 00:11:22
Entonces en los atributos 00:11:23
En los shadowing 00:11:24
Se hace referencia 00:11:25
Al tipo de la variable 00:11:27
Mientras aquí se hace referencia 00:11:31
Al objeto de la instancia real 00:11:33
¿Sí? 00:11:35
Super 00:11:39
¿Vale? 00:11:40
Este de aquí ya lo hemos visto más o menos 00:11:41
Es una referencia al objeto actual 00:11:42
Como si fuera una instancia de una superclase 00:11:45
¿Vale? 00:11:47
Es como un dis 00:11:48
Pero pensado como 00:11:48
Soy de la clase real 00:11:50
Sé que extendo 00:11:52
¿Sí? 00:11:52
Y podemos utilizar por ejemplo 00:11:55
Super punto imprime 00:11:57
Para utilizar el imprime 00:11:59
Como si fuera 00:12:00
De la 00:12:01
De la 00:12:02
De la clase persona 00:12:03
Por ejemplo 00:12:04
¿Sí? 00:12:05
Tenemos dos ideas 00:12:09
Dos funciones del super 00:12:11
¿Vale? 00:12:13
El super como método así 00:12:14
Que en realidad está llamando 00:12:15
El constructor 00:12:17
De la 00:12:18
De la superclase 00:12:19
O superase 00:12:20
Y casi en paréntesis 00:12:22
Que es una referencia 00:12:23
Es como el dis 00:12:24
Pero para la superclase 00:12:25
Considerando el dis 00:12:27
Como una instancia de la superclase 00:12:28
¿Sí? 00:12:30
Entonces podemos hacer 00:12:31
Super punto método 00:12:32
Super punto atributo 00:12:33
Esto para acceder a un método 00:12:34
De la superclase 00:12:36
O esto para acceder 00:12:38
A un atributo 00:12:39
De la superclase 00:12:40
¿Sí? 00:12:42
Y finalmente 00:12:48
¿Vale? 00:12:50
No es 00:12:52
Últimas dos referencias 00:12:52
Overriding versus overloading 00:12:55
¿Vale? 00:12:57
Nosotros tenemos dos conceptos 00:12:57
Ahora con over 00:12:59
Uno es 00:13:00
Sobrescribir 00:13:01
Y uno es sobrecargar 00:13:02
¿Vale? 00:13:04
Hemos visto los dos 00:13:04
Cuando hago sobrescribir 00:13:05
Lo que estoy haciendo es 00:13:07
Modificar la implementación 00:13:09
De un 00:13:11
De un 00:13:11
Método que ya existe 00:13:13
¿Vale? 00:13:15
El método de la superclase 00:13:16
Mientras que cuando hago overloading 00:13:18
Lo que estoy haciendo es 00:13:20
Que el método de la superclase 00:13:21
Tiene el mismo método 00:13:22
Con el mismo nombre 00:13:22
Tiene distinta firma 00:13:24
Tiene distintas 00:13:26
¿Cómo se dice? 00:13:27
Distinto parámetro 00:13:31
Gracias 00:13:33
Y de esta forma estoy sobrecargando 00:13:33
La funcionalidad de este método 00:13:36
Este método puede hacer cosas un poquito distintas 00:13:38
Dependiendo de que 00:13:40
Parámetros les pongo 00:13:41
¿Sí? 00:13:43
Vale 00:13:46
Y finalmente 00:13:47
Instance of 00:13:49
¿Vale? 00:13:52
Instance of es un comandito 00:13:52
Es un operador 00:13:54
¿Vale? 00:13:55
Que me permite preguntarme 00:13:55
Si una cierta 00:13:57
Variable 00:13:59
Si una cierta referencia 00:14:01
Si un cierto objeto 00:14:03
Es una instancia 00:14:04
De una clase 00:14:05
¿Vale? 00:14:06
Por ejemplo 00:14:08
Si yo aquí tengo 00:14:08
Gato, gato 00:14:10
Que es un gato 00:14:12
¿Vale? 00:14:13
Y tengo que gato 00:14:14
Extende animal 00:14:15
Y perro 00:14:15
Extende animal 00:14:16
Me puedo preguntar 00:14:17
Gato 00:14:18
Instance of 00:14:19
Animal 00:14:20
Y esto me da true 00:14:21
Si gato es una instancia del animal 00:14:23
False 00:14:26
Si gato 00:14:27
Esta variable aquí 00:14:28
No es una instancia del animal 00:14:29
Y el resultado es true 00:14:30
¿Sí? 00:14:32
Porque gato es un animal 00:14:34
Porque a veces tú te 00:14:35
Te quieres preguntar 00:14:41
Tienes una variable 00:14:42
Pero no sabes esta variable 00:14:43
De que instancia es 00:14:45
Y te quieres preguntar 00:14:46
¿Es de esta instancia o de esta? 00:14:48
¿Vale? 00:14:50
Entonces dependiendo 00:14:51
Esto daría true 00:14:53
Esto daría true 00:14:54
Esto daría false 00:14:55
Creo 00:14:56
Ahora lo miramos 00:14:56
Ahora hacemos la prueba 00:14:59
¿Vale? 00:15:00
¿Por qué esto? 00:15:02
Por lo que viene después 00:15:03
Que es el polimorfismo 00:15:05
¿Vale? 00:15:07
Dudas hasta aquí 00:15:10
Subido por:
Stefano C.
Licencia:
Reconocimiento - No comercial - Compartir igual
Visualizaciones:
4
Fecha:
7 de febrero de 2024 - 11:12
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
15′ 16″
Relación de aspecto:
4:3 Hasta 2009 fue el estándar utilizado en la televisión PAL; muchas pantallas de ordenador y televisores usan este estándar, erróneamente llamado cuadrado, cuando en la realidad es rectangular o wide.
Resolución:
960x720 píxeles
Tamaño:
79.43 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid