20241213 POO-Clases-Ejer_5_incluye_static - 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, a ver, hemos quedado que estas dos clases estaban entendidas, lo que representaban
00:00:00
lo que significa. Una empresa que tiene
00:00:10
un...
00:00:11
No, nos hemos divorciado.
00:00:13
Aquí existe una pelea.
00:00:14
Por eso, la clase de autoría
00:00:18
del viernes 20, ya sabemos dónde está la casa.
00:00:19
Bar de la gente.
00:00:21
Bar de troya.
00:00:23
El final fue ver a...
00:00:24
¿Qué es la relación?
00:00:27
¿Qué es la relación?
00:00:28
¿Qué es la relación?
00:00:28
Bueno, vale.
00:00:31
Tenemos una empresa con departamentos y empleados,
00:00:34
una base de datos empleados,
00:00:37
no van a ser datos de departamentos
00:00:39
qué tristeza
00:00:40
te da pena
00:00:42
no, no me da ninguna pena
00:00:43
y para gestionar esas tablas
00:00:46
tenemos esta aplicación
00:00:48
vale, y ahí vamos a recoger los datos
00:00:50
magnífico, y ahora ya haremos
00:00:53
un main, que ya Ana ya
00:00:55
ha hecho bastante del main, pero bueno
00:00:57
eso ya es secundario
00:00:59
el main ya es una aplicación concreta
00:01:00
que funcionalidades va a tener
00:01:02
pues crear el departamento, crear los empleados
00:01:04
cambiar el jefe
00:01:07
meter a un empleado nuevo, despedirlo
00:01:08
lo que sea, lo que toque
00:01:11
lo que toque
00:01:13
¿vale?
00:01:15
entonces eso ya puede haber mil
00:01:16
aplicaciones usando tanto
00:01:19
departamento como empleado, mil
00:01:21
una de ellas es pues la que está pedida
00:01:22
y la que ha hecho Ana, que ha subido
00:01:25
que miraremos cuando
00:01:27
no se tiene, vale, bueno
00:01:29
¿qué situación se nos puede dar?
00:01:31
que en esta realidad que
00:01:34
tenemos que trabajar
00:01:35
con empleados y departamentos
00:01:36
que en esta realidad con la que tenemos que trabajar
00:01:38
hay información que también hay que recoger
00:01:40
pero que esa información no sea
00:01:43
característica
00:01:45
de cada empleado o característica
00:01:47
de cada departamento
00:01:49
¿verdad? o sea, con estas dos clases que hemos
00:01:50
hecho, toda la información
00:01:53
que recogemos es
00:01:55
o esta, pero esta caracteriza
00:01:56
cada empleado, con lo cual
00:01:59
cada empleado tiene la suya propia, eso está claro
00:02:01
¿verdad?
00:02:03
o esta de aquí
00:02:03
pero esta caracteriza
00:02:05
a cada departamento, luego cada departamento
00:02:08
tiene la suya propia. Y esa es
00:02:10
toda la información que tiene nuestra aplicación
00:02:12
no tiene más, toda la información está
00:02:14
o aquí o aquí
00:02:16
y esa información
00:02:18
repito, o es información que
00:02:20
caracteriza a cada empleado
00:02:22
o es información que caracteriza
00:02:24
a cada departamento. Vale
00:02:26
pero puede haber información
00:02:28
con la que nuestra aplicación
00:02:30
de empleados y departamentos tenga que trabajar también
00:02:32
y esa información no sea característica
00:02:35
de cada empleado por separado o característica
00:02:38
de cada departamento. Entonces, ¿dónde la metemos?
00:02:41
Hay que meterla en algún sitio porque las aplicaciones que trabajan
00:02:44
con empleados y departamentos la necesitan.
00:02:47
Por ejemplo, la aplicación que trabaja con empleados
00:02:50
y departamentos, esta de aquí,
00:02:53
necesita la ubicación física de la empresa
00:02:56
donde están todos los departamentos
00:03:00
necesita la ubicación física donde están todos los departamentos
00:03:01
vale, pues nos surge
00:03:04
la pregunta, esa ubicación
00:03:06
física vamos a suponer que es una variable
00:03:08
stream, calle del
00:03:10
percebe, no sé cuántos, vale
00:03:11
pues esa información, esa variable
00:03:13
stream, ¿dónde la metemos?
00:03:16
¿dónde la reflejamos en este modelo
00:03:18
de clases nuestro con dos clases
00:03:20
empleo o departamento? ¿dónde la reflejamos?
00:03:21
porque si la
00:03:25
reflejamos aquí
00:03:25
y private string dirección de la empresa.
00:03:28
Pues si la reflejamos aquí,
00:03:35
significa que cada objeto departamento
00:03:37
tiene su propia variable dirección empresa.
00:03:40
Y no, eso está mal expresado.
00:03:45
Todos los departamentos están en la misma dirección.
00:03:47
Luego podemos recoger aquí esta información,
00:03:50
pero la tendríamos por duplicado en todos los departamentos,
00:03:52
en todos, que necesidad
00:03:56
de tenerla en todos los departamentos cuando en todos
00:03:58
es la misma, donde la metemos
00:04:00
fuera de la clase
00:04:03
no se puede, en Java
00:04:04
no hay ninguna variable que se pueda
00:04:06
declarar fuera de una clase
00:04:09
¿verdad Jesús?
00:04:11
que todo
00:04:13
el código Java, todo el código Java
00:04:14
de cualquier aplicación Java, todo va siempre
00:04:16
dentro de clases, todo
00:04:18
luego esto, donde lo ubicamos
00:04:20
aquí desde luego
00:04:23
queda fatal, cada departamento
00:04:24
tiene una dirección
00:04:27
de su empresa, no, es común para todos
00:04:29
luego aquí no refleja
00:04:31
la realidad, no la refleja
00:04:33
bueno, puedo ponerlo ahí, pero me tengo que preocupar
00:04:34
luego yo por código, por aplicación
00:04:37
me tengo que preocupar cuando haga mi main
00:04:39
de asegurarme de que todos
00:04:40
los departamentos tienen el mismo valor
00:04:42
aquí
00:04:44
ya, pero te arriesgas
00:04:45
a que alguien desde un objeto
00:04:50
departamento en un método lo cambia
00:04:52
y se ha cambiado solo para ese objeto
00:04:54
y no se ha cambiado para los demás
00:04:56
y para que la aplicación sea coherente
00:04:58
siempre tenemos que
00:05:01
garantizar que esa variable tenga el mismo
00:05:03
valor en todos
00:05:05
entonces lo podemos poner así, pero entonces
00:05:05
tenemos que hacer la aplicación muy cuidadosamente
00:05:08
para que siempre todos los objetos tengan
00:05:11
aquí el mismo valor, y es un rollo
00:05:13
porque es muy fácil que una aplicación de
00:05:15
2.500 millones de métodos
00:05:16
en alguno se haga aquí un cambio
00:05:18
y no se haya reflejado en los
00:05:20
demás y entonces la aplicación empieza
00:05:22
a darnos resultados que
00:05:24
no tienen sentido y que no son coherentes.
00:05:26
Luego,
00:05:29
se nos plantea un problema, que hay
00:05:30
algo de la realidad
00:05:32
que no sabemos cómo reflejar.
00:05:33
Y ese algo es una
00:05:36
información referente
00:05:38
a mi modelo de datos de empleados
00:05:40
departamentos, una información, pero que
00:05:42
no depende de un objeto en concreto.
00:05:44
No depende, es común para
00:05:46
todos. Pues,
00:05:48
¿qué parche, entre comillas,
00:05:50
es parche el más útil del mundo
00:05:52
porque nos abre otra vez un montón de posibilidades
00:05:54
es el que ha sacado Java
00:05:56
para reflejar esta situación
00:05:58
pues le planta
00:06:00
delante este
00:06:02
modificador a esa variable
00:06:05
le plantamos este modificador
00:06:07
vale, como veis se ha puesto
00:06:11
en cursiva
00:06:13
no, no, no, no tengo que dar un valor
00:06:14
no, no, no, yo pongo
00:06:17
el stati delante
00:06:19
ahora diríais
00:06:20
claro
00:06:22
vale, entonces static es
00:06:24
otro modificador más que se puede poner
00:06:26
delante, entonces fijaos
00:06:28
delante de una variable
00:06:30
ponemos su tipo de dato, eso siempre
00:06:32
obligatorio, justo delante
00:06:34
y luego ya aquí un montón de modificadores que ya vamos
00:06:35
incorporando
00:06:38
este ya sabemos lo que significa
00:06:39
este todavía
00:06:42
no, es lo que vamos a significar, bueno pues
00:06:44
¿qué pasa? cuando en una propiedad
00:06:46
de una clase
00:06:48
¿vale? recordad que un código java son
00:06:49
clasesol. Pues en una propiedad
00:06:52
de una clase cualquiera ponemos el static delante.
00:06:54
Pues esa propiedad ha cambiado
00:06:57
su ubicación física
00:06:59
y su significado.
00:07:00
Entonces.
00:07:02
¿Se guarda en otro documento automáticamente?
00:07:04
No, no hables de documentos. Hablas de espacio de memoria
00:07:06
en todo caso.
00:07:08
No, el documento...
00:07:10
Ya, pero si te lo apunta en otro lado.
00:07:12
Ahora lo vemos.
00:07:14
Nosotros tenemos objetos departamento.
00:07:16
Aquí tenemos
00:07:19
por ejemplo
00:07:20
mi clase main podría tener tres objetos departamento, ¿verdad?
00:07:23
Este sería el departamento 1, este sería departamento 2, por ejemplo,
00:07:30
este sería el departamento 3, ¿vale?
00:07:41
Entonces, tengo tres objetos departamento.
00:07:50
Estos tres objetos, Ana, estos tres objetos son de esta clase.
00:07:52
Luego tienen todos ellos, su propiedad nombre, director, empleados, la tienen todos ellos. Luego todos estos objetos tienen, pues una casillita para el nombre, otra casillita para el director, otra casillita gigante para la RAI de empleados. Todos lo tienen.
00:07:58
¿Y qué ocurriría si esta propiedad yo no le hubiera puesto el static?
00:08:16
Si yo no le hubiera puesto el static y la tuviera como la tengo antes,
00:08:23
pues simplemente cada objeto de estos tendría su otra casillita
00:08:28
para dirección de la empresa.
00:08:33
Tendría su otra casillita.
00:08:35
Y tendríamos el problema que hemos dicho antes,
00:08:37
que aquí tengo un montón de espacios para un dato
00:08:39
que es el mismo para todas ellas.
00:08:43
o que debería serlo si la aplicación está funcionando
00:08:46
correctamente, debería serlo, pues que invento
00:08:48
más malo, vale pues entonces
00:08:50
hemos dicho, vamos a solucionarlo
00:08:52
poniendo aquí este modificador
00:08:54
¿qué hacemos cuando ponemos
00:08:56
el modificador delante de la propiedad
00:08:58
de una clase?
00:09:00
pues automáticamente la sacamos de aquí
00:09:02
se va de ahí
00:09:04
se va de ahí
00:09:09
se hago más ya
00:09:13
vale, pero para eso tendría que ser más lista
00:09:18
Vale, entonces, y ahora
00:09:20
Se crea un espacio común
00:09:22
Como si fuera una variable global
00:09:25
Mal nombrado
00:09:27
Las variables globales no existen
00:09:29
Se crea un espacio común
00:09:30
Que es el que se llama
00:09:32
Dir
00:09:34
Empresa
00:09:36
¿Vale? Esto
00:09:47
Exacto, vale
00:09:49
Vale, pues entonces
00:09:57
Ahora
00:10:03
la variable, la propiedad
00:10:04
de esta static, esta propiedad
00:10:06
es accesible
00:10:08
desde los departamentos como cualquier
00:10:11
otra, pero me da igual poner
00:10:13
de uno punto dir empresa, que poner
00:10:15
de dos punto dir empresa, que poner
00:10:17
de tres punto dir empresa
00:10:19
porque en el momento en el que yo he puesto el static
00:10:20
delante
00:10:23
ha dejado de ser una propiedad
00:10:23
diferente para cada objeto
00:10:27
para convertirse en una única
00:10:29
compartida por todos
00:10:31
que tengo un mil departamentos
00:10:33
todos ellos
00:10:36
comparten este espacio común
00:10:37
pero si no le das un valor de fondo
00:10:39
al principio tienes que instanciarlo en una
00:10:41
en cualquiera
00:10:43
si yo quiero darle un valor yo puedo hacer
00:10:44
de uno punto de ir a empresa
00:10:47
y recibe el valor
00:10:48
y que luego hago de dos punto de ir a empresa
00:10:50
estoy haciendo al mismo sitio
00:10:52
la cambio para todos
00:10:54
claro entonces yo puedo cambiar
00:10:57
esto
00:10:59
me da igual desde D1.dir
00:11:00
empresa, que desde D2.dir
00:11:03
empresa, que desde D3.dir
00:11:05
empresa, que desde D20.000.dir
00:11:06
empresa, me da igual, porque
00:11:09
todos accedo al espacio compartido
00:11:10
luego así es la manera de asegurarme
00:11:12
de que esta propiedad
00:11:14
no es diferente para cada objeto
00:11:16
es una propiedad global que la comparten
00:11:18
todos, y todos tienen
00:11:21
el mismo valor en esa propiedad, todos
00:11:22
porque físicamente es el único
00:11:24
es un único espacio de memoria
00:11:26
¿vale? entonces por
00:11:28
ejemplo, si hacemos
00:11:30
aquí un main de prueba...
00:11:32
Aparte de estar mejor, también optimizas
00:11:35
el espacio a la hora de la aplicación.
00:11:36
Claro, y es que la aplicación ya tiene
00:11:38
sentido, porque esa es una información
00:11:40
que es para todos los departamentos.
00:11:42
No es diferente para cada uno.
00:11:44
Nunca haríamos static esta,
00:11:46
porque cada departamento
00:11:49
tiene su propio nombre.
00:11:50
Esta jamás. Pero esta
00:11:52
sí, porque todos los departamentos
00:11:54
comparten el valor de esa propiedad.
00:11:56
Y si uno está en esta empresa, el otro también
00:11:58
no tiene que estar, y el otro y el otro.
00:12:00
Entonces, si hacemos un main de pruebas por aquí,
00:12:02
cualquiera,
00:12:05
vale, pues entonces
00:12:16
vamos a crear un objeto
00:12:17
departamento,
00:12:19
¿vale? Este de aquí.
00:12:29
No tienes constructor sin parámetros
00:12:31
o...
00:12:33
Pero si lo he hecho en el mismo paquete o lo he hecho...
00:12:35
Ah, no, es que lo he hecho en otro paquete. Vale, pues le muevo
00:12:37
ahí. Vale.
00:12:39
Vale, creamos
00:12:42
un objeto departamento
00:12:43
de 1, vamos a hacer lo que hemos hecho
00:12:44
antes, y creamos
00:12:47
otro objeto departamento
00:12:49
de 2
00:12:50
vale, ahora mismo no tienen propiedades, tienen los
00:12:53
valores por defecto que dejaba los números
00:12:59
son 0, pero es como no tener nada, están sin inicializar
00:13:00
sus propiedades, vale
00:13:03
entonces yo ahora puedo hacer de 1 punto
00:13:05
a bueno, como
00:13:07
si, no, es que las propiedades
00:13:10
las propiedades estáticas
00:13:14
no se suelen
00:13:17
dar valor y recoger con get y set
00:13:19
las propiedades estáticas
00:13:23
normalmente como recogen constantes
00:13:24
recogen cosas, no siguen este criterio
00:13:27
de este convenio
00:13:29
de programación, a las variables estáticas
00:13:31
se les suele asociar
00:13:33
el modificador
00:13:35
public
00:13:37
y accedemos a ellas
00:13:37
directamente con el nombre
00:13:41
bueno, ahora vemos cómo
00:13:42
entonces las propiedades
00:13:43
static no tienen asociados get y set
00:13:46
podrían, pero por convenio
00:13:48
tiene muchísimo más sentido
00:13:50
si es una propiedad global
00:13:51
pues accedemos directamente
00:13:54
a esa propiedad
00:13:56
entonces vamos a seguir ese convenio
00:13:57
de programación, las propiedades static
00:14:00
no las accedemos con get y set
00:14:02
las hacemos públicas
00:14:04
pues entonces con este convenio
00:14:05
haciendo la pública en vez de privada
00:14:07
vamos a cambiar esa propiedad
00:14:09
pues entonces yo la cambio aquí
00:14:10
con
00:14:13
dirección empresa y pongo
00:14:14
pues donde sea
00:14:17
y ahora ha cambiado para todos, entonces si nosotros
00:14:18
ahora hacemos, muéstrame
00:14:23
la dirección
00:14:25
de la empresa
00:14:27
del otro departamento
00:14:28
del otro
00:14:31
me va a mostrar
00:14:32
esta, vale
00:14:35
está claro porque es una propiedad
00:14:39
global
00:14:41
todos comparten la misma
00:14:42
entonces me da lo mismo de uno punto
00:14:45
de ir a empresa que de dos punto de ir a empresa
00:14:47
me da igual, entonces las variables estáticas
00:14:49
recogen información
00:14:51
relativa
00:14:53
a una entidad porque
00:14:55
yo aquí lógicamente en la clase departamento
00:14:57
pondré información
00:14:59
relativa a los departamentos
00:15:01
si no que pinta ahí la información
00:15:03
relativa a los empleados, no
00:15:05
pues pondré información relativa
00:15:06
a los departamentos pero
00:15:09
como afecta a todos por igual
00:15:11
todos la van a compartir
00:15:13
pues en ese caso es estática
00:15:15
vale, en ese caso es estática
00:15:16
vale, entonces
00:15:18
como realmente da igual
00:15:20
que yo la llame con D1, que con D2
00:15:23
que con D3, da lo mismo que la llame así
00:15:25
pues la forma habitual
00:15:27
de llamar a las variables
00:15:29
estáticas no es con el nombre
00:15:31
de un objeto, sea el que sea
00:15:33
a las variables estáticas
00:15:35
se las llama
00:15:37
habitualmente
00:15:38
con el nombre de la clase sin más
00:15:41
departamento.dir
00:15:43
empresa
00:15:46
porque como son independientes del objeto
00:15:46
no dependen de ningún objeto
00:15:51
dir empresa no depende de ninguno
00:15:53
es independiente
00:15:55
claro
00:15:57
dir empresa no depende de ningún objeto
00:15:59
va por libre, no depende de ninguno
00:16:01
entonces
00:16:03
la podemos
00:16:04
llamar con el nombre de la clase sin más
00:16:06
no hace falta llamarla para un objeto en concreto
00:16:09
y esa es la forma de llamarla, de hecho aquí se me ha puesto
00:16:12
en amarillito porque me ha dicho
00:16:14
que cutre es estática, llámale
00:16:16
como se llaman las cosas estáticas, que es con el nombre
00:16:18
de la clase, que la puedo llamar
00:16:20
con el nombre de un objeto, pero se queda
00:16:22
más confuso, si yo la llamo así
00:16:24
claro, el que lee el código
00:16:26
si yo lo llamo así
00:16:28
el que lee mi código
00:16:30
se cree que cada departamento trabaja en una empresa distinta
00:16:31
y ya le estás dando información
00:16:34
confusa, sin embargo
00:16:36
el que lee mi código
00:16:38
porque tiene
00:16:39
ha heredado la aplicación
00:16:40
lee esto y dice
00:16:41
ah vale
00:16:42
todos los departamentos
00:16:42
trabaja en la misma empresa
00:16:44
le llega
00:16:45
una información
00:16:46
más real
00:16:47
entonces es mejor
00:16:48
llamarlo así
00:16:49
hasta aquí claro
00:16:50
hasta para ti Silvia
00:16:52
que te estás durmiendo
00:16:53
es que se está durmiendo
00:16:54
a ver
00:16:58
a mí me pasa
00:16:59
yo como vaya a escuchar
00:17:00
a alguien
00:17:01
a los 15 minutos
00:17:01
me estoy durmiendo
00:17:02
da igual lo interesante
00:17:03
que sea lo que diga
00:17:04
porque no tengo una carta de esas tuyas
00:17:06
bueno
00:17:11
entonces tanto es así
00:17:12
lo de que se le llame con el nombre de la clase
00:17:14
que hasta yo lo podría llamar
00:17:16
sin que existiera ningún objeto
00:17:18
imaginaos que no existe
00:17:20
ningún objeto, esto no existe
00:17:22
esto como era
00:17:24
así
00:17:26
así no, es que lo estaba cambiando
00:17:27
con el format, vale
00:17:30
imaginaos que no existe ningún objeto todavía, ninguno
00:17:31
pues yo hago esto
00:17:34
y me deja.
00:17:36
Y me diréis, pero si no hay ningún departamento.
00:17:38
¿De dónde ha salido esta variable?
00:17:41
Ah, es que las variables estáticas
00:17:42
las variables estáticas
00:17:44
pueden existir
00:17:48
aunque no existan
00:17:50
objetos de la clase en la que están.
00:17:52
Pueden existir
00:17:55
tranquilamente.
00:17:56
Entonces, ¿cuándo
00:17:58
arrancan a existir? ¿Cuándo la aplicación arranca?
00:17:59
No, no, no. Cuando la aplicación arranca, no.
00:18:02
¿Cuándo entran a
00:18:05
memoria. ¿Cuándo arrancan a la vida? Arrancan
00:18:06
a la vida la primera
00:18:08
vez que haces referencia a ellas.
00:18:10
Entonces, cuando este main mío ha arrancado,
00:18:12
esta variable todavía
00:18:15
no existía ni había nada ahí.
00:18:16
Pero desde el momento en que yo he hecho
00:18:19
ya departamento.ir
00:18:20
empresa igual a Barcelona, ya está.
00:18:22
Apareció esta variable
00:18:24
a la que le dimos un valor.
00:18:25
Pero estos objetos todavía
00:18:28
ni existen siquiera. No existen.
00:18:30
No pasa nada. Las variables
00:18:33
estáticas pueden existir aunque no estén los objetos.
00:18:34
que luego yo ahora creo un objeto
00:18:36
este de aquí
00:18:39
he creado un objeto
00:18:41
bueno, pues este objeto ya se ha enganchado
00:18:42
este objeto ya se ha enganchado a esa variable
00:18:45
estática, y si yo hago
00:18:47
de uno punto esto
00:18:49
pues efectivamente
00:18:52
de uno punto
00:18:55
diré empresa, me va a mostrar esto
00:18:57
¿vale? porque todos los objetos
00:18:59
estos, están
00:19:01
enganchados a esta, que nació
00:19:03
antes que ellos, pero están
00:19:05
enganchados a ella porque
00:19:07
están aquí.
00:19:09
Está aquí dentro esa variable. Dentro de la clase
00:19:11
de departamento. Está ahí dentro.
00:19:13
Entonces si yo hago...
00:19:15
¿Qué ocurrió?
00:19:17
¿Vale?
00:19:21
Si yo hago esto, pues aquí está.
00:19:21
Este es
00:19:24
el Barcelona de aquí.
00:19:25
Este.
00:19:28
¿Vale?
00:19:30
Es imprescindible.
00:19:33
Para muchísimas cosas.
00:19:36
vale, entonces normalmente
00:19:37
repito, las variables estáticas no las llamamos
00:19:41
con el nombre de un objeto, las llamamos con el nombre de la clase
00:19:43
porque me da igual llamarle con uno que con otro
00:19:45
que con otro, con el nombre de la clase
00:19:47
entonces las variables estáticas
00:19:48
siempre van en clases
00:19:51
porque todo va dentro de clases
00:19:53
en Java no puede haber nada nunca dentro de las clases
00:19:55
pero que representan
00:19:57
representan
00:20:00
una información
00:20:01
que es común para todos
00:20:03
y cada uno de los objetos de esa clase
00:20:05
¿vale? a diferencia de las otras propiedades
00:20:07
que cada objeto tiene
00:20:11
pues su pack por separado
00:20:12
entonces
00:20:13
para representar bien una situación
00:20:15
son imprescindibles
00:20:17
porque si nosotros no ponemos el static aquí delante
00:20:19
nos pasa lo que os he dicho antes
00:20:22
que entonces la aplicación tenemos que
00:20:24
nosotros llevar en cada main
00:20:26
tenemos que llevar el control de que
00:20:28
todas las propiedades de cada uno
00:20:30
tengan el mismo valor ahí
00:20:32
pues un rollo, mucho mejor si le pongo el static
00:20:33
y ya me da igual acceder
00:20:36
por D1 que por D2
00:20:38
que por departamento directamente
00:20:40
que accedo al mismo lado. ¿Está claro?
00:20:42
Claro, claro, claro.
00:20:48
Por eso hay un espacio de memoria.
00:20:50
Claro.
00:20:53
Claro, yo pongo
00:20:55
ahora D1.
00:20:56
Dirempresa
00:20:59
igual a esto.
00:20:59
A Olso.
00:21:03
Vale, nos hemos mudado a Olso.
00:21:04
Y ahora yo le digo,
00:21:07
Oye, departamento.dirempresa. ¿Cuál es la dirempresa de esta clase? Pues el Olso.
00:21:08
¿Y dónde está Olso?
00:21:20
Olso, pues en Noguera.
00:21:22
Obviamente casi a la mancha.
00:21:29
Está cerca de Villa Elvilla, de Pontejo.
00:21:33
Por ejemplo, tengo cinco departamentos.
00:21:35
A ver, entonces mi diseño no...
00:21:37
Entonces mi diseño no está muy bien hecho.
00:21:45
Entonces tendría que hacer...
00:21:47
¿Eh?
00:21:49
Si está en Noruega, 8.
00:21:49
¿8? ¿En serio?
00:21:51
¿En serio?
00:21:53
A ver si me digo que me he equivocado.
00:21:55
Qué poco viajás
00:21:58
estáis.
00:21:59
Vale, en esa situación
00:22:01
yo entonces, si hay departamentos
00:22:02
que pueden estar en su propia dirección,
00:22:05
tendré que hacer una propiedad para ellos
00:22:07
una cosa
00:22:09
¿cómo hago para leer un objeto?
00:22:10
¿qué? ¿cómo haces para leer un objeto?
00:22:14
sí, porque
00:22:15
en uno de los parámetros
00:22:16
de
00:22:18
el empleado
00:22:19
las variables estáticas
00:22:23
entonces, lo que tú me estabas diciendo
00:22:25
si en la realidad
00:22:26
que me ha explicado a mí el cliente de Appian Software
00:22:29
me dice que puede haber, que los departamentos
00:22:30
pueden estar en departamentos distintos
00:22:33
porque uno puede estar en otro, voy a tener que incluir una variable
00:22:34
no estática, con la dirección,
00:22:37
porque sí que habrá que poner la suya propia,
00:22:38
que luego además quiera incluir una estática
00:22:40
para la dirección por defecto
00:22:42
de los que no tengan una propia,
00:22:44
pues podría incluir una estática.
00:22:45
¿Vale?
00:22:48
Vale, pues entonces,
00:22:49
lo que es una variable estática está claro.
00:22:51
Pues creo que urra ahora
00:22:53
que el hecho de que existan variables estáticas
00:22:54
implica que también pueden existir métodos estáticos,
00:22:57
que eso sí que ya es la maravilla del mundo.
00:23:01
Que vamos a dejar para el lunes.
00:23:04
eso sí que es ya la maravilla del mundo
00:23:05
que eso nos va a facilitar
00:23:07
la vida muchísimo
00:23:13
los métodos estáticos
00:23:14
que sí, poquita cosa
00:23:17
no lo vamos a poner en práctica
00:23:19
haciendo nuestra propia librería
00:23:21
esa la hacemos el lunes
00:23:22
nuestra propia librería
00:23:23
y así nos da tiempo a mirar el main de Ana
00:23:26
que la pobre se ha esforzado y luego no se lo mira
00:23:28
hombre
00:23:30
vale, pues a ver
00:23:35
vale, pues que ocurriría
00:23:37
imaginaos que
00:23:40
queremos
00:23:41
imaginad
00:23:43
que queremos
00:23:47
un método, la aplicación necesita
00:23:47
en función de donde está
00:23:50
tu, la sede de tu empresa
00:23:52
quiero que me digas
00:23:54
el país, por ejemplo
00:23:56
vale, pues entonces ahí tiene sentido un método
00:23:57
con un switch case, si es
00:24:00
Olso, pues Rusia
00:24:02
si es no sé qué, pues no sé cuántos, tiene sentido un método
00:24:04
que me haga esa funcionalidad, ¿vale?
00:24:06
Pues, por ejemplo, ese método,
00:24:08
como es relativo a departamentos y empresas,
00:24:10
pues yo aquí me haría un método
00:24:12
public, no,
00:24:14
el static no, porque no sabemos lo que es,
00:24:21
public que me devuelva
00:24:23
string
00:24:25
devuelve get país
00:24:26
en función
00:24:29
de
00:24:31
la dirección de la empresa.
00:24:32
Entonces, aquí uno se haría,
00:24:35
pues, en función de la
00:24:37
ir a empresa, vamos a
00:24:39
distinguir dos países solo y ya
00:24:41
pues en el caso de que
00:24:42
la dirección de tu empresa
00:24:46
esté
00:24:48
en esta
00:24:50
pues entonces
00:24:53
vamos a ponerlo para no poner
00:24:54
tanto retún ahí queda muy feo
00:24:58
un result
00:25:00
igual a null
00:25:03
y ahora
00:25:06
en el caso de que esté
00:25:08
la capital de la empresa aquí
00:25:10
Pues resulta igual a
00:25:12
Rusia
00:25:15
Y Brek
00:25:17
No, Olso está en Rusia
00:25:18
Oslo está en Noruega
00:25:21
Claro
00:25:22
En el caso de que estés
00:25:27
En aquí
00:25:29
¿En qué país tendría que devolver?
00:25:30
Sin mirarlo al internet, venga, rápido
00:25:33
Berna
00:25:34
Rápido, país, no miréis internet
00:25:36
Verna
00:25:39
¿Quién ha dicho Suiza?
00:25:43
Muy bien
00:25:46
¿Eh?
00:25:47
Venga, pues
00:25:53
Devolveríamos Suiza
00:25:54
Vale
00:25:57
Y
00:25:59
En cualquier otro caso
00:26:01
Pues nada
00:26:06
result igual a
00:26:09
ni idea
00:26:12
y ya está
00:26:13
vale
00:26:16
o sea, ninguno habéis sabido
00:26:21
dónde estaba Berna
00:26:24
o sea, que geografía no se estudia
00:26:26
hoy en día
00:26:31
Ya, y aparte tú estudiarías
00:26:39
geografía latinoamericana.
00:26:41
Claro que no.
00:26:43
¿Sabes ubicar todos los países de Europa?
00:26:44
Seguro que no.
00:26:47
Pero vamos, seguro que no.
00:26:48
Sobre todo desde que se
00:26:51
dispersaron.
00:26:52
Y de África lo estoy intentando.
00:26:53
Hostia, de África ya déjalo.
00:26:55
Vale, entonces.
00:26:58
Y ahora me
00:27:00
falta aquí un retun
00:27:01
result.
00:27:02
Bueno, está claro este método, ¿verdad?
00:27:05
Está clarísimo, en función de la dirección
00:27:07
De la empresa
00:27:10
Por Dios
00:27:11
Vale, pues entonces
00:27:14
Vamos a hacer ahora
00:27:15
Nuestro main de prueba
00:27:18
En el cual yo me he creado un departamento
00:27:20
Bueno, he llamado a la empresa
00:27:23
Vale, me he creado el departamento este de aquí
00:27:24
De uno que está aquí creado
00:27:29
Vale, pues entonces
00:27:32
Queremos ver en qué país
00:27:35
está situado
00:27:36
a esa empresa. Pues
00:27:39
este método de toda la vida del
00:27:40
señor, que es lo que nosotros sabemos,
00:27:43
hay que llamarlo asociado a un objeto.
00:27:45
¿Verdad? Todos los métodos de una
00:27:47
clase se llaman asociados a un objeto.
00:27:49
¿Vale? Pues vamos a...
00:27:51
Tenemos mi objeto departamento de uno
00:27:53
aquí creado. Voy a borrar esto para que
00:27:55
se vea bien. Que ya casi con esto terminamos.
00:27:57
Un poquito de paciencia.
00:27:59
No, faltan
00:28:02
11 minutos. Entonces,
00:28:03
tenemos nuestro departamento de uno.
00:28:04
Eso
00:28:06
Ahora, queremos ver en qué país está
00:28:08
Pues hacemos
00:28:11
Vamos a mostrar el resultado
00:28:13
De d1.get
00:28:15
País
00:28:17
Vale, y tenemos claro
00:28:19
Que me va a mostrar Rusia, ¿no?
00:28:21
Porque he puesto lo que la capital es Solso
00:28:22
Vamos a ver
00:28:24
Sí, me muestra Rusia
00:28:25
Si esto mismo lo hiciéramos diciendo
00:28:29
Oye, espera, no, es que nos hemos mudado a Berna
00:28:31
Vale, nos hemos mudado a Berna
00:28:34
pues me va a decir
00:28:36
estás en Suiza, vale
00:28:40
hasta ahí está claro, ¿no? pero
00:28:42
esto no era todo
00:28:44
vale, pues ¿de qué nos damos cuenta?
00:28:46
que yo puedo tener mil departamentos
00:28:49
me da igual
00:28:51
qué objeto llame al método get país
00:28:52
¿verdad? me da igual que lo llame de uno
00:28:54
que lo llame de dos, que lo llame de tres
00:28:57
¿por qué? porque este
00:28:58
método get país tiene la particularidad
00:29:00
y esto es lo más
00:29:03
interesante de la clase de hoy
00:29:04
este método que te veo
00:29:06
Juan hoy
00:29:08
todo el día con la cara
00:29:10
angustiada, espero que no refleje
00:29:12
tu estado anímico
00:29:14
vale, bueno, aunque parezca que no, yo creo que algo
00:29:15
os quedará
00:29:28
algo os quedará
00:29:28
vale
00:29:30
vale, pues entonces
00:29:32
esto es lo más importante
00:29:36
intentad entender esto último
00:29:37
intentad entender esto último, a ver
00:29:40
y si entendéis esto me voy
00:29:42
y no vuelvo por lo menos hasta el lunes
00:29:44
así que
00:29:46
entonces
00:29:48
a ver
00:29:52
este método tiene la particularidad
00:29:53
de que
00:29:56
la única propiedad que usa
00:29:58
de la clase departamento
00:30:00
la única que usa
00:30:02
es de ir a empresa
00:30:04
que resulta que es común
00:30:05
para todos los departamentos.
00:30:08
Con lo cual, me da igual que a GetPais
00:30:10
lo llame de 1, que lo llame de 2,
00:30:12
que lo llame de 3, porque
00:30:15
tanto para de 1 como para de 2, para de 3,
00:30:16
para todos, Vir Empresa es la misma.
00:30:18
Luego, me da igual
00:30:21
llamar a GetPais
00:30:22
me da igual
00:30:23
llamar a GetPais con de 1,
00:30:26
que me da
00:30:29
igual llamar a GetPais con de 2
00:30:30
si es que de 2 existe,
00:30:32
que con D3 me da lo mismo
00:30:33
porque ese método get país
00:30:36
tiene la particularidad de que la única propiedad
00:30:37
a la que accede es estática
00:30:39
y por tanto es igual para todos
00:30:41
con lo cual
00:30:42
este método
00:30:45
automáticamente en cuanto yo
00:30:46
me doy cuenta
00:30:49
de que este método
00:30:50
solo usa propiedades estáticas
00:30:54
con lo cual
00:30:56
me da igual el objeto que lo llame
00:30:57
porque va a hacer lo mismo
00:30:59
para todos, desde el momento que yo me doy
00:31:01
cuenta de eso digo
00:31:03
anda, entonces este método es
00:31:04
también estático
00:31:07
y se lo planto ahí
00:31:09
y me quedo tan a gusto
00:31:11
y diréis que has ganado
00:31:13
poniendo el estático, primero la satisfacción
00:31:15
personal de haberme dado cuenta
00:31:17
de que este método solo usa
00:31:19
variables estáticas, con lo cual
00:31:21
me da igual quien lo llame
00:31:23
eso lo convierte en estático y ahora ya he ganado
00:31:24
aparte de la satisfacción personal
00:31:27
he ganado la posibilidad
00:31:29
de llamarle con el nombre
00:31:32
de la clase
00:31:34
ya no hace falta llamarle con un objeto
00:31:34
en concreto
00:31:38
antes, cuando yo no tenía puesto
00:31:38
el modificador static, el método
00:31:42
hacía lo mismo, es igual, no pasa nada
00:31:44
la aplicación me va a funcionar igual porque todo hace lo mismo
00:31:45
porque todo hace lo mismo
00:31:48
pero tengo que tener
00:31:49
un objeto y llamarlo con
00:31:52
un objeto, y pues que tontería
00:31:54
porque tengo que llamarlo con un objeto
00:31:56
Si me da igual con qué objeto lo llames y voy a hacer lo mismo en todos.
00:31:57
¿Qué tontería? Prefiero llamarlo con el nombre de la clase.
00:32:01
Pero para que el compilador te deje llamarlo con el nombre de la clase,
00:32:04
tienes que poner el static.
00:32:09
Si pones el static, entonces ya te deja llamarlo con el nombre de la clase.
00:32:12
¿Vale?
00:32:19
Entonces, un método estático es un método que no depende de las propiedades concretas de un objeto.
00:32:20
un método estático no depende
00:32:26
de cosas concretas del objeto
00:32:29
no depende ni de su nombre ni de su director
00:32:31
no depende de cosas concretas
00:32:33
depende de información que es global para todos
00:32:35
con lo cual no depende de un objeto en concreto
00:32:37
no depende de un objeto
00:32:39
porque lo único que toca
00:32:41
es lo que es global para todos
00:32:42
eso es un método estático
00:32:44
entonces cuando nos damos cuenta de que un método es así
00:32:46
le ponemos el static delante
00:32:48
y eso nos permite
00:32:50
llamarlo ya sin necesidad
00:32:53
de que exista ningún objeto
00:32:55
yo llamo a departamento get país
00:32:56
y este irá a la variable global
00:32:58
que ya sabemos que puede existir
00:33:01
aunque no existan los objetos
00:33:02
y hará lo que sea con esa variable global
00:33:04
independientemente de
00:33:06
el objeto, de los objetos que existan
00:33:08
y esto que permite
00:33:11
pues me permite hacer
00:33:13
lo que llamamos
00:33:14
funciones de librería, es decir, utilidades
00:33:16
cosas que no dependen de objetos
00:33:18
y ahí ya me hago mis librerías y mis cosas
00:33:20
pero eso ya es lunes
00:33:22
¿ha quedado claro?
00:33:23
Bueno, pues os lo miráis, por favor.
00:33:26
- 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:
- 12
- Fecha:
- 13 de diciembre de 2024 - 18:10
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 33′ 31″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 143.07 MBytes