Saltar navegación

20260130 InterfazComparable - 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 1 de febrero de 2026 por Raquel G.

5 visualizaciones

Descargar la transcripción

5 minutos y nos piramos. 00:00:00
Este es nuestro array 00:00:02
que tengo que ordenar. 00:00:03
Es un rollo. 00:00:06
Ordenar no es tan fácil como hacer 00:00:08
una suma acumulativa, 00:00:09
ver el máximo de algo, 00:00:12
contar 00:00:15
cuántas veces pasa algo en un array, 00:00:16
que son más o menos los algoritmos que hemos visto. 00:00:17
Pues contar dentro de un array las ocurrencias de algo, 00:00:19
sumar de forma 00:00:22
acumulativa o multiplicar 00:00:23
de forma acumulativa cosas o calcular 00:00:25
máximos y mínimos, son como los algoritmos básicos 00:00:28
que esos pues ya los tenemos 00:00:30
en la cabeza bien metidos 00:00:32
ordenar es más complicado 00:00:33
ordenar no es tan sencillo, nos podemos plantear 00:00:35
entonces hacerlo desde cero y muy bien 00:00:38
porque somos muy listos y lo haríamos 00:00:40
y en el pasado pues lo hacíamos 00:00:41
pero ahora 00:00:44
sois más vagos 00:00:45
entonces ahora no 00:00:47
se pueden pedir ciertas cosas porque 00:00:49
entonces 00:00:51
y aparte 00:00:53
no es tan fácil 00:00:54
y de hecho el problema de la ordenación 00:00:56
es que como implica 00:00:59
bucles anidados o puede implicarlos 00:01:01
si tú no los gestionas bien 00:01:03
la complejidad se puede hacer 00:01:05
muy grande, entonces cuando tú 00:01:07
usas el método de ordenar para un array 00:01:08
de tres elementos no tarda nada 00:01:11
pero si pasas a ese mismo método 00:01:13
un array de diez, en cuanto hay dos bucles 00:01:15
anidados, un montón de ciclos 00:01:17
de memoria, tarda un montón 00:01:19
y si quieres ordenar cien 00:01:20
esos dos bucles anidados ya se están 00:01:22
y ni se sabe, y el ordenador tarda 00:01:25
ni se sabe, entre comillas 00:01:27
milisegundos, milisegundos ya es bastante 00:01:28
en términos informáticos 00:01:30
bueno, entonces, como no es trivial 00:01:32
el tema de ordenar, porque si no 00:01:34
escoges bien el algoritmo 00:01:37
el tiempo de ordenación 00:01:38
crece exponencialmente 00:01:41
respecto al número de elementos a ordenar 00:01:43
pues hay toda una teoría 00:01:45
desarrollada y muchos 00:01:47
algoritmos de ordenación distintos 00:01:49
el de la burbuja, el click 00:01:50
el quick short, hay muchos algoritmos de ordenación 00:01:52
que nosotros por falta de tiempo 00:01:54
muchas cosas, bueno vamos a ver aquí 00:01:57
podéis buscar ¿cómo es el algoritmo de burbuja? 00:01:59
¿cómo es el algoritmo del juizor? ¿cómo es el algoritmo de no sé qué? 00:02:01
y veis como son por dentro 00:02:04
¿nosotros qué hacemos? pues somos muy vagos 00:02:05
y como ya hay métodos 00:02:07
en Java que me ordenan 00:02:10
pues los querríamos llamar 00:02:11
por ejemplo 00:02:13
la clase 00:02:15
Arrays es una clase 00:02:17
muy maja 00:02:19
que tiene un montón de métodos estáticos 00:02:20
para hacer cosas con Arrays 00:02:23
entonces como son métodos estáticos 00:02:24
los podemos llamar con el nombre de la clase 00:02:27
vale, pues tiene un montón 00:02:29
de cositas 00:02:31
y entre ellos 00:02:32
tiene un método que es el sort 00:02:35
vale 00:02:37
entonces al sort yo le paso 00:02:38
un array 00:02:43
y magnífico 00:02:44
me lo ordena, porque para eso vale el sort 00:02:48
para ordenar un array 00:02:51
ay que listos que son 00:02:52
vale, entonces es la siguiente pregunta 00:02:56
¿cómo me lo ordena? 00:02:58
porque si fuera un array de números 00:03:00
no hay ninguna duda 00:03:02
porque hay entidades en Java que tienen 00:03:04
un orden natural por definición 00:03:06
como los int 00:03:08
y los double 00:03:10
y los char, que es el de 00:03:12
el de la tabla AST 00:03:14
el resto no 00:03:16
tienen un orden natural, solo tienen 00:03:18
los números y los caracteres 00:03:20
con lo cual hay que dárselo por código 00:03:21
hay que dárselo por código 00:03:24
¿y cómo se lo damos por código? 00:03:26
pues gracias a que tenemos la herencia 00:03:28
las interfaces, todo eso 00:03:30
esto ahora ya es muy fácil 00:03:32
porque 00:03:34
las clases de Java están todas metidas en una arquitectura 00:03:35
de herencia, entonces 00:03:38
el ser ordenable, el que yo me pueda 00:03:39
ordenar, es un 00:03:42
comportamiento que puedo 00:03:44
desear adquirir o no 00:03:45
vosotros por definición no os podéis 00:03:47
ordenar entre vosotros, porque no tenéis 00:03:50
ningún criterio de ordenación, no podéis 00:03:52
ordenar, pero si todos os ponéis 00:03:54
de acuerdo en decir, sí 00:03:56
nos queremos ordenar por altura 00:03:57
magnífico, ya automáticamente 00:04:00
sois ordenables por altura 00:04:02
de repente cambiáis, no, queremos 00:04:04
seguir siendo ordenables, pero ahora queremos ser ordenables 00:04:06
por nota 00:04:08
pues ahora sois ordenables por nota 00:04:09
¿vale? entonces vosotros podéis decidir 00:04:11
adheriros 00:04:14
al rol de ser 00:04:16
ordenables 00:04:18
¿y qué significaba adherirse 00:04:19
a un rol? 00:04:22
implementar una interfaz. 00:04:24
¿Por qué son las interfaces? 00:04:25
Las interfaces son roles. 00:04:27
El rol de visible, escondible, rompible, ¿vale? 00:04:29
Pues hay un rol que es ordenable. 00:04:34
Y ese rol no hace falta que lo programemos nosotros, 00:04:37
esa interfaz, ya está. 00:04:40
Lo único que tenemos que hacer es implementarla. 00:04:42
¿Y cómo se llama ese rol, esa interfaz en Java? 00:04:45
Se llama no ordenable. 00:04:48
Se llama comparable. 00:04:50
Entonces, si yo quiero que una entidad mía 00:04:52
que por definición no es ordenable 00:04:54
no lo es, una reserva no es ordenable 00:04:56
solo lo son los números y los charts 00:04:58
si yo quiero que una entidad mía 00:04:59
cumpla el rol de ser ordenable 00:05:01
con otras iguales suyas 00:05:04
con otras iguales suyas, tiene que implementar 00:05:05
ese rol que se llama comparable 00:05:08
bueno, pues aquí que queremos 00:05:09
queremos que reservación 00:05:11
que mis reservas 00:05:13
mis reservas, estas de aquí 00:05:15
implementen ese rol 00:05:18
pues me voy a mi clase de reserva 00:05:20
y le digo, oye tú 00:05:22
implementa 00:05:23
comparable 00:05:28
magnífico 00:05:30
como implementas comparable 00:05:33
ya eres ordenable 00:05:36
pero claro 00:05:37
¿qué pasa cuando implementamos una interfaz? 00:05:39
que tenemos que obligatoriamente 00:05:42
implementar los métodos de esa interfaz 00:05:44
lógicamente 00:05:46
comparable es una interfaz que tiene métodos 00:05:48
si yo quiero ser comparable 00:05:50
tengo que implementar los métodos de comparable 00:05:52
¿cuáles sean esos métodos? 00:05:54
los métodos que decían el criterio, 00:05:55
lógicamente, los que decían el criterio. 00:05:57
¿Vale? Pues esto es lo que nos dice este. 00:06:00
Nos dice, oye, 00:06:02
si quieres implementar comparable, 00:06:03
tienes que implementar el método. 00:06:06
No pasa nada. 00:06:08
Lo implemento. 00:06:09
Comparable es que es de Java lang. 00:06:14
Y Java lang, 00:06:16
todo lo que tiene Java lang, 00:06:17
no hace falta importarlo. 00:06:18
Se importa por defecto. 00:06:19
Y ahora, 00:06:22
este método 00:06:23
es el que tengo 00:06:25
que implementar. ¿Y este método 00:06:27
qué significa? Tiene un uso 00:06:29
muy concreto que hay que respetar. 00:06:31
Aquí es el objeto reserva que llama al método. 00:06:35
Este es el objeto 00:06:38
reserva pasado por parámetro. 00:06:39
Yo tengo que hacer este 00:06:44
método de tal forma que funcione así. 00:06:45
Si me devuelve negativo 00:06:48
es porque el que llama al método 00:06:49
está antes 00:06:51
que el parámetro. 00:06:53
Si me devuelve cero 00:06:55
es porque son el mismo, están en la misma posición 00:06:56
y si me devuelve un positivo 00:06:58
porque el que llama al método está 00:07:03
después, según mi criterio 00:07:05
de ordenación, que el parámetro 00:07:07
entonces yo me las apaño para programar esto 00:07:08
de tal manera que 00:07:11
negativo 00:07:13
menos uno, por ejemplo, si el que lo llamaba 00:07:14
antes que el parámetro 00:07:17
cero, si el mismo 00:07:18
positivo 00:07:20
no, bueno, la burbuja 00:07:22
son dos foranidados que tú vas comparando 00:07:31
vas intercambiando 00:07:33
no, pero no tiene a que ver, es independiente 00:07:34
o sea, esto es un criterio que te devuelve menos uno, cero 00:07:37
o uno, ya está, y luego este método 00:07:39
usa la raíz sor, pero el sor no usa la burbuja 00:07:41
usa otro método, porque la burbuja es un poco 00:07:43
vale, pues aquí podríamos hacer 00:07:45
por ejemplo, si 00:07:47
el objeto que llama al método 00:07:49
punto, mi fecha 00:07:51
get date 00:07:52
Está antes 00:07:54
GetDate tendrá un before o tendrá algo así 00:07:57
IsAfter 00:07:59
Está antes que el objeto este 00:07:59
Pero tendré que hacerle el casting a Reservation 00:08:03
Porque si no, no puedo sacar el método 00:08:05
Reservation 00:08:07
Está antes que 00:08:09
Reservation 00:08:17
Punto 00:08:19
GetDate 00:08:21
Entonces 00:08:22
Devuélveme 00:08:23
Menos uno 00:08:27
Si está después 00:08:28
Devuélveme uno 00:08:37
El save 00:08:39
El save is before 00:08:53
Será, supongo 00:08:58
Is before 00:08:59
Entonces devuélveme uno 00:09:02
Y si no 00:09:03
Devuélveme cero 00:09:06
¡Hala! 00:09:08
Pues ya tengo un método bien hecho 00:09:16
En el que yo he concretado 00:09:18
mi criterio de ordenación, que es este 00:09:21
porque me da a mí la gana ordenar por fecha 00:09:23
si me da la gana ordenar por otra cosa 00:09:25
lo programaría de otra manera 00:09:27
y ahora 00:09:28
el Arrays.sort 00:09:30
perdone usted 00:09:32
¿dónde está Reservation? 00:09:36
aquí 00:09:37
sí, sí, sí 00:09:37
cuando quite 00:09:41
toda la morralla, bueno sin ofender 00:09:42
Jimmy, no es que sea morralla 00:09:45
el resto, cuando quite lo que no hemos visto 00:09:46
para que la gente no abra eso y no diga 00:09:49
¿pero qué es esto? 00:09:51
que me vaya para acá 00:09:54
de hecho me falta 00:09:55
un paréntesis 00:09:57
vale, y ahora ya 00:09:58
este método, el del show 00:10:14
no sé qué 00:10:18
y ya nos vamos 00:10:19
este 00:10:21
¿Sort qué hace? 00:10:24
Lo primero que hace es comprobar 00:10:27
si esto es ordenable. 00:10:29
Porque como vea que no implementa 00:10:31
comparable, error de ejecución. Te dice, no, 00:10:33
me niego. 00:10:35
Y ahora ya, cuando ya ha visto que es 00:10:37
comparable, lo ordena según 00:10:39
ese criterio. Y te deja el array 00:10:41
ordenado. Y luego ya tendríamos 00:10:43
que pasar a mostrarlo. 00:10:45
Pero bueno, eso ya... 00:10:47
Ahora ya lo mostraríamos y listo. 00:10:49
Observación. 00:10:58
como tienes un toString 00:10:59
pues hala 00:11:01
ya está, ¿vale? 00:11:03
entonces, la arquitectura de herencia y de implementación 00:11:05
de terapias está en todas partes, tenemos que 00:11:07
incorporarnos a ella continuamente 00:11:09
¿vale? 00:11:11
venga, nos vamos 00:11:14
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:
5
Fecha:
1 de febrero de 2026 - 19:23
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
11′ 16″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
41.70 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid