Clases Genéricas - 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:
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
T
00:03:00
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
T
00:05:07
¿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
T
00:06:38
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
T
00:07:53
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
No
00:09:38
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