20251215 AppClientesPedidos_1 - 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:
Bueno, pues esto sería lo primero parecido a una aplicación ya un poquito más grande,
00:00:00
no solo un programa que hace una cosa ya, sino una aplicación para desarrollar
00:00:10
toda una serie de funcionalidades sobre un modelo de datos, que en nuestro caso
00:00:15
es para gestionar el qué, los clientes y pedidos, que es la solución, el ejemplo más sencillo.
00:00:20
vale, pues entonces una aplicación
00:00:26
yo tengo clientes
00:00:29
que me piden cosas de mi almacén
00:00:30
y vamos a gestionar
00:00:32
esos pedidos y esos clientes que tengo
00:00:34
para facilitarme tareas
00:00:36
como emitir facturas
00:00:38
comprobar de un cliente si ha pagado
00:00:40
o no ha pagado, lo que fuera
00:00:42
a partir de ahí puedo añadir ya un montón de funcionalidades
00:00:43
venga, vamos a hacer
00:00:47
esto que plantea aquí
00:00:48
a ver que sacamos de aquí
00:00:50
se supone que
00:00:53
nos habríamos entrevistado con el cliente
00:00:56
y él nos habría explicado
00:00:58
lo que quiere conseguir
00:00:59
con esa aplicación, pues yo quiero
00:01:02
como tengo un montón de clientes así, pues quiero
00:01:04
en los clientes poder ver su ficha cuando quiera
00:01:06
quiero no sé cuánto, entonces después de esa entrevista
00:01:08
de tomar notas de muchas cosas
00:01:10
nosotros ya decidimos
00:01:12
cuáles son las entidades necesarias
00:01:14
¿vale?
00:01:16
en este caso ya han decidido
00:01:18
por nosotros un cliente
00:01:20
un pedido, una entidad
00:01:22
pedido, porque hay que gestionar cosas con pedidos
00:01:24
y una entidad
00:01:26
cliente
00:01:28
¿vale?
00:01:29
entonces, las entidades tienen datos
00:01:31
dentro, son cosas complejas
00:01:34
claro, porque si
00:01:36
el tío me dice, yo tengo que gestionar
00:01:38
mensajes
00:01:40
vale, el mensaje es un string, eso no es una
00:01:41
entidad que yo tenga que hacer, cuando necesito
00:01:44
un mensaje, instancia un string y ya está
00:01:46
pero el pedido, si es algo complejo
00:01:48
pues tiene un montón de cosas dentro, y el cliente
00:01:50
también tiene un montón de cosas dentro, entonces cada una
00:01:52
de ellas es una entidad, como si fuera
00:01:54
una tabla de la base de datos
00:01:56
como si fuera una entidad de un modelo
00:01:58
entidad relación, exactamente igual
00:02:00
bueno
00:02:02
pues después de haber hecho
00:02:04
reuniones con el cliente y todo eso
00:02:06
hemos llegado a la conclusión de que lo que
00:02:08
nos interesa en los pedidos
00:02:10
es solamente
00:02:12
lo que se ha gastado
00:02:13
de que va el pedido y el código
00:02:15
único
00:02:18
y en la clase cliente lo que nos
00:02:19
interesa es el nombre y el NIF
00:02:22
y todos los pedidos que tenga ese
00:02:24
cliente, todos los que tenga, ¿vale?
00:02:26
Solamente nos interesa eso.
00:02:28
Pues entonces vamos a hacer esas dos
00:02:31
clases.
00:02:32
Entonces, aquí
00:02:34
en un caso real, se haría
00:02:36
un paquete modelo
00:02:38
con el modelo de datos.
00:02:40
Otro paquete, pues con la
00:02:42
lógica o con
00:02:44
funcionalidades lógicas o lo que sea.
00:02:46
Ahora lo vamos a ir engordando. Otro con el
00:02:48
main, ¿vale? Entonces, como
00:02:50
yo lo tengo todo en un proyecto
00:02:51
todo en un proyecto para luego subirlo más fácilmente
00:02:55
a la aula virtual
00:02:57
pues lo que voy a hacer va a ser
00:02:58
paquete ejer22.model
00:03:00
ejer22.no se que
00:03:03
pero en un caso real
00:03:04
esta aplicación sería un proyecto
00:03:05
esa aplicación sería un proyecto
00:03:09
y
00:03:11
dentro de ese proyecto tendría
00:03:12
un paquete por cada conjunto
00:03:14
de clases que tienen una especie
00:03:17
de significado común
00:03:18
por ejemplo las entidades tienen como significado
00:03:20
pues ser entidades que representan
00:03:23
mi realidad, habrá otras
00:03:25
clases que sean utilidades matemáticas
00:03:26
pues en el paquete utilidades, lo que sea
00:03:28
entonces como yo no tengo
00:03:30
un único proyecto para mi clase
00:03:32
pues lo voy a hacer en
00:03:34
para que se vea que va en diferentes paquetes
00:03:36
pues voy a hacer un paquete ger22.modelo
00:03:38
ger22.no se que
00:03:41
entonces
00:03:43
me voy a crear
00:03:44
un paquete para el modelo de esta
00:03:46
aplicación
00:03:48
y lo voy a llamar
00:03:49
ejer22.model
00:03:53
en el paquete ejer22.model
00:03:56
este de aquí, ahora ya si hacemos
00:04:02
las entidades
00:04:04
que son cliente y pedido
00:04:06
pues venga, empezamos por pedido
00:04:08
las entidades
00:04:10
es el modelo de datos
00:04:16
¿eh?
00:04:17
¿dónde?
00:04:21
ya veremos
00:04:22
en función del diseño
00:04:24
de paquetes que hagamos de nuestra aplicación
00:04:28
por ahora lo que sí que sabemos es que un paquete
00:04:29
modelo con las entidades
00:04:31
necesitamos, pues ahí va
00:04:33
vale
00:04:35
pues bueno
00:04:36
lógicamente le dejamos
00:04:39
el public
00:04:41
porque esas entidades están en un paquete
00:04:42
para ellas solitas, el paquete modelo
00:04:45
entonces desde otros paquetes
00:04:47
habrá que poder acceder, entonces ahora
00:04:49
ya el public hay que dejarlo, ya no lo podemos quitar
00:04:51
lógicamente, porque estas clases
00:04:53
van a ser accesibles desde otro paquete
00:04:55
desde el que sea
00:04:57
¿qué nos han dicho que necesita
00:04:58
el pedido? pues el código
00:05:03
un entero
00:05:05
por ejemplo
00:05:07
la descripción
00:05:08
un string
00:05:13
y la cantidad
00:05:14
el precio del pedido
00:05:20
lo que sea, solo interesa
00:05:22
eso, es lo único que quiere gestionar este
00:05:27
luego ya esto se podría ampliar
00:05:29
claro
00:05:31
y la programación orientada a objetos
00:05:31
precisamente nos hace que la aplicación
00:05:35
se pueda ampliar fácilmente
00:05:38
si esto lo hiciéramos
00:05:39
con un programa antiguo
00:05:41
de los estructurados, de los antiguos
00:05:43
de operación estructurada punto pelota
00:05:45
esto sería un programa muy grande
00:05:46
en el cual tendríamos un montón de variables
00:05:49
precio del pedido, no se que del pedido
00:05:51
nombre del cliente
00:05:54
un montón de variables, hay luego un montón
00:05:55
de if, while
00:05:57
para hacer las cosas
00:05:59
entonces cualquier modificación que quisiéramos hacer
00:06:00
sería un lío meterse en ese programa con tantas líneas
00:06:03
hasta encontrar que es lo que tenemos que añadir
00:06:06
sin embargo aquí, oye mi aplicación ya está hecha
00:06:09
pero la quiero ampliar porque ahora además del precio
00:06:13
del pedido, quiero gestionar si está
00:06:15
pagado o no, que es algo que no tenía en la versión 1
00:06:18
de mi aplicación, ah vale pues rápidamente
00:06:21
eso implica que tú abres la entidad pedido
00:06:24
y pones aquí un boolean
00:06:27
pagado, por ejemplo
00:06:29
entonces la ampliación de la aplicación
00:06:30
es muchísimo más sencilla si está
00:06:32
organizada como una aplicación orientada a objetos
00:06:35
con diferentes clases
00:06:37
que si fuera un programa estructurado
00:06:39
con todos los datos en variables ahí puestas
00:06:40
un montón de variables
00:06:42
y luego las operaciones
00:06:44
bueno, en nuestro caso, por ahora dejamos
00:06:45
la versión básica con estas tres propiedades
00:06:48
y ya está
00:06:50
ahora
00:06:51
le ponemos un constructor
00:06:53
con parámetros que siempre va a ser útil
00:06:56
y es lo habitual
00:07:00
le ponemos los get y los set
00:07:01
para permitir desde fuera acceder a las propiedades
00:07:10
porque si no se lo ponemos
00:07:14
imposible desde fuera acceder al contenido del pedido
00:07:15
imposible
00:07:19
pues ponemos los get y set
00:07:20
y ya que lo conocemos
00:07:25
del otro día
00:07:29
vamos a aprovechar para poner el método
00:07:31
toString
00:07:34
que ya explicamos el otro día
00:07:35
que es un método que los que nos usen
00:07:38
de otras aplicaciones
00:07:40
de otros paquetes
00:07:42
los que nos usen van a asumir
00:07:43
que yo voy a tener implementado
00:07:47
un toString, porque cuando ellos
00:07:48
necesiten ver mi descripción
00:07:50
ellos van a llamar a ese toString
00:07:51
lo van a llamar
00:07:54
entonces está bien que yo
00:07:55
lo ofrezca
00:07:58
para si los demás
00:07:59
llaman a ese método porque
00:08:01
asumen que yo lo he hecho
00:08:03
pues que tengan respuesta
00:08:05
¿vale? entonces siempre nos tenemos que adaptar
00:08:07
de alguna manera
00:08:12
a estándares
00:08:13
pues venga
00:08:15
generamos tu string
00:08:18
¿qué descripción quieres poner
00:08:19
en el string? pues las tres propiedades
00:08:22
código, descripción y precio
00:08:24
venga, me gusta el overwrite
00:08:25
lo podéis quitar si queréis porque no sabemos
00:08:28
lo que significa todavía
00:08:30
medio lo apuntamos el otro día para lo que
00:08:31
sirve para hacer una validación en
00:08:34
tiempo de compilación, pero
00:08:36
ahora mismo nos olvidamos de
00:08:38
anotaciones y de
00:08:40
todo eso, nos olvidamos
00:08:42
vale, pues este método toString
00:08:44
cuando alguien lo llame, desde donde
00:08:46
sea, que podrá hacerlo porque es público
00:08:48
claro, cuando alguien lo llame
00:08:50
desde donde sea
00:08:52
me va a devolver este string
00:08:53
entonces es
00:08:55
útil si alguien quiere visualizar
00:08:58
el contenido en una cadena
00:09:00
para ponerlo en un emergente
00:09:02
Para lo que sea
00:09:03
Vale, entonces ahora mismo
00:09:05
Así se quedan
00:09:10
Estos
00:09:12
Estos
00:09:13
Esta clase, pedido, vale
00:09:15
Cliente
00:09:18
La otra entidad
00:09:21
De cliente hemos quedado
00:09:22
Con el que nos pidió el software
00:09:34
Que lo que le interesa es
00:09:36
El NIF, el nombre
00:09:38
Y los pedidos que me ha hecho
00:09:40
Es lo único que me interesa
00:09:44
Los pedidos que me ha hecho
00:09:46
Los pedidos que me ha hecho
00:09:47
Como son muchos pedidos
00:09:50
Los tendré que guardar
00:09:52
En un array, no hay otra
00:09:54
Los tendré que guardar en un array
00:09:55
Pues aquí están
00:09:58
¿Vale?
00:10:01
Entonces, esto ya sabemos lo que significa
00:10:07
Significa que cuando exista un cliente
00:10:09
Que ahora mismo no existe ninguno
00:10:12
Porque no hay ningún programa ejecutándose
00:10:14
Y no hay un main
00:10:16
Cuando exista un cliente
00:10:17
ese cliente tendrá
00:10:19
un nif concreto
00:10:20
un nombre concreto
00:10:22
y un array de pedidos concreto
00:10:24
ya está
00:10:26
aquí no instanciamos nada
00:10:28
no tenemos que instanciar nada
00:10:30
aquí lo único que estamos diciendo es que cuando un cliente
00:10:32
exista, ese cliente
00:10:34
va a tener dentro un array de pedidos
00:10:36
¿de cuántos pedidos? ¿qué tamaño tendrá
00:10:38
ese array? es que nos da igual, solamente estamos
00:10:40
diciendo el tipo de dato que va a
00:10:42
tener esa variable
00:10:44
pues esa variable va a tener este tipo
00:10:45
de dato
00:10:48
en concreto que array va a ser, que pedidos
00:10:49
va a tener, cuantos, pues hombre cuando exista
00:10:52
un cliente ya veremos, ahora mismo
00:10:54
solamente decimos que cuando exista
00:10:56
va a tener un need
00:10:58
string, un nombre string
00:11:00
y unos pedidos que son array de pedido
00:11:02
ya está, es lo único que decimos ahí
00:11:04
y lo mismo
00:11:05
vamos a hacer el constructor get set
00:11:08
vale, constructor get set
00:11:10
y vamos a hacer un to string también
00:11:28
por si alguien
00:11:30
quiere tener un mensaje
00:11:32
con la descripción de como somos
00:11:34
pues venga
00:11:36
generamos toString
00:11:37
aquí
00:11:39
el toString si incluimos las
00:11:45
tres propiedades
00:11:49
pues luego ya veremos que lo va a
00:11:50
mostrar raro, porque el nif lo va a
00:11:55
mostrar sin problema
00:11:56
el nombre lo va a mostrar sin problema
00:11:57
vale, y aquí lo que
00:12:00
él me ha hecho es, y pedidos como es un
00:12:02
array, me va a
00:12:04
llamar al método
00:12:06
toString de esta clase, que no sabemos
00:12:08
muy bien lo que significa el método toString
00:12:10
de esta clase, al que le
00:12:12
pasa esto, y este método
00:12:16
debe ser, si él no lo ha metido aquí
00:12:18
debe ser que este
00:12:20
método me muestra una
00:12:22
descripción de lo que tiene ese array
00:12:24
pero yo puedo cambiar y ponerme
00:12:25
aquí en el toString lo que quiera, él me ofrece esto
00:12:30
por defecto
00:12:32
lo que suponemos
00:12:33
que hará, será eso
00:12:40
es lo que suponemos que hará, vale
00:12:41
pero nos viene bien como ejemplo
00:12:43
para que veáis lo estándar
00:12:45
que es este método
00:12:47
esta clase de aquí que no hemos
00:12:48
hecho nosotros
00:12:51
tiene un método toString
00:12:52
tiene un método toString cuya utilidad
00:12:54
va a ser
00:12:57
darme un string con la descripción de lo que hay
00:12:58
dentro, en este caso va a ser
00:13:01
pedidos, ¿vale? para que veáis lo estándar que puede
00:13:03
ser este nombre, ahora mismo
00:13:05
esto no sabemos ni lo que hace
00:13:07
intuimos que efectivamente
00:13:08
coge el array que hay aquí
00:13:11
y concatena
00:13:13
el contenido del pedido
00:13:15
lo asumimos
00:13:18
pero bueno, podemos cambiar nuestro otro string
00:13:18
y aquí que nos muestre otra cosa
00:13:22
o lo que sea
00:13:23
vale, pues ya tenemos
00:13:24
este override de nuevo
00:13:31
como no sabemos lo que significa
00:13:34
y no lo necesitamos tampoco
00:13:36
que exista, que esté ahí
00:13:38
Lo quitamos
00:13:39
Pues ya tenemos las dos entidades
00:13:41
Por ahora no tenemos que añadir nada más
00:13:43
Luego otra cosa es que
00:13:45
Vayamos necesitando añadir cosas
00:13:47
Vamos a ver
00:13:49
Sí
00:13:51
Sí, yo lo he hecho mediante source todo el rato
00:13:51
Source, generate constructor
00:13:59
Using fields
00:14:01
¿Eh?
00:14:02
No, no, no
00:14:09
No, no los he dejado tal y como me los ha generado él.
00:14:10
No los he tocado.
00:14:13
Vale.
00:14:16
Bueno, pues ya tenemos estas dos entidades.
00:14:17
¿Vale?
00:14:21
Entonces.
00:14:21
Ahora, cuando exista un main, ya con clientes y pedidos,
00:14:29
entonces vamos a ir haciendo en paralelo el main,
00:14:34
un main, para irlo entendiendo mejor.
00:14:36
El main nuestro va a ser
00:14:39
Un menú
00:14:44
Primero solicita datos para crear objetos pedido
00:14:47
Almacenar estos pedidos en un array con espacio máximo para 100 pedidos
00:14:55
Y luego crea un array con espacio para 100 clientes
00:14:59
Esta primera parte sería como crear
00:15:03
Donde van a ir los datos
00:15:06
¿Vale?
00:15:09
Entonces vamos a hacer ahora nosotros en paralelo el main
00:15:11
El main es esto
00:15:13
Lo que viene a ser la aplicación
00:15:15
Pues venga, vamos a hacer el main
00:15:16
Vale, lo ha generado
00:15:19
Solo él
00:15:25
Claro
00:15:26
Lo ha generado
00:15:28
El eclipse lo ha generado solo
00:15:34
Pero podríamos quitarlo
00:15:36
Porque no queremos mostrar esto
00:15:39
Por ejemplo, yo no quiero mostrar todos los pedidos
00:15:40
En este toString
00:15:42
Quiero mostrar solo el tamaño
00:15:44
Pues podría quitarlo
00:15:46
Y poner aquí
00:15:48
Pedidos.length
00:15:49
Y poner aquí numPedidos
00:15:52
Por ejemplo, entonces este toString
00:15:56
Me saca el nif
00:15:58
El nombre y el número de pedidos
00:16:00
Sería otra variante de toString
00:16:02
Lo que pasa es que él me ha ofrecido esa
00:16:04
Porque esa sentencia rara
00:16:07
Raíz.toString, que era mismo
00:16:10
Podemos intuir lo que hace
00:16:11
Aunque no la entendemos
00:16:13
Pues esa sentencia rara
00:16:14
Coge el array de pedidos
00:16:17
Y me va haciendo un string
00:16:19
Donde va concatenando
00:16:21
Todos los tuestrins a su vez
00:16:23
De cada pedido
00:16:25
Pero lo podemos quitar
00:16:26
Y dejarlo así
00:16:29
Si total este tuestrin es solo para una descripción
00:16:30
Un mensajito
00:16:33
Nada para nada más
00:16:36
Poned este y así no nos liamos con cosas
00:16:37
que no, número
00:16:42
pedidos
00:16:57
vale, no, no, no, no
00:16:57
no, no he hecho, vale
00:17:00
voy a hacer el main, voy a empezar a hacer el main
00:17:11
y luego ya vamos haciendo los métodos, pero vamos a
00:17:13
ir haciendo el main en paralelo
00:17:15
para ir entendiendo quizá un poquito más la
00:17:17
estructura de la aplicación, vale, pues nuestro
00:17:19
main, nuestro main
00:17:21
lo vamos a meter en este
00:17:23
paquete que se ha quedado ahí solo abandonado
00:17:25
en ejer 22
00:17:27
ahí
00:17:29
vamos a meter nuestra clase
00:17:30
main, esta tiene
00:17:33
el método main que se va a ejecutar
00:17:37
este es el punto de arranque
00:17:39
de la aplicación, este
00:17:43
bueno pues lo que
00:17:44
ocurre a partir de aquí ya es
00:17:57
lo real, el funcionamiento
00:17:59
lo que se está ejecutando, lo real
00:18:02
vale, pues a partir de
00:18:03
aquí que es donde arranca la aplicación
00:18:05
aquí ya tiene que haber pedidos
00:18:07
los pedidos
00:18:09
ya tienen que existir, se supone
00:18:11
que mi aplicación es para
00:18:13
una tienda mía donde
00:18:15
pues yo tengo
00:18:17
mis
00:18:20
lo que pasa es que bueno, aquí no están
00:18:21
los ítems de pedido, vale, aquí es donde
00:18:24
realmente ya empiezan a aparecer los pedidos
00:18:26
y los clientes, aquí tiene que haber pedidos y clientes
00:18:28
vale, pues lo que me dice
00:18:31
la aplicación es que antes de hacer
00:18:32
nada los haga aparecer, venga
00:18:34
pues dice
00:18:36
vamos a hacer una cosa
00:18:38
yo creo que lo vamos a cambiar un pelinín
00:18:47
vamos a hacer una cosa
00:18:49
para que la aplicación sea más clara,
00:18:58
tenga más sentido.
00:19:00
Esta aplicación lo que va a manejar son clientes
00:19:02
y los clientes tienen dentro sus pedidos, ¿verdad?
00:19:05
Va a manejar clientes
00:19:08
y los clientes son los que tienen dentro sus pedidos.
00:19:09
Pues entonces,
00:19:12
los clientes van a tener que estar en algún sitio.
00:19:13
En condiciones normales,
00:19:16
será en la tabla de una base de datos.
00:19:17
Yo tendré una tabla en mi base de datos cliente,
00:19:20
en principio con líneas vacías,
00:19:23
porque no hay ningún cliente.
00:19:25
luego ya la aplicación
00:19:27
me ofrecerá un menú para insertar cliente
00:19:29
eliminar cliente, lo que sea
00:19:32
y ahí ya irán apareciendo
00:19:33
pero esa tabla tendría que estar
00:19:34
con el espacio físico
00:19:38
para ir metiendo los clientes
00:19:40
o irlos eliminando según los voy dando
00:19:41
de baja de mi base de datos
00:19:44
nosotros no podemos trabajar
00:19:45
con los clientes en la tabla
00:19:47
en la base de datos porque no sabemos
00:19:50
todavía recoger de la base de datos
00:19:52
ni volcar a la base de datos
00:19:54
entonces nuestros clientes donde van a estar
00:19:56
pues en la única estructura
00:19:58
en la que sabemos meter un montón de cosas
00:20:00
que es en el array
00:20:02
pues entonces nuestros clientes
00:20:03
según vayan apareciendo
00:20:05
desapareciendo van a estar
00:20:08
en mi array de clientes
00:20:10
que sería el equivalente
00:20:12
a mi tabla de clientes
00:20:14
la que en un caso real existiría realmente
00:20:15
mi tabla con los clientes y mi aplicación
00:20:18
pues recoge uno
00:20:20
lo quita, lo que sea
00:20:22
¿Vale? Como yo no creo la tabla
00:20:23
Porque no sé hacerlo
00:20:26
Pues mis clientes van a estar aquí
00:20:27
Aquí van a estar
00:20:30
Mis clientes
00:20:32
¿Vale? Entonces yo aquí
00:20:33
O hago el import
00:20:37
O le pongo su nombre completo
00:20:39
¿Verdad?
00:20:41
¿Cuál es el nombre completo de la clase cliente?
00:20:44
El nombre completo
00:20:48
De la clase cliente es
00:20:49
Ejer22.model.cliente
00:20:51
Ese es el nombre completo
00:20:53
entonces si yo quiero hacer un array de clientes
00:20:54
pues tengo que poner aquí el nombre de la clase
00:20:59
pero como ya sabemos
00:21:01
como esto deja el código muy feo
00:21:05
y pierdo yo un poco porque imaginaos que el paquete
00:21:08
es larguísimo el nombre, pues me quedan ahí unas líneas
00:21:11
como esto es un poco feo
00:21:14
pues ponemos el import y ya está
00:21:16
entonces al poner el import decimos
00:21:19
oye, usa cliente
00:21:24
por su nombre corto, no por el largo
00:21:26
vale, pues ya está, más bonito
00:21:28
aquí van a estar mis clientes
00:21:29
esta es mi caja
00:21:32
de clientes, pero bueno
00:21:34
la caja ahora mismo no tiene
00:21:36
ni los cartones de los lados, con lo cual no la puedo usar
00:21:37
es imposible
00:21:40
recordad que lo primero que tenemos que hacer es instanciar
00:21:41
el array
00:21:44
instanciar el array, que es ya poner los cartoncitos
00:21:44
vale
00:21:48
pues venga, vamos a instanciar el array
00:21:49
aquí nos viene
00:21:51
el primer problema
00:21:57
y único
00:21:59
de los arrays
00:22:00
porque además son todos maravillosos
00:22:03
pero este problema da mucha guerra
00:22:04
por eso es por lo que luego se usan colecciones de datos
00:22:07
como veremos más adelante
00:22:09
pues aquí nos damos de golpe de nuevo con el
00:22:10
único problema de los arrays
00:22:12
que es, desde el momento en que tú
00:22:14
instancias una caja array para meter
00:22:17
cosas, me tienes que dar el tamaño
00:22:19
y ese tamaño va a ser fijo
00:22:21
que me dices crear una caja
00:22:22
de un metro cuadrado y luego solamente
00:22:25
vas a usar un imperdible
00:22:27
pues lo siento
00:22:29
no vas a poder cambiar de caja nunca
00:22:30
una caja de un metro cuadrado con un imperdible
00:22:33
ese es el problema de los arrays
00:22:35
vale, pues aquí tenemos que tomar una decisión
00:22:36
que es, voy a hacerla
00:22:39
lo suficientemente grande
00:22:41
para que quepa el número máximo
00:22:43
de clientes que yo aspiro a tener
00:22:45
que yo aspiro a tener
00:22:47
el anunciado me dice que asuma que como
00:22:48
mucho voy a tener 100
00:22:51
que luego resulta que
00:22:52
tengo más de 100 clientes
00:23:00
pues esta aplicación no me va a funcionar
00:23:01
y voy a tener que irme al código
00:23:04
a cambiarla
00:23:06
lo cual querríamos evitar
00:23:07
siempre
00:23:10
una aplicación no tiene sentido que cuando
00:23:11
pasen cosas en la vida real
00:23:14
yo tenga que ir al código a cambiarla
00:23:15
recompilarla, volverla a desplegar en los
00:23:18
servidores, pues no
00:23:20
tendría que poder adaptarse sin necesidad
00:23:21
de escribirla de nuevo
00:23:24
pues esta, como yo pase de 100 clientes
00:23:25
no se va a poder adaptar
00:23:28
a menos que hagamos alguna cosa extraña
00:23:30
aquí dentro para intentar apañarlo
00:23:33
que la haremos también
00:23:35
claro, tendríamos que
00:23:36
cada vez que
00:23:39
se inserta el cliente
00:23:41
decir
00:23:43
si tengo
00:23:44
más de 100 clientes
00:23:48
pues en ese momento hacer un array nuevo
00:23:49
¿vale?
00:23:51
venga, pues la caja está
00:23:53
y ahora ya viene mi aplicación
00:23:54
con las funcionalidades que quiero hacer
00:23:57
esta aplicación va
00:23:59
va a ser pues mostrar un menú con las cosas que yo quiero hacer
00:24:00
entonces, pues mientras
00:24:04
la opción sea distinta de la de salir
00:24:15
y la opción de salir
00:24:19
pues es esta, entonces ya hacemos lo que haya que hacer
00:24:23
aquí tendré yo el resto de opciones del menú
00:24:30
que ahora las decidimos, las acordamos, pero ya sabemos que la estructura del menú
00:24:34
Será esta, leo la opción
00:24:38
Con lo cual me falta el escáner
00:24:40
Por aquí, vale
00:24:47
Y ahora ya en función de la opción
00:25:04
Pues ya hago una cosa
00:25:08
O hago otra
00:25:13
Aquí, ¿que os gustan los break?
00:25:14
Pues dos puntos
00:25:23
¿Que no os gustan?
00:25:25
Flechita
00:25:31
Vale
00:25:32
En el caso cero, será en el que
00:25:44
Decimos adiós y ya está
00:25:49
O volcamos en la
00:25:50
Aquí en el caso 0 salir
00:25:54
Volcaríamos los datos en la base de datos
00:25:56
Para no perderlos
00:25:58
Pero claro, eso no lo sabemos hacer
00:26:00
Así que volcaríamos en base de datos
00:26:01
Los datos de la aplicación
00:26:06
Pero esta parte
00:26:10
Pues no la podemos hacer
00:26:16
Con lo cual los datos se van a perder
00:26:17
En cuanto le demos a salir los datos se van a perder
00:26:18
Al menos pues nada
00:26:20
Ya está
00:26:22
Caso 0
00:26:27
vale, pues vamos a ver
00:26:29
una opción
00:26:32
imprescindible, lógicamente
00:26:34
es insertar cliente
00:26:36
porque la aplicación
00:26:38
cuando arranque, va a arrancar
00:26:43
sin clientes
00:26:46
va a arrancar sin clientes
00:26:47
claro, si nosotros ya supiéramos
00:26:48
volcar de una base de datos, al arrancar
00:26:52
la aplicación, podríamos leer de la base de datos
00:26:54
llevarlo a la RAI, pero no sabemos
00:26:56
con lo cual la aplicación va a arrancar sin clientes
00:26:57
Luego lo primero que vamos a hacer
00:27:00
Va a ser insertar un cliente
00:27:02
Vale, insertar un cliente
00:27:04
Que sería el caso 1
00:27:06
Aunque no sé exactamente lo que dice aquí
00:27:07
La vamos a ir orientando
00:27:12
Para que sea un poquito más
00:27:14
Más didáctica
00:27:15
Vale, pues en el caso 1
00:27:18
Insertar cliente
00:27:20
Habrá que pedir los datos
00:27:22
Y meterlo en el array
00:27:23
Venga, nif
00:27:27
Aquí
00:27:31
guardaremos el nif del cliente
00:27:35
y lo mismo con el nombre
00:27:41
vale, el cliente
00:27:51
la primera vez cuando lo metemos
00:28:06
en la base de datos
00:28:08
cuando digo base de datos me estoy refiriendo
00:28:10
a nuestro array, claro, pero no hay base de datos
00:28:12
cuando lo metemos es un cliente que estamos
00:28:14
dando de alta, por ahora
00:28:16
ni tiene pedidos ni tiene nada
00:28:18
luego ya haremos una
00:28:19
funcionalidad que sea
00:28:22
hacer un pedido para un cliente
00:28:23
que ya existe, pero con esta
00:28:26
es insertar un cliente, dar de alta un cliente
00:28:28
nuevo, sin pedidos y sin nada
00:28:30
¿vale? sin pedidos y sin nada
00:28:32
entonces no hago
00:28:34
pedidos, ¿vale? repito
00:28:36
ya haremos opciones del menú más
00:28:38
adelante para insertar
00:28:40
un pedido para un cliente que ya
00:28:42
existe, entonces de hecho
00:28:44
lo podemos llamar a esto más que
00:28:46
insertar, pues registrar cliente
00:28:48
por si así lo entendemos mejor
00:28:50
registrar cliente
00:28:51
vale, pues entonces
00:28:53
nuestro cliente nuevo
00:28:56
Tiene el constructor que hemos hecho
00:28:57
Que es el único que yo puedo usar
00:29:02
Porque es el único que he hecho
00:29:04
Le pasamos el nif
00:29:06
Le pasamos el nombre
00:29:08
Y me pide también el array de pedidos
00:29:10
¿Verdad?
00:29:13
Porque el constructor
00:29:13
El constructor de cliente
00:29:14
Yo lo tengo hecho
00:29:18
Para pedirle las tres cosas
00:29:20
¿Vale?
00:29:22
Entonces puedo usar este mismo constructor
00:29:25
Y aquí pasarle null
00:29:27
por ejemplo, y ya está ahora mismo
00:29:30
cliente sin pedidos
00:29:31
su array null
00:29:33
¿vale? por ejemplo
00:29:35
que este null queda muy feo
00:29:37
me puedo
00:29:46
hacer otro constructor, recordad que
00:29:48
constructores
00:29:50
ya vimos que podíamos tener muchos
00:29:51
pero tenían que distinguirse
00:29:54
por los argumentos
00:29:56
que había aquí, entonces podemos
00:29:58
hacernos otro constructor
00:30:02
otro constructor que me
00:30:03
pida solamente el nif y el nombre
00:30:08
Valor a mi clase cliente tiene dos
00:30:10
Yo cada vez que creo un cliente
00:30:24
Elijo cual de los dos uso
00:30:26
Ahora en este uso
00:30:28
Que estoy haciendo me interesa este
00:30:30
Porque yo solo tengo los datos
00:30:31
Nif y nombre, array no lo inicializo
00:30:34
No lo inicializo, el array de pedidos
00:30:36
Ni lo inicializo porque no lo tengo
00:30:38
Con lo cual se quedará
00:30:40
Con el valor por defecto de un array
00:30:44
Que es null porque es un objeto
00:30:46
Null, su valor por defecto
00:30:47
Entonces este constructor se distingue de este
00:30:48
porque a este solo se le pasan
00:30:52
dos cosas, sin embargo
00:30:54
a este se le pasan tres
00:30:56
son perfectamente distinguibles
00:30:57
entonces, si uso el de abajo
00:31:00
pues entonces
00:31:04
este null ya no hace
00:31:06
falta que se lo pase
00:31:08
y queda como más bonito el código
00:31:09
solo porque quede bonito, da igual
00:31:12
da igual que lo haga de una manera o de otra, estoy haciendo lo mismo
00:31:14
pero así como que queda más bonito
00:31:16
porque poner un null ahí
00:31:18
es un logo como metido así a calzador
00:31:19
Bueno, es que hay que meterlo en el array
00:31:21
Hemos terminado
00:31:34
Claro, esto es como un objeto temporal
00:31:35
Lo que importa es que ahora va al array
00:31:37
¿Vale?
00:31:39
Vale, por ahora hemos creado este objeto cliente
00:31:42
Pero no hemos terminado todavía
00:31:44
De hacer esta opción
00:31:46
Vale, entonces repito
00:31:47
Vale, repito
00:31:49
Usando el otro constructor y poniendo null
00:31:58
Estaría haciendo lo mismo
00:32:01
pero así mejor
00:32:02
ahora, este cliente que hemos creado
00:32:04
yo no lo puedo dejar ahí suelto
00:32:08
primero, porque
00:32:10
sería una variable local
00:32:12
a este bloque
00:32:14
con lo cual en cuanto este bloque ha terminado de ejecutarse
00:32:15
ese cliente ha desaparecido
00:32:18
¿para qué lo creo ahí?
00:32:19
y segundo, porque mis clientes no van a estar como variables
00:32:21
sueltas, si estuvieran como variables
00:32:24
sueltas serían inmanejables
00:32:26
mis clientes tienen que estar metidos
00:32:28
en esta caja, que para eso la he creado
00:32:30
tienen que estar metidos ahí
00:32:32
inicialmente esta caja tiene sus 100 posiciones
00:32:33
pero hay nul en cada una de ellas
00:32:37
pues entonces cada cliente tendrá que ir
00:32:39
a la primera que quede libre
00:32:43
entonces, ¿cuál es la primera que queda libre?
00:32:45
pues no lo sé, vamos a necesitar una variable adicional
00:32:49
que me vaya informando de eso
00:32:52
es decir, voy a necesitar una variable
00:32:53
por ejemplo, siguiente posición libre
00:32:58
inicialmente es cero, verdad
00:33:02
cuando mi aplicación
00:33:04
arranca, este array
00:33:07
tiene sus huecos
00:33:09
pero no tiene ningún objeto en ninguna de ellas
00:33:10
luego la siguiente posición
00:33:13
libre inicialmente es cero
00:33:14
inicialmente es cero
00:33:16
y ahora
00:33:18
este cliente de aquí
00:33:19
este cliente de aquí
00:33:22
¿dónde se tiene que colocar?
00:33:24
pues se tiene que colocar en la siguiente
00:33:27
posición libre
00:33:29
Ahí se tiene que colocar
00:33:30
Ese cliente
00:33:33
¿Vale?
00:33:34
Claro, ¿y qué me faltaría por hacer?
00:33:37
Incrementarla
00:33:40
Que la puede incrementar
00:33:41
Aquí aparte
00:33:43
O si quiero ahorrar una línea de código
00:33:44
Pues la incremento aquí
00:33:51
Que ya sabemos lo que significa esto
00:33:52
Que es primero usa la variable para lo que sea
00:33:56
En este caso para darme la posición
00:33:58
Y luego después
00:34:00
Y luego después déjala incrementada
00:34:01
No, porque primero coloco en la que toque
00:34:03
Y luego lo dejo incrementada para la siguiente
00:34:10
Es que
00:34:12
Si lo pusieras antes
00:34:15
Te daría primero
00:34:18
Menos uno y trataría de colocarlo en la menos uno
00:34:20
Claro, porque está en cero
00:34:22
No, menos uno no, perdón
00:34:25
Primero te incrementaría, te colocaría en la uno
00:34:29
Con lo cual la cero se la saltaría
00:34:31
vale, te coloca en la que toca
00:34:32
y te lo deja incrementado para la siguiente
00:34:37
vale, pues insertar cliente
00:34:39
ya está
00:34:43
entonces hombre, siempre si uno hace una aplicación
00:34:43
mínimamente decente, debería dar el
00:34:46
ok, cliente
00:34:48
registrado
00:34:52
ala, ya está
00:34:53
cliente registrado
00:34:56
este objeto
00:35:00
o sea, esta referencia
00:35:03
desaparece porque es una variable local
00:35:05
Pero no pasa nada porque el cliente
00:35:08
Se ha quedado apuntado por el array
00:35:10
Se ha quedado apuntado
00:35:12
Entonces no pasa nada
00:35:13
¿Vale?
00:35:14
¿Vale?
00:35:26
Entender lo que
00:35:32
Hacemos en cada momento
00:35:32
Vale, con esto
00:35:34
Con esta sentencia de aquí
00:35:44
Hemos creado el objeto cliente
00:35:46
Con sus dos datos, nif, nombre
00:35:50
Y el array de pedidos, null
00:35:52
no tiene nada, hemos creado nif, nombre
00:35:54
y array de pedidos, esto hemos
00:35:56
creado, array de pedidos a null, aquí hay un
00:35:58
null, porque no hay ningún array
00:36:00
hemos creado esto, esto
00:36:01
apuntado
00:36:04
por c
00:36:05
por c, vale, ahora
00:36:07
¿qué tenemos? tenemos
00:36:10
este array con posiciones
00:36:12
con 100 posiciones
00:36:14
en particular, aunque
00:36:16
por ahora, todas apuntando a null
00:36:18
todas apuntando a null inicialmente
00:36:20
vale, pues con esta sentencia de aquí
00:36:22
con esta sentencia
00:36:25
lo que hemos hecho es
00:36:28
oye tú, posición 0
00:36:30
que es la que tocaba en este caso
00:36:32
si hemos hecho registrar clientes
00:36:34
7 veces después, pues estaremos en esta
00:36:37
pero bueno, la primera vez que hemos entrado
00:36:39
oye tú, posición 0
00:36:40
de clientes, posición 0
00:36:42
deja de apuntar a null
00:36:44
y empieza a apuntar a este
00:36:47
eso es lo que hemos hecho con esta sentencia
00:36:50
¿verdad? hemos dicho
00:36:53
oye tú, posición 0 de clientes
00:36:55
deja de apuntar al null que estabas apuntando
00:36:57
y empieza a apuntar
00:36:59
a lo que apunta C
00:37:01
es lo que estamos diciendo, empieza a apuntar a lo que apunta
00:37:02
C, a magnífico
00:37:05
ahora ya el objeto
00:37:07
cliente, el objeto que hay que conservar
00:37:08
el objeto verdadero y real
00:37:11
se ha quedado apuntado por 2, por C
00:37:12
y por el array, que es el que importa
00:37:15
pero también se ha quedado por C
00:37:17
ahora ya cuando este bloque termina de ejecutarse
00:37:19
cuando ya sacamos el system out
00:37:23
y el bloque termina de ejecutarse
00:37:24
esta c como es variable local
00:37:26
desaparece, pero es que no pasa nada
00:37:28
esta desaparece
00:37:30
pero nos da igual, el cliente no ha desaparecido
00:37:32
el cliente se queda
00:37:34
apuntado por esta
00:37:36
lo único que ha desaparecido es la variable c
00:37:37
pero es que esta no nos importa que desaparezca
00:37:40
la siguiente vez que
00:37:42
demos a registrar
00:37:44
volverá a aparecer otro c para otro
00:37:45
bueno, está claro lo que hemos hecho con esta
00:37:49
con registrar cliente, ¿verdad?
00:37:57
fundamental esta variable
00:38:02
fundamental que esta variable exista, porque es la que me va a decir
00:38:05
en qué posición de la RAI coloco cada vez, venga, vamos a parar unos minutos
00:38:09
...
00:38:13
- 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:
- 9
- Fecha:
- 15 de diciembre de 2025 - 17:19
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 38′ 24″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 324.15 MBytes