20241205 POO-Clases_9 - 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:
vamos a utilizar este ejercicio
00:00:00
para incorporar otra cosa más
00:00:03
que podemos meter en la declaración de una clase.
00:00:06
Fundamental, los métodos constructores.
00:00:09
¿Vale?
00:00:12
Entonces, nosotros leemos esta aplicación.
00:00:12
Pues llegamos un poco a la conclusión,
00:00:16
no nos detenemos mucho por encima,
00:00:17
que hay una única entidad,
00:00:19
hay una única cosa de la que se ocupa la aplicación,
00:00:20
que es una cafetera.
00:00:22
Una cafetera que lo único que necesitamos saber
00:00:23
para trabajar con ella es
00:00:26
Lo máximo que le cabe
00:00:27
Y lo que tiene en cada momento
00:00:29
Con esas dos propiedades
00:00:31
Ya los métodos
00:00:34
Pues harán lo que tengan que hacer
00:00:35
Sacar la cantidad necesaria
00:00:36
Para llenar una taza
00:00:39
Llenarla, vaciarla, lo que sea
00:00:40
Pues venga
00:00:43
Vamos a hacer entonces la clase cafetera
00:00:45
Porque ya sabemos que solo necesitamos esa clase
00:00:47
Y con las propiedades que nos hacen falta
00:00:49
Pues venga
00:00:51
Hacemos
00:00:53
Clase cafetera
00:00:55
y le quito el public
00:01:01
propiedades
00:01:03
ya sabemos cuáles porque la tarea de análisis
00:01:05
y diseño ya la tenemos hecha
00:01:07
que es
00:01:09
la cantidad
00:01:10
máxima
00:01:13
que tiene
00:01:16
llamémosle capacidad
00:01:17
si la haces con internet
00:01:19
si, da igual
00:01:22
vale
00:01:23
y luego otra propiedad
00:01:24
va a ser lo que tenga en cada
00:01:27
momento, vale
00:01:30
con esas dos propiedades ya lo tenemos todo
00:01:35
y ahora lo siguiente que hemos hecho nosotros
00:01:37
es, vale, ¿qué métodos le interesan
00:01:39
a la aplicación? pues le interesan
00:01:41
a la aplicación
00:01:43
uno, dos, tres y cuatro métodos
00:01:44
uno, llenarla
00:01:47
vale
00:01:49
cuando le demos al botón de llenar
00:01:50
pasarán cosas, se abrirá un sensor,
00:01:53
empezará a entrar agua,
00:01:55
entrará lo que sea, yo que sé
00:01:56
pero la parte
00:01:58
de software, lo único que tiene que hacer
00:02:01
es poner la cantidad actual
00:02:03
con el mismo valor que tenga la capacidad.
00:02:05
La capacidad se supone
00:02:09
que en lugar de llamar la capacidad máxima,
00:02:11
la he llamado capacidad para que la variable sea más corta
00:02:14
y no tener que escribirla todo el rato.
00:02:16
Pero bueno, me refiero a lo máximo que cabe.
00:02:18
Vale, pues eso cuando una cafetera exista,
00:02:21
capacidad tendrá un valor, el que sea.
00:02:24
Cuando creemos una cafetera
00:02:26
cuya capacidad máxima sea en 27,
00:02:28
pues capacidad tendrá 27.
00:02:30
cuando creemos una cafetera cuya capacidad máxima sea 13
00:02:31
pues esta variable tendrá 13
00:02:34
no podemos saber lo que tiene hasta que no exista una cafetera en concreto
00:02:36
pero lo que sí que sabemos es que habrá un método
00:02:41
llenar cafetera
00:02:44
que cuando ese método sea invocado
00:02:46
¿qué va a hacer ese método cuando sea invocado?
00:02:49
pues la cantidad actual de la cafetera
00:02:54
ponerla con el valor de la capacidad
00:02:56
Entonces, las preguntas que nos hacemos. ¿Necesita algún dato desde fuera este método para trabajar? No, porque...
00:03:00
Por eso te van a poder acusar durante mucho tiempo.
00:03:11
Bueno, ¿necesita alguna información desde fuera?
00:03:23
No, porque lo único que tiene que hacer este método es
00:03:28
La propiedad cantidad actual
00:03:30
Y es una propiedad en la que tiene acceso
00:03:33
Porque está ahí arriba
00:03:35
La propiedad cambiarla
00:03:36
Para que se ponga con lo que vale la capacidad
00:03:38
Es lo único que tiene que hacer ese método
00:03:42
Con lo cual no necesita ninguna información desde fuera
00:03:44
Luego esto vacío
00:03:47
¿Tiene que devolver algo?
00:03:49
No, su efecto queda reflejado
00:03:50
Porque la cantidad actual se ve modificada
00:03:52
Se ve modificada
00:03:54
No tiene que devolver nada
00:03:56
Pues entonces aquí voy
00:03:57
Ya está
00:03:59
Vale, pues este método ya estaría
00:04:00
¿Qué más métodos, qué más botones tiene la cafetera
00:04:03
Para hacer cosas con ella?
00:04:06
Pues tiene un botoncito
00:04:07
Servir taza
00:04:09
Entonces cuando se da el botoncito
00:04:12
Servir taza
00:04:14
Cuando se da el botoncito
00:04:16
De servir la taza
00:04:22
¿Qué es lo que va a ocurrir?
00:04:24
Que habrá una taza puesta ahí
00:04:27
Con un volumen
00:04:29
Y entonces la cantidad actual
00:04:30
Se va a ver disminuida
00:04:33
En lo que ocupe la taza
00:04:35
¿Lo que ocupa la taza
00:04:37
Es un dato de la cafetera?
00:04:39
En absoluto
00:04:41
Luego no tiene sentido agregar aquí una propiedad
00:04:42
Que sea lo que cabe en la taza
00:04:45
Vete a saber, cada vez yo lleno tazas de diferente volumen
00:04:46
Bueno, pues entonces
00:04:49
Ahí, eh
00:04:51
No, es una información
00:04:52
Que me tiene que llegar desde el exterior
00:04:55
Tú quieres que yo te sirva una taza, ¿vale? Pues tendrás que decirme qué volumen tiene esa taza para yo saber hasta dónde tengo que estar aquí girando la mano.
00:04:57
Ahí podría haber objeto taza.
00:05:07
No lies, no lies. Poco a poco.
00:05:12
Entonces, lo que necesita este método para trabajar es, ¿cuál va a ser el resultado de este método?
00:05:15
Pues la cantidad actual se va a ver disminuida por lo que ocupe la taza, por el volumen de la taza, ¿verdad?
00:05:21
Se va a ver disminuida por lo que ocupe la taza.
00:05:30
¿Y cuánto ocupa la taza?
00:05:32
Pues depende de la taza que me pasen.
00:05:33
Es una información que me tienes que dar, no lo sé.
00:05:35
Pues ¿dónde está el sitio de meter la información que te tienen que dar desde fuera para trabajar?
00:05:38
El sitio para meter la información que tienen que dar desde fuera para trabajar,
00:05:43
tú aquí dentro está aquí en los parámetros.
00:05:47
Vale, pues me tendrás que dar aquí
00:05:48
Lo que cabe en la taza
00:05:50
¿Qué es esto?
00:05:54
Eso, lo que cabe en la taza me lo tendrás que dar
00:05:57
Entonces cuando ya me lo hayas dado
00:06:00
Pues yo ya podré quitarle
00:06:02
A la cantidad actual
00:06:03
Ya le podré quitar lo que me has pasado
00:06:05
¿Tengo que devolver algo? No
00:06:07
Porque el efecto se queda en la propiedad
00:06:11
Pues entonces aquí voy
00:06:13
Ya está
00:06:15
¿Puedo poner si se queda en negativo?
00:06:18
Sí, porque
00:06:19
vale, se me ha olvidado, aquí dice
00:06:23
si como resultado de servir
00:06:25
la taza, claro, puede ocurrir que la taza
00:06:27
sea más grande que la cantidad que queda
00:06:29
entonces si la taza es más grande
00:06:31
la cafetera se queda a cero
00:06:33
pero nunca se queda a negativo
00:06:35
el software se estaría funcionando mal
00:06:37
si yo pongo, uy, se me ha quedado a menos 7 litros
00:06:39
pues no, pedazo
00:06:42
cafetera, no, sí
00:06:43
entonces, claro
00:06:44
aquí tenemos que poner
00:06:47
bueno, lo podríamos hacer en una única línea
00:06:49
con operador ternario, como sea, pero bueno
00:06:52
si la cantidad
00:06:54
actual que me ha quedado después
00:06:56
de hacer la resta resulta que es menor que cero
00:06:58
pues entonces ponla cero
00:07:00
porque si no la información que estás dejando en la cafetera
00:07:02
es errónea
00:07:04
este método ya estaría
00:07:05
por ejemplo, claro
00:07:08
capacidad taza mayor que cantidad
00:07:15
actual, cantidad actual cero
00:07:17
Es decir
00:07:19
Podríamos hacer en una sola línea
00:07:20
Algo mucho más bonito
00:07:23
Que sería esto
00:07:24
Vamos a suponer que esto
00:07:26
Eso comentado porque es
00:07:27
Nosotros ya estamos por encima de todo esto
00:07:30
Entonces podríamos hacer aquí
00:07:33
Cantidad actual
00:07:35
Capacidad
00:07:36
Taza es mayor
00:07:39
Que la cantidad
00:07:41
Actual
00:07:43
¿Eh? ¿Qué pasa?
00:07:45
Interrogación
00:07:49
Pues entonces me quedo a cero
00:07:50
Entonces me quedo a cero
00:07:52
Y pongo cantidad actual a cero
00:07:54
No he llenado la taza
00:07:56
Uy, perdón, pongo cero
00:07:57
Que no, pues pongo cantidad actual
00:07:59
Menos capacidad taza
00:08:04
Ya, pero
00:08:05
Bueno, o sea
00:08:13
Ese mismo método lo podemos hacer así, ya está, ¿no?
00:08:16
¿Eso qué es?
00:08:19
Lo de hace dos meses y medio
00:08:20
Decírselo por mí
00:08:23
Es el operador ternario
00:08:31
En función de una condición
00:08:35
Lo que pasa es que, a ver, me he bajado la línea de abajo
00:08:37
Para que se vea
00:08:39
Existen los entes
00:08:40
Ahora lo entiendes, ¿no?
00:08:42
Vale, pues ya está
00:08:46
Lo pillas
00:08:47
Hacemos el otro método y ahora ya
00:08:48
incorporamos esa maravilla de los constructores
00:08:51
constructores, vale
00:08:54
el siguiente método
00:08:56
vamos a vaciar la cafetera, ese método es facilísimo
00:08:57
poner la cantidad de café
00:09:00
a cero, entonces
00:09:02
ya ni pongo las interrogaciones
00:09:06
porque ya sabemos que no va a devolver nada
00:09:08
porque el efecto
00:09:10
se queda, ¿necesita algo? no, para vaciar
00:09:12
la cafetera no necesito ninguna información desde fuera
00:09:14
vaciar la cafetera
00:09:16
será esto
00:09:18
capacidad actual igual a cero
00:09:19
Algo escrito mal
00:09:24
Es porque me falta
00:09:27
Capacidad actual igual
00:09:29
Ah, porque es cantidad actual
00:09:31
Eso
00:09:34
Perdón, cantidad actual
00:09:34
Juan ha dado un salto de aprendizaje
00:09:38
En la vida se va, se envejece
00:09:40
Y se aprende a saltos
00:09:43
Pues
00:09:44
Hacer un ejercicio entero
00:09:45
Uno solito es un salto de aprendizaje
00:09:49
Bueno, a ver, espera
00:09:51
Tampoco te pases
00:09:55
Y eso
00:09:57
Tenemos un siguiente examen para demostrarlo
00:10:03
Agregar café
00:10:06
Venga, confianza en uno mismo
00:10:07
Que yo he dicho que mierda de código
00:10:18
¿Cuándo he dicho yo eso?
00:10:20
Pero lo has pensado en general
00:10:23
Ah, no hombre
00:10:25
Siempre os he dicho en los dos exámenes que salí contenta
00:10:26
De corregir
00:10:29
Vale, a ver
00:10:30
Yo creo que sí
00:10:31
A ver, en los últimos
00:10:35
Ha habido hasta la pandemia
00:10:37
Más o menos
00:10:39
Desde la pandemia hasta acá no sé por qué
00:10:40
Han coincidido grupos
00:10:42
Muy regulares
00:10:44
Y este año yo qué sé
00:10:46
Yo creo que hay un poco de
00:10:47
Estáis viendo las orejas al lobo
00:10:49
Estáis viendo que el futuro
00:10:51
Y queréis vivir bajo techado
00:10:52
Y comer caliente
00:10:55
Y entonces igual os estáis poniendo las pilas
00:10:56
Hombre, todos queréis, ¿no?
00:10:59
Tener las necesidades básicas resueltas
00:11:06
Bueno
00:11:08
Agregar café
00:11:11
Agregar café será
00:11:14
A la cantidad actual
00:11:16
le sumas
00:11:18
lo que tú
00:11:21
agregues
00:11:22
¿cuánto le sumas? me lo tendrás que decir
00:11:24
me tendrás que decir cuánto quieres que le sume
00:11:27
luego el sitio para decirme
00:11:29
cuánto café quieres que le sume
00:11:31
a la cafetera
00:11:33
es este, este es el sitio
00:11:33
para decirle
00:11:37
cuánto quieres
00:11:38
vale, ¿tiene que devolver
00:11:40
algo el método? no voy
00:11:45
Bueno
00:11:46
Y si se pasa
00:11:49
Se queda
00:11:52
El otro ha desbordado
00:11:55
Entonces lo mismo
00:11:56
Si la cantidad actual
00:11:58
Es mayor
00:12:10
Que la capacidad
00:12:11
Es mayor que la capacidad
00:12:12
pues entonces
00:12:18
cantidad actual igual a capacidad
00:12:20
y el otro ha desbordado
00:12:22
nos da igual donde ha ido a parar
00:12:25
pero nunca va a caber más
00:12:26
esto lo podréis hacer con un operador ternario
00:12:28
también como aquí arriba, como os dé la gana
00:12:30
a ver tu jefe
00:12:32
que prefiere
00:12:37
bueno
00:12:37
vale, pues ya está, ahora
00:12:40
este es el software de la cafetera
00:12:42
entonces cuando se den los botoncitos
00:12:44
Esos botoncitos abrirán y cerrarán
00:12:46
Sensores y aparte
00:12:49
Cambiarán los datos
00:12:51
¿Vale? Luego este software
00:12:52
Mínimo, pero es un software real
00:12:55
En realidad
00:12:57
Se abrirán y cerrarán sensores, pero esto cambiará
00:12:57
Luego esto pasa
00:13:01
Dentro de una
00:13:03
Cafetera
00:13:05
Claro, tú tienes todos tus
00:13:05
Sensores, células, lo que sea
00:13:11
Claro
00:13:13
Sí, pero un software que actualiza
00:13:14
Los datos, tiene que haber
00:13:17
Claro
00:13:19
Bueno, pues entonces
00:13:20
Ahora ya vamos a hacer la aplicación
00:13:23
La que arranca cuando le damos
00:13:25
El on a la cafetera
00:13:27
Porque ahora mismo no hay ningún
00:13:29
No existe ninguna cafetera, ni le hemos dado el on a nada
00:13:31
Ahora vamos a
00:13:33
Tener ya una cafetera real
00:13:35
A la que le damos el on, para que empiecen a pasar cosas
00:13:37
Dime
00:13:40
Agregar este
00:13:40
Y ahora es cuando ya nos importan los constructores
00:13:45
Vale
00:13:52
Venga, ya está
00:13:54
Vale, ya
00:13:59
Venga, pues hacemos el main
00:14:02
Ahora
00:14:06
¿Eh?
00:14:06
La parte divertida
00:14:08
Que es cuando pasan cosas
00:14:10
Cafetera
00:14:12
Vale, pues aquí
00:14:14
Arrancamos la aplicación
00:14:18
Aquí
00:14:19
Desde el momento en que entramos en el main
00:14:21
Ya hemos dado el on
00:14:23
Al cacharro, a la cafetera
00:14:24
Pues que es lo primero que tenemos que hacer
00:14:27
Crear el objeto cafetera
00:14:29
Con los datos concretos
00:14:31
Entonces, nosotros que hemos hecho hasta ahora
00:14:33
Pues esta es mi cafetera
00:14:35
Esta de aquí
00:14:37
Declaramos la variable cafetera
00:14:38
Y instanciamos el objeto
00:14:41
Vale, entonces que hemos hecho
00:14:43
Nosotros hasta ahora, el objeto creado
00:14:47
Cafetera, todavía no
00:14:49
Tiene los valores
00:14:51
¿Cómo vamos a inicializar la cafetera?
00:14:52
Pues se supone que
00:14:56
Aquí no nos lo dice
00:14:57
Con propiedades de tabas por teclado
00:14:59
Vamos a olvidarnos
00:15:00
Bueno, no, venga
00:15:01
Vamos a pedir la capacidad máxima
00:15:05
Es que claro, en una aplicación real
00:15:07
Cada vez que daslo a la cafetera
00:15:09
No te estará preguntando
00:15:11
Oye, ¿cuál es la capacidad máxima que tengo?
00:15:12
¿Cuánto es la cantidad
00:15:16
Que tengo en este momento?
00:15:17
Lo normal es que lo registre con sensores
00:15:19
Y lo inicialice
00:15:21
pero como en nuestro caso
00:15:22
no hay sensores que vean
00:15:24
cuál es la capacidad que tiene
00:15:26
y lo que tiene en ese momento
00:15:28
en lugar de pedirlo por teclado
00:15:29
que es un rollo, se lo voy a poner a capón
00:15:32
aquí directamente
00:15:34
eso es muy irregular porque el café se evapora
00:15:35
hay pequeños cambios
00:15:38
que te va a descuadrar
00:15:40
pero como no podemos meterle un sensor
00:15:41
pues vamos a
00:15:44
metérselos directamente
00:15:45
y la cafetera cuando le damos salón
00:15:47
arranca siempre con una capacidad máxima de 100
00:15:50
porque esta aplicación es para las cafeteras
00:15:54
Roventa modelo tal
00:15:56
que tienen capacidad de 100
00:15:57
con lo cual cuando el software arranca
00:15:59
cafetera.capacidad
00:16:02
es igual a 100, no hay alternativa
00:16:06
porque todas tienen 100
00:16:07
y además estas cafeteras
00:16:08
antes de apagarla te obliga
00:16:11
a haberla dejado vacía
00:16:13
con lo cual cuando tú la enciendes no hay tutía
00:16:14
la cantidad actual
00:16:17
siempre a cero
00:16:19
esto lo estoy haciendo solo para ahorrarme
00:16:21
leerlo por teclado, ya está
00:16:23
bueno, pues esto es lo que hemos hecho hasta ahora
00:16:25
para inicializar las propiedades
00:16:27
del objeto una vez creado
00:16:29
y esto está bien
00:16:31
pero es
00:16:33
muy feo, horroroso, nunca lo vais a ver así
00:16:34
vale, vamos a aprovechar
00:16:38
entonces esta aplicación
00:16:39
para introducir los constructores
00:16:41
para
00:16:46
introducir los
00:16:53
métodos
00:16:55
constructores
00:16:57
bueno
00:17:00
vamos a volver al momento en el cual
00:17:02
hemos hecho esta sentencia
00:17:05
que yo lo único que he dicho hasta ahora es
00:17:06
que esa sentencia lo único que hace
00:17:08
es crear un espacio en memoria
00:17:10
y ahora ya
00:17:13
ese espacio en memoria dejarlo apuntado
00:17:14
por esta variable
00:17:17
es lo que he dicho
00:17:19
que es lo único que hace
00:17:20
pero
00:17:21
os he mentido
00:17:23
como os miento mucho
00:17:25
porque os tengo que ir ocultando información
00:17:27
no os puedo dar toda la información de golpe
00:17:30
esto es como cuando vas a dejar a tu pareja
00:17:31
vas poco a poco
00:17:34
hasta que al final le dices, te llevo poniendo los cuernos 20 años
00:17:35
pues igual
00:17:38
pues esto es igual
00:17:39
yo voy dándoles la información poco a poco
00:17:42
pues a ver, os he mentido
00:17:44
esto hace algo más
00:17:46
esto llama a un método
00:17:47
de la clase
00:17:50
que es el método que se llama
00:17:51
constructor
00:17:54
y ahora me diréis
00:17:54
pero si aquí no hay más métodos que esto
00:17:57
vale, es que hay un oculto
00:17:59
que no vemos, que está siempre
00:18:02
por defecto, un oculto que no vemos
00:18:04
y es el método
00:18:06
constructor, me explico
00:18:08
vamos a ponerlo aquí y así se queda
00:18:10
recogido en el ejercicio
00:18:12
por si habéis visto el proyecto y lo veis
00:18:13
que es un método
00:18:15
constructor
00:18:18
¿cómo se declara un método constructor?
00:18:19
Aunque no, un método constructor es un método que obligatoriamente se llama igual que la clase, se llama igual a lo que tú quieras.
00:18:21
a ver, el método constructor
00:18:42
se llama igual que la clase, obligatorio
00:18:44
entonces solo hay dos tipos
00:18:47
de métodos, los normales que hago yo
00:18:49
como me dé la gana
00:18:51
y se hacen con las reglas que hemos dicho
00:18:52
parámetros opcionales
00:18:54
siempre tipo de retorno
00:18:57
o void si no devuelve nada
00:18:59
todo eso aplica a todos los métodos
00:19:01
salvo a los métodos
00:19:03
constructores que es una excepción
00:19:05
los métodos constructores
00:19:07
a ver, espera, ahora vamos a entender para qué sirven
00:19:08
primero, se llaman igual que la clase
00:19:10
luego, mi método constructor
00:19:12
se tiene que llamar cafetera
00:19:14
este empieza por mayúscula
00:19:16
ya es una excepción, si la clase se llama
00:19:18
cafetera con mayúscula, este tiene que llamar
00:19:20
cafetera con mayúscula, porque Java es
00:19:22
sensible a mayúsculas y minúsculas
00:19:24
vale, el método constructor se llama igual que la clase
00:19:26
tiene
00:19:28
sus paréntesis aquí, como todos los métodos
00:19:30
ahora veremos
00:19:33
que se ponen estos paréntesis
00:19:34
¿qué valor de retorno devuelve?
00:19:35
El método constructor no puede devolver nada nunca.
00:19:38
Entonces, tanto es así que ni siquiera se le pone el void.
00:19:42
Es el único al que no se le pone nada delante.
00:19:45
Y si yo pongo un void, ¿vale?
00:19:48
Pues, a ver, no es que me dé error.
00:19:51
Es que, claro, me va a decir, este método, cuidado, es un constructor.
00:19:53
Es que no pongas el void.
00:19:58
Esto no se hace nunca así.
00:19:59
No se pone nada.
00:20:01
No se pone nada.
00:20:03
Entonces, no devuelve nada.
00:20:05
Obligatoriamente, no devuelve nada.
00:20:06
vale, pues ya he hecho un método constructor
00:20:08
este método constructor que yo he hecho
00:20:10
estaba oculto
00:20:12
aunque vosotros no lo estuviéramos viendo
00:20:14
estaba oculto
00:20:16
entonces yo lo he escrito
00:20:18
y lo que estoy haciendo es como hacerlo ahí patente
00:20:19
y visible, para que se vea, pero ya estaba
00:20:22
vale, pues ahora volvemos
00:20:24
al new, ¿qué hace el new?
00:20:26
instancia el objeto
00:20:29
el espacio
00:20:31
de memoria se queda apuntado
00:20:32
por esta variable
00:20:34
y ahora llama
00:20:35
al método constructor que esté aquí.
00:20:37
El método constructor
00:20:40
que está oculto, que es el método constructor
00:20:42
por defecto, no hacía nada adentro.
00:20:44
Pero si yo lo sobrescribo,
00:20:46
como dices tú, yo lo sobrescribo,
00:20:48
ahora ya puedo hacer aquí
00:20:50
lo que me dé la gana.
00:20:52
Por ejemplo,
00:20:53
bienvenido a
00:20:58
Inexpreso.
00:21:00
Vale,
00:21:12
pues entonces yo meto en el método
00:21:13
constructor lo que me dé la gana, lo que yo quiera.
00:21:14
Y este método se va a ejecutar cuando se llama al new.
00:21:18
Luego el new hace tres cosas.
00:21:23
Crear el espacio en memoria.
00:21:26
La dirección donde se ha creado,
00:21:28
guardarla en esta variable para que se quede apuntado.
00:21:30
Y luego llamar al método constructor.
00:21:32
Que yo no he hecho un método constructor.
00:21:35
No pasa nada.
00:21:37
Hay un oculto que no hace nada al que se llama por defecto.
00:21:38
Luego es como no llamarlo, pero lo llama.
00:21:42
Y luego, vale.
00:21:46
Y si yo lo he hecho visible, entonces ya el que estaba oculto por defecto ya no existe, porque yo lo he sobrescrito.
00:21:47
Y entonces al que llama es a este, porque yo lo he sobrescrito.
00:21:55
¿Vale?
00:21:59
Entonces, ahora si nosotros ejecutáramos este main, si ejecutáramos este main, ¿qué va a ocurrir?
00:21:59
Pues vamos a ver
00:22:12
Efectivamente
00:22:14
Me saluda
00:22:20
Porque llama al constructor
00:22:21
Me ha saludado
00:22:24
Porque ha llamado al constructor
00:22:25
Y luego ya
00:22:27
Y luego ya ha hecho esto de aquí
00:22:28
Luego ya ha hecho esto
00:22:32
Esto no lo hemos visto nosotros
00:22:33
Pero lo ha hecho
00:22:35
¿Vale?
00:22:36
Luego, repitiendo
00:22:39
El método constructor es un método especial
00:22:44
Que obligatoriamente
00:22:46
tiene el nombre de la clase
00:22:48
¿vale?
00:22:50
si no lo tengo yo escrito
00:22:52
habrá uno oculto, aunque yo no lo vea
00:22:54
como este, pero que no tiene nada
00:22:56
dentro, y si yo
00:22:58
lo hago patente porque lo escribo
00:23:00
piso el que estaba oculto
00:23:02
lo piso y ahora es este el válido
00:23:04
y este método cuando se llama
00:23:06
cuando se hace el new, entonces es un método
00:23:08
especial porque no se llama nunca
00:23:10
por su nombre como los demás
00:23:12
yo aquí podría hacer ahora
00:23:14
pues vamos a servir, vamos a llenar la
00:23:15
cafetera lo primero, porque como me la he
00:23:18
inicializado vacía,
00:23:20
cafetera, lo primero
00:23:22
que vamos a hacer va a ser llenarla.
00:23:24
Pues venga, lo primero que hago es llenarla.
00:23:26
Entonces, el resto de métodos
00:23:28
siempre se hacen
00:23:29
asociados a un objeto.
00:23:31
Un objeto creado llama el método.
00:23:33
Pero los constructores
00:23:37
no se llaman nunca así.
00:23:38
Los constructores son métodos que se llaman
00:23:40
solo cuando se crea un
00:23:41
objeto al momento de construir con el new.
00:23:43
Por eso se llaman constructores. No es un
00:23:45
método que luego yo pueda llamar aquí haciendo
00:23:47
cafetera
00:23:50
punto
00:23:52
cafetera. No puedo.
00:23:53
No me ha dejado, de hecho. Yo no puedo
00:23:59
hacer esto. No puedo
00:24:00
llamar al método constructor
00:24:02
con un objeto.
00:24:04
Aunque ese método está dentro.
00:24:08
Entonces uno podría decir, hombre, es un método que está
00:24:10
dentro, ¿puedo llamarle con el objeto? Pues no.
00:24:12
Este método solo vale
00:24:14
para ser llamado en el momento
00:24:15
del new y va asociado al new.
00:24:18
por eso se le llama constructor
00:24:19
bueno
00:24:21
hasta aquí está claro
00:24:23
vale, pues entonces
00:24:25
¿qué ocurre? yo he dicho que yo aquí meto lo que me dé la gana
00:24:26
vale, pues hombre
00:24:30
meter mensajitos está muy bien
00:24:31
pero ya de paso
00:24:33
ya de paso que tengo un constructor
00:24:35
¿para qué se suelen usar?
00:24:38
¿cuál es el uso habitual de los constructores?
00:24:40
pues oye, ya que tienes
00:24:42
aquí unos paréntesis maravillosos
00:24:44
no los desperdicies
00:24:46
usa esos paréntesis
00:24:47
para pasar unos valores
00:24:49
y úsalos para inicializar
00:24:51
las propiedades, y ya en el momento
00:24:54
de crear el objeto, a la vez que lo
00:24:56
creas, le das un primer valor
00:24:58
a las propiedades, y te ahorras esto
00:24:59
que queda horroroso, y no lo vais a ver
00:25:02
nunca, entonces
00:25:03
vamos a hacer eso
00:25:06
decimos, oye pues
00:25:07
voy a hacer un
00:25:08
constructor
00:25:11
que me muestre el mensajito, el mensaje
00:25:12
lo dejo, y además de mostrarme
00:25:15
el mensajito
00:25:17
que reciba dos parámetros
00:25:18
por aquí, porque yo
00:25:21
en estos paréntesis del constructo puedo poner lo que quiera
00:25:23
y soy libre, aquí delante no
00:25:25
aquí delante no puedo poner nada, eso tiene que estar
00:25:27
vacío, pero
00:25:29
aquí puedo poner lo que yo quiera, tengo libertad
00:25:31
pues vamos a pasarle
00:25:34
dos valores
00:25:35
capacidad
00:25:37
y dos parámetros
00:25:40
cantidad
00:25:46
actual, que los estoy llamando
00:25:47
igual a propósito
00:25:51
no, no, son parámetros
00:25:52
entonces tengo que dar el tipo de dato
00:25:57
claro
00:25:58
sí, sí, sí, entonces yo le voy a pasar
00:26:01
dos parámetros double
00:26:03
porque yo aquí en los paréntesis meto lo que quiera
00:26:04
claro
00:26:07
y ahora, ¿para qué voy a usar esos parámetros double
00:26:08
que yo le paso?
00:26:10
pues para inicializar, dar un primer valor
00:26:12
a esas propiedades y así en el momento
00:26:14
en el que lo construyo
00:26:16
ya de paso le doy un primer valor
00:26:18
vale, pues entonces
00:26:20
¿qué voy a hacer con estos parámetros?
00:26:22
pues capacidad
00:26:25
igual a este
00:26:26
parámetro, uy me viene la ambigüedad
00:26:29
del otro día, ¿os acordáis?
00:26:30
ojo que aquí capacidad
00:26:32
sirve para dos cosas
00:26:33
discapacidad
00:26:36
sirve para la propiedad
00:26:38
del objeto y para el parámetro
00:26:40
pues aquí sí que me viene
00:26:42
estupendo el dis
00:26:44
eso
00:26:45
vale, entonces con esta sentencia
00:26:50
a la propiedad capacidad del objeto
00:26:52
le asigno esta
00:26:55
y ahora
00:26:57
lo mismo
00:26:59
a la propiedad
00:27:00
dis cantidad actual
00:27:02
le asigno
00:27:05
cantidad
00:27:06
actual
00:27:08
vale
00:27:10
pues este es uno del constructo de la propiedad de la gana
00:27:12
pero este es el uso habitual de los constructores
00:27:15
aprovecharse
00:27:18
de que cuando son llamados
00:27:20
los constructores, ahora tenemos que cambiar
00:27:22
aquí algo, pero bueno, ahora lo cambiamos
00:27:24
aprovecharse de que en el momento de
00:27:25
construirlo, que es cuando se llama
00:27:28
el constructor, vamos a aprovechar el momento de
00:27:30
construirlo para darle
00:27:32
unos primeros valores, vamos a aprovecharlo
00:27:34
¿vale?
00:27:36
no es que sea obligatorio usar el constructor
00:27:38
para esto, pero bueno, tiene
00:27:40
sentido, entonces
00:27:42
y repito, estamos
00:27:43
como siempre, no olvidéis
00:27:45
memorizar todo lo que decimos
00:27:48
lo que es el dis, en los casos en los que
00:27:50
hemos usado, todo, todo, todo en la memoria
00:27:52
no se puede olvidar una cosa de una para otra
00:27:54
porque esto va a ser una incorporación
00:27:56
de cosas una tras otra, una tras otra, una tras otra
00:27:58
si olvidamos esta
00:28:00
las cosas posteriores
00:28:02
ya no tienen ningún sentido
00:28:04
y no quiero que baje el nivel de suspenso
00:28:06
uy, perdón
00:28:08
me ha traicionado el subconsciente
00:28:09
me ha traído el sufrimiento
00:28:11
no quiero
00:28:13
que suba
00:28:19
la cantidad de su pelo
00:28:20
un segundo que completemos esto y ya me haces la pregunta
00:28:22
a menos que sea muy urgentísima
00:28:25
vale, pues si no es urgente
00:28:27
y Mario igual, esperamos un momento
00:28:28
vale, entonces
00:28:30
yo he cambiado el constructor
00:28:31
he cambiado y le he dicho
00:28:34
que va a recibir dos parámetros
00:28:36
hombre, pues entonces
00:28:37
cuando yo haga esto
00:28:40
¿para qué estaban aquí estos parámetros?
00:28:43
pues estaban para algo
00:28:45
estaban para poner los posibles
00:28:46
valores que uno
00:28:49
quiere poner en el caso de que
00:28:51
el constructor reciba
00:28:53
yo he hecho un constructor que recibe
00:28:54
valores, porque me ha dado la gana a mí hacerlo
00:28:57
para que reciba valores
00:28:59
y los use para inicializar
00:29:00
pues entonces va a tener que ponerlos aquí
00:29:02
porque ya el compilador se te está quejando, está diciendo
00:29:04
oye, perdona, que al constructor le has dicho que va a recibir
00:29:06
dos de Abel, pues tendrás que pasárselos
00:29:09
vale, pues el primero
00:29:11
que es la capacidad
00:29:13
y el segundo la cantidad actual
00:29:14
pues ala, estas líneas
00:29:16
ya me sobran completamente
00:29:19
no, pero no, esto bien
00:29:21
lo que pasa es que estoy empezando a bailar
00:29:24
para hacer más cosas
00:29:25
claro, pues frena
00:29:27
o no, pero bueno
00:29:29
vale, entonces entendido
00:29:30
ahora que hemos hecho con New Cafetera
00:29:32
hemos creado el objeto, lo hemos dejado apuntado
00:29:34
por cafetera y hemos llamado
00:29:37
a este método
00:29:39
y este método que ha hecho
00:29:41
ha cogido el 100
00:29:43
lo ha guardado
00:29:45
en capacidad, ha cogido
00:29:47
el 0, lo ha guardado
00:29:49
en cantidad actual, luego
00:29:51
ha hecho precisamente esto que íbamos a hacer
00:29:53
luego nosotros, luego esto ya no sobra
00:29:55
ya no nos hace falta
00:29:57
¿no?
00:29:59
o sea, con la llamada
00:30:01
al constructor
00:30:03
ya inicializamos
00:30:04
las propiedades
00:30:13
porque lo hemos programado así nosotros
00:30:14
y entonces nos viene muy bien
00:30:17
¿vale?
00:30:19
¿entendido?
00:30:23
a ver, tú ibas a preguntar algo
00:30:24
si los parámetros no se llamasen
00:30:26
igual que los atributos de cafetera
00:30:31
el dis no te hace falta
00:30:33
no te hace falta, pero lo habitual
00:30:34
es que se llamen igual
00:30:37
Claro, es que se llamen igual porque significan eso.
00:30:38
Entonces, el que te ve el código, pues ve que esto es para inicializar la capacidad,
00:30:41
luego tiene sentido que se llame capacidad,
00:30:45
y esto es para inicializar la cantidad actual,
00:30:46
tiene sentido que se llame así, entonces este es el uso habitual.
00:30:48
Queda más claro que si tú llamas a esto X e Y.
00:30:52
Queda un constructor muy feo si lo llamas X e Y.
00:30:55
Mario, ¿vas a preguntar algo?
00:30:57
Ah, que ya lo has arreglado.
00:30:59
Vale, entonces esto es el uso habitual de los constructores.
00:31:01
de hecho es tan así
00:31:04
que no debería
00:31:06
decirlo desde ya
00:31:08
pero como vosotros otra cosa no
00:31:10
pero las gilipolleces se os dan fenomenal
00:31:12
pues vamos a
00:31:14
es verdad
00:31:16
o sea cual que las cosas
00:31:17
no pero me refiero que para las
00:31:19
pejiguerías
00:31:22
sois buenísimos
00:31:23
entonces si vosotros
00:31:25
de hecho
00:31:28
vamos a
00:31:28
a
00:31:30
a comentar
00:31:31
este constructor
00:31:34
entonces, el Eclipse
00:31:34
este, tiene un montón
00:31:37
de ayudas sobre la marcha
00:31:40
obviamente, pues para refactorizar
00:31:41
para formatear código
00:31:44
para hacer mil tonterías
00:31:45
entonces para
00:31:47
fijaos, imagina
00:31:48
estamos haciendo la clase
00:31:50
la clase cafetera
00:31:52
ya, me he dado cuenta
00:31:54
pero ahora lo vais a agradecer
00:31:57
estamos haciendo la clase
00:31:59
que si
00:32:00
claro
00:32:01
está la clase y ahora
00:32:06
nosotros ya a partir de ahora cada vez que hagamos
00:32:08
clases vamos a hacer estos constructores
00:32:10
porque nos van a facilitar
00:32:12
la vida cuando instanciemos los objetos
00:32:14
hacemos new con los primeros valores y ya lo
00:32:16
tenemos, lo vamos a hacer ya por
00:32:18
sistema, pues como Eclipse se sabe
00:32:20
que por sistema vamos a usar estos constructores
00:32:22
porque son muy útiles para
00:32:25
luego en el main crear el objeto y darle
00:32:26
valores iniciales, pues él nos
00:32:28
dice, venga, botón
00:32:30
derecho, source,
00:32:32
genera constructor
00:32:36
usando campos.
00:32:37
¿Qué campos quiere usar el constructor?
00:32:39
Capacidad cantidad actual,
00:32:41
géneralo
00:32:43
y
00:32:44
géneralo.
00:32:46
¿Y qué te ha hecho
00:32:51
el tío?
00:32:53
Pues te ha creado él el mismo
00:32:54
constructor que hemos hecho nosotros.
00:32:56
ya, esto está relacionado con la herencia
00:32:58
super ahora mismo es como
00:33:00
nada
00:33:02
lo puedes quitar, a ver
00:33:03
super es, estás llamando al constructor de la super clase
00:33:06
la super clase de cafeteras object
00:33:09
llamas al constructor de object que no te hace nada
00:33:10
vale, vale, vale
00:33:13
claro
00:33:14
y te pone el public también que todos nos lo hemos puesto
00:33:15
eso es una clase, pero una subclase
00:33:21
¿cómo se hace?
00:33:24
¿Cómo haríamos la cafetera roventa?
00:33:26
Cafetera roventa,
00:33:29
estens, cafetera.
00:33:31
Pondrías aquí
00:33:35
estens
00:33:36
de la cafetera que tú eres.
00:33:38
Cafetera general, genérica,
00:33:40
lo que sea.
00:33:42
Vale.
00:33:45
Vale, pues
00:33:47
entonces, como veis,
00:33:48
este es el uso habitual de los constructores
00:33:51
y es tan así que el propio Eclipse
00:33:52
te permite generar esto
00:33:54
automáticamente, como hemos visto que se hace
00:33:56
te pone el super, el super
00:33:58
lo podéis borrar, no hace nada, ya entenderemos
00:34:00
que es el super, esto es lo que se llama
00:34:02
el constructor con parámetros
00:34:04
porque tiene un constructor
00:34:06
con parámetros que sirven para inicializar
00:34:08
las propiedades
00:34:10
y veis el eclipse
00:34:11
ya esos parámetros se los da con este
00:34:14
nombre, con lo cual luego tiene que poner el dis, etc
00:34:16
y queda todo estupendo
00:34:18
constructores
00:34:20
cuidado con las generaciones de
00:34:25
código que uno ya se acostuma a generar
00:34:32
el código automáticamente y llega un momento que ya no saben lo que está haciendo.
00:34:33
Pues no.
00:34:36
Constructores
00:34:39
puede haber más de uno.
00:34:39
¿En qué se van a diferenciar?
00:34:42
Ya lo vimos
00:34:44
cuando vimos funciones en la
00:34:45
lista de parámetros.
00:34:48
Puede ser que yo en mi aplicación
00:34:49
no quiera crear siempre las
00:34:51
cafeteras dándole valores. A lo mejor
00:34:53
esta es la cafetera 1.
00:34:56
Pero mi aplicación, por lo que sea,
00:34:57
yo quiero hacer otra cafetera
00:35:00
quiero hacer otra, la cafetera 2
00:35:01
vamos a ver lo que pasa
00:35:06
quiero hacer la cafetera 2
00:35:09
pero a esta no quiero
00:35:12
no quiero darle valores iniciales
00:35:14
no quiero darle valores iniciales
00:35:19
quiero que se cree sin valores y luego yo los inicializo
00:35:20
pues el compilador me va a decir, ojo pero no
00:35:23
tú has sobrescrito el constructor
00:35:26
que había, lo has sobrescrito
00:35:30
y le has puesto parámetros.
00:35:32
Bueno, de repente es un mi país y ya está.
00:35:34
No, más fácil que eso.
00:35:36
Entonces el comercio te dice,
00:35:38
lo has sobrescrito y le has puesto parámetros.
00:35:39
Luego lo siento mucho,
00:35:41
pero vas a tener que ponerle parámetros.
00:35:43
No hay tu tía.
00:35:45
Ah, no.
00:35:46
Es que podemos hacer varios constructores.
00:35:47
Uno con parámetros,
00:35:50
otro sin parámetros,
00:35:52
otro con 20.000 parámetros
00:35:53
para que te haga 1.000 cosas.
00:35:54
Podemos hacer tantos constructores como queramos.
00:35:56
El orden de capacidad y cantidad
00:35:58
siempre va a tener que tener el mismo orden.
00:36:00
si pones dos parámetros
00:36:01
y luego en la siguiente pones tres parámetros
00:36:03
Sí, sí, sí, sí, claro, eso es como las funciones
00:36:05
el orden tiene, claro
00:36:08
claro, entonces yo podría
00:36:09
hacer aquí un constructor
00:36:11
cafetera
00:36:13
cafetera
00:36:15
que se limitará a saludar
00:36:17
es que como lo he generado se me ha quitado el saludo
00:36:19
lo tenía yo aquí puesto
00:36:21
podría hacerme yo un constructor
00:36:22
que se limitará a saludar
00:36:25
sin más, este
00:36:27
y no pasa nada
00:36:28
y los dos pueden coexistir perfectamente
00:36:31
porque
00:36:33
se distinguen perfectamente
00:36:34
a cuál estoy llamando, depende de los parámetros
00:36:37
que pase, esto lo vimos cuando hicimos
00:36:39
funciones, puede haber dos funciones
00:36:41
que se llamen igual, cuando sé si estoy llamando
00:36:43
a una o a la otra, depende
00:36:45
de la lista de parámetros
00:36:47
pues aquí no hay ambigüedad
00:36:48
se llaman igual, esto es lo que se llama
00:36:50
sobrecarga de métodos
00:36:53
overload
00:36:55
o como lo queráis llamar
00:36:56
vale, es decir
00:36:58
El constructor este está sobrecargado.
00:37:00
Sobrecargado significa que tiene un huevo de trabajo.
00:37:04
Es decir, aparece muchas veces.
00:37:06
El pobre está sobrecargado.
00:37:08
Tiene dos trabajos, este y este, tiene dos.
00:37:09
Por eso está sobrecargado de trabajo.
00:37:12
¿Cuándo distingue el constructor si le han pedido este trabajo o le han pedido este?
00:37:15
¿Cuándo lo distingue?
00:37:19
Pues si le han pasado parámetros o no le han pasado.
00:37:21
Así distingue el constructor si tiene que hacer este trabajo o tiene que hacer este de los dos que le sobrecargan.
00:37:23
entonces aquí
00:37:29
aquí no hay duda
00:37:30
de que constructor le han pedido
00:37:33
el de arriba
00:37:35
aquí no hay duda de cual le han pedido
00:37:36
el de abajo
00:37:40
vale
00:37:41
aquí estará haciendo el de abajo, aquí el de arriba
00:37:43
entonces constructores puede haber
00:37:46
muchos
00:37:48
pero tienen que cambiar, tienen que variar
00:37:48
en los parámetros
00:37:51
porque es la forma de distinguir
00:37:52
vale, que me calle ya
00:37:54
lo que quiero decir
00:37:59
Bueno
00:38:00
Ya todo el mundo se ha aprendido en la cabeza
00:38:07
Lo que es un constructor, cómo se usa, etc
00:38:10
Y ya no se le va a olvidar nunca jamás
00:38:12
Y si prevé que se le va a olvidar
00:38:13
Se lo va a mirar esta tarde, ¿no?
00:38:15
Vale
00:38:19
Bueno, pues ahora ya
00:38:19
Esta aplicación tampoco merece la pena que hagamos mucho más
00:38:21
Pues uno aquí podría hacer un menú
00:38:24
¿Qué quieres? ¿Llenarla? ¿Servir taza?
00:38:25
Pues ya, llamar a los métodos
00:38:27
Vamos a servir una taza
00:38:28
en la cafetera
00:38:30
la cafetera 2
00:38:33
que está vacía
00:38:38
porque no le hemos inicializado las propiedades
00:38:38
pues podemos servir una taza
00:38:41
que tenga capacidad 45
00:38:44
pues si miramos la
00:38:48
cantidad actual va a seguir a 0
00:38:49
no hemos podido servirla
00:38:51
bueno, ya aquí se trata de probar
00:38:52
los métodos, hacer un mail, lo que queráis
00:38:54
para, ya está
00:38:56
Para ver como, aquí ya podéis hacer un main y probar
00:38:57
Servirla
00:39:01
Una taza, mirar después la cantidad
00:39:02
Que tiene, para ver si realmente
00:39:04
La ha servido esa cantidad o no
00:39:07
Pues ya nada, este main ya lo hacéis
00:39:08
Probáis
00:39:10
Y para ver que funciona
00:39:11
Vale, pues nos vamos al recreo
00:39:14
- 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:
- 15
- Fecha:
- 5 de diciembre de 2024 - 18:35
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 39′ 20″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 167.83 MBytes