20250116 RepasoHerencia_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:
La funcionalidad de agregar pedido a un cliente dado su nombre, claro, porque, bueno, no, su clave primaria, la clave primaria de los clientes, ¿cuál va a ser? El DNI es lo que asumimos que es único. Vale, pues primero hay que entender bien, claro, qué es lo que nos están pidiendo.
00:00:00
Pues nos van a dar el DNI de un cliente
00:00:15
Y vamos a ponerle un pedido nuevo
00:00:18
Luego ya primero nos hacemos una idea
00:00:20
Antes de empezar a teclear
00:00:22
De qué es lo que queremos hacer
00:00:24
Vale, pues me van a dar un DNI
00:00:26
Yo tengo un montón de clientes aquí metidos en esta caja
00:00:29
Un montón
00:00:32
Tendré que buscar en la caja hasta que lo encuentre
00:00:33
Vale
00:00:36
Una vez que he encontrado a ese cliente
00:00:37
¿Qué tengo que hacer?
00:00:39
Pedir los datos para un pedido nuevo
00:00:41
y meterlo en la caja de pedidos
00:00:43
de ese cliente.
00:00:46
¿La caja de pedidos de ese cliente cuál es?
00:00:47
Su array de pedidos.
00:00:50
Como todos los clientes
00:00:52
tienen un array
00:00:53
de pedidos, pues por eso lo hemos declarado
00:00:56
aquí arriba en lugar de hacerlo aquí o aquí.
00:00:58
Entonces ya nos hacemos esa primera idea
00:01:00
de qué es lo que habrá que hacer.
00:01:01
Pues pedir un DNI, pedir los datos de un pedido,
00:01:03
buscar en mi array de clientes
00:01:06
hasta que encuentre el que coincide
00:01:08
con el DNI y cuando
00:01:09
lo he encontrado, hago lo que tenga que hacer
00:01:11
para que ese cliente
00:01:14
incorpore el pedido
00:01:15
que acabo de solicitar
00:01:17
en la caja. Bueno, ya me hago una idea de que
00:01:19
tendría que hacer un for para buscar por clientes
00:01:21
y dentro de ese for, una vez
00:01:24
que encontré el objeto, ya meto.
00:01:26
Vale. Una primera
00:01:28
idea en la cabeza tengo que tener de lo que quiero
00:01:30
hacer. Y si para tener
00:01:32
esa primera idea, antes en un papel
00:01:34
me tengo que hacer una especie de diagramita,
00:01:35
pues me lo hago. Pero ya tengo una
00:01:38
primera idea de lo que hay que hacer.
00:01:39
Vale, pues ahora ya en este caso que se va a traducir en pocas líneas, pues empezamos a escribir ya lo bestia. Sin diagramitas y sin nada. Venga, pues caso 3. Vamos a, bueno, yo aquí ya he escrito. Primero vamos a pedir los datos del pedido nuevo.
00:01:41
Le digo, venga, pues dame los datos del pedido nuevo.
00:01:58
Me instancio un nuevo objeto pedido con esos datos.
00:02:04
¡Hala!
00:02:11
Estas dos primeras líneas son para el nuevo pedido.
00:02:12
Ya tengo un nuevo objeto pedido con los datos que acabo de solicitar.
00:02:17
Ahora, ¿qué tengo que hacer con este objeto pedido?
00:02:22
meterlo en el array
00:02:26
con ese objeto pedido
00:02:28
meterlo en el array de quién
00:02:30
de un objeto cliente, claro
00:02:32
vale, y ese objeto cliente
00:02:33
cuál va a ser, para meter esto
00:02:37
en un array de un objeto cliente
00:02:39
tengo que tener ese objeto cliente
00:02:41
para poder acceder a su array y meterlo dentro
00:02:42
pues ese objeto cliente
00:02:44
será uno de estos
00:02:46
uno de estos
00:02:48
cuál va a ser, aquel cuyo DNI
00:02:49
sea igual al que me digan ahora
00:02:52
pues venga, pido el DNI
00:02:54
dime el DNI
00:02:56
para que localice yo ese objeto
00:02:58
ya tengo el DNI
00:03:00
y ahora ya hago lo que ya tenía
00:03:02
vislumbrado en la cabeza que tenía que hacer
00:03:04
me pongo a recorrer mi array
00:03:06
donde están todos
00:03:08
voy uno por uno
00:03:09
oye
00:03:11
este es
00:03:12
aquel cuyo DNI
00:03:16
es igual al que me has pasado
00:03:18
si, es este
00:03:20
este es igual
00:03:22
Pues ahora es cuando digo
00:03:23
Vale, ¿qué hago con este
00:03:26
Cliente? Pues este
00:03:28
Cliente tiene un array pedidos
00:03:30
Que es este de aquí
00:03:31
Y a este
00:03:33
Array pedidos tendré que
00:03:36
Agregarle este pedido nuevo
00:03:38
Para agregar un pedido nuevo a un array
00:03:39
Pues tengo todo el rollo este de
00:03:42
Algún día
00:03:44
Encontraré la llave
00:03:48
Aquí
00:03:49
vale, pues a este array de pedidos
00:03:50
tendré que ver como le meto
00:03:56
a este array este nuevo pedido
00:03:58
luego aquí entre llaves todo el rollo de siempre
00:04:00
un auxiliar con una posición más
00:04:03
copio uno
00:04:05
en otro
00:04:07
etcétera, vale, pues lo podría hacer
00:04:07
aquí y ya está, ¿no?
00:04:10
podría hacer todo ese
00:04:13
rollo de siempre, me voy a hacer
00:04:14
un array de pedido
00:04:17
una array auxiliar
00:04:18
que tenga una posición más
00:04:31
que el array de pedidos
00:04:36
de este
00:04:38
vale, entonces ahora lo de siempre
00:04:41
en este array auxiliar
00:05:11
copio
00:05:13
lo que está en el viejo
00:05:14
para
00:05:17
cada posición
00:05:20
y
00:05:25
mientras si sea menor
00:05:26
que
00:05:30
cl.getpedidos
00:05:31
.
00:05:35
length
00:05:38
incrementando i
00:05:40
pues entonces cópiame en el auxiliar
00:05:44
cópiame en el auxiliar
00:05:46
lo que hay en este
00:05:51
lo que hay en este
00:05:53
getpedidos
00:06:00
vale, una vez que
00:06:01
has terminado de copiar
00:06:04
lo que había en el de pedidos
00:06:05
del cliente CL
00:06:07
ahora ya en la
00:06:09
extra que hemos puesto en auxdp
00:06:12
que la extra que hemos
00:06:14
puesto estará aquí
00:06:16
auxdpedidos.led
00:06:17
menos uno
00:06:21
en la extra copia el nuevo
00:06:21
copia el nuevo que acabas
00:06:24
de crear
00:06:30
y ahora
00:06:30
ya todo esto sigue estando dentro del if
00:06:34
y ahora ya
00:06:36
sustituye
00:06:39
cl.set
00:06:40
pedidos, ahora
00:06:42
que los pedidos del cliente
00:06:44
sean ahora
00:06:46
ausdp
00:06:48
y se acabó el if
00:06:49
¿vale? bueno
00:06:52
pues esto en principio
00:06:54
estaría bien
00:06:56
¿qué hemos hecho? localizar
00:06:57
primero en todo el array de clientes
00:07:00
hemos ido uno por uno
00:07:02
hasta que hemos encontrado
00:07:03
aquel cliente cuyo DNI
00:07:06
coincide con el que me han dado
00:07:08
vale, una vez que lo he encontrado
00:07:09
ya sabemos que lo que nos
00:07:12
falta por hacer es
00:07:14
al array de pedidos de ese cliente
00:07:15
que es esto, que lo saco del get
00:07:18
verdad, porque get
00:07:20
pedidos me va a devolver esto
00:07:22
este array
00:07:24
bueno, pues al array de pedidos de este
00:07:24
cliente
00:07:28
hago un auxiliar con
00:07:30
una posición más
00:07:32
copio en el auxiliar lo que hay
00:07:33
en el array de pedidos de ese cliente uno por uno
00:07:36
y en la extra del auxiliar copio el nuevo
00:07:38
y una vez que ya lo he hecho
00:07:41
lo último que me falta es
00:07:43
se me ha borrado el set que he hecho antes
00:07:45
una vez que ya lo he hecho
00:07:48
lo que me faltaba era
00:07:50
que ahora ya mi cliente CL
00:07:52
voy a modificarle su array de pedidos
00:07:55
mediante el set
00:07:57
para que ahora sea el auxiliar que he puesto
00:07:58
en el for no he puesto llaves
00:08:02
porque solo tiene una sentencia dentro
00:08:05
que es live, solo tiene esa
00:08:06
y este ya sería el break
00:08:07
vale
00:08:09
pues esto en principio estaría bien
00:08:11
en principio
00:08:14
los he localizado todos
00:08:16
y he añadido cuando he encontrado el que coincide
00:08:18
el DNI, le he añadido
00:08:20
el pedido p
00:08:22
a su array de pedidos
00:08:23
y le he puesto ese nuevo array
00:08:25
vale, lo que pasa es que
00:08:27
tenemos que empezar a acostumbrarnos
00:08:30
a no hacer códigos
00:08:31
tan largos, hacerlos más modulares
00:08:34
porque un main
00:08:35
con todas las funcionalidades ahí metidas
00:08:37
en mil líneas
00:08:39
pues es un rollo, si tengo
00:08:41
un único código fuente con todo
00:08:43
hecho ahí, cualquier modificación
00:08:45
que haga para cambiar
00:08:47
mi programa, para adaptarlo a otra situación
00:08:49
seguramente
00:08:52
esa modificación va a caer ahí
00:08:53
en ese main que es el que lo tiene casi todo
00:08:55
luego voy a tener que recompilar
00:08:57
todo esto otra vez, etc.
00:08:59
Entonces, mejor si lo voy separando por partes.
00:09:00
Entonces, todo este código que hemos hecho aquí, todo esto, claro, ese código que tengo yo ahí es para agregar un objeto pedido a mi objeto cliente CL.
00:09:05
Bueno, pues voy a hacerme en la clase cliente un método al que yo le pase un objeto pedido y lo agrega a la RAI.
00:09:17
Y, hombre, muchísimo mejor, ¿no?
00:09:23
Porque si es una funcionalidad interesante que voy a usar a
00:09:26
menudo, la de a un cliente agregarle un pedido,
00:09:31
pues voy a ponerla en la clase cliente.
00:09:35
Vale.
00:09:38
Entonces, una vez que decidimos que eso está muy bien,
00:09:39
la parte concreta de a un objeto cliente agregarle un pedido,
00:09:41
esa parte, separarla y llevarla a un método,
00:09:45
ahora ya pensamos, ¿a dónde lo llevo?
00:09:49
bueno, podríamos llevarlo a la clase cliente
00:09:51
si lo llevamos
00:09:54
a la clase cliente
00:09:56
tendremos aquí un método
00:09:57
que sería este
00:09:59
lo llevamos a la clase cliente
00:10:03
la clase cliente, me hago un método
00:10:06
agregar pedido
00:10:08
con un objeto pedido
00:10:09
y me hace exactamente
00:10:12
lo que yo he puesto aquí
00:10:14
esto mismo
00:10:15
me hace exactamente eso
00:10:17
entonces
00:10:20
me hace un auxiliar con una posición más
00:10:25
copia lo que hay en la propiedad pedidos
00:10:28
aquí lo único es que no hace falta que lo
00:10:31
la coja con el get porque estoy en la misma clase
00:10:34
luego tengo acceso a pedidos
00:10:36
aquí cuando lo hacía en main la cogía con el get
00:10:38
pero es la única diferencia, es un copia y pega
00:10:42
de ese código en el otro, es un copia y pega
00:10:44
vale, pues entonces este método auxiliar
00:10:46
en la clase cliente
00:10:49
le pasa un pedido
00:10:51
y lo agrega al array
00:10:52
de la manera en que sabemos agregar
00:10:54
que es, solo hay una
00:10:57
posible, solo hay una
00:10:58
creando uno nuevo con una posición más
00:11:00
copiando lo viejo en el nuevo
00:11:02
en la adicional
00:11:05
en la posición extra, copiar el pedido
00:11:06
nuevo y sustituir
00:11:09
vale, pues entonces hemos ganado mucho
00:11:10
hemos ganado mucho
00:11:13
porque ahora ya cualquiera
00:11:16
que quiera agregar un pedido al cliente lo puede hacer
00:11:18
llamando a este método, cualquiera
00:11:20
desde cualquier clase
00:11:22
desde cualquier aplicación, desde cualquier parte
00:11:24
nosotros en particular desde nuestro
00:11:26
main era justo lo que queríamos hacer
00:11:28
luego todo esto
00:11:30
ya no lo necesito ahí
00:11:31
que me emborrona mi código y me hace un main
00:11:34
feísimo, horrorosamente largo por el cual
00:11:36
me despedirían, ahora yo ya
00:11:38
lo tengo más fácil, porque digo
00:11:40
Claro, digo, oye
00:11:42
CL, acabo de encontrar
00:11:44
El cliente al que quiero
00:11:46
Agregar el objeto P
00:11:48
Ya está, pues, ala, estupendo
00:11:50
Cliente CL
00:11:53
Agrégate el objeto
00:11:54
P que acabo de crear
00:11:57
Y se acabó
00:11:59
¿Vale? En lugar de todo esto
00:12:01
Pues esto
00:12:03
¿Vale?
00:12:03
Vale
00:12:07
Eh
00:12:08
ahora
00:12:09
si nos seguimos haciendo preguntas decimos
00:12:11
oye, a ver, cuidado
00:12:14
yo he hecho el método en la clase
00:12:15
cliente, agregar pedido
00:12:18
en cliente, luego cliente
00:12:20
online y cliente tienda
00:12:22
lo tienen tal cual clavado ese método
00:12:23
entonces en
00:12:26
tiempo de ejecución no olvidemos
00:12:28
que en tiempo de
00:12:29
ejecución la máquina virtual mira este
00:12:32
objeto si es cliente tienda
00:12:33
o es cliente online
00:12:36
si pero lo va a tener porque está heredado
00:12:36
entonces la máquina virtual
00:12:40
o sea el compilador
00:12:43
está tan tranquilo porque el compilador
00:12:45
lo que ha mirado es que CL
00:12:47
al estar declarado como cliente
00:12:49
tenga en la clase client
00:12:51
un método agregar pedido y lo tiene
00:12:53
el compilador está tranquilo
00:12:55
ahora cuando ejecutamos esto en la máquina virtual
00:12:56
la máquina virtual ya sabemos que no mira eso
00:12:59
sino lo que mira es CL
00:13:01
como te has instanciado
00:13:03
de qué tipo eres en la memoria RAM
00:13:05
en este momento en concreto
00:13:06
eres cliente tienda, eres cliente online
00:13:08
porque si eres cliente tienda me voy
00:13:10
al agregar pedido
00:13:12
de cliente tienda
00:13:15
que no lo tienes, pero si lo tienes
00:13:15
yo no lo veo
00:13:19
pero lo tienes porque es el heredado
00:13:21
tal cual
00:13:23
¿me vale este? pues sí, me vale
00:13:23
pues ahí lo dejo
00:13:26
¿tú eres cliente online?
00:13:27
pues si eres cliente online
00:13:31
al agregar pedido que voy a llamar yo
00:13:33
es al que tengas aquí, que como
00:13:34
no lo veo, pues me voy al de la
00:13:36
superclase, ¿me vale
00:13:38
este? sí, pues ya está, si me
00:13:40
vale, ya no tengo que hacer nada más
00:13:43
¿vale?
00:13:44
claro, lo que pasa
00:13:47
es que ahora nos preguntaríamos, uy pues con esta
00:13:49
modificación que me han hecho
00:13:51
en cliente online
00:13:52
al pedido le vamos a
00:13:54
cambiar de precio
00:13:57
al pedido no vamos a agregarlo sin más
00:13:57
sino que antes de agregarlo
00:14:00
a la RAI, vamos a
00:14:03
modificar el precio que me has introducido
00:14:05
poniéndole el descuento.
00:14:07
¿Eso qué significa?
00:14:08
Que la versión heredada de cliente,
00:14:10
la versión heredada,
00:14:13
a cliente tienda le vale.
00:14:15
No tiene que sobrescribirla.
00:14:17
A cliente tienda le vale.
00:14:19
Pero a cliente online no le vale
00:14:21
esa versión. No le vale. Entonces,
00:14:22
a cliente tienda no le tocamos porque le vale
00:14:25
la versión heredada, pero
00:14:27
a cliente online la sobrescribimos.
00:14:28
¿Vale?
00:14:32
entonces la sobrescribimos, hacemos un copia y pega
00:14:32
y cambiamos lo que sea para él
00:14:35
vale, pues entonces ¿qué era lo que teníamos
00:14:36
que cambiar? pues a este pedido
00:14:47
P
00:14:49
le vamos a hacer el descuento
00:14:50
P.setPrecio
00:14:52
que sea igual
00:14:57
a P.getPrecio
00:14:59
menos
00:15:02
el descuento
00:15:02
el descuento como lo habéis interpretado
00:15:05
si es como cantidad total, como porcentaje
00:15:07
que tendría más sentido, porque si no la cantidad total
00:15:09
que sería entonces
00:15:11
menos el descuento, que será
00:15:13
el porcentaje
00:15:15
eso, getPrecio
00:15:16
uy, por
00:15:19
getPrecio por
00:15:20
el descuento
00:15:25
entre 100, si está
00:15:27
en porcentaje
00:15:29
ala, vale
00:15:30
pues lo único que ha cambiado
00:15:36
de la versión
00:15:39
eh, heredada
00:15:40
a la sobrescrita
00:15:43
es añadir esta línea
00:15:45
pero es que hay que hacerlo
00:15:46
no, el descuento va a ser lo que esté en la variable
00:15:47
porque si luego me cambia en la aplicación
00:15:53
claro, al rato me meten
00:15:55
la opción 5 de cambiar, pues a partir de ahí
00:15:57
los siguientes pedidos van con otro descuento
00:15:59
distinto
00:16:01
lo único que me ha cambiado es esto
00:16:02
pero tengo que sobreescribir
00:16:06
el método entero
00:16:09
esto no es reutilizo parte del código
00:16:09
bañado, no, sobre escribo
00:16:13
borro y hago
00:16:15
de cero, la sobre escritura de métodos
00:16:16
va así, de cero
00:16:19
vale
00:16:20
si no sería un desmadre, un lío
00:16:22
muy lioso
00:16:25
claro, ya sería el colmo
00:16:25
de la complicación
00:16:31
aún así
00:16:31
no es que todo en Java o en cualquier otro lenguaje
00:16:35
esté bien pensado y todo digamos
00:16:37
ah sí, claro, habrá cosas
00:16:39
que hay muchas cosas que se podrían
00:16:41
haber solucionado de otra manera, pero bueno
00:16:43
más o menos casi todo
00:16:45
tiene un cierto sentido
00:16:46
ala, pues ya está
00:16:47
entonces ahora ya, esto en tiempo
00:16:51
de ejecución, si CL
00:16:52
es de tipo cliente tienda, llamará
00:16:54
la versión heredada, pero si
00:16:56
CL es cliente online, llamará la sobrescrita
00:16:58
y todo funcionará
00:17:01
perfectamente y estupendo
00:17:02
¿vale?
00:17:04
aquí sí que no tiene sentido
00:17:06
esta en la
00:17:08
super clase dejarla vacía
00:17:10
porque es que cliente tienda si que la está utilizando
00:17:12
la de mostrar datos es que no
00:17:15
no se la he puesto
00:17:17
pero se la podría poner
00:17:21
y quedaría más bonito
00:17:22
pero vamos
00:17:25
si se la pongo pues bueno voy cogiendo
00:17:26
quizá el hábito de que las anotaciones son algo
00:17:30
que existe y que los compiladores
00:17:33
tienen en cuenta para hacer
00:17:35
comprobaciones y rollos
00:17:37
vale
00:17:38
bueno pues ya está
00:17:40
agregar pedido
00:17:45
y ahora para comprobar
00:17:48
realmente si, bueno
00:17:50
podemos hacer una comprobación rápida por si algo
00:17:51
lo hemos escrito mal
00:17:54
y nos sale null pointer exception
00:17:55
por ahí de todo
00:17:58
insertamos un cliente de tienda
00:17:59
que se llama 11
00:18:02
11
00:18:04
y vive en 11
00:18:06
y ahora vamos a insertar
00:18:07
un cliente online
00:18:09
que se llama
00:18:11
su DNI es 22, se llama 22, paga con 22
00:18:13
y su email es 22, vamos a mostrarlo, a ver si están
00:18:17
realmente, si ahí están
00:18:21
está el primero, que es este, y el segundo, que es este
00:18:22
venga, vamos a agregar un pedido a un cliente, 3
00:18:28
agregamos un pedido a un cliente
00:18:32
pues venga, el pedido 1, con descripción 1
00:18:37
y precio 1
00:18:41
aquí el cliente al 1, 1
00:18:42
no salen errores de ejecución, no tenemos métodos
00:18:46
para verificar que lo esté haciendo bien, pero al menos errores
00:18:48
de ejecución no salen
00:18:50
vale, y voy a
00:18:52
agregar un pedido al otro cliente
00:18:54
por si acaso
00:18:57
el método sobre escrito está mal, pues venga
00:18:57
un pedido 2 con descripción
00:19:00
2, que valga 2
00:19:02
¿a quién? al cliente
00:19:05
2, 2
00:19:06
para verificar DNI
00:19:07
en concreto en la máquina
00:19:14
virtual de Java no lo sé, lo que sí
00:19:16
que hay es servicios web
00:19:18
es decir
00:19:20
un servicio web
00:19:22
es un programita
00:19:24
de Java sencillísimo
00:19:26
que está a disposición de un servidor
00:19:27
y no está pensado para que
00:19:30
acceda a un usuario de un navegador
00:19:32
está pensado para que acceda a un programa
00:19:33
claro, esa es la diferencia
00:19:36
entre aplicación web y servicio web
00:19:38
la aplicación
00:19:40
web está pensada para que un tío sentado
00:19:42
aquí en un navegador interaccione
00:19:44
con ella. El servicio web es lo mismo
00:19:46
en el sentido de que es código, pero
00:19:48
está pensado para que tú lo invoques
00:19:50
desde la aplicación.
00:19:51
Ah, pues ya está.
00:19:54
Entonces, servicios web para verificar
00:19:56
DNI para todos.
00:19:57
En el Ministerio de Interior, seguro que
00:19:58
hay un servicio. Otra cosa es que esté
00:20:02
solo para desarrolladores.
00:20:03
Yo cuando estaba en el Ministerio de Educación
00:20:07
usaba ese servicio web
00:20:08
desde mis aplicaciones para verificar un DNI.
00:20:09
Pero, claro, imagino que hay una serie de permisos y protocolos para...
00:20:12
¿Puedes llamar al servicio web directamente desde código?
00:20:16
Claro, lo llamas desde código, instancias un cliente de servicio web y lo llamas.
00:20:18
En dos líneas, te hace esa función y se acaba.
00:20:23
¿Vale?
00:20:26
No, pero tampoco creo que sea difícil.
00:20:27
Al menos el cálculo de letras y todo eso.
00:20:32
Supongo que no, no.
00:20:34
Vamos, apides a HGPT o la buscas y seguro que es rápida.
00:20:36
Y hacerla uno, no lo sé.
00:20:39
Pues no sé cómo es la función, pero bueno, es difícil.
00:20:41
vale, pues valores de ejecución no tiene
00:20:44
bueno
00:20:47
la 4
00:20:48
la 4 sobre todo en realidad
00:20:52
aquí estaba pensada para que no se os olvidara
00:20:55
programar
00:20:57
pues hacer el máximo, hacer no sé qué, hacer no sé cuántos
00:20:58
sobre lo que hemos hecho en la 3
00:21:01
¿algún problema?
00:21:03
suena amenazador
00:21:07
¿algún problema con esto?
00:21:08
pues me lo cuenta afuera
00:21:12
Vamos afuera
00:21:13
Ay, ni media torta tengo contigo
00:21:14
En fin
00:21:17
A ver
00:21:18
Es que algo no me quedó claro
00:21:20
¿Qué no te quedó claro?
00:21:25
Es que yo lo estaba haciendo
00:21:26
Muy bien
00:21:27
¿No? Fenomenal
00:21:30
A ver, tú hiciste
00:21:32
¿Has hecho un método aparte con agregar pedido
00:21:38
o lo has hecho todo en el main?
00:21:41
Ah, hiciste un método en el main para agregar pedido
00:21:43
Ah, vale, ya has hecho el método en cliente
00:21:50
Para que lo llame un objeto cliente
00:21:55
Y agregue el pedido ahí
00:21:57
Vale, lo único que he hecho es
00:21:58
Como los clientes online
00:21:59
El precio del pedido P
00:22:02
Se va a cambiar por un descuento que tienen aquí
00:22:03
Porque el cliente online tiene un descuento aquí
00:22:07
pues entonces
00:22:10
este método de agregar pedido tal cual no vale
00:22:12
porque antes de meter el pedido en el array
00:22:15
antes de meterlo, le vamos a hacer un descuento
00:22:16
entonces como este método
00:22:19
tal cual no vale porque le falta
00:22:21
agregar ese descuento, en la clase
00:22:23
cliente online
00:22:25
lo he sobrescrito por esta otra versión
00:22:26
que lo único que hace es añadir esta línea
00:22:29
al principio, es lo único que hace
00:22:31
que es una línea
00:22:33
que cambia el precio del pedido
00:22:34
lo cambia con el set
00:22:37
lo cambia a un precio
00:22:38
que descuenta el descuento
00:22:41
ya está, he añadido esa línea
00:22:43
y se acabó, así la versión
00:22:45
de cliente online es distinta
00:22:47
vale, la otra funcionalidad
00:22:49
es para ver si nos acordamos de programar
00:22:53
¿qué nos acordamos?
00:22:54
programar
00:22:57
respirar no necesitas
00:22:57
pero programar
00:23:02
te digo yo que lo vas a necesitar
00:23:04
vale
00:23:05
pues a ver, funcionalidad
00:23:06
cuatro. A ver
00:23:10
si nos vamos de aquí muy a gusto.
00:23:12
Con todo
00:23:15
hecho y entendido.
00:23:16
Para mañana venir con
00:23:18
muchas ganas de...
00:23:19
Enséñanos cosas. Que no aguantamos
00:23:21
más. Venga.
00:23:24
Caso cuatro.
00:23:27
Vale. Cliente que
00:23:32
más ha gastado. En todos sus pedidos.
00:23:34
Así, a lo bestia.
00:23:36
Siempre nos preguntamos, porque
00:23:38
es esa la funcionalidad, ¿no? ¿El cliente qué más ha gastado?
00:23:40
No, es el pedido que más ha costado.
00:23:42
No, el que más se ha gastado
00:23:44
en sus pedidos. Vale.
00:23:46
Entonces, vamos perfilando en nuestra
00:23:48
cabeza la idea de lo que hay
00:23:50
que hacer aquí. Claro, primero
00:23:52
siempre pensamos, ¿necesito datos
00:23:54
de entrada? Pues no.
00:23:56
Mis datos están en mi array
00:23:58
de clientes. Yo tengo que meterme ahí
00:24:00
a operar a ver cuál es el que más ha gastado.
00:24:02
Entonces, no hay que pedirle nada al usuario.
00:24:04
Cuando el usuario
00:24:07
de la opción 4, no se le va
00:24:07
a pedir nada, simplemente se le va a decir el que más ha gastado
00:24:10
es Pepito. Vale.
00:24:12
Primera cosa.
00:24:14
Sí, ahora
00:24:16
ya hemos perfilado
00:24:17
eso primero, que no hay que pedirle nada,
00:24:20
afortunadamente. Ahora, ¿qué es lo que tenemos que hacer?
00:24:21
Un máximo.
00:24:24
Un máximo de algo siempre implica
00:24:26
recorrer un conjunto
00:24:28
de datos para ver cuál de ellos
00:24:29
es máximo en algo.
00:24:31
¿Vale? Entonces, hemos
00:24:34
identificado, hay que hacer un máximo, luego
00:24:35
lo siguiente es identificar cuál es
00:24:37
mi conjunto de datos en el cual
00:24:39
tengo que buscar el máximo
00:24:41
mi conjunto de datos en el cual tengo que
00:24:42
buscar el máximo es mi cajita de clientes
00:24:45
vale
00:24:48
pues tendré que recoger
00:24:48
mi caja de clientes
00:24:51
a ver uno por uno
00:24:53
a ver, podemos partir
00:24:55
de partida que el gasto máximo es
00:24:57
cero, porque asumimos que gastos negativos
00:24:59
no hay, gasto máximo es cero y ahora voy cliente por
00:25:01
cliente
00:25:03
para cliente cero
00:25:04
¿has gastado más que el máximo?
00:25:06
si actualizo, no, no actualizo
00:25:08
ese es el algoritmo de siempre
00:25:11
bueno, pues una vez que lo tenemos
00:25:13
perfilado ya empezamos a programarlo
00:25:14
vale, el resultado de
00:25:16
mi
00:25:18
donde estoy, aquí
00:25:19
el resultado
00:25:22
de mi algoritmo tiene que ser
00:25:24
encontrar un objeto cliente
00:25:27
que sea el que más se haya gastado, este
00:25:29
vale, inicialmente
00:25:32
no lo tengo, null
00:25:35
porque cuando ya lo tenga
00:25:36
lo que tendré que mostrar será
00:25:39
simplemente esto, claro
00:25:40
el cliente que más
00:25:42
ha gastado y al que tienes que darle
00:25:46
una cesta de navidad
00:25:49
es
00:25:51
a mi
00:25:51
que me gasto mucho en gilipolleces
00:25:55
que más ha gastado
00:25:57
es
00:25:59
clmax.getNombre
00:25:59
y te dice
00:26:05
si y además di si es de tienda o online
00:26:09
vale, primero mostramos el nombre
00:26:12
o sea, nos falta por supuesto
00:26:14
toda la parte de calcularlo de verdad
00:26:16
pero perded
00:26:17
si no lo habéis perdido ya, perded la idea
00:26:19
de que se programa en secuencia
00:26:22
no se programa en secuencia
00:26:24
no, se programa por
00:26:25
iteraciones
00:26:28
aproximaciones sucesivas
00:26:28
uno se va haciendo su esquemita
00:26:31
su estructura, su... y va rellenando
00:26:33
las cosas, porque eso es lo que le da
00:26:36
sentido a lo que está haciendo
00:26:37
vale, pues nosotros en algún momento
00:26:39
averiguaremos quién es ese, en algún momento
00:26:41
lo averiguaremos, pero cuando ya lo
00:26:43
tengamos, mostraremos
00:26:45
su nombre
00:26:47
y además tenemos que ver si es tienda
00:26:49
online, pues
00:26:51
pues no sé, CL máximo está declarado
00:26:53
como cliente sí o sí, ¿cómo puedo
00:26:55
saber además cómo está instanciado?
00:26:57
claro, con el operador de ayer
00:27:00
pues hombre, vamos a ver
00:27:01
si este tío
00:27:03
se instanció
00:27:05
como
00:27:08
cliente
00:27:09
tienda, pues
00:27:12
entonces le dices aquí
00:27:16
es de tienda
00:27:18
para ya hacer con él lo que haya que hacer
00:27:19
y si no
00:27:21
si se instanció
00:27:25
como cliente online
00:27:27
pues entonces ya le decimos
00:27:33
pues no, es online
00:27:46
haz con él lo que toque
00:27:47
y deja al cliente por defecto
00:27:49
por si acaso alguien crea cliente
00:27:53
claro, podríamos hacer
00:27:55
si no está instanciado ni como tienda
00:27:56
ni como online
00:27:59
es que es un cliente genérico
00:28:00
podría hacerse un cliente, abre mi aplicación
00:28:03
tal y como está ahora
00:28:05
no lo contemplo porque en el insertar
00:28:06
cliente le estoy obligando a que se atienda
00:28:09
pero esta aplicación se podría ampliar
00:28:11
y si se amplía
00:28:13
la funcionalidad de insertar cliente
00:28:15
esta parte tendría que modificarla
00:28:17
si no lo he puesto ese else
00:28:19
vale y si no
00:28:21
pues es porque es cliente seguro
00:28:23
y le diría pues nada
00:28:25
genérico como lo queráis llamar
00:28:27
vale que en mi caso repito nunca vas a ir
00:28:35
a esa opción porque solo tengo
00:28:37
o new cliente tienda o new cliente online
00:28:38
en mi aplicación vale
00:28:40
pues la parte final de nuestro
00:28:42
programa lo que es la vista
00:28:45
ya la tenemos hecha
00:28:47
ahora como hacemos
00:28:48
el máximo pues ahora ya se que
00:28:51
viene aquí el algoritmo de máximo
00:28:53
y esto siempre es lo mismo
00:28:54
como ya sabemos
00:28:56
que tengo que recorrer
00:28:57
mi array de clientes
00:28:58
para cada array de clientes
00:28:59
para cada cliente
00:29:02
que tengo que hacer
00:29:03
pues para cada cliente mío
00:29:04
en clientes
00:29:07
pues que tengo que hacer
00:29:13
para cada cliente
00:29:16
lo que se ha gastado el cliente
00:29:17
es mayor
00:29:20
que el máximo hasta ese momento
00:29:21
a el máximo hasta ese momento
00:29:24
variable aparte
00:29:26
inicialmente el máximo empieza siendo 0
00:29:27
vale
00:29:30
aquí tendría que poner
00:29:31
lo que se gastó CL
00:29:33
es mayor que el máximo
00:29:35
porque si lo que se gastó CL
00:29:43
es mayor que el máximo
00:29:45
tengo nuevo máximo
00:29:46
que es lo que se gastó CL
00:29:48
y tengo nuevo
00:29:51
cliente máximo, que es este
00:29:56
ya no es null, sino que va a ser este
00:29:58
luego este es mi algoritmo, ¿no?
00:30:00
el de siempre
00:30:02
voy en todo
00:30:03
el rango de valores
00:30:06
en el que quiero encontrar cuál es el máximo
00:30:07
para cada uno de ellos
00:30:10
miro si cumplen la propiedad
00:30:11
de ser máximo hasta ese momento
00:30:13
lo cumplirán en este
00:30:15
caso si lo que se han gastado es mayor
00:30:18
que el máximo hasta ese momento, que inicialmente
00:30:19
será cero
00:30:21
¿qué es mayor? tengo nuevo máximo
00:30:22
hasta ese momento, tengo nuevo máximo
00:30:25
y además tengo nuevo cliente
00:30:27
que lo cumple
00:30:30
vale
00:30:30
¿qué me falta para completar este algoritmo?
00:30:32
pues calcular lo que se gastó CL
00:30:35
lo que se gastó CL
00:30:36
implica entrar dentro de CL
00:30:39
hacer una suma acumulativa
00:30:41
de todos los precios, de todos los pedidos
00:30:42
hombre, ponerme a meter
00:30:44
aquí todo ese código de hacer la suma acumulativa
00:30:46
y todo eso
00:30:49
ya es meter ahí demasiada basura
00:30:49
entonces
00:30:52
como eso es algo que afecta
00:30:54
a un cliente, que es lo que se ha gastado
00:30:56
el cliente Pepito
00:30:58
pues automáticamente tiene un sitio natural para ser metido
00:30:59
que es en la clase cliente
00:31:02
las cosas que hace un cliente
00:31:05
como ver lo que ha gastado, insertar un pedido
00:31:07
todas esas funcionalidades relativas a un único cliente
00:31:09
tienen un sitio natural para ubicarse en sus métodos
00:31:12
que es la clase cliente
00:31:15
pues venga, vamos a hacer un método en la clase cliente
00:31:16
que me devuelva lo que se ha gastado
00:31:19
ese objeto cliente en sus pedidos
00:31:22
vamos a hacer aquí ese método
00:31:25
como lo voy a tener que llamar desde fuera
00:31:28
como me va a devolver
00:31:31
la suma de precios pues me devuelve
00:31:32
un double
00:31:35
gasto total en pedidos
00:31:35
necesita datos de entrada
00:31:41
el método, no necesita datos de entrada
00:31:44
porque lo único que hace es sumar lo que hay aquí
00:31:46
es lo único que hace
00:31:48
pues venga
00:31:50
dígame
00:31:52
que?
00:31:54
ah, porque lo hicimos en su momento
00:31:54
cuando dije, a lo mejor nos viene bien
00:31:58
¿cómo pudimos prever el futuro
00:32:00
de esa manera?
00:32:02
bueno, a veces pasa
00:32:04
vale, pues ya lo teníamos
00:32:05
fíjate que bien
00:32:08
teníamos un método
00:32:09
¿se te dio copiar?
00:32:12
vale, pues tenemos un método
00:32:19
que en una suma acumulativa va sumando
00:32:20
los precios y todo, los pedidos ya lo teníamos
00:32:22
pues como ya lo tenemos
00:32:24
aquí ya lo que se gastó
00:32:27
CL
00:32:29
es CL punto
00:32:30
dame algo
00:32:32
que pena
00:32:36
no pero
00:32:38
está en cliente el método
00:32:44
get cost total
00:32:46
pedidos, ah porque tengo
00:32:48
errores de sintaxis ahí
00:32:50
almacenados
00:32:51
aquí lo tengo después
00:32:54
es un mayor que, entonces cuando ya hay otros
00:32:56
valores de sintaxis relacionados
00:32:58
ya dice, que te voy a ofrecer
00:32:59
si ya todo es un desastre lo que tienes hecho
00:33:02
vale, entonces
00:33:04
lo que se gastó CL es esto
00:33:08
esto es lo que se gastó CL
00:33:10
pues si lo que se gastó
00:33:11
CL es mayor que el máximo
00:33:14
tenemos nuevo máximo, que es lo que se
00:33:15
gastó CL, esto de aquí
00:33:18
vale, tenemos
00:33:19
que asegurarnos de que el coste total
00:33:27
de los pedidos, el
00:33:29
método que hemos hecho aquí
00:33:31
es válido para cliente online y tienda
00:33:32
por la manera tal cual
00:33:35
y hombre sí que es válido
00:33:36
porque una vez que ya
00:33:38
hemos insertado el pedido
00:33:42
ya se hizo la modificación del descuento
00:33:43
luego el array de pedidos tiene el precio verdadero
00:33:45
entonces para calcular el coste total de los pedidos
00:33:47
en cliente online y tienda
00:33:50
es que se va a hacer así en ambos
00:33:51
no hay ningún cambio, se va a hacer así
00:33:52
pues lo hacemos en la super clase y no tenemos ni que sobre escribir
00:33:53
vale
00:33:57
y ahora ya nuestro main
00:34:00
ya tiene el algoritmo del máximo
00:34:03
y se acabó
00:34:05
y ya está
00:34:06
pues nada, todo muy corto
00:34:07
si probamos por si acaso
00:34:16
hemos puesto alguna burrada
00:34:19
vamos a insertar uno de cada
00:34:20
uno de tienda
00:34:22
uno que
00:34:26
DNITT se llama TT
00:34:29
y vive aquí
00:34:33
y ahora vamos a hacer
00:34:33
uno online
00:34:37
que su DNI es
00:34:38
o se llama así, paga así
00:34:41
y su email es este
00:34:43
vamos a agregar un pedido a cada uno
00:34:44
uno más caro que el otro
00:34:47
venga, pues el pedido 1
00:34:49
con descripción 1
00:34:53
que vale todo esto
00:34:55
se va a ir al
00:34:57
cliente de tienda, que era este
00:34:59
y ahora
00:35:01
agregamos otro pedido
00:35:03
2, descripción 2
00:35:05
con precio 2
00:35:12
al online
00:35:13
que era este
00:35:14
vale, entonces
00:35:16
el que más se ha gastado es el de tienda
00:35:20
porque le he metido
00:35:23
un pedido que vale todo esto
00:35:26
es el que más se ha gastado
00:35:28
el de tienda, me tiene que salir
00:35:29
que el que más se ha gastado se llama
00:35:31
este
00:35:33
y que es de tipo tienda
00:35:35
eso es lo que me tiene que salir
00:35:39
cuatro
00:35:41
el que más se ha gastado es
00:35:43
este y es de tipo tienda
00:35:47
descuento
00:35:49
me ha ido a la opción, ah porque no he puesto un break
00:35:52
no he puesto un break
00:35:54
no he puesto un break, ¿por qué no me decís
00:35:55
esas cosas? entonces si no pongo un break se va a la opción
00:35:59
5 automáticamente
00:36:01
en los switch case siempre
00:36:02
que pensábamos que ya lo tenía
00:36:04
por defecto
00:36:06
como tú quieres que no
00:36:09
siempre utilicemos el break
00:36:13
lo tenía controlado, lo he hecho a propósito
00:36:14
para ver si os dabais cuenta
00:36:16
Pero no os habéis dado cuenta
00:36:18
Ya
00:36:19
Sí, sí, me lo dicen a menudo
00:36:24
Bueno, a ver
00:36:28
Ya está, ¿vale?
00:36:29
Está todo bien, ¿no?
00:36:35
Todo entendido
00:36:38
Los que se sentían perdidos
00:36:39
Se han reencontrado un poco
00:36:41
Sí, seguro
00:36:43
Tú no
00:36:44
¿Y qué hubieras necesitado?
00:36:47
menos subir y bajar
00:36:48
tal vez, ¿no?
00:36:51
o hacerlo más despacio
00:36:53
bueno, estás en el momento en el cual
00:36:55
podemos irnos a algún punto en concreto
00:36:59
a ver
00:37:00
en el caso 2
00:37:05
en el caso 2
00:37:07
mostrar datos, ¿qué le pasa?
00:37:13
esto está comentado todo
00:37:16
¿qué otro?
00:37:18
claro, mostrar datos
00:37:26
está hecho en la clase
00:37:28
cliente
00:37:30
y luego está sobrescrita también
00:37:31
en cliente online
00:37:34
y está sobrescrita
00:37:35
en cliente tienda, porque cada uno tiene
00:37:38
su propio mostrar datos
00:37:40
¿vale? de todas formas esta aplicación
00:37:41
esta versión tal y como está
00:37:44
la subo ahora a la aula virtual
00:37:46
Bueno, no hay dudas, ni hay nada
00:37:48
- 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:
- 10
- Fecha:
- 16 de enero de 2025 - 17:15
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 37′ 53″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 178.27 MBytes