20251205 POO-Ejer_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:
Venga, vamos a probarlo
00:00:00
Venga
00:00:02
Ahora nos estamos autenticando
00:00:07
En el cajero
00:00:11
En lugar de con la tarjeta
00:00:12
Le doy los datos
00:00:14
Ahora ya él me dice
00:00:15
¿Qué quieres? Pues quiero ingresar
00:00:18
Uy, primer error, era de esperar
00:00:20
¿Verdad? Este error, ¿por qué me ha salido?
00:00:22
No me ha dejado ni meter cantidad ni nada
00:00:24
Claro, por eso
00:00:26
Entonces, vamos a
00:00:30
Vamos a cambiarlo en su nuevo, aquí después de este next in, vamos a limpiarlo con el next line, no sé si viene por aquí o viene después de este double.
00:00:32
No, no tengo
00:00:58
Scan next
00:01:02
Double y double
00:01:04
Next line
00:01:05
Porque aquí el único
00:01:08
Next line que tengo aquí
00:01:10
He dado el salto de línea
00:01:12
Y luego estoy todo el rato
00:01:14
Bueno, voy a ponerlo a ver si así se arregla
00:01:15
Esto es un poco prueba y error también
00:01:18
Pero sí
00:01:19
No acabo de entender muy bien tampoco
00:01:21
Porque hay
00:01:24
Vale, venga
00:01:24
1
00:01:26
a ver, no, pues aquí
00:01:28
0, tengo que darle
00:01:34
dos veces, a ver
00:01:36
vamos a revisarlo
00:01:38
en qué momento
00:01:40
eh, sí
00:01:41
pero bueno, eso es antes de
00:01:47
alcanzar el primer
00:01:49
cantidad, o sea el error
00:01:50
que cantidad
00:01:53
ah, no, no me da ningún error, que tonta
00:01:54
es que he puesto su nuevo saldo es
00:01:57
o sea, es que me pide, se me queda esperando
00:01:59
al meter aquí el método, me dice su nuevo saldo es
00:02:01
y se me queda esperando el dato después
00:02:03
vale, vale, vale
00:02:05
vale, o sea, que es confuso la aplicación
00:02:07
porque se me queda esperando después de haberme
00:02:09
dicho su nuevo saldo es
00:02:11
o sea, es un, pues, queda un poco
00:02:12
raro, pero bueno, vamos a ejecutarla
00:02:15
a ver, compone, si le quitas el n
00:02:17
¿qué n?
00:02:19
el n
00:02:23
no, no va a quedar claro, igual se me va a quedar esperando
00:02:23
su nuevo saldo es, se me va a quedar ahí esperando
00:02:28
A ver, el problema es que yo ahora lo arranco
00:02:29
Dime tu nombre
00:02:37
Dime tu saldo
00:02:37
Ahora quiero ingresar
00:02:40
Su nuevo saldo es
00:02:41
Pero se están esperando que le meta la cantidad de ingresar
00:02:43
Venga, voy a meter 2.000 euros
00:02:46
3.000
00:02:48
O sea, el problema es que el mensaje de su nuevo saldo
00:02:49
Me lo está diciendo antes de que haga yo el ingreso
00:02:52
¿Vale?
00:02:54
Pero claro, con la estructura que tengo no lo puedo cambiar
00:02:55
porque es que se lo estoy pasando directamente al sistema
00:02:57
ya, pero es que entonces ya lo he perdido
00:02:59
porque tendría que guardar una variable
00:03:07
y pasárselo
00:03:09
que podría
00:03:10
si lo pongo abajo
00:03:11
lo pongo aquí
00:03:14
lo único es que tengo que usar una variable auxiliar
00:03:18
nada más
00:03:20
lo pongo aquí, su nuevo saldo es
00:03:21
y el problema es que aquí yo ahora
00:03:24
claro, pero lo que yo quiero es que esto
00:03:34
quede oculto
00:03:36
o sea, no quiero usar directamente
00:03:39
el objeto cuenta, ahora explicaremos por qué
00:03:41
vale, el problema, si yo lo dejo
00:03:42
así, cuenta ingresar me ingresa
00:03:45
pero tengo que
00:03:47
el valor de retorno lo voy a tener que
00:03:49
guardar para concatenarlo
00:03:51
aquí, o sea, a ver
00:03:53
pero que tenías ahí un void en el
00:03:53
método, no, no, no, tengo el valor de retorno
00:03:57
por eso se lo he podido pasar al system out
00:03:59
si yo lo único
00:04:00
es evitar, ¿vale?
00:04:03
Guardar una variable auxiliar. El problema es que yo ahora
00:04:05
que no quería yo guardar una variable auxiliar
00:04:07
pero me da igual.
00:04:09
Su nuevo saldo es...
00:04:12
Y aquí le pongo cant y ya está.
00:04:14
¿Vale?
00:04:16
Ahora, ahora.
00:04:22
Confía en mí
00:04:24
y ten paciencia.
00:04:25
Pero la respuesta rápida es porque es muy feo.
00:04:26
Pero ahora
00:04:29
tú confía, ¿vale?
00:04:30
Yo lo que no quiero
00:04:33
es usar el objeto en sí.
00:04:34
solo los métodos que me ofrece
00:04:36
por ahí van los tiros, no el objeto
00:04:38
en sí, solo lo que él me ofrece como métodos
00:04:40
vale, entonces
00:04:42
aquí está claro, ¿no? está claro, primero
00:04:44
el problema que ocurría
00:04:46
es que si yo meto cuenta de ingresar, no es que funcionara mal
00:04:47
sino que el mensaje me daba
00:04:50
antes de tiempo, no es que funcionara mal el programa
00:04:52
entonces ahora yo
00:04:54
ingreso la cantidad
00:04:56
me da el saldo actualizado y la informo
00:04:57
ya está
00:05:01
si meto directamente el saldo actualizado
00:05:01
Perdonad.
00:05:08
Alguien me lo estabais diciendo, ¿verdad?
00:05:10
Claro, ponerlo aquí.
00:05:13
Perdonad, claro, qué tontería.
00:05:14
¿Alguien me estaríais diciendo esto?
00:05:16
¿A que sí?
00:05:17
Claro, ¿alguien me estaba diciendo por ahí?
00:05:20
¿Y por qué no así?
00:05:23
Pues sí, efectivamente, ya tenemos el problema solucionado.
00:05:24
¿Y cómo lo tenías antes?
00:05:26
En otro season.
00:05:27
Ah, ¿tú me estabas diciendo esto?
00:05:31
Claro.
00:05:32
¿Seguro? ¿No te has subido al carro ahora?
00:05:33
No, tienen ya eso, pero yo lo tengo detrás por la mesa.
00:05:34
Claro, tú tienes cuenta, punto, cantidad, que es lo que yo quiero evitar.
00:05:36
Vale, antes es que este mensaje no lo tenía separado en una línea arriba.
00:05:41
Vale, ahora ya esto, vale, más bonito.
00:05:45
Y aquí lo mismo.
00:05:47
Un momentito, vamos a ponerle este aquí también.
00:05:50
Claro, antes de hacer la concatenación, no le queda más remedio.
00:05:58
Claro, ahora, vale, a ver, vamos a volver aquí a esta línea.
00:06:02
Ahora, este system out, ¿qué hace?
00:06:09
La concatenación de dos cosas.
00:06:12
La primera parte la tiene ya, no pasa nada.
00:06:14
Y la segunda se tiene que quedar esperando.
00:06:17
Cuando ya le metemos la cantidad, la procesa y su valor de retorno lo concatena al otro.
00:06:21
¿Vale?
00:06:27
Luego, interesante.
00:06:30
Vale.
00:06:31
Y todo esto lo hemos podido hacer así porque cuenta ingresar me devuelve la cantidad.
00:06:33
Me devuelve la cantidad, si no, no.
00:06:38
Bueno, pues nada, su nuevo, ahora ya aquí en retirar lo he hecho igual, su nuevo saldo es, lo concateno con la llamada al método, con lo cual aquí se va a quedar esperando.
00:06:40
Cuando ya tenga el valor resultante de esa llamada, lo concatena y lo pasa al system out.
00:06:51
Vamos a volver a ejecutar.
00:06:56
Ala, dime tu nombre, otra vez.
00:07:01
Saldo.
00:07:05
Ingreso.
00:07:07
Cantidad.
00:07:08
Vamos a meter 2.000 euros.
00:07:09
Tu nuevo saldo es 3.000.
00:07:11
Muy bien.
00:07:12
Retirar.
00:07:14
1.500, tu nuevo saldo es 1.500
00:07:14
vale, si yo le doy a salir
00:07:18
saldrá, no hace falta que lo pruebe
00:07:20
voy a quedarme a cero a ver qué hace
00:07:21
vamos a retirar
00:07:23
1.500
00:07:25
su nuevo saldo es cero
00:07:27
y no puede seguir
00:07:30
pues ya está y la aplicación termina
00:07:30
bueno, pues estupendo
00:07:33
pues justo lo que queríamos
00:07:35
¿qué?
00:07:36
se entere
00:07:45
Que los bancos lo tienen muy claro
00:07:46
Bueno, pues
00:07:51
Esta aplicación del cajero
00:07:52
Que parece una chorrada
00:07:55
Pero es más interesante de lo que parece
00:07:57
¿Hasta aquí está clara?
00:07:58
¿Vale? ¿Hasta aquí está clara?
00:08:04
Bueno
00:08:07
Pues tiene algunas cosas bonitas
00:08:07
Y tiene algunas otras feas
00:08:10
¿Vale?
00:08:12
¿Cuáles son las bonitas?
00:08:16
que a la hora de operar, hacer los ingresos y las retiradas,
00:08:18
él directamente llama a los métodos para que lo hagan,
00:08:23
lo que hemos dicho antes.
00:08:26
Entonces, así es como tiene que ser.
00:08:28
La aplicación, el interior del objeto no le tiene que importar.
00:08:30
No le tiene que importar.
00:08:36
Lo único que tiene que hacer la aplicación es llamar a los métodos.
00:08:37
Hasta ahí, eso lo hemos hecho bien.
00:08:42
pero es que esta parte de aquí arriba
00:08:43
esta es la que está fea
00:08:46
la de dar los datos
00:08:48
porque está bien hecho
00:08:52
a nivel de código
00:08:54
de compilación está bien hecho
00:08:55
pero yo aquí me estoy metiendo
00:08:57
dentro directamente
00:09:00
de los detalles del objeto
00:09:02
de los detalles
00:09:04
eso es precisamente
00:09:05
el principio básico
00:09:09
no quiero meterme en los detalles del objeto
00:09:10
ni siquiera
00:09:13
ni siquiera para inicializarlos
00:09:14
ni siquiera para eso quiero meterme en los detalles
00:09:16
no me he metido para retirar
00:09:19
ni para ingresar, magnífico
00:09:21
pero aquí me estoy metiendo
00:09:23
para inicializar, es que no querría
00:09:25
meterme, no debería meterme ni para
00:09:27
inicializar en los detalles
00:09:29
¿y cuáles son los detalles? esto, lo que tiene dentro
00:09:30
claro, pues precisamente
00:09:33
para evitar, para evitarnos a nosotros
00:09:35
como main, como aplicación principal
00:09:37
meternos en los detalles
00:09:39
es para lo que existen
00:09:41
unos métodos especiales
00:09:43
que son los métodos constructores.
00:09:45
¿Vale?
00:09:49
Entonces,
00:09:50
el método constructor
00:09:52
es un método especial
00:09:54
que es diferente
00:09:56
y se programa de forma distinta
00:09:58
a los métodos genéricos
00:09:59
que se programan, como hemos visto,
00:10:01
con esas pautas,
00:10:03
parámetros separados por comas
00:10:05
si es que hay más de uno,
00:10:06
nombre del método,
00:10:08
valor que me devuelve,
00:10:09
código, retún si es que me devuelve algo,
00:10:10
Esas son las pautas generales para cualquier otro método y no hay más. Pues los constructores son una excepción. Vale, pues lo contamos así un poco y dejamos el rollo aquí. ¿Qué es un método constructor? Vamos a hacer aquí un método constructor.
00:10:13
Un método constructor es un método al que yo no llamo por código aquí cuando me da la gana, en realidad.
00:10:33
No como lo he llamado a este.
00:10:42
Yo a ingresar lo he llamado aquí, lo podría llamar una y mil veces.
00:10:43
A retirar lo he llamado aquí, lo podría llamar una y mil veces.
00:10:48
Pues al método constructor yo no le llamo cuando quiero.
00:10:51
El método constructor se ejecuta una única vez y es en el momento de crear el objeto.
00:10:53
Es un método, se ejecuta cuando se instancia el objeto.
00:11:00
No se puede ejecutar en otro momento.
00:11:17
Cuando se instancia, se ejecuta automáticamente.
00:11:19
No lo llamo yo, no lo tengo que llamar yo.
00:11:22
Es que se ejecuta ya él automáticamente, cuando se instancia el objeto.
00:11:24
Vale.
00:11:30
Primera restricción que tiene ese método que lo distingue de los demás.
00:11:32
Su nombre
00:11:35
Es obligatorio que se llame
00:11:37
Igual que la clase
00:11:40
Obligatorio
00:11:42
Si no se llama así, entonces no es el constructor
00:11:43
Es otro
00:11:48
Entonces, el constructor de mi clase cuenta
00:11:48
Se llamaría cuenta
00:11:55
Tal cual, con la mayúscula
00:11:57
Con todo, tal cual
00:11:59
Vale
00:12:00
El método constructor
00:12:03
No devuelve nada
00:12:06
No puede devolver nada
00:12:08
Ahora entenderemos por qué
00:12:10
y es tan obligatorio que no devuelva nada
00:12:13
que es que no se pone ni el void.
00:12:15
No se pone ni el void, prohibido.
00:12:17
Si yo pusiera el void, entonces estaría
00:12:21
haciendo otro método distinto
00:12:23
que se llama cuenta,
00:12:25
que no estaría haciendo el constructor.
00:12:27
Este sí es el constructor.
00:12:30
El constructor se llama
00:12:32
como la clase
00:12:33
y delante no se le pone void ni nada.
00:12:34
Vale, pues ¿cuándo se llama este método?
00:12:39
¿A este método cómo lo llamo yo?
00:12:41
Pues a este método se le llama aquí, cuando se instancia el objeto.
00:12:43
En este momento, cuando yo hago new cuenta, automáticamente la máquina virtual se mete aquí y hace lo que haya ahí.
00:12:49
Lo que sea que haya ahí, lo que a mí me dé la gana.
00:13:00
¿Qué es lo que normalmente se hace ahí?
00:13:06
Inicializar los datos.
00:13:10
entonces todo este rollo que yo he puesto aquí
00:13:11
pues este rollo
00:13:13
lo podría haber hecho
00:13:15
todo esto
00:13:18
incluso
00:13:19
a ver, porque
00:13:21
ahora mismo tendremos que hacerlo con el siso
00:13:23
luego ya
00:13:26
al constructor le puedes pasar parámetros
00:13:27
con lo cual el siso lo harías fuera
00:13:30
pero ahora mismo vamos a hacer que no has preguntado nada
00:13:31
vale
00:13:34
no has preguntado nada, con lo cual yo no he dicho nada
00:13:36
de esto último
00:13:38
entonces vamos a meter esto aquí dentro
00:13:38
con lo cual necesito el escáner
00:13:41
aquí dentro
00:13:47
este escáner aquí
00:13:47
control c
00:13:50
aquí
00:13:52
no
00:13:54
vale
00:13:59
pues entonces este método
00:14:01
cuenta
00:14:03
se llama
00:14:05
automáticamente cuando se invoca
00:14:08
la instanciación, cuando se hace
00:14:10
el new, este en particular
00:14:12
¿qué está haciendo?
00:14:14
dime tu nombre
00:14:16
y lo pone en la propiedad titular
00:14:18
pero ojo, aquí ya este me sobra
00:14:20
este cuenta, aquí ya no pinta nada
00:14:22
este cuenta era el objeto del otro sitio
00:14:24
este aquí ya no pinta nada
00:14:26
ya lo quito
00:14:28
¿qué está haciendo este método?
00:14:29
me pide un valor, lo mete
00:14:32
en la propiedad titular de arriba, lo mete ahí
00:14:34
ya no tengo que poner
00:14:36
titular, la propiedad directamente, su nombre
00:14:38
hombre, si quiero poner this
00:14:40
pues pongo dis porque es lo mismo
00:14:42
pero en este caso
00:14:45
no hay confusión porque no hay parámetros
00:14:47
ni hay nada
00:14:49
si quiero poner dis lo pongo, si no, no
00:14:50
claro, lo que tú quieras, en el constructor
00:14:52
tú haces lo que quieras
00:14:56
¿vale?
00:14:57
entonces, el uso de este método
00:15:01
es precisamente
00:15:03
normalmente, puede hacer uno lo que quiera
00:15:04
pero normalmente es
00:15:07
inicializar el objeto
00:15:09
con los valores que tú quieres.
00:15:11
Y así no tiene que inicializarle este.
00:15:13
Y esta aplicación, como veis, se queda mucho más bonita.
00:15:16
Crea el objeto y llama a los métodos.
00:15:21
Y en esta aplicación, los detalles de cuenta,
00:15:25
como son titular y cantidad, aquí no aparecen.
00:15:30
Aquí en el main, en ningún momento veo yo titular,
00:15:33
cantidad, no veo nada.
00:15:37
bueno, aquí porque lo he puesto
00:15:39
para la condición, que también debería
00:15:41
quitarlo con otro método, pero bueno
00:15:43
aquí he quitado todos los detalles
00:15:44
a esta aplicación lo que hay dentro de cuenta
00:15:46
le da igual, le da igual que sea un titular
00:15:49
y una cantidad, le da lo mismo
00:15:51
porque ya a través del constructor
00:15:53
inicializa los datos
00:15:55
y a través de estos métodos
00:15:56
hace lo que haya que hacer
00:15:58
¿vale? y este
00:16:00
constructor ya lo inicializa
00:16:03
vamos a ejecutarlo a ver si
00:16:04
hemos escrito todo bien
00:16:07
no, puede haber varios
00:16:09
pero tienen que tener diferentes parámetros
00:16:14
el próximo día lo vemos
00:16:16
a menos que queráis que lo veamos ahora
00:16:18
y
00:16:20
tiempo da
00:16:21
pero es que tus compañeros te van a odiar
00:16:24
entonces
00:16:26
yo es que no sé
00:16:28
cuánto quieres hacer tus amigos o enemigos
00:16:29
yo precisamente no tengo prisa
00:16:32
otros días os digo, me tengo que ir antes
00:16:36
Dime tu saldo
00:16:38
¿Veis? Si funciona todo perfectamente
00:16:43
Retirada
00:16:45
300, hala, ya está
00:16:47
Fuera, ¿vale?
00:16:49
Bueno, pues
00:16:52
Muy útil
00:16:53
El constructor, muy útil
00:16:55
Aquí lo único
00:16:56
Se queda un detallito
00:16:59
Y es que yo vengo diciendo
00:17:00
Ahí dando la matraca
00:17:03
Con que
00:17:04
con separar
00:17:06
separar la parte de
00:17:07
meter los datos de la vista
00:17:09
si lo hago por consola
00:17:11
lo hago por interfaz, separarlo de la clase
00:17:13
y aquí le estoy forzando
00:17:15
a que lo meta así
00:17:17
claro, pero es que yo me puedo hacer
00:17:18
un constructor
00:17:21
al que le das tú los valores
00:17:22
y él
00:17:25
lo usa para inicializar
00:17:27
y los valores se leen desde fuera
00:17:29
sería lo ideal, esa sería una
00:17:31
segunda versión de constructor
00:17:33
Vale, constructor puede haber muchos
00:17:35
Un segundo, hay 15 y nos vamos
00:17:38
Pero ahora paz
00:17:40
Constructores puede haber muchos
00:17:41
Otra variante
00:17:43
Cuenta a la que le voy a pasar
00:17:45
Dos valores, por ejemplo
00:17:48
Un string
00:17:50
Que es el titular
00:17:51
Y un double cantidad
00:17:53
¿Qué va a hacer el constructor
00:17:56
Con estos parámetros?
00:17:59
Pues los va a usar
00:18:01
Para inicializarlos del objeto
00:18:02
Entonces haría distitular igual a titular y dispunto cantidad igual a cantidad.
00:18:04
Claro, entonces este es otro variante de constructor que puede convivir con este
00:18:16
porque se distinguen este parámetros vacíos, este parámetros con cosas.
00:18:20
Este constructor recibe los valores que ya se habrán leído como le dé la gana
00:18:26
a la aplicación, y esos valores
00:18:31
los
00:18:33
utiliza para inicializar
00:18:34
el objeto.
00:18:37
Pregunta perfecta, que cabe aquí.
00:18:40
¿Cómo distingue? Por lo que yo le meto
00:18:42
aquí. Si yo no le meto nada,
00:18:45
él entiende que vas al primero.
00:18:47
Pero imagínate que yo he leído unos valores
00:18:49
antes, y yo he
00:18:51
dicho, dime tu nombre, y yo he guardado
00:18:52
aquí el nombre, en una variable
00:18:54
cualquiera.
00:18:56
String nombre.
00:18:59
lo que sea, dime tu saldo
00:19:01
y yo he guardado aquí el saldo
00:19:03
en una variable cualquiera
00:19:05
pues ahora podría creármelo
00:19:07
objeto, en lugar de creármelo así
00:19:09
me lo creo así
00:19:11
le paso
00:19:14
este valor
00:19:20
y le paso este otro
00:19:21
y ahora ya
00:19:23
este constructor coge estos valores
00:19:25
que yo he leído por aquí, como podría haber leído
00:19:28
de una base de datos, de donde fuera
00:19:30
coge estos dos valores
00:19:31
y los usa para inicializar
00:19:33
los suyos.
00:19:35
¿Vale?
00:19:38
Entonces, normalmente, uno
00:19:40
da los valores al objeto
00:19:42
cuando lo crea a través
00:19:45
de los métodos constructores internos.
00:19:47
No directamente aquí accediendo
00:19:49
a la propiedad. ¿Vale?
00:19:51
Bueno,
00:19:58
dudas o preguntas.
00:20:00
De hecho, esto es tan
00:20:02
truco mágico.
00:20:04
Lo de los constructores es tan
00:20:06
prescriptivo, es tan de hacer,
00:20:07
que el Eclipse, el entorno
00:20:09
de desarrollo Eclipse, como el Intel IE,
00:20:12
como cualquiera, te da una
00:20:14
forma de, pum, hacerlo
00:20:16
tú solito. Es decir, imaginaos
00:20:17
que yo no he hecho constructores.
00:20:20
Este no está.
00:20:22
Y quiero un constructor.
00:20:24
Pues en lugar de escribirlo, hago el vago,
00:20:26
que eso nos encanta
00:20:28
a todos. Botón derecho,
00:20:30
source. En source me voy a
00:20:32
generar constructor.
00:20:33
Generar constructor.
00:20:36
con qué campos, titular, cantidad
00:20:38
generar, pun
00:20:40
y ala, me lo hace aparecer
00:20:42
¿vale? porque es que es lo habitual
00:20:43
que uno use estos constructores
00:20:46
y veis, me lo ha generado
00:20:48
el eclipse no puede ser tan
00:20:50
tonto como para usar
00:20:52
el mismo nombre de variable
00:20:54
y ponerse el tropizo y poner el
00:20:55
dis, es que es lo habitual
00:20:58
¿vale?
00:20:59
¿que cómo lo he generado? source
00:21:02
botón derecho en la
00:21:04
clase en la que quieres generar el constructor, en cuenta
00:21:06
en este caso, source
00:21:08
generar constructor
00:21:10
usando campos, propiedades
00:21:12
aquí marcas que campos
00:21:14
quieres que se inicialicen
00:21:16
generar y ya está, lo que pasa es que me ha
00:21:18
generado otro, claro, dos
00:21:20
con el mismo número de parámetros, dos no puede ser
00:21:22
porque entonces habría confusión, por eso me ha dado
00:21:24
vale, y ya está
00:21:26
venga, ahora sí
00:21:30
que nos vamos
00:21:32
- 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:
- 3
- Fecha:
- 6 de diciembre de 2025 - 11:26
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 21′ 34″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 92.71 MBytes