20250117 Ejemplo clase Abstracta - 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:
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
si
00:01:13
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
Ay
00:01:54
¿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
Ya
00:07:35
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
de
00:18:35
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
Sí
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
si
00:35:05
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
No
00:35:49
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