20251205 POO-Ejer_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:
Pues vamos a ver, seguro que a muchos de vosotros os viene fenomenal hacerme caso
00:00:00
y a los que no les venga fenomenal o están en absoluto silencio o aparentan que no lo están haciendo.
00:00:04
Se puede elegir.
00:00:11
Venga, pues a ver, este ejercicio 11 de aquí.
00:00:13
Este ejercicio 11 tenemos que ponernos en contexto.
00:00:16
Se supone que responde a la aplicación de un cajero,
00:00:19
un cajero en la que yo puedo meter dinero y sacar dinero.
00:00:23
Ya está, responde a la aplicación de un cajero.
00:00:27
Entonces, cuando nosotros damos al botoncito que sea para aceptar hacer ingreso o para aceptar retirar dinero, pues ese botoncito invocará el método correspondiente, ¿vale? Para ello, previamente nos hemos autenticado con nuestra tarjeta y al autenticarnos con nuestra tarjeta ha aparecido en ese programa que se está ejecutando en el cajero, ha aparecido el objeto cuenta asociado a esa tarjeta, ¿vale?
00:00:29
Bueno, pues entonces, cuando nosotros hemos metido la tarjetita en el cajero, se ejecuta este programa, este main de aquí, se ejecuta en este programa y este programa, sacando los datos de nuestra tarjeta, instancia el objeto cuenta asociado, instancia el objeto cuenta asociado.
00:00:58
para ahora ya poder hacer cosas con esa cuenta
00:01:26
como ingresar o retirar, ingresar o retirar
00:01:29
que es las únicas dos cosas que me permite hacer
00:01:32
podría permitirme hacer más cosas, mostrar saldo
00:01:34
más cosas, pero bueno, este cajero solo nos permite
00:01:37
meter dinero y sacar dinero
00:01:40
nos hemos autenticado y ha instanciado nuestro objeto cuenta
00:01:41
cuenta es un objeto complejo porque tiene datos dentro
00:01:45
podría tener nombre del titular, saldo que tiene
00:01:49
lo que fuera, es un objeto complejo
00:01:52
con lo cual este objeto no se puede declarar
00:01:53
como un único tipo primitivo
00:01:56
o string, no, se declara
00:01:58
como un tipo cuenta porque tiene muchos datos dentro
00:02:00
y ahora ya
00:02:02
ese tipo cuenta que es un tipo objeto
00:02:03
no nos queda más remedio que declararlo
00:02:05
declararlo
00:02:07
dándole las propiedades que interesan
00:02:09
de la cuenta para esta
00:02:12
aplicación
00:02:14
esto ya me lo dice el enunciado, si no
00:02:14
pues el que
00:02:17
me ha dicho, oye ven a programarme
00:02:18
el software del cajero
00:02:22
Pues si no el que me lo ha dicho tendría que decirme
00:02:23
Oye, mi aplicación del cajero solo va a hacer esto
00:02:25
Entonces solo necesito estos datos
00:02:28
Pues ese ya nos lo ha dicho
00:02:30
Y nos ha dicho que los únicos datos que necesita de la cuenta del usuario
00:02:33
Para poder hacer las operaciones que se van a hacer
00:02:37
Son titular y cantidad
00:02:41
Muy bien
00:02:43
Pues entonces ya tenemos todo lo que necesitamos
00:02:44
Para declarar este tipo de datos complejo
00:02:46
Pues ahora ya nos hacemos
00:02:49
Nuestra clase cuenta
00:02:52
Y ahora esta clase cuenta de aquí
00:02:54
¿Por qué se caracteriza la cuenta del usuario?
00:03:03
No os lo acaban de decir
00:03:07
Pues se caracteriza por el nombre del titular
00:03:08
Y se caracteriza por el saldo que tiene
00:03:11
¿No? Nada más
00:03:15
Ábrete
00:03:16
Ahí
00:03:20
Por la cantidad puede tener decimales
00:03:21
Luego un double
00:03:24
ala, por estas dos cosas se caracteriza
00:03:25
ya está
00:03:31
entonces
00:03:32
cuando el programa de mi cajero
00:03:34
arranca
00:03:37
cuando estoy aquí
00:03:38
porque yo he metido la tarjeta
00:03:41
pues se instancia el objeto cuenta
00:03:43
y además
00:03:45
se inician sus propiedades
00:03:48
con las que lea de mi tarjeta
00:03:51
pues nombre, el que sea
00:03:54
aquí lo vamos a pedir por teclado
00:03:56
pero en una aplicación real
00:03:59
no te lo pediría por teclado
00:04:01
cómo te llamas y cuánto saldo tienes
00:04:03
sino que leería los datos de tu usuario
00:04:05
de la tarjeta, se conectaría a la base de datos
00:04:07
lo que fuera, pero bueno, aquí vamos a simular
00:04:09
que en lugar de cogerlo de la base
00:04:11
de datos con el identificador
00:04:15
de la tarjeta, pues te lo pide a ti
00:04:17
porque no sabemos
00:04:19
recoger datos de otra manera
00:04:21
entonces ponemos
00:04:23
el escáner
00:04:34
Vamos a usar
00:04:35
Vale
00:04:37
Y ahora el nombre
00:04:51
Pues el nombre que sea
00:04:53
Ah, perdón, cuenta.nombre
00:04:55
Ya lo he leído, nombre
00:04:57
Nombre
00:04:58
O pongo aquí el scan next line
00:05:00
Me da igual, vale
00:05:03
Puedo poner aquí, de hecho
00:05:05
Vaya tontería usar una variable auxiliar
00:05:06
Vamos a directamente
00:05:08
Poner esto aquí
00:05:10
Vale
00:05:15
entonces, dime tu nombre
00:05:19
y cuenta.nombre
00:05:22
no se puede resolver, no es un campo
00:05:25
porque lo he llamado titular
00:05:30
vale, lo he llamado titular, pues cuenta.titular
00:05:31
vale, y ahora el siguiente dato
00:05:36
en lugar de leerlo de una base de datos, nuestro cajero
00:05:39
pues, nos lo pide
00:05:41
porque no sabemos hacerlo de otra manera
00:05:45
y ahora el saldo
00:05:47
cuenta.cantidad
00:05:56
igual a scan.nextTab
00:05:58
ala
00:06:02
esto es lo que ha ocurrido
00:06:03
cuando el cajero arranca
00:06:06
y le metemos la tarjeta
00:06:08
que pum
00:06:09
se ha instanciado el objeto cuenta
00:06:10
asociado con nuestros datos
00:06:12
y nuestros datos son el titular y la cantidad
00:06:15
vale
00:06:17
y ahora el cajero se pone a ofrecernos
00:06:18
las únicas opciones que nos puede ofrecer
00:06:21
que son
00:06:24
según lo que me ha dicho el
00:06:25
que me ha pedido el software, el cliente
00:06:27
pues lo único que podemos hacer son
00:06:29
ingresar y retirar dinero
00:06:31
es lo único que se puede hacer
00:06:32
con esta
00:06:35
cuenta, lo único que se puede hacer
00:06:36
ingresar y retirar dinero, pues ahora
00:06:39
este cajero ahora ya
00:06:41
está todo el rato diciéndote que quieres hacer
00:06:43
hasta que le des la opción de salir
00:06:45
que ya me voy, que ya no quiero ingresar ni retirar más
00:06:47
pues
00:06:49
¿Qué quieres hacer?
00:06:52
Ingreso
00:06:54
¿O qué quieres hacer?
00:06:55
Retirada de efectivo
00:07:00
¿O te vas ya?
00:07:02
Si te vas ya
00:07:04
Pues ya cierro
00:07:05
Cierro todo
00:07:07
Ahora pues tendremos que mirar la opción
00:07:09
Y ahora en función
00:07:16
De la opción
00:07:30
La opción
00:07:31
Está sin declarar
00:07:33
¿Por qué no la declaro ahí dentro?
00:07:34
Ya no sabemos todas estas cosas de memoria
00:07:37
Porque la opción es la condición del bucle
00:07:39
Mientras la opción sea diferente de salir
00:07:41
Entonces como la opción es la condición del bucle
00:07:44
Y la condición del bucle está fuera de mi bloque
00:07:46
Pues tengo que declararlo fuera del bloque
00:07:50
Porque si lo he declarado adentro
00:07:52
Pues ya no sabemos de memoria que si lo declaro aquí dentro
00:07:54
Esa variable solo es accesible dentro de este bloque
00:07:57
Luego aquí no puedo ponerla
00:08:00
Dígame
00:08:02
no, esta es la condición para seguir
00:08:03
preguntándote, mientras sea diferente de cero
00:08:13
vuelve a entrar
00:08:15
ah, bueno, a ver, es que estoy haciendo
00:08:16
un cajero genérico hasta el punto de salir
00:08:21
vale, entonces tienes razón
00:08:23
aquí lo que dice exactamente, de forma repetida
00:08:25
y terminará, vamos a la relación
00:08:27
de salir o cuando te quedes sin dinero
00:08:29
vamos a darle las dos opciones, salir o cuando
00:08:31
te quedes sin dinero, entonces según eso
00:08:33
aquí la condición sería
00:08:35
mientras la opción sea diferente de cero
00:08:37
sigue preguntando y además de ser
00:08:39
diferente de cero
00:08:41
si
00:08:42
no, lo de salir
00:08:44
la opción de salir me la he inventado
00:08:47
cuenta, es decir
00:08:48
tú haces operaciones en el cajero
00:08:51
ingresa a retirar, ingresa a retirar
00:08:53
cuando te has quedado a cero, ya el cajero
00:08:55
se te bloquea, pero tú te puedes ir
00:08:57
antes, se ha habilitado la opción de irte
00:08:59
antes si quieres, sin necesidad de haber agotado
00:09:01
todo el dinero
00:09:03
¿Vale? Que sería
00:09:03
Hombre, feo, ¿no? Que te obligue el cajero a
00:09:06
Sacarlo todo antes de irte
00:09:08
Pues es un poco feo
00:09:10
Cuenta, punto, cantidad
00:09:11
Sea mayor que cero
00:09:14
Mientras no me des
00:09:17
A la opción de cero y además
00:09:19
Y además, te quedes saldo
00:09:21
Te permito seguir operando
00:09:23
Te permito seguir operando
00:09:25
Pero como me des la opción de salir
00:09:27
O te quedes a cero
00:09:29
Entonces
00:09:31
Te vas
00:09:33
El cajero se cierra
00:09:35
¿Vale? Entonces cuando salgamos de aquí
00:09:38
¡Hala!
00:09:40
Ya está
00:09:49
Le podríamos hasta informar
00:09:50
Si se va porque le hemos dado salir
00:09:52
O si se va porque se ha quedado sin dinero
00:09:54
Entonces
00:09:57
Si cuenta.cantidad
00:09:58
Es mayor que cero
00:10:01
Te vas
00:10:03
Porque has dado salir
00:10:04
no porque te obligue yo porque has llegado a cero
00:10:06
y si cantidad es igual a cero
00:10:09
entonces no puedes seguir operando
00:10:12
porque
00:10:16
te has quedado sin pasta
00:10:19
porque no tienes dinero
00:10:22
bueno, pues un pequeño tuneo de este cajero
00:10:33
vale, pues ahora
00:10:37
nos entramos en el do while
00:10:48
Una vez leída la opción
00:10:50
Ahora ya sí que sí, el cajero tiene que operar
00:10:51
Y en función de
00:10:54
La opción que el usuario
00:10:56
Ha introducido, pues ahora ya
00:10:58
¿Qué hemos introducido en la opción?
00:10:59
Uno
00:11:03
Pues haces una cosa
00:11:03
¿Qué hemos introducido en la opción?
00:11:05
Dos
00:11:11
Haces otra cosa
00:11:11
Ahora la pondremos
00:11:16
¿Qué has introducido en la opción? Cero
00:11:17
Nada
00:11:20
Porque ya te va a decir aquí
00:11:22
Gracias y adiós
00:11:24
Ya has introducido la 0
00:11:25
Ya está
00:11:26
Vamos a ponerle un default
00:11:28
Porque si no he introducido
00:11:33
Ni la 1 ni la 2
00:11:35
Bueno, en el caso de la 0
00:11:37
También te diría la 0
00:11:38
Para que sea opción incorrecta
00:11:39
Case 0
00:11:40
Y ahora en el caso de que
00:11:43
No sea ni la 1 ni la 2 ni la 0
00:11:49
Pues sí
00:11:51
Incorrecta
00:11:52
Ala, ya está
00:11:55
Ahora, estas opciones son las que nos interesan
00:11:56
Las que están aquí dentro
00:11:59
Bueno, pues aquí que hay que hacer
00:12:00
Meter dinero en la cuenta
00:12:03
Vale
00:12:05
Pues aquí un diseño
00:12:05
Por supuesto sería
00:12:09
Dime
00:12:10
Así de repente
00:12:11
Joder, pero porque no te has meado hace 10 minutos
00:12:13
Que era cambio de clase
00:12:17
Pues quien sabe como funciona el cuerpo
00:12:18
Anda tira
00:12:20
Pero de verdad es que
00:12:22
Tenéis una vejiga muy extraña
00:12:23
bueno
00:12:26
vale, entonces aquí
00:12:28
un diseño posible de la aplicación sería
00:12:30
pues
00:12:33
sería
00:12:34
dame el dinero
00:12:38
o sea, dime que dinero vas a introducir
00:12:41
aparte
00:12:44
lo metes físicamente, claro, tendrá la aplicación
00:12:46
luego ya su parte de sensores
00:12:48
para detectar que has
00:12:50
metido tu dinero
00:12:52
y contártelo, esa será la parte
00:12:53
de robótica, pero el resultado final
00:12:56
va a ser que al proceso este
00:12:58
que a la aplicación le llega ya una cantidad
00:13:00
38, 42,9
00:13:02
ya le llega una cantidad
00:13:05
llegará pues efectivamente por una parte
00:13:06
de sensores contando los billetes
00:13:08
pero al final le ha llegado una cantidad
00:13:09
pues aquí un posible diseño sería este que sería
00:13:11
pues muy horrible
00:13:14
que sería
00:13:15
a ver
00:13:17
int
00:13:23
una cantidad
00:13:37
con next double no next int
00:13:47
Entonces aquí se la vamos a decir a mano
00:13:49
Pero el cajero realmente sacaría ese dato
00:13:54
Esta cantidad
00:13:56
La sacaría de su lector de billetes
00:13:58
O de lo que fuera
00:14:00
Y ahora ya podríamos hacer
00:14:01
Cuenta.cantidad
00:14:03
Más igual
00:14:06
Esto
00:14:10
¿Vale? Este sería un diseño posible
00:14:10
De la aplicación y no pasa nada
00:14:14
Le estamos dando una cantidad
00:14:16
Y la suma a cuenta
00:14:17
Y es un diseño posible
00:14:19
Pero este diseño es feo
00:14:21
porque va en contra de los principios
00:14:23
de la relación entre dos objetos, que es
00:14:26
vamos a separar tareas, vamos a separar
00:14:28
partes, todo relacionado con cuenta
00:14:30
que se haga en la clase cuenta
00:14:31
y así esa clase cuenta se queda
00:14:34
como un objeto estupendo
00:14:36
que tiene propiedades y además tiene
00:14:38
comportamiento, todo dentro
00:14:40
y el programa
00:14:42
principal, el main, se despreocupa
00:14:44
ya de hacer el código de esos
00:14:47
ingresos y de esas retiradas, porque
00:14:48
ese código ya está metido
00:14:50
dentro de la clase cuenta
00:14:52
entonces ese es el principio de
00:14:53
encapsulación que se llama
00:14:56
todos los comportamientos
00:14:58
relacionados con las cuentas
00:15:00
que en este ejercicio sencillo es
00:15:01
ingresar una cantidad
00:15:03
o retirar una cantidad
00:15:06
todo ese comportamiento
00:15:07
vamos a declararlo y encapsularlo
00:15:08
dentro de la clase cuenta
00:15:11
y se queda ya como una cosa completita
00:15:12
con propiedades que la caracterizan
00:15:14
y cosas que puede hacer
00:15:17
y ahí se queda encapsulado
00:15:18
y ahora ya cualquier programa
00:15:20
este main u otro programa
00:15:22
de otro cajero que va a ser un poco
00:15:24
distinto pero también va a usar cuentas
00:15:26
pues cualquier otro software ahora con su propio
00:15:28
main, llama a cuenta
00:15:30
llama a su comportamiento
00:15:32
y le da exactamente igual como este
00:15:34
hecho por dentro, se limita a llamar
00:15:36
a los métodos
00:15:39
esa sería la manera buena de
00:15:40
programarlo, cada clase engloba
00:15:42
dentro, encapsula dentro
00:15:44
todos los detalles de el
00:15:45
comportamiento, de lo que va a hacer
00:15:48
y los main se limitan a llamarlo
00:15:50
como si fuera una función auxiliar
00:15:52
pero al main le da igual como hacerlo
00:15:54
sin embargo con este diseño
00:15:55
el main
00:15:57
está haciendo él
00:15:58
el propio código
00:16:01
está pidiendo la cantidad, la está leyendo, la está sumando
00:16:02
a esta propiedad, está haciendo el propio código
00:16:05
aquí son tres líneas
00:16:07
pero en una aplicación normal no es así
00:16:09
entonces sería un desastre de aplicación
00:16:11
si el propio main lo tiene que hacer todo
00:16:13
¿de qué nos vale entonces hacer una clase
00:16:15
si no podemos meter en ella
00:16:17
los detalles de su comportamiento?
00:16:18
vaya diseño tan
00:16:20
vaya a matar moscas a cañonazos
00:16:22
para hacerme
00:16:24
esto, un cuenta y dejarlo así
00:16:26
pues para esto no te hagas nada
00:16:29
¿vale? claro, es que no
00:16:30
diseñamos así
00:16:32
entonces si hemos hecho una clase cuenta
00:16:33
y queremos que con las cuentas se hagan
00:16:36
cosas como ingresar dinero
00:16:38
o retirar dinero
00:16:40
pues vamos a programar esos comportamientos aquí dentro
00:16:41
y ahí se quedan encerrados
00:16:44
y ahora ya cualquiera
00:16:46
que quiera trabajar con cuentas
00:16:48
llama a eso y se acabó
00:16:50
y le da igual como esté hecho
00:16:52
pues entonces, esto de ingresar
00:16:53
nada de hacerlo aquí
00:16:58
¿vale?
00:16:59
ahora ya el ejercicio nos lo dice
00:17:02
porque nos lo da detallado lo que tenemos que hacer
00:17:04
pero claro, nos lo dice porque este proceso
00:17:06
de diseño ya se ha hecho previamente
00:17:08
aquí nos dice
00:17:09
vamos a hacer un método
00:17:11
que ingrese una cantidad
00:17:12
dentro de la clase cuenta
00:17:16
a esa cuenta y ya está.
00:17:18
Si además es negativa,
00:17:21
asume que se ha equivocado
00:17:24
el cajero sumando
00:17:25
y no ingreses nada.
00:17:26
Pues venga, vamos a hacer ahora este método.
00:17:29
Este método, su sitio
00:17:31
es aquí, en la clase cuenta,
00:17:32
porque lo que va a hacer está relacionado
00:17:35
con las cuentas.
00:17:37
¿Cómo se va a llamar? Pues ingresar,
00:17:38
que es un nombre bien explicativo.
00:17:40
¿Qué hay que pasarle
00:17:44
como parámetro? Una cantidad.
00:17:45
La cantidad que vamos a ingresar
00:17:47
Vamos a llamarla cantidad, por ejemplo
00:17:49
Ahora
00:17:51
Este método me entrega algo de vuelta
00:17:53
No me entrega nada
00:17:56
Porque su efecto ya se queda reflejado aquí
00:17:57
Su efecto ya se va a quedar
00:18:00
Reflejado en esta variable
00:18:01
¿Verdad?
00:18:03
Entonces, el tipo de dato vamos a ponerlo ahora después
00:18:05
Porque
00:18:07
¿Qué hace el método? Para entender bien que no me devuelve nada
00:18:09
Pues vamos a mirar
00:18:12
Si cantidad
00:18:14
es positiva
00:18:15
porque sólo si es positiva
00:18:17
hago yo algo
00:18:19
si es negativa no hago nada
00:18:22
se supone que ha habido un error de lectura
00:18:23
pues si la cantidad es positiva
00:18:24
ahora eso es lo que decíamos ayer
00:18:27
tengo aquí la ambigüedad
00:18:28
pero espérate tú
00:18:30
cuando pongo yo aquí cantidad
00:18:31
¿a quién me estoy refiriendo?
00:18:33
¿me estoy refiriendo al parámetro cantidad?
00:18:35
¿o me estoy refiriendo a la propiedad cantidad de la clase?
00:18:38
¿a quién me estoy refiriendo?
00:18:41
aquí hay una antigüedad
00:18:42
una antigüedad, una ambigüedad
00:18:43
enorme
00:18:45
bueno, pues Jabba te dice
00:18:46
si tú me das cantidad
00:18:49
en una situación en la cual hay esta
00:18:51
ambigüedad, y es que un
00:18:53
parámetro se llama igual que una propiedad
00:18:55
si tú me das el
00:18:57
nombre, yo voy a entender siempre
00:18:59
que te refieres a este
00:19:01
ah, pues aquí entonces
00:19:03
está bien, has entendido bien, porque yo aquí me
00:19:05
refería a este, pero es que ahora quiero poner
00:19:07
que esta otra cantidad
00:19:09
quiero poner que esta otra
00:19:10
quiero poner que esta otra
00:19:12
se incremente con el parámetro
00:19:18
puesto así es una estupidez
00:19:20
porque cantidad a palo seco
00:19:24
ya Java me ha dicho
00:19:26
cantidad a palo seco es el parámetro
00:19:27
entonces al propio parámetro le estoy sumando su valor
00:19:29
es estúpido, es que este no es
00:19:32
el parámetro, esta es la propiedad
00:19:34
bueno, pues ya dijimos el miércoles
00:19:35
que como
00:19:37
especificábamos que este
00:19:39
término se refiere a la propiedad
00:19:42
y no se refiere al parámetro
00:19:44
Vale
00:19:45
Así
00:19:48
Entonces, ahora
00:19:50
Poniendo el dis delante, estamos especificando
00:19:52
Oye tú, ¿qué cantidad
00:19:55
Se refiere a la propiedad
00:19:56
Cantidad del objeto
00:19:59
En el que estoy
00:20:01
Dis de hecho viene de ahí
00:20:02
Viene de este objeto
00:20:05
Este, este
00:20:06
Este objeto
00:20:07
Puedes hacer, a lo mejor puedes hacerlo
00:20:09
a lo mejor no puedes hacerlo, porque a lo mejor esto
00:20:16
esto es lo que se llama la firma
00:20:18
del método, bueno nos falta poner todavía
00:20:20
entonces la firma del método
00:20:22
a veces, por diseño
00:20:24
te viene ya fijada
00:20:26
entonces a lo mejor tú no
00:20:28
puedes cambiar cosas, porque esa firma
00:20:30
ese método es llamado de muchos sitios
00:20:32
usado por muchas partes
00:20:34
y tú no puedes tocar y de repente cambiar las cosas
00:20:36
y es que no hay
00:20:38
necesidad, es que así
00:20:40
queda muy claro
00:20:41
así es que en realidad queda más claro
00:20:43
a la vista, al ojo, si tú ves aquí cantidad
00:20:55
que se llama igual que lo de arriba, automáticamente haces la conexión
00:20:57
de que seguramente son dos conceptos
00:21:01
relacionados, que con este estás queriendo
00:21:04
hacer algo relacionado con el otro
00:21:07
ya haces una conexión semántica
00:21:09
entonces sí que tiene sentido que se llamen igual
00:21:11
porque una cosa es la información
00:21:13
lo que te dice algo
00:21:15
y otra cosa es la meta información
00:21:17
que es lo que tú
00:21:20
extraes, la información añadida que tú
00:21:21
extraes, entonces tú viendo aquí
00:21:23
que esto se llama igual que esto
00:21:25
extraes automáticamente una información de que
00:21:27
seguramente ese parámetro va a
00:21:29
tocar o tiene relación con el de arriba
00:21:32
seguramente, entonces
00:21:34
sí tiene sentido que se llame igual, aparte que lo deja más
00:21:35
claro, y aparte es que no hay
00:21:37
como la alternativa
00:21:40
es muy sencilla, es poner el dis y ya está
00:21:42
¿vale? bueno, pues entonces este método
00:21:44
solo tendría este código
00:21:48
si la cantidad es negativa
00:21:49
la sumas
00:21:52
a la propiedad
00:21:53
que aquí cuando lo hemos hecho por código
00:21:54
en el main, aquí ni siquiera
00:21:57
lo habíamos verificado, aquí habría que haber metido
00:21:59
un if, o sea, no
00:22:01
bueno, ahora ya sí que
00:22:02
vamos a pensar, este método
00:22:05
me está devolviendo algo a mí
00:22:07
valor de retorno cuando yo le llame
00:22:09
no tiene por qué, porque su
00:22:11
efecto, que es subir una cantidad
00:22:14
su efecto ya se queda aquí
00:22:15
reflejado, en la propiedad del objeto
00:22:17
el propio objeto que llame al método
00:22:19
ya
00:22:22
refleja el resultado
00:22:23
que es el incremento de la cantidad
00:22:26
luego este método no tiene que devolver nada
00:22:27
su efecto ya se ha quedado recogido
00:22:29
aquí arriba, en este incremento, no tiene que devolver nada
00:22:32
entonces como no devuelve nada
00:22:34
pues yo planto un void, porque no devuelve nada
00:22:35
y este método ya está aquí
00:22:38
ahora ya
00:22:41
un valor que tú quieres devolver
00:22:43
y haces un return
00:22:50
de esa variable
00:22:50
claro, por ejemplo, este método
00:22:52
podríamos modificarlo
00:22:57
porque nos gusta más
00:22:59
para que me devolviera
00:23:01
la nueva cantidad
00:23:03
por ejemplo
00:23:05
entonces yo añadiría esto
00:23:07
vale, entonces este método
00:23:09
me sigue haciendo lo que me tiene que hacer
00:23:15
que es lo que importa, lo que importa
00:23:17
es que me incremente la cantidad en el
00:23:19
objeto cuenta, eso es lo que importa
00:23:21
pero además me da el valor como información
00:23:23
por si yo lo que pone un mensaje o lo que sea
00:23:25
además me lo da como información
00:23:27
bueno, pues podemos hacer esta variante
00:23:29
pero si yo no quiero este return
00:23:31
que en realidad no me vale para nada
00:23:33
porque el método lo que cuenta, lo que importa
00:23:35
es que me suba la cantidad de mi cuenta
00:23:37
el único que importa es que me suba la cantidad de la cuenta
00:23:39
no que luego me informe de ella
00:23:41
y me la dé como retorno
00:23:43
entonces si yo no quiero hacer este retun no pasa nada
00:23:44
vale pero bueno
00:23:47
vamos a dejarlo así
00:23:49
no si tú no lo pasas a un siso
00:23:51
no
00:23:59
vale entonces ahora
00:24:00
este método está claro y aquí ya queda
00:24:02
encapsulado lo que hace
00:24:05
y ahora ya la ventaja enorme
00:24:06
es que cualquier programa
00:24:08
que trabaja con cuentas
00:24:10
llama a ingresar y el dinero se ingresa
00:24:12
y ese que llama a ingresar
00:24:15
no se preocupa ni le importa
00:24:17
cómo lo hace y lo deja de hacer, le da exactamente
00:24:19
igual, porque esa
00:24:21
información está encapsulada aquí
00:24:23
vale, pues ¿quién es el que va a llamar a ingresar?
00:24:25
pues este aquí
00:24:27
este aquí
00:24:28
pedimos la cantidad
00:24:29
esta cantidad en un caso real no la pediríamos
00:24:32
repito, sino que se leería del sensor
00:24:37
o de lo que fuera de billetes
00:24:39
y ahora ya
00:24:41
cuenta punto
00:24:42
ingresar
00:24:45
y ahora esa cantidad
00:24:48
que hemos leído
00:24:50
que vamos a leer
00:24:51
vamos a llamar al método en primer lugar así
00:24:52
pues ya está
00:24:59
ahora esto está separado
00:25:02
el main llama a ingresar
00:25:03
¿cómo está hecho el ingreso por dentro?
00:25:06
le da lo mismo
00:25:09
que llega un momento
00:25:10
que cambia el software del cajero
00:25:13
el ingreso necesita
00:25:15
ya que además se verifique algo con la Policía Nacional,
00:25:16
estás haciendo un ingreso en una cuenta que no puedes,
00:25:20
el main no se toca, el main se queda tal cual.
00:25:23
El que se tocaría es este.
00:25:26
Entonces tú vendrías aquí y dirías, cuidado,
00:25:28
pero esto ya sería un tema del cajero, no del que hace el usuario,
00:25:30
no del que hace el programa principal.
00:25:34
Entonces, uy, cuidado que me ha dicho que tengo que verificar
00:25:37
por cada ingreso, tengo que verificar algo.
00:25:40
Pues tú haces aquí la verificación, lo que sea,
00:25:43
y se queda todo aquí encerrado
00:25:45
el programa principal
00:25:47
seguirá llamando a ingresar
00:25:49
y ahí no hay que tocar nada, no hay que cambiar nada
00:25:51
¿vale? pues
00:25:53
por esto es por lo que se hace
00:25:55
programación orientada a objetos, entre otras cosas
00:25:57
por esto, porque si no
00:25:59
perdona, si no
00:26:01
si yo pongo aquí el chorizo
00:26:03
del ingreso, lo planto todo aquí
00:26:05
si de repente me dicen, cuidado que
00:26:07
cuando haces ingresos además tienes que hacer esto
00:26:09
pues me tengo que ir al main, buscar
00:26:11
en el case, empezar aquí a meterlo todo
00:26:13
pues no, es mucho más complicado, sin embargo ahí
00:26:15
tengo la clase cuenta, me voy directamente
00:26:17
a cuenta, porque está ahí colocada, aquí tengo
00:26:19
un main enorme y tengo que empezar a ver dónde está eso
00:26:21
¿vale? dime
00:26:23
¿y si en el método de ingresar
00:26:24
haces lo de que te devuelvan la cantidad?
00:26:26
claro, entonces, ahora mismo, tal y como
00:26:29
yo lo he llamado
00:26:31
tal y como yo lo he llamado, está bien
00:26:32
llamado y el ingreso se hace
00:26:35
lógicamente, pero
00:26:37
me devuelve el nuevo valor
00:26:39
que yo lo estoy tirando a la basura
00:26:41
no pasa nada, pero lo tira a la basura
00:26:43
porque lo que importa es que
00:26:45
mi cuenta se ha quedado con el
00:26:47
nuevo ingreso, eso es lo que cuenta
00:26:49
pero que yo quiero usar ese valor para poner un
00:26:50
mensaje de su nuevo saldo
00:26:53
es no sé qué, pues estupendo
00:26:55
pues estupendo
00:26:57
porque entonces podríamos hacer
00:26:59
esto de aquí, su nuevo
00:27:00
saldo es
00:27:07
y ahora le pasamos esto
00:27:09
al SISO
00:27:11
para que además de ejecutarlo
00:27:12
lo muestre
00:27:14
bueno, pues nada
00:27:16
a ver si le pongo un espacio ahí
00:27:26
ahora sí
00:27:30
vale
00:27:32
pues ahora
00:27:39
¿qué estoy haciendo?
00:27:41
al método lo estoy llamando igualmente
00:27:43
luego el ingreso se va a hacer sí o sí
00:27:45
lo estoy llamando igualmente, el ingreso que es lo que importa
00:27:47
se va a hacer, pero además
00:27:49
el valor de retorno que me está entregando
00:27:51
que es el nuevo saldo
00:27:53
se lo estoy pasando yo al system out
00:27:55
luego además el system out me va a mostrar
00:27:57
la cantidad resultante que me ha devuelto
00:27:59
esta llamada
00:28:02
bueno, pues ya está, me muestra la información
00:28:03
y ya está, no pasa nada, mejor
00:28:06
lo que importa
00:28:08
es que se ha llamado a ingresar
00:28:10
me da igual que se haya llamado a ingresar dentro de un SISO
00:28:12
o se haya llamado fuera
00:28:14
me da igual, se ha llamado a ingresar
00:28:16
y ese ingresar
00:28:18
es el que ha ejecutado
00:28:20
el incremento
00:28:22
¿vale?
00:28:25
¿está claro?
00:28:30
Claro, si nosotros tuviéramos la otra versión, la versión en la que no devuelvo nada, imaginaos que aquí no devuelvo nada y no devuelvo la nueva cantidad, no la devuelvo. Pues porque no quiero devolverla. Hago el incremento y ya está y no lo devuelvo.
00:28:31
Pues
00:28:49
Si yo hago eso
00:28:51
Si yo hago eso
00:28:53
Esto habría dejado de tener sentido
00:28:58
Lógicamente
00:29:01
Porque ahora ya cuenta.ingresar
00:29:02
Me hace el incremento
00:29:05
Pero como no me devuelve nada
00:29:07
El system out me dice
00:29:08
Perdóname, tienes que pasar algo
00:29:10
No me estás pasando nada
00:29:11
Porque este devuelve un void
00:29:13
Y el void es nada
00:29:14
Entonces le estamos pasando nada al system out
00:29:16
No se puede
00:29:19
entonces él diría, perdona, tienes que pasarme algo
00:29:19
y esto no devuelve nada
00:29:22
¿vale?
00:29:24
pero con esta versión en la que devuelve un valor
00:29:28
pues mira, nos encaja
00:29:31
uy, que feo esto
00:29:32
siempre
00:29:34
es bueno en principio
00:29:38
usar los
00:29:40
si el valor de retorno
00:29:43
no lo necesito, porque el método hace otras cosas
00:29:44
pues ya que se me ha quedado ahí
00:29:47
una posibilidad, usarlo
00:29:49
para devolver cosas, que además informen al usuario.
00:29:50
Por ejemplo, un boolean, true,
00:29:54
si se pudo hacer el ingreso o false, si no.
00:29:56
Para dejarlo desocupado,
00:29:59
pues usémoslo para devolver cosas
00:30:01
que luego el usuario puede usar o no puede usar.
00:30:03
Porque que yo aquí ponga aquí un double
00:30:05
y luego lo devuelva,
00:30:07
no significa que luego aquí tenga que usarlo obligatoriamente.
00:30:10
Puedo llamar a cuenta e ingresar o no,
00:30:14
pero al menos le doy esa posibilidad
00:30:16
al programa que me llama para usarlo.
00:30:17
entonces siempre es buena idea
00:30:19
ya que está de sobras
00:30:21
este valor, pues mira
00:30:23
usarlo para algo y si el usuario quiere
00:30:25
pero claro, todo eso yo tendría que dejarlo muy bien
00:30:27
documentado
00:30:29
todavía no habéis empezado lógicamente con las dos horas
00:30:30
que tenéis dentro de los de desarrollo, documentación
00:30:33
en javadoc y nada de eso
00:30:35
vale
00:30:37
es
00:30:39
bueno, es que claro, tenéis poco tiempo
00:30:40
pero dejamos un segundín que termine
00:30:43
claro, cuando uno hace un método
00:30:45
lo ideal
00:30:47
es que comente bien
00:30:49
lo que hace
00:30:51
que dé explicaciones
00:30:53
de lo que sirve cada parámetro
00:30:54
lo que devuelve, qué significa
00:30:56
eso es fundamental, que lo documente bien
00:30:58
porque luego
00:31:01
el desarrollador que va a usar el método
00:31:02
no se quiere meter aquí
00:31:05
a ver qué hace y qué es cada cosa
00:31:06
lo que quiere es ver la documentación
00:31:09
y decir, ah vale, este método me interesa
00:31:11
hace justo lo que quiero
00:31:13
pues entonces lo uso
00:31:14
y no se va a meter aquí
00:31:17
a ver esto
00:31:19
entonces, muy rapidísimo
00:31:19
esto lo veréis en más detalle si os
00:31:23
da tiempo en entornos de desarrollo
00:31:25
vosotros ya sabéis
00:31:27
y ahora Mario no me ha olvidado, me pregunta
00:31:29
lo que me vas a preguntar, ya sabéis que
00:31:31
en general comentar es así
00:31:33
o así si es un comentario
00:31:34
multilínea
00:31:37
lo que sea, bueno, uno puede comentar
00:31:39
y en cualquier momento, porque hay comentarios, se acabó
00:31:41
pero hay unos comentarios especiales
00:31:43
que son para documentar
00:31:45
código, porque
00:31:47
que son comentarios que sirven de entrada a aplicaciones
00:31:48
que luego, como la de Javadoc, que generan unos HTML estupendos.
00:31:51
Eso es lo que se supone que veis en entornos de desarrollo.
00:31:55
Entonces, esos comentarios siguen un formato especial,
00:31:57
que son la barra, dos asteriscos en lugar de uno,
00:32:02
dos asteriscos, y si le dais al Enter,
00:32:05
ya os aparece esto directamente
00:32:08
antes del método donde lo estáis haciendo.
00:32:10
Y aquí es buena idea explicar, porque aquí dices,
00:32:14
para cantidad que es cantidad la cantidad a ingresar retún que me estás devolviendo retún
00:32:17
pues devuelvo la cantidad el saldo actualizado y aquí se explicaría este método e ingresa una
00:32:25
cantidad y ahí uno cuenta
00:32:44
su rollo, ¿vale?
00:32:46
Entonces esta documentación de aquí
00:32:48
es magnífica
00:32:50
porque ahora ya, ¿qué es lo que ocurre?
00:32:51
¿Vale? Fijaos
00:32:58
en cuanto yo he puesto
00:32:59
mi cursor en ingresar, ¿qué me ha salido?
00:33:00
Toda la explicación.
00:33:03
Este método ingresa una cantidad.
00:33:05
Cantidad es la cantidad que ingresar.
00:33:07
Me devuelve el saldo actualizado.
00:33:09
Entonces el que está desarrollando
00:33:11
y llama a este método
00:33:12
pum, le aparecen todas
00:33:14
las explicaciones que yo estoy dando
00:33:17
entonces es buena idea
00:33:19
no es que sea buena idea, es
00:33:21
crucial cuando uno desarrolla
00:33:22
clases
00:33:25
los métodos de esas clases documentarlos
00:33:26
de esta manera, porque los que nos usen
00:33:29
no se van a meter en nuestro código
00:33:31
a averiguar lo que hace, van a esperar
00:33:33
que se lo expliquemos
00:33:35
pues se explica con ese tipo de comentarios
00:33:36
¿vale?
00:33:39
nosotros no vamos a hacer cada
00:33:42
método que hagamos, no vamos a estarlo documentando
00:33:43
porque es un rollo, pero bueno
00:33:45
que conozcáis esto
00:33:47
vale, esto
00:33:49
venía en relación a la pregunta de si es bueno
00:33:51
que devuelva o no devuelva, pues
00:33:53
depende de la situación en la que estés
00:33:55
y si lo tienes
00:33:57
inutilizado, mejor usarlo
00:33:59
pero siempre documenta
00:34:00
para que quien lo usa sepa eso que estás
00:34:03
devolviendo que es, y sepa si le
00:34:05
interesa usarlo, no le interesa usarlo, etc
00:34:07
vale
00:34:09
Vale, pues ingresar ya habría acabado.
00:34:10
Cantidad, su nuevo saldo es esto y se acabó.
00:34:15
Ahora, ¿qué es lo siguiente que puede hacer alguien en el cajero?
00:34:19
Sacar dinero.
00:34:23
Vale, pues sacar dinero, de nuevo, no tiene sentido que hagamos aquí todo el código para sacar dinero,
00:34:25
si te has quedado a cero, patatín, patatán.
00:34:30
Vamos a hacerlo, como es algo que se hace con los objetos cuenta, vamos a hacerlo aquí.
00:34:33
y el método sacar dinero
00:34:37
nos dicen aquí que
00:34:39
retira una cantidad, pero si
00:34:40
restando se queda negativa
00:34:43
no dejes el saldo en negativo, déjalo en cero
00:34:45
vale
00:34:48
pues hala
00:34:49
en principio este lo mismo
00:34:50
en principio no devolvería nada
00:34:57
porque
00:34:59
su efecto se queda en la cantidad
00:35:01
del objeto, se queda aquí
00:35:04
luego no tiene por qué devolver nada
00:35:05
y aquí que se retira
00:35:07
pues se retira una cantidad
00:35:12
Y ahora, ¿cuál es el problema?
00:35:14
Pues lo que se actualiza es esta cantidad de aquí
00:35:21
Esta es la que se actualiza
00:35:24
¿Y qué se le da?
00:35:26
Depende, la resta de la cantidad original menos esta
00:35:28
Si es mayor que cero o si no cero
00:35:33
Luego esto es un ternario, entonces
00:35:35
Un ternario que depende
00:35:38
Si dispunto cantidad menos la que voy a restar
00:35:40
menos cantidad
00:35:44
esto es mayor que cero
00:35:46
si es mayor que cero, estupendo
00:35:49
entonces la nueva cantidad
00:35:53
la actualizo a
00:35:54
descantidad menos cantidad
00:35:56
¿vale? muy bien
00:35:58
y si no
00:36:00
si no es mayor que cero
00:36:02
o es negativa, pues a cero
00:36:04
¿vale? es lo que me dice el método
00:36:06
si el resultado de la retirada
00:36:09
es positivo, pues quédate con ese
00:36:12
resultado, si
00:36:14
es negativo, da
00:36:16
cero, y aquí también
00:36:18
podríamos decir, oye, este valor
00:36:24
de retorno, voy
00:36:26
vale, ya que está sin usar
00:36:28
ya que está sin usar, voy
00:36:30
a usarlo para meter en esa caja
00:36:32
yo te doy una caja con el saldo actualizado
00:36:34
si quieres lo usas
00:36:36
y si no, no, me da igual
00:36:38
porque el resultado está hecho
00:36:40
el resultado está hecho, que es cambiar esta
00:36:42
propiedad, el resultado está hecho
00:36:44
Venga, pues ya que hemos seguido ese criterio
00:36:46
En el anterior, vamos a seguir
00:36:49
Vamos a seguirlo en este
00:36:50
Ya que hemos usado ese criterio, vamos a seguirlo aquí
00:36:52
Vamos a seguirlo aquí
00:36:55
Y ya de paso
00:36:58
Ya de paso lo devolvemos
00:37:00
Para que el usuario lo verifique o lo que sea
00:37:14
Mario, te iba a preguntar algo
00:37:16
Para dis es para referirte
00:37:17
El objeto en el que estoy
00:37:24
Con lo cual cantidad sería
00:37:26
La propiedad cantidad del objeto
00:37:28
Esta
00:37:30
Si yo no pongo aquí el dis
00:37:31
si no lo pongo
00:37:34
entonces se interpreta
00:37:35
que es este parámetro
00:37:38
porque el problema es que se llaman igual
00:37:39
el parámetro
00:37:41
pues entonces
00:37:50
tienes una ambigüedad que tienes que resolver
00:37:55
obligatoriamente con el dis
00:37:57
dis se refiere a la propiedad
00:37:58
y no dis
00:38:03
no poner nada se refiere a este
00:38:04
¿vale? con lo cual aquí
00:38:07
hay que ponerlo, no hay alternativa
00:38:11
si no lo ponemos, este método
00:38:13
no estaría haciendo lo que hay que hacer
00:38:15
porque estaría
00:38:16
si yo no pongo el dis, estaría
00:38:19
a este mismo parámetro sumarle el mismo
00:38:21
no es eso lo que queremos
00:38:23
queremos al de arriba
00:38:24
¿vale? con lo cual aquí hay que poner dis obligatorio
00:38:26
no tenemos elección
00:38:29
¿vale?
00:38:30
cuando no hay ambigüedad y el parámetro
00:38:32
no se llama igual
00:38:35
no hace falta que pongas el dis porque ahí no hay alternativa
00:38:36
te vas a referir siempre al de arriba
00:38:39
vale
00:38:40
vale, venga, pues paramos entonces
00:38:41
por lo que veo
00:38:45
- 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:
- 2
- Fecha:
- 6 de diciembre de 2025 - 11:25
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 38′ 48″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 145.00 MBytes