Ejercicio Empresa (Herencia) parte1 - 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:
Entonces, todo lo que digáis en esta grabación está pensado para que vosotros le deis autorización.
00:00:00
Vale, entonces, estamos haciendo un ejercicio de herencia.
00:00:06
Estamos viendo este ejercicio aquí, el empleado.
00:00:11
Entonces, en la primera clase que vamos a hacer, la clase empleado, que tiene atributos nombre, salario y fecha de contratación.
00:00:13
vale entonces string nombre doble salario y fecha de contratación
00:00:20
si queréis podemos utilizar local date
00:00:35
fecha contratación local date lo tengo que importar vale aquí el java time
00:00:39
entonces me importa una clase que ya existe en java por lo tanto lo que me
00:00:53
dice además dice tengo que construir a hacer constructores para empleado vale
00:01:00
entonces que constructores le voy a dar empleado por ejemplo public empleado que
00:01:07
reciba string n
00:01:14
doble
00:01:16
d
00:01:20
e local
00:01:22
date
00:01:24
f
00:01:25
o sea lo que estoy haciendo es
00:01:28
darme los tres parámetros y con
00:01:33
esto local date mayúsculo
00:01:35
y con estos parámetros pues los pongo
00:01:37
en los atributos
00:01:41
¿vale? del
00:01:44
objeto, dis.nombre
00:01:44
es igual a n
00:01:47
dis.salario
00:01:48
es igual a
00:01:51
s
00:01:53
y
00:01:54
dis.fecha
00:01:59
contratación es igual a s
00:02:03
vale, ya está
00:02:05
esto es
00:02:07
básico por ahora
00:02:08
si, puedes hacer
00:02:11
también otros
00:02:13
Constructores
00:02:14
Empleado, por ejemplo un constructor
00:02:19
Donde solo me dan el nombre
00:02:21
Entonces si solo me dan el nombre
00:02:23
Lo que hago es
00:02:28
Dis.n
00:02:29
Es igual a
00:02:32
Dis.nombre es igual a n
00:02:33
Dis.salario
00:02:35
Es igual a
00:02:38
No sé
00:02:40
Mil
00:02:42
Un salario básico
00:02:44
si no me dicen el salario, le doy el salario
00:02:47
mínimo, que no sé cuánto será
00:02:49
y this.fecha
00:02:51
contratación
00:02:54
o le doy null
00:02:56
vale
00:02:57
o intento darle
00:02:59
la fecha de hoy
00:03:01
vale
00:03:04
que no me acuerdo cómo se hace
00:03:04
vamos a buscar
00:03:07
vale, tendré que crear
00:03:08
local date
00:03:11
bueno, puedo hacer así
00:03:13
una opción es
00:03:15
localdate.off
00:03:20
y darle la fecha de hoy
00:03:23
o sea, dará siempre
00:03:25
una fecha concreta
00:03:27
2023
00:03:29
1
00:03:31
y
00:03:33
23
00:03:35
con esto siempre cualquiera que se cree
00:03:36
la fecha de contratación
00:03:41
se dará al 24 de enero
00:03:43
de 2023, siempre
00:03:45
vale, a lo mejor no es
00:03:47
no tiene sentido
00:03:49
si yo me voy aquí
00:03:51
en el
00:03:53
en el array
00:03:55
veis que tenemos un
00:03:57
static local date
00:03:59
esto es lo que devuelve
00:04:01
y este es el método
00:04:07
now
00:04:08
vale, entonces hay un
00:04:09
modo para decir ahora
00:04:12
dame la fecha de ahora
00:04:14
Entonces lo que puedo decirle yo es
00:04:16
Vale, entonces dame
00:04:19
Si no me dices
00:04:21
Cuando
00:04:26
Pues dame la fecha de ahora
00:04:27
Del momento en que se crea el objeto
00:04:29
Esa es la fecha de contratación
00:04:31
¿Sí?
00:04:33
Vale
00:04:37
Y ya está, yo creo que
00:04:37
O sea, un empleado siempre tendrá un nombre
00:04:41
No voy a crear un empleado sin darle un nombre
00:04:42
Si tengo que crear un empleado sabré quién es
00:04:44
Si sé todo de él, le pongo todo
00:04:46
Si no sé todo de él, le doy un salario básico y lo contrato desde hoy, ¿vale?
00:04:48
Sigamos con lo que pide el ejercicio
00:04:58
El ejercicio sigue con
00:05:01
Vale, crear una clase gerente que herede a la clase empleado
00:05:04
Y añade un nuevo atributo que se llama bonus, ¿vale?
00:05:08
Utilizar constructores para inicializar los atributos, ¿vale?
00:05:11
Entonces, además de un empleado normal, yo tengo un gerente, gerente hereda de alumno. ¿Cómo hago que gerente herede de alumno y de alumno de empleado?
00:05:15
Extend
00:05:36
Empleado
00:05:39
En mayúscula
00:05:42
Entonces ya esto me está diciendo
00:05:51
Que todo lo que está aquí en empleado
00:05:53
Más o menos lo puedo utilizar
00:05:55
Desde gerente
00:05:57
Entonces
00:05:58
Me dice que tengo que añadir un nuevo
00:06:00
Atributo
00:06:03
Que es el atributo bonus
00:06:05
Supongo que sea un bonus al
00:06:06
al salario
00:06:08
vale, entonces
00:06:11
doble
00:06:11
bonus
00:06:13
y ahora voy a crear
00:06:15
public
00:06:19
gerente
00:06:21
public gerente
00:06:23
si creo un gerente
00:06:36
lo que hago es
00:06:38
poner que su bonus
00:06:40
es igual
00:06:43
Al bonus que me pasen aquí
00:06:47
Doble
00:06:49
B
00:06:50
Realmente si yo creo un gerente
00:06:51
Sé que tiene que tener un bonus
00:06:57
Por lo tanto se lo pondré
00:06:59
Aquí hay algo raro
00:07:01
¿Por qué se enfada?
00:07:03
Porque aquí sin haber dicho nada
00:07:10
Yo estoy llamando super
00:07:12
Y como este super
00:07:13
No está definido
00:07:17
En empleado
00:07:19
Porque empleado no tiene empleado sin nada
00:07:20
Pues él se me enfada
00:07:23
Y me dice, no lo puedo llamar
00:07:25
No hay un constructor sin nada
00:07:26
Por lo tanto no lo puedo hacer
00:07:29
Fijaos que si yo me voy a empleado
00:07:31
Y le digo, hay un constructor sin nada
00:07:33
Public empleado
00:07:36
Que no hace nada
00:07:38
¿Vale?
00:07:43
Entonces ahora
00:07:45
Doble
00:07:46
Esto ya no es un problema
00:07:47
Es más, esto ya no es un problema
00:07:50
Da igual ponerlo que no ponerlo
00:07:53
Porque siempre va a utilizar
00:07:56
si uso el constructor por defecto da igual ponerlo que no ponerlo, no ponerlo
00:07:57
es igual a poner super como ahora existe no obstante no haga nada
00:08:03
de hecho este de aquí en realidad tiene una línea de código, que línea de código tiene?
00:08:12
que habría escrito aquí? que haya escrito aquí que no veo? super y quién
00:08:16
es este super
00:08:32
object
00:08:33
en este caso, esto está llamando
00:08:35
el constructor por defecto de arriba
00:08:40
que es este constructor de aquí
00:08:42
que llama el constructor por defecto de arriba
00:08:44
que es el constructor de object
00:08:46
entonces me crea un objeto al que no le añade
00:08:48
nada, porque aquí no le añade nada
00:08:51
al que le añade, le añade este de aquí
00:08:52
bueno, en realidad
00:08:55
aquí si le añade estos tres
00:08:58
pero no lo
00:09:00
Como se dice, no los inicializa
00:09:02
Entonces esto sería feo
00:09:05
Pero yo esto no lo quiero
00:09:09
Hemos dicho porque un empleado como mínimo
00:09:11
Tiene que tener un nombre
00:09:12
Entonces esto se enfada
00:09:14
A menos que yo no diga
00:09:16
Cuando creo un nombre, un gerente
00:09:18
Como mínimo tendrá que tener un nombre
00:09:20
Y su sueldo
00:09:22
Su bonus
00:09:26
Entonces aquí lo que llamo es
00:09:28
SuperDN
00:09:31
Que eso si existe
00:09:32
Estoy llamando el constructor
00:09:34
De mi superclase
00:09:36
Que reciba solo
00:09:38
Nombre
00:09:40
Estoy llamando este constructor de aquí
00:09:41
Se ejecuta este constructor de aquí
00:09:44
Bueno, aquí se ejecuta el constructor
00:09:46
De object, luego se ejecuta
00:09:49
Este código de aquí
00:09:51
Luego volvemos aquí y ejecutamos también
00:09:52
Este código de aquí
00:09:54
Y también
00:09:56
Tengo otro
00:09:59
Otro constructor
00:10:02
Public
00:10:04
Diferente
00:10:05
Que pilla todo
00:10:07
String n
00:10:09
Que era
00:10:11
Doble s
00:10:14
Local
00:10:16
Date
00:10:18
D
00:10:20
Coma doble
00:10:23
B
00:10:25
Y lo que hace este señor
00:10:26
Es
00:10:30
Super
00:10:32
De que
00:10:34
N, S y F
00:10:36
Lo he llamado F o lo he llamado L
00:10:45
Llama el super
00:10:46
Constructor
00:10:52
Que utiliza
00:10:54
N, S y F
00:10:56
Es decir, esto
00:10:58
Y una vez que haya ejecutado esto
00:10:59
Hace lo que tiene que hacer
00:11:05
Esta clase
00:11:06
O sea, this.bonus
00:11:07
Es igual a B
00:11:09
dudas por qué lo utilizó local de itamaki no lo ha importado entonces tengo
00:11:11
que acordarme de importarlo aquí también si no no sabe dónde la cuenta porque él
00:11:30
buscará local de ita en el package no la encuentro entonces está esta clase no
00:11:37
está definida yo tengo que decirle hoy a mí tienes que importar esta local de
00:11:42
de aquí, la local data del
00:11:46
package java.time
00:11:48
dudas?
00:11:49
vale, y esto también
00:11:57
el gerente está hecho, más o
00:11:59
menos, ¿vale? por como lo pide aquí, veis que son
00:12:01
ejercicios bastante sencillos
00:12:03
para empezar, ¿vale?
00:12:05
voy ahora
00:12:08
porque
00:12:09
quiero dar la posibilidad
00:12:16
a quien crea algo
00:12:18
de tener varias opciones
00:12:19
imagínate que yo
00:12:21
te tengo aquí, te tengo que contratar
00:12:22
te contrato como empleado
00:12:25
y tú has venido de otra empresa
00:12:26
y me has dicho, oye mira, por menos de 1500 euros
00:12:29
no voy, pues yo te hago un contrato
00:12:31
con 1500 euros y te contrato
00:12:33
desde el final del mes
00:12:35
¿vale? entonces tengo que utilizar
00:12:37
esto
00:12:39
para poder hacerlo
00:12:40
sin embargo, si yo sé que
00:12:43
tú te incorporas hoy, es tu primer trabajo
00:12:45
y entonces ganas el mínimo
00:12:47
y cosas por el estilo, pues puedo utilizar esto
00:12:49
O si simplemente yo soy de recursos humanos
00:12:51
Pero no me han dicho
00:12:54
Me han dicho el nombre
00:12:55
Pero todavía no me han dicho
00:12:56
Las características de tu contrato
00:12:57
Pues entonces uso este de aquí
00:13:00
Que te crea en la base de datos
00:13:02
Y luego ya, pues, veremos que hago
00:13:04
¿Sí?
00:13:06
O sea, el constructor
00:13:09
Es una forma
00:13:10
Dar varios constructores
00:13:13
Es una forma que tienes tú
00:13:14
Para dar flexibilidad
00:13:16
Cuando se crea un
00:13:18
Un objeto
00:13:20
Dar flexibilidad a quien lo está creando
00:13:23
Para crearlo de distintas formas
00:13:25
Mírate por ejemplo
00:13:27
El API Java de String
00:13:29
String
00:13:31
Tiene todos estos constructores de aquí
00:13:34
Todos estos son constructores
00:13:37
Tú puedes construir
00:13:39
Un String sin nada
00:13:40
Le puedes pasar
00:13:43
Un array de byte que él considera
00:13:45
Cada byte lo interpretará como un carácter
00:13:47
y lo utilizará como una cosa
00:13:49
un array de bytes
00:13:51
pero diciéndole cual es el
00:13:54
el chart set
00:13:56
el conjunto de caracteres que estás
00:13:57
utilizando, le puedes decir
00:14:00
un byte en
00:14:02
ascii y luego
00:14:04
este es deprecated
00:14:05
para afuera, o sea, hay distintas
00:14:08
formas de crear una
00:14:10
string, vale, y porque hay todas estas
00:14:11
porque hay en algunos casos
00:14:14
en que esto te puede ser útil, por ejemplo
00:14:16
Si tú estás leyendo desde un fichero
00:14:17
Y la forma con que lo estás leyendo
00:14:20
Es de byte en byte
00:14:22
Y sabes que es un fichero de texto
00:14:23
Cuando has leído todos los bytes
00:14:25
En un array de bytes
00:14:27
Pues se lo pasas a un
00:14:28
Constructor de string que
00:14:31
Interprete estos bytes como
00:14:32
Carácteres y ya tienes tu string leída
00:14:34
Vale, ya lo veremos cuando
00:14:36
Haremos acceso a ficheros
00:14:39
Vale
00:14:41
Entonces, siga adelante
00:14:43
La tercera pasa
00:14:46
El punto 3 y 4
00:14:48
Son menos, tienen menos a que ver con
00:14:51
Herencia, vale, pero
00:14:53
Nosotros haremos alguna cosa para ver que
00:14:54
Que algo tenga que ver, vale
00:14:57
Entonces voy a crear
00:14:59
La tercera que es departamento
00:15:01
Creo una clase
00:15:03
Departamento
00:15:08
¿Qué hace la clase departamento?
00:15:10
Contiene un array
00:15:17
De objetos empleados, vale
00:15:18
Y tiene un modo para calcular el salario total del departamento
00:15:20
Vale, vamos a ver
00:15:24
¿Cómo lo hacemos esto?
00:15:25
Un array de empleados
00:15:30
¿Vale?
00:15:33
Entonces, empleado
00:15:33
Array
00:15:35
Empleados
00:15:38
Estos son los empleados de este departamento
00:15:39
¿Sí?
00:15:44
¿Cómo creo un departamento?
00:15:47
¿Cómo creo un departamento?
00:15:57
¿Qué tengo que hacer?
00:15:59
Constructor
00:16:00
¿Cómo creamos este constructor?
00:16:02
Primer constructor, public
00:16:04
Departamento
00:16:05
¿Qué recibe?
00:16:07
Empleado
00:16:17
Si me pasas un array de empleado
00:16:18
Que ya has creado tú
00:16:23
Yo simplemente lo que voy a hacer
00:16:24
Es que
00:16:27
Empleados
00:16:28
Dis.empleados
00:16:30
Es igual a lo que me ha pasado
00:16:32
Quiero usar
00:16:37
Otros constructores
00:16:40
Quiero hacer un departamento vacío
00:16:42
Otra opción
00:16:45
Podría ser que yo crea un departamento vacío
00:16:50
Y luego empiezo a rellenarlo
00:16:52
Añadiendo
00:16:55
Empleados
00:16:55
Es esto
00:16:58
El departamento tiene
00:17:03
Una red de empleados
00:17:07
Y me pasas una red de empleados
00:17:08
Y yo lo pongo allí
00:17:11
¿Vale?
00:17:12
Otra opción sería que me pasas
00:17:14
Un alumno
00:17:16
Un empleado solo
00:17:18
Un objeto empleado
00:17:20
Para decir que para hacer un departamento
00:17:21
Necesita al menos un empleado
00:17:23
Si el departamento no tiene empleados
00:17:25
No lo puedo construir
00:17:26
Y yo creo un array con solo ese empleado ahí dentro
00:17:27
Así, ¿eh?
00:17:32
Para public
00:17:33
Departamento
00:17:35
me pasas
00:17:39
solo un empleado
00:17:42
e
00:17:44
y yo lo que hago
00:17:45
es que this.empleado
00:17:48
es igual
00:17:51
a new
00:17:54
empleado
00:17:59
de uno
00:18:02
me crea un array
00:18:03
de una posición
00:18:06
y
00:18:07
empleados
00:18:09
De 0
00:18:10
Es igual a
00:18:13
Entonces hay dos formas
00:18:14
De crear un departamento
00:18:19
O me pasas la lista de los empleados
00:18:21
En un array
00:18:23
O me pasas el primer empleado
00:18:24
De ese departamento
00:18:27
Y yo ya lo pongo ahí dentro
00:18:28
Ya veremos que hacemos
00:18:31
¿Sí?
00:18:34
¿Dudas?
00:18:38
¿Dudas?
00:18:42
Esto no hereda de nadie
00:18:43
En realidad hereda de alguien
00:18:50
¿De qué hereda?
00:18:52
¿Cómo?
00:18:55
No
00:18:56
¿Por qué departamento debería heredar de empleado?
00:18:57
¿Departamento es un empleado?
00:19:04
Por lo tanto no hereda
00:19:08
¿Vale?
00:19:09
Acordaos que cuando heredáis
00:19:10
Le estáis dando una
00:19:12
Relación de is a
00:19:13
Es un
00:19:17
Entonces si yo hago departamento está en de empleado
00:19:17
Estoy diciendo que el departamento es un empleado
00:19:20
¿No es verdad?
00:19:22
¿Sí?
00:19:25
Por lo tanto, esto no hereda de nada
00:19:26
Y en automático hereda de obvio
00:19:28
Sí, vale
00:19:29
Entonces, tened en cuenta también que
00:19:32
Aquí dentro tengo empleado, ¿vale?
00:19:34
Puedo poner empleado y aquí le paso un empleado
00:19:36
En realidad, aquí le puedo pasar
00:19:38
O un empleado, o
00:19:41
No se oigo
00:19:42
O un
00:19:49
Pero puedo pasarle o un empleado
00:19:51
O un array de empleados
00:19:54
O un gerente
00:19:55
O un array de
00:19:58
Gerentes
00:19:58
O un array mezclado de gerentes empleados
00:20:01
¿Vale? Ahora ya veremos que le pasamos
00:20:04
¿Sí?
00:20:06
Entonces
00:20:09
Ahora me dice
00:20:10
Sigo con lo básico
00:20:11
Luego después lo mejoramos si queremos
00:20:13
Me dice
00:20:15
Tengo un método para calcular
00:20:16
el salario total del departamento
00:20:20
entonces
00:20:22
public
00:20:24
doble
00:20:25
salario
00:20:28
dept
00:20:30
como calculo
00:20:31
doble
00:20:36
salario
00:20:41
departamento
00:20:43
return
00:20:44
salario departamento
00:20:47
como calculo
00:20:49
el salario del departamento
00:20:53
con un for
00:20:54
int i es igual a 0
00:20:58
i menor que que
00:21:04
empleados.lang
00:21:08
justo
00:21:13
voy recorriendo esto
00:21:16
independientemente que tenga miles o tenga uno
00:21:20
pues lo que voy a hacer es intentar así
00:21:24
pregunta para vosotros
00:21:27
¿podría ser que esto sea nul?
00:21:28
Podría ser que empleado sea null
00:21:30
¿Cuándo?
00:21:41
Si yo aquí le paso null
00:21:48
Pues eso será null
00:21:50
Si yo cuando lo creo
00:21:52
Lo creo con
00:21:55
Departamento de
00:21:56
Es igual a
00:21:58
New departamento
00:22:00
De null
00:22:03
Esto me lo crea
00:22:05
Quiero que pueda ser así
00:22:11
Pues entonces podría ser que cuando uno me pasa
00:22:19
Aquí podría pasar
00:22:25
Cuidado
00:22:26
Empleados no sería null
00:22:29
Podría ser que el empleado dentro de empleados sea null
00:22:32
Si me pasa null aquí
00:22:35
Si yo quiero evitar estas cosas puedo comprobarlo aquí dentro
00:22:37
Por ejemplo, hagamos que si me pasan un null aquí
00:22:43
Hago algo, ¿vale?
00:22:46
Entonces la pregunta es
00:22:48
If
00:22:50
E
00:22:51
Es not null
00:22:53
Entonces
00:22:55
No tengo problemas
00:22:58
Y si no
00:23:00
Me han pasado null
00:23:02
Entonces que hago con empleados
00:23:08
Y como creo
00:23:10
Que hago
00:23:14
Yo
00:23:27
Empleado
00:23:30
Array
00:23:33
Os gusta así
00:23:35
Creo una posición vacía
00:23:42
Con dentro que
00:23:46
Y por ejemplo
00:23:50
Si vosotros quisierais saber
00:23:58
Cuantos empleados hay en este departamento
00:23:59
Que haríais
00:24:01
Yo se me lo pillaría así
00:24:02
Técnicamente me has dado nul
00:24:22
Entonces me estás diciendo que no hay
00:24:32
No hay ningún
00:24:34
Empleado
00:24:35
Vale, entonces yo te creo
00:24:38
Una red de empleados con cero
00:24:40
Y si esto me funciona
00:24:41
Ahora cuantos
00:24:44
Como hago para saber cuantos empleados hay
00:24:45
Empleados.length
00:24:48
Claramente por algún lado tendré que tener
00:24:52
Un método add que me añada
00:24:57
Empleado, pero eso de
00:24:59
Añadir elementos a un array
00:25:01
Ya lo hemos hecho
00:25:03
Hemos hecho el viernes pasado
00:25:04
Entonces, por ahora
00:25:06
Dejamos así, veamos si no explota
00:25:09
Aquí hacemos algo parecido
00:25:10
Es decir, perdón, aquí
00:25:12
Si me pasan un empleado E
00:25:14
Que no es null
00:25:17
Vale, fenomenal
00:25:18
If E is not null
00:25:19
Hace esto
00:25:22
Y estamos todos felices
00:25:25
Y si no
00:25:26
Pues si me has creado un departamento
00:25:28
Que no es nada
00:25:43
Y yo admito esto
00:25:44
Pues hago lo mismo
00:25:45
Como me has pasado un empleado
00:25:46
Que no existe
00:25:50
Pues igualmente creo el departamento
00:25:50
Con su
00:25:53
Array de empleados
00:25:54
Pero el array de empleados no tiene nada dentro
00:25:58
Porque al fin y al cabo me ha pasado null
00:26:01
No me ha pasado un empleado
00:26:03
Me ha pasado una cosa vacía
00:26:04
Entonces aquí os estoy admitiendo
00:26:06
La posibilidad de que haya
00:26:09
Departamentos vacíos
00:26:10
A lo mejor hay departamentos
00:26:12
Que son sólo
00:26:14
Para la organización
00:26:16
De mi empresa
00:26:19
Que son útiles que los tenga allí
00:26:21
Para que cuando le hago
00:26:22
No sé, calculo el presupuesto
00:26:23
Cosa por estilo, si tengo que asignar
00:26:27
Dinero a ellos también
00:26:28
Pero que no tienen empleados
00:26:30
Concretamente allí dentro
00:26:32
A lo mejor son externalizados
00:26:33
Y por lo tanto no son empleados míos
00:26:36
Pero existe el departamento
00:26:37
Estoy dando como programador
00:26:39
Esta posibilidad, si no quiero
00:26:44
Darla, pues tengo que hacer algo aquí
00:26:45
Entonces, ahora
00:26:47
Como he hecho esta cosa de aquí
00:26:58
Puede ser que esto sea null
00:27:00
Ahora ya no
00:27:02
Pase lo que pase
00:27:04
Siempre lo he
00:27:06
Estanciado a un nuevo array
00:27:07
O me lo han pasado ellos
00:27:09
Aquí me lo han pasado ellos
00:27:11
Y no es null, por lo tanto está bien
00:27:13
Aquí me lo han pasado ellos
00:27:15
Pero es null
00:27:18
Y lo he creado yo
00:27:19
Aquí me han pasado solo un empleado
00:27:20
Y lo he creado yo
00:27:23
Y lo he metido el empleado dentro
00:27:25
Y aquí me han pasado un empleado
00:27:26
Pero el empleado es null
00:27:28
Y yo he creado el empleado
00:27:29
Entonces, en cualquier caso
00:27:31
Si yo creo un departamento
00:27:33
Empleados no es null
00:27:34
Es algo
00:27:37
¿Vale?
00:27:39
Por lo tanto lo puedo utilizar tranquilamente
00:27:40
Sin problemas
00:27:42
Sin tener miedo a que esto explote
00:27:43
¿Sí?
00:27:46
Cuidado
00:27:49
Si no fuera así
00:27:50
Y empleados podría ser null
00:27:51
Pues aquí quizás debería hacerme un
00:27:53
If empleados
00:27:56
No es null
00:27:57
Entonces
00:28:00
Haz lo que sea, porque si yo
00:28:03
Intento hacer, por ejemplo
00:28:05
Empleados.length
00:28:06
Y empleados es null, ¿qué pasa?
00:28:08
Null pointer exception
00:28:12
Vale
00:28:14
Sigo, y más más
00:28:17
Entonces
00:28:19
Esto me está
00:28:22
Cuidado, y si este señor de aquí
00:28:24
Es esto
00:28:26
¿Qué pasa en este for?
00:28:28
Que ni empieza
00:28:32
Vale, pone i igual a cero
00:28:33
Y cero no es menor que cero
00:28:35
Y por lo tanto es falso, por lo tanto es niento
00:28:38
¿Sí?
00:28:41
Y entonces devolvería que este departamento me costa cero
00:28:45
¿Sí?
00:28:48
Vale
00:28:53
Entonces, ¿qué hago ahora?
00:28:54
Sd
00:28:57
Es igual a qué
00:29:07
Sd igual a más
00:29:08
O más igual, vale
00:29:11
Esto es igual a decir más igual
00:29:12
A
00:29:14
Empleados
00:29:16
De ahí
00:29:20
Punto
00:29:22
Salar
00:29:23
Y habría que añadir otra cosa
00:29:24
Que
00:29:30
Si fuera gerente
00:29:31
Y
00:29:34
If, a ver, estamos todos de acuerdo
00:29:36
Esto es
00:29:38
Más igual quiere decir
00:29:40
SD es igual a SD más
00:29:42
¿Vale?
00:29:45
Es la forma más rápida de escribir
00:29:46
Empleados de i.salario
00:29:48
Vete al empleado que estamos mirando ahora
00:29:50
Cede a su salario y píllalo
00:29:52
Si yo esto fuera privado por alguna razón
00:29:54
Pues pondría aquí getSalario
00:29:56
O algo que me pueda dar su salario
00:29:58
¿Vale?
00:30:01
Podría esconder todo esto
00:30:01
en un método de
00:30:04
dame tu coste
00:30:06
¿vale? y hacer que aquí simplemente
00:30:08
escribe el salario, mientras en gerente
00:30:11
escribe el salario más el bonus
00:30:12
y entonces evitaría
00:30:14
de hacer cosas raras aquí
00:30:16
¿vale? si queréis lo hacemos antes desde aquí
00:30:18
y luego lo hacemos desde allá
00:30:20
¿eh? entonces
00:30:21
esto ha asomado
00:30:23
el salario de todos ¿vale? pero
00:30:26
ahora hay algunos empleados especiales
00:30:28
que además de
00:30:31
costarme el salario me costan el bonus
00:30:32
Entonces, ¿cómo lo hago este aquí?
00:30:34
¿Cómo hago desde aquí a saber si
00:30:37
Este empleado que estoy mirando
00:30:39
Que es un empleado
00:30:41
Es un gerente
00:30:42
Si
00:30:44
Empleados
00:30:48
De ahí
00:30:56
Si el que estoy mirando ahora
00:30:58
Estoy siempre en el mismo ciclo de for
00:31:00
Instanche of
00:31:01
Gerente
00:31:07
Instan
00:31:11
Si el elemento que estoy mirando ahora es también una instancia de gerente
00:31:14
Entonces esto sería true
00:31:23
Entonces quiere decir que yo puedo intentar
00:31:24
Que yo lo puedo tratar como gerente e intentar acceder a su bonus
00:31:29
¿Cómo lo hago?
00:31:32
SD más igual
00:31:34
SD más igual, vuelvo a sumar a SD al sueldo total
00:31:35
¿Qué?
00:31:40
¿El bonus?
00:31:42
Sí, ¿cómo lo hago?
00:31:43
empleados
00:31:46
de ahí, punto, bonus
00:31:47
cuidado, pero no lo está haciendo
00:31:50
está dando un error, te está diciendo
00:32:04
oye, mira, que no lo puedo resolver
00:32:06
si yo me voy a empleado
00:32:08
y ese es un empleado, aquí no hay de ningún lado
00:32:09
el bonus
00:32:12
tú me estás diciendo que es un empleado
00:32:13
ese empleado es un empleado
00:32:17
este es un empleado
00:32:18
Es como se lo digo
00:32:20
Que lo trate como gerente
00:32:23
Píllame este señor
00:32:24
Tráctamelo como un gerente
00:32:35
Y accede
00:32:37
A su bonus
00:32:39
¿Esto lo puede hacer?
00:32:40
¿Qué es que me permite
00:32:44
Hacer esto?
00:32:45
El hecho es que haya comprobado que
00:32:47
Él es un gerente
00:32:51
Cuidado que si lo hago
00:32:55
Directamente sin esto
00:32:57
Esto me lo trata bien
00:32:58
me dice, sí, sí, no hay errores
00:33:03
pero la primera vez que intente calcularlo
00:33:04
y el elemento que está aquí dentro
00:33:07
no es un gerente, sino es un
00:33:09
empleado, va a explotar
00:33:11
no a tiempo de
00:33:13
compilación, porque a tiempo de compilación
00:33:15
esta es una cosa que puede hacer, sino a
00:33:17
tiempo de ejecución
00:33:19
¿vale? cuando lo
00:33:20
ejecuto, llega un momento en que
00:33:23
este empleado lo intento tratar como un
00:33:25
gerente y no es un gerente
00:33:27
y me explota, ahora lo vamos
00:33:28
a ver, lo vamos a hacer
00:33:31
Y vemos que pasa
00:33:32
¿Vale?
00:33:33
Ok
00:33:36
Esta es una forma de hacerlo
00:33:37
¿Vale?
00:33:40
Por ahora lo dejamos así
00:33:42
Y luego, bueno
00:33:43
Hagamos la versión 2
00:33:44
Return SD
00:33:48
Creamos
00:33:49
Sí, creamos otro método
00:33:51
Para no
00:33:56
Imaginémonos que tengo
00:33:57
Salario departamento 2
00:33:59
Otra forma de calcularlo
00:34:01
¿Vale?
00:34:03
Y quiero que en vez de hacer estas cosas por aquí
00:34:03
Lo que voy a modificar es empleado y gerente
00:34:08
Entonces me voy a empleado y le digo
00:34:12
Mira empleado, tú tienes public doble coste
00:34:15
Que me calcula cuánto costa este empleado
00:34:21
Como eres un empleado, return salario
00:34:27
Ahora, cuando voy a gerente
00:34:31
Gerente ya ha importado este método de aquí
00:34:40
Ya lo tiene
00:34:46
Pero lo que puedo hacer yo es
00:34:47
Oye
00:34:50
Hagamos una cosa interesante
00:34:51
Sobrescribamoslo
00:34:55
Entonces, cuando tú lo llamas
00:35:00
Sobre un empleado
00:35:05
Será esto, mas si lo llamas
00:35:06
Sobre un gerente
00:35:08
Será
00:35:09
Esto
00:35:10
Mi coste no es solo el salario
00:35:14
Es bonus más salario
00:35:21
Podría ser
00:35:22
Esto
00:35:27
Mi coste es el bonus sumado a
00:35:32
Lo que sea el coste
00:35:41
Porque pongamos que
00:35:43
Si su sueldo es 1000 pero a mi no me costa 1000
00:35:44
A mi como empresario
00:35:47
Me costa más de 1000
00:35:49
A mi me costa 1000 por
00:35:50
1.5
00:35:53
No lo sé
00:35:56
Esto preguntárselo a Foll
00:35:59
¿Vale?
00:36:00
¿Cuánto?
00:36:02
¿Hace falta poner el supercoste?
00:36:04
¿No podría poner más salario?
00:36:08
Sí, sí, sí
00:36:09
Lo que he hecho antes
00:36:10
Pero cuidado
00:36:12
Que si
00:36:13
Si este método de aquí
00:36:14
En vez de retorno salario
00:36:16
Hace 1400 cosas
00:36:17
Y calcula la nómina
00:36:19
Y le añade la cosa así
00:36:20
Pues ahora todo este código
00:36:22
Lo tienes que poner al otro lado
00:36:23
En vez de tú
00:36:24
Ya lo tienes
00:36:25
Le dices
00:36:26
Oye, mira, hazte los cálculos
00:36:27
Que hace que esta es materia de fall
00:36:29
Para saber cuánto cuesta un empleado
00:36:31
Y a eso le sumas el bonus
00:36:33
Más todos los cálculos
00:36:34
Sobre el bonus que se podrían hacer aquí
00:36:39
¿Vale? ¿Me entendéis lo que quiero decir?
00:36:41
O sea, si yo hago así
00:36:44
A mí me funciona porque
00:36:44
Esta es una extrema simplificación
00:36:47
Porque este método de aquí
00:36:49
Al fin y al cabo tiene solo salario
00:36:51
¿Vale? Entonces, ¿qué me importa a mí
00:36:52
Escribirlo otra vez aquí?
00:36:55
Pero vosotros habéis hecho ya la práctica
00:36:57
De calcular la nómina
00:37:00
Haréis
00:37:01
Y no es así
00:37:04
¿Vale? No se calcula así
00:37:05
Mil euros, va, mil, ahí, ya está
00:37:07
¿Vale? Entonces aquí
00:37:09
Hay un algoritmo que te calcula
00:37:11
Para seguir de su salario
00:37:13
El precio, cuánto paga la empresa
00:37:15
La prestación, no sé qué, no sé cuánto
00:37:17
¿Vale? Entonces si lo ha hecho ya todo aquí
00:37:20
Que simula en este fantástico
00:37:22
1.5
00:37:24
Pues entonces, aquí lo que puede hacer
00:37:25
Es simplemente utilizar eso
00:37:28
Vete a mi padre
00:37:30
Utiliza el coste de mi padre
00:37:32
Sacará lo que sea y luego le añado
00:37:33
El bonus actual, el coste aquí
00:37:36
¿Sí?
00:37:38
¿Se entiende un poco eso de sobre escribir?
00:37:41
Vale
00:37:44
Entonces, ahora si lo he hecho así
00:37:44
Desde aquí
00:37:47
En la versión 2
00:37:49
¿Vale?
00:37:51
En vez de hacer esto
00:37:52
Que hacía antes
00:37:55
Lo único que tengo que hacer es
00:37:57
Y además
00:37:59
La cosa bonita es que
00:38:09
Aquí si entra
00:38:11
El
00:38:13
¿Cómo se llama?
00:38:14
El concepto que
00:38:16
Java se da cuenta
00:38:18
Si tú eres un empleado
00:38:20
O tú eres un gerente
00:38:22
Es esta cosa de aquí
00:38:24
¿Dónde está?
00:38:26
Esto
00:38:29
¿Os acordáis?
00:38:30
Que cuando llamo un método
00:38:34
No obstante lo llame sobre personas, sobre alumnos, lo que me da la gana
00:38:36
Lo que voy a utilizar es la instancia
00:38:40
Y va a utilizar el método de esa instancia
00:38:43
Entonces, no obstante yo haya metido todo en un array de empleados
00:38:46
Esta cosa de aquí me funciona con el de empleados en empleados
00:38:51
Y con el de gerente en los gerentes
00:38:57
Lo que cuenta es la instancia que hay
00:38:59
Entonces, fijaos que
00:39:01
Con esta opción de aquí
00:39:03
El diseño
00:39:05
De mi programa
00:39:08
Se simplifica mucho
00:39:11
Tengo
00:39:13
Todo lo que tiene que ver
00:39:15
Con empleado en empleado
00:39:17
Entonces, como se calcula su coste, lo tengo en empleado
00:39:19
Como se calcula el coste del gerente
00:39:21
Lo tengo en gerente
00:39:23
Y aquí, desde fuera
00:39:24
Solo lo único que tengo que hacer
00:39:26
Es calcular su coste
00:39:28
Very nice
00:39:30
¿Sí?
00:39:34
Pero esto
00:39:39
Oficialmente todavía no lo hemos hecho
00:39:40
¿Veis?
00:39:43
Os lo estoy metiendo yo allí
00:39:45
De vez en cuando
00:39:47
Para que cuando luego lo haremos la próxima semana
00:39:48
Diréis, ah sí, pero esto lo hemos hecho
00:39:50
Ya lo hemos entendido
00:39:52
¿Vale?
00:39:53
Pero oficialmente que es esta cosa aquí
00:39:54
Y por qué funciona
00:39:57
No lo hemos todavía dicho
00:39:58
¿Sí?
00:39:59
Por lo tanto nosotros lo haríamos así
00:40:00
Todavía también se tiene el concepto
00:40:02
De que
00:40:09
Yo tengo la posibilidad de hacer las dos cosas
00:40:10
¿Vale?
00:40:13
Son decisiones de programación
00:40:14
Que hago yo
00:40:16
Entonces tendré que pensar
00:40:17
Cuál es la opción mejor
00:40:20
Y diseñar la cosa
00:40:21
Está claro que si yo estoy utilizando una clase empleado
00:40:23
Que la ha hecho otro
00:40:26
Departamento
00:40:27
Y el otro departamento esto no me lo ha puesto
00:40:30
Entonces
00:40:32
No puedo utilizar esto
00:40:34
Tengo que utilizar lo que tengo
00:40:36
Otro departamento
00:40:38
A mi me dará un interfaz
00:40:41
Me dará una idea de cual es la clase
00:40:42
Y los métodos que puedo utilizar
00:40:45
Si no hay un método así
00:40:46
No puedo utilizar
00:40:48
Puedo decir, si luego lo harán
00:40:49
Porque ellos están haciendo su trabajo
00:40:52
Tendrás que hacer una reunión con tu jefe
00:40:54
Jefe de proyecto, decirle
00:40:56
Mira, estaría bien esto
00:40:57
Y a lo mejor el jefe de proyecto decide cambiarlo
00:40:58
A lo mejor esta parte aquí de empleado
00:41:01
Es de un programa que ya está funcionando
00:41:03
Y que no se puede tocar
00:41:06
O es un programa del que no tenemos el código
00:41:07
Porque es de otra opción
00:41:09
Tenemos solo el class, no podemos modificarlo
00:41:11
¿Sí?
00:41:13
Entonces, todo puede ser
00:41:17
Si es todo mío, pues entonces estaría bien
00:41:19
Haberlo hecho así
00:41:22
¿Dudas?
00:41:23
Gracias.
00:41:30
- Autor/es:
- Stefano Chiesa
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento - No comercial
- Visualizaciones:
- 11
- Fecha:
- 24 de enero de 2023 - 14:14
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 41′ 36″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 347.99 MBytes