Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Clase 16-01-24 - 3 - 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:
¿Vale?
00:00:00
Esto es un método que hicimos ayer, genérico,
00:00:02
para hacer la suma acumulativa de los precios de los pedidos.
00:00:05
¿Vale?
00:00:08
Entonces, ahora nos podemos aprovechar de él.
00:00:08
Ahora ya podemos aprovecharnos de él para llamarlo ya en la
00:00:11
aplicación.
00:00:14
Porque la aplicación resulta que para pedidos de i tiene que
00:00:15
llamar a ese método.
00:00:19
Pues, ala, estupendo.
00:00:20
Entonces, pedidos de i puede llamar a su método devolver
00:00:22
precio total.
00:00:28
Lo que pasa es que este método no te lo muestra por consola.
00:00:30
Lo hicimos de tal forma que te lo devolviera en un retunco
00:00:34
valor de retorno.
00:00:37
Entonces, al devolverlo en un retunco valor de retorno,
00:00:38
tenemos que asignárselo a algún sitio para luego mostrarlo por
00:00:42
consola o lo que queramos.
00:00:45
Entonces, bueno, de nuevo, ¿para qué guardarle una variable
00:00:46
intermedia y luego hacer el system out de la variable?
00:00:49
Vamos a pasárselo directamente al system out y ya está.
00:00:52
Pero podríamos guardar la variable intermedia y luego
00:00:56
llamar al system out dándole la variable intermedia.
00:00:59
Hombre, pues, venga, no merece la pena.
00:01:01
Directamente.
00:01:03
Pues, nada, le voy a tener que escribir entero.
00:01:12
No, espérate, voy aquí abajo y ahora sí.
00:01:14
Vale, pues, lo escribo.
00:01:19
Lo escribo todo esto aquí, ¿vale?
00:01:20
Entonces, devolver precio total me devuelve el precio.
00:01:33
Ya está, me lo devuelve él, ya se la suma,
00:01:36
hace todo lo que tenga que hacer.
00:01:38
Y el valor de retorno, con ese valor de vuelta,
00:01:39
hago lo que quiera.
00:01:42
Se lo asigna una variable.
00:01:43
En este caso, en lugar de asignárselo a una variable,
00:01:45
se lo paso a su vez, como parámetro,
00:01:48
al system out println.
00:01:51
Fijaos que println es un método también.
00:01:53
No lo hemos hecho nosotros, es un método de la clase system
00:01:55
out, pero es un método también al que le pasamos un valor y lo
00:01:58
que hace es mostrarlo por consola.
00:02:01
Vale, pues, ya está, esa putería ya estaría.
00:02:07
¿Que queremos mostrar el precio con IVA?
00:02:14
Pues, es que teníamos un método que lo mostraba con IVA en la
00:02:16
clase pedido, que era este de aquí,
00:02:19
que era como el anterior, pero sumando el porcentaje este del
00:02:23
IVA.
00:02:28
Pues, entonces, la funcionalidad 5,
00:02:30
que es la de mostrar precio con IVA,
00:02:36
es igualita que la 4, igualita, pero en lugar de llamar al
00:02:38
método devolver precio total, devolver precio total con IVA.
00:02:42
Entonces, la funcionalidad 5, en realidad,
00:02:46
es un copia y pega de esta, cambiando el nombre del método.
00:02:48
La funcionalidad 5 es esto, pero en lugar de devolver precio
00:02:53
total, pues, aquí será devolver precio total con IVA.
00:02:59
Es la única diferencia entre los 2.
00:03:06
Claro, porque, efectivamente, porque en todas ellas,
00:03:13
si el pedido no existe, se queda callado.
00:03:18
Y como es un poco feo que se quede callado, pues,
00:03:20
en todas ellas convendría, efectivamente,
00:03:22
poner esa comprobación a través de un Boolean.
00:03:24
Lo mismo, claro, claro, lo mismo, es lo mismo.
00:03:28
Cambiando el método al que llamas, claro,
00:03:33
el único que cambia, el método al que llamas, ¿vale?
00:03:36
Bueno, pues, de esto va el rollo.
00:03:43
Vamos a ejecutarlo por si hemos escrito algo mal.
00:03:45
Creamos un pedido.
00:03:52
Introduzca código 1, descripción, descripción 1.
00:03:53
Voy a crear otro pedido más.
00:03:56
Introduzca código 2, descripción 2.
00:03:59
Tengo 2 pedidos.
00:04:01
Venga, voy a añadir un ítem al pedido 2.
00:04:04
Venga, al pedido 2 voy a añadirle el ítem,
00:04:07
descripción del ítem.
00:04:11
Pues, bolis que quiero 3 y precio unitario 5.
00:04:14
3 por 5, 15, va a costar.
00:04:20
Vale, voy a añadir otro ítem más a este, al 2.
00:04:22
Ítem, pues, ala.
00:04:28
Le voy a poner 4 gomas por 6.
00:04:31
6 por 4, 24 más el 15 de antes.
00:04:34
Bueno, lo que sé.
00:04:37
Ala, el pedido 2 ya tiene 2 ítems.
00:04:39
Vamos a mostrarlo, a ver si es verdad.
00:04:42
Vamos a hacer la funcionalidad 6 y vamos a mostrar lo que tiene
00:04:44
el pedido 2.
00:04:49
El pedido 2, efectivamente, tiene los que acabo de meter.
00:04:51
Vale, funciona.
00:04:55
Tiene los que acabo de meter, los bolis y las gomas.
00:04:56
Entonces, cuando haga el precio total, sin IVA,
00:04:58
tendrá que salir 15 más 24, que son 39, ¿verdad?
00:05:00
Pues, vamos a ver.
00:05:07
Vamos a mostrar el precio de un pedido 2.
00:05:08
Pues, efectivamente, 39.
00:05:15
Y si yo muestro el precio del pedido con IVA,
00:05:17
me va a salir igual porque no he fijado el IVA.
00:05:19
Con lo cual, el valor por defecto del número es 0.
00:05:21
O sea, si yo muestro ahora el precio del pedido con IVA,
00:05:23
del pedido 2, pues, me vuelve a salir 39 porque el IVA es 0.
00:05:28
Vamos a fijarle un IVA.
00:05:33
Venga, vamos a fijarle como IVA un 10%.
00:05:34
Ala, el IVA ya está al 10%.
00:05:37
Pues, vamos a volver a mostrar el precio de este pedido 2.
00:05:39
Pues, ahora ha subido, 42,9, justo.
00:05:46
Ha aumentado el 10% de IVA, que son los 3,9.
00:05:49
Vale, pues, la aplicación ya estaría completa a falta de la
00:05:54
funcionalidad 3, eliminar ítem, con el método eliminar ítem,
00:05:57
que es lo que dejo ahí para que se os quede algún hueco de
00:06:00
trabajo.
00:06:05
Ala, 8 salimos y ya está.
00:06:07
Bueno, pues, esta es la base de la aprobación de entrada de
00:06:12
objetos, la base.
00:06:16
A partir de aquí, de nuevo, hay que ir poniendo capas y capas y
00:06:18
capas y capas de herencia, interfaces, implementaciones,
00:06:21
colecciones, un montón de capas.
00:06:26
Nos quedan por añadir, muchas.
00:06:28
Pero, para que esas capas no monten ahí un berenjenal enorme,
00:06:30
que esta base quede muy clara, por favor.
00:06:36
¿Vale?
00:06:39
¿Tú ya has conseguido que te funcione?
00:06:43
No lo puedo creer.
00:06:44
Bueno, se añade el precio de 42,9.
00:06:45
Bueno, luego yo voy a ver.
00:06:50
O sea, me muestra el nombre del pedido,
00:06:53
pero no me muestra lo existente ahí.
00:06:55
Habría que mirarlo, ¿vale?
00:06:59
Luego, al final, intento sacar tiempo para mirarlo.
00:07:02
Vale.
00:07:06
Pero vamos, a ver.
00:07:10
Pues, venga, vámonos de nuevo a pedido.
00:07:15
Vale.
00:07:28
Vamos a seguir ampliando un poquito con esas pequeñas capas
00:07:28
que os digo un poquito, solo.
00:07:34
Venga, vamos a volver a pedido, que es la única clase que
00:07:36
tenemos junto con ítem, ¿vale?
00:07:38
Pues, venga, volvemos a la clase pedido,
00:07:42
que tiene 3 propiedades normales y una estática, ¿vale?
00:07:44
Para que os suene la terminología,
00:07:53
porque la ayuda que puede tener el entorno de desarrollo
00:07:56
Eclipse o cualquier otro, cuando leáis cosas,
00:07:59
pues, las propiedades que son propias del objeto,
00:08:02
las normales, se suelen llamar variables de objeto.
00:08:05
Y las estáticas se suelen llamar variables de clase, ¿vale?
00:08:10
Las propiedades estáticas se las llama a veces variables de
00:08:14
clase porque pertenecen a todos los objetos de la clase.
00:08:16
Y las propiedades normales se las llaman propiedades de
00:08:20
objeto, porque son de un objeto en particular.
00:08:22
Pero, bueno, con eso os iréis familiarizando según vayáis
00:08:26
viendo cosas.
00:08:29
Vale, pues, esta clase pedido tiene 4 propiedades,
00:08:31
3 de ellas son propias de cada objeto.
00:08:33
Y una de ellas es común para todos los objetos.
00:08:36
Es una propiedad estática, ¿vale?
00:08:39
Bueno, pues, ahora vámonos al método de abajo de fijar IVA.
00:08:42
Vamos al método este que yo llamé set IVA para fijar un
00:08:47
valor concreto a esta propiedad.
00:08:58
Entonces, yo este método lo dejé así y no pasa nada.
00:09:02
Como veis, funciona.
00:09:04
Está todo bien.
00:09:05
Pero ahí ya alguno vería que sea una cosa amarilla,
00:09:07
que eso siempre queda feo.
00:09:10
No significa que las cosas no funcionen.
00:09:12
Pero, bueno, ya como que despierta una bombilla, ¿no?
00:09:14
Y yo dejé ese amarillo ahí, ¿eh?
00:09:16
¿Qué dato?
00:09:19
Tiene una advertencia interna.
00:09:21
Claro, como que te advierte y dice, uf, bueno.
00:09:23
Vale, pues, ¿de qué nos está advirtiendo?
00:09:27
Vamos a ver.
00:09:29
Vamos a ver.
00:09:31
Este método tiene una peculiaridad que lo hace muy
00:09:34
distinto de este, por ejemplo.
00:09:39
Vale, esto es importante de nuevo entender.
00:09:41
Este método trabaja con la propiedad ítems y pedido del
00:09:43
objeto, con lo cual este método de volver precio total,
00:09:49
todos tenemos claro, que funciona de forma distinta si
00:09:52
lo llama el objeto P1 o si lo llama el objeto P2 o si lo
00:09:56
llama el objeto P3, por supuesto,
00:09:59
porque P1 tiene un valor aquí, P2 tiene otro y P3 tiene otro.
00:10:00
Entonces, si lo llama P1, va a hacer una cosa,
00:10:05
porque esta variable tiene su propio valor.
00:10:09
Pero si lo llama P2, va a hacer otra,
00:10:11
porque esta variable tiene un valor distinto, la de P2.
00:10:14
Y si lo llama P3, va a hacer otra,
00:10:16
porque esta variable tiene otro valor, el de P3.
00:10:19
Eso es como funcionan los métodos, ¿verdad?
00:10:22
Los métodos trabajan con las propiedades del objeto,
00:10:24
con lo cual este método va a hacer cosas distintas en
00:10:27
función del objeto que lo llame.
00:10:31
Está claro.
00:10:33
Pero este método de arriba no le pasa eso,
00:10:35
porque este método de arriba no usa ninguna propiedad propia
00:10:37
del objeto.
00:10:42
No usa ni código ni descripción de ítems.
00:10:44
Este método solamente está usando el getIva,
00:10:47
que lo he perdido.
00:10:51
¿Dónde está el setIva?
00:10:52
Aquí está.
00:10:59
Ese método solo está usando la propiedad IVA, solo.
00:11:01
Más el parámetro, por supuesto, que le llega por aquí.
00:11:05
Con lo cual, ese método, me da igual que lo llame P1,
00:11:08
que lo llame P2, que lo llame P3, me da igual,
00:11:12
porque no está usando propiedades propias del objeto.
00:11:14
Está usando la propiedad que es igual para todos,
00:11:17
la compartida por todos solamente, ¿no?
00:11:19
Luego, este método va a hacer exactamente lo mismo,
00:11:22
lo llame P1, lo llame P2, lo llame P3, va a hacer lo mismo,
00:11:26
porque no trabaja con las propiedades propias de cada
00:11:29
objeto, solo con las comunes.
00:11:31
Luego, da igual el objeto que lo llame,
00:11:33
da igual, porque va a hacer lo mismo.
00:11:35
Hasta ahí está claro.
00:11:37
Bueno, pues un método que hace lo mismo,
00:11:39
lo llame el objeto que lo llame, se convierte en lo que se llama,
00:11:42
por definición, en un método estático.
00:11:47
Es decir, me da igual el objeto que me llame,
00:11:50
yo voy a hacer lo mismo, porque como no uso variables de
00:11:52
objeto, solo uso variables estáticas, me da igual.
00:11:54
Entonces, cuando uno identifica, cuando está programando,
00:11:58
cuando uno identifica que ha hecho un método así,
00:12:01
que solo usa variables estáticas,
00:12:04
no usa variables de objeto, dice, ah,
00:12:06
este método es estático.
00:12:07
Entonces, hace una cosa muy buena que facilita gran parte del
00:12:09
desarrollo de código, que es avisar y ponerlo como estático.
00:12:14
¿Y cómo lo pone?
00:12:18
Pues, delante del valor de retorno y después del public,
00:12:19
pone esto, estático.
00:12:22
¿Vale?
00:12:26
Primera parte, pone eso.
00:12:27
Pero el rojo de abajo ya lo quitamos.
00:12:29
Pone eso, estático.
00:12:32
Y eso significa que este método se convierte en estático,
00:12:34
o lo que es lo mismo, que solo usa variables estáticas.
00:12:36
Hombre, o variables locales que se cree él,
00:12:41
pero en cualquier caso, no variables del objeto,
00:12:43
nunca variables del objeto.
00:12:46
¿Vale?
00:12:48
Y la implicación que tienes es esa,
00:12:49
que da igual el objeto que me llame, da igual,
00:12:51
yo voy a hacer lo mismo siempre, porque no uso variables propias
00:12:52
del objeto.
00:12:55
Entonces, se convierte en estático.
00:12:56
Entonces, al convertirse en estático,
00:12:57
esto ya tiene varias implicaciones a la de
00:13:00
programarlo.
00:13:01
Primero, que ahora ya este disk de aquí,
00:13:03
este disk no me deja ponerlo.
00:13:06
Esto es un tema de sintaxis.
00:13:08
No me deja ponerlo porque dice, oye, eres un método estático.
00:13:10
Da igual el objeto para que lo llames.
00:13:13
Dime IVA directamente y ya está.
00:13:17
¿Vale?
00:13:20
Dime IVA directamente y ya está.
00:13:21
Pero aquí llega la otra famosa confusión,
00:13:24
que yo a esta variable, a este parámetro,
00:13:28
lo he llamado igual que la variable estática de arriba.
00:13:31
Pero en este caso no me deja distinguirlo con el disk.
00:13:34
¿Cómo creéis, cómo se os ocurre que podría yo decir que esta es
00:13:37
la variable estática IVA de la clase pedido?
00:13:41
Poniendo pedido, efectivamente.
00:13:46
Bueno, cambiando el nombre, claro.
00:13:48
Pero si no le quiero cambiar el nombre,
00:13:49
tienen su significado, significan cosas.
00:13:51
Así.
00:13:54
Porque así es como, ¿verdad?
00:13:55
Es que si cambias el nombre de algo, le cambias su esencia.
00:13:58
Vale.
00:14:06
Bueno, pues revisamos entonces lo que hemos hecho sobre métodos
00:14:07
estáticos, ¿vale?
00:14:10
Incorporamos ahora ese concepto.
00:14:10
El concepto de método estático.
00:14:13
Un método estático es un método que me da igual el objeto que lo
00:14:16
llame.
00:14:19
Me da igual que lo llame p1, que lo llame p2, que lo llame p3,
00:14:20
me da igual, porque va a hacer lo mismo.
00:14:23
Entonces, para que un método estático haga lo mismo,
00:14:25
entonces es imposible que use variables de clase.
00:14:28
Perdón, variables propias del objeto es imposible.
00:14:31
Porque si usa variables propias del objeto,
00:14:34
va a actuar de forma distinta.
00:14:36
Si lo llama un objeto, lo llama otro.
00:14:38
De hecho, si a mí me da la gana y decir, oye,
00:14:40
devolver precio total con IVA.
00:14:43
Le voy a poner estático porque se me antoja,
00:14:45
me da la gana ponerle estático.
00:14:47
A este me va a decir, ¿pero qué me estás contando?
00:14:49
Me dice, si tú quieres que yo sea en método estático,
00:14:52
perdona, entonces no uses una propiedad del objeto.
00:14:56
Pero esta idiota dice, no puede ser.
00:14:59
¿Cómo voy a ser yo un método estático y luego usar una
00:15:01
propiedad del objeto?
00:15:04
Entonces, ¿no sería estático por definición?
00:15:05
Porque esta propiedad depende del objeto.
00:15:07
Es diferente para p1 o para p2 o para p3,
00:15:09
con lo cual yo voy a funcionar de forma distinta.
00:15:12
Si trabajas con p1, con p2, con p3, entonces dice, oye, no.
00:15:14
Si quieres que sea estático, no uses propiedades del objeto.
00:15:19
Claro, es que yo a ese método nunca le pondría el estático
00:15:22
porque no lo es.
00:15:25
Pero al de arriba sí que se lo puedo poner porque el de arriba
00:15:30
no usa ninguna propiedad del objeto.
00:15:32
Al de arriba se lo puedo poner y se lo debo poner.
00:15:34
Cuando ya se lo he puesto y he identificado que es estático,
00:15:37
ahora ya el this ya no me deja usarlo, no tiene sentido.
00:15:41
Porque el this significa el objeto que está llamando al
00:15:45
método.
00:15:48
Pero es que en este caso da igual el objeto que llame al
00:15:50
método porque va a funcionar igual en todos.
00:15:53
Entonces, me da igual el objeto que llame al método.
00:15:55
Por eso no te deja usar el this.
00:15:57
Lo incorpora ya en la sintaxis, ese concepto lo incorpora.
00:16:00
Y cuando tú te refieres a la variable estática,
00:16:03
la llamas con su clase y ya está.
00:16:05
Como se llaman las variables estáticas,
00:16:07
con el nombre de su clase.
00:16:09
Si el parámetro tuviera otro nombre,
00:16:11
es que no haría ni falta.
00:16:13
Imaginaos que este parámetro yo lo llamo IVA1, IVA1.
00:16:14
Pues, entonces, ahora es que aquí no haría ni falta.
00:16:19
Porque aquí ya no hay confusión.
00:16:23
Como se llaman distinto, no hay confusión.
00:16:25
IVA es la propiedad de arriba e IVA1 es el parámetro.
00:16:26
No habría confusión.
00:16:30
Pero yo lo he llamado a propósito igual para tener que
00:16:32
cambiarse.
00:16:37
Lo que yo lo llamo igual, aquí hay una pedazo confusión
00:16:38
impresionante.
00:16:42
¿IVA quién es?
00:16:43
Pues, IVA siempre sería el parámetro.
00:16:43
Oye, ojo, que este no quiero que sea el parámetro.
00:16:46
Este quiero que sea la propiedad de arriba.
00:16:48
Pues, llámala con su nombre completo.
00:16:51
Llámala con su nombre completo.
00:16:52
Pedido.IVA.
00:16:55
¿Vale?
00:16:56
¿Vale?
00:17:01
Bueno, pues, estos son los métodos estáticos.
00:17:02
Y ahora vendría la pregunta, oye,
00:17:05
¿por qué dices que es recomendable y que hay que poner
00:17:07
el estático delante?
00:17:09
Pero si yo lo tenía antes y la aplicación sonaba perfectamente,
00:17:10
¿estupendo?
00:17:13
Hombre, vale, sí, todo era estupendo.
00:17:15
Pero la ventaja de un método estático es que como funciona
00:17:17
igual lo llame el objeto que lo llame,
00:17:20
lo puedes llamar incluso sin que exista ningún objeto.
00:17:23
Sin que exista ninguno.
00:17:26
Como a la variable IVA, que la podíamos llamar aunque no
00:17:27
existiera ningún objeto.
00:17:29
Podríamos hacer pedido.IVA igual a tal.
00:17:30
Pues, los métodos estáticos tienen esa ventaja.
00:17:33
Que funcionan como funciones genéricas,
00:17:36
no asociadas a ningún objeto.
00:17:38
Y lo puedes llamar aunque no existan los objetos.
00:17:40
Entonces, me permiten hacer eso que en tiempo remoto se llamaba
00:17:44
funciones de librería.
00:17:48
Tú metes un código, una función y lo llamas sin más.
00:17:50
Y ahí no hay ningún objeto asociado ni hay nada.
00:17:53
Esa es la gran ventaja.
00:17:56
Y la llamas sin más.
00:17:58
¿Vale?
00:18:03
Vamos a llamar a este método de esa manera.
00:18:04
Vámonos otra vez a fijar IVA.
00:18:11
Fijar IVA nuestro main, nuestra funcionalidad fijar IVA.
00:18:13
Y luego ahora hacemos un ejemplo que se vea mejor.
00:18:16
En nuestra funcionalidad fijar IVA habíamos fijado el IVA
00:18:18
directamente así.
00:18:20
Pero vamos a suponer que queremos llamar al método set
00:18:22
IVA este de aquí.
00:18:25
El método set IVA este de aquí que yo he llamado,
00:18:27
le pasamos por un parámetro esto que hemos leído, ¿vale?
00:18:30
Y el método set IVA al ser estático lo puedo llamar
00:18:39
asociado al nombre de la clase directamente.
00:18:43
Este método no lo llamo asociado a ningún objeto.
00:18:47
No, porque da igual el objeto que lo llame, da igual.
00:18:51
Como es estático va a hacer lo mismo, da igual.
00:18:54
Pues lo llamo asociado al nombre de la clase.
00:18:56
Y esa es la ventaja de los métodos estáticos que son como
00:19:01
métodos genéricos que tú los llamas asociados al nombre de
00:19:03
una clase y te hacen lo que tú hayas puesto,
00:19:05
independientemente de ningún objeto en particular.
00:19:08
Y los hemos estado usando con el math.random,
00:19:13
el math.no sé qué.
00:19:15
Ahora vamos a ello para que quede claro.
00:19:17
A ver, no es que sea obligatorio llamar los métodos
00:19:21
estáticos así.
00:19:24
Yo puedo llamarlo asociado a un nombre de objeto si me da la
00:19:25
gana.
00:19:27
Yo puedo hacer esto si quiero, ¿vale?
00:19:28
P0, ¿qué son pedidos?
00:19:31
Pedidos de cero, punto, joder, ¿vale?
00:19:35
SetIva.
00:19:41
Yo puedo hacer esto si me da la gana.
00:19:45
Estoy llamando al método igual.
00:19:47
Lo está llamando un objeto, pero es que da igual,
00:19:50
el objeto no pinta nada.
00:19:52
El objeto no pinta nada porque este método no usa las
00:19:53
propiedades de este objeto.
00:19:56
Solo usa la propiedad global Iva.
00:19:58
Con lo cual, me da igual que me llame pedidos de cero,
00:20:01
que me llame pedidos de uno, es que me da igual.
00:20:03
De hecho, por eso se pone en amarillo.
00:20:05
Te dice, oye, qué feo.
00:20:06
SetIva es un método estático.
00:20:07
Llámale con el nombre de la clase.
00:20:09
No me llames con el nombre de un objeto.
00:20:10
Si tú tal, da igual que lo llames.
00:20:12
Vale, pues la forma buena y bonita de llamarlo es la de
00:20:14
arriba, en la que se ve claro que ese método lo que hace no
00:20:17
tiene nada que ver con ningún objeto.
00:20:21
Esto, pues, no lo usaríamos.
00:20:28
También porque, de hecho, nos ahorraríamos futuros null
00:20:35
pointer exception, si es que este objeto no tiene null.
00:20:38
Bueno, pues los métodos estáticos nos abren un mundo
00:20:46
de posibilidades.
00:20:50
Por ejemplo, como ya sabéis, porque lo hemos usado,
00:20:51
resulta que la máquina virtual de Java, que es esta,
00:20:55
es decir, a ver, nosotros, aparte de nuestras 3 clases,
00:21:04
ítem, pedido y main, aparte de esas clases,
00:21:13
tenemos clases a las que podemos acceder que están metidas en
00:21:17
nuestro proyecto, aunque no lo sepamos, que están metidas,
00:21:20
que están todas aquí, donde pone JR.
00:21:24
Fijaos la cantidad de clases que tenemos.
00:21:28
Por ejemplo, aquí, solo aquí, tropecientas, todas estas.
00:21:30
Es decir, cuando hacemos un proyecto,
00:21:36
el proyecto no tiene solo nuestras clases.
00:21:38
Tiene mogollón metidas en eso que está bajo el paraguas de
00:21:40
JR.
00:21:44
Tiene mogollón.
00:21:44
Y esas clases tienen cosas.
00:21:46
De esas clases podemos instanciar objetos,
00:21:48
por ejemplo, de scanner, que también está por ahí.
00:21:50
Hemos iniciado un new scan.
00:21:52
Pero es que hemos hecho más cosas aparte del scanner.
00:21:54
Por ejemplo, si uno baja por aquí,
00:21:56
encuentra la clase math.
00:21:59
Esta clase no la hemos hecho nosotros, pero está ahí.
00:22:03
La podemos usar.
00:22:05
Vale.
00:22:06
Pues, si entramos en esta clase, que es esta de aquí,
00:22:07
la clase math, esta clase no la hemos hecho nosotros.
00:22:18
Está hecha, pero la podemos usar.
00:22:25
Pues, esta clase tiene cosas maravillosas.
00:22:27
Entre ellas, un montonazo de métodos con el static delante.
00:22:29
¿Y qué significa aquellos métodos con el static delante?
00:22:34
Que los puedo llamar con el nombre de la clase para hacer
00:22:37
cosas.
00:22:39
Por ejemplo, que hago math.coseno,
00:22:40
pasándole, pues, me devuelve el coseno como valor de retorno,
00:22:43
el retorno.
00:22:46
¿Vale?
00:22:47
¿Qué hago math.random?
00:22:48
Pues, por aquí tendré un método random que me hace lo que ya
00:22:50
hemos usado, la tangente.
00:22:52
Como veis, son todos estáticos.
00:22:54
Todos estáticos.
00:22:56
Y ahí tenemos, pues, de todo.
00:22:58
¿Vale?
00:23:02
Todos estos métodos los podemos usar si nos da la gana para
00:23:03
hacer millones de cosas matemáticas.
00:23:05
Y todos ellos son estáticos.
00:23:10
¿Por qué son estáticos?
00:23:13
Porque no usan propiedades de ningún objeto math concreto.
00:23:14
Es que no hace falta crear un objeto math concreto.
00:23:17
Porque no hace falta.
00:23:20
Tú usas la clase math, o sea, ya escribes la clase math,
00:23:22
y llamamos a sus métodos estáticos para hacer cosas,
00:23:26
que es lo que hemos hecho ya.
00:23:29
¿Vale?
00:23:31
Y quien dice la clase math con todos sus métodos estáticos
00:23:32
delante, dice millones de clases que hay por aquí que nos
00:23:35
permiten usar directamente métodos estáticos para hacer
00:23:40
cosas.
00:23:43
O instanciar objetos también, como Scanner,
00:23:45
que Scanner lo hemos instanciado.
00:23:47
No hemos usado métodos estáticos, lo hemos instanciado.
00:23:48
Bueno, pues, gracias a que están los métodos estáticos,
00:23:52
pues, podemos usar un montón de funcionalidades ya hechas de
00:23:54
otros, ya hechas sin crear objetos.
00:23:57
Voy a poner aquí, aunque ahora lo borre, aquí de este main.
00:24:01
Por ejemplo, cuando hemos usado el método random para hacer
00:24:05
cosas, o el de elevar una potencia a otra, por ejemplo,
00:24:08
voy a elevar un número a otro.
00:24:12
Que para eso la clase math tiene su método pw, ¿verdad?
00:24:14
O aquí, ¿dónde estoy?
00:24:24
Ah, debe ser que estoy fuera del método main, ¿no?
00:24:28
Y por eso se queja.
00:24:31
Vale, por ejemplo, yo aquí estoy.
00:24:34
De la clase math, llamando al método estático pw,
00:24:36
que es potencia, que es 3 elevado a 4.
00:24:40
El valor de retorno, que me devuelva el valor de retorno,
00:24:43
pues, hombre, lo debería guardar en algún lado, ¿no?
00:24:45
Para que esto tuviera algún sentido.
00:24:47
Vale, y si yo ahora aquí hago esto, pues, efectivamente,
00:24:53
me va a mostrar 3 elevado a 4.
00:24:56
Vale, hemos hecho la llamada al método estático este de la
00:24:58
clase math.
00:25:03
Si yo accedo, efectivamente, tengo este método.
00:25:05
Tengo un método estático pw, al que le paso 2 numeritos y me
00:25:09
devuelve como returns.
00:25:12
De hecho, la documentación está con los comentarios,
00:25:13
me lo está diciendo, todo lo que te hace, patatín, patatán.
00:25:16
Y la clave es que es estático.
00:25:19
Entonces, al ser estático, yo lo puedo llamar así,
00:25:21
con el nombre de la clase.
00:25:24
¿Qué me da la instancia de un objeto math?
00:25:27
Es que ni siquiera se me va a dejar instanciar porque
00:25:29
seguramente se ha privado el constructor.
00:25:31
Voy a ver si me deja instanciar un objeto math.
00:25:33
No creo que me deje porque habrá puesto el constructor privado.
00:25:36
Imagino, precisamente, para no dejar instanciar.
00:25:40
Justo, ¿ves?
00:25:43
Me dice, no es visible.
00:25:43
Mirad, ¿ves?
00:25:46
¿Recordáis cuando habíamos los modificadores de accesos?
00:25:48
Dije, puede tener sentido que el constructor sea privado.
00:25:52
En algunos casos te puede interesar no permitir que te
00:25:55
instancien.
00:25:57
Pues, hombre, a la clase math no le interesa que le instancien.
00:25:59
Si lo único que se va a usar de la clase math son métodos
00:26:02
estáticos, para eso no hay que crear ningún objeto.
00:26:04
Pones el nombre de la clase, la llamada, el método.
00:26:07
Entonces, lo prohíbes.
00:26:09
Dice, no, no, no, que nadie instancie math.
00:26:10
Si yo cambio eso y lo pongo public,
00:26:12
pues, ya sé que me dejaría instanciar.
00:26:14
Pero, ¿para qué?
00:26:15
¿Para qué voy a hacer eso?
00:26:16
Bueno, pues, entonces, si me dejara instanciar porque fuera
00:26:24
public, que no me deja, me daría igual hacer math.pou que
00:26:30
hacer esto.
00:26:35
Me daría lo mismo llamarlo con un objeto concreto que con el
00:26:36
nombre de la clase.
00:26:40
Pero, ¿para qué voy a crear un objeto?
00:26:41
Si no lo necesito para llamar al método.
00:26:43
No lo necesito.
00:26:44
Pues, ¿para qué voy a crear un objeto?
00:26:45
Lo llamo con el nombre de la clase y listo.
00:26:47
¿Vale?
00:26:50
Vale, pues, los métodos estáticos son,
00:26:50
como está claro, como podéis imaginaros, muy útiles.
00:26:59
Porque es que yo a veces necesito hacer código,
00:27:03
recoger código que es independiente de que existan
00:27:04
objetos, es independiente.
00:27:07
Y, de hecho, para, bueno, tenemos tiempo de sobra,
00:27:10
iba a decir, vamos a aprovechar,
00:27:16
ya que tenemos los métodos estáticos,
00:27:18
y vamos a olvidarnos de una vez por todas del problema este de
00:27:19
los escáner, que, uy, cuidado cuando lees,
00:27:22
que lees un número y luego lees un scanline, que no sé qué.
00:27:25
Vamos a hacernos unos métodos estáticos en una clase aparte
00:27:28
de utilidades de teclado que solucionen todo eso.
00:27:31
Y ahora ya los llamaremos y ya nos será mucho más fácil leer
00:27:34
por teclado.
00:27:39
Porque ya nos tenemos, nos vamos a olvidar de todo eso.
00:27:40
Vamos a aprovechar.
00:27:41
Vamos a aprovechar para hacernos nuestra propia librería de
00:27:42
métodos estáticos para cosas que nos son útiles.
00:27:46
Que eso es para lo que interesan.
00:27:48
Math es una librería de métodos para hacer cosas matemáticas.
00:27:50
Eso es lo que es math, una librería de métodos para hacer
00:27:52
cosas matemáticas.
00:27:54
Vamos a hacernos una nuestra nosotros para hacer lecturas por
00:27:56
teclado sin tener que estar todo el rato pendientes de hacer un
00:28:00
doble next line si he leído el número, etcétera.
00:28:05
Será una buena forma de poner en práctica los métodos estáticos.
00:28:08
¿Vale?
00:28:13
¿Vale?
00:28:14
Vale.
00:28:18
Pues, vamos a hacer esa librería.
00:28:19
Y ya de paso aprovechamos para ver cómo podemos exportarla e
00:28:20
importarla en los proyectos que nos dé la gana.
00:28:24
Que tiene que ver directamente con el tema de paquetes.
00:28:27
Vale.
00:28:30
Bueno, como esto va a ser un poquito largo,
00:28:31
¿me podéis descansar un poco?
00:28:34
Pues, venga, vamos a parar unos minutos.
00:28:36
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 6
- Fecha:
- 16 de enero de 2024 - 21:41
- Visibilidad:
- Público
- Centro:
- IES ROSA CHACEL
- Duración:
- 28′ 41″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 98.97 MBytes