20251202 POO_ClasesMetodos_2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Bueno, ¿vienen hasta aquí? Vale, pues por ejemplo, para seguir un poquito con ejemplos, que resulta que mi aplicación no es un instituto con dos alumnos solo, que es muy poquito, sino que tiene mil.
00:00:00
Vale, que resulta que mi aplicación no va a trabajar solo con dos alumnos, sino con mil alumnos, pues no tiene sentido que me haga alumno 1, alumno 2, alumno 3, ¿qué me puedo hacer entonces?
00:00:25
si quiero trabajar con mil
00:00:38
un array
00:00:40
vale
00:00:42
pues
00:00:44
por ejemplo
00:00:45
resulta que mi aplicación va a trabajar
00:00:48
mi instituto tiene mil
00:00:57
pues me hago un array de mil
00:00:58
alumnos, entonces igual que yo
00:01:01
me hacía un array de números enteros
00:01:03
¿cómo me lo hacía?
00:01:05
pues lo hacíamos así ¿verdad?
00:01:06
new int
00:01:09
así me hacía yo un array
00:01:10
para mil números enteros
00:01:15
pues aquí en lugar de mil
00:01:17
números enteros, lo que quiero es
00:01:19
mil variables tipo alumno
00:01:21
pues entonces el int
00:01:23
lo cambio por
00:01:25
alumno, porque ahora mi tipo de dato ha cambiado
00:01:27
ahora ya no es int, ahora es
00:01:29
alumno
00:01:31
vale, ahora es alumno
00:01:32
entender la clase
00:01:37
como la creación de un tipo
00:01:39
de datos propio que me he inventado yo
00:01:41
y es un tipo de datos propio
00:01:43
complejo porque tiene tres partes
00:01:46
pero es un tipo de datos más
00:01:48
del que declaramos variables
00:01:50
si nos da la gana, como aquí
00:01:52
variables que al ser objeto hay que crear
00:01:54
declaro array si me da la gana
00:01:56
¿vale? entonces aquí lo único
00:02:00
ojo, cuidado
00:02:02
con el array
00:02:04
¿por qué? ahora estamos hablando
00:02:05
de objetos
00:02:13
entonces con new alumno
00:02:13
yo me estoy creando mil posiciones
00:02:16
mil posiciones
00:02:19
de variables
00:02:21
de tipo alumno
00:02:23
pero es que ya sabemos lo que es una variable de tipo alumno
00:02:24
en realidad es una dirección de memoria
00:02:26
que te apunta a algún sitio
00:02:28
esto es lo que nos estamos creando
00:02:29
pero los alumnos todavía no están
00:02:32
con esta declaración
00:02:35
con esta declaración
00:02:37
de arriba
00:02:39
yo tengo esta tabla
00:02:39
pero los alumnos todavía no los he creado
00:02:41
Me falta hacer todos los news
00:02:44
Para crear los espacios
00:02:47
¿Vale? Valeria no se come
00:02:49
En clase
00:02:51
Bueno
00:02:52
Pues resto del mundo
00:02:54
No se come en clase
00:02:59
¿Vale? Entonces con esto
00:02:59
He declarado esta parte
00:03:02
Me falta esta de aquí
00:03:04
Pues menos mal que está en un array
00:03:06
Y no tengo que hacer mil news uno tras otro
00:03:08
Menos mal que está en un array
00:03:10
Y no tengo que hacer mil news uno tras otro
00:03:12
Vamos a recorrer el array
00:03:13
vamos a recorrerlo
00:03:15
con un for
00:03:17
de toda la vida de Dios
00:03:20
vale, pues me recorro mi array
00:03:21
como recorro los arrays de siempre
00:03:43
y ahora, números de i
00:03:45
¿ahora qué es números de i?
00:03:47
números de i es una variable
00:03:50
alumno
00:03:51
un objeto alumno
00:03:52
que está declarado, sí, pero que está todavía
00:03:54
sin crear, su espacio está todavía sin crear
00:03:57
entonces, antes
00:03:59
de nada tendré que hacer esto
00:04:01
con todos y cada uno de ellos.
00:04:03
¿Vale?
00:04:06
Antes de nada, con todos y cada uno
00:04:07
de ellos, con números 0, números 1, números 2,
00:04:09
tendré que hacer esto
00:04:12
para crear su espacio.
00:04:12
Igual que aquí, después
00:04:15
de declarar alumno 1,
00:04:17
le he creado el espacio.
00:04:20
Pero aquí solo tenía 1.
00:04:23
Y he creado el espacio para ese.
00:04:25
Pero aquí tengo 1000.
00:04:28
Pues para cada uno de ellos,
00:04:30
Números 0, así hasta número 99
00:04:31
Le creo su espacio
00:04:33
Y ahora ya sí que tengo esos objetos
00:04:34
Para hacer con ellos lo que me dé la gana
00:04:36
Por ejemplo
00:04:38
Vamos a ponerles a todos
00:04:41
Edades aleatorias
00:04:42
Entre 0 y
00:04:44
100, por ejemplo
00:04:47
Pues venga, vamos a recorrer
00:04:48
Nuestro array
00:04:51
¿Alguien ha llamado?
00:04:52
Dime
00:04:57
Vale
00:04:57
Vale, pues por ejemplo
00:05:01
Vamos
00:05:11
Números de i
00:05:13
Es el alumno en posición i
00:05:17
He dicho que a la edad de cada alumno
00:05:20
Es a la que le voy a dar una edad aleatoria
00:05:22
Pues yo que sé
00:05:24
Por 100
00:05:30
Para que me genere entre 0 y 100
00:05:32
Aprox
00:05:36
Casting de int
00:05:36
Pues que te va a generar 0 todo el rato
00:05:40
Porque más random te generan 0, 0,1
00:05:45
0, entre 0 y 1
00:05:48
Entonces al hacerle int
00:05:49
Van a ser 0 siempre
00:05:51
Vale, pues así por ejemplo
00:05:52
He asignado
00:05:54
Edad aleatoria
00:05:56
A todos los alumnos de la RAI
00:06:05
vale, vamos a mostrarlos
00:06:08
uy
00:06:12
si hacemos eso pero en el
00:06:13
fichero de alumno, en donde se crea
00:06:18
la clase, no habrá que poner
00:06:20
esto, ¿no?
00:06:22
vale, no, pero es que la idea de los
00:06:25
métodos que pones aquí son los que trabajan con
00:06:26
un único alumno, ahora cuando
00:06:28
nos metamos en método entenderás, esto no trabaja con
00:06:30
uno en particular, sino que trabaja con todos
00:06:32
pero bueno, sí, se podría hacer un método
00:06:34
que fuera, dame una
00:06:37
daza aleatoria a mí mismo, y luego lo llamo
00:06:38
para todos, vale, ahora lo hacemos, vale, cuando nos
00:06:40
metamos en métodos
00:06:42
vale
00:06:43
con esto asignaría
00:06:44
aleatoria a todos, vale
00:06:48
entonces vamos a mostrarlos
00:06:50
y ya está, pues venga, vamos a mostrarlos
00:06:51
para variar, voy a recorrer
00:06:54
en un for each, porque estoy
00:06:56
consultando, no estoy
00:06:58
pues para cada alumno, ah
00:07:00
en mi array
00:07:02
jolín
00:07:04
le he llamado números, que poco explicativo
00:07:05
voy a cambiarle el nombre de la array
00:07:08
a alumnos
00:07:11
¿eh?
00:07:13
podéis refactorizar o hacerlo con
00:07:23
atajo, como os dé la gana
00:07:25
vale
00:07:26
vale, pues para cada alumno
00:07:27
a
00:07:32
¿vale? este es el for each de toda la vida
00:07:33
es un bucle
00:07:38
que va recorriendo el array que yo ponga aquí
00:07:40
el array que yo ponga aquí
00:07:42
y este elemento
00:07:44
va
00:07:46
quedándose con una copia
00:07:47
de todos y cada uno de los elementos del array
00:07:50
claro, este elemento se tiene que
00:07:52
declarar como alumno, porque el array es de alumnos
00:07:54
en cada iteración
00:07:56
A va teniendo cada uno de los elementos
00:08:01
del array, en la primera iteración
00:08:04
A es el primer alumno del array, una copia
00:08:06
en la segunda iteración
00:08:08
A es una copia del segundo elemento del array
00:08:10
luego este for each
00:08:12
no acaba hasta que no has recorrido
00:08:14
todo el array
00:08:16
¿cuándo le di valor a quién?
00:08:17
A es una variable temporal auxiliar
00:08:25
que solo vive, solo tiene vida aquí dentro
00:08:29
de este for y se va rellenando
00:08:32
en cada iteración con cada uno de los alumnos
00:08:34
pero es una variable
00:08:36
que solo vive ahí dentro
00:08:37
cuando el forish termina desaparecido
00:08:39
y sirve para irse quedando con una copia
00:08:41
de cada alumno en las sucesivas iteraciones
00:08:43
ya está
00:08:45
vale, pues entonces, efectivamente
00:08:45
si yo trato de mostrar al alumno a lo bestia
00:08:48
a ver, en lugar de mil
00:08:50
vamos a ponerle menos para que no me salgan ahí
00:08:54
200.000 líneas, vamos a hacer
00:08:56
un array de 10 solamente, no de mil alumnos
00:08:58
de 10
00:09:01
gracias a que
00:09:02
he tirado de len, si no he puesto
00:09:06
tal cual, mil
00:09:08
El cambio de código es inmediato
00:09:09
Me voy aquí, lo cambio y ya está
00:09:11
Vale, pues
00:09:13
Vamos a ejecutar este código
00:09:14
Primero a la parte de arriba
00:09:17
Y luego se pondrá a mostrar todo eso
00:09:19
Vale, entonces
00:09:22
Estos son los 10 alumnos
00:09:31
Efectivamente me está mostrando
00:09:33
Algo muy extraño, ¿qué es esto?
00:09:35
Claro, porque el SISO
00:09:37
Aquí le estamos dando una caja con cosas dentro
00:09:39
No le estás dando
00:09:42
Una única cosa, un string, un int
00:09:43
como le dábamos antes, que él, el stringer
00:09:45
lo sabe mostrar, aquí le damos
00:09:47
una caja con un montón de basurilla
00:09:49
entonces él, ya entendemos
00:09:51
por qué, te hace un aplanamiento
00:09:53
extraño, ya entenderemos por qué
00:09:55
y te dice, me das una caja con un montón
00:09:57
de cosas raras, te muestro
00:09:59
un aplanamiento muy raro y paso
00:10:01
de ti, claro
00:10:03
o le decimos cómo aplanar
00:10:04
que eso todavía no sabemos
00:10:07
o le tendremos que decir que muestre
00:10:08
las propiedades por separado
00:10:11
entonces hombre, aquí
00:10:12
Y pues tiene sentido.
00:10:14
¿Qué quieres mostrar? ¿La edad?
00:10:16
Pues ahora esto ya sí lo vas a ver mostrar.
00:10:21
Porque a.edad será la edad de cada uno de los alumnos.
00:10:23
Por ejemplo.
00:10:30
¿Vale? Pues ahora con esto.
00:10:40
¿Vale? Pues estas son las 10 edades que ha generado.
00:10:51
¿Vale? Este era de un System.out que está arriba.
00:10:56
¿Vale?
00:10:59
Que este System.out es
00:11:00
De donde está
00:11:04
De aquí
00:11:05
¿Vale?
00:11:07
Entonces lo ponemos aquí
00:11:10
Si lo mostramos así
00:11:13
Como tiene
00:11:18
Varios elementos
00:11:21
Nos muestra
00:11:25
Algo raro
00:11:32
Un resumen raro
00:11:34
Ese resumen raro nos vale
00:11:35
Tendríamos que mostrar las propiedades por separado
00:11:37
entonces esto lo voy a poner aquí
00:11:39
entonces nunca
00:11:43
mientras no sepamos
00:11:49
mientras no sepamos
00:11:52
cómo decirle a Java que ese resumen
00:11:54
lo haga a mi gusto
00:11:56
mientras no sepamos, no mostramos un alumno dando el alumno
00:11:57
entero, porque es una caja con cosas
00:12:00
él muestra, yo que sé, le hace así
00:12:01
la caja y muestra lo que sea
00:12:04
mientras no sepamos cómo aplanar la caja
00:12:05
vamos a tener que decirle
00:12:08
que
00:12:10
nos muestra propiedad por propiedad
00:12:10
no, no hemos hecho nada importante
00:12:14
vale
00:12:23
esto sí que lo haríamos
00:12:26
alumno1.nombre
00:12:27
onif
00:12:30
alumno1.nombre
00:12:31
no, es que
00:12:38
los métodos los hemos dejado en blanco todavía
00:12:45
porque estamos por ahora entendiendo cómo funciona
00:12:47
esto y lo que te rondaré morena
00:12:49
porque hemos visto un 0,01%
00:12:51
de todo lo que tenemos que aprender
00:12:54
esto sí nos mostraría cosas con sentido
00:12:55
esto sí, esto no
00:13:01
si ejecutamos esto
00:13:02
esto nos muestra algo raro
00:13:04
porque le he pasado al alumno al completo
00:13:09
y aquí le he pasado propiedad por propiedad
00:13:11
esto ya sí
00:13:13
bueno, pues más o menos la dinámica entendida
00:13:14
¿no?
00:13:17
vale
00:13:19
pero
00:13:19
esta aplicación
00:13:22
solo tiene una entidad
00:13:24
y si tuviera
00:13:27
dos, por ejemplo, ahora vamos a
00:13:30
trabajar con alumnos que tienen
00:13:32
cada uno su matrícula, mi aplicación
00:13:34
va a gestionar, pues que alumno
00:13:36
ha pagado la matrícula, que patatín
00:13:38
patatán, vale, pues entonces
00:13:40
yo me voy con el
00:13:42
cliente y le digo, oye la matrícula
00:13:43
¿cómo se caracteriza
00:13:47
de que va la matrícula? le digo, oye pues la matrícula
00:13:48
tiene un código, tiene
00:13:50
un nombre de
00:13:52
matrícula, pues de dam, dau
00:13:54
y tiene un precio
00:13:56
vale, pues entonces es una
00:13:57
entidad compleja
00:14:00
porque si me dijeran la matrícula
00:14:01
es un precio, ya está, pues la podría declarar
00:14:04
como dabble, porque en un dabble
00:14:06
me cabe el precio, ya está, podría
00:14:08
matrícula, dabble, pero no
00:14:09
la matrícula tiene su nombre, tiene su
00:14:12
precio, tiene su no sé qué, pues tengo que hacerme
00:14:14
una clase matrícula que tenga todo eso
00:14:16
pues venga, vamos a
00:14:18
ampliar la aplicación
00:14:20
ahora con matrícula
00:14:21
a la otra clase más, matrícula
00:14:31
Le quito el public para no liarnos
00:14:32
Matrícula, ¿por qué se va a caracterizar?
00:14:35
Pues se va a caracterizar
00:14:38
Por un código de matrícula
00:14:39
Por ejemplo
00:14:41
Se va a caracterizar por una descripción
00:14:42
Y se va a caracterizar
00:14:46
Por un precio
00:14:50
Una cantidad
00:14:52
Por esas tres cosas
00:14:55
Se va a caracterizar
00:14:59
Vale, entonces podríamos
00:15:00
Instanciar matrículas
00:15:03
ver los precios que tiene, etc.
00:15:04
Pero lógicamente
00:15:07
os vendrá a la cabeza
00:15:08
una pregunta natural
00:15:10
sobre esta aplicación.
00:15:11
¿No os canta algo raro?
00:15:14
Tengo alumno con sus propiedades,
00:15:15
matrícula con las suyas,
00:15:18
una aplicación que gestiona matrículas de alumnos.
00:15:19
¿Qué os suena aquí un poco extraño?
00:15:21
Eso.
00:15:26
Muy bien.
00:15:27
Tengo mis alumnos, tengo las matrículas,
00:15:27
pero esta aplicación gestiona matrículas de alumnos.
00:15:29
O sea, las matrículas solo tienen sentido
00:15:32
si son de un alumno, las matrículas
00:15:34
los alumnos sí pueden estar sueltos por la vida
00:15:35
pero una matrícula es de un alumno
00:15:37
entonces
00:15:40
nos falta algo fundamental en este diseño
00:15:40
que el alumno
00:15:44
tiene su matrícula
00:15:46
luego
00:15:48
esto automáticamente ahora ya
00:15:48
me hace que yo modifique la clase alumno
00:15:51
porque ahora alumno se va a caracterizar
00:15:53
por su NIF
00:15:55
su nombre, su edad
00:16:00
y ahora le aparece
00:16:01
una propiedad nueva
00:16:03
que es su matrícula
00:16:04
y matrícula es otra
00:16:08
propiedad más
00:16:14
lo que pasa es que esta es de un tipo
00:16:15
complejo, es del tipo
00:16:18
matrícula, nif y nombre son
00:16:20
string, porque con un string se queda
00:16:22
completamente caracterizado nif y nombre
00:16:24
el hace su nint, porque con un número se queda
00:16:26
completamente caracterizado edad
00:16:28
pero matrícula no se queda
00:16:29
completamente caracterizado con un
00:16:32
double o con un string, porque matrícula
00:16:34
tiene muchas cosas dentro
00:16:36
entonces me tendré que hacer mi clase matrícula
00:16:37
con todas las cosas que tiene dentro
00:16:41
y ahora ya sí, alumno tendrá dentro de sí
00:16:43
un objeto matrícula suyo
00:16:47
con sus propios datos
00:16:50
luego, las clases, los objetos
00:16:51
tienen dentro otros objetos que los caracterizan
00:17:01
porque si no, el modelo se quedaría muy sencillo
00:17:04
muy simple
00:17:06
y esto no nos tiene que asustar
00:17:07
porque matrícula es otra variable más
00:17:09
es otra variable más, lo que pasa es que es de este tipo de dato
00:17:12
y yo aquí ni hago new ni hago nada
00:17:15
no hay necesidad porque aquí estoy en la clase, estoy en la plantilla
00:17:18
aquí lo que digo es, oye que mi alumno va a tener un nif
00:17:21
mi alumno va a tener un nombre, mi alumno va a tener una edad
00:17:25
y mi alumno va a tener una matrícula, pero todavía no hay nada real
00:17:27
aquí no existe nada todavía, esto es una plantilla
00:17:30
aquí no hay ningún nif, no hay ningún nombre
00:17:33
no hay ninguna edad y no hay ninguna matrícula, no hay nada
00:17:36
por eso ni hago new ni hay nada, solamente hay
00:17:38
unas casillas diciendo
00:17:41
el alumno tiene casilla
00:17:44
nif, casilla nombre, casilla edad,
00:17:46
casilla matrícula. Pero esas casillas
00:17:48
solo se van a
00:17:50
rellenar cuando
00:17:52
el programa se lance y
00:17:54
aparezcan los alumnos.
00:17:55
Bueno, pues para no liar
00:18:00
vamos a hacernos un main2
00:18:01
que
00:18:03
crea ahora matrículas, se las ponga alumnos,
00:18:05
etc. Este main, este
00:18:07
proyecto de ejemplo, como lo subimos
00:18:09
luego, este main lo dejamos así
00:18:11
que es el que trabaja con objetos
00:18:13
normales y corrientes, que no tiene
00:18:15
ni otros objetos dentro, ni nada
00:18:17
a ver
00:18:19
solo uno, la máquina
00:18:25
virtual solo va a tener
00:18:27
solo va a tener en cuenta uno, el otro no se va a arrancar nunca
00:18:28
si tiene dos, o yo me voy a hacer otra clase
00:18:31
main, le voy a decir, arranca ahora este, con lo cual
00:18:33
este otro es como si no existiera, nunca va
00:18:35
a ser arrancado
00:18:37
digamos que en un paquete solo podemos tener
00:18:38
a ver, puedes tener todos los que quieras
00:18:41
Pero, claro, una ejecución solo puede empezar por uno.
00:18:45
Tú eliges por cuál, ¿vale?
00:18:52
Eliges por cuál.
00:18:54
Cada ejecución arranca en un único main, en un único main.
00:18:55
Entonces, voy a hacer otro main que significaría darle otro
00:19:00
punto de arranque a la aplicación,
00:19:02
otro punto de arranque, para elegir si la arranco desde este
00:19:04
o desde este otro, ¿vale?
00:19:06
Entonces, me voy a hacer otra clase con otro método main que
00:19:08
sería otro punto de arranque.
00:19:11
Es como hacer otra aplicación distinta, otra distinta.
00:19:12
Pues venga, me voy a hacer aquí un
00:19:14
main2
00:19:17
No, aquí
00:19:18
con el diseño que yo he hecho
00:19:31
un alumno tiene una única matrícula
00:19:33
si tuviera varias, lo puede hacer
00:19:36
pero entonces tengo que cambiarlo a esto
00:19:37
con el diseño que yo he hecho
00:19:39
un alumno tiene una matrícula, o sea, esto lógicamente
00:19:42
está completamente
00:19:44
ligado al diagrama de la relación
00:19:46
esto sería una relación de uno a uno
00:19:48
un alumno, una matrícula, o de 0 a 1
00:19:50
porque puede haber un alumno sin matrícula
00:19:53
a lo mejor, podría
00:19:55
esta sería de 1 a 1, que yo la quiero
00:19:56
de 1 a muchos, pues es así
00:19:59
bueno, si estás
00:20:01
trabajando con una base de datos, sí, pero ahora mismo
00:20:05
nosotros estamos trabajando con una base de datos
00:20:07
es bueno que
00:20:09
nuestros datos no vienen de una base
00:20:11
de datos, los vamos a ir creando
00:20:13
o sea, es bueno que veáis ese paralelismo
00:20:15
en cuanto al concepto
00:20:17
¿vale? pero ahora mismo nuestros datos
00:20:19
no están en una base de datos, luego no hay ni
00:20:21
de relación, los metemos por teclado
00:20:23
vale
00:20:25
bueno pues entonces
00:20:27
mi otra aplicación
00:20:30
esta es otra aplicación porque es otro main
00:20:32
luego esta es otra
00:20:35
esta es otra porque es otro main
00:20:36
pues venga, vamos a hacernos un alumno
00:20:38
el que yo decida
00:20:41
es que yo no arranco, es que claro, yo cuando arranco una aplicación
00:20:45
arranco un main, le digo este
00:20:48
claro
00:20:49
porque si yo arrancara la aplicación como tal así
00:20:51
le tengo que
00:20:54
decidir en las configuraciones de ejecución
00:20:56
cuál de las dos elegir
00:20:58
¿vale? porque si no él no sabe
00:20:59
por cuál arrancar
00:21:02
¿te va a arrancar por uno o te va a arrancar por otro?
00:21:03
nunca por los dos
00:21:08
vale, pues a ver
00:21:08
mi este de aquí
00:21:11
relax
00:21:13
venga, pues si yo me hago un alumno
00:21:16
Aquí tengo mi alumno
00:21:20
Vale
00:21:27
El alumno ya tiene espacio para sus propiedades
00:21:28
Pues venga, mi alumno
00:21:33
Le vamos a dar
00:21:35
Tiene un NIF
00:21:37
Muy bonito
00:21:39
Y tiene un nombre, muy bonito
00:21:40
Lo podía leer por teclado
00:21:45
Claro, en lugar de dárselo directamente
00:21:52
Esto ya es lo que la aplicación me diga
00:21:55
Tiene su edad
00:21:56
muy bonita también
00:22:00
y
00:22:08
le voy a dar
00:22:09
una matrícula
00:22:12
entonces alumno.matricula
00:22:13
¿qué necesita?
00:22:15
un objeto matrícula
00:22:18
luego ¿qué pondríais ahí?
00:22:20
muy bien
00:22:23
antes que nada habría que crear
00:22:24
el objeto matrícula para él
00:22:26
antes de nada, antes de empezar a hablar
00:22:27
creamos el objeto matrícula
00:22:29
y ahora ya podemos meternos en la matrícula
00:22:31
para darle los datos
00:22:34
entonces
00:22:35
ahora, que yo quiero
00:22:38
a mi matrícula darle un código
00:22:40
pues sería
00:22:42
alumno.matrícula
00:22:43
y ahora que pondría
00:22:46
.código
00:22:46
y así me puedo ir hasta el infinito
00:22:49
porque si matrícula tuviera dentro otro objeto
00:22:52
seguiría con el punto y punto y punto
00:22:54
y así hasta el infinito
00:22:56
código
00:22:57
ala, pues mi alumno
00:22:59
tiene una matrícula
00:23:01
cuyo código es 43
00:23:04
descripción
00:23:05
pues mi alumno está
00:23:13
matriculado en DAM
00:23:15
mi alumno
00:23:17
cantidad, ¿cuánta cantidad
00:23:24
va a pagar de matrícula?
00:23:31
pues eso
00:23:33
¿vale? entonces es
00:23:34
aplicar el mismo criterio todo el rato
00:23:36
si alumno matrícula es un objeto
00:23:39
porque lo es
00:23:41
pues tendré que crear espacio para él
00:23:43
antes de nada
00:23:45
edad era un número, por eso no he hecho el niño
00:23:46
Porque es un número, le asigno el número y ya está
00:23:49
Nif es un string, trabajo como trabajo
00:23:50
Con los string, asigno el valor y ya está
00:23:53
Pero matrícula es un objeto
00:23:55
Matrícula, pues tengo que crearlo
00:23:57
Antes de nada
00:23:59
Y luego ya, ¿qué le quiero dar propiedades?
00:24:00
Pues se las doy
00:24:03
¿Vale? ¿Qué quiero mostrar
00:24:04
Mi alumno? Pues con esto no haríamos nada
00:24:12
Lógicamente, yo podría mostrar
00:24:14
Lo que me diera a mí la gana
00:24:16
¿Vale? Aquí ya podríamos mostrar lo que quisiéramos
00:24:17
Pues alumno
00:24:30
Su matrícula
00:24:32
Por su código, lo que yo quisiera
00:24:34
O la cantidad, lo que vas a pagar
00:24:36
No, lo acabamos de hacer hace un ratito
00:24:39
Y acabo de explicar por qué no funciona
00:24:45
¿En qué estabas pensando?
00:24:47
Pero ¿qué vas a correr con un for each?
00:24:51
Aquí no hay ningún array
00:24:52
No puedes recorrer nada con un for each
00:24:53
¿Vale?
00:24:55
Entonces voy a ejecutar este main
00:25:05
Aquí, ligado con lo que me preguntabais antes
00:25:06
Efectivamente
00:25:10
Yo hago varios mains
00:25:11
pues para poder practicar diferentes cosas
00:25:13
sin mezclar el código
00:25:17
y que luego quede más claro.
00:25:18
Claro, si entendemos este proyecto
00:25:19
como una aplicación completa,
00:25:21
yo no puedo arrancar esta aplicación sin más
00:25:24
porque la máquina virtual se volvería loca.
00:25:26
Me diría, pero escúchame,
00:25:29
dime el punto de arranque,
00:25:31
dime el punto de arranque cuál es.
00:25:33
Entonces, si lo puedo configurar aquí
00:25:35
en configuraciones de arranque,
00:25:36
en run configuratios,
00:25:38
pero ahora no nos vamos a meter en eso.
00:25:40
que yo quiero ejecutar este
00:25:41
pues aquí botón derecho run este
00:25:43
ya está, que quiero ejecutar este
00:25:45
pues aquí botón derecho run este y ya está
00:25:47
y ese se convierte automáticamente en el punto de arranque
00:25:49
pues venga
00:25:52
vamos a ejecutar el 2
00:25:53
vale, pues este apagado
00:25:55
76, bueno pues
00:25:59
esta dinámica de crear clases
00:26:10
con sus propiedades
00:26:12
y acceder a ellas
00:26:14
con el operador
00:26:16
punto, para darles valor
00:26:18
o para recuperarlo, para mostrarlo,
00:26:20
está cogida.
00:26:24
Ya sabemos cómo crear una clase,
00:26:26
cómo darle, asignarle propiedades
00:26:29
y luego cómo instanciar objetos de esa clase
00:26:32
y dar valor a sus propiedades.
00:26:35
Y con esas propiedades yo luego opero
00:26:38
como cualquier otra variable.
00:26:40
Opero y hago lo que me dé la gana,
00:26:42
como cualquier otra.
00:26:43
O lo meto en un array, lo que quiera.
00:26:45
Los métodos hemos dicho que son
00:26:55
trozos de código
00:26:56
que un objeto alumno puede ejecutar
00:26:58
entonces esos trozos de código
00:27:01
se supone que son
00:27:03
cosas que a ti te interesa
00:27:04
que a ti te interesa hacer con los alumnos
00:27:07
o sea, tú has estudiado
00:27:09
bien tu aplicación, te has entrevistado
00:27:11
con el cliente, has mirado mil cosas
00:27:13
y ya tienes claro que es lo que
00:27:14
tu aplicación necesita hacer
00:27:17
pues ponerle a un alumno
00:27:18
si ha pagado la matrícula o no la ha pagado
00:27:21
cambiarle el nombre
00:27:23
porque se ha cambiado de nombre
00:27:24
pues decirme si es mayor de edad o no
00:27:26
hay cosas que a lo mejor tu aplicación
00:27:29
va a querer hacer con los alumnos
00:27:31
por ejemplo
00:27:33
una muy fácil, pues a lo mejor
00:27:34
el tipo de secretaría
00:27:39
que me ha pedido la aplicación me ha dicho
00:27:42
oye perdona, yo necesito saber
00:27:43
de un alumno si es mayor de edad o no
00:27:45
porque en función de eso
00:27:47
hago unas cosas o hago otras, entonces tu aplicación
00:27:48
tiene que tener una funcionalidad
00:27:51
para decirme si un alumno
00:27:54
es mayor de edad o no, la tiene que tener porque
00:27:55
yo voy a invocar a esa funcionalidad
00:27:57
para obtener respuesta.
00:27:59
Vale, pues entonces,
00:28:02
automáticamente, nosotros ya como programadores decimos
00:28:03
vale, pues para cada alumno
00:28:05
me va a interesar saber
00:28:07
si es mayor de edad.
00:28:09
Requisito. Pues entonces,
00:28:11
en la clase alumno, me voy
00:28:13
a, porque esta operativa
00:28:15
tiene que ver con alumnos, porque
00:28:17
si el alumno es mayor de edad,
00:28:19
pues en la clase alumno, que es su sitio,
00:28:22
me voy a meter un trozo de código
00:28:23
que me diga
00:28:27
si un alumno es mayor de edad o no
00:28:28
me lo voy a meter en la clase alumno
00:28:30
porque repito, esta operativa, esta funcionalidad
00:28:32
está relacionada con alumnos
00:28:34
que me dice el de secretaría
00:28:36
oye, también necesito saber si una matrícula está pagada o no
00:28:38
por ejemplo
00:28:41
o si el precio supera
00:28:41
el precio establecido
00:28:44
pues de, uy, esto que me estás pidiendo tiene que ver con matrículas
00:28:45
pues este trozo de código te lo voy a meter en matrícula
00:28:48
pero estamos con lo de ser mayor de edad
00:28:51
Vale, pues entonces, ahora ya vamos a programar un código que me diga si un alumno es mayor de edad o no.
00:28:53
Un método.
00:29:04
¿Dónde lo meto eso?
00:29:06
En alumno, porque yo he decidido que es ahí su sitio, porque tiene que ver con alumnos.
00:29:07
Pues ahora vamos a hacer método que devuelve true o false en función de si el alumno es mayor de edad o no.
00:29:12
vale
00:29:27
pues entonces
00:29:43
esto de aquí es un poco lo más complicado
00:29:45
de entender y lo más complicado de explicar
00:29:48
ahora haciendo
00:29:50
este método, primero hay que
00:29:52
darle un nombre, el método
00:29:54
es el trozo de código que voy a hacer aquí
00:29:56
un trocito de código relacionado con esto
00:29:57
a ese trozo de código vamos a darle
00:29:59
un nombre, para luego tenerlo identificado
00:30:02
y poder llamarlo desde otros sitios
00:30:04
pues por ejemplo, un nombre explicativo
00:30:05
es
00:30:08
mayor
00:30:10
de edad. Así.
00:30:10
Por ejemplo.
00:30:14
Al método
00:30:16
le doy, elijo
00:30:18
un nombrecito, por ahora estoy eligiendo el nombre.
00:30:20
Elijo un nombre lo más
00:30:22
explicativo posible, un nombre lo más
00:30:24
explicativo
00:30:26
y que empiece por minúscula
00:30:26
también como convenio.
00:30:30
Igual que las propiedades, por minúscula
00:30:32
como convenio. No es obligatorio,
00:30:34
no lo es, pero luego queda
00:30:36
más claro el código, hacedme caso.
00:30:38
vale
00:30:40
entonces a este método que me faltan
00:30:41
a mí ahora me faltan mil cosas todavía
00:30:43
por ponerle esto ahora mismo
00:30:46
he elegido el nombre
00:30:48
lo único que he hecho es elegir el nombre, no he hecho nada más
00:30:50
me faltan todavía mil cosas
00:30:52
por hacer, lo único que he hecho
00:30:54
es elegir el nombre del método
00:30:56
vale
00:30:57
a este método ¿quién lo va a llamar?
00:30:58
pues a los métodos de una clase
00:31:03
los llaman los objetos
00:31:05
de la clase
00:31:08
el método se declara aquí
00:31:09
pero luego el que lo llama
00:31:12
el que lo invoca, el que lo ejecuta
00:31:14
es un objeto de la clase
00:31:16
es decir, este método
00:31:17
cuando ya esté hecho, que está sin hacer
00:31:20
¿quién lo va a ejecutar?
00:31:22
no se va a ejecutar aquí, aquí está simplemente
00:31:24
escrito para ver lo que hace
00:31:26
pero ahí no se ejecuta
00:31:27
¿quién va a ejecutar este método? pues yo en mi main
00:31:29
¿vale?
00:31:32
me voy aquí a este main
00:31:34
por ejemplo, al main2 de la matrícula
00:31:35
Y vamos a ver, pues por ejemplo, quiero ver si el alumno, este que me acabo de crear, el único, es mayor de edad.
00:31:40
Pues entonces, este alumno, el objeto alumno, este, es el que llamará al método, este.
00:31:52
Luego los métodos no se llaman así por las buenas de la nada, los llama siempre un objeto perteneciente a la clase donde está el método.
00:32:02
Entonces, ¿cómo lo va a llamar?
00:32:14
alumno.nombreDelMétodo
00:32:18
y unos paréntesis que le explicaremos por qué.
00:32:23
Luego, igual que a las propiedades las llama
00:32:31
.nombreDeLaPropiedad para dar un valor,
00:32:33
al método lo va a llamar .también
00:32:37
nombreDelMétodo.
00:32:40
Pero es fundamental entender,
00:32:42
y aquí está la clave de todo,
00:32:44
que a ese método que yo voy a hacer,
00:32:45
que está sin hacer,
00:32:47
el que le llamas siempre es un objeto.
00:32:49
No aparece de la nada.
00:32:51
No es que llamemos a es mayor de edad y ya está.
00:32:53
No, lo llama siempre un objeto.
00:32:55
Y entonces, este método va a trabajar con este objeto.
00:32:59
Con este, no con otro, con este.
00:33:03
Entonces, ahora, cuando yo programe este objeto,
00:33:06
aquí, perdón, este método,
00:33:09
es mayor de edad.
00:33:11
Ahora ya voy a empezar a programarlo.
00:33:12
vale, pues en estas interrogaciones
00:33:14
que yo he puesto aquí delante
00:33:16
¿qué es lo que pongo?
00:33:17
si ese método
00:33:21
me va a devolver
00:33:22
algo como valor de vuelta
00:33:24
o no
00:33:26
puede que no me devuelva nada, puede que sí
00:33:27
todo esto lo iremos entendiendo
00:33:30
en este caso, este método
00:33:31
¿qué me va a devolver?
00:33:33
me tiene que devolver o true o false
00:33:36
con lo cual lo que me va a devolver es un boolean
00:33:38
pues ¿qué pongo yo aquí?
00:33:41
el tipo de dato del valor de vuelta
00:33:42
vale, pues este método
00:33:46
me va a devolver
00:33:48
un boolean
00:33:50
vale, luego el método
00:33:52
luego el nombre
00:33:54
y ahora, ¿qué pongo después?
00:33:55
unos paréntesis
00:33:58
unos paréntesis
00:33:59
y una llave
00:34:04
que se cierra y se abre
00:34:06
entonces
00:34:08
dentro de estas llaves va el código del método
00:34:17
estos paréntesis
00:34:20
ahora mismo los dejo vacíos
00:34:23
ya los usaremos
00:34:24
en el siguiente método
00:34:26
ahora mismo los dejo vacíos
00:34:28
vale, pues ahora pienso
00:34:30
elegido ya, el valor que va a devolver
00:34:32
un true o un false
00:34:34
el nombre del método
00:34:35
paréntesis vacíos, pero hay que ponerlos obligatorios
00:34:37
paréntesis vacíos
00:34:40
y ahora, a este método, ¿quién lo va a llamar?
00:34:41
lo va a llamar este
00:34:44
¿veis?
00:34:46
el objeto alumno va a llamar
00:34:47
con el punto al método es mayor de edad, poniendo su paréntesis también.
00:34:49
Bueno, pues ahora me pongo a hacer el código.
00:34:54
¿Qué hace este código?
00:34:56
Pues tendrá que ir a dónde?
00:34:58
A la edad del alumno.
00:35:00
La edad tiene acceso directo porque está aquí arriba.
00:35:03
Es decir, todo el código que yo haga aquí,
00:35:07
el código que hagamos aquí,
00:35:10
tiene acceso directamente, sin necesidad de redeclararlo de nuevo ni de nada,
00:35:13
a todas las propiedades
00:35:26
del objeto que lo llama
00:35:38
fijaos, a este objeto
00:35:39
perdón, a este método
00:35:43
del objeto
00:35:45
que lo llama
00:35:47
a este método, repito
00:35:48
lo está llamando este
00:35:55
este lo está llamando
00:35:57
luego cuando yo aquí ponga
00:35:59
por ejemplo esto
00:36:02
if edad
00:36:04
mayor que 18
00:36:06
return true
00:36:08
else
00:36:11
retun false, que este código ya
00:36:12
lo sabemos hacer.
00:36:15
Del retun ahora, un momento, olvidaos.
00:36:19
Vale, cuando yo ponga aquí edad,
00:36:21
estoy poniendo edad directamente
00:36:24
sin declarar ni nada. ¿Por qué?
00:36:25
Porque edad está aquí arriba.
00:36:27
Es la edad del alumno.
00:36:29
Entonces, este método tiene acceso
00:36:31
directamente a las propiedades
00:36:33
del alumno que lo está llamando.
00:36:35
Que están declaradas aquí arriba.
00:36:38
Que están declaradas
00:36:40
aquí arriba.
00:36:41
Entonces, yo con esto estoy diciendo,
00:36:43
si la edad del alumno que te llama,
00:36:45
luego aquí el que está llamando es alumno,
00:36:50
luego es mayor de edad,
00:36:54
en esta llamada estará trabajando con la edad de este.
00:36:56
Si la edad del alumno que te llama es mayor que 18,
00:37:01
haz esto.
00:37:04
Ahora vemos lo que es haz esto.
00:37:05
Si no, haz esto otro.
00:37:06
Sí, porque si no es mayor de edad,
00:37:15
tienes que devolver false.
00:37:17
Pero vamos a quitar por ahora el boolean para no liarnos.
00:37:18
Vamos a hacer que el método
00:37:21
muestre por pantalla si es mayor de edad o no.
00:37:22
Que muestre.
00:37:25
Para ir más despacio.
00:37:29
Por pantalla.
00:37:31
Si el alumno es mayor de edad o no.
00:37:36
Pues entonces voy a quitar el retun.
00:37:39
Y voy a poner
00:37:41
es mayor de edad.
00:37:42
Olvidaos del retun
00:37:57
que he puesto hasta ahora.
00:37:58
Lo incorporamos después.
00:37:59
Vale, ahora este método es más fácil de entender.
00:38:01
este método, si la edad
00:38:04
que no tengo que declararla, es que tiene acceso
00:38:06
directo, está aquí arriba, ¿y de quién es
00:38:08
esa edad? ¿Qué edad va a tener en cuenta?
00:38:10
La del que lo llame.
00:38:12
La del que lo llame, si lo llama alumno, será la edad de este.
00:38:14
Si lo llama otro, será la edad de otro.
00:38:16
Pues si
00:38:19
la edad es mayor
00:38:19
o igual que 18, el método
00:38:22
hará esto, mostrar esto por consola, si no hará
00:38:24
esto otro. Entonces,
00:38:26
como este método
00:38:28
no me devuelve a mí nada,
00:38:29
no me entrega nada, se limita a mostrar por consola
00:38:32
en ese caso
00:38:34
se pone aquí void
00:38:36
porque el método no me está
00:38:37
entregando nada de vuelta, se limita
00:38:54
a mostrar por consola
00:38:56
vale, pero bueno
00:38:57
con esto ahora volvemos cuando veamos el retune
00:39:00
y eso lo entenderemos mejor
00:39:02
no me devuelve ningún
00:39:04
valor, que podría
00:39:09
devolverlo, vale
00:39:11
vale
00:39:13
pues entonces
00:39:15
¿está entendido esto que es lo más
00:39:16
importante? yo aquí declaro
00:39:20
un método al cual le pongo
00:39:22
un nombre, paréntesis
00:39:24
obligatorios, entre llaves
00:39:25
lo que hay que hacer
00:39:28
si el método no me
00:39:29
entrega nada de vuelta, que ya entenderemos
00:39:31
después que significa entregarte algo de vuelta
00:39:33
si el método no me entrega nada de vuelta
00:39:35
voy, ya está
00:39:38
y ahora, este método
00:39:39
va a hacer cosas dentro
00:39:41
lo que a mí me dé la gana
00:39:43
y va a acceder
00:39:44
si quiere y lo necesita
00:39:47
si necesita va a acceder a esto de arriba
00:39:48
El BOI significa
00:39:51
este método no le entrega
00:39:59
al programa que lo llama
00:40:02
ningún valor
00:40:03
solamente muestra porque yo aquí he puesto
00:40:04
muestra, pero podría ni mostrar siquiera
00:40:07
No, tú aquí puedes
00:40:09
hacer lo que quieras
00:40:13
Sí, pues yo aquí puedo
00:40:14
Hacerle un escáner, puedo hacer lo que me dé la gana
00:40:17
Lo único es que al tener void, este método
00:40:18
No me entrega nada
00:40:20
De vuelta
00:40:22
Vale, es decir, pero bueno, eso ahora
00:40:23
Lo entenderemos mejor, cuando ahora mismo, olvidaos de eso
00:40:40
¿Vale? Ahora lo que me importa
00:40:42
Es que entendáis que
00:40:44
lo que yo pongo aquí
00:40:45
accede directamente
00:40:47
a estas variables
00:40:48
y ahora ya
00:40:49
dependiendo
00:40:50
de qué objeto lo llame
00:40:51
las variables que usa
00:40:52
son unas u otras
00:40:56
vamos a crear otro alumno
00:40:57
por ejemplo
00:41:00
este alumno de aquí
00:41:00
¿qué edad le hemos puesto?
00:41:01
uy, este va a ser mayor de edad
00:41:03
pero yo no me entiendo 87
00:41:04
si yo ejecuto este main
00:41:05
si yo ejecuto este main
00:41:07
el alumno es mayor de edad
00:41:12
porque tenía 700 y pico años
00:41:14
87, vamos a hacernos otro alumno, otro alumno distinto, alumno 2, igual a new alumno, vale, ahora a este alumno 2 le vamos a poner una edad igual a 12, por ejemplo,
00:41:17
Ahora yo hago alumno2.edad
00:41:37
Perdón, alumno2.llamoalmetodo
00:41:43
¿Qué me va a mostrar esto?
00:41:48
Pues que va a hacer
00:41:56
Es mayor de edad, se va a ejecutar
00:41:56
Pero se va a ejecutar con los datos de alumno2
00:41:59
Con los datos de alumno2 porque es el que lo llama
00:42:01
Es el que lo llama
00:42:04
Y alumno2 tiene 12
00:42:05
Pues entonces se va a ejecutar, es mayor de edad
00:42:07
Pero se va a ejecutar, es mayor de edad
00:42:10
y ahora edad será la edad del objeto alumno 2.
00:42:12
Luego el método hace el código que hay aquí,
00:42:20
pero lo que cambia es el valor de las variables.
00:42:24
El valor de las variables usadas que están declaradas aquí arriba,
00:42:26
el valor va a ser el del objeto, que lo llama alumno,
00:42:30
pues las variables que usa es mayor de edad serán las que tiene alumno,
00:42:34
que lo llama alumno 2,
00:42:38
pues las variables que usa es las de alumno 2
00:42:39
entonces si yo ejecuto esto
00:42:42
el primero me dirá es mayor de edad
00:42:45
y el segundo me va a decir no es mayor de edad
00:42:47
esta es la primera ejecución
00:42:51
era mayor de edad
00:42:53
porque el alumno este era mayor de edad
00:42:59
esta es la segunda ejecución
00:43:02
esta es esta de abajo
00:43:05
alumno 2 tenía 12
00:43:06
luego es mayor de edad toma esta propiedad
00:43:08
bueno, pues esto entendido seguro
00:43:12
yo aquí declaro lo que va a hacer
00:43:23
pero aquí no se ejecuta nada todavía
00:43:25
aquí no se ejecuta nada
00:43:27
la ejecución se hace ahora ya
00:43:28
cuando existe un objeto
00:43:31
cuando ya existe, porque es un objeto
00:43:32
el que tiene que llamar al método
00:43:35
el método no se lanza así por las buenas, el solo
00:43:37
no, al método
00:43:39
lo llama un objeto de esta clase
00:43:41
y no de otra, de esta
00:43:43
de la clase alumna, no le puede llamar
00:43:45
un objeto de otra clase, le llama un objeto de esta
00:43:47
Y un objeto de la clase alumno es el que lo llama y entonces ahora ya sí se ejecuta, pero se ejecuta poniendo aquí sus propios datos.
00:43:49
En esta ejecución es mayor de edad, vuelca los datos de alumno para ejecutarse y en esta ejecución es mayor de edad, vuelca los datos de alumno 2 para ejecutarse.
00:44:00
¿Vale? Pues venga, vamos a parar.
00:44:11
- 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:
- 1
- Fecha:
- 3 de diciembre de 2025 - 12:22
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 44′ 16″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 251.32 MBytes