Saltar navegación

20241213 POO-Clases-Ejer_5_incluye_static - 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 13 de diciembre de 2024 por Raquel G.

12 visualizaciones

Descargar la transcripción

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
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
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
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

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid