Saltar navegación

20250117 HerenciaEjemplos_1 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 18 de enero de 2025 por Raquel G.

5 visualizaciones

Descargar la transcripción

Bueno, pues venga, entonces, esta ya no tenemos ni que pensar porque nos dice la entidad que va a usar esta aplicación y tendrá un empleado, porque va a haber empleados en esa aplicación. 00:00:00
Lo que pasa es que a algunos de los empleados se les va a tratar de forma especial en cuanto a las funcionalidades que se pueden hacer con ellos y esos serán los gerentes. 00:00:12
entonces podría haber una clase empleado y otra gerente 00:00:22
por libre, pero como 00:00:25
identificamos cuando analizamos el problema 00:00:27
identificamos que gerente también 00:00:29
es un empleado y por tanto 00:00:30
todo lo de empleado le interesa 00:00:33
pues identificamos que hay una relación de 00:00:34
vale, y luego ya seguimos 00:00:36
identificando cosas, pero vamos a empezar 00:00:39
en cuanto a departamento 00:00:40
empresa, empleado temporal, bla bla bla 00:00:42
empezamos con empleado y gerente para ver lo de los 00:00:44
constructores, pues venga 00:00:46
esta clase ya nos la dan hecha, atributos 00:00:48
o propiedades, nombre, salario 00:00:50
y fecha, pues venga 00:00:52
nombre 00:00:54
salario 00:01:17
y la fecha 00:01:20
de contratación 00:01:24
y ya está, date, pues tenemos 00:01:25
que pronunciarnos sobre qué clase 00:01:34
fecha nos interesa, si esta 00:01:36
o la time 00:01:38
o la clase local date 00:01:40
de java time, bueno, si es para 00:01:42
cosas básicas con fechas 00:01:44
pues esta misma y ya está 00:01:45
entonces los 00:01:47
empleados, le podemos poner lo de siempre 00:01:49
un constructor 00:01:52
Sí, porque para hacer 00:01:52
las cosas básicas de meter fechas 00:01:59
comparadas unas con otras, va a sobrar 00:02:01
Vale, pues va a haber empleados 00:02:03
y de los empleados nos interesa esto 00:02:25
Por ahora no 00:02:27
identificamos ninguna funcionalidad 00:02:30
en particular 00:02:32
qué hacer con los empleados 00:02:33
según estudiemos la aplicación y la veamos 00:02:35
pues a lo mejor interesa meter ahí alguna funcionalidad 00:02:37
para hacer en concreto con los empleados 00:02:39
pero bueno, por ahora hemos identificado 00:02:41
que hay empleados 00:02:43
con funcionalidades específicas 00:02:45
para ellos y con datos específicos 00:02:47
que también son 00:02:49
gerentes, pero comparten 00:02:50
los datos 00:02:53
de nombre, salida y fecha, con lo cual 00:02:53
hacemos gerente y al 00:02:57
identificar eso, la hacemos heredera y ya está 00:02:59
vale, pues 00:03:01
bueno 00:03:18
en estas aplicaciones que son cortas 00:03:21
es difícil 00:03:23
que al final nos quede un diseño extraño 00:03:24
pero a veces cuando empezamos 00:03:27
a tener un montón de clases de cosas 00:03:29
y tratamos de reformular el código 00:03:31
el diseño para que quede mejor 00:03:34
pues nos quedan cosas raras 00:03:36
entonces como verifica uno que no le ha quedado una cosa rara 00:03:37
en su diseño 00:03:39
pues cuando tú ves eso tienes que poder decir 00:03:40
oye un gerente es un empleado 00:03:42
si esa frase tiene sentido 00:03:46
Entonces como esa frase tiene sentido 00:03:48
Que un gerente sea un empleado 00:03:50
Esto de aquí tiene sentido 00:03:51
Vale, gerente añade algo 00:03:53
Pues sí, hemos dicho que añadía 00:03:55
Un bonus 00:03:58
Que es 00:04:01
Un extra en el sueldo 00:04:02
Vale, entonces como 00:04:05
Empleado 00:04:08
Tiene ahora ya subclases 00:04:09
Tiene hijas, tiene herederas 00:04:12
Tiene lo que sea 00:04:13
¿Eh? 00:04:15
y gerente tiene un padre. 00:04:18
Vamos a ponerle a este protected, 00:04:21
porque le va a facilitar a lo mejor la vida al gerente, 00:04:23
el poder a su código, a sus métodos, 00:04:25
poder acceder directamente a sus propiedades. 00:04:29
¿Vale? 00:04:33
Entonces, si una clase va a tener subclases, 00:04:33
pasar del private al protected, 00:04:38
le arregla un poco la vida a las subclases, 00:04:40
porque ahora ya la subclase, 00:04:44
si lo necesita en algún método suyo, 00:04:45
Puede poner directamente nombre 00:04:47
Y no tiene que tirar todo el rato de getNombre 00:04:49
Que es más largo y más confuso 00:04:51
Bueno 00:04:52
Vale, a ver 00:04:54
Yo puede, dime 00:04:57
A ver, sí 00:04:59
Pero es que yo no he puesto ningún constructor 00:05:06
Todavía 00:05:08
Claro 00:05:09
No adelantemos 00:05:13
Los acontecimientos, en cualquier caso 00:05:18
Tal y como he hecho yo empleado 00:05:20
O sea 00:05:21
Tú no has hecho un constructor 00:05:23
Sin parámetros aquí, ¿verdad? 00:05:26
Claro 00:05:30
Entonces por eso te sale esa cosa roja 00:05:31
¿Vale? 00:05:32
Por ahora sí 00:05:35
Bueno 00:05:36
¿Deberías borrar qué? 00:05:38
No, no, no 00:05:42
El constructor que has hecho con cosas 00:05:43
Va a ser utilísimo 00:05:44
Lo que yo digo es que como normalmente hacemos 00:05:45
Para aportarle flexibilidad a la aplicación 00:05:48
uno con cosas y otro sin cosas 00:05:50
pues que hagas los dos 00:05:52
por ahora 00:05:53
vale, a ver, podría ocurrir 00:05:54
que yo en mi diseño 00:05:58
en lo que sea, en mi paquete de clases 00:06:00
que otros van a reutilizar, por lo que sea 00:06:01
yo no quiera 00:06:04
que alguien herede de mis clases 00:06:06
bueno, pues lo puedo 00:06:08
prohibir poniendo un modificador 00:06:10
aquí, que es este 00:06:12
vale 00:06:16
este de aquí 00:06:18
es decir 00:06:21
si antes de la declaración de una clase 00:06:23
uno pone final 00:06:26
¿vale? 00:06:28
que es el único modificador extra que hemos incorporado 00:06:30
porque hasta ahora siempre delante de class 00:06:33
solamente teníamos opciones 00:06:34
o no poner nada, poner public 00:06:35
que ya sabemos la diferencia que hay 00:06:38
el final prohíbe que alguien 00:06:40
te herede 00:06:42
la convierte en clase final de la jerarquía 00:06:43
¿entonces gerente ya no funciona? 00:06:46
se ha puesto rojita 00:06:49
¿vale? 00:06:51
Entonces, lo vamos a incluir aquí, el modificador este final prohibiría crear subclases, heredar, lo que por traducción natural se llama extender la clase, vale, eso, como lo queráis llamar, prohibiría heredar, vale. 00:06:53
bueno, pues ya tenemos incorporado esto de final 00:07:36
vale, entonces final 00:07:38
ya lo hemos usado 00:07:40
a veces en 00:07:42
pero lo hemos usado ahora mismo 00:07:44
solamente lo hemos mencionado 00:07:46
a veces para ponerlo en una 00:07:48
variable 00:07:50
vale, lo hemos dejado caer en algún momento 00:07:51
vale 00:07:54
en algún momento, por ejemplo, aquí 00:07:56
en este primer ejemplo 00:07:58
herencia que hemos hecho aquí 00:08:02
vale, pues 00:08:03
el modificador final, entonces que ya 00:08:09
vamos a empezar a 00:08:12
familiarizarnos con él 00:08:13
el modificador final se puede poner 00:08:16
delante de una propiedad 00:08:18
delante 00:08:20
de un método y delante 00:08:22
de una clase 00:08:24
delante de una propiedad, ya lo hemos mencionado 00:08:24
alguna vez 00:08:28
y cuando uno lo pone delante de una propiedad, ¿qué significa? 00:08:29
significa 00:08:33
que esa propiedad 00:08:34
desde el momento en el que se le da su primer valor 00:08:35
aquí en la inicialización ya se le puede cambiar 00:08:38
es como poner constante 00:08:41
la constante de toda la vida en los lenguajes de programación 00:08:42
antiguos, los lenguajes de programación más antiguos 00:08:44
decían, tenemos variables 00:08:47
que son identificadores 00:08:48
que se corresponden a un valor que tú puedes cambiar 00:08:50
cuando te da la gana, la variable de toda la vida 00:08:53
o constantes 00:08:54
que es un identificador también que recibe 00:08:56
un valor, pero eso no se va a cambiar 00:08:59
en la vida, bueno pues 00:09:00
la forma de incorporar las constantes en Java 00:09:02
es hacer variables normales y corrientes 00:09:04
y poner un final delante. 00:09:07
Una vez usas el constructor 00:09:09
y la inicializas, ya lo puedes... 00:09:11
Efectivamente. 00:09:13
Vale. Entonces, 00:09:15
esta variable descuento 00:09:17
ya nunca jamás se le podría cambiar el valor. 00:09:18
Pero no hace falta ni inicializarla, ¿no? 00:09:21
Porque imagino que ya cuando inicialices el objeto... 00:09:22
Si es estática, sí. 00:09:24
Digo, si no es estática. 00:09:28
Si no es estática, creo que también tienes que 00:09:30
inicializarla. Creo que te obliga 00:09:32
en el momento en que la declaras. 00:09:34
¿Vale? O sea, una variable constante 00:09:36
tú, en el momento en el que aparece, se supone 00:09:39
que tienes que tener pensado qué valor es el que quieres que tenga. 00:09:41
Claro. Entonces, 00:09:44
le das ahí ese valor y ya nadie lo va a tocar. 00:09:45
¿Vale? 00:09:48
Entonces, 00:09:49
hemos usado ya 00:09:50
variables constantes 00:09:53
que no hemos creado 00:09:55
nosotros. 00:09:57
Pues, por ejemplo, cuando 00:09:59
Eso, cuando 00:10:01
Ah, bueno, es que aquí no me dejaron 00:10:06
Hacerlo porque no estoy dentro de un método 00:10:08
¿Vale? 00:10:10
Que fue cuando mencionamos lo de final 00:10:13
Fue cuando vimos estas constantes 00:10:14
Vale 00:10:16
Es decir 00:10:18
La clase math 00:10:22
Como hace operaciones con pi 00:10:23
Pues te crea una variable 00:10:25
Pi por aquí, te crea una variable 00:10:27
La que le da un valor 00:10:30
Y le pone el final 00:10:30
Porque a la variable pi no nos interesa cambiar el valor nunca 00:10:32
Va a tener siempre ese 00:10:36
No, no se pone 00:10:37
Es el concepto de constante de toda la vida 00:10:39
Pues aquí es poniendo un final delante 00:10:41
Que suelen estar asociados a variables 00:10:43
Estáticas, claro, porque 00:10:45
Es donde tienen sentido 00:10:47
Una constante, un valor que yo 00:10:49
Puedo usar desde cualquier sitio 00:10:51
Con un valor fijo porque me viene bien 00:10:53
Para hacer operaciones 00:10:55
Pues los finals suelen estar asociados a 00:10:56
Constantes estáticas, da igual el orden que pongas 00:10:59
Puedes poner static, final, final, static 00:11:01
Vale, bueno, pues final es solamente eso 00:11:03
Y cuando se pone en una clase 00:11:05
Cuando se pone en una clase 00:11:09
Tiene otro sentido 00:11:11
Cuando se pone en una clase 00:11:12
El sentido que tiene, tiene que ver con la herencia 00:11:14
Y es, esta clase no puede tener subclases 00:11:16
Ya se queda así 00:11:19
Nadie la puede extender para hacer una modificación de ella 00:11:20
En nuestro caso, si queremos extenderla 00:11:23
O heredarla con gerente 00:11:27
Este final no lo pondríamos 00:11:28
¿Tenemos un método? 00:11:30
¿Tenemos un método? 00:11:31
vale, quieres que te lo diga ya 00:11:33
vale, va a esperar a que llegue a un ejemplo 00:11:35
en un método significa que no lo puedes sobrescribir 00:11:37
que no se puede sobrescribir 00:11:39
ah vale, aunque en una subclase crees otro método 00:11:41
con el mismo nombre, claro, por ejemplo 00:11:43
aquí en cliente, en el ejemplo herencia 00:11:45
este 00:11:47
método, en ejemplo herencia que habíamos 00:11:49
hecho ayer, teníamos nuestro 00:11:51
mostrar datos que sobrescribíamos 00:11:53
¿verdad? luego porque 00:11:56
mostrar datos era diferente 00:11:57
entonces 00:11:58
yo puedo ponerle un final al método 00:11:59
pero si le pongo un final 00:12:03
al método 00:12:05
ya no me deja 00:12:06
sobrescribirlo, me dice 00:12:09
no puedes sobrescribir un método final 00:12:11
¿vale? eso es lo que significa, entonces 00:12:13
final es prohibir la herencia 00:12:14
la prohíbes, oye 00:12:17
si la pones en la clase, prohíbo 00:12:18
una subclase, si lo pones 00:12:21
en un método, prohíbo 00:12:23
que sobrescribas este método en las 00:12:25
subclases, ¿vale? 00:12:27
eso significa final en un método 00:12:28
y ya no se puede poner en más sitios 00:12:33
en clases 00:12:39
propiedades y métodos 00:12:41
todo depende 00:12:42
o sea, todo son herramientas 00:12:47
posibilidades si tú las usas para que 00:12:49
tus diseños tengan el mayor sentido posible 00:12:51
y hay veces que sí que 00:12:53
tiene sentido proteger de la herencia 00:12:55
porque si algún desarrollador hereda de eso 00:12:56
a lo mejor va a generar 00:12:59
efectos secundarios en la aplicación 00:13:01
que no son deseables, entonces la forma de 00:13:03
protegerlo es así 00:13:05
vale 00:13:06
bueno, pues entonces ahora ya 00:13:07
nos dice aquí, gerente tiene el bono 00:13:11
y dice, vamos a utilizar 00:13:13
constructores 00:13:15
para empleado 00:13:17
vale, pues 00:13:19
nosotros 00:13:20
como los constructores 00:13:23
no se heredan 00:13:25
como los constructores no se heredan 00:13:26
pues haríamos el constructor 00:13:28
como lo hemos hecho 00:13:30
toda la vida, pues venga 00:13:32
public, por ejemplo 00:13:34
si es con parámetro 00:13:36
public empleado y tendríamos que poner todos 00:13:37
tendríamos que poner 00:13:40
todos los propiedades que tiene, que tiene nombre 00:13:42
salario, fecha 00:13:44
salario 00:13:46
y el bonus 00:13:56
vale, y ahora 00:14:04
eh, uy public 00:14:17
empleado, que hago aquí, public gerente 00:14:23
estoy haciendo el constructor de gerente 00:14:24
y aquí pues 00:14:27
iríamos una por una 00:14:29
Pues dis.nombre 00:14:30
Igual a nombre 00:14:33
Dis.salario 00:14:34
Pues 00:14:40
Porque 00:14:44
Aparte porque lo veamos bien 00:14:46
Porque el 00:14:49
El chivato del eclipse 00:14:51
No sé si te ofrece aquí 00:14:52
Los 00:14:55
Heredados 00:14:56
Entonces si no te los ofrece 00:14:58
Pues no ganas nada 00:15:00
Aunque a lo mejor cambiándolo a algo aquí te lo ofrecería también 00:15:03
Pero bueno, da igual 00:15:07
Dis fecha 00:15:08
Y dis punto bonus igual a bonus 00:15:11
Vale, aquí nos ha permitido acceder a la propiedad 00:15:27
Nombre, salario, fecha, bonus 00:15:31
A estas tres 00:15:33
Nos ha permitido acceder a nombre, salario, fecha 00:15:34
porque las hemos puesto 00:15:37
protected aquí arriba 00:15:39
vale, si no las hubiéramos 00:15:40
puesto protected no podríamos hacer 00:15:43
this.nombre, tendríamos que 00:15:45
haber hecho set nombre 00:15:47
nombre, set salario 00:15:49
entonces como lo hemos puesto protected 00:15:51
y claro, gracias a haberlo 00:15:52
puesto protected pues nos queda 00:15:55
porque me aparece aquí este rojo todo el rato 00:15:58
ah, porque el import 00:16:01
de date 00:16:03
entonces mejor poner el protected 00:16:04
porque el aspecto que tiene el constructor 00:16:12
es más parecido a lo que estamos acostumbrados 00:16:13
vale, pero esto es un rollo 00:16:16
patatero, que está muy bien 00:16:18
o sea, esto está bien hecho 00:16:20
pero es un rollo, porque imaginaos que tengo 00:16:21
una jerarquía, ya no sólo 00:16:24
de una 00:16:26
superclase y una subclase, sino que además 00:16:28
tengo otra subclase de esa 00:16:30
subclase, y otra, y otra 00:16:31
entonces tengo un montón de propiedades 00:16:33
arriba, un montón 00:16:35
que he ido heredando y heredando 00:16:36
y este listado se me puede quedar 00:16:39
interminable, entonces es un rollo 00:16:41
vale, eso 00:16:43
pues de cara simplemente a facilitarnos 00:16:44
la escritura, de cara a facilitarnos la escritura 00:16:47
resulta 00:16:49
que yo desde una clase heredada 00:16:51
desde una subclase o clase 00:16:53
heredada 00:16:57
puedo acceder 00:16:58
a la 00:17:01
llamándolo así, a la parte 00:17:03
de instancia 00:17:05
relacionada con lo superclase, lo voy a reducir 00:17:06
aquí, con 00:17:09
este término, con el término 00:17:18
super, este de aquí 00:17:21
que su sentido es parecido al de dis 00:17:22
dis que significa, el objeto en el 00:17:24
que estoy 00:17:27
super significa el objeto padre 00:17:27
no, porque no hay un objeto padre, solo hay 00:17:31
un objeto, que es el que he instanciado 00:17:33
pero super significa la parte tuya 00:17:34
objeto, que está 00:17:37
declarada en la superclase 00:17:39
eso es lo que significa 00:17:40
es decir, porque a veces nos guiamos un poco 00:17:42
y creemos que si tenemos una clase 00:17:45
una superclase y una subclase 00:17:47
cuando instanciamos 00:17:49
el objeto de la subclase es como si tuviéramos 00:17:52
dos objetos, el de la superclase 00:17:54
y el no, no, no, tenemos un único 00:17:56
objeto, el objeto de la subclase 00:17:58
con todas las propiedades 00:18:00
lo que pasa es que están declaradas en dos partes distintas 00:18:01
pero es un único objeto con todas las propiedades 00:18:04
vale, pues super significa 00:18:05
la parte de ese objeto 00:18:08
pero que está declarada en la superclase 00:18:11
entonces 00:18:14
todo esto de aquí 00:18:16
nos lo podríamos haber ahorrado 00:18:18
haciendo una llamada super de esta manera 00:18:20
como super es 00:18:23
la superclase 00:18:25
super es la llamada al método 00:18:26
constructor de la superclase 00:18:29
entonces si yo hago esto 00:18:31
nombre 00:18:33
salario 00:18:35
y fecha 00:18:38
contratación 00:18:41
¿Qué estamos haciendo? 00:18:42
Estamos llamando al constructor 00:18:45
De la subclase 00:18:47
De la superclase, perdón 00:18:48
No, porque el constructor 00:18:51
De la superclase no tiene el bonus 00:18:59
El bonus ya sí que lo tengo que hacer por libre 00:19:01
Vale, entonces 00:19:02
Esto nos facilita la escritura 00:19:12
Porque decimos, vamos a ver 00:19:15
Gerente, de todo lo que yo le paso 00:19:17
Que le paso mil cosas 00:19:20
las tres primeras 00:19:21
ya hay un constructor 00:19:24
en la superclase para inicializar las propiedades 00:19:26
pues voy a llamar 00:19:29
al constructor de la superclase 00:19:30
que es este 00:19:32
voy a llamar a este constructor 00:19:33
que es este 00:19:36
le paso esas tres 00:19:38
y con esas tres ya está llamando este código 00:19:40
es como si hiciéramos un copia y pega 00:19:43
de ese código abajo 00:19:44
que cuando son tres no es mucho 00:19:45
pero si fueran veinte pues es un montón 00:19:48
entonces siempre 00:19:51
se programan los constructores 00:19:53
de las subclases usando esto 00:19:55
siempre, vale 00:19:57
esto significa, llama 00:19:58
al constructor de la superclase 00:20:01
y al 00:20:03
constructor que le pasamos 00:20:05
pues las propiedades que toquen 00:20:06
que son las que yo le he dado aquí 00:20:08
a ver, esta llamada también sería 00:20:10
válida, esto también sería válido, ¿por qué? 00:20:13
porque la superclase tiene un 00:20:15
constructor vacío también, lo tiene 00:20:17
tiene este, que no hace nada 00:20:19
entonces este constructor también sería válido 00:20:20
lo que pasa es que este constructor 00:20:23
no estaría haciendo nada 00:20:24
y luego inicializando bonos, con lo cual esto que le hemos pasado 00:20:26
aquí lo estaría tirando a la basura, no lo estaría usando 00:20:29
para nada, pero sentido 00:20:30
sintáctico tiene 00:20:33
¿vale? 00:20:34
lo normal es que nuestro constructor 00:20:36
parámetros, lo usemos 00:20:38
¿vale? entonces 00:20:39
esta llamada de aquí 00:20:41
esta llamada, en caso 00:20:44
de usarla, que no es que sea obligatorio usarla 00:20:46
en caso de usarla 00:20:48
Tiene que ponerse siempre como la primera línea 00:20:49
¿Vale? 00:20:52
Sí, vamos a comprobarlo 00:20:55
Por si hubieran cambiado las cosas en estos últimos 00:20:56
Tiempos, pero 00:20:58
Constructor 00:20:59
¿Vale? Si la pongo 00:21:11
Si no la pongo como primera línea 00:21:21
Me da un error, y de hecho me lo está diciendo 00:21:23
Me dice, oye, la llamada 00:21:26
Al constructor de arriba 00:21:28
Tiene que ser, hasta aquí hemos llegado 00:21:29
¿No? Vamos 00:21:32
Ha hecho un gesto 00:21:34
esto, mira, me has recordado 00:21:35
un amigo mío 00:21:39
entró una vez a un bar 00:21:40
y en el bar de repente 00:21:42
bueno, entré yo con él 00:21:44
y había un montón de gente de una pinta muy muy muy rara 00:21:45
de estas como de broncas 00:21:48
entonces entramos 00:21:49
y de repente mi amigo que lleva gafas 00:21:51
se las quitó 00:21:55
y las guardaba en el bolsillo 00:21:57
con ese gesto así de tranquilidad 00:21:58
claro, pues ese gesto así 00:22:00
no veas 00:22:02
el poderío que transmitió 00:22:04
Claro, pues tú lo mismo, has bajado esto 00:22:05
No sigas dando clase 00:22:08
Porque se ha acabado 00:22:09
Claro 00:22:10
Venga, pues ya lo hemos acabado 00:22:13
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:
5
Fecha:
18 de enero de 2025 - 14:22
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
22′ 17″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
101.78 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid