Saltar navegación

Clases Genéricas - 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 febrero de 2024 por Stefano C.

18 visualizaciones

Descargar la transcripción

Vale, estoy grabando, por lo tanto, todo lo que digáis puede ser usado... 00:00:00
No, puede... 00:00:04
Puede... 00:00:06
Asume que vosotros habéis dado vuestra autorización. 00:00:10
Entonces, nosotros aquí hemos hecho, a partir de una interfaz pública aquí, de una interfaz Milista, 00:00:15
hemos creado una implementación de Milista utilizando arrays, ¿vale? 00:00:23
con estos 00:00:28
si lo tenéis grabados 00:00:29
y podéis pausar y mirarlo 00:00:31
este es el código más o menos 00:00:34
vale 00:00:35
hemos hecho junto, vale 00:00:37
con un main lista que lo prueba 00:00:40
y hace cosas con 00:00:42
esta lista, vale, clase animales 00:00:43
esta de aquí, clase prep, ok 00:00:46
ahora nuestra pregunta y nuestra 00:00:48
duda es, vale 00:00:50
pero mi lista me vale para objetos 00:00:51
entonces me permite crear 00:00:54
listas mezcladas 00:00:56
con todas las clases 00:00:58
posibles, puedo poner dentro animales 00:01:00
puedo poner dentro string, puedo poner 00:01:02
dentro scanner, y no siempre 00:01:04
es lo que quiero, de hecho cuando nosotros hacemos un array 00:01:06
no lo hacíamos así, nosotros hacemos un array 00:01:08
de enteros, un array de string 00:01:10
un array de animales 00:01:12
una cosa parecida a esta 00:01:13
en cierto nivel, es cuando 00:01:16
utilizábamos el polimorfismo y hacíamos 00:01:18
una 00:01:20
un array de vehículos 00:01:20
y luego dentro como vehículos 00:01:24
Podríamos poner coches, aviones 00:01:26
Y no sé qué, porque todos se redaban 00:01:27
De vehículos 00:01:29
Pero, como todo es derivado de objetos 00:01:31
Derivado de objetos 00:01:34
Pues esto es un poco demasiado 00:01:36
Genérica, entonces la pregunta es 00:01:38
¿Puedo yo crearme una lista 00:01:39
Y decir, oye sí, pero yo quiero que la lista 00:01:41
Solo contenga un determinado tipo 00:01:43
Pero no decir 00:01:45
Oye mira, solo string 00:01:47
Y entonces luego cuando tengo que poner una lista 00:01:48
De animales, por ejemplo, me tengo que crear 00:01:51
Una nueva interfaz 00:01:54
Con una nueva implementación para animales 00:01:55
Y así, así, por cada tipo 00:01:57
No, yo quiero un tipo genérico 00:01:59
En un cierto sentido, quiero decirte, oye, mira 00:02:01
Voy a hacer una lista de 00:02:03
Una clase, me las especificará 00:02:05
Después esta clase 00:02:08
Y voy a utilizar esta clase allí dentro 00:02:09
¿Vale? 00:02:11
Entonces, para eso 00:02:13
Vamos a 00:02:15
Para no perder lo que hemos hecho ahora 00:02:17
Vamos a copiarlas, estas cosas 00:02:20
¿Vale? 00:02:23
Le añadimos un genérico detrás, mi lista, ¿vale? Para que lo de lista se quede aquí y esto sea un nuevo ejercicio. 00:02:25
Entonces, la idea es que yo pueda utilizar aquí una declaración de una clase genérica, o sea, de un tipo que por ahora no sé cuál es, 00:02:39
Ma en un futuro sabré cual es 00:02:49
¿Vale? 00:02:51
Entonces cuando yo creo mi lista 00:02:53
Gen 00:02:54
No es general sobre objeto 00:02:56
Sino que es sobre el tipo 00:02:58
Esto quiere decir que cuando añado algo 00:03:01
No lo añado de tipo object 00:03:04
Ma lo añado de tipo T 00:03:05
Y que cuando voy a eliminar algo 00:03:07
Puedo o eliminarlo así con object 00:03:11
Entonces tendré que comprobar que sea T adentro 00:03:14
O puedo directamente decirte, no, no, no, mira, yo quiero que cuando vas a eliminar, el objeto que me pases aquí tiene que ser del tipo correcto. 00:03:17
Cuando busco contains, no quiero buscar un objeto cualquiera, quiero buscar un objeto del tipo T. 00:03:26
¿Qué tipo es el T? No lo sé. 00:03:31
Si T será string, pues entonces quiere decir que todo esto será en string. 00:03:33
Si T es animal, pues entonces todo esto serán animales. 00:03:39
Y también aquí, cuando devuelvo algo, lo devuelvo como T. 00:03:42
¿Se entiende? 00:03:46
perfecto, ahora me voy a crear, a modificar mi lista rey y hago mi lista rey genérica 00:03:50
vale, mi lista rey genérica prenderá un tipo genérico y implementará un mi lista de t 00:04:03
Mi lista gen 00:04:18
De t 00:04:25
Así 00:04:27
O sea que ahora yo cuando hago una implementación 00:04:29
Te pasaré un tipo 00:04:33
¿Vale? 00:04:35
Por ejemplo string o animal o vehículo 00:04:37
Y eso será el tipo 00:04:39
Que tendré que implementar 00:04:41
Estos señores de aquí 00:04:44
Esto de mi lista gen 00:04:46
¿Sí? 00:04:47
¿Qué quiere decir esto? 00:04:51
Quiere decir que cuando yo añado algo 00:04:53
Esto será de tipo T 00:04:56
¿Sí? 00:04:58
Quiere decir que la lista de elementos que tengo aquí dentro 00:05:01
No es una lista de objetos 00:05:05
Sino una lista de 00:05:06
¿Vale? 00:05:09
Esto habrá que ver cómo se hace 00:05:14
¿Vale? 00:05:15
Esto no me lo pilla 00:05:16
Ya comprobaremos después 00:05:17
Por ahora vamos a ver lo que nos permite hacer rápidamente 00:05:21
Entonces cuando yo creo esta aquí que copio 00:05:27
Pues crearé un array de T 00:05:29
Que será un nuevo array de tipo T 00:05:32
Veis que aquí hay algún error 00:05:36
No me permite hacer un array de este tipo 00:05:38
Pero todo el resto es lo mismo 00:05:43
Estoy cambiando el tipo de objeto 00:05:46
pero al fin y al cabo 00:05:49
el resto del programa 00:05:50
no cambia, es siempre copiar 00:05:53
y hacer las cosas 00:05:56
aquí tengo eliminar que pillará 00:05:57
un objeto T 00:06:00
ahora busca pos 00:06:00
desde aquí, creará 00:06:04
un nuevo array de 00:06:06
T más pequeño 00:06:08
y todo el resto 00:06:09
es lo mismo 00:06:11
si consigo hacer esto 00:06:13
que es el único error, me da el error de 00:06:15
No puedo generar un array 00:06:18
De tipo T 00:06:20
Ya veremos como lo arreglamos esto 00:06:21
Publicing busca post 00:06:24
Esto es T 00:06:28
Aquí no veo otros objetos 00:06:29
Por lo tanto esto debería funcionar 00:06:34
Contains 00:06:37
Devuelve un T 00:06:39
Que será un objeto T 00:06:46
Lo encuentra y lo devuelve 00:06:48
Y ya está 00:06:51
Y se acabó 00:06:53
¿Vale? 00:06:56
La única cosa que me queda para hacer 00:06:56
Este de aquí es 00:06:59
¿Qué hago con esto? 00:07:01
Ideas 00:07:05
Que podríamos probar 00:07:06
Para que esto funcione 00:07:08
No me permite crear 00:07:11
Un array de objetos de tipo genérico 00:07:12
Y entonces 00:07:15
Entonces la única cosa distinta que he hecho 00:07:25
Con respecto a mi lista 00:07:31
Cuando estaba creando mi lista array 00:07:33
¿Vale? Que es esta de aquí 00:07:35
Es que cuando creo un nuevo objeto 00:07:36
No lo puedo utilizar, no puedo crear un nuevo array 00:07:39
No puedo hacer un array 00:07:41
De tipos genéricos 00:07:43
¿Vale? No puedo hacer 00:07:45
Algo como 00:07:47
Elem es igual a 00:07:48
New 00:07:51
Entonces la única 00:07:53
Esto me da un error ¿Vale? 00:07:57
No puedo crear objetos nuevos 00:07:58
Pero lo que si puedo hacer es decirme 00:08:00
Mira, créame, un array de objetos que puede contener lo que te da la gana 00:08:03
Y luego me lo tratas como 00:08:06
Un array de ese tipo 00:08:08
Entonces lo puedes guardar dentro de él 00:08:11
¿Vale? 00:08:15
Y lo mismo se hace las otras veces que aparece esto 00:08:18
Y aquí 00:08:21
La tercera vez 00:08:23
Y una vez que he hecho esto 00:08:25
Este T es un tipo genérico que aquí no hace referencia a nada 00:08:37
Cuando voy a crear un objeto de este tipo 00:08:43
Como por ejemplo aquí 00:08:47
Lo que voy a crear es un objeto y le paso como parámetro el tipo genérico ahora instanciado 00:08:49
Por ejemplo aquí estoy haciendo una lista genérica pero de solo animales 00:08:58
Entonces ya no me permite 00:09:02
Por ejemplo 00:09:07
Lista.add de un string 00:09:07
Esto se enfada 00:09:11
¿Por qué se enfada? 00:09:15
Porque me está diciendo 00:09:18
Oye mira, addAnimal 00:09:19
En el tipo miListaGeneralAnimal 00:09:21
No es aplicable a string 00:09:23
¿Cuál es este método addAnimal? 00:09:25
Si add 00:09:28
Tened en cuenta que este método aquí 00:09:29
No está por ningún lado 00:09:31
Add que añade un animal 00:09:33
¿Está por algún lado? 00:09:36
Si me voy a mirar que tengo 00:09:38
Tengo add 00:09:42
Que añade un tipo T 00:09:44
No un tipo animal 00:09:46
Y esto depende del hecho que T 00:09:48
Es un tipo genérico 00:09:51
Que en esta implementación aquí 00:09:52
Es un animal 00:09:55
Y si yo requisiera una lista de strings 00:09:56
Pues haría 00:10:01
Mi lista 00:10:03
Gen 00:10:04
De string 00:10:06
Lista string 00:10:08
Es igual a new 00:10:12
Mi lista 00:10:14
Gen 00:10:17
Array 00:10:20
De string 00:10:21
He hecho, se llama así 00:10:23
Mi lista array 00:10:33
Gen 00:10:35
Y ahora tengo esta lista de aquí 00:10:35
Donde dentro puedo poner solo string 00:10:43
Entonces ahora 00:10:45
Puedo hacer por ejemplo 00:10:47
ListaString.add 00:10:48
Hola 00:10:52
ListaString.add 00:10:54
Cato 00:11:01
Fijaos que el código es único 00:11:03
O sea, el código es esta lista de aquí 00:11:08
Bueno, es interfaz de aquí con este código de aquí 00:11:10
Pero ahora ya me puede servir para cualquier tipo 00:11:13
Que es el problema que teníamos antes 00:11:17
Antes de ver esta cosita aquí 00:11:19
Yo habría tenido que hacer 00:11:22
Mi lista array para string 00:11:24
Mi lista array para animal 00:11:26
Mi lista array para coches 00:11:27
O mantener un lista array 00:11:28
Como esta de aquí que hemos hecho antes 00:11:31
Que es tan genérica que es object 00:11:33
Pero no tengo control 00:11:35
Sobre lo que se puede poner aquí dentro 00:11:37
Porque en esta lista se pueden poner animales 00:11:39
Se pueden poner aviones 00:11:41
Se pueden poner coches 00:11:42
Se puede poner lo que quieras 00:11:44
Porque todos son objetos 00:11:46
Para tener más control 00:11:47
Tengo esta cosa aquí 00:11:49
Tened en cuenta que nadie me prohíbe 00:11:51
De crear un 00:11:54
Mi lista 00:11:56
Gen 00:11:57
De object 00:11:59
Object list 00:12:01
New 00:12:05
Mi lista 00:12:07
Gen 00:12:09
De object 00:12:10
Y esta lista de aquí 00:12:12
Es como la lista que hemos hecho antes 00:12:19
Puedo tener cualquier tipo de objeto 00:12:21
Entonces, esta cosa de aquí 00:12:23
De meterle la clase genérica 00:12:28
No es que reduce mis posibilidades 00:12:32
Mis posibilidades son las mismas 00:12:35
Solo que me aumenta la posibilidad 00:12:37
A decir, oye mira, quiero más control sobre esta lista 00:12:39
Quiero que contenga solo vehículos 00:12:42
Pues entonces le pongo aquí vehículos 00:12:45
¿Dudas? 00:12:47
Y tened en cuenta que una lista de vehículos 00:12:52
Puede contener coche 00:12:54
Puede contener avión, puede contener tren 00:12:56
Siempre y cuando coche, tren y avión 00:12:59
Pues heredan 00:13:02
De vehículo 00:13:03
Exactamente como lo hacíamos antes 00:13:04
¿Dudas? 00:13:06
Subido por:
Stefano C.
Licencia:
Reconocimiento - No comercial - Compartir igual
Visualizaciones:
18
Fecha:
26 de febrero de 2024 - 13:27
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
13′ 12″
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:
75.95 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid