Saltar navegación

20250124 Interfaces_2 - 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 26 de enero de 2025 por Raquel G.

14 visualizaciones

Descargar la transcripción

Vale, pues entonces 00:00:00
Hacemos nuestro, estábamos haciendo 00:00:03
Nuestro 00:00:05
Diseño de clases 00:00:07
Para gestionar este zoológico 00:00:09
Del 2050 00:00:11
No, bueno, del 2200 00:00:12
Venga, pues ya está 00:00:15
Todos los animales van a tener nombre, descripción 00:00:16
Y un historial de acciones que se han hecho con ellos 00:00:18
Vale, y ya está 00:00:20
Y aquí podríamos poner los get, los set 00:00:23
Todo el rollo moruno de toda la vida 00:00:25
¿Vale? 00:00:27
venga, sí, ahora que sabemos hacer las cosas rápidamente 00:00:30
un constructor 00:00:33
con parámetros 00:00:34
siempre ponemos 00:00:35
uno sin parámetros 00:00:38
ahora, si somos super clase 00:00:39
de otra clase que nos va a heredar 00:00:42
más que nunca viene bien un constructor sin parámetros 00:00:44
porque si luego hacemos 00:00:47
uno sin parámetros en la de abajo 00:00:48
nos va a decir 00:00:50
que este super implícito de aquí 00:00:50
no tiene constructor sin parámetros arriba 00:00:54
entonces, si hacemos constructores 00:00:56
a lo bestia para dar y tomar 00:00:58
seguramente nos ahorremos 00:01:00
problemas en el futuro 00:01:03
pues venga 00:01:04
constructor con parámetros 00:01:07
constructor sin parámetros 00:01:08
nuestra clase animal 00:01:10
de la cual heredarán 00:01:16
gatos, perros 00:01:17
caballos 00:01:20
y humanos 00:01:21
¿verdad? 00:01:22
vale, entonces vamos a hacer 00:01:25
un humano y un perro 00:01:27
¿no? 00:01:29
que heredan de animal, pues entonces 00:01:30
por ahora en el zoológico los robots solo han metido perros 00:01:33
por ahora, están ampliando, pero por ahora como solo han metido 00:01:38
perros, pues hacemos una clase perro solo 00:01:42
y el perro aparte del nombre, la descripción 00:01:45
y el historial de acciones que se han hecho con él, pues el perro 00:01:53
tiene algo que lo caracteriza respecto a 00:01:57
otros animales que no son perros 00:02:01
como por ejemplo 00:02:03
una raza, sí, lo que pasa es que una raza 00:02:05
se podría meter en animal, porque hay muchos animales que se caracterizan 00:02:09
un perro 00:02:12
yo creo que es el único 00:02:13
animal que ladra 00:02:15
entonces 00:02:17
se le podría 00:02:18
el lobo agulla 00:02:20
pero no ladra 00:02:26
¿tú has oído algún lobo hacer una de 00:02:27
pues no 00:02:28
Yo he visto lobos 00:02:29
Y vosotros también en el zoo seguro 00:02:32
Bueno, pues que los robots 00:02:35
En función del volumen del ladrido del perro 00:02:42
Pues lo ponen en un sitio 00:02:45
Donde dé más o menos por saco 00:02:46
Entonces tienen que tener registrado 00:02:49
El volumen del ladrido 00:02:50
¿Vale? 00:02:51
Vale, pues venga 00:02:56
Ponemos unos get in, unos set 00:02:57
constructor, sí, puedo hacer 00:02:59
constructor o no 00:03:04
vale, sobre todo me importa 00:03:06
en la superclase porque si luego la subclase 00:03:08
va a querer hacer y no tiene 00:03:10
aquí si no hago constructor 00:03:12
lo único que está ocurriendo es que tengo un constructor 00:03:14
sin parámetros por defecto y ya está, no pasa nada 00:03:16
que es lo que sabemos de toda la vida 00:03:19
que si una clase no tiene constructores 00:03:20
tiene uno por defecto y escondido 00:03:22
venga, tenemos el perro 00:03:24
pero por dios 00:03:27
Se nos ha olvidado decir que el perro hereda de animal. 00:03:28
Entonces, como se nos ha olvidado decir que el perro hereda de animal, 00:03:33
este perro se había quedado solo ladrando, pero no tenía nombre ni tenía nada. 00:03:36
Ahora ya tiene todo. 00:03:40
Vale. 00:03:42
Y ahora, en el zoológico empiezan a meter humanos. 00:03:43
Pues nada. 00:03:47
Empezamos a meter al humano en el zoológico. 00:03:50
Entonces, el humano es un animal. 00:03:57
tiene su nombre, su descripción y el historial 00:03:59
de acciones que se han hecho con él en el zoológico 00:04:01
pues el humano 00:04:03
hereda del animal 00:04:05
y bueno, además incorporará cosas 00:04:06
pues yo que sé, cualquier chorrada 00:04:09
humano 00:04:12
pues lo que incorpora 00:04:14
bien pensado 00:04:18
el cociente de inteligencia 00:04:28
Porque en función de inteligencia, pues el robot decide meter al humano en una celda más segura o menos segura. 00:04:30
Cuanto más tonto sea, pues menos... 00:04:36
Por ejemplo, en función del cociente de inteligencia. 00:04:38
Ya está, ponemos el Getty Set de esto que añade. 00:04:45
Bueno, siendo justos, si los robots nos han dominado es que son más listos. 00:04:47
Entonces nos van a ver como una mierda. 00:04:52
Entonces les va a dar igual lo listo que somos. 00:04:53
Bueno, a ver, nosotros tenemos miedo 00:04:55
a entes que son más tontos 00:05:00
que nosotros 00:05:02
¿Tú te enfrentarías a un 00:05:03
gorila? 00:05:06
Sí, depende 00:05:07
Si gano, que me da 00:05:08
Nuestra rendida admiración 00:05:11
Eso no compensa, ¿no? 00:05:14
Vale 00:05:16
Vale, entonces 00:05:17
el humano hereda de animal 00:05:20
Pero los robots 00:05:21
son malvados, entonces se encierran 00:05:24
entre ellos también, porque se dominan unos 00:05:26
a los otros, nosotros no hemos hecho 00:05:28
zoológicos con otros humanos 00:05:30
pero ellos perfectamente podrían hacer un zoológico 00:05:31
en el que metan otros robots 00:05:34
entonces 00:05:35
claro 00:05:37
entonces tenemos nuestro robot 00:05:39
nuestra clase robot 00:05:42
que incorpora su código 00:05:43
de serie, su número de serie 00:05:46
que tiene su número de serie 00:05:47
vale, pero 00:05:52
robot es un animal 00:05:54
no es un animal 00:05:55
entonces no tiene sentido que herede de animal 00:05:57
hombre, ahora mismo lo que hemos puesto en animal 00:05:59
lo podría heredar, pero a ver 00:06:01
porque tampoco se nos ha ocurrido nada específico de animal 00:06:03
podríamos poner 00:06:05
en un animal también 00:06:08
justo, justo iba a poner eso 00:06:09
género, y un robot no tiene 00:06:11
género, al menos en este mundo 00:06:14
en el 2200, en el 2300 igual ya sí 00:06:15
vamos a añadir el getter y el setter 00:06:18
del género que hemos puesto 00:06:20
Bueno, pues las amebas 00:06:21
Las amebas tienen género 00:06:30
Los gusanos tienen género 00:06:34
Pero los robots no tienen género 00:06:36
Entonces 00:06:38
Aquí al 00:06:39
Super robot que está haciendo esta aplicación 00:06:40
Pues dice 00:06:43
No puedo poner animal 00:06:45
Porque mi robot no tiene género 00:06:46
No puedo poner animal 00:06:49
bueno, pues lo podríamos dejar así 00:06:50
ahora empezamos a incorporar más funcionalidades 00:06:53
a ver, que sé que el ejemplo está completamente pillado 00:06:55
por los pelos, pero bueno, la idea es entender 00:06:57
un poquito cómo meter una interfaz 00:06:59
vale, pero resulta que los humanos y los robots 00:07:00
hablan, y es importante 00:07:03
poder hablar con ellos 00:07:05
en los procedimientos 00:07:07
del zoológico para tratar con ellos y todo 00:07:09
entonces, los robots 00:07:11
y los humanos tienen que implementar 00:07:13
un método hablar 00:07:15
vale 00:07:16
Un método a hablar, pues cuando tú lo invocas, pues ya está, lo que sea. Vale, entonces, este método, pues nada, te devuelve cualquier cosa, ¿vale? Al azar. Vale, pues el robot habla, pero los humanos también hablan, entonces, los humanos también tienen que tener un método a hablar. 00:07:17
Bueno, vamos a poner aquí el public 00:07:58
El humano también habla 00:08:01
Pero no habla como el robot 00:08:06
Habla distinto 00:08:08
Bueno, tendrá aquí su método hablar 00:08:09
Y el humano 00:08:13
Pues 00:08:27
Como tiene sentimientos 00:08:28
Pues en lugar de decir cualquier cosa 00:08:30
Porque le da igual estar encerrado o no estar encerrado 00:08:32
Pues devuelve otra cosa 00:08:34
Vale 00:08:37
Bueno, pues entonces 00:08:41
Aquí 00:08:44
el asunto es 00:08:45
nosotros podemos dejar la estructura así 00:08:48
y tenemos animal 00:08:50
de donde heredan, perro y 00:08:51
humano, vale, entonces yo aquí en mi main 00:08:54
de pruebas 00:08:56
yo me hago aquí un main de pruebas 00:08:56
un paquete 00:09:00
de main 00:09:04
con mi main de pruebas 00:09:05
siempre se me olvida esto 00:09:27
si, hay una forma de poner 00:09:31
cuál es el atajo 00:09:32
de verdad, si se trata de ahorrar trabajo 00:09:34
¿cuánto sabéis? 00:09:38
ay, pero me va 00:09:41
y por qué no 00:09:42
control espacio, pero me ofrece 00:09:44
un huevo de cosas 00:09:46
ah, main method está aquí, vale 00:09:47
venga 00:09:50
venga, entonces 00:09:52
yo soy libre 00:09:54
porque la inteligencia me ha hecho libre 00:09:57
pero la tuya está en un estado 00:09:59
todavía un poco catatónico 00:10:01
o estudian más programación 00:10:02
venga, entonces ahora 00:10:04
el tener esta estructura, ahora ya la aplicación 00:10:07
principal al super robot 00:10:09
que hace la aplicación 00:10:11
pues hay muchas cosas que le vienen muy bien 00:10:13
pues él puede tener aquí, oye tengo aquí 00:10:15
todos mis animales 00:10:17
porque a estos animales 00:10:18
míos, pues 00:10:21
de aquí 00:10:23
mis perros y mis humanos 00:10:25
que resulta que me han dicho 00:10:26
que me van a traer, mi zoológico 00:10:29
va a tener solamente tres humanos 00:10:31
y cuatro perros, pues venga 00:10:33
siete personas 00:10:35
vale, entonces importo esto 00:10:36
lógicamente del paquete correspondiente 00:10:41
y aquí ya sabemos 00:10:43
aquí ya, pues podría meter el 00:10:45
super robot 00:10:47
en animales, pues podría 00:10:48
ya poner lo que fuera 00:10:51
en la posición cero, me has traído 00:10:52
un humano, venga 00:10:55
pues un humano 00:10:57
Un nuevo humano 00:10:59
Y a este humano ya le puedo poner el nombre 00:11:07
Lo que sea 00:11:09
Por ejemplo 00:11:10
Este humano pues se llama 00:11:14
Pedrito 00:11:17
Y va a molestar mucho 00:11:19
Con lo cual le vamos a encerrar 00:11:23
Bajo 20 llaves 00:11:26
Vale 00:11:28
Entonces ahora al 00:11:29
Super robot le llegan robots 00:11:31
Vale 00:11:34
Los robots no los puede meter 00:11:35
En este array 00:11:38
No los puede meter en este array 00:11:40
¿Vale? Entonces 00:11:41
Si le van a llegar robots 00:11:43
Pues bueno, para empezar tendría que hacer 00:11:45
Su array específico de robots 00:11:47
¿Verdad? Tendría que hacer su array específico 00:11:49
De robot 00:11:52
¿Qué? 00:11:53
Bueno, da igual 00:11:57
Lo que me ha ofrecido 00:11:59
Efectivamente 00:11:59
bueno pues si le van a llegar 00:12:02
6 robots pues tendría que hacer 00:12:08
su a raíz de robot 00:12:10
cuidado porque hay 00:12:12
en el paquete JWT 00:12:18
hay una clase robot 00:12:20
entonces cuidado con hacer el import automático 00:12:21
esta es la primera vez que nos ocurre 00:12:24
pero ocurrirá mucho 00:12:26
en el futuro 00:12:28
que hay varias clases 00:12:29
que tú puedes hacer una clase 00:12:32
y en otros paquetes 00:12:33
hay otras clases que se llaman así 00:12:35
entonces el Eclipse cuando te hace el import 00:12:38
te ofrece todas las que ha encontrado 00:12:41
dentro de tu estructura de paquetes 00:12:43
que se llaman así 00:12:45
pues en JWT hay una que se llama Robot 00:12:46
que no sabemos que narices era 00:12:48
JWT es un paquete para hacer interfaces gráficas 00:12:50
entonces no sé que será eso 00:12:53
cuidado con que no hagáis automáticamente el clean clean 00:12:55
mirad que importéis la buena 00:12:59
en nuestro caso es la de modelo 00:13:01
no la de arriba, la de JWT 00:13:03
es la de modelo 00:13:05
vale, y aquí uno ya podría poner 00:13:07
sus robots y lo que fuera 00:13:10
vale 00:13:12
pues el robot 00:13:13
cero 00:13:17
sería un nuevo robot 00:13:18
pues el robot cero 00:13:25
ya está, que tiene un número de serie 00:13:31
el que fuera 00:13:34
cero, punto 00:13:34
no he puesto public el set 00:13:36
de robots 00:13:39
Ah, es que no le he hecho ni 00:13:42
No le he hecho el 00:13:44
El set del número de serie 00:13:47
Vale, entonces ahora yo aquí 00:13:49
Pues ya se le podría poner 00:14:10
Pues yo que sé 00:14:12
Número de serie, lo que fuera 00:14:15
Va, el número de serie que es entero 00:14:16
Luego, no es stream 00:14:24
Es entero 00:14:26
Vale, entonces ahora en mi zoológico tengo 00:14:27
Humanos y animales metidos aquí 00:14:31
Y robots metidos aquí 00:14:34
Pero están por libre. Entonces, si yo ahora quisiera ponerme a hablar, por ejemplo, con todos los que hablen, que son los humanos y los robots, pues no puedo tirar un bucle sin más que me hable con todos. 00:14:35
tendría que ir recorriendo 00:14:58
este array de animales 00:15:00
y hablar con los que sean humanos 00:15:01
haciendo el instance of 00:15:04
y luego tendría que recorrer este 00:15:06
porque se tratan por separado 00:15:08
pero sin embargo comparten 00:15:10
repito, una funcionalidad común 00:15:12
que es hablar 00:15:14
entonces esto ya de por sí parece 00:15:15
medio feo 00:15:18
uno puede, con lo que tiene de Java 00:15:20
lo básico, sin que incorporemos nada más 00:15:23
lo podría hacer todo 00:15:24
pero la idea es las herramientas que se van incorporando 00:15:25
para poder hacer aplicaciones realmente eficientes 00:15:29
bueno, pues entonces, podríamos decir 00:15:33
jo, lo bonito que sería 00:15:35
si humano 00:15:37
pudiera 00:15:41
heredar de animal y por tanto 00:15:43
tener todo lo de animal y también heredar de algo 00:15:47
que le permitiera tener todo lo compartido 00:15:51
lo compartido que tiene con robot. 00:15:53
O sea, el humano tiene compartido con animal 00:15:55
y compartido con robot. 00:15:57
Y se tiene que pronunciar. 00:15:59
¿Tú qué haces? 00:16:00
¿Heredas de animal y te quedas con todo lo de animal 00:16:02
más lo tuyo? 00:16:04
¿O heredas de otra cosa que te da todo lo compartido 00:16:05
con robot y particularizas lo tuyo? 00:16:08
Tienes que elegir. 00:16:10
Entonces, una caca que tengas que elegir. 00:16:11
Vale, pues entonces, aquí como nos vendría muy bien 00:16:14
la herencia múltiple, nos vendría muy bien 00:16:17
que humano pudiera heredar de dos cosas distintas, 00:16:18
pues nos hacemos una interfaz 00:16:21
¿qué es una interfaz? 00:16:24
vale, una interfaz 00:16:27
es como si fuera una clase 00:16:28
abstracta, vale 00:16:30
vamos a hacernos aquí 00:16:32
en lugar de una clase, una interfaz 00:16:34
entonces 00:16:36
esa interfaz 00:16:37
yo ahora mismo la estoy abriendo 00:16:40
como si fuera hacer una clase normal y corriente 00:16:43
esa clase 00:16:44
ahora mismo para mí va a ser 00:16:46
la super clase de robots y humanos 00:16:49
en la que voy a poner lo común entre robots y humanos. 00:16:51
Los humanos y los animales tienen cosas comunes 00:16:55
y los humanos y los robots tienen cosas comunes. 00:16:57
Pues voy a poner una superclase con lo común entre animal y humano 00:17:00
que ya está en animal 00:17:04
y una superclase con lo común entre robot y humano. 00:17:05
Mi problema, si yo lo dejo como clase tal cual, 00:17:11
mi clase, pues lo común entre robot y humano, 00:17:14
¿cuál puede ser? 00:17:17
Que son habladores. 00:17:17
Clase hablador. 00:17:20
sí, hacemos una clase 00:17:20
hablador con lo común 00:17:26
entre humanos y robots 00:17:27
¿vale? lo común entre humanos 00:17:29
y robots, pues puede ser 00:17:32
el timbre 00:17:34
de la voz, porque todos los dos hablan 00:17:36
¿vale? 00:17:38
y a ver, los getty set 00:17:51
los voy poniendo todo el rato, porque es un rollo 00:17:52
quiero que entendamos qué es esto 00:17:54
antes de irnos y ya está 00:17:56
entonces esto es lo que 00:17:58
tienen en común 00:18:00
entonces yo podría dejar esta clase así 00:18:01
y luego además tienen en común que los dos pueden hablar 00:18:06
de hecho 00:18:08
yo había hecho ya en humano 00:18:10
un método hablar 00:18:12
y en robot había hecho también un método hablar 00:18:13
porque los dos pueden hablar 00:18:16
entonces nosotros ya de herencia sabemos 00:18:17
que en este caso 00:18:19
vamos a hacer por tanto un método aquí 00:18:21
hablar 00:18:24
como este método 00:18:25
todavía se queda por definir 00:18:30
porque el humano hablará de una forma 00:18:32
y el robot hablará de otra 00:18:34
Entonces, ahora mismo está por definir. Pues lo dejo por definir. Eso lo convierte en abstracto. Eso lo convierte en abstracto. Y ahora, al tener esta clase un método abstracto, esta clase se convierte en abstracta. 00:18:35
vale, genial, ahora ya robot lo completo y digo, a ver, robot hereda de hablador, estupendo, robot me hereda de hablador, 00:18:50
pero claro, humano también me debería heredar de hablador, de hecho para eso he hecho esta clase, para que sea la super clase de humanos y robots, 00:19:07
pero ¿qué ocurre? lo que ya sabemos 00:19:15
humano resulta 00:19:18
que ya es un animal 00:19:21
ojalá pudiera yo hacer esto 00:19:21
que sea un animal y además 00:19:24
un hablador, con lo cual se queda 00:19:26
con las dos, lo que tenga animal y lo que tenga hablador 00:19:28
con las dos 00:19:30
pero en Java no se puede heredar de más de una clase 00:19:31
desgraciadamente esto no lo podemos hacer 00:19:35
luego este diseño 00:19:37
que hemos hecho no funciona 00:19:39
hablador 00:19:41
no puede ser, no, no, no 00:19:42
Apenas hay que borrar nada, tranquilos 00:19:44
Vale, pues como lo arreglamos 00:19:45
Ojo 00:19:48
Hablador en lugar de clase 00:19:49
Que sea 00:19:52
Una cosa que llamamos interfaz 00:19:54
Esto 00:19:56
Que sea una interfaz 00:19:57
Una interfaz 00:20:00
Vale, bueno 00:20:01
Pues que es una interfaz 00:20:10
Una interfaz 00:20:12
Interface 00:20:14
Como lo queráis llamar 00:20:16
Porque a veces cuando decimos interfaz 00:20:17
lo confundimos con interfaz gráfica, eso es otra cosa 00:20:18
claro 00:20:21
es una clase 00:20:21
que solo tiene 00:20:23
métodos abstractos 00:20:26
vale, voy a poner 00:20:31
aquí con matices 00:20:40
por ahora dejamos el con matices 00:20:43
porque si alguno lo estudia por ahí dirá 00:20:44
uy, me han mentido, no te he mentido 00:20:46
lo que pasa es que no te he dado toda la información 00:20:48
para no liar 00:20:50
el con matices significa 00:20:51
que estos métodos abstractos 00:20:53
podrían tener una implementación por defecto 00:20:56
pero eso nos olvidamos por ahora 00:20:58
vamos a la definición más general de interfaz 00:20:59
una interfaz es una clase 00:21:02
que solo puede tener 00:21:04
métodos abstractos, ni siquiera 00:21:05
ni siquiera 00:21:08
puede tener 00:21:11
propiedades 00:21:14
ni siquiera 00:21:15
lo que sí que puede tener 00:21:18
es variables estáticas 00:21:21
esto sí 00:21:24
eso es una interfaz 00:21:24
entonces cuando declaramos una interfaz 00:21:32
ahora ya viene la teoría 00:21:35
cuando declaramos una interfaz 00:21:37
en lugar de class ponemos interfaz 00:21:39
vale 00:21:40
cambia class por esto 00:21:42
entonces 00:21:45
una interfaz 00:21:46
está pensada 00:21:48
para ofrecer 00:21:50
una sucesión de métodos vacíos 00:21:52
que definen como una obligación 00:21:54
de comportamiento 00:21:57
dices yo soy la interfaz hablador 00:21:58
entonces todo el que herede de mí 00:22:00
va a ser un hablador 00:22:03
y por tanto está obligado 00:22:04
a implementar todos los métodos 00:22:06
abstractos que yo tenga 00:22:08
entonces la idea de fondo de la interfaz 00:22:09
es como recoger 00:22:12
un tipo de comportamiento 00:22:14
normalmente, un tipo de comportamiento 00:22:16
por ejemplo la interfaz hablador 00:22:18
recogería el tipo de comportamiento 00:22:20
de los habladores, que puede ser 00:22:23
método hablar, método gritar, método 00:22:24
susurrar, esos métodos 00:22:26
se quedan vacíos, son abstractos 00:22:28
y luego ya las clases 00:22:30
que hereden de esa interfaz 00:22:32
tienen ya que obligatoriamente 00:22:34
dar cuerpo a esos métodos 00:22:37
entonces una interfaz es una especie 00:22:39
de contrato vinculante 00:22:41
es decir, yo 00:22:42
defino lo que 00:22:44
tiene que hacer un hablador 00:22:47
y el que me herede 00:22:48
ahora vemos como se le da una interfaz 00:22:50
una interfaz, como lo queréis llamar 00:22:52
el que me herede, tiene que obligatoriamente ya definir cómo va a hacer él cada una de las cosas. 00:22:54
Esta interfaz solo tiene un método, pero debería tener varias. 00:23:02
Luego, ese es más o menos el sentido que tiene. 00:23:06
Es como una especie de contrato vinculante de acciones. 00:23:08
Porque es lo único que puede tener, métodos. 00:23:13
No puede tener ni propiedades. 00:23:15
Entonces, propiedades estáticas como constantes globales, 00:23:17
y se le deja una constante global para decidir 00:23:22
algo global, entonces de hecho es tan así 00:23:24
que no hace falta ni poner el static 00:23:26
si yo pongo aquí una propiedad 00:23:28
como las interfaces obligatoriamente 00:23:30
solo pueden tener propiedades estáticas 00:23:32
si yo pongo aquí una propiedad 00:23:34
esta propiedad por defecto es static 00:23:35
por defecto, aunque yo no lo ponga 00:23:38
de hecho me la he puesto en cursiva, en cuanto yo he cambiado 00:23:39
esto, class por interfaz 00:23:42
cuando la tenía 00:23:43
en class, no estaba en cursiva 00:23:46
porque era una propiedad normal 00:23:48
cuando yo lo cambio 00:23:50
a interfaz 00:23:52
me lo pone en cursiva 00:23:54
que le eclipse, él porque le da la gana 00:23:56
a él, pone en cursiva las propiedades 00:23:58
estáticas, entonces esto 00:24:00
cuando esto es una interfaz 00:24:02
cualquier cosa que yo ponga 00:24:04
aquí, es 00:24:06
static o no, no da igual 00:24:08
que lo ponga o no lo ponga, es que es static, sí o sí 00:24:10
entonces aquí en particular 00:24:12
me aparece en rojo, perdón 00:24:14
sí en rojo, porque si recordáis 00:24:16
las variables estáticas 00:24:18
hay que definirlas en el momento de declararlas. 00:24:19
Si no las defines, pues te daría problemas. 00:24:22
¿Vale? 00:24:27
Entonces, bueno, aquí el timbre voz, 00:24:29
como es particular de cada heredero, 00:24:34
no tendría sentido poner aquí timbre voz. 00:24:38
Las interfaces no pueden incluir propiedades. 00:24:40
Todo lo que sean propiedades tiene que ir en las subclases. 00:24:44
Todo. 00:24:46
La interfaz solo vale para definir un comportamiento. 00:24:47
Entonces, esta propiedad aquí. 00:24:50
No, no, no, no, no, los métodos jamás. 00:24:54
Las propiedades. 00:24:57
Porque solamente puede tener propiedades estáticas, solo. 00:24:58
Lo normal es que las estéticas no tengan propiedades. 00:25:03
Pues las propiedades estáticas te valen para información global. 00:25:05
Información global puedes tener muy poquita. 00:25:08
Pero si hay alguna que te interese, 00:25:11
la puedes poner ahí como variable estática. 00:25:12
Pero normal es que no tengan variables, ni siquiera variables estáticas. 00:25:14
Bueno, pues entonces los métodos de una interfaz, por defecto, como son abstractos, el abstract ni se pone. 00:25:18
Y el public tampoco, porque obligatoriamente los métodos de una interfaz son públicos. 00:25:25
Luego esto es que ni se pone, esto se queda así. 00:25:30
Y aunque se quede así, esto es abstracto y público. 00:25:35
luego, los métodos de las interfaces 00:25:39
y sus propiedades estáticas en caso de haberlas 00:25:43
todas 00:25:45
son implícitamente 00:25:46
públicas, lo ponga yo o no lo ponga 00:25:48
porque en una interfaz 00:25:51
se entiende que es como una plantilla 00:25:53
que está ahí y que la podemos 00:25:55
heredar de mil sitios, entonces debería 00:25:57
ser pública 00:25:59
entonces implícitamente 00:25:59
vale, entonces lo voy a poner ahí 00:26:02
todos los 00:26:04
métodos 00:26:08
de una 00:26:09
interfaz 00:26:12
son 00:26:13
implícitamente, es decir, aunque yo no lo ponga 00:26:16
de forma implícita, 00:26:18
públicos. 00:26:21
Luego los puede usar 00:26:22
desde cualquier otro paquete sin 00:26:24
ningún problema. 00:26:26
De hecho, 00:26:30
este public creo que ni siquiera tenemos que ponerlo, 00:26:32
aunque eso no estoy segura. 00:26:34
Sí, o sea, 00:26:37
podríamos no ponerlo y también ahí es como si estuviera 00:26:38
implícitamente el public puesto. 00:26:40
Lo que pasa es que a mí verlo así me da como un poco 00:26:42
de dolor. Muchas veces vais 00:26:44
a ver el public puesto en los métodos, pero es que da 00:26:46
igual que esté puesto o que no esté puesto. 00:26:48
¿Vale? 00:26:51
Entonces, 00:26:55
repito que de esto hay matices. 00:26:56
Es que puede haber 00:26:58
una implementación por defecto en la interfaz, 00:26:59
pero eso lo dejamos para más adelante. 00:27:02
Que puede haber cositas 00:27:04
aquí. Aquí puede haber más cosas y más rollo 00:27:05
relacionado con la operación funcional 00:27:07
que dejamos un poco para más adelante. 00:27:09
Pero ahora mismo nos quedamos con lo básico 00:27:11
y con lo único que realmente necesitamos 00:27:13
para trabajar, que es que 00:27:15
una interfaz es esto, una clase 00:27:17
que se pone interfaz en vez de class 00:27:19
que solamente tiene métodos abstractos 00:27:21
y vale para 00:27:23
unificar subclases 00:27:25
bueno, pues entonces 00:27:28
ahora ya tenemos esta interfaz, porque en nuestra 00:27:29
aplicación hemos decidido que va a haber habladores 00:27:31
va a haber habladores, pues tienen 00:27:33
su interfaz hablador con su comportamiento 00:27:35
y a lo mejor esos habladores 00:27:37
pues yo que sé, vamos a, pueden hacer más cosas 00:27:39
¿no? 00:27:41
Bueno, pues entonces, ahora ya, mi robot es un hablador, pues ¿cómo se hereda una interfaz? 00:27:43
No se pone extens, justo, muy bien, a una interfaz se la implementa, a una clase o clase abstracta se la hereda o extiende y a una interfaz se la implementa. 00:27:54
Implementa. Implementa significa dar cuerpo a los métodos que tiene. Entonces, robot implementa hablador. Tiene que implementar hablador y por tanto, pues al implementar hablador, tiene que dar cuerpo a los métodos que tiene. 00:28:09
Tiene que implementar hablar, que ya lo implementaba, que es este. Y tiene que implementar susurrar. Pues ya está, pues susurrar cualquier cosa. 00:28:24
vale 00:28:43
y ahora que ocurre con humano 00:28:52
pues humano 00:28:54
este override 00:28:57
nos lo pone el eclipse automáticamente 00:28:58
pero ahora mismo 00:29:01
lo podemos quitar porque no 00:29:01
nos aporta nada 00:29:04
y que ocurre con el humano 00:29:05
pues que el humano que lo que queríamos era 00:29:07
que tuviera 00:29:10
de los dos 00:29:12
pues hereda de animal 00:29:15
y al heredar 00:29:17
nos quedamos con propiedades, con métodos 00:29:20
y todo, porque animal es una clase 00:29:23
y además implementa 00:29:24
hablador, pues después del stents 00:29:27
ponemos el implements 00:29:29
vale, entonces 00:29:30
mi humano hereda de animal 00:29:35
con todo lo que animal tenga 00:29:37
y además implementa hablador 00:29:38
con todo lo que hablador tenga 00:29:41
que solamente van a ser métodos 00:29:43
solamente van a ser métodos 00:29:44
vale, pues al implementar 00:29:47
de hablador, está 00:29:49
condenado a 00:29:50
dar cuerpo a los métodos de 00:29:52
hablador. Al hablar ya le daba 00:29:54
cuerpo y vamos a 00:29:57
darle cuerpo al otro de susurrar. 00:29:59
Y esta es la única forma 00:30:14
de implementar la herencia múltiple 00:30:21
en Java. 00:30:23
Y con estas herramientas 00:30:26
de clases, clases abstractas, interfaces, 00:30:28
herencias e implementaciones, 00:30:30
pues uno trata 00:30:32
de reflejar 00:30:33
de la manera más fidedigna 00:30:35
y con el mayor sentido posible 00:30:38
la situación 00:30:39
entonces, normalmente 00:30:40
elegimos clases y clases abstractas 00:30:42
cuando lo que queremos 00:30:46
recoger en esa entidad 00:30:48
no solo es comportamiento 00:30:49
sino también es propiedades 00:30:51
queremos recoger propiedades 00:30:53
como en animal, queríamos recoger nombre, descripción 00:30:54
e interfaces 00:30:57
las interfaces están pensadas 00:30:59
para recoger comportamientos 00:31:01
Por eso las interfaces suelen acabar con nombre hable, hablable, titulable, pesable, modificable, porque las interfaces lo que recogen son comportamientos, métodos, acciones, y el que implementa la interfaz da cuerpo a esas acciones, y el que hereda de una clase da cuerpo a lo que tenga abstracto y a sus propiedades. 00:31:03
Sí, y eso te permite, igual que la herencia, meter la misma referencia, ¿vale? 00:31:33
Es decir, ahora yo, al robot y humano, al implementar los dos hablador, 00:31:51
a mí ahora en mi aplicación se me abre esta posibilidad que antes no tenía. 00:31:57
Vale, entonces, ahora yo aquí, en mi array este de habladores, si habladores es una interfaz, pues en mi array este, ahora de nuevo tengo la flexibilidad de, puedo meter un humano, puedo meter un robot. 00:32:03
entonces 00:32:40
cuando 00:32:41
vale, entonces efectivamente 00:32:44
el significado que tiene una interfaz 00:32:54
es describir un comportamiento 00:32:56
y entonces todas las clases 00:32:59
que implementa una interfaz 00:33:00
se supone que tienen un comportamiento común 00:33:02
aunque cada una lo haga de una manera distinta 00:33:04
pero todos hablan, todos corren 00:33:06
todos lo que sea 00:33:08
entonces efectivamente una interfaz 00:33:09
es una manera de 00:33:12
catalogar, como dices tú 00:33:14
un comportamiento 00:33:16
y luego ya cada clase que lo implemente 00:33:17
ya da las particularidades de cómo lo hace 00:33:20
y aparte de eso 00:33:22
de diseño, de dar una especie 00:33:24
de foto un poquito más real 00:33:26
aparte de eso me permite lo mismo 00:33:28
que me permite la herencia 00:33:30
ahora yo puedo tener una caja de habladores 00:33:31
de toda la gente que se comporta igual 00:33:34
entonces yo aquí en esta caja tengo 00:33:35
todos los que tienen ese comportamiento 00:33:37
de habladores, todos los que tienen 00:33:40
yo aquí puedo tener humanos y robots tranquilamente 00:33:41
entonces los humanos 00:33:44
pueden estar en cajas de habladores 00:33:46
y en cajas de animales, tranquilamente 00:33:48
en las dos, porque los humanos se ayudan 00:33:50
de animales e implementan robots. 00:33:52
El robot puede estar en cajas de habladores 00:33:54
y los animales 00:33:56
y los perros, pues en cajas 00:33:58
de perros, o sea, de animales. 00:34:00
Claro. 00:34:03
Entonces, esta de nuevo es la 00:34:08
ventaja. 00:34:09
El que todos los que se comportan 00:34:11
igual y por tanto implementan la misma 00:34:13
interfaz, pues pueden 00:34:15
Estar bajo una interfaz 00:34:17
Bajo una referencia común 00:34:21
¿Vale? Y meterlos en la misma caja, etc 00:34:23
Entonces de nuevo nos abre 00:34:26
Las posibilidades 00:34:29
¿Vale? Entonces el próximo día 00:34:31
Hacemos ya un ejercicio 00:34:33
Un poco más concreto, más tocable 00:34:36
Para verlo un poquito mejor 00:34:38
¿Vale? 00:34:42
Venga, pues vamos a parar aquí 00:34:44
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:
14
Fecha:
26 de enero de 2025 - 19:26
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
34′ 47″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
152.46 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid