20260130 InterfazComparable - 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:
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
es
00:07:01
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