20251215 AppClientesPedidos_2 - 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:
registrar cliente era una funcionalidad básica
00:00:00
que ya hemos hecho
00:00:03
vamos a hacer una, que menos
00:00:03
puedo
00:00:06
vale
00:00:11
pues que menos que ponerle una funcionalidad
00:00:20
que sea
00:00:25
ver el listado de clientes
00:00:26
para así
00:00:28
poder comprobar si se ha registrado correctamente
00:00:28
o no
00:00:32
que menos, poder tener un listado de clientes
00:00:32
pues venga, vamos a hacer la opción 2, listado de clientes
00:00:37
la opción 2 no hay que pedirle nada al usuario
00:00:41
simplemente hay que recorrer este array para mostrarlo
00:00:45
entonces en principio uno podría hacer esto, verdad
00:00:50
y ahora, parte buena y bonita y estupenda
00:00:52
de haber hecho el toStream, yo quiero mostrar el cliente
00:01:05
con lo que nosotros hemos dicho hasta ahora,
00:01:09
cliente tiene tres cosas dentro.
00:01:14
NIF, nombre, pedidos.
00:01:17
Entonces, realmente mostrarle al cliente sería
00:01:20
que meto en el system out.
00:01:22
Meto NIF, meto nombre, recorro el array
00:01:24
y meto los pedidos.
00:01:27
¿Qué meto?
00:01:31
¿Tendría que hacerte system out?
00:01:34
Pero claro
00:01:36
¿Qué ocurre?
00:01:38
¿Qué pasa?
00:01:41
¿Qué pasa si yo le paso
00:01:42
El
00:01:44
¿Eh?
00:01:45
Sí, pero
00:01:49
¿Por qué te has dado cuenta
00:01:50
Tan rápido?
00:01:53
Quería que se vea en la ejecución
00:01:54
¿Vale? Efectivamente, efectivamente
00:01:56
Lo he puesto así a propósito porque así no lo haríamos
00:01:58
¿Vale? Pero bueno, olvidaos de esta línea por ahora
00:02:00
Olvidaos de esta línea
00:02:03
Por ahora
00:02:05
Vamos a esta
00:02:05
¿Vale? Olvidaos de esta línea por ahora
00:02:07
Vamos a esta
00:02:09
Ahora mismo
00:02:11
Ahora vámonos al system out por ahora
00:02:12
La opción 2
00:02:14
Mostrar el listado de clientes
00:02:17
Que se supone que está en el array
00:02:19
Vale
00:02:21
Vámonos a mostrar el cliente
00:02:22
Cliente es una caja
00:02:27
Con varias cosas dentro
00:02:29
Entonces al system out
00:02:31
Yo no le paso
00:02:33
la caja, ¿qué le pasas?
00:02:35
le pasas el nombre, le pasas, pero claro
00:02:37
ahora es donde sabemos
00:02:39
oye, ¿qué pasa? que C
00:02:41
tenía un método maravilloso
00:02:43
cliente, que era tu string
00:02:45
que me lo convierte a una cadena
00:02:46
pues, magnífico
00:02:49
llamo a tu string y le paso esa cadena
00:02:51
pero es que todavía
00:02:53
más apañado
00:02:55
si yo le paso un objeto
00:02:56
al system out, le paso un objeto
00:02:58
sin más, sin este tu string
00:03:01
le paso el objeto
00:03:03
el system out este
00:03:04
al ver que no es stream
00:03:06
él ya automáticamente llama a tu stream
00:03:07
porque asume que tú tienes ese método
00:03:10
de ahí la importancia
00:03:12
de hacer el método tu stream
00:03:15
porque quienes nos usen, sean los que sean
00:03:16
por ejemplo el SISO este
00:03:18
quienes nos usen, van a asumir
00:03:20
que lo tenemos y si lo necesitan
00:03:22
lo van a llamar
00:03:25
pues el SISO lo necesita
00:03:26
porque el SISO solo es capaz de mostrar cadenas
00:03:28
solo, entonces si yo le paso
00:03:30
algo que no sea una cadena
00:03:32
él, ah, no pasa nada, te llamo al toString
00:03:33
y da por asumido
00:03:36
que lo tenemos
00:03:38
entonces
00:03:40
hace falta que le pase el toString
00:03:41
no hace falta
00:03:45
que se lo pase
00:03:45
porque el System.out.println cuando ve
00:03:49
que le pasó algo que no es cadena
00:03:52
él ya llama al toString
00:03:54
solito, da por sentado que lo tenemos
00:03:56
¿vale?
00:03:58
con lo cual, esa es la importancia
00:04:00
de tener ese método
00:04:02
y no solamente el System.out
00:04:03
va a llamar alto stream, cualquier otro método
00:04:05
que haya por ahí, que nos use
00:04:08
y necesite que seamos cadena
00:04:09
lo va a llamar, va a dar por hecho
00:04:11
que lo tenemos
00:04:13
vale, lo vamos a poner
00:04:15
aquí como comentario
00:04:18
entonces me podríais decir
00:04:18
oye, pero y si yo no he hecho
00:04:36
alto stream, porque no es obligatorio
00:04:38
si yo no lo he hecho
00:04:40
¿qué pasa?
00:04:41
si yo no lo he hecho
00:04:44
el compilador sin ningún problema
00:04:45
pero a la hora de ejecutarle
00:04:48
el toString que se va a llamar
00:04:50
es un toString por defecto
00:04:52
que muestra unas cosas muy raras
00:04:54
entonces el toString por defecto
00:04:56
si yo no hago un toString
00:04:59
hay uno por defecto
00:05:00
pero que muestra unas cosas muy raras
00:05:02
entonces el por defecto no lo queremos
00:05:04
por eso hacemos uno específico bonito
00:05:06
¿vale?
00:05:08
hacemos uno específico bonito para no usar
00:05:10
para que no use el por defecto
00:05:12
la clase que sea
00:05:14
Entonces lo ponemos aquí
00:05:16
Si no hubiéramos hecho un toString
00:05:22
Si no hubiéramos
00:05:24
Hecho un toString
00:05:28
Nosotros
00:05:32
Si no lo hubiéramos hecho
00:05:33
Se llamaría a uno por defecto
00:05:36
Pero este por defecto
00:05:41
Muestra unas cosas muy raras
00:05:46
Y no nos interesa
00:05:47
Por eso hacemos uno y listo
00:05:48
Vale, y ahora ya sí
00:05:52
Vamos a lo que habéis apuntado
00:05:53
El forEach
00:05:56
aquí es muy mala elección
00:05:57
porque el for each ya sabemos que te recorre
00:05:58
la raya entero de principio a fin
00:06:01
entero, no puedes parar antes
00:06:03
y nosotros no queremos
00:06:05
recorrer la raya entero
00:06:07
queremos recorrer
00:06:09
solo hasta la posición
00:06:11
que esté rellena
00:06:13
porque la raíz son 100, yo lo he instanciado como 100
00:06:14
con lo cual este for each
00:06:17
de aquí
00:06:19
se va a ejecutar 100 veces
00:06:20
si solo tengo uno, me va a mostrar
00:06:23
99 nul
00:06:25
Entonces yo aquí
00:06:26
El for each es una elección muy mala
00:06:28
Vamos a hacer un for de índice
00:06:30
Y digo yo
00:06:32
¿Dónde me quedo?
00:06:34
Pues empezando por la 0
00:06:38
Mientras
00:06:40
Y sea menor que qué
00:06:42
¿Qué pondríamos?
00:06:44
Esta, que es la que me dice
00:06:51
¿Cuántos realmente tengo rellenos?
00:06:53
Esta variable
00:06:58
es la que me dice cuantos tengo rellenos
00:06:59
cuando la siguiente posición libre es 0
00:07:01
es porque no tengo ninguno
00:07:05
no hay lista de clientes
00:07:06
cuando es 1
00:07:09
cuando la siguiente a rellenar es 1
00:07:11
es porque tengo un cliente
00:07:14
el de la 0
00:07:16
cuando la siguiente posición a rellenar es la 2
00:07:16
es porque tengo dos clientes
00:07:19
el 0 y el 1
00:07:21
luego siguiente posición libre me sirve
00:07:21
como contador de posiciones
00:07:25
que están rellenas
00:07:27
Esta variable nos sirve
00:07:28
Porque lo es, realmente lo es
00:07:35
Como contador
00:07:37
De posiciones que se han rellenado
00:07:38
Realmente
00:07:42
Vale, pues
00:07:43
Por el hecho
00:07:56
De que el array
00:07:58
Necesita fijar una posición al principio
00:08:01
Hemos tenido que usar esta variable
00:08:03
Adicional, no nos queda otra
00:08:05
Vale
00:08:07
Aquí tengo un error de compilación por ahí
00:08:09
Que aquí lógicamente
00:08:11
no es c, sino que es clientes
00:08:14
de id
00:08:16
y este va a llamar alto string
00:08:17
vale, aquí ya podríamos hacer
00:08:20
deberíamos hacer la primera prueba
00:08:26
a ver si al menos la funcionalidad
00:08:28
de registrar clientes la hace correctamente
00:08:30
aunque aquí
00:08:32
voy a tener el problema de que después
00:08:34
del next ir al hacer next line
00:08:36
se va, entonces
00:08:38
necesito aquí esto
00:08:40
porque si no se queda el salto de línea
00:08:42
que va a coger el salto de línea con el nif
00:08:47
No me va a dejar meter el NIF, etc
00:08:49
Vale
00:08:51
Pues probad a hacer la primera
00:08:57
Prueba
00:08:58
Venga, registrar
00:09:00
Vamos a mostrar el listado de clientes
00:09:04
Antes de nada, nada, el listado de clientes no me muestra nada
00:09:07
No me muestra nada, no tengo clientes
00:09:10
Vamos a registrar uno
00:09:12
Nombre
00:09:13
1111
00:09:15
NIF 1111
00:09:16
Nombre
00:09:18
Nombre 1
00:09:20
Cliente registrado, suponemos
00:09:22
Vamos a ver ahora el listado
00:09:25
Aquí algo hemos hecho mal
00:09:27
Dispedidos is null
00:09:30
Vale
00:09:34
En la clase cliente
00:09:35
He puesto el atributo
00:09:50
¿Cuál?
00:09:51
Sí, a todos
00:09:53
Vale, entonces ahora
00:09:54
Vamos a ver, ahora vamos a
00:09:56
desentrañar una traza de error, que es una
00:09:58
de nuestras tareas más importantes, la que
00:10:00
vamos a hacer, vais a
00:10:02
hacer todo el rato, uy
00:10:04
porque me ha salido error, yo no
00:10:06
tenía en mente que aquí fallara algo, aparentemente
00:10:08
lo hemos hecho todo bien, importantísimo
00:10:10
vamos a ver que nos dice
00:10:13
null pointer exception
00:10:14
error básico
00:10:16
que significa null pointer exception
00:10:18
significa que yo estoy
00:10:20
tratando de entrar en un objeto
00:10:22
que es null, que pasa
00:10:24
continuamente, intentar entrar en un objeto
00:10:26
que es null, vale, hay un objeto
00:10:28
ahí que estoy haciendo, ese objeto
00:10:30
punto algo, ese es el problema, ¿no? del null pointer
00:10:32
exception, yo a un objeto le hago
00:10:34
punto lo que sea
00:10:36
y si ese objeto es null
00:10:38
el punto lo que sea me va a decir null pointer
00:10:39
exception, vale, vamos a ver
00:10:42
que más detalles me da
00:10:44
me dice, no puedo
00:10:45
leer, this pedidos
00:10:47
is null
00:10:50
vale, efectivamente
00:10:51
el cliente tiene
00:10:53
un array de pedidos null
00:10:56
pero yo he accedido a pedidos en algún momento
00:10:57
debe ser que sí
00:11:00
vamos a ver
00:11:02
claro, vamos a ver
00:11:03
en la traza donde me lleva, pues nosotros
00:11:05
bajamos hasta aquí, hasta llegar
00:11:08
a la primera clase que es nuestra
00:11:10
que en este caso es esta, cliente Java
00:11:11
pues justo, cuando
00:11:13
el system out ha llamado al toString
00:11:16
ha intentado hacer un
00:11:18
pedidos.length
00:11:20
y pedidos es null
00:11:22
luego aquí ha salido el error
00:11:23
entonces este toString
00:11:26
no está bien, porque si el objeto
00:11:27
pedidos es null
00:11:30
aquí va a salir null pointer exception
00:11:31
entonces aquí
00:11:34
pues tendríamos que tocarlo
00:11:36
para que el número de pedidos
00:11:38
pues
00:11:40
depende, ¿con qué lo vamos a concatenar?
00:11:41
depende, si es 0 con 0, o sea si pedidos
00:11:43
es null, le vamos a poner aquí
00:11:46
directamente un ternario
00:11:48
si pedidos
00:11:49
es igual a null
00:11:51
entonces concaténamelo
00:11:53
Con cero
00:11:56
Y si no, concatenamelo
00:11:57
Con
00:12:00
Pedidos.length
00:12:01
Vale
00:12:04
No me deja concatenar directamente con el ternario
00:12:06
Ahí
00:12:08
Pero si lo pongo todo en paréntesis
00:12:08
Ya igual sí
00:12:12
A ver, sí, vale
00:12:13
Vale
00:12:16
Pues he cambiado el pedidos.length
00:12:18
Que lo tenía así a capón
00:12:20
Lo he cambiado por esto
00:12:22
que es jugar con el ternario
00:12:24
que sabemos hacerlo
00:12:27
lo he cambiado, hoy es null
00:12:28
entonces plántame 0
00:12:30
si es null no me hagas pedidos.led
00:12:32
número de pedido 0
00:12:34
y si no es null
00:12:37
entonces ya sí que plántame pedidos.led
00:12:38
ahora ya
00:12:40
ese null pointer exception
00:12:42
vale, entonces aquí lo que
00:12:44
concatenamos, con lo que concatenamos
00:12:50
que está entre estos paréntesis
00:12:52
lo que concatenamos, pues depende
00:12:54
concateno con esto o concateno con esto
00:12:56
dependiendo de esa condición
00:12:58
vale, concateno con esto
00:13:00
o con esto, ahí está metidito dentro de la
00:13:02
concatenación, o con esto
00:13:04
o con esto, depende
00:13:07
vale, entonces se usa mucho este
00:13:08
este operador
00:13:12
ternario, porque yo tengo que usar
00:13:15
un valor y a veces ese valor
00:13:16
o uso una versión o uso otra en función
00:13:18
de una condición, no pasa nada
00:13:20
lo pongo así, vale, vamos a
00:13:23
volver a ejecutar el main
00:13:25
este. Registramos
00:13:26
cliente.
00:13:33
Nombre 1.
00:13:36
Vale, registrado. Listado de clientes.
00:13:37
Ahora ya sí.
00:13:40
Cliente, nombre 1,
00:13:42
número de pedidos 0.
00:13:43
El tuestrín ha quedado un poco feo porque se ha quedado muy
00:13:45
concatenado el nombre con número de pedidos.
00:13:47
Luego le vamos a poner aquí
00:13:50
el espacio.
00:13:51
Número pedidos.
00:13:53
Antes de cerrar esta versión, vamos a
00:13:57
insertar otro para hacer una prueba un poco más
00:14:00
completa. Vamos a registrar otro cliente más.
00:14:02
Dos con nombre
00:14:04
Dos
00:14:06
Listado de clientes, pues aquí están los dos
00:14:07
Ambos con número de pedidos
00:14:12
Cero
00:14:14
Salir
00:14:15
Bueno, pues vale
00:14:17
La primera parte, lo que hemos hecho funciona
00:14:26
Como veis está bien
00:14:31
Haciendo pruebas
00:14:32
De forma progresiva
00:14:33
Para no acumular errores
00:14:36
Aquí ya hemos depurado un primer error
00:14:39
Que se nos había escapado
00:14:41
el del toString
00:14:42
entonces si vamos incorporando, hacemos un programa así
00:14:43
y pasamos las pruebas cuando ya lo tenemos
00:14:46
todo, pues salen ahí
00:14:48
un montón de errores que va a ser mucho más complicado
00:14:50
de depurar, vale, esta parte ya está
00:14:52
venga, vamos a hacer
00:14:54
siguiente funcionalidad
00:14:56
que sería evidente que va a necesitar
00:14:58
esta persona, que es
00:15:00
agregar un pedido a un cliente
00:15:01
pues vamos a la opción
00:15:05
3
00:15:14
Pedido a un cliente, él ha venido a la tienda o lo ha hecho por internet o por lo que sea
00:15:18
Y a mí me toca a ese cliente meterle el pedido en su lista de pedidos
00:15:30
Me toca eso, agregar pedido a cliente
00:15:35
Pues venga, caso 3
00:15:38
A ver, ¿qué datos va a necesitar?
00:15:40
Los datos del pedido
00:15:51
Los datos del pedido que son la descripción y el precio
00:15:53
¿por qué? porque el código
00:16:02
no lo da el que compra
00:16:05
cuando vos compráis algo
00:16:07
quiero esto y no sé qué
00:16:09
vale, y voy a pagar esto, esos datos son
00:16:11
vuestros, pero el código
00:16:13
se supone que
00:16:16
es un dato interno que le genera la aplicación
00:16:17
para luego tener ubicados los pedidos
00:16:19
o lo que sea
00:16:21
entonces pues vamos a hacerlo así
00:16:22
entonces
00:16:24
vamos a generar códigos
00:16:26
únicos para los pedidos
00:16:29
Una variable interna de la aplicación
00:16:31
Que genera códigos únicos
00:16:35
Los datos que vienen de fuera realmente
00:16:36
Son la descripción y el precio
00:16:38
Son los que vienen de fuera
00:16:40
El código no debería venir de fuera
00:16:41
Porque el que lo mete
00:16:44
No sabe si ese código ya existió o no
00:16:45
A lo mejor mete uno que ya está usado
00:16:48
Y los códigos deberían ser únicos por definición
00:16:50
Como las claves primarias de las tablas
00:16:52
Entonces vamos a hacerlo bien
00:16:55
Que la información de fuera
00:16:57
Sea solo, descripción y precio
00:16:59
Pues vamos a pedir la información de fuera
00:17:01
Venga
00:17:04
Descripción de lo que quieres
00:17:08
Descripción del pedido
00:17:10
Descripción
00:17:12
Next line
00:17:21
Y
00:17:28
El precio
00:17:32
Vale, el precio
00:17:33
Pues bueno
00:17:51
Vale, ya tenemos
00:17:51
Dos datos para instanciar el pedido
00:18:04
Pero al pedido hay que ponerle
00:18:05
Un código
00:18:08
Pues vamos a generar el código internamente para que sea único
00:18:08
Bueno, pues esto se nos ocurriría hacerlo de mil maneras
00:18:13
Vamos a usar una variable que empieza siendo cero
00:18:30
Usamos esa variable como código y la dejamos incrementada, por ejemplo, y ya está
00:18:33
Y así la aplicación se asegura de que los códigos de los pedidos son únicos
00:18:37
Pues venga, vamos a usar una variable cualquiera
00:18:42
Por aquí
00:18:45
Inicialmente es 0
00:18:54
Y ahora
00:18:59
Ahora ya me voy a crear el pedido
00:19:01
Pues mi pedido va a ser
00:19:03
Pedido va a ser igual
00:19:05
A new
00:19:10
Pedido con los tres datos
00:19:11
Descripción
00:19:13
No sé en qué orden iban en el constructor
00:19:15
En el constructor iban en orden
00:19:17
Código, descripción y precio
00:19:20
Pues vamos a pasarlo en ese orden
00:19:22
Lógicamente
00:19:24
Código
00:19:25
Código, como lo he llamado, código pet directamente
00:19:27
Código
00:19:34
Descripción
00:19:36
Y precio
00:19:37
Tengo que importar pedido o usar
00:19:39
Su nombre completo, ejer22.model
00:19:44
Hombre, usar el nombre
00:19:47
Completo, un rollo
00:19:48
Casi mejor
00:19:49
Hago el import
00:19:52
Arriba, deger22modelpedido
00:19:54
Vale, tengo el pedido creado
00:19:57
Pero ojo, código de pedido
00:20:01
Se tiene que quedar incrementado
00:20:03
Para que el siguiente pedido que hagamos
00:20:05
Tenga código único
00:20:07
Bueno, pues incrementémoslo aquí mismo
00:20:08
Y ya está, y así no usamos una línea adicional
00:20:11
¿Vale? Código de pedido
00:20:13
Se queda incrementado
00:20:17
Para que el siguiente código
00:20:18
Sea distinto
00:20:20
Y ahora, ¿qué nos toca?
00:20:21
Pues nos toca
00:20:26
a qué cliente es el que tiene este pedido.
00:20:27
Porque habrá que meter este pedido
00:20:33
en el array de pedidos del cliente.
00:20:34
Luego, la siguiente información que necesitamos.
00:20:38
¿Qué cliente es?
00:20:40
¿Qué identificaría de forma única al cliente?
00:20:43
El NIF.
00:20:47
Entonces, eso es lo que tenemos que pedir.
00:20:48
¿Cuál es el NIF?
00:20:49
Si la aplicación...
00:20:51
No estamos verificando,
00:20:52
cada vez que se registra un cliente,
00:20:53
No estamos verificando que el NIF no esté repetido,
00:20:55
pues para no complicar la aplicación.
00:20:58
Pero, hombre, se debería verificar.
00:21:00
Cuando vendimos un NIF,
00:21:03
deberíamos hacer una búsqueda en el array
00:21:04
para ver si ya existe.
00:21:05
Y si ya existe, decir el NIF ya está registrado.
00:21:07
Por ahora, emitimos esa parte.
00:21:10
Asumimos que el NIF es único,
00:21:11
que debería ser único en el array de clientes.
00:21:13
Luego, es lo único que tenemos que pedir.
00:21:15
El NIF, para identificar al cliente.
00:21:18
NIF del cliente.
00:21:25
Pues venga.
00:21:27
NIF del cliente
00:21:28
Y ahora
00:21:33
Pues que tenemos que hacer
00:21:43
Recorrer el array de clientes
00:21:45
Cuando encontremos el cliente
00:21:48
Con este NIF
00:21:50
Agregarle a su array
00:21:51
Este pedido
00:21:54
En el caso 3, tenemos el pedido y el precio.
00:22:17
¿Qué caso 3? ¿En la T?
00:22:32
Sí, en el caso 3.
00:22:35
¿Mostrar clientes con más pedidos a dónde han llegado por el producto o por las descompras pedidas?
00:22:37
Gracias.
00:22:42
Seguimos
00:23:12
Si yo lo tengo aquí también
00:23:27
Y para algunas cosas de sprint
00:23:31
Pues a veces lo uso porque lo integra muy rápido
00:23:34
Pero
00:23:37
Venga, a ver, vamos a completarlo
00:23:37
Vale
00:23:44
¿Dónde estamos?
00:23:46
Lo de los escáneres, ahora revisamos
00:23:48
Porque efectivamente algún escáner
00:23:50
Ahí nos va a dar la murga
00:23:52
Ahora, vamos a recorrer
00:23:54
El array de clientes hasta encontrar
00:23:57
El bueno
00:23:58
Un for each, de nuevo no
00:23:59
Un for de índice porque tenemos que quedarnos
00:24:04
En el
00:24:06
Siguiente
00:24:07
Posición libre
00:24:09
¿Vale? Ahora ya
00:24:12
Si
00:24:18
clientes
00:24:18
de i
00:24:22
punto get
00:24:24
nif
00:24:26
es igual, con un equals
00:24:28
no con doble igual
00:24:30
porque estamos hablando de string
00:24:32
es igual a mi nif de búsqueda
00:24:34
a mi nif de búsqueda
00:24:37
aquí es donde tengo que agregar
00:24:38
pedido
00:24:41
p a client
00:24:44
claro, aquí podría hacer
00:24:48
todo el código correspondiente
00:24:54
pero esto ya empezaría a hacerse un caso 3
00:24:55
un poco largo y feo
00:24:59
ya de hecho bastante largo es
00:25:01
hombre, ya que tengo la clase cliente
00:25:02
y agregar pedido a cliente
00:25:06
es algo que se hace en el cliente para el cliente
00:25:08
es algo que sufre la acción de agregar pedido
00:25:12
la recibe el cliente, como él es el que recibe la acción
00:25:15
que menos que hacerle un método en la clase cliente
00:25:18
que sea agregar pedido
00:25:21
entonces todas las funcionalidades
00:25:22
que modifiquen
00:25:25
actúen, tengan su efecto
00:25:27
sobre objetos de una clase
00:25:29
pues metámoslas en
00:25:31
métodos de esa clase
00:25:33
de su sitio, porque si nos ponemos a hacerlo
00:25:34
aquí todo, al final esta
00:25:37
pronunciación de cada objeto se ha quedado muy descafeinada
00:25:39
descafeinada, ¿vale? pues repito
00:25:41
agregar un pedido
00:25:43
P a un cliente
00:25:45
es algo que afecta al objeto cliente
00:25:47
es algo que le va a modificar
00:25:49
va a modificar su array de pedidos
00:25:50
pues hombre, hagamos un método en la clase cliente que lo haga
00:25:52
y desde aquí llamamos al método
00:25:56
es decir, si tuviéramos
00:25:58
un método maravilloso
00:26:02
que si lo llama un objeto cliente
00:26:05
pasándole yo mi pedido
00:26:07
se lo agregara, si yo tuviera este método estupendo
00:26:12
fijaos que fácil
00:26:16
ojalá yo tuviera un método al que puede llamar
00:26:18
un objeto cliente, en este caso
00:26:22
clientes de i, porque clientes
00:26:24
de i es un objeto cliente,
00:26:26
a este método le pasara
00:26:28
yo el pedido nuevo
00:26:30
y este método ya, cogiera el pedido,
00:26:31
lo metía en el array,
00:26:34
estaría estupendo, ¿verdad?
00:26:36
Ojalá lo tuviera.
00:26:38
Porque entonces ya mi código estaría terminado.
00:26:40
Pondría,
00:26:44
¿vale?
00:26:45
Vale, pues vamos a hacer este método.
00:26:48
Vamos a hacer este método que me sería tan útil.
00:26:50
¿Este método dónde va? A la clase cliente, porque lo va a llamar un objeto cliente, a la clase cliente, pues vámonos a hacer en la clase cliente un método public para poder ser llamado desde fuera, no hace falta que me devuelva nada, porque el efecto lo sufre ya el array de arriba, este array es el que sufre el efecto,
00:26:52
el método se llama agregar
00:27:14
pedido y que va a recibir
00:27:20
un objeto pedido
00:27:23
eso es lo que va a recibir
00:27:25
un objeto pedido
00:27:27
este p de aquí
00:27:28
pues entonces
00:27:29
aquí tendré que poner
00:27:31
esto
00:27:34
dime
00:27:35
en la opción 1
00:27:37
si pero por eso
00:27:39
he dicho que vamos a hacer una aplicación
00:27:43
la vamos a hacer entera a nuestra manera
00:27:44
saliéndonos del ejercicio, ¿vale?
00:27:46
Olvídate de denunciado.
00:27:49
Porque así le vamos a dar un poco más de sentido.
00:27:51
Vamos a ir metiendo cosas. Vamos a hacer una aplicación de clientes
00:27:52
pedido como más general con más cosas.
00:27:55
Y así la podemos usar
00:27:57
para aprender más cositas.
00:27:58
Vale, pues estupendo
00:28:03
que tengamos este método. Bueno, hay que
00:28:04
hacer el código. No se lo hemos hecho, claro.
00:28:06
Que yo le paso un objeto pedido
00:28:08
y me lo mete en el array de este objeto.
00:28:10
Estupendo.
00:28:14
Ese método
00:28:16
estará aquí colocado.
00:28:16
Estará ahí
00:28:18
¿Vale?
00:28:19
Ahí
00:28:23
¿Vale? Pues que tiene que hacer este
00:28:23
Este no es tan sencillo
00:28:25
Porque este array
00:28:27
¿Qué tendré que hacer?
00:28:30
Romperlo
00:28:34
Y hacer un auxiliar con una posición más
00:28:34
Meter el pedido
00:28:36
Y sustituir uno por otro
00:28:38
Lo que hicimos en el pasado
00:28:39
Cuando queríamos simular un array que se hiciera grande
00:28:40
Para coger un valor nuevo
00:28:43
Lo que hicimos en el pasado
00:28:45
Pues eso lo metemos aquí en este método
00:28:47
Que bien que va a ir aquí escondido
00:28:49
Y el main le va a dar igual
00:28:51
El main va a hacer agregar pedido
00:28:54
Y le va a dar igual
00:28:56
Que bien que va a ir escondido aquí
00:28:56
Pues venga
00:28:58
Vamos a hacer una array auxiliar
00:29:00
De pedidos
00:29:02
Una array auxiliar de pedidos
00:29:09
Esto ya lo hicimos cuando hicimos arrays
00:29:13
Que sea un nuevo array
00:29:14
De pedido
00:29:17
Con una posición más
00:29:18
Que el que tiene el actual
00:29:22
Pedidos.length
00:29:24
Más 1
00:29:26
Pedido
00:29:27
Esto, vale
00:29:32
En la radio auxiliar
00:29:35
Copiamos el viejo
00:29:36
Que es el de aquí arriba
00:29:38
En el nuevo
00:29:41
Y sustituimos
00:29:42
Pues venga, vamos a copiar
00:29:43
Pues copiamos
00:29:46
aux de i
00:30:00
Igual a
00:30:01
Pedidos de i
00:30:04
vale
00:30:06
y ahora
00:30:08
la posición extra
00:30:10
es la que se ha quedado libre
00:30:12
pues en la posición extra va P
00:30:14
pues la posición esta
00:30:16
es la última del aus
00:30:18
que es esta
00:30:20
esta es la posición extra
00:30:21
que es la última
00:30:25
pues en la posición extra va el P
00:30:26
el nuevo
00:30:30
y ahora ya sustituimos
00:30:30
la propiedad pedidos
00:30:36
la dejamos pisada
00:30:37
por la nueva
00:30:38
Por el nuevo array, por aux
00:30:41
Sí
00:30:42
Dime
00:30:43
Pedidos
00:31:08
¿Qué variable es?
00:31:10
Pedidos, la propiedad pedidos
00:31:12
Del objeto cliente en el que estamos
00:31:14
Sus pedidos actuales
00:31:16
Vale, no me hacéis ningún comentario
00:31:18
Sobre este código
00:31:21
Algo que os suena que pueda fallar
00:31:22
Cuando le metamos
00:31:24
El primero de todos
00:31:29
Porque cuando le metamos el primero
00:31:30
Pedidos es null
00:31:33
Entonces cuando le metamos el primero
00:31:35
En ese momento pedidos es null
00:31:38
Luego al hacer aquí pedidos.led null pointer exception
00:31:39
Vamos a arreglar esto de forma fácil
00:31:42
Si pedidos
00:31:44
Es
00:31:46
Igual a null
00:31:47
Entonces
00:31:48
Si pedidos es igual a null
00:31:50
Habrá que hacer pedidos con una posición
00:31:53
Pedidos
00:31:55
Le creamos el espacio
00:31:58
new pedido
00:31:59
de una posición solo
00:32:01
el nuevo que vamos a meter
00:32:04
y pedidos de 0
00:32:05
igual a p
00:32:08
y si no
00:32:09
ya hacemos todo lo demás
00:32:12
un arreglito rápido para eso
00:32:14
si, si, si, ahora lo dejo
00:32:16
todo puesto
00:32:18
un momentito
00:32:20
¿por qué?
00:32:22
el auxiliar
00:32:29
como tiene uno de más, el pedido si
00:32:30
va a llegar en la última
00:32:32
y te va a dar error en internet
00:32:34
no, porque el for está solo en pedidos.led
00:32:36
no en aux.led
00:32:38
ah, cierto
00:32:39
porque ese array
00:32:41
tiene ya su tamaño fijo
00:32:51
ese array ya no te vale
00:32:52
tienes que hacer uno nuevo
00:32:53
ese no se le puede crear una posición adicional
00:32:56
ese es una caja de 7
00:32:59
y va a tener siempre 7
00:33:00
si tú quieres meter una octava botella
00:33:02
tienes que comprarte
00:33:04
una caja de 8
00:33:06
y tirar la de 7
00:33:07
porque en esa de 7 no puedes poner
00:33:09
una posición más, no se puede
00:33:11
el auxiliar tiene una posición más
00:33:13
que pedidos
00:33:19
a pedidos
00:33:20
recorro hasta donde tiene
00:33:23
aux tiene una más
00:33:24
en la extra pongo p
00:33:26
y ahora a pedidos lo pisoteo por el nuevo array
00:33:28
pero sigue teniendo la misma longitud
00:33:31
no, tiene una más
00:33:33
pedidos contundentes más 1
00:33:35
Ya, pero es que Pedidos ya se ha ido a la basura
00:33:37
Pedidos ya se ha quedado sin referencia
00:33:39
Ya se desaparecerá
00:33:41
Es decir, lo que hemos hecho es lo siguiente
00:33:42
Ah, vale, vale
00:33:45
Claro, lo que hemos hecho es
00:33:46
Por si alguien no lo entiende, esto es lo que vimos con Arrays
00:33:54
Yo tengo mi
00:33:56
Array, por ejemplo
00:33:58
Imaginaos de tres posiciones
00:34:02
Y quiero meter un cuarto
00:34:03
Este cuarto ahí, imposible
00:34:05
Pues entonces, este es Pedidos
00:34:07
me hago aux
00:34:10
que tiene 4
00:34:12
una más
00:34:14
vale, con este for de aquí
00:34:16
copio esto en esto, copio esto
00:34:18
en esto, copio esto en esto
00:34:20
¿qué hago con el nuevo? el nuevo aquí
00:34:21
vale, ahora este array
00:34:24
p, este es el array p
00:34:26
y este es el array aux, que apunta aquí
00:34:29
pues ahora ¿qué estoy haciendo con esta sentencia?
00:34:31
estoy haciendo que
00:34:34
pedidos p, deje
00:34:35
de apuntar al viejo
00:34:37
deje de apuntar al viejo y empiece a apuntar a este
00:34:39
es lo que estoy haciendo con esta sentencia
00:34:42
hacer que la referencia pedidos
00:34:44
deje de apuntar a este array que ya no lo quiero
00:34:47
y empiece a apuntar a este
00:34:49
luego ahora pedidos se ha convertido en una referencia al bueno
00:34:51
y ya está, y ya se queda
00:34:56
pedidos con el bueno
00:34:59
y este que le ha pasado
00:35:00
este no es que haya desaparecido, ese sigue ahí en memoria
00:35:02
pero se ha quedado sin nadie que lo apunte
00:35:06
ahí ya no hay nadie que le esté apuntando
00:35:08
porque el único que le apuntaba, que era este
00:35:10
ha pasado a apuntar a este otro
00:35:12
entonces si nadie le mira
00:35:14
desaparece
00:35:17
el recolector de basura, que es un proceso
00:35:18
que aparece cada cierto tiempo en background
00:35:20
va eliminando
00:35:22
todo lo que se ha quedado
00:35:24
sin nadie que le apunte
00:35:27
este, el único
00:35:28
que le apuntaba era este, que empezó
00:35:31
a apuntar a este otro
00:35:32
este se ha quedado ahí sin nadie que le apunta
00:35:33
pues entonces, ala
00:35:36
Ese, el recolector de basura
00:35:38
Lo tira a la basura
00:35:41
Para hacer dos milisegundos
00:35:42
Y ahora ya, ¿qué se me ha quedado?
00:35:43
Se me ha quedado este array ya bueno
00:35:46
Con pedidos apuntándole
00:35:47
Y aux también le está apuntando
00:35:49
Pero no pasa nada
00:35:52
Porque aux, como es una variable local
00:35:53
Va a desaparecer
00:35:55
¿Y dónde le hemos dado el tamaño?
00:35:56
Aquí
00:36:00
Ah, dices al original
00:36:01
Tendrá el que tenga
00:36:03
En el main
00:36:05
La primera vez que insertemos un pedido
00:36:06
la primera vez entrará por aquí porque es nul
00:36:09
pues aquí le daremos su primer tamaño que es 1
00:36:12
¿vale?
00:36:14
o sea, con el primer pedido que insertemos
00:36:16
con el primer pedido entraremos por aquí
00:36:18
por el nul, porque será nul
00:36:20
con el primero, y aquí le daremos
00:36:22
su primer tamaño que es 1
00:36:24
pero ya las siguientes veces
00:36:25
irá creciendo a 2, y luego a 3
00:36:28
y luego a 4
00:36:30
claro, habría
00:36:31
habido otra posibilidad, pero ya sería como
00:36:38
ocupar demasiada memoria, que es
00:36:40
crear para todos los clientes
00:36:42
una array de pedidos de 50
00:36:44
asumiendo que nunca va a tener
00:36:46
más de 50, pero habría sido
00:36:48
muy rollo, porque dentro de la clase cliente
00:36:50
habría que haber puesto una variable
00:36:53
adicional que dijera hasta cuántos
00:36:55
pedidos hay, entonces ya
00:36:57
vale, entonces
00:36:59
ahora ya este método
00:37:04
tiene toda esta complejidad
00:37:06
que es un rollo, pero el main le viene
00:37:08
fenomenal, el main llama a agregar
00:37:10
pedido y se acabó, dime
00:37:12
Y ahora podemos poner
00:37:14
Pues eso, este método tiene aquí
00:37:17
Es un rollo de método
00:37:21
Pero ahí se queda escondido
00:37:22
Ahora el main llama a agregar pedido
00:37:24
Y ya sabe, no sabe cómo lo hace
00:37:27
Y le da igual
00:37:29
Sabe que este pedido se mete a la raíz de clientes
00:37:31
Y ahora ya podemos completar aquí
00:37:34
Pedido agregado
00:37:37
Y listo
00:37:39
¿Vale?
00:37:55
Uy, me he puesto esto
00:37:56
Vale, pedido agregado y ya está
00:37:59
Vale, todo esto tiene miles de mejoras
00:38:03
Aunque nos vamos ya así
00:38:09
Pues que si encuentra el cliente
00:38:10
Yo querría
00:38:13
Dejar, abandonar el array
00:38:14
Y no seguirlo recorriendo
00:38:16
Pues un boolean que se ha encontrado
00:38:18
Y aquí añade el boolean
00:38:19
Luego un montón de arreglos, ¿vale?
00:38:20
Venga, paramos aquí
00:38:22
Vale
00:38:26
- 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:
- 4
- Fecha:
- 15 de diciembre de 2025 - 17:21
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 38′ 27″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 389.20 MBytes