20241216 POO-Clases-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:
Ve, hagamos de una cosa muy bonita, que sí, que os va a gustar mucho. Vale, pues entonces, en el ejercicio este 21 que habíamos visto el otro día las clases empleado, departamento y el main, pues no llegamos a mirarlo, habíamos dicho, claro, ahora ya nuestra clase tiene dos tipos de propiedades, propiedades como estas que no tienen static y esta que sí que lo tiene.
00:00:00
Entonces ya sabemos lo que significa esto, que estas propiedades de aquí implican que cada objeto departamento, cada objeto tiene su propio nombre, su propio director y su propio array de empleados.
00:00:29
Cada objeto departamento tiene el suyo propio
00:00:42
Pero al aparecer esta propiedad aquí
00:00:44
Y tener el static delante
00:00:48
Significa que todos los objetos departamento
00:00:51
Todos acceden a la misma propiedad
00:00:55
Dirección empresa
00:01:00
Porque es compartida por todos
00:01:00
¿Vale?
00:01:02
No, no es que sea el par, es una propiedad compartida
00:01:06
Sin embargo, nombre, ¿tiene cada uno su nombre?
00:01:09
cada uno su director
00:01:11
y cada uno sus empleados
00:01:13
y sin embargo
00:01:15
dirección empresa es una variable que está ahí
00:01:17
compartida por todos los objetos
00:01:19
entonces por eso en este
00:01:22
main de pruebas que hicimos
00:01:23
pues me da igual hacer
00:01:25
de uno punto dir empresa
00:01:27
que hacer de dos punto
00:01:29
dir empresa me da igual porque dir empresa
00:01:31
es la misma variable para todos
00:01:33
compartida
00:01:35
entonces como daba igual el objeto que la llamara
00:01:36
daba igual, pues la forma habitual de llamar
00:01:39
las variables estáticas es con el nombre de la clase
00:01:41
porque me da igual el objeto que la llame
00:01:43
que yo la llamo con de 1
00:01:45
me da igual, estoy accediendo al mismo sitio
00:01:47
me da exactamente igual
00:01:49
como si la llamo con otro objeto departamento
00:01:51
de 2 que he hecho por aquí
00:01:53
me da lo mismo decir de 1.empresa
00:01:55
que de 2.empresa me da igual
00:02:01
porque esta es la variable compartida por todos
00:02:03
entonces como me da igual
00:02:04
la puedo llamar así
00:02:06
y de hecho
00:02:08
lo que habíamos dicho es que podemos incluso
00:02:10
llamar a esta variable, aunque no
00:02:13
existan
00:02:15
objetos departamento, aunque no
00:02:15
exista ninguno.
00:02:18
Desde el momento en que
00:02:20
llamamos a la variable dirEmpresa
00:02:22
con el nombre de la clase, esa variable
00:02:24
aparece ahí. Y es una variable
00:02:26
fuera de cualquier objeto,
00:02:28
completamente fuera de cualquier objeto.
00:02:30
¿Vale? Es una variable global.
00:02:33
No pertenece a ningún objeto
00:02:35
y a la vez pertenece a todos, porque todos
00:02:36
lo comparten.
00:02:38
¿Vale? Entonces
00:02:40
¿Por qué la hemos ubicado aquí?
00:02:42
Dentro, bueno
00:02:46
Porque es una información relativa a los departamentos
00:02:46
Entonces los temas de diseño no se nos tienen que olvidar
00:02:49
Y los temas de diseño
00:02:51
Significan qué propiedades les doy a las clases
00:02:53
Qué clases hago
00:02:55
Todo lo que estáis trabajando en
00:02:56
Bases de datos, pues aquí igual
00:02:59
Pues hombre, dirección empresa
00:03:00
Tiene que ver con dónde están los departamentos
00:03:02
Pues dónde pongo esa variable
00:03:05
No la puedo poner fuera de todas las clases
00:03:07
Porque ahí no se puede poner nada en Java
00:03:08
pues la pongo dentro de la clase departamento
00:03:09
pero me acuerdo del static
00:03:12
porque no está asociada a ningún objeto
00:03:14
no está asociada
00:03:16
va por libre
00:03:17
y accedo a ella a través del nombre de la clase
00:03:18
¿vale?
00:03:21
entonces precisamente como no va asociada a ningún objeto
00:03:23
pues dijimos que a las propiedades
00:03:26
estáticas
00:03:28
no es convenio de programación
00:03:29
que se acceda a ellas con getty set
00:03:32
se las pone public
00:03:34
y punto pelota
00:03:35
no hay get y set, entonces accedemos
00:03:37
directamente con el nombre de la clase
00:03:39
punto la propiedad
00:03:41
o de uno punto propiedad o de dos
00:03:42
punto propiedad, me da igual
00:03:45
si es que de uno y de dos existen
00:03:47
vale
00:03:49
entonces, si hay
00:03:49
propiedades estáticas
00:03:57
inicializada, te refieres
00:03:59
bueno, si en ese momento
00:04:06
si tiene un valor inicial por defecto, si
00:04:08
aquí no lo hemos inicializado
00:04:10
depende de la aplicación, depende
00:04:11
Podríamos, podríamos aquí inicializarla, darle un valor y ya está, ¿vale? Depende de los requisitos de la aplicación. Vale, entonces, el modificador estático aplicaba tanto a propiedades como a métodos. Por ejemplo, aquí habíamos hecho un método, este de aquí, que lo hicimos, un método para devolver el país en el que estaba la empresa según la ubicación.
00:04:13
Entonces, este método
00:04:41
Para devolver el país al que pertenece la empresa
00:04:44
Según la ubicación
00:04:47
De la
00:04:49
De la empresa
00:04:50
La única propiedad a la que necesita acceder
00:04:52
Es a esta
00:04:55
La única, ¿vale?
00:04:56
Luego este método
00:04:59
No depende para nada del objeto
00:05:01
Que lo llame
00:05:03
Lo puede llamar cualquier objeto
00:05:04
No depende para nada del objeto que lo llame
00:05:06
Lo puede llamar cualquiera
00:05:07
lo puede llamar
00:05:08
de uno punto get país
00:05:10
o lo podría llamar
00:05:12
de dos punto get país
00:05:14
nos da igual el que lo llame
00:05:16
porque el objeto que lo llame va a hacer lo mismo
00:05:17
que es mirar
00:05:20
la variable común estática
00:05:22
y devolver el país
00:05:24
entonces como nos da igual
00:05:25
los métodos estáticos
00:05:26
no se llaman con un objeto
00:05:29
se pueden llamar pero
00:05:32
es mucho más claro para el código
00:05:33
si los llevamos directamente con el nombre de la clase
00:05:36
entonces a los métodos
00:05:38
estáticos se les llama
00:05:40
muchas veces métodos de librería
00:05:43
porque son métodos para hacer utilidades
00:05:44
independientes de cualquier objeto
00:05:46
son utilidades independientes de cualquier
00:05:48
objeto porque son
00:05:50
funciones, métodos
00:05:51
que no trabajan con
00:05:54
propiedades concretas de un objeto
00:05:56
no trabajan con propiedades concretas de un objeto
00:05:58
luego son como métodos para hacer
00:06:00
funciones auxiliares, utilidades
00:06:02
por ejemplo
00:06:04
Por ejemplo, vamos a hacer aquí un proyecto, para no liar tanto, un proyecto pues matemáticas, porque resulta que nos vendría bien, por ejemplo, nosotros hicimos en su momento el código para ver si un número es primo o no es primo, el código para ver si un número es triangular o no es triangular,
00:06:05
para calcular el factorial de un número
00:06:34
hicimos ciertos
00:06:38
algoritmos para calcular
00:06:39
funciones matemáticas
00:06:41
entonces si resulta que nosotros queremos hacer
00:06:43
esas cosas varias veces
00:06:45
pues vamos a meterlos en unos métodos
00:06:47
de estos y los llevamos cada vez que queramos
00:06:49
por ejemplo
00:06:51
vamos a hacernos una clase
00:06:53
utilidades matemáticas
00:06:55
Matemáticas
00:06:57
A ver, no tengo por qué crear el paquete
00:06:58
Pero bueno, voy a crear un paquete, no es obligatorio
00:07:05
Pero bueno
00:07:07
No tiene por qué haber siempre un paquete
00:07:08
Puedes trabajar en
00:07:11
Vale, pues vamos a hacernos un paquete que sea
00:07:12
Utilidades
00:07:15
Y dentro del paquete utilidades
00:07:16
Vamos a hacernos
00:07:20
Una clase
00:07:25
Que sea
00:07:26
Matemáticas, para ser utilidades
00:07:27
matemáticas
00:07:30
vale, venga pues por ejemplo
00:07:31
a mi resulta que me va a
00:07:36
interesar en un montón de sitios
00:07:38
de mi proyecto, de mis aplicaciones
00:07:40
que estoy haciendo por ahí, que estoy haciendo en mis aplicaciones
00:07:42
distintas, me va a interesar muy
00:07:44
a menudo saber si un número es primo o no
00:07:46
porque estoy haciendo aplicaciones de
00:07:48
criptografía, de lo que sea y necesito saber
00:07:50
si un número es primo o no
00:07:52
pues vamos a hacernos una función
00:07:53
un método, ahora ya no uso la palabra
00:07:55
función, un método que
00:07:58
me diga
00:08:00
sí o no en función de si un número
00:08:02
que yo le paso por
00:08:04
teclado es primo o no es primo
00:08:06
vale, esto ya
00:08:08
esta función
00:08:10
este código lo he hecho un montón de veces
00:08:12
entonces bueno
00:08:14
podemos hacerla
00:08:15
hacerla así
00:08:18
rápidamente otra vez
00:08:20
asumo que de partida
00:08:22
es primo, pero si encuentro
00:08:24
un divisor
00:08:26
si encuentro
00:08:27
un divisor
00:08:30
entre 2 y n-1 que lo divida, pues exprimo será falso.
00:08:31
If n dividido entre i es igual a 0,
00:08:50
entonces exprimo igual a falso.
00:08:58
Y ahora, return exprimo.
00:09:04
Vale, pues ahora ya un algoritmo de estos
00:09:09
os tiene que salir de corrido y bien hecho
00:09:11
y prácticamente sin pensarlo, porque esto ya lo hemos
00:09:16
hecho, ya hemos explicado
00:09:17
programación estructurada
00:09:20
hemos explicado
00:09:21
algoritmia relacionada con sumas
00:09:22
con contar, con ver si algo ocurre o no ocurre
00:09:25
todo eso lo tenemos hiper mega explicado, entonces bueno
00:09:27
este código debería salirnos de corrido
00:09:29
y si no, pues tenemos que estudiar
00:09:31
desde el principio y ponernos
00:09:33
ponernos otra vez
00:09:36
las pilas, vale
00:09:37
bueno, pues ya está, hemos hecho una función
00:09:39
un método maravilloso
00:09:41
un método maravilloso al que yo le paso un número
00:09:43
y me devuelve true, si es primo, y false, si no.
00:09:45
¿Vale?
00:09:51
Ahora, yo este método lo quiero usar
00:09:54
desde cualquier sitio del mundo mundial.
00:09:56
Desde cualquier sitio del mundo mundial.
00:10:00
Entonces voy y pienso, anda,
00:10:02
¿qué particularidad tiene este método?
00:10:04
Que no está usando ninguna propiedad de la clase.
00:10:07
De hecho, no podría aunque quisiera,
00:10:11
porque la clase no tiene propiedades.
00:10:12
pero no está usando ninguna propiedad de la clase
00:10:14
ninguna, con lo cual este método no depende para nada
00:10:18
de un objeto matemáticas concreto
00:10:21
no depende para nada
00:10:24
entonces cuando yo me doy cuenta
00:10:25
cuando escribo un método
00:10:28
de que ese método no depende para nada de propiedades de la clase
00:10:32
pues digo, anda, es estático
00:10:36
voy y se lo pongo
00:10:38
es estático
00:10:41
y que he ganado
00:10:42
poniendo static
00:10:45
que ahora ya voy a poder llamar a ese método
00:10:46
tranquilamente con el nombre
00:10:48
de la clase matemáticas.exprimo
00:10:51
como si fuera una función de librería
00:10:53
para hacer lo que yo quiera
00:10:54
¿vale? por ejemplo yo ya tengo aquí
00:10:55
esto, vamos a meter otra función más
00:11:00
para que sea una clase
00:11:02
con métodos de librería
00:11:04
por ejemplo
00:11:06
pues vamos a hacer el factorial de un número
00:11:07
aunque esté en otro proyecto
00:11:10
ahora lo vemos, si está en otro proyecto
00:11:12
también, pero habría que ver
00:11:14
cómo, ahora lo vemos, ¿vale?
00:11:16
y n, venga, vamos a hacernos el
00:11:22
factorial de un numerito n
00:11:24
esto es el factorial de una multiplicación acumulativa
00:11:25
pues si era una
00:11:28
multiplicación acumulativa, pues la multiplicación
00:11:30
acumulativa se inicializa en 1
00:11:32
y ahora ya, pues podemos
00:11:33
hacer, while n
00:11:36
sea mayor o igual que 1
00:11:38
pues hacemos
00:11:40
mul por igual
00:11:42
n y a n lo dejamos decrementado
00:11:44
y ahora ya devolvemos
00:11:47
como no está pedro, no voy a poner
00:11:50
ni una sola llave si es que no hace falta
00:11:52
devolvemos mult
00:11:53
vale
00:11:56
algoritmo parece el factorial
00:11:58
multiplicamos
00:11:59
el número primero
00:12:01
por n
00:12:04
luego por n-1, por n-2, por n-3
00:12:05
así mientras n sea mayor o igual que 1
00:12:08
si me dan el 0
00:12:10
pues me va a devolver
00:12:16
uno, que es el factorial de cero. Estupendo.
00:12:18
Claro. O sea, ese caso
00:12:20
peculiar
00:12:22
tenemos la suerte de que lo satisfacemos.
00:12:23
El factorial de cero es uno.
00:12:25
Vale. Pues...
00:12:31
Pues ya está. Ahora estas dos funciones
00:12:33
es primo y es factorial.
00:12:40
Punto importantísimo. Nos hemos dado cuenta
00:12:42
de que no dependen de ninguna propiedad
00:12:44
de la clase. Luego son independientes
00:12:46
de que exista
00:12:49
un objeto matemática. Son independientes.
00:12:50
no dependen de ninguna propiedad, porque repito
00:12:52
la clase no tiene ni propiedades, ¿cómo puede depender?
00:12:54
te aburro mucho, ¿verdad?
00:12:56
me lo dicen mucho
00:12:58
entonces, como me he dado cuenta de eso
00:12:59
pongo el static delante
00:13:02
¿vale?
00:13:04
y ahora ya, poniendo el static
00:13:06
delante, ¿qué puedo hacer?
00:13:08
pues ahora yo estoy haciendo mis clases matemáticas
00:13:09
por ahora aquí dentro
00:13:12
yo tengo aquí ahora ya un programita que hace cosas
00:13:13
¿dime?
00:13:16
¿hará falta el public?
00:13:19
cuando lo use fuera de la clase, ahora mismo
00:13:20
Yo me voy a hacer mi main aquí mismo
00:13:22
En utilidades, ¿vale?
00:13:24
Entonces, primer paso
00:13:26
Venga, pues me voy a hacer aquí una clase main
00:13:28
Que haga cosas con matemáticas
00:13:30
Por ejemplo
00:13:32
Pues yo ahora le digo a este
00:13:35
Pues nada, bueno, para que quede un programa
00:13:37
Con un poco de sentido
00:13:52
Pues le podemos decir
00:13:54
¿Qué quieres hacer?
00:13:55
Y le digo, oye, dime
00:14:07
Uno si quieres hacerlo de número primo
00:14:09
Y dos
00:14:12
Si quieres hacerlo del factorial
00:14:16
Por ejemplo
00:14:17
Venga que quieres hacer
00:14:18
Primo o factorial
00:14:21
Elige
00:14:22
Pues entonces ahora ya leo la opción
00:14:24
Eee
00:14:27
El scan punto
00:14:31
Next line
00:14:34
Punto char
00:14:39
At
00:14:41
Cero
00:14:43
Y ahora ya, pues ahora ya en función de lo que me haya dicho
00:14:44
Pues ya está
00:14:47
Dime
00:14:48
A ver, porque me estoy quedando
00:14:56
Él se supone que le ha metido uno o dos
00:14:59
Pues yo me quedo con el primer carácter
00:15:02
De lo que ha metido
00:15:03
Ah, vale, vale, sí, bueno
00:15:04
Podría luego comparar con el número entero
00:15:07
Que codifica el uno y el dos
00:15:09
Pero tendría que mirar la tabla ASCII
00:15:11
Entonces, vale, bien apuntado
00:15:12
Más cómodo si lo pongo en charas y comparo
00:15:14
Bueno, aunque ponga linda igual
00:15:16
Podría comparar con la cadena
00:15:19
Yo se lo pongo un int y pido que sea un int
00:15:20
Bueno, da igual
00:15:23
Vamos, pero
00:15:25
Y luego lo arreglo
00:15:25
Pues con un int
00:15:28
Sí, cada uno, pues como se apañe mejor
00:15:29
Bueno
00:15:32
En el caso de que me hayan dicho uno
00:15:33
Pues ahora le diré
00:15:37
Oye, dame el número
00:15:38
Dame el número
00:15:42
Y ahora leemos el número
00:15:47
Leemos el número
00:15:49
Y ahora es cuando con este número
00:15:58
tenemos que decir si es primo
00:15:59
o no es primo
00:16:02
¿qué ocurre? que tenemos aquí en la clase
00:16:02
matemáticas
00:16:06
un método
00:16:07
al que si yo le paso un número entero
00:16:09
me devuelve true o false el número es primo
00:16:12
¿no? que es justo lo que quiero
00:16:14
y además como ese método es static
00:16:15
lo puedo llamar con el nombre de la clase
00:16:17
pues perfecto
00:16:20
ala, me hago esto
00:16:22
matemáticas
00:16:24
punto
00:16:26
es primo, y le paso el numerito
00:16:29
esto me devolverá true o false
00:16:32
bueno, pues ya está, lo meto en un if
00:16:35
ala, pues ya está
00:16:37
he llamado
00:17:05
de la manera estática
00:17:07
que es la que le tengo que llamar
00:17:09
al método es primo
00:17:10
y no me he tenido que crear ningún objeto matemáticas
00:17:13
en ningún momento, no ha hecho falta
00:17:15
no me lo he tenido que crear
00:17:16
porque este método es estático, no necesita
00:17:17
que exista un objeto para ser llamado
00:17:21
no lo necesita, entonces yo puedo
00:17:22
llamar a exprimo con el nombre de la clase
00:17:25
y magnífico
00:17:26
le paso el numerito y sé que me va a
00:17:29
devolver un true o un false en lugar
00:17:31
de ese exprimo, no exprimo
00:17:32
luego de alguna manera lo que hacemos con
00:17:34
métodos estáticos es que tenemos la
00:17:36
opción de hacer como métodos
00:17:39
que hacen utilidades
00:17:41
métodos tipo librería que no
00:17:42
hacen cosas con un objeto en concreto
00:17:44
sino como utilidades genéricas
00:17:46
es una de sus utilidades, claro
00:17:48
vale porque
00:17:50
Os veo copiar ahí muy copistas, pero no sé si lo estáis enterando.
00:17:54
Vale.
00:18:03
Entonces, bueno, pues el caso 2 sería lo mismo.
00:18:04
En el caso 2, en este caso, dame el número.
00:18:17
Ya tengo declarada la variable y ahora
00:18:20
ya vamos a mostrar el factorial directamente.
00:18:21
Gracias a que tenemos un método estático en la clase matemáticas
00:18:26
que me calcula el factorial de un número
00:18:30
pues yo lo llamo
00:18:33
tranquilamente
00:18:34
una duda, aquí en el caso de switch case
00:18:36
que tú tienes inicializado la variable num
00:18:38
en el caso 1
00:18:40
si nunca se ejecuta el caso 1
00:18:41
sigue inicializado, ¿vale? igualmente
00:18:44
sí, porque
00:18:45
a ver, porque
00:18:46
hay un único bloque
00:18:51
el switch se abre aquí en un único bloque
00:18:52
otra cosa es que tú abrías otro dentro
00:18:55
pero si no abres ninguno dentro
00:18:56
dentro del case no hay un bloque
00:18:58
que hay un único bloque.
00:19:00
Entonces, el compilador, o sea, cuando genera el .class,
00:19:01
efectivamente, ya genera espacio
00:19:06
para todas las que estén declaradas en ese bloque.
00:19:08
Claro, en cuanto la máquina virtual
00:19:19
tiene que ejecutar una sentencia que está en un bloque,
00:19:21
todas las variables declaradas en ese bloque
00:19:25
habrá creado espacio para ellas,
00:19:27
aunque no haya pasado por su ejecución.
00:19:29
Aunque no haya pasado por su ejecución.
00:19:31
Entonces, vale.
00:19:34
Y aquí después de los next in
00:19:40
Como luego hay un
00:19:43
Ah no, porque no hay bucle, da igual
00:19:43
Solo lo deja hacer una vez
00:19:45
Pues ya está, entonces nosotros aquí tan apañados
00:19:46
Venga, dame el número
00:19:52
Este es primo
00:20:00
Pues sí, es primo
00:20:01
Vamos a
00:20:03
Venga, dame el factorial de 54
00:20:08
Buf, me he pasado, me he pasado
00:20:11
No va a tener
00:20:13
Ah, es que no lo he puesto en un siso
00:20:14
Pero ha terminado
00:20:17
Ah no, es que le he dado 54
00:20:18
Estoy gilipichis
00:20:20
A ver, 2
00:20:21
Dame el número
00:20:23
65
00:20:24
Sí que he hecho bien la función
00:20:25
El factorial de 65
00:20:29
Es 0
00:20:31
Vamos a ver
00:20:32
Función factorial
00:20:35
Vale, multiplicando
00:20:39
Lo va multiplicando por n
00:20:50
y luego lo deja decrementado para la siguiente
00:20:51
entonces multiplica
00:20:53
está bien, ¿no?
00:20:54
factorial de num
00:21:17
dame el número
00:21:18
2, dame el número 4
00:21:19
pues será que es muy alto
00:21:25
pero no, es mucha casualidad
00:21:27
ya, pero entonces lo que debería
00:21:29
es desbordar y no dar
00:21:34
un cero, sin más
00:21:36
debería desbordar el int y ya está
00:21:37
es que ha sido mucha casualidad atinar con el que desborde
00:21:39
y se queda en cero
00:21:46
por ejemplo, había puesto 64 antes
00:21:46
voy a poner 64
00:21:50
a partir de cierto ya da cero siempre
00:21:52
No, porque me da mucha manía
00:21:55
Lo de buggeáis vosotros
00:22:07
Odio el de buggear, ¿eh?
00:22:08
Que no, que no, que sé ejecutar en modo de bug
00:22:10
Y sé ver las variables
00:22:13
Sé poner puntos de ruptura, todo eso lo sé hacer
00:22:14
Pero me da una pereza
00:22:16
¿Qué paso?
00:22:18
50
00:22:21
Con 50 sigue siendo 0
00:22:22
A ver, 2
00:22:24
vale, aquí ya ha desbordado
00:22:26
entonces, a partir de cierto
00:22:29
número
00:22:31
vale, es que el desbordamiento a partir de cierto número
00:22:32
como se queda con la parte menos significativa
00:22:37
el resto no son ceros, pero esa parte
00:22:39
sí, entonces empieza
00:22:41
a dar, pero llegará un momento, si no lo pone uno
00:22:43
muy grandote, que vuelva a dejar
00:22:45
de ser cero
00:22:47
ah, pues sí, porque ha
00:22:48
desbordado el int
00:22:51
o sea, las multiplicaciones, y se ha salido de los
00:22:53
32, entonces
00:22:55
el significado que te muestra ya ha perdido su sentido
00:22:57
necesitaríamos 64 bits
00:22:59
para mostrarlo
00:23:01
entonces a partir de cierto desbordamiento
00:23:02
se
00:23:05
uy no, no, no
00:23:06
dame el número, ah no, es que me he pasado de largo
00:23:10
es que no cabe en un entero, claro
00:23:18
bueno, se podría
00:23:20
pero bueno, a ver, no es lo que nos interesa ahora
00:23:25
si queréis jugar con esto, jugáis vosotros
00:23:28
¿vale? pero vamos
00:23:30
lo que está claro es que el único problema
00:23:32
es que si el factorial es mayor de lo que
00:23:34
cabe en 32, el resultado no es válido, ya está
00:23:36
desbordado y no es válido
00:23:38
entonces
00:23:40
si el factorial es mayor que el int
00:23:40
más value, pues
00:23:44
no va a dar un valor
00:23:45
un valor consentido, claro
00:23:48
no, no, no, no, porque
00:23:53
no, a ver
00:24:00
es que tendrías tú que hacer tú tus cuentas
00:24:03
para saber cuál es el número
00:24:05
que te llega al
00:24:07
integer max value
00:24:09
y cuando lo supieras
00:24:11
decirle si el número es mayor
00:24:13
igual que este, pues no hagas el factorial
00:24:15
porque te has pasado, que podríamos
00:24:17
llegar a encontrar cuál es ese número
00:24:19
haciendo pruebas viendo cuando empieza
00:24:20
a ser negativo, claro
00:24:23
o se hace un for
00:24:25
y la primera vez que le sale negativo
00:24:27
o más que
00:24:29
negativo, que le sale menor que el anterior
00:24:31
pues ahí es donde ha desbordado
00:24:33
vale, bueno, pues entonces
00:24:34
lo que nos interesa a nosotros
00:24:37
vale, pues ya está
00:24:40
nos hemos hecho aquí unas funciones de librería
00:24:41
ahora, nosotros las hemos
00:24:43
usado desde un main
00:24:45
que está en el mismo paquete
00:24:47
por eso, no me he
00:24:49
preocupado yo por el public
00:24:51
pero claro, si nosotros queremos
00:24:53
usar estos métodos
00:24:55
desde clases que están fuera del paquete
00:24:57
pues ya sabemos que entonces tendríamos que añadir
00:24:59
el public, ¿verdad?
00:25:01
Es decir, ahora ya como he añadido el public, si yo quiero usar estas utilidades desde otro paquete, por ejemplo, voy a hacerme otro paquete distinto, pues app mates, yo que sé, otro paquete distinto y aquí ya voy a hacer el main.
00:25:03
copio este main
00:25:26
y lo pego aquí
00:25:31
vale
00:25:35
vale, entonces ahora ya estoy
00:25:36
en otro paquete, vale
00:25:45
estoy en otro
00:25:46
en el paquete main que está en este otro de aquí
00:25:48
vale, aquí
00:25:51
entonces si yo
00:25:52
desde este main que está en otro paquete
00:25:55
diferente al que está mi clase de matemáticas
00:25:56
quiero usarlo
00:25:59
pues efectivamente
00:26:00
matemáticas así a palo seco no me dice
00:26:02
nada. ¿Qué tendría que poner ahí?
00:26:05
Para que se me quitara esa línea roja,
00:26:09
¿qué tengo que poner en esa línea?
00:26:11
Estoy en un main
00:26:14
que está fuera del paquete donde
00:26:15
está la clase de matemáticas.
00:26:17
Mi pregunta es,
00:26:21
¿qué tecleo hay aquí?
00:26:23
No en otro sitio. Ahí, ¿dónde tengo yo
00:26:25
el cursor para que se me quite la línea roja?
00:26:27
Pregunta de prueba técnica
00:26:28
de Java.
00:26:32
No quiero generalidades.
00:26:34
La pregunta es,
00:26:35
¿Qué tengo que teclear yo aquí, en este punto que tengo al cursor, para que se me quite esa línea roja?
00:26:37
Muy bien, efectivamente.
00:26:47
Tengo que teclear esto.
00:26:51
Y ya se me ha quitado.
00:26:54
¿Por qué?
00:26:55
Porque matemáticas es una clase que está en otro paquete.
00:26:56
Luego, desde otro paquete, o uso su nombre largo, o pongo el import arriba.
00:27:00
Pero como yo os he dicho que tengo que teclear ahí, ahí no puedo poner import, obviamente.
00:27:06
Si no quiero poner utilidades ahí, pues pongo arriba import utilidades.matemáticas
00:27:10
y ahora ya aquí podríamos quitar esto si quisiéramos.
00:27:28
Esto ya también lo hemos visto.
00:27:32
Y claro, todo esto funciona y encaja porque los métodos son públicos, lógicamente.
00:27:39
si yo este public
00:27:45
no lo hubiera puesto,
00:27:47
si yo este public
00:27:48
no lo hubiera puesto,
00:27:51
por mucho import,
00:27:53
mucho nombre largo,
00:27:55
mucho lo que fuera,
00:27:57
me diría, uy,
00:28:00
este método no es visible,
00:28:01
¿verdad? Porque no tiene el public delante.
00:28:03
Me da igual nombre largo
00:28:06
import. Si el método no es public,
00:28:07
aquí me va a decir, lo siento,
00:28:10
no tienes acceso a ese
00:28:11
método de la clase matemáticas,
00:28:13
porque no es public y tú estás fuera del paquete
00:28:15
entonces pues, ah, vale
00:28:17
pues le ponemos public
00:28:21
y listo
00:28:22
que es la idea si yo quiero usar esto desde cualquier lado
00:28:24
vale, siguiente paso
00:28:27
si yo he hecho esta
00:28:30
siguiente paso y paramos unos minutos
00:28:32
si yo he hecho este paso
00:28:34
si yo he hecho esta clase librería con unos
00:28:37
métodos impresionantes
00:28:39
para que use la gente
00:28:41
pues hombre, la gente lo usará
00:28:42
desde sus propios proyectos
00:28:44
¿no?
00:28:45
no es mi proyecto, lo usa desde sus propios proyectos
00:28:47
entonces
00:28:50
¿cómo hago yo? ¿cómo distribuyo yo esto?
00:28:51
¿qué hago yo con esta clase?
00:28:55
para que los demás la puedan usar
00:28:56
la meto en un jar
00:28:57
con lo cual la gente de sus proyectos
00:28:59
la tendrá que importar
00:29:02
ahora veremos cómo, ¿vale? vamos a parar un ratinino
00:29:03
- 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:
- 8
- Fecha:
- 10 de enero de 2025 - 17:43
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 29′ 07″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 123.43 MBytes