Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

Clase 13-02-24 - 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 15 de febrero de 2024 por Raquel G.

6 visualizaciones

Descargar la transcripción

Bueno, pues os habréis quedado efectivamente 00:00:00
con la gran incógnita de qué pasa aquí. 00:00:02
Y es que efectivamente es una situación 00:00:04
que se nos puede dar. 00:00:06
Necesitamos un dato 00:00:09
que el mejor sitio para guardarlo 00:00:10
es una variable primitiva, 00:00:14
como un numerito entero, 00:00:15
como un numerito decimal. 00:00:17
El mejor sitio es una variable primitiva, 00:00:19
un int, un short, un byte, un double. 00:00:21
Pero también quiero poder guardar 00:00:24
la posibilidad de que esa variable 00:00:27
no tenga nada, esté vacía 00:00:29
eso con una variable 00:00:31
primitiva no se puede, si yo declaro 00:00:33
un int, ese int siempre va a tener algo 00:00:35
porque va a tener bits, va a tener ceros 00:00:37
o uno o menos dos, no existe 00:00:39
el concepto de nada 00:00:41
en una variable primitiva, sí que 00:00:43
existe en variable objeto, pero no existe en variable 00:00:45
primitiva, luego en situaciones 00:00:47
como esta nos quedamos que no tenemos 00:00:49
una variable que se adapta 00:00:51
no pasa nada, se inventa 00:00:53
se inventa 00:00:55
¿vale? pues eso es lo que se ha hecho Java 00:00:57
inventarse esto, se ha inventado una cosa 00:00:59
que se llaman 00:01:01
creo que lo mencionamos alguna vez al principio de curso 00:01:02
cuando vimos las primitivas, pero lógicamente 00:01:05
lo tendréis olvidado 00:01:07
dije, ya esto ya volveremos 00:01:08
a ello cuando veamos objetos, bueno, pues 00:01:11
hemos vuelto a ello el 13 de febrero 00:01:13
bueno, pues Java 00:01:15
efectivamente, para solucionar este tipo 00:01:17
de situaciones, todo tiene 00:01:19
una motivación, todo se hace por algo 00:01:21
¿vale? no estudiéis diciendo esto, esto 00:01:22
esto, no, todo está motivado por una razón 00:01:25
si entendemos por qué está motivado 00:01:27
se nos encenderá la lucecita 00:01:29
de cuándo aplicarlo más rápido 00:01:31
¿vale? tú me vas a decir algo 00:01:32
que te he congelado, ¿verdad? 00:01:34
perdón 00:01:37
quítate 00:01:37
vale 00:01:40
bueno, pues Java entonces 00:01:43
motivado por esta situación 00:01:45
se inventa 00:01:47
los 00:01:51
wrappers 00:01:58
o envolventes, como os guste a vosotros llamarles. 00:02:01
¿Y qué son los envolventes? 00:02:05
Pues son tipos objetos 00:02:07
diseñados 00:02:09
para guardar dentro 00:02:11
variables primitivas. 00:02:12
Entonces, cada tipo primitivo 00:02:15
tiene un tipo objeto envolvente 00:02:17
asociado, por ejemplo 00:02:19
vamos a 00:02:21
me voy a hacer yo aquí 00:02:22
en paralelo mi main de pruebas 00:02:24
para las chorraditas que nos vayan saliendo 00:02:27
me voy a hacer aquí mi main 00:02:28
de pruebitas para las chorraditas 00:02:33
¿vale? jolines 00:02:35
tengo que quitar esto para que no me saque el constructor 00:02:38
todo el rato 00:02:41
vale, pues entonces 00:02:41
está claro esto como se usa 00:02:45
yo tengo una variable entera 00:02:47
en la que puedo meter un numerito entero, lo que quiera. 00:02:49
Eso está claro. 00:02:51
Vale, pero es que tengo asociado a cualquier tipo primitivo, 00:02:52
in double float, tengo el envolvente correspondiente, 00:02:56
el grouper. 00:02:59
¿El envolvente de lint cuál es? 00:02:59
Este. 00:03:02
Este es. 00:03:05
Este es el tipo de dato y este es un tipo de dato objeto. 00:03:07
Un tipo de dato objeto. 00:03:11
Y yo puedo declararme una variable objeto así. 00:03:13
¿Vale? 00:03:16
Entonces esta es una variable de tipo objeto 00:03:16
¿Y para qué sirve? 00:03:19
Sirve para guardar un número entero 00:03:21
Para eso sirve 00:03:23
Pero aquí lo guardaré en modo objeto 00:03:24
Y aquí lo guardo en modo primitivo 00:03:27
Pero el valor que guarda es lo mismo 00:03:29
Es un número 00:03:31
Lo que pasa es que aquí lo guarda en modo objeto 00:03:32
¿Qué gano? 00:03:34
Gano dos cosas 00:03:36
Primero, poder guardar la idea de que ahí no hay nada 00:03:37
Aquí es imposible 00:03:40
Guardar la idea de que ahí no hay nada 00:03:42
No se puede 00:03:45
en una variable primitiva no puedo meterle 00:03:45
nada, pero en una variable 00:03:48
objeto como esta sí 00:03:50
y yo puedo hacer 00:03:52
n2 igual a nul 00:03:53
esto sí que puedo 00:03:56
porque n2 00:03:58
es un tipo objeto 00:04:00
esto sí que puedo hacerlo 00:04:01
y con esto diré, oye que el numerito n2 no tiene nada 00:04:02
fenomenal, no tiene nada 00:04:06
aquí el numerito n no podría 00:04:07
decir, ¿tiene algo? ¿no tiene nada? 00:04:10
no, siempre va a tener algo, siempre 00:04:12
es un tipo objeto, o sea, no es como un string 00:04:14
porque guarda otra cosa, pero efectivamente 00:04:18
es un tipo objeto como un string 00:04:20
entonces, gano la posibilidad de que tenga null 00:04:22
como el string, que también puede tener null 00:04:24
puede decir, no tengo nada, no tengo ningún texto 00:04:26
pues esto igual, esto puede 00:04:28
no tener nada 00:04:30
y también gana el que 00:04:31
al ser objeto, tiene métodos 00:04:34
el que hizo la clase integer, ya de hecho le metió métodos 00:04:36
pues si uno quiere hacer cosas con numeritos 00:04:38
entonces, pues si uno 00:04:40
los cotillea, pues bueno 00:04:42
aquí tiene métodos para hacer cosas 00:04:44
con los enteros, ya hemos usado 00:04:46
uno, muchas veces 00:04:48
¿no recordáis que 00:04:50
a veces cuando queríamos convertir 00:04:52
una cadena a entero 00:04:54
hacíamos esto? 00:04:56
pues este es 00:05:05
un método estático 00:05:06
de la clase íntegra 00:05:08
es estático porque lo llamo con el nombre de la clase 00:05:10
¿y qué hace este método estático de la clase 00:05:12
íntegra? le paso una cadena 00:05:14
y me lo devuelve en el 00:05:16
número entero que representa 00:05:18
entonces, esta llamada 00:05:20
ya la hemos usado otras veces cuando 00:05:22
leíamos del teclado y queríamos pasar a entero 00:05:24
o algo así 00:05:26
vale, ya lo hemos hecho otras veces 00:05:27
entonces, la clase íntegra 00:05:32
esta de aquí me vale para dos cosas 00:05:34
primero, para guardar un número 00:05:36
entero pero en modo objeto 00:05:38
de forma que yo pueda 00:05:39
meterle un null también si me da la gana 00:05:41
y también me vale 00:05:43
porque tiene métodos dentro para hacer cosas 00:05:45
entonces mi objeto 00:05:47
n de arriba no puede 00:05:49
llamar a métodos, es imposible porque es una variable 00:05:51
primitiva y las variables primitivas no pueden 00:05:53
llamar a métodos, pero mi variable 00:05:55
claro que puede llamar a métodos 00:05:58
entonces tengo 00:06:01
utilidades ahí, que me he sacado de la manga 00:06:03
solo porque n2 está en tipo objeto 00:06:05
entonces yo a n2 00:06:07
por ser de tipo objeto 00:06:08
aunque sea un numerito lo que tiene 00:06:12
porque tiene un número 00:06:14
n2 tiene cosas a las que puedo llamar 00:06:15
pues convertirlo 00:06:18
en double 00:06:20
ver si es igual que otro número 00:06:21
pero bueno eso con el doble igual del primitivo 00:06:24
también, pues bueno tiene unos metoditos para hacer 00:06:26
cosas con él, convertirlo a float 00:06:28
cosas que yo no puedo hacer con la 00:06:30
variable primitiva n 00:06:32
bueno pues con esta variable por ser objeto 00:06:33
puedo hacer dos o tres chorradas 00:06:35
pero a ver, sobre todo la utilidad 00:06:37
también son los métodos estáticos 00:06:39
la clase ínteger 00:06:41
tiene 00:06:43
métodos estáticos hechos 00:06:45
para ver cositas 00:06:47
¿no? pues me permite aquí comparar 00:06:50
dos números, a ver cuál es mayor o menor 00:06:53
chorradas 00:06:55
¿vale? me permite con esto 00:06:56
obtener el máximo valor entero a codificar 00:06:59
o el mínimo 00:07:01
la clase ínteger, bueno pues ya que 00:07:02
está hecha esa clase 00:07:05
Pues esa clase me permite 00:07:06
Acceder a utilidades 00:07:09
¿Vale? 00:07:11
Esta clase si uno la cotillea por aquí 00:07:12
Integer, pues bueno, tiene todas sus cosas 00:07:15
Y esta clase para lo que vale 00:07:17
Es para guardar en realidad 00:07:20
Un numerito 00:07:22
Un numerito que irá guardado en una variable 00:07:23
Que estará por ahí 00:07:26
Una int 00:07:28
Que estará por ahí 00:07:30
Que es la que guarda el numerito 00:07:32
¿Vale? 00:07:33
bueno 00:07:34
pues entonces 00:07:36
y lo que aplica para integer 00:07:38
aplica para cualquier variable primitiva 00:07:40
silencio 00:07:42
también existe el tipo envolvente 00:07:44
este de aquí 00:07:46
también existe este tipo 00:07:47
este tipo vale 00:07:49
para guardar un número double 00:07:51
pero guardarlo en modo objeto 00:07:53
guardarlo en modo objeto también 00:07:55
de forma que yo le pueda asignar un null 00:07:57
entonces los tipos integer 00:07:59
en realidad, o sea, todos los tipos 00:08:02
primitivos tienen todo su envolvente 00:08:04
que en todos los casos 00:08:06
el nombre de la clase es la misma que el primitivo 00:08:07
pero con mayúscula 00:08:11
salvo esta, que esta cambia un poco más 00:08:12
pasa de índa a íntegra 00:08:15
pero las demás son el short, tiene el short 00:08:16
con la S mayúscula, el float tiene el float 00:08:18
con la F mayúscula 00:08:20
esta es la única que cambia un poco el nombre 00:08:22
¿vale? entonces, trabajar 00:08:24
con los, la clase está hecha 00:08:26
para que uno pueda pasar 00:08:28
fácilmente de uno a otro, incluso 00:08:30
sin casting y sin nada 00:08:32
igual que al string 00:08:33
al string le podemos asignar una cadena de texto 00:08:36
aunque sea objeto, sin ponerle new string 00:08:38
pues integer también está hecha 00:08:40
para permitir trabajar 00:08:42
con primitivos 00:08:44
integrar fácilmente 00:08:45
por ejemplo yo a este 00:08:49
le puedo asignar el n 00:08:51
directamente 00:08:52
puedo hacer esto 00:08:53
n es un primitivo 00:08:56
y se lo estoy asignando a este tipo entero 00:08:58
pero esta clase ya está pensada 00:09:00
para que lo que hace entonces es 00:09:02
coge este número primitivo 00:09:04
crea el objeto, crea el objeto 00:09:06
integer y mete este numerito 00:09:08
dentro, vale, ya está 00:09:10
pensada para darnos esa facilidad de uso 00:09:12
no tener que instanciarlo 00:09:14
todo el rato con new integer y nada de eso 00:09:16
como la string, que no la instanciamos 00:09:18
con new string porque es un rollo 00:09:21
a la string 00:09:22
le hacemos esto 00:09:24
siempre 00:09:26
¿Verdad? 00:09:30
Podríamos hacer esto también. 00:09:32
Y estaríamos haciendo lo mismo que arriba. 00:09:42
Lo mismo. 00:09:44
Pero, hombre, la clase string, ya dijimos que como se usa tanto, 00:09:46
nos facilita las cosas para poder yo instanciarla así. 00:09:49
Pues, está igual. 00:09:53
No es necesario que yo haga el new integer ni nada. 00:09:54
la puedo instanciar directamente dándole 00:09:56
el número entero que contiene 00:09:59
y así sobre la marcha uno puede comprobar 00:10:01
que es muy flexible 00:10:03
que puede comparar y integrar 00:10:04
y enteritos 00:10:07
sin hacer casting 00:10:09
con otro, etcétera 00:10:11
bueno, pues entonces 00:10:13
esta, esto nos resuelve 00:10:15
este problema 00:10:18
que teníamos aquí 00:10:19
¿verdad? 00:10:20
¿qué tipo de dato le ponemos 00:10:22
a este método? 00:10:25
yo tengo que volver un número 00:10:26
o también la posibilidad de volver null 00:10:28
si es que 00:10:30
no se cumple la condición 00:10:32
pues ya está, entonces ínteger es la que le pega 00:10:34
¿vale? 00:10:36
es la que le pega y un pedazo de ínteger 00:10:38
pues venga 00:10:39
le ponemos un 00:10:41
ínteger y listo 00:10:46
¿vale? 00:10:48
solucionado ese ínteger será null 00:10:50
o será un valor entero 00:10:52
que es el número de habitaciones reservadas 00:10:54
para esta fecha 00:10:56
¿vale? y ahora ya ese método 00:10:57
la clase principal main lo usará 00:11:00
como quiera, pues tendrá 00:11:02
un montón de reservas, para cada reserva 00:11:04
comprobará la disponibilidad para cada una 00:11:06
de ellas, para una fecha 00:11:08
obtendrá las habitaciones para esa fecha 00:11:10
ya la clase main lo que sea 00:11:12
ahora mismo lo que vemos 00:11:14
es simplemente es un método que 00:11:16
dada una reserva concreta, dada una reserva 00:11:17
mira si para esa reserva 00:11:21
la fecha es esta 00:11:22
si lo es devuelve las habitaciones 00:11:23
y si no lo es, devuélvelo, ya está 00:11:25
pues hala 00:11:28
la clase reserva 00:11:31
parece que 00:11:36
está 00:11:39
vale, comprueba disponibilidad 00:11:41
ya está, ahora ya viene 00:11:48
el hotel 00:11:50
pues bueno, el hotel 00:11:51
lo mismo, después de hacer el análisis 00:11:56
toda la historieta nos dicen 00:11:58
del hotel lo único que nos interesa 00:11:59
guardar es 00:12:01
el conjunto de habitaciones que tiene 00:12:03
y el conjunto de reservas que tiene 00:12:06
el único que nos interesa es el hotel, nos da igual la dirección 00:12:08
donde está, el nombre 00:12:10
la verdad es que es un poco feo eso 00:12:11
vamos a ponerle un nombre por lo menos 00:12:14
es que tanto tanto simplificar 00:12:15
vamos a darle un sentido más real 00:12:18
venga, vamos a añadirle un nombrecito 00:12:19
más que nada por facilitar, si luego hacemos un main de prueba 00:12:21
para probar esto, que aquí no está incorporado 00:12:24
si luego hacemos un main de prueba 00:12:26
pues hombre, crear un hotel con un nombre, algo así 00:12:27
venga, vamos a hacer 00:12:30
la clase hotelillo 00:12:32
a ver 00:12:33
La clase hotel 00:12:49
La clase hotel, vamos a ponerle un nombre 00:12:55
No hijo, no, eso eran tus sueños 00:12:57
Ah no, habitación, perdón 00:13:03
Vale, nombre del hotel 00:13:05
Eh, jolines, es que 00:13:10
No quito eso en la pestaña 00:13:13
Y me sale y lo meto siempre donde no es 00:13:16
Ahí, vale, ya está 00:13:19
Vale, hotel 00:13:21
Tampoco hereda de nadie 00:13:23
Esto es un desmadre 00:13:24
Pues venga, vamos a ponerle un constructor 00:13:26
Ah, bueno, me faltan los otros dos parámetros 00:13:28
Número de habitaciones 00:13:30
Vale, a ver si ya 00:13:33
Ahora mismo 00:13:35
A ver si nos quitamos ya los arrays de encima 00:13:36
Ahora mismo 00:13:39
No nos queda más remedio que guardar 00:13:41
Un conjunto de cosas en un array 00:13:43
Porque es que no sabemos otra cosa 00:13:44
Pues ala 00:13:45
Las habitaciones ahí 00:13:48
Y las reservas 00:13:50
Ahí 00:13:54
Reservas 00:13:59
El hotel solo nos interesa eso 00:14:04
Su nombre, las habitaciones que tiene 00:14:08
Y las reservas que tiene 00:14:10
Se acabó 00:14:11
Vale, aquí de nuevo 00:14:12
los famosos 00:14:14
null pointer exception 00:14:16
cuando el hotel arranca 00:14:18
si no inicializamos esto 00:14:22
a través del constructor 00:14:24
porque lo instanciamos por ejemplo así 00:14:25
pues 00:14:28
su conjunto de habitaciones 00:14:30
es un objeto null 00:14:32
y su conjunto de reservas es un objeto null 00:14:33
no es que tenga un número de habitaciones 00:14:36
cero 00:14:38
y un número de reservas cero, no 00:14:39
es que directamente es null 00:14:41
no tiene ni capacidad para tener habitaciones y reservas 00:14:43
no pasa nada 00:14:46
el momento en el que le agreguemos la primera habitación 00:14:47
le creamos esa capacidad 00:14:50
le hacemos que ya no sea null 00:14:51
podría ocurrir 00:14:53
pero hombre, si ya directamente 00:14:55
inicializamos con un array 00:14:58
que aunque no tenga posiciones no sea null 00:14:59
pues seguramente nos evitemos 00:15:01
null pointer exception si es que 00:15:04
algo se nos escapa 00:15:06
más adelante y no reservamos 00:15:07
el objeto, etcétera 00:15:09
entonces hombre 00:15:12
no es que las cosas haya que hacerlas así 00:15:12
porque yo lo diga, yo lo que os trato 00:15:15
es de que entendáis las cosas 00:15:17
luego cada uno va seleccionando 00:15:19
en un momento determinado, en un contexto 00:15:21
determinado, pues qué es lo que quiere 00:15:23
hacer, bueno pues yo voy aquí 00:15:25
a crear ya 00:15:27
instanciar ya un array 00:15:29
instanciarlo ya, aunque no le voy a dar 00:15:30
todavía espacio para ninguna 00:15:33
habitación, porque el hotel de partida 00:15:35
no tiene habitaciones, ya se las iré yo 00:15:37
incorporando 00:15:39
lo único que he arreglado con esto 00:15:40
evito lo único que arreglo 00:15:43
es que ese objeto habitaciones 00:15:44
no sea null 00:15:47
y al no ser null 00:15:48
si alguien le hace un punto lenza así rápidamente 00:15:50
lo que sea, pues no le va a salir null.except 00:15:53
y la aplicación no se va a parar 00:15:55
porque el problema de las excepciones es 00:15:56
que si no se capturan con try-catch 00:15:59
correctamente 00:16:01
detienen la aplicación 00:16:02
y eso es lo último que queremos en una aplicación 00:16:04
lo que queremos en una aplicación es que 00:16:06
como mucho te diga 00:16:08
pues inténtalo más adelante 00:16:09
hay un error, pero que la aplicación no se pare 00:16:11
entonces no, queremos evitar 00:16:13
las excepciones 00:16:15
pues nada, aquí lo mismo, voy a evitar 00:16:16
un null, porque el null 00:16:19
pointer exception es 00:16:21
silencio por ahí 00:16:22
atrás, el null pointer exception 00:16:25
es muy desagradable 00:16:27
es muy desagradable 00:16:28
vale, venga, nos vamos a hacer un constructor 00:16:31
con parámetros, por si alguien quiere de partida 00:16:33
crear un hotel ya con 00:16:35
con su array de habitaciones, su array de reservas, etc. 00:16:37
Bueno, vamos a hacer un constructor con parámetros. 00:16:42
Este sería para hacer un hotel ya con un array enterito, 00:16:47
pisando entonces el que acabo de inicializar. 00:16:50
Con este array enterito, pisando el que acabo de inicializar. 00:16:53
Bueno, si alguien quiere hacer un hotel de partida ya con dos arrays concretos, 00:16:55
pues puedo usar este constructor. 00:16:58
Y aquí, en este caso, tendría muchísimo sentido 00:16:59
sentido hacer un constructor 00:17:05
solo con el nombre 00:17:07
para yo crear un hotel 00:17:09
con su nombre, por ahora sin 00:17:12
habitaciones ni reservas, que ya las haré más 00:17:13
adelante 00:17:15
¿vale? 00:17:16
bueno, y Getty Set, pues eso 00:17:20
sí que sí, si las he puesto privadas 00:17:21
ahí sí que 00:17:23
no hay otra 00:17:25
y bueno 00:17:27
vamos a hacer un to stream solo con el nombre 00:17:30
el hotel es patatín, que no 00:17:31
muestro lista de habitaciones y reservas 00:17:33
Porque nos vamos a volver locos 00:17:35
Vamos a hacer un toestring solo con el nombre 00:17:37
Le quitamos habitaciones y reservas 00:17:39
Un toestring 00:17:43
Que me muestre el nombre del hotel 00:17:45
Y ya está 00:17:47
Vale, esto describe el hotel 00:17:48
Lo describe 00:17:52
Nombre, habitaciones, reservas 00:17:53
Vale, pero que queremos hacer con el hotel 00:17:55
Que queremos hacer, queremos hacer reservas 00:17:57
Queremos meter las habitaciones, que queremos hacer con el hotel 00:17:59
Lo habremos decidido 00:18:01
después de toda esa sesión 00:18:03
de todas esas reuniones 00:18:05
con los que van a hacer la aplicación 00:18:08
y los que la han pedido, lo habremos decidido 00:18:10
y como aquí ya se ha decidido 00:18:11
pues nos dicen aquí 00:18:13
una serie de métodos para hacer 00:18:15
vale, a ver 00:18:17
tiene dos 00:18:21
tiene busca disponibilidad 00:18:24
y tiene un método 00:18:28
disponibilidad 00:18:32
son las dos únicas 00:18:32
funcionalidades que tiene el hotel 00:18:37
disponibilidad 00:18:38
recibe 00:18:41
una cantidad de personas 00:18:43
y un día 00:18:46
y tiene que mirar 00:18:47
si hay habitaciones libres 00:18:50
para todas las personas 00:18:52
es decir, si todas las personas tienen acomodo 00:18:54
no hace falta que sean la misma habitación 00:18:56
no hace falta 00:18:58
sino si tienen acomodo 00:19:00
en dos habitaciones diferentes, en lo que sea 00:19:01
¿vale? tienen acomodo 00:19:03
si no hay habitaciones, devuélvenlo 00:19:05
y si no, devuelve 00:19:10
una reserva, a ver, con una reserva 00:19:12
¿qué quiere decir esto? 00:19:13
bueno, devuelve una reserva o varias 00:19:19
con lo que yo he dicho, si yo interpreto 00:19:21
de ahí, si yo interpreto 00:19:23
que hay acomodo para todas 00:19:25
devolvería varias, podría devolver 00:19:27
varias, ¿verdad? No sé cómo lo habéis 00:19:29
hecho Miguel y Diego 00:19:31
este método. Habéis mirado si hay solo 00:19:33
una habitación para todas, ¿no? 00:19:35
No. Ah, vale, vale. 00:19:38
Ah, vale, sí, perdón, perdón, perdón, perdón, sí que 00:19:41
si hablar y pensar 00:19:43
me cuesta. O hablo 00:19:45
o pienso. Vale. 00:19:47
Vale, pues 00:19:51
entonces, buscar disponibilidad. 00:19:51
La reserva te dice 00:19:53
si hay 00:19:54
habitaciones libres y te devuelve 00:19:57
perdón, efectivamente una sola reserva 00:19:59
con las habitaciones que sean, las que hayan hecho falta 00:20:01
1, 2, 3, las que sean 00:20:03
¿vale? venga, pues entonces 00:20:04
busca disponibilidad 00:20:07
la cabecera del método será 00:20:08
la cabecera del método 00:20:11
será 00:20:15
te devuelve una reserva, que puede ser nulo o no 00:20:15
claro, te devuelve una reserva 00:20:21
eso está claro 00:20:23
busca disponibilidad 00:20:23
Y que recibe un número de personas. 00:20:29
Y recibe una fecha. 00:20:36
Fecha. 00:20:51
Recibe esto. 00:20:54
Entonces. 00:20:57
Tendrá que buscar 00:20:59
A ver 00:21:02
Cada habitación tiene 00:21:05
En función de las habitaciones que sea 00:21:11
Las camas que tiene y todo eso 00:21:14
Entonces 00:21:15
Y tendrá que buscar 00:21:17
La reserva tiene 00:21:18
El número de habitación 00:21:20
Vale 00:21:23
Pues tendrá que buscar 00:21:25
Si hay 00:21:27
en esa fecha 00:21:28
habitaciones dentro de la RAI 00:21:31
de habitaciones que no tengan 00:21:33
reserva en las que quepan todas esas 00:21:35
personas, ¿vale? 00:21:37
Es decir, no es un método 00:21:39
fácil de plantear. 00:21:40
Es un método retorcido, ¿vale? 00:21:44
Vale, pues entonces 00:21:47
ahora 00:21:48
más o menos yo creo que 00:21:51
la estructura de la aplicación, las clases que tiene 00:21:54
y lo que tiene que hacer este método está claro. 00:21:57
Ahora lo que hay que pensar es cómo plantearía uno ese método. 00:22:00
¿Cómo lo plantearía uno? 00:22:02
Con los datos que tiene. 00:22:04
El hotel, para buscar la disponibilidad, 00:22:05
tiene estos datos. 00:22:09
Tiene 00:22:10
el número de personas a alojar, 00:22:10
el número de personas y la fecha. 00:22:17
Y tiene que navegar 00:22:20
por sus habitaciones 00:22:21
en las que sabe cuántas personas caben 00:22:23
en cada habitación, dependiendo de si 00:22:26
las que saben en cada habitación 00:22:28
y por las reservas 00:22:30
tiene que navegar por ambas cosas, por habitaciones y reservas 00:22:32
¿vale? 00:22:35
y si encuentra acomodo 00:22:36
creará una reserva nueva 00:22:38
creará una reserva nueva 00:22:40
¿vale? creará una reserva nueva 00:22:42
con las 00:22:44
habitaciones 00:22:47
y personas ¿vale? 00:22:48
un momentito que me entra a mi la duda de si 00:22:51
el número de habitaciones es de las habitaciones de la reserva 00:22:52
o el número de habitación de la reserva 00:22:54
un momentito, a ver 00:22:56
claro, es que me ha entrado 00:22:58
mi duda al verlo, a ver 00:23:00
reserva 00:23:03
no, habitaciones reservadas 00:23:08
claro, ah, habitaciones 00:23:10
reservadas, vale, vale, vale, habitaciones 00:23:12
reservadas 00:23:15
vale, habitaciones reservadas 00:23:16
entonces es 00:23:18
varias, pero el número de 00:23:19
cada una, ¿cómo guardaríamos esta propiedad? 00:23:22
Sí, o sea, yo la he interpretado 00:23:26
así muy alegremente según lo iba leyendo 00:23:31
¿Número de habitaciones? Pues tres habitaciones reservadas 00:23:33
Pero no 00:23:35
Habitaciones reservadas entiendo que se refiere 00:23:39
a la habitación 00:23:41
1, la 7 y la 12 00:23:43
Luego habitaciones reservadas 00:23:45
¿En qué tipo de datos 00:23:48
lo tendríamos que guardar? 00:23:51
En una raíz de enteros 00:23:54
¿Verdad? 00:23:55
Habitaciones reservadas son la 7, la 12 y la 15 00:23:56
La 4, la 9 o la 10 00:23:58
La 3 y la 8 00:24:00
La 9 y la 5 00:24:02
¿Verdad? 00:24:03
Es decir, una raíz de números 00:24:07
Una raíz de números de habitaciones 00:24:08
¿Verdad? 00:24:10
¿Sí? ¿Vale? 00:24:12
Habitaciones reservadas 00:24:17
Fecha y número de personas 00:24:19
Vale, pues entonces 00:24:22
esto 00:24:23
tendría que ser 00:24:29
así 00:24:36
y ahora esto simplemente cambia 00:24:40
el constructor 00:24:46
le tengo que pasar esto 00:24:49
aquí le tengo que pasar 00:24:55
esto 00:24:58
vale 00:24:59
y aquí le tengo que pasar esto 00:25:02
comprueba disponibilidad 00:25:04
devuelve 00:25:11
vale, vale, vale 00:25:12
entonces 00:25:14
devuelve la habitación de reserva 00:25:16
entonces aquí lo que devolvería sería 00:25:18
numHabitaciones.length 00:25:20
¿verdad? 00:25:25
Sí, también está cambiado. 00:25:27
Dime. 00:25:29
Es el método. 00:25:30
¿Cuál? 00:25:32
O sea, este, 00:25:34
claro, 00:25:35
este lo tengo que cambiar 00:25:36
a que me devuelva 00:25:38
el tamaño de ese array. 00:25:39
Bueno, le puedes poner un disk delante 00:25:46
si quieres, pero vamos, opcional. 00:25:47
¿Vale? 00:25:50
Vale, creo que la clase reserva 00:25:50
Creo 00:25:54
Que ya estaría toda modificada 00:25:54
Número de habitaciones 00:25:57
Está todo cambiado a RAI 00:25:59
Comprueba disponibilidad 00:26:05
Te devuelven uno de habitaciones reservadas 00:26:07
O nulo 00:26:09
Vale 00:26:09
Y esto a habitación no le afecta 00:26:10
A hotel tampoco le afecta 00:26:14
¿Verdad? 00:26:17
Y ahora ya se nos queda este método 00:26:19
Vale, esta sería 00:26:20
Esto que hemos hecho hasta ahora 00:26:21
Pues podría ser un examen normal y corriente 00:26:24
Este podría ser el proceso 00:26:27
Vuestro de un examen, vais haciendo las clases 00:26:29
Vais viendo, uno puede tener 00:26:30
Un main al lado para ir probando 00:26:32
A ver si algún método que ha hecho, por ejemplo 00:26:35
Aquí podría probar 00:26:37
Uy, si es que no lo sabe ya 00:26:38
¿Qué método era el que comparábamos fechas? 00:26:40
Estaba en reserva, ¿verdad? 00:26:45
Sí, aquí, uy, realmente 00:26:46
¿Y cuál será el que yo le doy dos locales y no son iguales? 00:26:49
Pues a lo mejor lo podría comprobar en un main 00:26:51
Pero vamos, ya os digo yo que sí 00:26:53
De hecho se puede meter uno en el equals de local date 00:26:54
¿Veis? 00:26:57
Este es el equals de local date 00:26:59
Que sobrescribe el equals de object 00:27:01
Que lo sobrescribe 00:27:03
Y fijaos como está hecho 00:27:04
Pues está llamando al compare to 00:27:06
Que el compare to si os metéis 00:27:08
Veréis que devuelve cero si las fechas son iguales 00:27:11
Pues sí, tiene toda la pinta de que el equals 00:27:14
Si dos objetos fecha 00:27:15
en direcciones distintas 00:27:18
contiene en el mismo día, mes y año 00:27:20
contiene en el mismo, pues te va a dar 00:27:22
el equals true, tiene toda la pinta de que sí 00:27:24
pero uno podría comprobarlo en un main aparte 00:27:26
si tiene dudas, lo que sea 00:27:28
¿vale? bueno, entonces 00:27:30
y ahora ya llegaría a la parte más 00:27:32
complicada, que yo no sé si 00:27:34
pondríamos quizá algo tan complicado 00:27:36
en un examen, depende de cómo salga, a lo mejor luego lo hacéis 00:27:38
y os sale facilísimo, no lo sé 00:27:40
¿vale? pues venga 00:27:42
poneos a ello, a ver cómo sale este método 00:27:44
que aquí ya sí que hay que ponerse a pensar 00:27:46
cómo recorro el array, cómo lo miro 00:27:48
cómo 00:27:51
venga 00:27:52
Hay que intentar entenderlo yo también 00:28:16
Porque no te creas que me ha quedado muy claro 00:28:26
Lo que tiene que hacer 00:28:27
¿Tú lo has completado este método, Miguel? 00:28:29
Es que no te creas que está muy claro lo que tiene que hacer 00:28:37
Pero vamos 00:28:39
Gracias. 00:28:46
Gracias. 00:29:16
asumimos claro que las personas 00:29:46
da igual en qué habitaciones caigan 00:29:55
o sea, si caen todas 00:29:58
en una 00:30:00
de tres personas, o sea, son tres 00:30:01
y hay una de tres personas ahí 00:30:04
vale, da igual 00:30:05
no hay que buscarles 00:30:07
no hay, no pueden elegir 00:30:10
pues no sería muy complicado 00:30:12
pero bueno, sí 00:30:13
Yo creo que sí, que no es tan complicado 00:30:15
Ahí la idea sería 00:30:17
El hotel tiene una serie de reservas 00:30:24
Tenéis una fecha 00:30:26
Pues habría que ir reserva por reserva 00:30:27
Viendo las habitaciones que quedan libres 00:30:30
Y ver si las que quedan libres 00:30:33
Suman 00:30:35
Un total de plazas disponibles 00:30:36
Para lo cual hay un método de plazas disponibles 00:30:40
Superior o igual a las personas que hay 00:30:41
Aquí está. 00:30:45
¿Vale? 00:31:11
Es decir, ahí te dan una fecha. 00:31:11
O sea, cada reserva tiene las habitaciones ocupadas 00:31:13
o no tiene ninguna. 00:31:17
Y luego, además, el hotel tiene una serie de habitaciones 00:31:19
donde cada habitación tiene el número de plazas disponibles 00:31:22
en su método. 00:31:27
Entonces, la idea sería para este método 00:31:29
de disponibilidad, que era una fecha, 00:31:32
pues tú vas 00:31:35
reserva por reserva, ¿vale? 00:31:36
en cuanto te encuentres 00:31:43
una que es null 00:31:45
pues tú vas cogiendo habitaciones 00:31:47
hasta completar las personas que hay 00:31:51
en cada habitación tienes placas disponibles 00:31:52
las vas cogiendo 00:31:54
¿vale? 00:31:55
y si no es null pues las que quedan libres 00:31:58
que no están ahí 00:32:00
que no están en su array 00:32:01
aquí 00:32:02
entonces bueno hay que 00:32:05
es un código que hay que organizar un poquito 00:32:07
pero el punto de partida es ese 00:32:09
es ir viendo las habitaciones que quedan libres 00:32:11
en ese día 00:32:15
entonces, si todas las reservas 00:32:16
te han dado null 00:32:19
pues las tienes todas libres, las vas cogiendo y ya está 00:32:20
si hay una reserva que no te ha dado null 00:32:23
pues tendrás que verlas 00:32:25
que las habitaciones que quedan libres 00:32:26
yo me haría 00:32:28
una array habitaciones libres 00:32:34
¿vale? una array habitaciones libres 00:32:37
que inicializaría con las totales 00:32:40
de habitaciones del hotel 00:32:44
y luego iría recorriendo las reservas 00:32:45
e iría quitando las que tienen cada reserva 00:32:48
para ese día, iría quitando 00:32:51
luego con las que me quedan 00:32:52
miraría si caben las personas que hay 00:32:54
y ya está 00:32:56
es como yo lo haría 00:32:57
un array de habitaciones disponibles 00:32:59
recorro las reservas 00:33:02
y para las reservas de esa fecha 00:33:03
para lo cual tenemos un método 00:33:06
le voy quitando las ocupadas 00:33:08
y con las que me queden 00:33:10
al final del recorrido con las reservas 00:33:13
miro a ver si caben las personas que tengo 00:33:15
pero seguramente lo podéis plantear 00:33:16
de otras maneras, de otras formas 00:33:21
a ver como se os ocurre 00:33:22
yo lo voy a hacer a mi manera 00:33:24
a ver como sale 00:33:26
Gracias. 00:33:38
Gracias. 00:34:08
Gracias. 00:34:38
Claro, es un método que tendrás que usar 00:35:08
Sí, a ver cómo lo organizáis vosotros 00:35:13
La idea es, con lo que tenemos 00:35:15
cómo construís el código 00:35:17
para construir una reserva 00:35:18
si es que se puede, que aloje a esas personas 00:35:21
Si tenéis que hacer 00:35:38
Tampoco os pongáis como locos 00:35:45
Metiendo métodos 00:35:47
Porque no se trata en las clases 00:35:48
Si tenéis que hacer algún método auxiliar 00:35:49
Que tenga sentido, que esté justificado 00:35:51
Donde va 00:35:54
No un método que de repente 00:35:54
Aparece como un parche en una clase 00:35:56
Que no, pues lo hacéis 00:35:59
Para que no queden códigos largos 00:36:01
Pero tratad de hacerlos con criterio 00:36:03
Gracias. 00:36:06
Seguimos. 00:36:36
Gracias. 00:37:06
Gracias. 00:37:36
Gracias. 00:38:06
Gracias. 00:38:36
¿Qué pasa? 00:39:06
Gracias. 00:39:36
¿Qué pasa? 00:40:06
Esto estaría en realidad mucho mejor descrito, es que el enunciado no lo dejaba muy claro. 00:40:36
Si la reserva lo que tuviera aquí es el array directamente de las habitaciones. 00:40:40
Ya que tenemos una clase habitación, no solamente el número, porque si tenemos el número luego tendríamos que irnos al array a buscar. 00:40:46
Estaría mucho mejor descrito si la reserva tiene la fecha, el número de personas y el array de las habitaciones. 00:40:54
¿Verdad? Estaría mejor descrito 00:41:05
Yo creo, ¿no os parece? 00:41:07
Ya, pero el tipo de dato 00:41:14
¿El tipo de dato tienes puesto? 00:41:16
¿Un array de int o un array de habitación? 00:41:18
Vale, pero que quizá 00:41:22
Así solamente guardas 00:41:23
El número de la habitación 00:41:25
Pero si lo declaramos 00:41:26
Como array de habitación 00:41:29
Guardas todos los datos de la habitación 00:41:30
Directamente en ese array 00:41:32
Lo digo porque podéis también cambiar el diseño si queréis 00:41:33
Como yo lo he empezado así, yo lo voy a dejar así 00:41:39
Pero es por hacer comentarios al respecto 00:41:43
Gracias. 00:42:03
Gracias. 00:42:33
Gracias. 00:43:03
Gracias. 00:43:33
Un momento. 00:44:03
Gracias. 00:44:33
Gracias. 00:45:03
Gracias. 00:45:33
3, 2, 1. 00:46:03
Bueno, pues yo ya he hecho mi versión 00:46:33
Uh, esto estaba sin parar 00:46:39
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
6
Fecha:
15 de febrero de 2024 - 19:46
Visibilidad:
Público
Centro:
IES ROSA CHACEL
Duración:
46′ 42″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
210.68 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid