Saltar navegación

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

Clase 23-01-24 - 3 - 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 23 de enero de 2024 por Raquel G.

5 visualizaciones

Descargar la transcripción

Vale, de que conviene no desconectar nunca y perder nunca de vista lo que está pasando debajo, 00:00:00
claro, lo que ocurre debajo. 00:00:07
Porque en muchas situaciones, pues no es que tengamos que tenerlo siempre presente, 00:00:08
pues ya si hacemos otra OJ y las cosas tiran y ya está. 00:00:12
Pero hay situaciones en las cuales las cosas no van como creemos que van 00:00:15
y lo vamos a acotar, vamos a encontrar la solución si entendemos lo que hay debajo, si no, no. 00:00:19
Entonces, todo esto venía a cuento de que esta línea, no penséis que está duplicando el objeto, 00:00:25
que no pasaría nada. 00:00:31
Pero hombre, sería una pérdida de memoria tonta, no está duplicando el objeto. 00:00:33
¿Aquí qué está pasando? 00:00:36
Nosotros tenemos, nos vamos al pain este estupendo. 00:00:37
Nosotros tenemos nuestro array de pedidos, 00:00:41
Joder, vaya mierda, a ver. 00:00:46
Este. 00:00:49
Tenemos nuestro array de pedidos, 00:00:51
pues los pedidos que sean. 00:00:54
Este es el array y cada uno de estos es un pedido, ¿vale? 00:00:56
Y ahora, ¿cada uno de estos qué es? 00:01:03
Del array, es un objeto pedido. 00:01:05
Luego, cada uno de estos, en realidad, ya sabemos que lo que realmente es, 00:01:08
es una dirección de memoria hacia el verdadero objeto pedido, 00:01:12
que tiene a su vez sus propiedades, las que sean. 00:01:17
Eso es lo que sabemos que hay, ¿verdad? 00:01:20
En cada posición del array, pedidos de i, pedidos de i, 00:01:23
en realidad es una dirección de memoria del verdadero objeto pedido con sus datos. 00:01:27
Ese es cada pedidos de i, ¿verdad? 00:01:32
Eso lo tenemos claro. 00:01:35
Cada pedidos de i es eso. 00:01:43
Cada pedidos de i es una dirección de memoria a donde sea. 00:01:45
Vale. 00:01:52
Bueno. 00:01:54
Esto es nuestra aplicación que ya se está ejecutando. 00:01:56
Cuando hay una aplicación en ejecución, cuando hay un main, ya hay cosas en memoria, ya hay cosas. 00:01:58
Pues es una de las que hay. 00:02:02
¿Qué más cosas hay en memoria de esta aplicación que estamos ejecutando? 00:02:04
Pues un array de clientes. 00:02:07
¿Vale? 00:02:09
Pues claro, tenemos nuestro array de clientes, que es este de aquí. 00:02:10
Nuestro array de clientes, pues con un montón de clientes. 00:02:16
En realidad, cada posición del array, cada clientes de i, 00:02:22
ya sabemos que es una dirección de memoria a donde ahora ya sí que está el cliente. 00:02:26
¿Vale? 00:02:33
Y el cliente, a su vez, tiene dentro su nombre, su nif. 00:02:36
Su nif, su nombre, su dirección. 00:02:46
Y el cliente, a su vez, tiene dentro un array. 00:02:49
Un array ya sabemos lo que es. 00:02:52
Es otro objeto. 00:02:54
Luego el cliente, a su vez, tiene una dirección donde está el array. 00:02:56
Y aquí están los pedidos del cliente. 00:03:02
¿Vale? 00:03:10
O sea, los pedidos del cliente son estos. 00:03:11
Estos son los pedidos del cliente, en realidad. 00:03:15
¿Vale? 00:03:19
Esta es la estructura que tenemos, ¿verdad? 00:03:20
El array de clientes. 00:03:22
Cada cliente, cada posición del array es una dirección de memoria a un cliente. 00:03:24
Cada cliente que tiene nombre, nif, dirección y a su vez un array. 00:03:28
Un array ya sabemos lo que es. 00:03:32
Un array en realidad es un objeto. 00:03:34
Luego un array es la dirección de memoria hacia el array. 00:03:36
Y ya el array tiene dentro los pedidos. 00:03:39
Que a su vez, como es un array de pedidos, pues cada uno de estos es la dirección de memoria, 00:03:42
ahora ya sí, de un pedido. 00:03:47
Cada uno de estos. 00:03:50
¿Vale? 00:03:51
Este ya es el pedido. 00:03:52
Este ya es el pedido. 00:03:55
Y claro, si quisiéramos seguir dibujando, que no vamos a hacerlo más, 00:03:57
a su vez una propiedad del pedido es un array de ítems. 00:04:01
Luego a su vez uno de estos es la dirección de memoria al array de ítems, 00:04:04
que son las direcciones de los ítems, y ahí ya se acaba el árbol. 00:04:08
Ahí ya no hay más. 00:04:10
Porque los ítems ya no tienen dentro objetos. 00:04:11
Tienen ya propiedades sencillas. 00:04:13
Esto es lo que hay. 00:04:15
¿Vale? 00:04:16
Entonces, ¿nosotros qué hacemos cuando le asignamos un pedido a un cliente? 00:04:17
Pues lo que hacemos es, a la dirección donde tiene, perdón, a la dirección esta, 00:04:21
al array este, al array este le incorporamos una dirección más, 00:04:31
que sea la dirección de uno de estos pedidos. 00:04:36
No es que estemos haciendo aparecer un pedido copia de este, 00:04:39
y ese pedido lo metamos en este array. 00:04:45
No, lo que estamos haciendo es, 00:04:48
hemos localizado el pedido, 00:04:50
imaginaos que es este, lo hemos localizado. 00:04:52
Vale, lo hemos localizado y a una variable auxiliar que está por aquí, 00:04:54
que es la que se llama pedidosincorporar, 00:04:58
a esta variable auxiliar, que es la que hemos llamado pedidoincorporar, 00:05:01
mediante esta sentencia, pedidoincorporar, igual pedidos de i, 00:05:08
que esta es la sentencia clave, 00:05:12
me di esta sentencia, en esta no estamos haciendo ninguna copia de este pedido, 00:05:14
no estamos haciendo ninguna copia, 00:05:19
lo que estamos es, a este dándole esta dirección de memoria, 00:05:21
luego a este le estamos haciendo que apunte también a ese pedido, 00:05:25
pero el pedido que existe es solo uno, 00:05:30
a este también va a apuntar ahí. 00:05:33
Vale, esto es lo que estamos haciendo con esta sentencia, 00:05:37
con esta, 00:05:40
con esta sentencia estamos haciendo que esto apunte también aquí, 00:05:41
vale, no estamos creando otro, un pedido copia idéntico a este, 00:05:46
no estamos creando un pedido copia idéntico a este, no, 00:05:51
estamos creándole otra referencia que la estamos guardando aquí 00:05:54
y ahora ya cuando localicemos el cliente, 00:05:58
pues en su array de pedidos, 00:06:01
¿qué hacemos? 00:06:03
Pues en su array de pedidos estaremos añadiendo, que es este, 00:06:04
en su array de pedidos estaremos añadiendo una posición más, 00:06:08
una posición más a la que le damos la dirección de pedido a incorporar, 00:06:12
luego se queda apuntando ahí. 00:06:17
Este pedido nuevo se va aquí. 00:06:28
Estos son los dos enlaces que estamos haciendo, 00:06:34
vale, intentad seguirme, 00:06:36
ya sé que es un rollo pero es importante, 00:06:38
vale, o sea con esta sentencia que es la clave, 00:06:41
esta de aquí, 00:06:45
hacemos esto, 00:06:48
a esta variable le damos como dirección esta misma, 00:06:49
luego se queda apuntando al pedido, al pedido que hay 00:06:53
y ahora localizamos cliente, 00:06:56
cuando lo hemos encontrado nos vamos a su array de pedidos 00:06:58
y a su array de pedidos le añadimos esto, 00:07:02
luego al añadirle esto que es una dirección de memoria, 00:07:06
lo que le estamos añadiendo es que apunte aquí, 00:07:08
eso es lo que estamos haciendo, 00:07:12
no es que estemos creando un objeto pedido, 00:07:14
copia de este para él, 00:07:16
no, simplemente al array de pedidos de este cliente 00:07:17
le metemos una posición más que empieza a apuntar a ese pedido, 00:07:20
no estamos creando nada nuevo, 00:07:24
simplemente hacemos esto. 00:07:26
Cuando hacemos esta sentencia de aquí, 00:07:28
cuando hacemos esta, 00:07:30
la de incorporar pedido cuando la hagamos ahí abajo, 00:07:32
dentro del método que ahora está vacía, 00:07:35
pues lo que estamos haciendo simplemente es 00:07:37
a este array de pedidos del cliente de ahí 00:07:40
que acabamos de encontrar, 00:07:42
a este array le añadiremos una posición 00:07:43
y le meteremos este 00:07:46
y al meterle este a la posición añadida, 00:07:48
¿qué estamos haciendo? 00:07:51
Pues ponerle esta dirección 00:07:52
y al ponerle esta dirección le hacemos que apunte aquí, 00:07:54
¿vale? 00:07:56
Eso es lo que está pasando por dentro. 00:07:57
Entonces conviene entenderlo bien, 00:07:59
porque hay veces que en función de las cosas que uno haga 00:08:00
en realidad no está haciendo esto, 00:08:03
sino que está haciendo una copia, 00:08:05
luego modifica esto 00:08:07
y no se modifica la copia, claro, 00:08:08
y la aplicación no funcione, 00:08:10
pero si yo he guardado 00:08:11
y no se me guardan los datos, 00:08:13
¿qué está ocurriendo? 00:08:15
No está ocurriendo nada, 00:08:16
simplemente que a lo mejor no estás entendiendo 00:08:17
esto que estás haciendo de fondo, 00:08:19
estás trabajando con una copia, 00:08:20
estás modificando esto 00:08:22
y entonces la copia no. 00:08:24
Bueno, por este tipo de cosas que ocurren en las aplicaciones 00:08:25
conviene entender bien exactamente 00:08:28
qué se hace cuando se hacen asignaciones de objetos, 00:08:31
porque no olvidéis, 00:08:34
un objeto es una dirección de memoria. 00:08:35
Bueno, más o menos, 00:08:39
el dibujito este más o menos 00:08:41
lo que trae por debajo. 00:08:43
Bueno, pues entonces, 00:08:48
nuestra funcionalidad de incorporar pedido a cliente 00:08:50
es esta, 00:08:53
localizamos el pedido, 00:08:55
lo dejamos apuntado por este 00:08:56
y una vez que lo hemos localizado, 00:08:58
llamamos a este método. 00:08:59
Este método está sin hacer, 00:09:01
pero al que está haciendo esta parte del software 00:09:02
le da exactamente igual, 00:09:04
él hace su trabajo estupendamente 00:09:05
y sigue y ya el otro cuando vuelve de su baja, 00:09:07
pues ya está, 00:09:10
ya completará esto. 00:09:11
Meter el pedido en el array de pedidos del cliente. 00:09:15
¿Vale? 00:09:20
Entonces, 00:09:21
el tío que estaba de baja, 00:09:22
este método, 00:09:24
este método no lo ha hecho, 00:09:27
bueno, ya lo hará, 00:09:29
pero nosotros podemos hacer nuestro software perfectamente 00:09:30
y cuando él lo rellene, 00:09:34
pues ya está, 00:09:35
nosotros no tendremos que tocar nada. 00:09:36
Lo que pasa es que si entonces ahora queremos ya ejecutarlo, 00:09:38
pues hombre, 00:09:41
conviene que ya tengamos esa parte hecha, 00:09:42
porque si no incorporar pedido no va a hacer nada, 00:09:43
todo está vacío. 00:09:45
¿Vale? 00:09:47
Pues para probarlo vamos a, 00:09:48
ala, ya nos incorporamos de la baja 00:09:49
y vamos a hacer este método. 00:09:50
Bueno, pues incorporar pedidos 00:09:53
es como el de incorporar ítem, 00:09:55
mal ítem del pedido, 00:09:57
es lo mismo, 00:09:58
es la misma historia de siempre. 00:09:59
Cogemos este array, 00:10:01
si es nul, 00:10:03
creo una primera posición y la pongo 00:10:04
y si no es nul, 00:10:05
creo una adicional con una más, 00:10:06
copio y pego. 00:10:07
Lo de siempre. 00:10:08
Esto ya es que se puede escribir rapidísimamente 00:10:10
porque es la historia de toda la vida. 00:10:14
¿Vale? 00:10:17
Entonces, 00:10:18
esto sería, 00:10:19
si es el primer pedido 00:10:20
o lo que es lo mismo, 00:10:22
si pedido es igual a nul, 00:10:23
porque es el primero, 00:10:24
pues entonces me creo mi primer array de pedidos 00:10:25
con una posición una, 00:10:29
única, 00:10:32
y pongo en esa única posición 00:10:35
que es pedidos de cero, 00:10:38
pongo el pedido P. 00:10:40
¿Vale? 00:10:42
Y ya he terminado, 00:10:43
no tengo más que hacer, 00:10:44
con lo cual me voy del método, 00:10:45
retún, punto, pelota, 00:10:46
se acabó. 00:10:47
¿Vale? 00:10:48
Que pedidos no es igual a nul, 00:10:50
ya tiene pedidos. 00:10:52
Entonces, 00:10:53
el if no se ejecuta, 00:10:54
luego vengo por aquí, 00:10:55
no hay un retún, 00:10:56
vengo por aquí, 00:10:57
y en ese caso lo de siempre, 00:10:58
pues habrá que hacer una raya auxiliar 00:10:59
de pedidos 00:11:02
con una posición más 00:11:04
que la que tiene el viejo, 00:11:06
una posición más que la que tiene el viejo, 00:11:09
y la que tiene el viejo es pedidos.length 00:11:13
más uno, 00:11:17
y ahora ya copiamos el viejo en el nuevo, 00:11:24
así sea menor que pedidos.length 00:11:32
incrementando i, 00:11:36
copiamos el viejo en el nuevo, 00:11:39
que es aux de i 00:11:41
igual a pedidos de i, 00:11:44
y una vez que hemos copiado el viejo en el nuevo, 00:11:48
en la posición que nos falta, 00:11:50
que es aux de aux.length menos uno, 00:11:52
que es la última de aux, 00:11:56
pues en esta ponemos el nuevo, 00:11:57
y ahora ya no se nos olvide terminar 00:12:00
sustituyendo el viejo por el nuevo. 00:12:02
Pues ya está, 00:12:06
el rollo de siempre, 00:12:07
ahí plantamos. 00:12:08
¿Vale? 00:12:10
Venga, pues ya está. 00:12:14
Lo que importa aquí es que ya tenemos 00:12:17
este método resuelto, 00:12:19
que nos mete un nuevo pedido en el array. 00:12:20
Ya lo tenemos, ¿vale? 00:12:22
Bueno, pues ahora a ver si tenemos ya 00:12:28
todo lo que necesitamos para poder probar 00:12:30
al menos las funciones básicas de este main. 00:12:32
Este main nos permite, 00:12:35
como yo tengo la versión más antigua, 00:12:36
nos permite crear un pedido, ¿verdad? 00:12:38
Porque yo la tenía ya hecha aquí, 00:12:39
¿sí? Permite crear un pedido. 00:12:41
Permite añadir un ítem a pedido, 00:12:45
porque lo tenía ya aquí hecho en el caso dos, 00:12:48
a través del método addItem, 00:12:51
que lo tengo aquí hecho. 00:12:55
¿Vale? 00:12:59
Y el resto de las funciones, 00:13:05
ya yo no las tengo hechas, 00:13:06
vosotros sí. 00:13:07
Vamos a crear un cliente, 00:13:10
que lo tenemos en la 10. 00:13:11
Incorporar pedido a cliente. 00:13:14
Con eso, hombre, ya veremos 00:13:17
si da errores de ejecución o no. 00:13:18
Si da null point exception o no los da. 00:13:19
Si hemos hecho cosas raras, 00:13:21
dará null point exception. 00:13:22
Pero no vamos a poder ver si lo ha hecho bien, 00:13:23
porque no tenemos mostrar los datos de un cliente. 00:13:26
Sería interesante hacer esa funcionalidad rápidamente, 00:13:32
que nos muestre datos de un cliente, 00:13:35
para ver si le incorpora el pedido correctamente. 00:13:37
Vamos a ponerla en la 11. 00:13:40
La 9, mostrar datos del cliente que ha hecho un pedido. 00:13:43
Tienes razón, vale, vale. 00:13:48
Vamos a... 00:13:50
Sí, pero yo quería una funcionalidad 00:13:54
que les daba un cliente mostrar todos los pedidos que ha hecho. 00:13:55
A ver si es verdad que ha incorporado 00:13:58
los pedidos que le estamos diciendo. 00:13:59
Mostrar pedidos de un cliente. 00:14:02
Vamos a hacer la 11. 00:14:03
Mostrar pedidos de un cliente. 00:14:05
Vamos a mostrar pedidos de un cliente cualquiera. 00:14:08
Dado su NIF, claro. 00:14:12
Pues este será el caso 11. 00:14:14
Vale, pues habrá que pedir primero el NIF del cliente. 00:14:21
Introduzca NIF. 00:14:28
Introduzca NIF, vale. 00:14:29
Lo localizamos en el array. 00:14:30
Y sea menor que clientes... 00:14:35
No, clientes len... 00:14:38
No, posclientes, claro. 00:14:39
Y sea menor... 00:14:42
Incrementando. 00:14:49
Y lo localizamos al cliente, como siempre. 00:14:50
Y aquí algo he escrito mal, esto. 00:14:52
Y ahora sí, clientes de I. 00:14:56
Su NIF es igual al NIF de búsqueda. 00:15:00
Ahora ya es clientes de I, 00:15:09
aquel del que le quiero mostrar los datos. 00:15:11
Entonces yo podría ahora ponerme aquí 00:15:13
y hacer un montón de System Outprint LN, 00:15:14
un FOR para recoger sus pedidos y mostrarlos. 00:15:17
Un código muy largo, 00:15:20
solo para mostrar los datos de un cliente. 00:15:22
Entonces aquí sí que me pide el cuerpo, 00:15:24
mira, haz un método. 00:15:27
Mostrar datos cliente, 00:15:29
que pongas en la clase cliente, 00:15:30
y que cuando un cliente lo llame, 00:15:32
te haga todo el chorizo de mostrar para ti y para tal. 00:15:33
Vale. 00:15:36
Entonces si somos vagos, 00:15:38
y yo creo que nos estamos haciendo demasiado vagos 00:15:39
con esto de lo que la Eclipse ayuda, 00:15:41
pues uno hace, venga. 00:15:44
Ojalá yo tuviera un método que se llama 00:15:46
mostrar datos cliente. 00:15:51
Ojalá lo tuviera, 00:15:54
un método que se llamara así. 00:15:56
Y cuando yo lo llamara, 00:15:59
mostrar datos, 00:16:01
me mostrara todos los datos del cliente este, 00:16:02
que lo llama. 00:16:05
Ojalá lo tuviera. 00:16:06
Y entonces pues pongo ahí el punto de la llamada, 00:16:08
pues aspirando que alguien me lo haga, 00:16:10
porque estaría muy bien. 00:16:12
Ahora mismo no lo tengo, 00:16:14
y por eso me lo pone en rojo. 00:16:15
Me dice, 00:16:16
no tienes ningún método para mostrar los clientes. 00:16:17
Vale. 00:16:20
Pero el Eclipse, 00:16:22
que es estúpido e imbécil, 00:16:24
pero a veces es capaz de hacer algo del trabajo sucio, 00:16:26
pues en la línea roja me dice, 00:16:31
venga, 00:16:33
que tú quieres un método mostrar datos, 00:16:35
venga, 00:16:37
créalo. 00:16:38
Pinchamos ahí, 00:16:41
crear. 00:16:42
Repito lo mismo que le he dicho a ellos, 00:16:43
cuidado con las sugerencias que da el compilador aquí, 00:16:45
porque el 99% no nos interesa porque están fatal. 00:16:50
Nosotros cuando pinchamos ahí, 00:16:54
es porque ya sabemos qué queremos hacer. 00:16:56
Ya sabemos qué queremos hacer. 00:16:58
Y buscamos saber si nos lo ofrece. 00:17:00
Pero no a ver qué nos ofrece y yo elijo. 00:17:02
Porque lo que nos ofrece a mayoría de los casos 00:17:04
no tiene ningún sentido. 00:17:06
Pero yo aquí sé lo que quiero hacer. 00:17:08
Es crear un método como este. 00:17:10
Venga, voy a ver si me lo ofrece. 00:17:12
Anda, venga. 00:17:14
Pues entonces yo le digo, 00:17:16
ah, pues sí, quiero. 00:17:17
Le dais doble click 00:17:18
y ya él se va a la clase cliente 00:17:19
y te hace el método con los parámetros de entrada 00:17:22
que en este caso son cero. 00:17:25
Voy y te dice, 00:17:27
pues ya está, ya te lo he hecho. 00:17:28
Claro, lo hacía lógicamente, 00:17:30
le metes todo el código normal. 00:17:31
Vale, pero ya sabemos qué es. 00:17:32
En la clase cliente, 00:17:35
que es donde estamos, 00:17:36
donde lo ha hecho, 00:17:37
mostrar esto, 00:17:38
ya está, mostrarlo. 00:17:39
Pues venga, 00:17:41
vamos a mostrar ahí. 00:17:42
Aquí ya nos hacemos nuestro system out así 00:17:46
muy rápidos y muy feos 00:17:49
para no perder mucho tiempo. 00:17:52
Vamos a poner solamente el nombre del cliente, 00:17:55
no nif ni nada, 00:17:58
solo por ser rápidos. 00:17:59
Si lo hiciéramos bien, 00:18:03
venga, nombre del cliente es este. 00:18:04
Y ahora vamos a mostrar los pedidos que ha hecho 00:18:08
para comprobar que efectivamente 00:18:11
los pedidos se han incorporado, etc. 00:18:12
Para mostrar los pedidos, 00:18:15
pues tendremos que hacer un for. 00:18:16
De nuevo vamos a ser vagos, 00:18:18
como vamos a consultar. 00:18:19
Vamos a hacer un for each. 00:18:21
Voy a recorrer el array de pedidos 00:18:24
que tengo aquí arriba. 00:18:25
Este array. 00:18:27
Me voy a hacer aquí un for each 00:18:29
y ahora ya voy a mostrar. 00:18:31
Vale, le voy a poner un tabulador 00:18:39
para que me quede tabulado 00:18:43
los pedidos del nombre del cliente. 00:18:44
Vale, esto es un tabulador 00:18:46
porque es carácter de escape. 00:18:48
Es un tabulador, 00:18:50
un carácter especial del teclado. 00:18:51
Y venga, después del tabulador 00:18:53
pues vamos a poner 00:18:55
descripción pedido. 00:18:57
Descripción del pedido. 00:19:01
Y ahora esto lo tendremos que concatenar 00:19:07
con p.getDescripción. 00:19:09
Vale. 00:19:16
Y así podríamos mostrar 00:19:18
el resto de propiedades 00:19:20
de cada pedido p del array. 00:19:21
Descripción y podríamos meternos 00:19:24
a mostrar los ítems. 00:19:26
Pero bueno, vale, no nos alargamos. 00:19:28
Lo ideal es que uno haga aquí un método 00:19:31
que te muestre todo, claro. 00:19:32
Descripción del pedido, código. 00:19:34
Se ponga a recorrer los ítems de p. 00:19:36
Que p recordad que tiene 00:19:39
un array de ítems 00:19:41
que está aquí. 00:19:43
Aquí, perdón. 00:19:47
Está ahí. 00:19:49
Entonces para que este método 00:19:51
de mostrar datos del cliente 00:19:53
sea completo, 00:19:55
podríamos mostrar ahí de todo. 00:19:56
Como yo solamente voy a verificar 00:19:58
que funciona, 00:20:00
voy a mostrar solamente 00:20:01
para cada cliente su nombre 00:20:02
y las descripciones 00:20:05
de todos los pedidos que ha hecho. 00:20:06
Pero incorporad vosotros más cosas 00:20:08
para cada pedido también, 00:20:11
un for que recorra los ítems 00:20:13
para ver que está todo bien. 00:20:14
Vale, ya tengo a mostrar datos. 00:20:17
Bueno, pues ahora mi main 00:20:19
ya vamos a probarlo. 00:20:21
Vamos a probarlo a ver si puedo 00:20:22
insertar pedido, insertar cliente, 00:20:23
asociar pedido a cliente 00:20:25
y luego cuando muestre 00:20:27
datos del cliente 00:20:28
a ver si es verdad que lo tiene, 00:20:29
lo tiene todo. 00:20:30
Vamos a ver. 00:20:32
Porque estamos probando 00:20:35
muchas cosas de golpe 00:20:36
y alguna pues habremos escrito mal. 00:20:37
Pues venga. 00:20:41
Venga, vamos a crear un pedido 00:20:45
lo primero de todo. 00:20:46
Venga, me acaban de... 00:20:50
Bueno, yo ya empiezo con los 00:20:51
scan necklines in 00:20:53
porque no tengo la clase teclado 00:20:55
que es muy bonita. 00:20:57
Entonces me falta a mí 00:20:59
un neckline después de algún sitio. 00:21:00
Me falta aquí. 00:21:06
Esto ya lo tenía arreglado 00:21:10
en la versión del portátil 00:21:11
pero en esta no. 00:21:13
Me falta aquí un neckline. 00:21:15
¿Dónde más me falta? 00:21:17
Me va a faltar aquí. 00:21:20
Después de haber leído esto. 00:21:22
scan.neckline 00:21:24
también me va a faltar. 00:21:27
¿Ves? Por esto es bueno 00:21:28
que os acostumbréis a usar la clase 00:21:29
importándola como hard, 00:21:31
la clase que hicimos ayer 00:21:32
porque va a ser todo mucho más fácil. 00:21:35
Vale, y ya no me van a faltar más 00:21:39
porque no tengo más cosas hechas. 00:21:40
Creo. 00:21:42
Venga, pues volvemos. 00:21:43
Siguiente prueba. 00:21:45
Que la primera prueba no la hemos pasado. 00:21:47
A ver la siguiente. 00:21:50
Creamos pedido. 00:21:51
Vale, ya se para en código. 00:21:53
Menos mal. 00:21:54
Venga, pedido de código 1. 00:21:55
Descripción del pedido. 00:21:58
Como siempre, casi no se nos olvida. 00:22:00
Bolis. 00:22:02
Pedido 1. 00:22:03
Que tiene bolis. 00:22:05
El otro día ya probamos 00:22:10
lo de añadir ítems a un pedido. 00:22:11
Vimos que funcionaba. 00:22:13
No le voy a añadir ningún ítem. 00:22:14
Un pedido de bolis sin ítem. 00:22:15
Ya está. 00:22:17
Pero vamos, ya sabemos que funciona 00:22:19
añadir ítems. 00:22:20
Vale, venga. 00:22:21
Vamos a meter un cliente. 00:22:22
Ya tenemos un pedido. 00:22:23
Vamos a meter un cliente. 00:22:24
Cliente era la opción 10. 00:22:25
Introduzca NIF del cliente. 00:22:30
Pues 1, 2, 3, 4. 00:22:32
Introduzca nombre del cliente. 00:22:34
Repito. 00:22:37
Introduzca dirección. 00:22:38
Vive en Madrid. 00:22:40
Bueno, en principio ya se ha creado el cliente. 00:22:42
De NIF 1, 2, 3, 4. 00:22:44
Vale, vamos a mostrar ahora mismo sus datos. 00:22:48
Ahora mismo no va a tener pedidos. 00:22:51
Vamos a ver qué nos muestra. 00:22:52
Mostrar pedidos de un cliente. 00:22:54
11. 00:22:58
La opción 11. 00:22:59
Introduzca NIF de qué cliente quieres mostrar datos. 00:23:01
Queremos mostrar datos del cliente 1, 2, 3, 4. 00:23:04
Único que tenemos. 00:23:06
Único que tenemos. 00:23:07
1, 2, 3, 4. 00:23:08
Vale, pues nos muestra el nombre. 00:23:10
Y aquí nos dice. 00:23:12
Esto casi lo podemos ver. 00:23:15
Null pointer exception. 00:23:16
Cuando muestras los pedidos de un cliente 00:23:18
que todavía no tiene ninguno. 00:23:21
Era de espera. 00:23:26
Pero es típico. 00:23:27
Uno va a hacer la primera prueba. 00:23:28
Le sale esto. 00:23:29
Primero. 00:23:30
Con estas cosas recordad que esto no se trata de. 00:23:31
¿Cuál es el pedido? 00:23:34
¿Me ha fallado? 00:23:35
No. 00:23:36
Esto es obviamente la clave de todo. 00:23:37
Y esto hay que saber entenderlo y destriparlo. 00:23:42
Vale. 00:23:45
Primero. 00:23:46
Esta es la clave. 00:23:47
Null pointer exception. 00:23:48
Ya sabemos lo que significa. 00:23:49
Un objeto que es nulo. 00:23:50
En algún sitio. 00:23:52
Ese objeto que es nulo. 00:23:53
Está intentando llamar a métodos, a propiedades. 00:23:55
Y es nulo. 00:23:57
Si es nulo es imposible. 00:23:58
Null pointer exception. 00:23:59
Ya sabemos que esa es la causa. 00:24:01
Ahora lo siguiente. 00:24:03
¿Y dónde? 00:24:04
¿En qué momento ha pasado eso? 00:24:05
¿En qué momento ha pasado que yo haya hecho eso? 00:24:06
Pues vamos bajando. 00:24:08
Hasta que llegamos a la primera línea. 00:24:09
Que nos aparece un código que hemos hecho nosotros. 00:24:12
Porque aquí arriba podría haber clases internas de la máquina virtual. 00:24:15
Y aquí. 00:24:19
Ah, cliente. 00:24:20
Esta la he hecho yo. 00:24:21
Esta es mía. 00:24:22
Cliente. 00:24:23
Ha sido cuando llamábamos a datos. 00:24:24
Voy a pinchar ahí. 00:24:25
Voy a pinchar ahí y a ver dónde ha estado el problema. 00:24:26
Pinchamos ahí. 00:24:27
Anda. 00:24:29
Claro. 00:24:31
¿Qué pasa? 00:24:33
For each. 00:24:35
¿Por qué os digo a veces? 00:24:36
Uy, el for each cuidadín. 00:24:38
Que a veces es problemático. 00:24:39
Cuidado con él. 00:24:41
Vale. 00:24:43
Con un for de índice. 00:24:44
Aquí no habría sido null pointer exception. 00:24:45
¿Por qué? 00:24:47
Porque el for de índice sería. 00:24:48
Ah, bueno. 00:24:50
Perdón. 00:24:51
Sí que habría salido. 00:24:52
Vale. 00:24:53
A ver. 00:24:54
El for each. 00:24:55
¿Qué está haciendo? 00:24:56
Pedidos. 00:24:57
Pedidos es null. 00:24:58
Uno podría pensar. 00:24:59
Como es null, no entra. 00:25:00
No entra. 00:25:02
No, no es verdad. 00:25:03
Es que el for each, antes de eso, 00:25:04
trata de sacar propiedades de pedidos. 00:25:06
¿Cómo? 00:25:07
¿Cuál es tu longitud? 00:25:08
¿Cuál es tu longitud para empezar a recorrerlo? 00:25:09
Pues cuando se haga el pedidos.len, 00:25:11
ahí es donde le viene el null pointer exception. 00:25:13
Entonces, aquí nosotros, físicamente, 00:25:16
no nos parece estar viendo que estemos llamando 00:25:18
a ninguna propiedad de pedidos. 00:25:21
No la estamos viendo. 00:25:23
Pero el for each por dentro lo hace. 00:25:24
El for each hace. 00:25:26
A ver, pedidos. 00:25:27
Hay que recorrer pedidos. 00:25:28
Muy bien. 00:25:29
Voy a hacer yo por dentro un pedidos.len. 00:25:30
A ver cuál es la dirección. 00:25:32
La longitud. 00:25:33
Pues cuando haga el pedidos.len, 00:25:34
le sale el null pointer exception. 00:25:36
Ese es el problema. 00:25:38
Que lo hubiéramos hecho con un for int. 00:25:40
Con un for de índice. 00:25:42
En realidad nos habría salido también un problema. 00:25:45
En este caso. 00:25:47
Porque habríamos hecho esto. 00:25:48
Desde int igual a cero. 00:25:50
Mientras i sea menor que pedidos.len. 00:25:52
Y más más habríamos hecho esto. 00:25:58
Descripción esto. 00:26:01
Aquí también nos habría salido 00:26:11
un null pointer exception. 00:26:12
Porque pedidos es null. 00:26:13
Porque no ha hecho ningún pedido. 00:26:14
Al hacer punto de cualquier cosa que sea null. 00:26:16
Null pointer exception. 00:26:18
Pero al menos aquí. 00:26:20
Cuando le damos para arreglarlo. 00:26:21
Es que lo vemos rápido. 00:26:23
Decimos. 00:26:24
Justo. 00:26:25
Aquí está. 00:26:26
Aquí. 00:26:27
Parece misterioso. 00:26:28
Decimos. 00:26:29
¿En qué momento estamos llamando 00:26:30
a propiedades de pedidos? 00:26:31
En ningún momento. 00:26:32
Pero claro. 00:26:33
Está haciendo el for each por dentro. 00:26:34
Es más misterioso. 00:26:35
O sea. 00:26:36
El for each por dentro hace un montón de cosas. 00:26:37
Hace copias de la raya. 00:26:38
Hace de todo. 00:26:39
Entonces por eso tiene peligro. 00:26:40
¿Vale? 00:26:41
Hay que entender bien. 00:26:42
Cómo funciona. 00:26:43
Bueno. 00:26:46
Pues entonces. 00:26:47
Bien por esta opción. 00:26:48
Bien por esta. 00:26:49
Nos dan un pointer exception. 00:26:50
Que entendemos por qué. 00:26:51
Tiene todo el sentido del mundo. 00:26:52
¿Vale? 00:26:53
¿Cuál es el problema? 00:26:54
Que cuando el cliente no tiene todavía 00:26:55
ningún pedido. 00:26:56
No tiene todavía ninguno. 00:26:57
En ese caso. 00:26:58
No queremos recorrerlo. 00:26:59
Bueno. 00:27:01
Pues es tan fácil como meter esto en un. 00:27:02
Y el pedido es distinto de null. 00:27:03
Y solucionado. 00:27:05
Y ya está. 00:27:06
¿No? 00:27:07
Y tan fácil. 00:27:08
Bueno. 00:27:10
Entonces. 00:27:11
Voy a. 00:27:12
Dejar esto aquí. 00:27:13
Y entonces. 00:27:14
Si pedidos. 00:27:15
Es distinto de null. 00:27:16
Y solo en ese caso. 00:27:17
Entonces. 00:27:18
Ahora ya sí recorre. 00:27:19
Y si no. 00:27:20
Es que el cliente no tiene ningún pedido. 00:27:21
No tiene ninguno. 00:27:22
Todavía no hay nada que recorrer. 00:27:23
Vale. 00:27:24
Pues entonces. 00:27:25
Aquí me debe faltar. 00:27:26
O sobrar una llave. 00:27:27
O me debe. 00:27:28
Aparar. 00:27:29
¿Vale? 00:27:30
Aparar. 00:27:31
Aparar. 00:27:32
Aparar. 00:27:33
Aparar. 00:27:34
Aparar. 00:27:35
Aparar. 00:27:36
Aparar. 00:27:37
Aparar. 00:27:38
Aparar. 00:27:39
A pedidos de i. 00:27:40
Porque lo he cambiado al. 00:27:41
Pedidos. 00:27:42
Pedidos de i. 00:27:43
Vale. 00:27:44
Ala. 00:27:45
Vale. 00:27:46
Pues volvemos a pasar la prueba. 00:27:47
Vámonos al main otra vez. 00:27:48
Venga. 00:27:49
Siguiente. 00:27:50
Primero. 00:27:51
Creamos un pedido. 00:27:52
¿Vale? 00:27:53
¿Vale? 00:27:54
¿Vale? 00:27:55
¿Vale? 00:27:56
¿Vale? 00:27:57
¿Vale? 00:27:58
¿Vale? 00:27:59
¿Vale? 00:28:00
¿Vale? 00:28:01
¿Vale? 00:28:02
¿Vale? 00:28:03
¿Vale? 00:28:04
¿Vale? 00:28:05
¿Vale? 00:28:06
¿Vale? 00:28:07
¿Vale? 00:28:08
Segundo. 00:28:09
Bueno, ¿qué tal puedo hacer? 00:28:10
Código 1 de descripción. 00:28:12
Pedido de boli sin ítem y sin nada. 00:28:14
Eso ya probamos, que podríamos añadir. 00:28:16
Vamos a insertar un cliente. 00:28:19
Venga, un If, un 2, 3, 4. 00:28:20
Nombre. 00:28:25
Pepito. 00:28:27
Dirección. 00:28:28
Pues vive en Madrid. 00:28:29
Ahí está, el cliente registrado. 00:28:31
Todavía no tiene ningún pedido hecho. 00:28:32
Ahora resulta, oye este pedido que hemos hecho. 00:28:34
Vamos a poner solo este cliente. 00:28:37
Pues venga, para eso tenemos el método. 00:28:39
Incorporar pedido a cliente. 00:28:41
Venga. 00:28:44
Ah, bueno, primero íbamos a mostrar los datos del cliente, 00:28:44
para ver que no tiene pedidos. 00:28:48
Vamos a mostrar primero los datos del cliente. 00:28:49
Opción 11, a ver si esta vez no falla. 00:28:51
¿De qué cliente quieres mostrar pedidos? 00:28:55
De un 2, 3, 4. 00:28:57
Pues me dice, nombre del cliente, Pepito. 00:29:00
Efectivamente. 00:29:03
¿Vale? 00:29:05
Esto de opción incorrecta, es porque me falta un next line, 00:29:05
se queda con el salto de línea, se cree que ese es la opción, 00:29:08
etcétera. 00:29:11
Entonces, me falta un next line. 00:29:11
Pero no me ha mostrado pedidos, efectivamente. 00:29:13
Pero a mí me falta un next line por algún lado. 00:29:15
Porque esto, cuando ya la aplicación se hace muy gorda, 00:29:20
con entrada y salida, es hacerlo con escáner y next line es 00:29:22
una locura. 00:29:25
A ver. 00:29:35
En algún sitio tengo ya aquí un next line de más, 00:29:39
que luego cuando lo leen. 00:29:44
Vale, bueno. 00:29:51
Vale, tengo que encontrar el next line que tengo, 00:29:53
modificarlo para que no se quede en el buffer y no lo coja la 00:29:56
opción del menú. 00:30:01
Pero bueno, eso. 00:30:02
Vale, vamos ahora a la opción y ya nos vamos a ver si nos sale 00:30:03
error o no. 00:30:07
Ahora vamos a ponerle un pedido a ese cliente. 00:30:08
Venga, código del pedido a ponerle al cliente. 00:30:12
Código del pedido. 00:30:14
Pues el 1, el único pedido que tenemos. 00:30:16
El pedido 1. 00:30:19
Pedido 1, venga. 00:30:21
1, vale. 00:30:25
Nib del cliente al que le vamos a poner ese pedido. 00:30:26
El único nib que tenemos, 1, 2, 3 y 4. 00:30:29
No sabemos si se lo ha metido o no. 00:30:34
No sabemos. 00:30:36
Vamos a mostrar datos de ese cliente. 00:30:37
Pedidos, a ver si ahora me aparece. 00:30:39
Los muestro, introduzcan nib. 00:30:41
1, 2, 3, 4. 00:30:42
Vale. 00:30:45
Nombre cliente pedido y aquí está. 00:30:46
Nombre cliente Pepito y aquí está su único pedido. 00:30:49
Pues sí, lo ha incorporado. 00:30:52
Y esto es lo del next line que se ha quedado ahí, pero bueno. 00:30:53
Vale, pues lo que hemos hecho parece que funciona. 00:30:56
Bueno, pocas pruebas, pero bueno. 00:30:58
Venga, vamos a parar aquí. 00:31:02
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
5
Fecha:
23 de enero de 2024 - 13:45
Visibilidad:
Público
Centro:
IES ROSA CHACEL
Relación de aspecto:
1.78:1
Resolución:
1280x720 píxeles
Tamaño:
592.35 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid