Prog2223 visibilidad - 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:
Vale, todo lo que decís a partir de ahora será grabado
00:00:00
Y asumimos que me dais vuestro consentimiento para que sea grabado
00:00:06
Vale, entonces, decíamos la última vez que estamos hablando de organización de código
00:00:11
Que existían los packages, vale, que permiten pillar varias clases
00:00:16
Y hacer una estructura, un conjunto, vale, y tenerlos juntos en un paquete de clases
00:00:21
Por ahora es solo para organización de código
00:00:29
Luego a lo mejor usos más avanzados lo veremos más en el futuro
00:00:33
Lo que sí me interesa es el concepto de overloading
00:00:35
Existen dos conceptos en un cierto sentido relacionados
00:00:39
Pero no, uno es overload, otro es overwrite
00:00:44
Pero el overwrite lo veremos más adelante
00:00:47
Por ahora es el overload
00:00:50
Cuando se habla de overloading, que ya lo hemos visto anteriormente
00:00:51
rápidamente es que un mismo método se puede sobrecargar eso quiere decir cuando tengo un
00:00:55
método que tiene un determinado nombre el cálculo área el área lo puedo sobrecargar y hacer que de
00:01:01
este método área haya varias versiones vale haya un área que no pilla nada de parámetros hay un
00:01:08
área que pilla el lado hay un área que pilla el lado en la altura hay un área que pilla al lado
00:01:15
altura y no sé otra cosa vale el concepto es que el mismo método llamado igual puede tener
00:01:21
varias versiones que se diferencian en el número y tipo de parámetros que recibe es fundamental
00:01:29
que cada método de este tipo de cada sobrecarga de este método tenga un número o un número
00:01:39
diferente, lo pone aquí, o el número de parámetros de entrada son diferentes
00:01:47
o el tipo de algunos de los parámetros son diferentes
00:01:51
o una combinación de los dos anteriores
00:01:55
el concepto es que cuando yo llamo ese método y le paso
00:01:58
ciertos parámetros, el compilador, el
00:02:03
Java Internet Machine o quien lo ejecute, tiene que saber en ese instante
00:02:07
cual de las varias versiones, cual de las varias
00:02:11
métodos sobrecargados voy a utilizar
00:02:14
tiene que ser seguro
00:02:17
entonces si yo tengo un método
00:02:19
que tiene int e int
00:02:21
y hace una cosa
00:02:23
y otro método que tuviera int e int
00:02:25
lo mismo y tiene que hacer una cosa distinta
00:02:27
no puede funcionar
00:02:29
porque cuando a mi me pasan 3 y 7
00:02:30
yo no sé si usar la primera o la segunda
00:02:33
versión ¿vale? asumiendo que
00:02:35
tenga el mismo nombre
00:02:37
tengo un ejemplo
00:02:38
vamos a hacer un ejemplo
00:02:40
Básico
00:02:43
Imaginémonos que yo tenga
00:02:45
Public
00:02:51
Void
00:02:59
Método
00:03:01
Así, ¿vale?
00:03:02
Que hace algo
00:03:05
Yo puedo sobrecargar este método
00:03:06
Diciendo, vale
00:03:12
Hay otro método que se llama
00:03:13
Igual, ¿vale? Pero pilla un entero
00:03:15
Algo
00:03:18
Al ser posible
00:03:21
Usando X
00:03:25
Es muy mala programación
00:03:27
Tener dos métodos que hagan
00:03:32
Cosas distintas y se llaman igual
00:03:34
Pero a uno le pongo Y
00:03:36
Para poder sobrecargar y luego X no lo usa aquí dentro
00:03:37
Si te lo paso es porque
00:03:40
Tú hagas algo
00:03:42
Entonces, puedo crear
00:03:42
De estos cuanto me da la gana
00:03:46
Siempre y cuando o cambia
00:03:47
El tipo
00:03:49
O cambiar el número de parámetros
00:03:50
¿Vale? Por ejemplo
00:03:57
Mientras que yo cambie
00:03:58
Número de parámetros
00:04:15
O tipo de parámetros
00:04:19
Puedo hacer lo que me da la gana
00:04:21
Y meter el mismo método
00:04:23
Utilizando también
00:04:25
La idea es que si se llaman igual
00:04:27
Es porque hacen algo bastante parecido
00:04:29
¿Vale?
00:04:32
Calcular área, calculará una área
00:04:33
¿Vale?
00:04:35
Esto lo hará del método del mismo objeto
00:04:36
Este de aquí del mismo objeto
00:04:41
Pero utilizará este x para algo
00:04:43
No lo sé, ¿vale?
00:04:45
Es un ejemplo abstracto
00:04:47
Esto utilizará el double
00:04:48
Esto utilizará el double o el int
00:04:50
No lo sé, ¿vale?
00:04:51
Pero lo tiene que utilizar
00:04:52
Y si se llaman iguales
00:04:53
Porque son el mismo método
00:04:54
Es una sobrecarga o un método
00:04:56
No tendría sentido que esto haga una cosa
00:04:58
Y esto haga una cosa
00:05:00
Que no tiene nada que ver con el otro
00:05:01
¿Vale? Entonces se llaman los distintos
00:05:03
Y ya está
00:05:04
Si esto calcula la área y esto calcula el perímetro
00:05:05
Pues se llama la cálcula de área y la cálcula de perímetro
00:05:08
No hagas que se llaman los dos cálcula
00:05:10
Y uno a cálcula de área y uno a cálcula de perímetro
00:05:12
Es mala programación
00:05:14
¿Sí? ¿Se entiende?
00:05:16
Lo que no puede hacer
00:05:18
Es sobrecargar así
00:05:19
Ya está
00:05:23
Esto no funciona bien
00:05:28
¿Vale? Porque cuando yo
00:05:30
En algún lado llamo
00:05:32
Método, objeto
00:05:34
¿Vale? Porque no es estático
00:05:36
Objeto punto método
00:05:38
De tres
00:05:39
De dos
00:05:42
¿Qué voy a ejecutar?
00:05:42
¿Este código o este código?
00:05:47
No se puede saber
00:05:51
Porque aquí me están pasando un entero
00:05:52
Entonces
00:05:53
Hay este método aquí que pilla un entero
00:05:54
Este método aquí que pilla un entero
00:05:56
Uno de los dos me vale
00:05:58
Pero es que no sé cuál
00:05:59
Y si no es determinista la elección
00:06:01
Pues no me vale
00:06:04
En cualquier momento
00:06:05
El procesador o quien por él
00:06:08
Tiene que saber que va a ejecutar
00:06:10
Y así tú le estás haciendo una cosa ambigua
00:06:12
Hay dos opciones
00:06:15
Y podría elegir cualquiera de las dos
00:06:16
Porque a cualquiera de las dos le vale
00:06:18
Eso no se puede hacer
00:06:19
En un cierto sentido
00:06:21
Hacemos lo mismo con los
00:06:26
Constructores
00:06:27
Son sobrecargados también
00:06:29
Porque puede tener un constructor sin ningún parámetro
00:06:32
Un constructor
00:06:34
Con varios parámetros
00:06:35
Un constructor con un parámetro solo
00:06:37
Y el resto veo que hago, etc, etc
00:06:39
¿Dudas?
00:06:41
Vale
00:06:45
Tened en cuenta que lo que devuelve
00:06:45
No es parte
00:06:50
De la sobrecarga, es decir
00:06:52
Si esto dice, esto devuelve void
00:06:53
Esto devuelve int, son distintos
00:06:55
No, porque es lo mismo
00:06:57
Cuando yo lo llamo
00:06:58
No sé si este método de aquí que recibe un intero
00:07:00
Es este o este de aquí
00:07:03
Independientemente de que luego devuelva o no devuelva
00:07:04
¿Sí?
00:07:07
Entonces, digamos que para la sobrecarga lo que cuenta es
00:07:08
El número de parámetros y el nombre
00:07:11
Porque si son nombres distintos ya no está sobrecargando
00:07:14
Y el tipo de parámetros y el nombre de parámetros
00:07:17
¿Vale?
00:07:21
Lo que viene a ser lo que se llama, se conoce como firma
00:07:22
¿Vale?
00:07:25
La firma de un método es su nombre y los parámetros que recibe
00:07:27
Y tiene que ser única
00:07:31
Todo esto, tanto porque ya estamos
00:07:33
Es el prototipo
00:07:38
Cuando yo hablo del prototipo
00:07:41
De un método, es este de aquí
00:07:42
Si es público, privado
00:07:44
Lo que sea, lo que devuelve
00:07:47
Como se llama y los parámetros que pide
00:07:49
Prototipo
00:07:50
Este de aquí, en un cierto sentido
00:07:52
Sería la firma
00:07:54
Y se puede sobrecargar
00:07:55
Dudas
00:07:58
Creo que alguna vez lo hemos hecho
00:07:59
Con los constructores seguramente
00:08:04
con los métodos, no sé si hemos llegado
00:08:06
a hacer algún ejemplo, puede ser
00:08:08
con algún método de nombre y tal
00:08:10
lo de anónimo
00:08:12
por ejemplo, vale
00:08:13
y ya está
00:08:15
entonces, luego, bueno, se ha empezado
00:08:18
la creación de código
00:08:20
organizarse, los paquetes
00:08:21
pueden estar un paquete dentro de un paquete
00:08:24
dentro de un paquete, es algo parecido a lo que
00:08:26
funciona en un sistema operativo con las carpetas
00:08:28
de hecho
00:08:31
los paquetes que yo creo, luego
00:08:32
en SRC, en la carpeta SRC
00:08:34
Se crean como carpetas ahí dentro
00:08:36
Pero cuando me quiero referenciar a alguno de ellos
00:08:38
No uso la barra como en el sistema operativo
00:08:41
Sino uso los puntos
00:08:44
Cuando nosotros hacemos import java.util.scanner
00:08:44
Lo que estamos haciendo es pillar el paquete java
00:08:50
Entrar en el subpaquete útil
00:08:53
Y dentro del subpaquete útil
00:08:56
Si pongo asterisco pillo todo el subpaquete
00:08:57
Si pongo scanner pillo solo la clase scanner
00:08:59
Por ejemplo, ¿vale?
00:09:02
Pero esto lo veremos en un futuro
00:09:03
Y también está la variable classpath que la hemos configurado al principio
00:09:05
Hemos ya hablado un poquito de esto
00:09:10
Pero estas cosas luego son muy genéricas
00:09:11
Lo veis esto que tanto viene en el vídeo
00:09:15
Pero luego cuando sirven de verdad ya nos pondremos y profundizaremos allí
00:09:18
Por ahora no
00:09:25
Lo que sí me interesa ahora y a un poquito hablar
00:09:26
Es lo que se llama encapsulación y visibilidad
00:09:29
Es decir, las palabritas está public, protected, packaged, private, ¿vale?
00:09:32
Nosotros por ahora hemos casi siempre utilizado en los ejemplos que hemos hecho public o nada, ¿vale?
00:09:38
Aquí public, algunos ejemplitos que hemos puesto no hemos puesto nada, ¿vale?
00:09:48
Pero no sabemos qué quiere decir, ¿vale?
00:09:52
Entonces, la idea es qué visibilidad tiene este elemento de código que yo voy a crear, ¿vale?
00:09:55
Public, private se puede poner en clases, se puede poner en variables, se puede poner en métodos, ¿vale?
00:10:06
Es decir, que nosotros donde hemos visto public, para hacer un ejemplo aquí, lo hemos visto cuando declaramos una clase,
00:10:14
clase pública, cuando declaramos
00:10:20
por ejemplo un
00:10:22
constructor, cuando declaramos
00:10:23
un método, cuando construyamos
00:10:26
una
00:10:28
variable, la podemos declarar public
00:10:29
también, o nada, o lo que sea, ¿vale?
00:10:32
¿Más public entonces?
00:10:34
No, no, no, son dos cosas distintas, ahora
00:10:36
lo vamos a ver, ¿vale? Pero aquí puedo poner
00:10:38
public int ancho
00:10:40
o int ancho, o protect int
00:10:42
ancho, o private int ancho
00:10:44
¿vale? Es el modificador
00:10:46
que se pone aquí delante
00:10:48
Y repito, se puede poner en clases, variables, también en constructores y métodos
00:10:49
Probablemente en otras cosas, lo veremos en el futuro
00:10:56
Por ahora estas cosas aquí
00:10:59
¿Y para qué sirven?
00:11:00
Sirven para dar visibilidad a esa entidad, a ese elemento
00:11:02
Es decir, de dónde se puede ver ese elemento
00:11:06
Dependiendo de la palabra que pongo, podré acceder a ese método, a esa variable
00:11:10
Desde más o menos
00:11:16
Otros sitios
00:11:20
Por ejemplo, es más fácil de todo
00:11:22
Public, si yo pongo public
00:11:26
Cualquiera puede acceder
00:11:27
A esa variable o a ese método
00:11:30
Y con cualquiera quiero decir
00:11:31
Código dentro de esta variable
00:11:33
De esta clase
00:11:36
O código desde otra clase
00:11:37
¿Sí?
00:11:39
Esto, por ejemplo
00:11:41
Creo que aquí tengo un problema
00:11:42
Pongamos esta cosa aquí
00:11:45
Aquí son dos clases distintas
00:11:48
¿Sí?
00:11:50
Clase de rectángulo y la clase de rectángulo área
00:11:51
Si yo este de aquí lo declaro como public int largo
00:11:53
Desde aquí
00:11:57
Puedo hacer tranquilamente rec1.largo
00:11:58
¿Sí?
00:12:03
Porque esta variable es pública
00:12:07
Se puede acceder desde cualquier clase
00:12:09
Si alguien crea un rectángulo
00:12:11
Está autorizado a hacer
00:12:14
Rec1.largo
00:12:16
¿Vale?
00:12:18
En otra clase, si vale, pero aquí acedo
00:12:19
A este objeto que he creado
00:12:21
Y a su variable, porque es pública
00:12:23
Si este tiene
00:12:25
Public quinta área, por ejemplo
00:12:29
Yo puedo llamar
00:12:31
Rectángulo1.area desde otra clase
00:12:32
Tranquilamente, sin problemas
00:12:35
¿Vale? Cuando es público
00:12:36
Puede acceder a sus métodos públicos
00:12:38
O a sus variables públicas
00:12:41
Desde cualquier otra clase
00:12:43
Que haya creado un objeto de ese tipo
00:12:45
O que haya utilizado un método estático de ese tipo
00:12:47
¿Sí? Vale
00:12:50
Vamos restringiendo
00:12:52
Es decir
00:12:55
Si no es public
00:12:56
Quiere decir que no todos pueden acceder
00:12:58
¿Vale?
00:13:01
El siguiente paso es protected
00:13:02
Lo pongo en rojo
00:13:05
Porque para entender protected
00:13:07
Nos falta un concepto
00:13:10
Que es la herencia
00:13:11
Que nosotros no sabemos
00:13:12
entonces, mientras que no sabemos la herencia
00:13:14
protected es como que
00:13:16
¿vale? pero os lo pongo aquí
00:13:18
la definición en rojo para que
00:13:20
quitemos el rojo cuando luego sabemos la herencia
00:13:22
¿vale? y es lo siguiente
00:13:24
yo puedo acceder a esta
00:13:26
variable o a este método
00:13:28
solo desde clases que
00:13:30
o heredan
00:13:33
que es lo que no entendemos
00:13:34
¿vale? o son del mismo
00:13:36
paquete
00:13:39
es decir, si cuando creo las variables
00:13:39
Creo un paquete que puede ser el default package
00:13:42
O creo un paquetito que se llama operaciones
00:13:45
Y allí dentro hay varias clases
00:13:50
Cualquiera de estas clases puede acceder a una variable
00:13:52
O a un método declarado como protected
00:13:56
Si yo tengo dos paquetes
00:13:59
Y en el paquete B
00:14:03
Creo un objeto que está en el paquete A
00:14:05
E intento acceder a una variable protected
00:14:12
Del paquete A
00:14:15
Me va a decir no
00:14:16
Porque no estás en el mismo paquete
00:14:17
Si no estás en el mismo paquete
00:14:19
No puedes acceder a eso
00:14:21
Tampoco
00:14:24
Físicamente entonces los directorios
00:14:27
Tienen que estar
00:14:31
Al mismo nivel o por debajo
00:14:31
Quien define donde estoy
00:14:33
Es la primera línea
00:14:36
Cuando yo creo un paquete
00:14:37
Añado en la primera línea
00:14:39
Package y el nombre del paquete
00:14:41
Si las dos clases tienen el mismo package definido, pues son del mismo paquete, por lo tanto se pueden ver entre ellos si son protected, ¿vale?
00:14:43
Si en vez tienen un package distinto, pues entonces no están en el mismo paquete y si es protected no accede, ¿vale?
00:14:52
Recuerdo que protected es o hereda, ¿vale? O tiene una relación especial que nosotros no hemos visto todavía, el extend, para quien lo ha visto el año pasado, o está en el mismo paquete.
00:14:59
Entonces se pueden ver, si no, no
00:15:12
¿Sí?
00:15:13
La otra opción, package
00:15:15
Es lo mismo que protected
00:15:17
Pero sin herencia
00:15:19
O sea, si están en el mismo paquete
00:15:20
¿Vale? A nosotros por ahora
00:15:23
Estas dos cosas son iguales porque no sabemos que es la herencia
00:15:25
¿Vale? Entonces lo entenderemos
00:15:27
Por ahora nosotros usamos public package
00:15:29
O private
00:15:31
¿Sí?
00:15:32
Creo
00:15:36
Que siempre se me olvida
00:15:37
Que si no pongo nada
00:15:38
Por defecto es protected
00:15:40
Entonces cuando no ponemos
00:15:42
Ningún modificador
00:15:45
Él asume que es protected
00:15:46
Herencia y mismo paquete
00:15:48
¿Sí?
00:15:51
Aún así nosotros los ejemplos que hacemos ahora
00:15:52
Que trabajaremos ahora
00:15:54
A principio sobre todo
00:15:56
Utilizaremos public y private ¿Vale?
00:15:58
Para ir a los extremos
00:16:00
Luego más adelante cuando veremos un poquito
00:16:02
Las cosas más complejas pues a lo mejor
00:16:04
Ya empezamos a hilar más fin
00:16:05
¿Sí?
00:16:07
Y el último, el más restritivo de todos es private
00:16:08
El private solo se puede acceder desde la misma clase
00:16:12
¿Vale?
00:16:17
Son variables que yo accedo solo desde esta clase
00:16:19
No puedo acceder desde fuera
00:16:22
Eso quiere decir que si yo aquí en rectángulo
00:16:24
Pongo que largo es private int largo
00:16:27
Desde aquí no puedo hacer recuno punto largo
00:16:32
Me da error
00:16:36
Porque no estoy en la misma clase
00:16:37
Hasta si estuviera en el mismo paquete
00:16:39
¿Sí?
00:16:41
Clipset
00:16:45
Vamos a probar un poco
00:16:45
Hacemos un ejercicio sencillo
00:16:58
Donde probamos estas cosas
00:17:05
¿Vale?
00:17:07
Vamos a crear un par de clases
00:17:09
¿Vale?
00:17:19
La primera clase que creo es la clase cuenta
00:17:20
Que no será
00:17:23
Con el
00:17:27
Me la he puesto en geometría
00:17:29
Yo no la quiero en geometría
00:17:31
La pongo en otro paquete
00:17:33
Y luego creo
00:17:34
Luego después a lo mejor jugamos con los paquetes
00:17:39
¿Vale?
00:17:41
Otra clase que es main cuenta
00:17:42
Para usarla
00:17:45
¿Vale?
00:17:47
Entonces, ¿qué es mi clase cuenta?
00:17:49
Pues mi clase cuenta
00:17:52
Representa una cuenta de banco
00:17:53
muy sencilla vale porque en realidad como la demo no es muy segura vale entonces una cuenta
00:17:54
del banco que tiene propiedades de la cuenta del banco qué es el número un inter un string
00:18:02
que queremos hacer si yo uso otra letra también puede poner string si pongo solo solo numérico
00:18:14
Podría pensarlo como un int
00:18:21
Para tener en cuenta que tiene poco sentido
00:18:23
Por ejemplo, sumar entre ellas dos cuentas bancarias
00:18:26
Entonces no es un int
00:18:28
Es siempre un código
00:18:29
Int
00:18:30
Num cuenta
00:18:32
¿Qué más?
00:18:35
Saldo
00:18:40
Int saldo
00:18:41
Nosotros gastamos solo euros
00:18:43
Las céntimos no nos interesa
00:18:45
String titular
00:18:46
¿Vale?
00:18:50
y lo dejamos así, por ahora
00:18:53
luego después a lo mejor le añadimos
00:18:56
métodos de aumentar
00:18:58
disminuir, cosas por el estilo
00:18:59
entonces ahora yo tengo
00:19:01
el main cuenta, que es lo que utiliza esta cuenta
00:19:03
¿qué hago? me creo
00:19:06
un objeto
00:19:07
cuenta
00:19:08
¿sí? entonces
00:19:11
cuenta
00:19:13
mi cuenta
00:19:14
es igual a new
00:19:16
cuenta, por defecto tiene
00:19:19
Un
00:19:21
¿Cómo se llama esto?
00:19:22
Un constructor por defecto
00:19:25
¿Vale? Me he creado un objeto
00:19:28
¿Sí? Y ahora tendrá
00:19:29
Estas cosas aquí
00:19:31
Y yo puedo hacer tranquilamente
00:19:33
Mi cuenta.titular
00:19:35
Es igual a yo
00:19:38
Y mi cuenta.sueldo
00:19:41
Saldo
00:19:48
Saldo es otra cosa
00:19:49
es
00:19:51
calderilla
00:19:54
lo que tenemos todos en nuestro
00:20:00
bolsillo y mi cuenta
00:20:02
punto
00:20:05
que es, no mi cuenta
00:20:06
es igual a
00:20:08
vale
00:20:12
estamos todos felices
00:20:15
todos nos fiaríamos de un banco
00:20:18
que tenga cuentas
00:20:20
a la que cualquiera pueda acceder
00:20:22
Y cambiar lo que le da la gana
00:20:24
Y cambiar de titular
00:20:26
Y si yo veo que tú tienes más dinero
00:20:27
Pues te accedas a tu cuenta, te cambias el titular
00:20:29
Y se acabó
00:20:31
Ningún problema
00:20:32
Y tened en cuenta que esta la puedo haber hecho yo
00:20:33
Como banco
00:20:37
Pero ahora la está usando
00:20:38
Una aplicación externa
00:20:40
De otra persona
00:20:43
Que usa mi cuenta
00:20:44
Del banco
00:20:47
Algo para decir
00:20:48
Estoy simplificando bastante
00:20:49
Entonces, ¿cómo puedo evitar
00:20:51
Que este señor
00:20:53
Empezamos desde lo básico, ¿vale?
00:20:56
Me he asignado yo mi cuenta
00:20:58
Y yo decido, me gusta el 37
00:21:00
Pues mi cuenta es la 37
00:21:03
Ahí, ya está
00:21:04
Tiene sentido
00:21:05
¿Cómo se asocia?
00:21:08
¿Cómo se crean las números de cuenta
00:21:12
De un cuenta corriente?
00:21:14
¿Al actoreo?
00:21:16
Al actoreo no, vale
00:21:17
Yo supongo
00:21:22
Que tengan un orden
00:21:23
Si aquí hay mil cuentas
00:21:25
El siguiente que venga tendrá la cuenta 1001
00:21:27
¿No? No sé si habrá
00:21:30
Algo de
00:21:31
Una parte que luego hará un código hash
00:21:32
Para que sea un...
00:21:35
No lo sé, hipotetizamos que
00:21:37
Si yo en mi banco tengo mil cuentas, pues el siguiente
00:21:38
Tiene que tener 1001
00:21:41
¿Vale? Entonces no quiero que pueda
00:21:42
Él cambiársela. ¿Cómo lo hago?
00:21:45
Pues
00:21:52
¿Cómo impido a que este señor
00:21:52
Pueda acceder a su nueva cuenta?
00:21:55
El field
00:21:57
Cuenta, punto, no cuenta
00:22:14
Is not visible
00:22:16
No puedes
00:22:17
Oye, cuidado, eh, aquí yo no estoy tocando
00:22:18
Nada de seguridad informática
00:22:22
O muy, muy básica, vale
00:22:24
No es que los bancos están seguros
00:22:26
Porque han puesto private, vale
00:22:28
Hay mogollón de más
00:22:30
De seguridad informática
00:22:32
De criptografía
00:22:34
De controles y cosas por el estilo
00:22:35
Vale, pero de algo
00:22:38
Tenemos que empezar, vale
00:22:39
Ahora, no es tanto
00:22:41
Que yo he salvado mi cuenta
00:22:43
¿Vale? Cuanto he dicho
00:22:45
Oye, mira, esta variable de aquí
00:22:47
Es una variable crítica
00:22:49
Yo no quiero que la gente haga lo que le da
00:22:50
La gana con esta variable
00:22:53
Quiero que yo tenga el control sobre esta variable
00:22:55
¿Vale? Entonces
00:22:57
Te voy a decir que fuera de esta clase
00:22:59
Que es la que desarrollo yo
00:23:01
Nadie puede tocar este
00:23:03
En un cuento
00:23:05
¿Vale? He empezado por ahí
00:23:06
Ahora, pero tendré que hacer algo
00:23:08
con este en un cuenta
00:23:10
entonces, por ejemplo, me creo
00:23:12
un constructor
00:23:14
fijaos, sin parámetros
00:23:15
pero yo ahora quiero que
00:23:23
este en un cuenta, como
00:23:25
desde fuera yo no puedo crear
00:23:27
un objeto cuenta y luego darle un
00:23:29
número, porque ahora ya no puedo acceder
00:23:31
quiero que la gestión de
00:23:33
este número
00:23:35
se realice desde aquí
00:23:36
es decir, que
00:23:39
soy yo, que cuando alguien me
00:23:41
pide de crear un nuevo objeto cuenta
00:23:43
Le asigno un número nuevo
00:23:45
¿Cómo lo hago?
00:23:47
Estático
00:24:06
Yo pondría arriba un contador estático
00:24:07
¿Cuántas cuentas?
00:24:10
¿Os gusta?
00:24:31
Por ejemplo
00:24:43
Entonces si yo quería la 37, ¿no?
00:24:44
Vale
00:24:47
Cuenta, punto
00:24:48
¿Cuántas cuentas?
00:24:51
Bueno, 36
00:24:56
Y ahora
00:24:57
Me creo
00:25:01
Mi buena
00:25:02
Cuenta, ya está, ya tengo el 37
00:25:03
Solucionado
00:25:06
¿Eh? ¿Era lo que queríamos?
00:25:08
Sí
00:25:11
Claro
00:25:11
Creo que esto va por
00:25:12
Al principio
00:25:23
¿Sí? O sea
00:25:24
Me creo una variable de clase
00:25:28
Que pero existe solo aquí dentro
00:25:31
Y que nadie desde fuera
00:25:33
Pueda ir a toquetear
00:25:35
Porque si no, tengo un problema
00:25:37
Igualmente, ¿vale?
00:25:39
Y luego
00:25:40
Esta de aquí
00:25:41
Crea un método de crear cuenta
00:25:44
Que solo
00:25:46
Se toquetea esta cosa aquí dentro
00:25:47
¿Vale? Y esto
00:25:50
Entonces ahora lo que he hecho es
00:25:51
Que no es que esto no se pueda cambiar
00:25:54
O no se pueda estanciar
00:25:56
Pero se puede estanciar solo con un método
00:25:57
Con un constructor en este caso
00:26:00
Que he proporcionado yo
00:26:01
Entonces tú vas a pasar por mis controles
00:26:02
Si quieres modificar algo
00:26:06
No puedes elegir tú el número que le das
00:26:08
37 porque me da la gana, pues no
00:26:09
soy yo que te lo doy
00:26:11
si
00:26:13
vale, muy bien, fenomenal
00:26:16
entonces ahora tengo
00:26:19
mi cuenta
00:26:21
que cuando creo una cuenta
00:26:22
y luego creo otra cuenta
00:26:25
vale
00:26:27
mi cuenta 2
00:26:28
yo también
00:26:31
y con saldo
00:26:33
esta, un poco más
00:26:36
Tengo dos cuentas
00:26:39
Vale, fenomenal
00:26:41
Ahora quiero escribir un clásico
00:26:43
Soy la cuenta 37
00:26:44
Y tengo
00:26:47
Mi titular es
00:26:48
No sé quién
00:26:50
Y tengo dentro no sé cuánto
00:26:51
Venga
00:26:54
¿Cómo no?
00:26:55
Tengo mi cuenta
00:27:04
Mi cuenta
00:27:05
Punto
00:27:06
¿Cómo no?
00:27:09
¿Por qué no?
00:27:18
Porque es privado, claro
00:27:20
¿Vale?
00:27:22
No puede acceder al número de cuenta
00:27:22
Porque ahora está bloqueada aquí
00:27:24
Entonces, aquí tengo dos opciones
00:27:26
O esta cosa de aquí
00:27:30
Se la hago escribir
00:27:32
A la cuenta
00:27:34
Es decir, yo tendré
00:27:36
Por ejemplo, ¿eh?
00:27:38
Si hizo
00:27:41
Si hizo otra vez
00:27:42
Mi cuenta
00:27:48
Punto toString
00:27:51
vale que es esta cosa aquí pues lo voy a crear aquí y me creo en estos 30 y
00:27:53
pongo sin resultado es igual a nada resultado es igual al resultado más
00:28:15
no cuenta o algo así no más más la cuenta la cuenta más cuenta tiene más saldo a separar
00:28:25
Return res
00:28:57
Se enfada
00:29:01
What is this?
00:29:11
No, no, que no puede porque
00:29:23
No puedo reducir
00:29:25
La visibilidad del
00:29:27
Método heredados
00:29:29
Desde object
00:29:31
What?
00:29:33
Es que
00:29:39
Es que hagamos un paso atrás
00:29:40
Vale, luego volvemos aquí, vale
00:29:43
Imprime
00:29:45
Ahí, ya está
00:29:46
Ningún problema
00:29:48
Ya está, solucionado
00:29:49
¿Vale? Esto funciona
00:29:55
Pasa atrás, luego vuelve
00:29:57
¿Vale? Esto funciona
00:30:04
Vamos a verlo
00:30:06
Lazo
00:30:07
Hay errores
00:30:10
Por otro lado, sí, mira
00:30:12
La cuenta cero tiene
00:30:14
Tres millones solo
00:30:16
Tengo que hacer uno, casi se me acaba
00:30:18
¿Vale? Ok, o sea que
00:30:22
Esto funciona, ¿vale? Tiene su sentido
00:30:24
Llama lo que tiene que llamar
00:30:26
Y funciona
00:30:28
Todavía nos falta trabajo
00:30:29
La cuenta cero
00:30:32
No debería tener 3 millones
00:30:37
Claro, porque lo estoy cambiando en mi cuenta
00:30:38
Ahora le pongo 2 aquí
00:30:40
Y ya está, solucionado
00:30:43
¿Vale?
00:30:46
Ok
00:30:47
Pero es una buena observación
00:30:47
O sea que
00:30:51
El hecho de que haya puesto
00:30:52
El número de cuenta allí dentro
00:30:54
Y que luego pueda hacer lo que me da ganas con titulares saldo
00:30:57
Sigue siendo una cosa fría
00:31:00
¿Vale? Ahora lo vamos a mejorar un poco
00:31:01
¿Vale? Pero la idea es que
00:31:03
Esto funciona, oye, fijaos
00:31:05
¿Por qué esto funciona?
00:31:07
Porque esto es protected
00:31:12
¿Vale? Y es, me parece a mí
00:31:13
O es mismo
00:31:15
Package y mismo
00:31:17
O
00:31:19
Heredado
00:31:22
¿Vale? Heredado no sabemos que es, por lo tanto lo dejamos
00:31:24
Y si yo muevo
00:31:25
Me encuentro
00:31:27
en otro package se enfada vale se enfada porque cuenta no la ha importado de hecho automáticamente
00:31:29
pero no lo encuentra algo raro vamos a hacer otra cosa vamos a dejar hacerlo con refactor
00:31:43
a ver si me lo hace, refactor, move
00:31:53
en geometría, ok
00:31:57
eso es lo que quiero hacer, pero antes de llegar a que esto me haga
00:32:00
problemas, pues lo que estoy intentando hacer es mover
00:32:10
main cuenta en otro package, vale, y me dice
00:32:15
importa cuenta, pero no me lo encuentra, vale, entonces a ver
00:32:19
que tengo que hacer aquí, me creo otro package que sea
00:32:23
banco. Y ahora muevo esta cuenta a ver si así me lo ve. Muevelo dentro banco. Veis
00:32:27
que estoy importando banco.cuenta. Fenomenal. Entonces ahora estoy reutilizando un viejo
00:32:45
proyecto banco que tenía dentro cuenta
00:32:55
para mi proyecto
00:32:58
nuevo yo, geometría, donde uso
00:33:00
algo de esta cuenta
00:33:02
y fijaos que va todo bien
00:33:03
excepto estos y estos
00:33:05
me da problemas, vamos a ver que problemas me da
00:33:07
pero si hace
00:33:09
un momento si quedan visibles
00:33:18
¿por qué?
00:33:20
porque si voy a ver cuenta
00:33:24
no le he puesto nada adelante
00:33:26
perdón, saldo y titular no le he puesto
00:33:27
nada adelante, esto quiere decir
00:33:30
que estos señores son visibles
00:33:31
Solo o si hereda
00:33:33
O si están en el mismo package
00:33:35
Y ahora no están en el mismo package
00:33:37
He importado el otro package para poder utilizarlo
00:33:39
¿Vale?
00:33:42
Entonces si quisiera verlos así
00:33:42
Caos que ahora ya no tengo problemas aquí
00:33:44
Se me queda
00:33:56
Este problema de aquí porque es lo mismo
00:33:57
Me dice, oye mira que
00:33:59
Tú, este de aquí
00:34:01
Es protected, ¿vale?
00:34:03
No le he puesto nada adelante
00:34:05
Y por lo tanto es
00:34:06
Solo se puede ver si hereda o si está en un
00:34:08
Y no está en el mismo package, por lo tanto no
00:34:11
Hasta si pusiera
00:34:14
Package
00:34:15
Sigue sin verse, ¿vale?
00:34:16
Aquí me da problema, no sé por qué
00:34:19
Entonces, lo que tengo que hacer es
00:34:20
Public
00:34:23
Ahora, como este es público
00:34:25
Pues desde aquí se debería poder ver
00:34:29
Entonces, ahora me vuelve a funcionar
00:34:32
No obstante, estén
00:34:35
En packages distintos
00:34:36
¿Dudas?
00:34:37
Me gusta
00:34:52
Vale, entonces
00:34:52
Vamos ahora a decir, vale, muy bien
00:34:55
Hasta ahora hemos jugado, ¿cómo modifico
00:34:58
Esto para hacerlo un poquito más serio?
00:35:00
No quiero que esto sea
00:35:15
Modificable desde fuera, ¿vale?
00:35:16
Y cuando creo una nueva cuenta, ¿qué hago?
00:35:19
El número se lo asigno yo
00:35:27
Pero normalmente
00:35:28
Cuando creo una cuenta
00:35:30
¿Qué tendré que saber?
00:35:31
Ahora yo el titular no lo puedo
00:35:44
Volver a modificar desde aquí, ¿vale?
00:35:46
Tendré que ponerle
00:35:49
El titular del momento
00:35:50
En que creo
00:35:52
La cuenta
00:35:53
Que tiene más sentido
00:35:55
¿Vale?
00:36:01
Al crear una cuenta
00:36:04
Yo le paso el nombre del titular
00:36:05
Él en automático me da el número
00:36:06
De la cuenta
00:36:09
Y asocia mi titular
00:36:11
¿Vale?
00:36:13
Y por ejemplo, en este caso de aquí
00:36:14
Podría decirle
00:36:16
Y el saldo es cero
00:36:18
Cuando creo una nueva cuenta
00:36:20
El saldo es cero
00:36:23
voy a ver qué es y si quiero crear una cuenta que tenga ya un saldo
00:36:24
entonces ahora para hacer cuenta uno por ejemplo le puedo poner así viene un
00:36:46
cliente me dice hoy soy yo tengo un millón de euros pues vale perfecto te
00:36:53
creo tu cuenta
00:36:58
ok vale perfecto está funcionado pero el segundo en vez de lo hace en dos partes
00:37:02
crea una cuenta antes
00:37:08
y luego se acuerda y dice
00:37:11
ya que la he creado, quiero meter algo
00:37:12
¿vale?
00:37:14
cuando la he creado, aquí, ya la he creado
00:37:16
con cero, ¿y ahora qué hago?
00:37:18
¿cómo le pongo
00:37:22
dinero? por ejemplo
00:37:22
entonces vamos a crear
00:37:32
un método
00:37:34
que me devuelva
00:37:35
bueno, un método que se llame
00:37:42
ingresar
00:37:44
int
00:37:46
cantidad
00:37:49
¿vale?
00:37:50
prototipo de este método, ¿qué tiene que devolver?
00:37:53
podría
00:38:00
devolver tres cosas, void
00:38:01
lo hace y no te dice nada
00:38:03
puede devolver boolean
00:38:05
si lo has podido hacer
00:38:07
me devuelves true, si ha habido algún
00:38:09
problema me devuelves false
00:38:11
tercero
00:38:12
podría ser un int
00:38:15
tú me dices cuánto entró y yo te doy
00:38:16
el saldo actual, para que tú
00:38:19
verifiques admitió 100 euros y ahora tienes 2.400 como lo queremos hacer teniendo en cuenta que está
00:38:21
esta parte de aquí es el objeto en el objeto poner diálogos con el usuario siempre presente
00:38:41
peligroso porque cuando yo le hago reutilizo esto en otro contexto donde no hay un usuario
00:38:51
Este se parará ahí a esperar que el usuario me ponga algo
00:38:57
¿Vale?
00:39:00
Es mejor que si yo quiero hacer algo de por el estilo
00:39:01
Lo haga desde mi cuenta
00:39:03
Tenga los métodos para trabajar con el
00:39:05
Con el objeto
00:39:08
Y es el trabajo puro
00:39:10
Y es en mi cuenta
00:39:12
Donde hago la interfaz con el usuario
00:39:13
Que le pido cosas si hace falta
00:39:15
Yo puedo intentar meter dinero
00:39:17
Y si me da un error
00:39:19
Pues entonces lo pido al usuario y vuelvo a intentar hacer
00:39:20
¿Vale? Pero no a nivel de cuenta
00:39:23
La cuenta debería ser
00:39:26
Más sencilla posible
00:39:27
Y trabajar sobre lo que es la cuenta
00:39:28
¿Sí?
00:39:30
Entonces, ingresar
00:39:32
Pues yo lo haría con el índice
00:39:34
¿No? Devolvamos el saldo
00:39:36
Actual
00:39:38
¿Sí? Porque es
00:39:39
Parecido al boolean
00:39:42
Pero es más preciso
00:39:44
Yo puedo devolver un entero
00:39:46
Negativo si no he podido
00:39:48
Hacerlo y
00:39:50
Un entorno, si te devuelvo en vez tu sueldo
00:39:52
Es que lo he podido hacer
00:39:55
no por ejemplo así tengo más información posible tengo si lo has podido hacer o no y tengo cuánto
00:39:56
tienes ahora en el banco entonces ingresar y bla bla bla entonces empiezo con un bueno
00:40:02
la verdad es que es muy fácil es decir que hago que dis operaciones igual a menos uno
00:40:10
luego digo que
00:40:26
dis.cuenta
00:40:31
no cuenta
00:40:35
saldo
00:40:37
es más o igual
00:40:39
a cantidad
00:40:44
esta es
00:40:46
dis.saldo es igual a
00:40:48
dis.saldo más cantidad
00:40:50
vale
00:40:51
op es igual
00:40:52
adbis.saldo
00:40:56
return op
00:40:58
en realidad este código es horrible
00:41:00
vale
00:41:05
y lo que deberíamos hacer es esto
00:41:06
también porque
00:41:09
a este
00:41:17
esto es lo que estoy haciendo, también porque
00:41:18
el concepto de añadir dinero no tiene problemas
00:41:35
aquí no tengo if, aquí no tengo
00:41:37
entonces esta operación se va a hacer
00:41:39
otra cosa es que
00:41:42
dependiera del usuario
00:41:43
Y si eres tú
00:41:45
Entonces te sumo
00:41:47
Si no eres tú no te sumo nada
00:41:48
Entonces podría fallar la operación
00:41:50
Pero aquí es, añade 100 euros
00:41:51
Si no hay mucha opción de fallar
00:41:53
¿Hasta qué punto sería eficiente
00:41:57
O bien hecho
00:41:59
Poner directamente
00:42:00
10 puntos saldo más cantidad
00:42:01
Porque es lo mismo
00:42:03
Si la operación te devuelve el valor
00:42:09
Sí
00:42:13
Pero no la guarda
00:42:13
No
00:42:26
Te devuelve 200
00:42:26
Pero te deja 100
00:42:29
Y eso no te va a gustar
00:42:30
¿Vale?
00:42:34
¿Sí?
00:42:36
Lo que dices tú
00:42:37
Es esto
00:42:39
Pero no sé si te lo hace
00:42:40
Esto podría funcionar
00:42:43
Pero es que no sé
00:42:48
Esta operación si devuelve
00:42:49
Resultado de la operación
00:42:51
Lo más probable es que esto devuelva
00:42:52
Un true o un false
00:42:54
O un 0 o un 1
00:42:55
O cosa por el estilo
00:42:56
No lo que queremos nosotros
00:42:57
Por lo tanto, así
00:42:59
Cuidado con, no siempre
00:43:01
Escribir menos es mejor
00:43:03
Porque a veces eso llega a un momento
00:43:05
En que lía
00:43:07
Y luego cuando tenéis que encontrar
00:43:09
Un error
00:43:11
Y lo habéis escrito todo súper comprimido
00:43:12
Puede ser realmente un problema
00:43:15
Con calma, pero
00:43:17
Yo creo que así es aceptable
00:43:18
Sumo la cantidad que me has pasado
00:43:21
Al saldo y luego te lo devuelvo
00:43:23
¿Dudas?
00:43:25
Entonces ahora, aquí, lo que puedo hacer es mi cuenta.ingresar mis 3 millones de euros.
00:43:27
Se enfada, porque no lo he puesto público.
00:43:41
Y ahora debería funcionar, ¿vale?
00:43:55
Volvamos un momento al toString.
00:44:09
En realidad, en Java, cualquier clase que yo creo
00:44:13
Usa la cosa que no sabemos que es la herencia
00:44:20
La herencia es como extender otra clase
00:44:24
Es como yo ya tengo una clase y voy a añadir cosas a esa clase
00:44:29
Por defecto, si yo no digo nada
00:44:33
Y siempre una clase extiende una clase especial que se llama object
00:44:36
objeto
00:44:42
mi clase es un objeto
00:44:43
cocodrilo es un objeto, rectángulo es un objeto
00:44:45
¿vale? entonces hay esta extensión
00:44:48
la clase object
00:44:50
tiene por defecto dentro
00:44:52
un metodito que es el método toString
00:44:54
entonces cuando yo utilizaba
00:44:56
antes toString
00:44:58
en realidad el toString estoy
00:44:59
sobrescribiendo
00:45:02
el toString
00:45:04
de la clase object
00:45:06
¿vale? que es el contrato de sobrescriptura
00:45:07
estoy pillando la clase object que tiene su método
00:45:10
y estoy diciendo, no, mira, para la clase
00:45:13
mía, no uses
00:45:15
el método de tu object, usa
00:45:16
el método mío, es un poco
00:45:18
retorcido porque no sabemos
00:45:20
todavía la herencia, ¿vale?
00:45:22
entonces, por ahora lo dejamos así
00:45:24
en el aire y luego volveremos
00:45:27
cuando estudiaremos la herencia y veremos la clase
00:45:29
object, pues volvemos al toString
00:45:31
porque es útil, ¿vale? toString con otras
00:45:32
cosillas son cosas que hay que
00:45:34
implementar, por ahora dejamos imprime
00:45:36
y estamos todos felices
00:45:39
pensamos así vale entonces nos faltaría otra cosa no tengo ingresar de vez en cuando querré sacar
00:45:40
hago dinero, no? lo copio, ctrl v, ingresar, sacar, relevar, retirar, retiro una cantidad
00:46:00
y hago así. Ya está, solucionado, ¿verdad? Claro, yo voy allí, tengo 3 euros en el banco,
00:46:22
le digo dame 100 y me lo dan enseguida. ¿Qué más da que haya un menos delante? Toma todo
00:46:31
el dinero que quieres. Son todos ricos. ¿Qué tendré que hacer? IF. IF punto saldo. Es
00:46:36
mayor de cantidad
00:46:53
mayor
00:46:55
igual
00:46:57
venga, si te quieres quedar a cero
00:46:59
puedes
00:47:01
entonces lo haces
00:47:01
y ahora sí que podría tener
00:47:04
sentido tener una variable
00:47:12
int op que valga menos uno
00:47:14
para hacerlo de alguna forma
00:47:16
y que
00:47:19
si ejecuto esto
00:47:20
entonces op vale
00:47:22
dis.saldo
00:47:24
después
00:47:25
Y aquí devuelvo
00:47:27
¿Para qué me sirve esto?
00:47:32
Y ejecuto esta operación
00:47:38
Si el resultado es menos uno
00:47:41
Es que no has podido retirar
00:47:43
Si es cualquier otro número
00:47:45
Es que has podido retirar
00:47:47
Imaginamos que yo tengo 100
00:47:49
Y pido 200
00:47:54
Pues esto
00:47:55
Será falso
00:47:56
Por lo tanto me salto todo esto
00:47:57
Y entonces devuelvo menos uno
00:47:59
Tenía 100, has pedido 200
00:48:01
No puedes hacer la operación
00:48:04
Si en vez
00:48:05
Tú tienes 200 y pides 100
00:48:07
Esto es verdadero
00:48:10
Entras aquí, haces que aquí dentro pones
00:48:11
Lo que hay aquí dentro, 200 menos 100
00:48:14
100, y luego devuelves
00:48:16
Escribes en op 100
00:48:17
Entonces devuelves 100
00:48:20
¿Sí?
00:48:21
Vamos a hacer pruebas
00:48:23
Entonces, ahora que he escrito
00:48:25
Pues voy a sacar dinero
00:48:29
Vamos a reducir
00:48:30
Entonces voy a
00:48:31
hacer una operación en mi cuenta vale si mi cuenta punto hemos quemado retirar retirar
00:48:35
lo siento es mayor o igual que cero has retirado correctamente
00:48:49
Si
00:49:05
Y
00:49:07
El se
00:49:11
No has podido
00:49:14
Retirar
00:49:22
Saldo insuficiente
00:49:25
Y hago lo mismo
00:49:31
Con cuenta 2
00:49:35
Retirando 5000
00:49:42
Esta es la cantidad
00:49:45
Quiero un café
00:49:47
Vale, entonces, ejecuto
00:49:49
Cuenta cero tiene un millón
00:49:52
Y has retirado correctamente
00:49:57
Aquí lo intento y me dice
00:49:59
No has podido sacar
00:50:01
Cosa por este
00:50:03
Vale
00:50:04
Ahora podría añadir aquí
00:50:06
Esta de aquí, bueno, la he escrito aquí
00:50:09
Podría reutilizar imprime
00:50:12
Para decir aquí, la cuenta uno
00:50:13
Tiene 300, saldo insuficiente
00:50:15
Bueno, en realidad
00:50:17
Cuando tenemos una situación como esta de aquí
00:50:27
¿Vale? O sea que todo está privado
00:50:30
Puedo acceder a ellos con el constructor
00:50:33
Y luego se suele poner
00:50:37
De las acciones que quiero hacer
00:50:40
Lo que se llaman los getter y setter
00:50:43
¿Vale?
00:50:45
Los getters son los que me permiten leer una variable
00:50:47
Y los setters los que me permiten modificar esa variable
00:50:50
¿Vale?
00:50:54
Pongamos por ejemplo
00:50:56
Que yo quiera poder leer mi saldo
00:50:57
Entonces hago un public int get saldo
00:51:01
Get es de pillar ¿Vale?
00:51:10
Por eso son los getters
00:51:13
Porque son todos los get
00:51:14
algo
00:51:16
y lo que hago es
00:51:17
return saldo
00:51:20
esta cosa de aquí
00:51:22
me permite ahora leer saldo
00:51:25
desde fuera
00:51:28
y aquí
00:51:29
puedo poner, no has podido retirar
00:51:31
saldo insuficiente
00:51:35
punto
00:51:37
tu saldo
00:51:38
saldo
00:51:40
actual
00:51:45
actual
00:51:46
Es
00:51:48
Más
00:51:49
Mi cuenta
00:51:52
Dos
00:51:55
Punto get saldo
00:51:56
Fijaos que
00:51:58
Esto me permite hacerlo
00:52:02
Sin embargo si yo
00:52:04
Intentar acceder a saldo directamente
00:52:05
Me dice no, no es visible
00:52:08
¿Veis aquí?
00:52:10
Esto es que he leído el saldo
00:52:33
La cosa interesante de los getter
00:52:35
De los setters
00:52:37
Es que yo aquí puedo hacer una comprobación
00:52:38
Yo podría hacer aquí un
00:52:41
Si tú eres
00:52:44
El del banco
00:52:46
Y estás autorizado porque tienes
00:52:48
Algo que me has pasado aquí como parámetro
00:52:50
Por ejemplo, cosa por el estilo
00:52:53
Pues entonces te doy el sueldo, si no, no
00:52:54
¿Vale? Es decir, que no es como
00:52:56
Acceder directamente a la variable
00:53:00
Que yo accedo allí, leo y me lo das
00:53:02
No, este es un método
00:53:04
Como base te dice
00:53:04
Te doy la cosa, pero aquí yo podría
00:53:07
Decir que te lo devuelvo, si, solo si
00:53:09
Tú cumples una serie de
00:53:11
Cosas, por ejemplo
00:53:13
Podrías haber tenido antes que
00:53:14
Hacer una sesión de un login
00:53:16
En el cosa, y aquí me pregunto
00:53:19
Si el login es válido, entonces
00:53:21
Si eres el titular de esta cuenta
00:53:23
Pues entonces te doy el saldo, si no, no
00:53:25
¿Vale? O sea que podría complicarlo
00:53:27
Un poco, y también está
00:53:29
El public
00:53:31
void
00:53:35
set saldo
00:53:37
int x
00:53:39
sería
00:53:41
this.saldo es igual a x
00:53:45
esto me permitiría
00:53:47
setar el saldo
00:53:50
a un cierto valor
00:53:52
otra cosa es que lo quiera hacer
00:53:53
y también aquí
00:53:58
es un método, no es como escribir
00:53:59
directamente dentro saldo
00:54:02
es más bien un
00:54:03
oye mira
00:54:05
Ejecuta este método
00:54:06
Haz todas las comprobaciones que quieras
00:54:08
Mira si lo puedes hacer o no
00:54:11
Mira si tienes privilegios
00:54:13
Mira un fichero, mira un lo que sea
00:54:14
Y si todo está bien, ponlo
00:54:16
Si no, no
00:54:17
Lo puede hacer, ahora nosotros no lo hacemos
00:54:18
Pero, vale
00:54:21
Entonces, la idea es que
00:54:22
Por como lo utilizamos nosotros por un buen rato
00:54:24
La idea es que
00:54:28
Las variables críticas
00:54:29
Variables que no quiero modificar
00:54:31
Desde fuera
00:54:33
Las ponga como privada
00:54:34
Y la gestione
00:54:36
Así
00:54:38
O sea, en
00:54:40
En los constructores
00:54:42
Que me lo gestione él
00:54:45
Y que me haga las comprobaciones que tiene que hacer
00:54:46
Y que si la quiero leer
00:54:48
Normalmente no hay grandes problemas
00:54:50
¿Vale? La puedo leer
00:54:52
Con get
00:54:54
Con el get, ¿vale?
00:54:55
Y que se utilice
00:54:58
Con métodos que yo proporciono
00:55:00
¿Vale? Entonces yo tengo el
00:55:03
control, no hay nadie que pueda decir
00:55:04
ahora tengo un millón de euros, no, lo tienes que
00:55:06
ingresar o lo tienes que retirar
00:55:08
y estos métodos se llaman
00:55:10
desde fuera
00:55:11
lo llaman banco
00:55:13
claramente aquí no se hace nada
00:55:15
si tú me traes un millón de euros y yo te hago una ingresión
00:55:17
de un millón, pues te lo pongo
00:55:20
lo que no puedes hacer es directamente decirte
00:55:21
tengo un millón de euros
00:55:24
sin ingresar
00:55:25
no sé si me explico la idea que está
00:55:27
por detrás de esto
00:55:30
ahora, esto están
00:55:31
radicado, que si no me equivoco
00:55:34
por aquí hay una opción de
00:55:36
create get and set
00:55:38
¿dónde estará?
00:55:39
Forge
00:55:43
aquí
00:55:43
si os fijáis por aquí debería haber
00:55:45
aquí
00:55:48
hay una opción automática que si tú le das te crea
00:55:49
todos los getter y todos los setter
00:55:56
básicos, de eso de set x
00:55:57
se te pone
00:56:00
a ver
00:56:00
¿de cuál queréis el get y el set?
00:56:05
por ejemplo de un cuenta
00:56:07
Los dos, get y set
00:56:09
Pues le das generate
00:56:11
Y el me crea el get en un cuenta
00:56:12
Y el set en un cuenta
00:56:15
Claramente me lo da en versión
00:56:16
Básica, super básica
00:56:21
Luego si yo quiero hacer comprobaciones
00:56:23
Y cosas por el estilo
00:56:25
Soy yo que me tengo que poner a trabajar
00:56:26
Fijaos también
00:56:28
Que cuando estáis aquí en search
00:56:32
Aparece también nuestro amigo
00:56:34
Y aparece también nuestro amigo
00:56:37
¿Y por qué aparecen?
00:56:42
Pues ya lo veréis
00:56:46
¿Sí?
00:56:46
Pero
00:56:48
Lo que quiero decir con esto
00:56:49
Es que son tan
00:56:50
Tan común
00:56:52
Hacer estas cosas
00:56:54
Que hasta el
00:56:55
El eclipse
00:56:56
O el líder en general
00:56:57
Que utilizáis
00:56:58
Pues os da la herramienta
00:56:59
Para hacerlo
00:57:00
Porque la probabilidad
00:57:00
Que lo vayáis a hacer
00:57:01
Es bastante alta
00:57:02
¿Vale?
00:57:03
Y son también cosas
00:57:04
Que en su versión
00:57:06
Más básicas
00:57:07
Son triviales
00:57:08
¿Vale?
00:57:09
Son súper sencillas
00:57:10
Entonces en vez de estar aquí, ahora yo tengo 56 variables
00:57:12
A poner 56 veces esta variable, pues no pongo esta
00:57:16
¿Dudas?
00:57:21
Voy a parar esto porque...
00:57:23
- Idioma/s:
- Autor/es:
- Stefano Chiesa
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento - No comercial
- Visualizaciones:
- 8
- Fecha:
- 16 de diciembre de 2022 - 13:49
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 57′ 26″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 685.74 MBytes