Saltar navegación

20250117 Ejemplo clase Abstracta - 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 17 de enero de 2025 por Stefano C.

14 visualizaciones

Descargar la transcripción

Entonces, vamos a hacer un ejemplo de clases abstractas. 00:00:00
Estos son instrumentos con cuerda. 00:00:04
Esta clase representa instrumentos con cuerda. 00:00:14
En realidad, acordaos que cuando hacéis este tipo de clase, porque luego es un, es un, 00:00:19
Entonces sale raro de esto 00:00:24
Es un instrumento con cuerda 00:00:27
¿Vale? Entonces ponerlo al 00:00:30
Singulario creo que es mejor 00:00:31
Refactor 00:00:33
Rename 00:00:35
Lo cambias, instrumento con cuerda 00:00:36
Ya está 00:00:39
Entonces 00:00:40
¿Qué tiene un instrumento con cuerda? 00:00:42
Pues seguramente 00:00:45
Unas cuerdas 00:00:46
Aquí estamos todos de acuerdo 00:00:49
¿Vale? 00:00:53
tendrá un constructor 00:00:54
public void 00:00:58
instrumento 00:01:00
con cuerda 00:01:04
int n 00:01:05
dis.num 00:01:07
cuerdas es igual a n 00:01:11
y por ejemplo 00:01:14
cualquier instrumento con cuerda puede 00:01:17
describirse 00:01:19
por ejemplo 00:01:21
public void 00:01:21
Descríbete 00:01:24
Y dirá 00:01:26
Sí, soy 00:01:30
Soy 00:01:31
Soy 00:01:33
Soy un instrumento con 00:01:35
Más 00:01:39
N cuerdas 00:01:40
Más 00:01:42
Cuerdas 00:01:43
¿Qué he hecho? 00:01:45
Nun 00:01:53
Nun 00:01:53
¿Dudas? 00:01:57
N es parámetro formal 00:02:00
Mi número se llama dis.numcuerdas 00:02:01
¿Vale? 00:02:04
Hasta ahora esta aquí es una clase normal y corriente 00:02:05
Es una clase como la que hemos construido hasta ahora 00:02:08
¿Vale? 00:02:10
¿Qué pasa, pero? 00:02:11
Que ahora yo quiero que un instrumento con cuerda 00:02:12
Seguramente todos los instrumentos con cuerda 00:02:16
Lo que pueden hacer es afinarse 00:02:18
Yo puedo afinar 00:02:21
Pero vosotros que sois expertos musicales 00:02:22
Sabéis que cada instrumento con cuerda se afina de una forma distinta 00:02:25
¿Vale? 00:02:28
Entonces, si yo hago public void afinar, yo no sé qué poner aquí, porque una guitarra se afinaría con milaresolcimi, pero un ukulele no, un ukulele se afina de otra forma, 00:02:29
Se afina sol, do, mi, la 00:02:54
Por lo tanto son distintos 00:03:04
Por lo tanto, ¿qué voy a poner aquí? 00:03:06
No tengo una definición de este método para afinar el instrumento con cuerda 00:03:10
Porque dependiendo del instrumento con cuerda que estoy haciendo 00:03:16
Pues tendré que hacer cosas distintas, afinarlo de otra forma 00:03:19
De hecho, una guitarra tiene seis cordas, un bajo tiene cuatro 00:03:22
Entonces, ¿cómo hago? Afinar todos a la misma forma 00:03:26
Si uno tengo que afinar seis cuerdas y uno tengo que afinar solo cuatro 00:03:29
O sea, que no tengo una definición que me valga para todos los instrumentos de cuerda 00:03:33
Ahora, todos los instrumentos se pueden describir con 00:03:38
Soy un instrumento con este número de cuerdas 00:03:40
Pues esto lo he hecho aquí, esto es un método concreto 00:03:42
Pero este método de aquí me da problemas 00:03:46
¿Vale? 00:03:48
Otro método que me puede dar problemas 00:03:50
es public void sonar 00:03:53
porque claro, una guitarra hará 00:03:58
pero un ukulele hará como 00:04:02
y un bajo hará 00:04:06
entonces no puedo yo poner aquí sonar y que todos sonen iguales 00:04:10
cada uno tendrá su propia forma de sonar 00:04:16
entonces ¿qué hago? le digo que estos métodos 00:04:19
No los voy a implementar yo. Fijaos, algunos sí los he implementado. Hasta tengo un constructor. Pero le voy a decir, oye, mira, estos métodos de aquí tienen que estar porque cualquier instrumento con cuerda se podrá afinar y cualquier instrumento con cuerda se podrá sonar, pero no sé cómo. 00:04:41
¿Sí? Ahora esto se enfada 00:05:02
Porque me dice, el método abstracto 00:05:05
Puede solo ser definido 00:05:07
En una clase abstracta 00:05:09
Porque la clase 00:05:11
Aquí será parecido 00:05:13
Te dirá 00:05:16
El tipo de instrumento concorda 00:05:17
Tiene que ser abstracto 00:05:19
Una clase abstracta, para definir 00:05:21
Métodos abstractos 00:05:23
Entonces ningún problema 00:05:24
Abstract 00:05:26
Ya está, ahora esta es una clase abstracta 00:05:28
Ser una clase abstracta no quiere decir que todo tiene que ser abstracto, quiere decir que algunas cosas aquí son abstractas y algunas cosas no. 00:05:32
Estos que podía hacer, esta es la parte digamos concreta, estos lo comparten todos, hemos decidido, obviamente una guitarra no es igual a un bajo, 00:05:39
pero para cuando se describe, dice solo el número de las cuerdas, pues perfecto, aquí lo tengo. 00:05:50
Todos los instrumentos, este método aquí está implementado, pero estos métodos de aquí no. 00:05:55
Me está solo diciendo, oye, mira, estos tienen que estar. Cuando tú hagas una clase concreta que herede de esta clase abstracta, estos dos métodos los deberás hacer. Este es un contrato. La interfaz, veremos que es todavía más esto. 00:06:01
Es un contrato que hacemos entre quien ha hecho esta clase aquí y quien la va a heredar. Una parte yo te la doy hecha y esta parte la parte común con todos los instrumentos de cuerda. 00:06:19
Si tú quieres ser un instrumento de cuerda, puedes extenderme, pero a cambio, el contrato que hacemos, te pillas toda esta parte de aquí, ya hecha, que podría ser más interesante que lo que hemos hecho nosotros, 00:06:30
Pero a cambio me tienes que implementar tú estos dos métodos 00:06:42
Según el tipo de instrumento que eres tú 00:06:47
¿Entiendes? Hasta aquí 00:06:51
Vamos a crear la clase main 00:06:54
Clase main 00:06:58
Si yo aquí intento hacer un instrumento con cuerda ICC 00:07:03
Es igual a new 00:07:17
Instrumento 00:07:19
Con cuerda 00:07:22
De 4 00:07:23
Se enfada 00:07:24
¿Por qué se enfada? 00:07:28
Si voy a mirar, ¿por qué me dice instrumento con cuerda? 00:07:30
Porque lo he escrito mal 00:07:34
Porque he escrito instrumento al otro lado 00:07:44
Vale 00:07:47
Entonces estaba mal al otro lado 00:07:48
Instrumento 00:07:50
Y aquí 00:07:52
Cuidado, no le pongáis la R aquí 00:07:54
Porque si no se queda en un fichero Java 00:07:59
Que no es correcto 00:08:02
Siempre que cambiáis este tipo de declaraciones 00:08:02
Hacedlo con un refactor 00:08:06
Refactor, rename 00:08:07
Y aquí le ponéis instrumento 00:08:09
Con cuerda 00:08:12
Entonces os lo cambia 00:08:13
También aquí 00:08:15
En el constructor 00:08:17
Y os lo cambia también aquí 00:08:18
En el Java 00:08:20
Ahora que lo tengo 00:08:22
Ahora se sigue enfadando otra vez 00:08:24
Fijaos que aquí no se enfada 00:08:27
Esto es legítimo. Pero aquí se enfada porque me dice cannot instantiate the type instrumento con cuerda. No puedo instanciar un elemento de este tipo. ¿Por qué? Porque es abstracto y los elementos, las clases abstractas no se pueden instanciar. 00:08:29
Porque si yo creara un objeto como esto, entonces yo podría llamar luego el afinar o el sonar, pero no están definidos. 00:08:48
Y por lo tanto, ¿qué debería hacer él? Pobrecito. 00:08:58
Ten en cuenta que yo podría hacer esto. 00:09:01
Esto no lo sé qué es. 00:09:13
Luego lo debería instanciar. 00:09:14
Si ahora uso... ¿Qué me pasaría si ahora llamo algo sobre ICC? 00:09:16
No. 00:09:25
Ahora lo vemos. 00:09:26
fijaos que cuando hago y cc punto me sale aquí los métodos que he definido en 00:09:27
instrumento con cuerda porque esto es un instrumento con cuerda 00:09:33
al final descríbete dónde está esto sonar junto con los de objetos ahora si 00:09:37
yo le dijera descríbete que fijaos es un método que está implementado 00:09:44
Se me enfada. ¿Por qué se me enfada? 00:09:52
The local variable 00:09:58
ICC may not have been 00:10:00
initialized. 00:10:02
Podría no ser inicializada. 00:10:04
En particular, 00:10:07
si este problema no lo diera, 00:10:08
esto sería un null. 00:10:11
¿Y esto qué problema da? 00:10:17
¿Dónde están errores? 00:10:25
Mi viejo amigo, el null pointer exception. 00:10:28
Estás intentando hacer 00:10:31
algo 00:10:33
sobre algo que es null. 00:10:33
Entonces, 00:10:37
aquí tengo una variable que en vez de apuntar a un objeto apunta a null, 00:10:38
cuando tú dices algo sobre este objeto, 00:10:44
él no sabe a qué objeto te hace referencia y por lo tanto explota, ¿sí? 00:10:46
Entonces, así no lo puede usar, ¿sí? 00:10:53
Y hemos dicho que no puede hacer un new instrumento con cuerda 00:10:55
porque es abstracta, o sea que no lo puede usar, ¿sí? 00:10:58
Esperad que aquí, ok, vuelvo a lo mío. 00:11:03
Entonces, para poder utilizar instrumentos con cuerda 00:11:16
Necesito crear un instrumento con cuerda 00:11:20
¿Cómo lo hago? 00:11:24
Voy aquí y me creo guitarra 00:11:25
Ya está, ahora tengo una guitarra 00:11:31
Y a esta guitarra le digo 00:11:35
Oye, mira, ¿tú extendes qué? 00:11:36
Efectivamente 00:11:41
Instrumento 00:11:45
Con cuerda 00:11:48
¿Vale? 00:11:51
Y fijaos que en el momento que le digo esto 00:11:53
Se enfada 00:11:55
¿Por qué se enfadará? 00:11:55
¿Por qué? 00:12:00
Diga, type 00:12:12
Quitar must implement the inherited abstract method 00:12:13
Instrumento con cuerda punto afinar 00:12:17
Se enfada porque me está diciendo 00:12:18
Tú dices que extendes esta clase 00:12:30
Esta clase abstracta 00:12:33
Y si tú extendes esta clase abstracta, tienes que implementar todos los métodos abstractos de esa clase. 00:12:34
En particular, me está diciendo, el tipo guitarra, o sea, esta clase, tiene que implementar el método abstracto heredado, afinar. 00:12:47
Que es uno de los dos que tengo que rellenar. 00:13:00
Entonces, yo le puedo decir aquí, ah, sí, pero aquí me da dos opciones para solucionar esto. 00:13:03
o añade los métodos que no has implementado, o haz abstracto también, guitarra. 00:13:09
Si guitarra es abstracto no tengo problemas, puedo hereditar objetos abstractos, añadir, o sea, perdón, métodos abstractos, añadir otros métodos abstractos, 00:13:18
pero no puedo hacer una guitarra, ¿sí? Sin embargo, yo lo que quiero es esto. 00:13:28
Entonces, él me dice afinar y sonar, que son los dos métodos sobrescribiendo, los métodos que eran arriba abstractos, y entonces ahora mi guitarra está bien, porque mi guitarra es una implementación concreta de un instrumento con cuerda, 00:13:35
Y entonces, lo que había dejado allí de no sé qué hacer, pues ahora lo voy a hacer aquí, con sonar y afinar. 00:13:58
Además de todo el resto. 00:14:04
Entonces, ¿qué tiene una guitarra? 00:14:09
Pues, tiene un string, esto no sería string, sería notas, pero bueno, un array de string, cuerdas. 00:14:12
¿Sí? 00:14:24
Entonces, cuando yo creo una guitarra, public guitarra, le tendré que pasar cuántas cuerdas tienes a guitarras de más cuerdas. 00:14:26
Pero bueno, asumamos nosotros guitarras estándar, no le paso nada de nada, ¿vale? 00:14:41
Y lo que me hace él es crearme un súper, entonces, instrumento con cuerda de seis cuerdas. 00:14:47
Ahora sé que tiene 6 cuerdas 00:14:56
Se enfada 00:14:58
No había puesto aquí 00:15:00
A ver por qué se enfada 00:15:02
El constructor de instrumentos con cuerda int 00:15:06
Is undefined 00:15:11
No sé yo si está tan undefined 00:15:12
Ah, porque 00:15:32
No había hecho un constructor 00:15:55
Había puesto este void 00:15:57
Como había puesto este void 00:15:58
Esto no es un constructor, es un método 00:16:00
¿Vale? Me he equivocado yo cuando 00:16:02
Cuando lo he declarado, entonces él me está diciendo 00:16:04
No existe el constructor 00:16:06
Este es el constructor que quiero 00:16:08
¿Sí? ¿Se ha entendido? 00:16:11
El void que estaba aquí 00:16:17
Vale, entonces 00:16:18
Ahora sí, ahora me funciona 00:16:21
Perfecto, entonces 00:16:23
Creo un instrumento con cuerda con 6 cuerdas 00:16:24
Por lo tanto, en la parte de instrumento con cuerda 00:16:27
El número de cuerda me pondrá 6 00:16:29
¿Vale? Y luego 00:16:30
haré un 00:16:33
cuerdas 00:16:34
es igual 00:16:36
a new 00:16:39
string 00:16:40
de 6 sería 00:16:42
pero 10.cuerdas 00:16:47
se enfada 00:16:49
ah no, porque 10.num 00:16:54
cuerdas, es este 00:16:59
yo quiero este valor 00:17:00
para que me crea un array 00:17:01
de tantos 00:17:05
espacios, cuantas cuerdas 00:17:06
tengo ¿vale? ¿por qué? ahora lo vemos ¿vale? entonces mi cuerda tiene un array con sus 00:17:09
cuerdas que es lo que tiene más, en realidad como todos lo tienen lo hubiera podido poner 00:17:17
arriba y no implementarlo pero bueno lo quería hacer así ¿vale? ahora afinar ¿qué hago 00:17:23
cuando afino? ¿vale? lo que quiero afinar es que en mis cuerdas toquen exactamente lo 00:17:30
que tiene que tocar vale entonces en cuerdas de 0 pondré mi, la, re, sol, si, mi, mi alto 00:17:37
entonces esto es cuando ya afino y luego a lo mejor lo imprimo en pantalla para que haga algo 00:18:15
si no, no se ve nada, si eso 00:18:20
afina 00:18:22
más 00:18:28
a raíz punto to string 00:18:32
cuerdas 00:18:36
entonces cuando yo afino 00:18:38
pondré las cuerdas 00:18:44
todas al valor correcto 00:18:46
y luego le pondré 00:18:48
que afina 00:18:50
cuando sueno 00:18:50
pues hará algo 00:18:53
La guitarra suena y dice algo 00:18:54
Podría pillar al azar 00:18:56
Estas posiciones aquí para hacer 00:18:58
Sonas distintas, pero nosotros hacemos que 00:19:00
Cuando suena la guitarra, ¿cómo hace la guitarra? 00:19:02
Brang 00:19:06
Brang 00:19:06
Brang 00:19:08
¿Sí? 00:19:10
O vravrang 00:19:16
00:19:17
Entonces, he hecho mi guitarra 00:19:21
Ahora voy al mundo del main 00:19:24
hemos dicho que esto no lo puede hacer 00:19:26
como un instrumento de concuerda 00:19:29
pero lo que puede hacer ahora es un 00:19:30
new 00:19:33
guitarra 00:19:33
entonces ahora 00:19:36
no hay problemas 00:19:40
y si yo lanzo 00:19:42
la guitarra se describirá como soy un instrumento 00:19:43
de secundaria 00:19:47
si yo le digo 00:19:47
esto lo llamamos 00:19:51
guitarra 00:19:53
si yo le digo a guitarra 00:19:58
.afinar 00:19:59
Se afinará 00:20:03
Y si yo digo guitar 00:20:05
Dot 00:20:07
¿Qué es esto? 00:20:08
Sonar 00:20:11
Sonará la guitarra 00:20:11
Fijaos que guitar es un instrumento con cuerda 00:20:14
Pero usa 00:20:16
Los métodos de guitarra 00:20:21
¿Sí? 00:20:27
Vale 00:20:28
Vamos a seguir con nuestro ejercicio 00:20:29
Creo un instrumento con cuatro cuerdas 00:20:31
¿Vale? 00:20:40
Este es un instrumento con cuatro cuerdas 00:20:44
Ukelele 00:20:47
El ukelele 00:20:49
Ukelele 00:20:50
El bajo 00:20:51
¿Qué sigo? 00:20:52
¿Cielo? 00:20:54
¿También? 00:20:54
¿Por qué no? 00:20:55
¿Violín? 00:20:56
¿Por qué no? 00:20:57
¿Sí? 00:20:58
Por lo tanto, esto es un instrumento con cuatro cuerdas 00:20:59
¿Qué tiene particularidad? 00:21:02
Que si yo hago public instrumento con cuatro cuerdas, esto extenderá instrumento con cuerda, ¿no? 00:21:03
Y que si yo hago un constructor, pues la única cosa que tendrá que hacer es, exacto, super de cuatro. 00:21:28
Porque un instrumento con cuerdas no sé cuántas tiene, pero un instrumento con cuatro cuerdas asumo que tenga cuatro cuerdas, si no me he equivocado de algo. 00:21:43
Ahora, ¿pero por qué se enfada? Faltaría implementar los métodos abstractos. ¿Y cómo se afina un instrumento de cuatro cuerdas? O sea que esto también es, y entonces no se enfada. 00:21:50
Porque todos los métodos que he heredado desde aquí arriba, estos dos, siguen siendo abstractos. 00:22:21
Pero como esta de aquí es abstracta también, siguen siendo abstractos. 00:22:34
No puedo crear un new instrumento con cuatro cuerdas, porque es abstracto. 00:22:39
Entonces, puedo implementar esto. 00:22:46
Los puedo implementar estos. 00:22:50
si quiero aquí. O puedo no implementarlos y dejarlo a la siguiente nivel de la jerarquía. 00:22:51
Como queramos, como necesitamos. ¿Se entiende? 00:23:00
Ahora, todos los instrumentos con cuatro cuerdas tienen un int nivel de fastidio. 00:23:04
Fastidio existe. Por ejemplo, el violín tiene un nivel de fastidio altísimo, 00:23:12
Porque si no lo sabes tocar 00:23:20
Es horrible 00:23:22
¿Vale? 00:23:24
El ukulele tiene un nivel fastidio muy bajo 00:23:25
¿Sí? 00:23:27
Entonces aquí se lo ponemos 00:23:29
Int nivel de fastidio 00:23:30
¿Sí? 00:23:33
Que aquí setaremos a cero por defecto 00:23:37
Nivel 00:23:41
Dis 00:23:42
Nivel de fastidio 00:23:44
Es igual a nivel de 00:23:46
Y si pensáis que no 00:23:47
Os invito, un día que tenéis hambre 00:23:53
A ir a escuchar a alguien que no sabe tocar violín 00:23:55
Es como 00:23:58
Una cosa en el estómago 00:23:59
Que no podéis entender 00:24:02
¿Vale? 00:24:03
¿Dudas? Vale 00:24:06
Podríamos aquí, repito 00:24:07
Por ejemplo 00:24:10
Yo podría aquí implementar 00:24:11
Uno o los dos métodos 00:24:16
Que he puesto aquí 00:24:18
Como abstractos, ¿vale? 00:24:20
Entonces, es como si completara una parte de lo que tengo que completar, pero no el resto. 00:24:21
Como nosotros consideramos también violín y cosas por el estilo, a lo mejor no podemos hacer mucho aquí. 00:24:28
Pero imaginamos que todos los instrumentos de cuatro cuerdas hacen el mismo ñi ñi ñi, por ejemplo. 00:24:33
Pues entonces yo podría hacer aquí que public void sonar es siso ñi ñi ñi 00:24:38
Esto quiere decir que estoy implementando una parte 00:24:53
O sea que esto que era extracto, ahora todos los que heredarán de los instrumentos con cuatro cuerdas 00:24:57
Todos harán ñi ñi ñi 00:25:04
Lo he extrapolado, lo he implementado. 00:25:07
Se quedará que la afinación no. 00:25:12
La afinación es propia de cada uno de los instrumentos distintos que hay. 00:25:14
¿Se entiende más o menos por dónde voy? 00:25:19
Y podría aquí declarar un nuevo método abstracto. 00:25:21
Que todos los instrumentos de 4K cordas tendrán que tener, pero no todos los instrumentos con cuerda. 00:25:26
Como por ejemplo 00:25:32
Public 00:25:37
Abstract 00:25:40
Void 00:25:42
Mejorar 00:25:46
Hay un 00:25:49
Algo que puede hacer sobre los instrumentos 00:25:54
Con cuatro cuartas que es mejorar 00:25:57
Que si lo mejoro, hace, no lo sé 00:25:59
Porque dependerá 00:26:01
Del instrumento que tengo por debajo 00:26:02
Claro, probablemente 00:26:05
Pero el ukulele, por ejemplo 00:26:08
si tú aprendes mucho el ukelele 00:26:09
lo bajas poquito, si aprendes 00:26:12
mucho violín, bajas 00:26:14
mucho el nivel de fastidio, entonces 00:26:16
hacen cosas distintas, no lo sé, me lo invento 00:26:17
¿sí? pero como no 00:26:20
lo sé, lo dejo allí 00:26:22
¿sí? 00:26:23
¿de acuerdo? 00:26:26
vamos a hacer ahora 00:26:27
un ukelele 00:26:29
ukelele, así 00:26:34
clase ukelele 00:26:36
clase ukelele, red de 00:26:40
instrumento 00:26:41
con cuatro 00:26:47
cuerdas 00:26:49
¿vale? y aquí me dice 00:26:51
oye mira que 00:26:53
le falta el constructor 00:26:54
le falta, añadamos el constructor 00:26:57
¿vale? entonces el ukulele 00:26:59
le paso un nivel de fastidio 00:27:01
y me llama el constructor 00:27:04
de cuatro cuerdas 00:27:05
con su nivel de fastidio 00:27:07
¿sí? vale, ahora 00:27:09
Decidimos si le añadimos algo más 00:27:11
Sigue enfadándose 00:27:13
Se va a mirar y dice 00:27:15
Claro, no me has puesto abstracto 00:27:17
Y estás extendiendo una clase abstracta 00:27:19
Entonces los métodos abstractos 00:27:21
Los tienes que implementar 00:27:24
¿Cuántos métodos me va a poner? 00:27:25
Dos 00:27:34
Afinar y mejorar 00:27:34
No me pondrá 00:27:37
Sonar 00:27:41
Porque sonar ya lo he implementado 00:27:42
¿Sí? 00:27:44
Mira, me voy hacia atrás, ¿vale? 00:27:46
Soy ukulele, voy a instrumento con cuerdas 00:27:51
Aquí que he dejado para hacer, que he dejado abstracto 00:27:53
He dejado este método de aquí 00:27:56
Que es nuevo aquí, que lo he puesto yo 00:27:58
Y también he implementado sonar 00:28:01
Por lo tanto, sonar ya está implementado 00:28:04
Pero derivaba desde aquí, que estaba también a afinar 00:28:06
Cosa que en vez no he hecho aquí 00:28:09
Por lo tanto, me heredan dos 00:28:12
me han llegado hasta mi dos métodos 00:28:15
que son abstractos y que todavía 00:28:18
no tienen una implementación 00:28:19
entonces si yo aquí le digo 00:28:21
añadir an implemented me pone 00:28:22
mejorar y afinar 00:28:25
¿vale? como es un ukulele 00:28:27
cada vez que 00:28:29
mejoro 00:28:31
10.nivel de fastidio 00:28:33
menos menos 00:28:35
¿si? mientras aprendo 00:28:36
cuando voy a mejorar reduzco el nivel 00:28:39
de fastidio un poquito 00:28:41
Afinar 00:28:42
Pues lo que tendrá que hacer 00:28:46
Bueno, en el ukulele tengo que hacer una cosa parecida 00:28:48
A la guitarra 00:28:50
De pillarme esto 00:28:51
Solo que en vez de 00:28:54
6 tendrá 4 cuerdas 00:28:59
Esto no lo necesito 00:29:01
Fijaos que 00:29:13
En el super 00:29:17
Yo aquí ya le he metido que es 4 00:29:18
Entonces esto ya tiene 4 cuerdas, lo sabe ya 00:29:21
Porque es un instrumento con 4 cuerdas 00:29:23
Entonces puedo crearme tranquilamente el número de cuerdas en base a cuántas cuerdas tengo, que será 4. 00:29:25
Y luego pillaré el afinar, solo que aquí cuando afino no tengo 6 cuerdas, sino solo 4. 00:29:34
Afinado, ukulele. 00:29:52
Y son distintas. 00:29:55
Esto es un sol 00:29:58
Esto es un do 00:30:01
Esto es un mi 00:30:04
E, E, E, C, D, E 00:30:10
Y esto de aquí es un la 00:30:14
¿Sí? 00:30:17
¿Veis que hace lo mismo? 00:30:20
Pero de una forma un poco distinta 00:30:22
Allá hacía seis cuerdas con ciertas notas 00:30:23
Aquí hace cuatro cuerdas con otras notas 00:30:29
Por lo tanto, afinar es hechizo de cuarto o quinto nivel de los magos 00:30:31
Polimórfico, muy bien 00:30:45
Habéis atendido muy bien la clase de antes 00:30:50
Me gusta cuando sois así de... 00:30:54
Afinar es el mismo método en clases distintas que hace cosas parecidas pero distintas 00:30:59
Afina los instrumentos pero los afina de forma distinta 00:31:06
Estamos dando polimorfismo 00:31:10
Este método se dice que es polimórfico 00:31:12
¿Sí? 00:31:15
Muy bien 00:31:17
Entonces, y con esto ya he configurado todo 00:31:18
Ahora ya puedo utilizar mis ukeleles 00:31:21
Ukeleles 00:31:22
No sé, ¿cómo se dice? 00:31:23
Me voy aquí 00:31:26
Y me digo 00:31:28
Instrumento con cuerda 00:31:29
Y dos 00:31:33
No sé qué es 00:31:35
Es un new 00:31:37
Le pasó algo al ukelele 00:31:38
Le pasaba 00:31:47
El nivel de fastidio 00:31:49
El fastidio es 00:31:50
Dos 00:31:52
Y ahora yo puedo hacer lo que hacía aquí 00:31:53
Con el ukelele 00:31:58
Vale 00:32:00
Y dos punto descríbete 00:32:01
Y dos punto afinar 00:32:03
Y dos punto sonar 00:32:06
Son instrumentos de cuatro cuerdas 00:32:10
afinado. Pregunta, ¿puedo mejorar? No puedo mejorar. ¿Por qué no puedo mejorar? Porque un instrumento 00:32:20
con cuerda no tiene mejorar. Yo soy una referencia como instrumento con cuerda. Solo puedo hacer lo 00:32:49
que hace instrumento con cuerda. Está claro que como tengo en instrumento con cuerda afinar, 00:33:01
Que luego lo he heredado 00:33:07
Y lo he sobrescrito 00:33:09
Cuando yo uso mejorar 00:33:11
Me va a usar el de la instancia 00:33:13
O sea, perdón 00:33:15
Cuando voy a usar afinar me va a usar el de la instancia 00:33:16
Entonces me va a usar 00:33:19
Este afinar 00:33:21
El afinar de ukulele 00:33:22
¿Sí? 00:33:24
Pero este mejorar 00:33:26
No es de la clase instrumento con cuerda 00:33:27
Es de la clase instrumento con cuatro cuerdas 00:33:31
Entonces cuando yo trato 00:33:34
eso como instrumento con cuerda el por dentro hasta lo tendrá pero no lo puedo 00:33:37
usar desde i2 que tendré que hacer como se llama esto y ahora fijaos que aparece 00:33:44
aquí que ha aparecido aquí como se llama esto como se llama esto 00:34:03
exacto muy bien ahí como como se te ha ocurrido 00:34:30
recordaos como una jerarquía 00:34:37
cuando voy por arriba de esta jerarquía 00:34:39
como es aquí 00:34:42
aquí estoy metiendo algo que está debajo 00:34:43
pero lo estoy considerando como si fuera 00:34:47
algo de arriba, estoy haciendo upcasting 00:34:49
sin embargo 00:34:52
cuando desde aquí algo que está 00:34:53
para arriba lo voy a considerar 00:34:55
como algo que está por debajo 00:34:58
en la cadena de la cosa, pues estoy haciendo 00:34:59
downcasting 00:35:01
en general es un casting explícito 00:35:02
Entonces, si yo este de aquí 00:35:07
Que era un instrumento con cuerda 00:35:10
Ahora le digo Sima en particular 00:35:12
Trata que eres un instrumento con cuatro cuerdas 00:35:13
Mejorar, pues bien 00:35:16
Me funciona 00:35:17
Oye, cuidado 00:35:18
Si yo pillo esto 00:35:19
Y le pongo White Hard 00:35:22
Punto 00:35:27
Ahora la guitarra puede mejorar 00:35:30
¿Qué pasa? 00:35:32
Entonces, ¿qué pasará? 00:35:45
O sea, ¿me da error? 00:35:47
Pilla una guitarra, trátala como un instrumento con cuatro cuerdas 00:35:49
Y mejorala, porque los instrumentos con cuatro cuerdas sí tienen mejorar 00:35:55
¡Fenomenal! 00:35:58
¿Pero qué pasará? 00:36:01
Class cast exception 00:36:08
Porque no puedo transformar una guitarra en un instrumento de cuatro cuerdas 00:36:09
Porque la guitarra no es instrumento de cuatro cuerdas 00:36:14
Guitarra es un instrumento con cuerdas 00:36:21
Pero no pasa por instrumento con cuatro cuerdas 00:36:25
Por lo tanto, este es un cast ilegal 00:36:28
Él aquí no lo puede saber 00:36:31
Pero si vosotros que lo estáis haciendo 00:36:33
¿Cómo podría saberlo? 00:36:36
Y por lo tanto, aquí 00:36:38
¿Cómo puedo ser seguro que esto se puede hacer? 00:36:39
Si esta cosa de aquí que no sé bien qué es 00:36:58
Resulta que es una instancia también 00:37:01
De instrumento con cuatro cuerdas 00:37:04
Entonces puede hacer tranquilamente 00:37:05
El downcasting hacia abajo 00:37:08
instrumento con cuatro cuerdas 00:37:10
UQLL, hagamos que el UQLL 00:37:24
como tiene un nivel de fastidio 00:37:26
o los instrumentos de cuerdas, todos tienen un nivel de fastidio 00:37:27
estaría guay que 00:37:30
la descripción 00:37:31
incluyera 00:37:34
esta cosa 00:37:36
entonces lo que puedo hacer 00:37:37
es, me pillo el instrumento 00:37:41
con cuatro cuerdas 00:37:44
y lo que hago es sobre escribir también 00:37:45
public 00:37:48
void 00:37:50
describeme 00:37:52
describeme o describir 00:37:54
como era, describete 00:37:59
ahora, cuando yo 00:38:01
describo, quiero escribir que tengo cuatro 00:38:07
cuerdas, entonces eso quiero mantenerlo 00:38:09
super 00:38:11
punto, describete 00:38:13
haz lo mismo que 00:38:15
hacías antes 00:38:17
pero además, añade 00:38:18
detrás, siso 00:38:21
y tengo nivel 00:38:22
de fastidio, dos puntos, más 00:38:25
10 puntos nivel de fastidio 00:38:28
ahora, cuando yo describo 00:38:31
una guitarra, solo me pondrá la descripción 00:38:38
de instrumento con cuerda, pero cuando 00:38:43
describo el ukelele, que es 00:38:46
un instrumento con cuerda, pero tiene un instrumento 00:38:51
con cuatro cuerdas sobrescrito, el método describete, el Java va a buscar el método 00:38:55
sobrescrito más cercano a la instancia que yo soy. Un ukulele es un instrumento con cuatro 00:39:05
cuerdas que es un instrumento con cuerdas. Por lo tanto va a usar esta implementación, 00:39:09
no esta. Y de hecho me dice, soy un instrumento con cuatro cuerdas y tengo nivel de fastidio 00:39:15
O sea que aquí, por polimorfismo, él la está utilizando, no el de instrumento con cuerda, 00:39:21
sino el de instrumento con cuatro cuerdas, porque es un ukelele. 00:39:34
Y si tú vas a mirar la estructura, nosotros tenemos instrumento con cuerda, 00:39:38
Tenemos guitarra que hereda de aquí 00:39:59
Tenemos instrumento con cuatro cuerdas por aquí 00:40:02
Y tenemos el ukulele aquí 00:40:08
Entonces, esto tiene de escríbete 00:40:10
Pero esto también tiene de escríbete 00:40:15
Cuando la instancia es un ukulele 00:40:17
Él irá a buscar el primer de escríbete que encuentra en esta cadena de aquí 00:40:19
Entonces usará el de instrumento con cuatro cuerdas 00:40:25
Si yo ahora sobrescribo aquí otra vez el descríbete, usará el suyo. 00:40:30
¿Se entiende? 00:40:40
Y todo esto sí, ni yo ir a hacer downcasting, upcasting o cosas por el estilo. 00:40:43
Me lo hace él de forma implícita. 00:40:49
Si yo el descríbete aquí lo sobrescribo otra vez. 00:40:52
Fijaos que esto está llamando el suscríbete de quién. 00:41:04
de instrumento con cuatro cuerdas 00:41:07
que dentro llamará el de instrumento 00:41:12
con cuerdas 00:41:15
y aquí le añado algo más 00:41:16
que hace solo el ukulele 00:41:20
como por ejemplo 00:41:22
el famosísimo 00:41:24
uuuu 00:41:27
samuel 00:41:28
ahora el ukulele 00:41:32
hace esto que es la parte 00:41:38
del instrumento con cuerda 00:41:41
esto que es la parte 00:41:43
de el instrumento con cuatro cuerdas y éste que es la parte propia del ukulele 00:41:45
dudas esto es más o menos cómo se usan estas cosas 00:41:55
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
Autor/es:
Stefano Chiesa
Subido por:
Stefano C.
Licencia:
Reconocimiento - No comercial
Visualizaciones:
14
Fecha:
17 de enero de 2025 - 12:44
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
42′ 05″
Relación de aspecto:
16:10 El estándar usado por los portátiles de 15,4" y algunos otros, es ancho como el 16:9.
Resolución:
1152x720 píxeles
Tamaño:
149.62 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid