Clases (Modificadores acceso y 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:
voy a grabar esta clase por lo tanto si tenéis si decís algo o preguntáis algo
00:00:00
pues me dais autorización a que se grabe también vale entonces hasta ahora
00:00:06
nosotros hemos visto un poquito unas pinceladas de lo que es la orientación
00:00:11
a objetos
00:00:17
y polimorfismo y cosas por el estilo todavía no los hemos tocado sólo vamos a tocar más adelante
00:00:19
las interfaces etcétera etcétera pero por algún lado tenemos que empezar
00:00:31
estamos viendo sustancialmente la diferencia entre clase objeto ahora
00:00:36
estamos trabajando allí estamos viendo que la clase es un molde es una
00:00:39
generalización de un concepto que estoy modelizando y luego una vez que tengo
00:00:45
este molde tengo esta estructura genérica de cómo tienen que ser las
00:00:51
entidades que pertenecen a esta clase pues la instancio y creo gestos
00:00:56
concretos vale la clase cuadrado medida en general la característica del
00:01:02
cuadrado y las operaciones que puede hacer sobre el cuadrado y luego yo
00:01:07
crearé un cuadrado concreto el cuadrado de lado 4 y sobre ese cuadrado
00:01:10
podré hacer todas las operaciones genéricas que hemos dicho antes
00:01:15
hoy vamos a ver algunos conceptos adicionales siempre sobre el que se
00:01:19
relacionan con el concepto de clases sobre el desarrollo de las clases vale
00:01:25
son varios conceptos vamos viendo uno tras otro y se quedan allí para que
00:01:30
vosotros luego los interior y 6 la primera cosa que vamos a ver es el
00:01:36
famoso método vale nosotros este método lo estamos utilizando desde el
00:01:43
primer día que hemos empezado a programar en ya desde el primer día que
00:01:48
hemos creado un programita pues empezamos con la estructura básica de un
00:01:52
programa en java pusimos esta cosa aquí y dije va a ignorar todo vosotros lo que
00:01:57
vais a hacer es trabajar dentro de este método main y allí ponéis el ejercicio
00:02:02
vale con el tiempo hemos visto que tienen algunas palabras pablo y que
00:02:07
estática voy de cosa por estilo que no suenan cada día más porque estamos
00:02:13
aprendiendo que es hoy es el momento un poquito de entender algo más sobre qué
00:02:18
es este método main que quieren decir las palabras que están por allí etcétera
00:02:25
etcétera método main nosotros hemos visto como el punto de acceso a mi
00:02:29
programa vale siempre el ordenador necesita saber cuál es la primera
00:02:35
instrucción que tiene que ejecutar para luego poder empezar a trabajar ya los
00:02:42
objetos llamar a otros métodos etcétera entonces este método main con este
00:02:46
prototipo es el es un método especial no es un método que tú te puedes inventar
00:02:51
es así porque es una forma de reconocerse tutor todos los otros métodos
00:02:59
llámalos como quieras a los parámetros que quieras pero existe este método
00:03:04
especial que si yo lo encuentro entiendo que es el punto de acceso de la
00:03:10
ejecución es donde empieza mi trabajo hemos visto también que en un programa
00:03:15
complejo donde haya varias clases puede ser que haya varios men sí cada clase
00:03:22
puede tener su men pero hemos visto también que normalmente en mi programa
00:03:30
tendré un men principal un men men que es el que hace trabajar de verdad mi
00:03:35
programa que empieza mi sistema vale y luego puede haber otros men que son más
00:03:43
bien de prueba para decir he hecho una clase quiero probar esa clase que hacer
00:03:48
algunos a ver si está funcionando como tiene que funcionar y por lo tanto me
00:03:52
creo un men la uso de objetos de esa clase
00:03:58
vimos vemos que este men es estático es un método estático si os acordáis
00:04:04
vosotros antes de navidad antes de empezar con orientación objetos cuando
00:04:10
creáis una función o una procedura cuando creáis otro método siempre le
00:04:16
ponéis el estático vale llamaba y desde el método men que era estático otros
00:04:20
métodos que también eran estáticos porque no había objetos vale cuando un
00:04:27
método no depende de ningún objeto pues entonces es estático en general
00:04:32
cuando algo dentro de java no depende de un objeto no es una característica una
00:04:38
tributo de un objeto no es un método propio de un objeto pues entonces es más
00:04:45
propio de la clase entonces es un método estático men el método men es un
00:04:50
método estático porque porque cuando yo pido cuando yo llamo el men cuando yo
00:04:57
empiezo a trabajar con el men todavía no he creado ningún objeto no existen
00:05:01
objetos entonces no tengo un objeto sobre el que llamar el método men no
00:05:06
existiría entonces necesariamente tiene que ser algo que no dependa de la
00:05:10
creación de un objeto si el men no fuera estático yo debería hacer antes
00:05:16
una niu de algo crear un objeto es sobre este objeto llamar el men cosa que no
00:05:21
puede hacer porque sería hacer algo antes del inicio del propio de la propia
00:05:26
del propio programa de hecho es estático se puede buscar su
00:05:31
locación sin necesidad que exista un objeto de esa clase vale
00:05:38
imaginemos que sea mi clase no es obligatorio que una clase tenga un men
00:05:43
vale una clase puede perfectamente vivir
00:05:49
existir sin que tenga un men dentro lo que pasa es que por sí misma no no
00:05:55
podrá hacer nada hasta cuando otra clase con un men creará un objeto de esa
00:06:00
clase lo usará o usará sus métodos estáticos ahora veremos un poquito más
00:06:05
adelante que es estático y que vale pero si yo quiero ejecutar esa clase yo
00:06:11
quiero que esa clase sea ejecutable pues entonces sí que necesito que tenga el
00:06:19
método men otra cosa del método men que no hemos
00:06:25
visto hemos visto relativamente es que el método men tiene un parámetro esta
00:06:30
cosa aquí que al principio escribiréis porque os lo decía yo hoy hoy en día
00:06:36
con vuestros conocimientos podéis empezar a entender qué es esto que es
00:06:42
esto que es string es una red vale es una red que se llama
00:06:47
args que es una red de string args que es args
00:06:54
argumentos parámetros y que es esta cosa aquí esta cosa aquí deriva del hecho
00:07:03
que cuando yo lanzo una clase puedo al momento de lanzarla darle algunos
00:07:11
parámetros en el momento en que la ejecuto
00:07:20
si vosotros habéis utilizado alguna vez el cmd la pantalla negra donde están los
00:07:25
con los comandos y habéis hecho un ping habéis hecho un ping alguna vez en vuestra
00:07:31
vida ping sería la clase sería lo que ejecuto es un programa pero a este
00:07:35
programa le tengo que pasar un parámetro que tengo que decir a quien
00:07:41
hacer el ping o a lo mejor le paso más de un parámetro sabéis que puedo poner
00:07:45
ping menos t y la ip a la que hago el ping estas cosas que añado después del
00:07:49
comando son parámetros que paso son argumentos y en java como funciona esta
00:07:56
cosa imaginábamos que una clase mi clase vale
00:08:04
se ejecutaría que están en el fichero mi clase punto java si se compilaría os
00:08:08
acordáis lo hicimos el uno de las primeras veces con javac mi clase punto
00:08:16
java javac que está por java compiler lo que crearía pillaría mi clase punto
00:08:22
java y crea mi clase punto clas que sería una traducción vale una compilación
00:08:29
desde el lenguaje java que habéis escrito vosotros hacia otro lenguaje
00:08:37
intermedio que es el bytecode que es el que interpreta luego la java virtual
00:08:43
machine como intérprete os acordáis de estas cosas
00:08:48
vale una vez que yo he creado la clase para ejecutar la clase mi clase en este
00:08:53
caso uso el comando java mi clase sin el punto clas vale entonces esto el
00:08:59
comando real es java que es como el que dice mira crea una arranca la java
00:09:05
virtual machine arranca lo que hace falta para ejecutar mi programa y le
00:09:13
pasas como parámetro mi clase que será el punto clas que será un código en
00:09:17
bytecode y el intérprete el java virtual machine empieza a leer este fichero de
00:09:24
aquí y interpretar los comandos que están allí dentro
00:09:29
cada comando lo ejecuta otro comando lo ejecuta otro comando lo interpreta lo
00:09:32
ejecuta sin embargo puedo usar el comando java mi clase y luego poner
00:09:37
cosas detrás separada por un espacio vale por ejemplo en este caso java mi
00:09:47
clase algo tres otra cosa estas cosas de aquí
00:09:53
me las encuentro en ax
00:09:59
o sea que si yo lanzo este comando de aquí y luego dentro del main a cedo
00:10:07
arx de 0 encontraré esto y si acedo a arx de 1 encontraré esto si acedo a arx de 2
00:10:13
encontraré otra cosa
00:10:24
de qué tipo
00:10:29
string o sea que esto es 3 es 3 como string
00:10:32
si luego yo allí quería un número y lo quiero cambiar pues de alguna forma
00:10:39
tendré que transformar este número en este string en un número como pues hay
00:10:45
formas de hacer antes o después
00:10:51
como en eclipse no lanzamos las cosas así hay por algún lado una opción al
00:10:55
ejecutar que me dice oye mira cuando lanzas este programa cuando lanzas este
00:11:01
main pasale estas cosas como argumentos ahora después hacemos una prueba para
00:11:09
ver dónde está y cómo funciona y para qué me sirve esto pues a lo mejor
00:11:15
imaginaos que vosotros hacéis una clase que cuando empieza tiene que cargar un
00:11:20
fichero que está en el sistema operativo con el sistema en falsista me
00:11:25
dejaba por algún lado y que este fichero no siempre tiene que ser mismo vale
00:11:30
dependiendo de lo que haces cargas uno o otro a lo mejor en vez de lanzar ya va mi
00:11:35
clase luego allí dentro y la búsqueda pues a lanzas ya va mi clase y el nombre
00:11:41
del fichero y él sabe que cuando empieza en arx de 0 se encontrará el
00:11:45
nombre del fichero que tiene que ir a mirar
00:11:51
es una forma de pasarle datos a mi programa va a hacerme midad en mi
00:11:54
programa dependiente de un parámetro que se da se proporciona a la hora de
00:12:00
ejecutar el momento en que lanzó el programa le paso estos parámetros al
00:12:08
lado ejemplos son por ejemplo tingo que recibe un parámetro de dónde hacer el
00:12:13
mismo sí entonces esto alguna vez en vuestra vida pues puede ser que sea que
00:12:19
sirva existe está allí y no sirve para entender esta cosa de aquí porque está
00:12:27
aquí y para qué sirve
00:12:35
también esta es una rey yo puedo preguntar
00:12:39
oye cuál es la longitud de arx de arx arx.length si arx.length es igual a cero
00:12:44
quiere decir que no hay parámetros adicionales si arx.length es mayor que
00:12:52
cero que decir que el usuario me ha dado algunos parámetros entonces yo puedo
00:12:59
hacer un programa que si el usuario no me ha dado ningún programa ningún
00:13:03
parámetro ningún argumento a lanzarlo pues haga una cosa y si el usuario me ha
00:13:07
dado algunos argumentos pues interprete estos argumentos mire que hacen esos
00:13:13
argumentos ejecute algo y luego siga con mi programa
00:13:18
¿se entiende? ¿dudas?
00:13:22
cómo se usa después lo veremos
00:13:26
además del método main existe la clase main cuidado no en el sentido que se
00:13:30
tiene que llamar así ¿vale? cuanto que en un programa en un sistema en un conjunto
00:13:37
de clases yo siempre tengo que elegir cuál de estas clases es mi clase
00:13:44
principal la clase principal normalmente es la clase que yo lanzo
00:13:50
la clase que tiene un método main y es el método main que yo lanzo cuando
00:13:56
quiero hacer funcionar mi sistema yo he hecho un sistema de gestión de alumnos
00:14:01
de una escuela ¿vale? y tendrá alumno tendrá escuela tendrá aula tendrá un
00:14:06
montón de clases ¿vale? y a lo mejor cada una de estas clases tiene un main para
00:14:11
probar las funcionalidades alumno tiene un main para probar la funcionalidad del
00:14:16
alumno clase tiene un main para probar las funcionalidades de la clase ¿vale? pero de
00:14:20
todas estas habrá una clase será la clase escuela algo para decir ¿vale? que tiene un
00:14:26
main que cuando lo lanzo no sirve para probar escuela sino que lanza
00:14:33
efectivamente el programa que estoy desarrollando lanza la interfaz para que
00:14:36
yo pueda luego añadir alumnos quitar alumnos me hace el menú de asociar un
00:14:40
alumno con un aula con una asignatura etcétera etcétera los programas que
00:14:45
creamos nosotros esa clase de allí es en un cierto sentido la clase principal
00:14:49
siempre en un sistema debería haber una clase principal para que esta es la que
00:14:53
se lanza para ejecutar ¿si? no tiene por qué llamarse main repito puede llamarse
00:15:00
escuela puede llamarse lo que sea la gama la idea sería que en un cierto sentido
00:15:07
sea fácil de reconocer para que cuando un programador pilla mi código pues sepa
00:15:12
cuál es la clase que tiene que ejecutar ¿si?
00:15:18
vale esto sobre el concepto del método main y lo que es ¿vale? para que si otro
00:15:23
tema de esta clase es el concepto de estático y no estático ¿vale? ya lo hemos
00:15:33
dicho hace tres minutos ya lo hemos dicho también el miércoles si no me equivoco
00:15:39
que salió un poquito pero la idea es tenemos una palabra reservada un
00:15:44
modificador ¿vale? que es la palabra estática esta palabra a veces la hemos
00:15:50
usado a veces no hemos visto si os habéis centrado que todo lo que es
00:15:56
dependiente de objetos no tiene esta palabra todo lo que no depende de un
00:16:01
objeto por sí mismo sino que depende más bien de la clase ¿vale? que puede
00:16:06
funcionar sin crear objetos pues entonces es estático ¿si?
00:16:11
primero si yo no uso la palabra reservada estática lo que estoy haciendo
00:16:18
es que o este esta variable o este atributo o este método se refieren a un
00:16:24
objeto concreto a una instancia de una clase ¿si? no puedo acceder a este
00:16:33
atributo o no puedo ejecutar este método si no hay un objeto concreto
00:16:40
creado antes sobre el que yo pueda acceder o que yo pueda utilizar ¿vale?
00:16:47
entonces un atributo de una clase aparecerá en todas las instancias de
00:16:52
esa clase esto sería si es estático ¿vale? pero cada instancia tendrá un valor
00:16:57
distinto de ese atributo esto es no estático en el sentido cuando yo en la
00:17:05
clase cuadrado digo que es que tiene un lado ¿vale? este lado en todas las
00:17:10
instancias de esa clase aparecerá el atributo lado pero cada objeto tendrá un
00:17:18
valor propio distinto de los otros objetos este valor no es compartido
00:17:25
entre instancias de la clase tendréis cuadrado 1 que tendrá lado 4 y el
00:17:30
cuadrado 2 que tendrá lado 5 ¿vale? el cuadrado 1 tiene lado pero el valor que
00:17:36
tiene dentro es distinto del cuadrado 2 ¿se entiende esto? entonces yo tengo mi
00:17:42
molde cuando lo instancio tengo que mirar todos los atributos que no son
00:17:48
estáticos y darle un valor y esto en un cierto sentido crea el estado de ese
00:17:54
objeto y le da en cierto sentido independencia ¿vale? los valores que tengo
00:17:59
aquí no son los mismos que tiene otro objeto son objetos separados e
00:18:07
independientes si modifico un objeto no afecto el otro ¿si?
00:18:11
un método que no es estático ¿vale? quiere decir que hay que llamarlo sobre
00:18:18
un objeto concreto y usará datos de ese objeto concreto en su ejecución lo
00:18:23
hicimos un ejemplo el miércoles ¿vale? es decir que cuando un método no es
00:18:30
estático quiere decir que depende de un objeto es decir usa atributos y
00:18:35
variables de ese objeto concreto si un método no usa ningún atributo de un
00:18:42
objeto y llamarlo sobre objetos distintos haría exactamente la misma
00:18:49
cosa posiblemente tiene que ser estático si no es estático quiere decir que
00:18:53
depende de la instancia ¿si? también tener en cuenta que cuando estamos en el mundo
00:18:59
no estático todo se referencia al objeto ¿vale? es decir si yo creo un objeto
00:19:06
objeto x es igual a new object ¿vale? un nuevo objeto luego los métodos y los
00:19:16
atributos de este objeto lo llamamos con x punto vete a ese objeto el objeto x y
00:19:23
allí dentro acceda su variable atributo 1 vete al método x y acceda a su método
00:19:30
método 1 con estos parámetros pero siempre es x punto algo lo estoy
00:19:36
llamando sobre el objeto para saber a qué objeto me refiero puesto que estos
00:19:41
dependen del objeto pues tengo que utilizar el objeto mismo si tengo tres
00:19:45
objetos x, y, z pues tendré que elegir a cuáles de estos tres objetos voy a
00:19:50
utilizar para poder acceder a sus variables o acceder a sus métodos ¿se entiende?
00:19:56
¿dudas?
00:20:03
esto es un ejemplo de no estático aquí tenemos rectángulo ¿vale? la clase
00:20:07
rectángulo tiene variables no estáticas largo y ancho tiene
00:20:17
método set data que me permite poner esta cosa aquí no tiene un constructor
00:20:23
por ejemplo en este caso y permite hacer el área fijaos que cuando hago
00:20:28
este es un método ¿vale? el método área lo veo aquí no le paso parámetros ¿por qué?
00:20:36
porque área este es un método que pertenece a este objeto cuando yo lo
00:20:42
llamaré la llamaré sobre un objeto concreto entonces largo y ancho que voy
00:20:47
a utilizar aquí no son parámetros que me pasas tú para calcular el área son el
00:20:53
largo y el ancho de ese rectángulo concreto entonces si lanzo este método
00:20:57
en el rectángulo que tiene 2 y 4 me utilizará 2 y 4 como parámetros si
00:21:05
lanzo este método en el rectángulo que tiene 20 y 30 pues utilizaré 20 y 30
00:21:10
para estos parámetros ¿se entiende? y esto es así cuando yo tengo mi clase
00:21:16
rectángulo área que tiene el main ¿vale? aquí me creo dos rectángulos distintos ¿vale?
00:21:24
excepto los datos los parámetros de rectángulo 1 esto es un método que se
00:21:33
está llamando sobre el objeto rectángulo 1 no toca nada y para nada las variables
00:21:40
de rectángulo 2 y cuando el resultado es rectángulo 1 punto área pues veis que
00:21:45
no le paso ningún parámetro esto que me calculará me irá a rectángulo 1 que
00:21:51
tiene valores 5 y 6 y por lo tanto utilizará dentro del área el valor de
00:21:56
5 y 6 para ancho y largo ¿si? cuando lo hago con rectángulo 2 estoy
00:22:00
haciendo un rectángulo completamente distinto y calculará sobre el otro
00:22:06
distinto fijaos que los métodos como también si
00:22:09
quisiera acceder a sus parámetros a sus atributos se llaman sobre el objeto
00:22:14
sobre este objeto ¿vale? dudas
00:22:20
sin embargo ¿qué pasa cuando en vez utilizamos estática? que antes lo usábamos
00:22:31
sin saber que era y ahora en vez empezamos a entender un poquito que es
00:22:36
¿vale? cuando lo que lo que estoy utilizando sea un
00:22:40
atributo sea una variable sea un método no depende de un objeto es
00:22:49
independiente de la instancia es parte de la clase pero independiente de la
00:22:55
instancia ¿vale? es decir que toda la instancia de esta clase siempre harían
00:23:01
lo mismo independientemente de que su ancho y largo sea distinto o que sus
00:23:08
variables sean distintas pues entonces este método no depende de los objetos
00:23:12
sino es un método estático
00:23:17
tú puedes hacer un atributo estático pero no es un atributo los atributos son
00:23:23
de los objetos entonces cada objeto tiene sus atributos aquí es que tú
00:23:28
estás usando un valor que no es propio de cada objeto sino que por ejemplo es
00:23:33
compartido por todos los objetos
00:23:40
entonces estas las cosas estáticas no dependen del objeto dependen de la
00:23:45
clase ¿vale? a lo mejor son funcionalidades o son valores interesantes para esa clase
00:23:53
¿vale? pero no dependen del objeto en concreto hago un ejemplo a ver si lo
00:23:59
entendemos clase alumno ¿si? nombre el nombre de un alumno es estático o no
00:24:07
estático no estático porque un alumno se llamará de una forma y otro alumno se
00:24:14
llamará de otra forma la edad de un alumno no estático el número de alumnos
00:24:20
que has creado
00:24:28
el número de alumnos que has creado en un cierto momento de la vida de tu
00:24:35
programa has creado hasta aquí siete alumnos eso depende del objeto
00:24:41
si yo creo el objeto 1 objeto 2 objeto 3 y ahora le pregunto al objeto 1 al alumno
00:24:49
1 ¿cuántos alumnos hay? ¿cuánto me dice? 3, ¿al alumno 2? 3, ¿al alumno 3? 3
00:24:55
pues esta información depende del objeto
00:25:06
pues esta información sería estática
00:25:11
no cambia de un objeto a otro y es una información como compartida entre todas
00:25:16
las instancias de la clase todos los instancias de la clase pueden acceder a
00:25:22
cuántos alumnos hay hasta ahora y a lo mejor el alumno 1 cuando se ha creado
00:25:26
él pues era uno solo pero ahora que han creado otros 10 pues él tendrá que
00:25:31
decir hoy mira hay 11 alumnos también
00:25:36
¿si tiene tendencias?
00:25:40
espera, espera que aquí, ok boomer, entras en youtube los videos tendencias
00:25:47
es algo que se comparte por todos los usuarios
00:25:55
¿no?
00:25:57
tú contas con tu novia y te van a salir los videos
00:25:59
pero yo me van a salir los mismos
00:26:01
es algo que
00:26:03
bueno, es un momento de sábado
00:26:05
mira, a un nivel muy abstracto quizás
00:26:07
quizás
00:26:11
a un nivel lo práctico hay que ver cómo está hecho
00:26:13
¿vale?
00:26:15
pero la idea podría ser eso
00:26:17
podría ser
00:26:21
asumiendo que
00:26:23
porque yo creo que eso también no son lo mismo para todos
00:26:25
esos son los mismos para todos
00:26:27
los que tengan los mismos intereses
00:26:29
pero a mí me va a dar
00:26:31
los videos tendencia
00:26:33
los intereses míos hacia otros
00:26:36
y eso depende de un atributo mío personal
00:26:38
pero bueno
00:26:40
no lo sé
00:26:42
si hay algo
00:26:44
a ver para youtube
00:26:46
si lo pillas
00:26:50
considerando que no es programación
00:26:52
pero para hacer un ejemplo
00:26:54
si yo dijera que
00:26:56
youtube funciona con unos cuantos videos
00:26:58
te lo aconsejo en base a tus cosas
00:27:00
y unos cuantos videos son los mismos
00:27:02
para todos
00:27:04
pues eso de allí podría ser estático
00:27:06
en un cierto sentido
00:27:08
¿sí?
00:27:10
si tú lo piensas
00:27:22
como documento
00:27:24
DNI
00:27:26
a lo mejor
00:27:28
pero si lo piensas como tu DNI
00:27:30
pues tú tienes tu nacionalidad
00:27:33
tendrás España
00:27:35
porque tu atributo nacionalidad
00:27:37
es español
00:27:39
pero si mañana cambias nacionalidad
00:27:41
tú cambias eso
00:27:43
depende de ti
00:27:45
sobre nacionalidad
00:27:47
si considerásemos
00:27:53
no al usuario
00:27:55
sino al documento por sí mismo
00:27:57
como una clase
00:27:59
no como DNI
00:28:01
sino como DNI Español
00:28:03
pero sería también final
00:28:11
no cambias
00:28:13
no es una variable
00:28:15
es una constante
00:28:17
si lo piensas así
00:28:19
¿sí?
00:28:21
hay un ejemplo aquí
00:28:23
ahora lo vemos
00:28:25
¿vale?
00:28:27
una variable estática tendrá
00:28:30
el mismo valor para cualquier objeto
00:28:32
que la use
00:28:34
no depende del objeto sino de la clase
00:28:36
es en un cierto sentido una variable global
00:28:38
yo ponga allí un valor
00:28:40
este valor puede cambiar
00:28:42
pero si cambia, cambia para todos
00:28:44
¿sí?
00:28:46
como las leyes
00:28:48
las leyes son estáticas
00:28:52
sí
00:28:56
es complejo
00:28:58
sacarme del mundo informal
00:29:00
y hacer analogías de ese estilo
00:29:02
puede ser peligroso
00:29:04
a lo mejor hay cosas
00:29:06
luego no estoy seguro
00:29:08
si es para todos igual
00:29:10
un método estático no se llama
00:29:12
sobre un objeto sino sobre la clase
00:29:14
esto es importante
00:29:16
cuando el método no es estático
00:29:18
se hace referencia a un objeto
00:29:20
¿vale? aquí
00:29:22
rec2.setData
00:29:24
rec2.area
00:29:26
mientras que si
00:29:28
quiero
00:29:30
si tengo un método estático
00:29:32
pues lo llamo sobre la clase
00:29:34
nosotros hemos usado el otro día
00:29:36
math.random
00:29:38
¿os acordáis?
00:29:40
math no es un objeto
00:29:42
es la clase math
00:29:44
entonces random es un método estático
00:29:46
¿por qué es un método estático?
00:29:48
porque es un método que devuelve
00:29:50
un número entre 0 y 0,9 periódico
00:29:52
entonces que lo llame sobre un objeto
00:29:54
o sobre otro
00:29:56
siempre hará lo mismo
00:29:58
darte un número aleatorio entre 0 y 0,9
00:30:00
no depende del objeto sobre el que lo llame
00:30:02
¿si? por lo tanto es estático
00:30:04
la clase tiene un atributo
00:30:18
que es el número de alumnos
00:30:20
¿el alumno tendría ese atributo también?
00:30:22
no lo tiene el alumno
00:30:24
lo tiene la clase
00:30:26
pero cuando tú tienes un alumno
00:30:34
creas los atributos de ese alumno
00:30:36
no los estáticos
00:30:38
vamos a hacer
00:30:46
esta clase es estática
00:30:48
donde tiene
00:30:50
static e int
00:30:52
operaciones hechas
00:30:54
este señor de aquí
00:30:56
no es un
00:30:58
atributo
00:31:00
de un objeto
00:31:02
es un atributo
00:31:04
es una variable que depende
00:31:06
de esta clase, es estático
00:31:08
me cuenta cuantas operaciones
00:31:10
han sido hechas
00:31:12
al principio hay 0
00:31:14
quien tiene esta
00:31:16
información, ¿la tiene un objeto?
00:31:18
no
00:31:20
la tiene la clase
00:31:22
¿cada objeto puede acceder a esta
00:31:24
cosa? si
00:31:26
y todos verán la misma
00:31:28
y si un objeto la modifica
00:31:30
todos los demás verán la modificación
00:31:32
es un objeto, es una variable
00:31:34
compartida entre todas las instancias
00:31:36
mientras que
00:31:38
una variable
00:31:40
de un objeto, un atributo de un objeto
00:31:42
se lo modifica, los otros
00:31:44
objetos no se ven afectados
00:31:46
son independientes, este de aquí
00:31:48
es una variable que vale para todos
00:31:50
una variable de clase
00:31:52
no una variable de objeto
00:31:54
no lo entiendo
00:32:08
esto puede cambiar
00:32:10
pues entonces
00:32:13
no es estático
00:32:15
si tu en tu programa
00:32:23
te das cuenta que has creado una operación
00:32:25
estática y luego te das cuenta que
00:32:27
eso depende de los objetos
00:32:29
pues entonces has hecho un error de diseño
00:32:31
porque eso no es una variable de clase
00:32:33
si distintos
00:32:35
objetos tienen valores distintos
00:32:37
pues entonces quiere decir que
00:32:39
no es de clase
00:32:41
será de un grupo
00:32:43
tendrá 3 y un grupo tendrá 4
00:32:45
entonces allí luego hay técnicas
00:32:47
para esta, dividirla en 2
00:32:49
subclase
00:32:51
clase estática 1 y clase estática 2
00:32:53
y estos comparten
00:32:55
una y estos comparten otra
00:32:57
pero eso ya con herencia
00:32:59
operaciones, esta clase estática
00:33:05
aquí tiene 2 tipos
00:33:07
de operaciones
00:33:09
tiene el método estático
00:33:11
calcular a rectángulo
00:33:13
fijaos
00:33:15
de que rectángulo
00:33:17
tengo aquí objetos rectángulos
00:33:19
no, entonces como lo hago esto de aquí
00:33:21
pues le paso directamente
00:33:23
los valores
00:33:25
te digo, mira, aquí habrá
00:33:27
cuando te pido
00:33:29
calcularlo a un rectángulo
00:33:31
te paso el largo y el ancho del rectángulo
00:33:33
fenomenal
00:33:35
esto
00:33:37
hace que independientemente
00:33:39
de que objeto llame
00:33:41
este método de aquí
00:33:43
no es que yo voy a mirar los atributos de este objeto
00:33:45
y entonces objetos distintos
00:33:47
hacen cosas distintas
00:33:49
no, te voy a pasar parámetros
00:33:51
directamente y por lo tanto
00:33:53
que lo haga un objeto, lo haga otro
00:33:55
no depende del objeto
00:33:57
depende de los parámetros
00:33:59
que le paso aquí
00:34:01
se entiende eso
00:34:03
entonces este de aquí
00:34:05
es desvinculado de las
00:34:07
de las instancias
00:34:09
de esta clase
00:34:11
y que hace esta operación
00:34:13
pues lo mismo que antes
00:34:15
calcula esta cosa aquí
00:34:17
y luego soma uno
00:34:19
a las operaciones hechas
00:34:21
antes no tenía
00:34:23
una variable estática
00:34:25
antes cada rectángulo
00:34:29
al máximo podía tener
00:34:31
una variable suya
00:34:33
diciendo
00:34:35
cuantas operaciones han hecho sobre de mi
00:34:37
esto de aquí
00:34:43
es cualquier
00:34:45
operación de esta que se haga
00:34:47
quien lo haga
00:34:49
pues suma uno a estas operaciones hechas
00:34:51
entonces en un determinado momento yo puedo acceder
00:34:53
a esta variable y ver cuantas operaciones
00:34:55
se han hecho, quien la ha hecho no lo se
00:34:57
pero si que se han hecho 66
00:34:59
operaciones en esta ejecución
00:35:01
está claro que si apago
00:35:03
y empiezo otra vez
00:35:05
pues esto será reseteado a cero
00:35:07
si la persistencia de datos
00:35:11
entre una ejecución y otra la veremos más adelante
00:35:13
que es escribir en ficheros
00:35:15
y tengo también otra
00:35:19
otro método estático
00:35:21
que es calcula perímetro rectángulo
00:35:23
que me da siempre el ancho
00:35:25
y el largo, me calcula el perímetro
00:35:27
esta también es una operación
00:35:29
suma uno a las operaciones
00:35:31
entonces luego que hago
00:35:33
como se usa esto
00:35:37
pues si aquí tengo un main
00:35:39
me imagino
00:35:41
dos rectángulos, el rectángulo uno
00:35:43
que está de 3 y 6, uno es 3
00:35:45
que son los mismos, este sería el rectángulo 2
00:35:47
son los mismos valores
00:35:49
que le daba antes
00:35:51
como calculo el área del rectángulo
00:35:53
pues haciendo
00:35:55
la operación estática punto
00:35:57
calcula rectángulo de 3,6
00:35:59
este es el método
00:36:03
estos son los parámetros de rectángulo
00:36:05
que me he imaginado yo
00:36:07
cuidado, no hay un objeto rectángulo aquí
00:36:09
no he hecho por ningún lado
00:36:11
y lo que hace
00:36:13
es llamarlo sobre la clase
00:36:15
no sobre una instancia
00:36:17
como lo veo esto fácilmente
00:36:19
porque empieza por mayúsculo
00:36:21
entonces es una clase
00:36:23
más punto random
00:36:25
más la M mayúscula
00:36:27
son las
00:36:29
dudas?
00:36:31
si no le das estos dos
00:36:41
si yo te pongo calcular
00:36:49
rectángulo de 4
00:36:51
no existe este método
00:36:53
a menos que yo
00:36:55
no sobrecargue el método
00:36:57
arriba y cree también
00:36:59
un método como este de aquí
00:37:01
que solo recibe un int
00:37:03
que es ancho y largo
00:37:05
que es para calcular cuadrados
00:37:07
y entonces si que me volvería a funcionar
00:37:09
fijaos que yo me calculo
00:37:17
el área del rectángulo
00:37:19
otro rectángulo distinto
00:37:21
luego el perímetro de otra cosa
00:37:23
y luego al final digo
00:37:25
he hecho clase estática
00:37:27
punto operaciones hechas
00:37:29
operaciones, que me escribirá esto?
00:37:31
cuanto vale esto?
00:37:35
tres
00:37:43
por cada una de estas operaciones
00:37:45
me habrá sumado uno
00:37:47
de los tres
00:37:49
fijaos que acedo
00:37:51
a una variable
00:37:53
de la clase
00:37:55
no de un objeto
00:37:57
entonces
00:37:59
cuando estoy en ámbito estático
00:38:01
trabajo con las clases
00:38:03
cuando estoy en ámbito no estático
00:38:05
trabajo con instancias
00:38:07
de la clase
00:38:09
los métodos
00:38:11
y los atributos
00:38:13
digamos así, las variables
00:38:15
no estáticas
00:38:17
la llamo sobre una clase
00:38:19
los métodos y atributos
00:38:21
no estáticos
00:38:23
lo llamo sobre un objeto
00:38:25
dudas?
00:38:29
preguntas?
00:38:31
todo lo que no es estático
00:38:33
es propio del objeto
00:38:35
cambia entre objetos
00:38:37
y no se interfiere
00:38:39
uno con otro
00:38:41
son independientes
00:38:43
estático depende de la clase
00:38:45
y varias instancias
00:38:47
que miran, pues mirarían
00:38:49
la misma cosa
00:38:51
es compartida entre instancias
00:38:53
dudas?
00:38:57
y la pregunta es
00:39:03
pero una clase puede ser o estática
00:39:05
o no estática
00:39:07
no se mezclan las cosas
00:39:09
se puede mezclar
00:39:11
estático y estático
00:39:13
¿habéis mezclado alguna vez
00:39:15
estático y estático?
00:39:17
¿todas las veces que habéis hecho un objeto
00:39:23
y luego has hecho un main, el main es estático?
00:39:25
entonces sí
00:39:27
se puede mezclar
00:39:29
cosas
00:39:31
estática y no estática
00:39:33
pueden coexistir
00:39:35
yo me puedo hacer la clase
00:39:37
rectángulo
00:39:39
todos los rectángulos tienen un ancho
00:39:41
y todos los rectángulos tienen un largo
00:39:43
pero la clase rectángulo
00:39:45
tiene una variable estática
00:39:47
que es cuántos rectángulos
00:39:49
se han creado
00:39:51
entonces cada vez
00:39:53
que yo
00:39:55
ejecuto
00:39:57
un constructor
00:39:59
de rectángulo al que le paso
00:40:01
los parámetros
00:40:03
lo que hago es asignar
00:40:05
siempre hemos hecho los valores
00:40:07
a los atributos
00:40:09
pero además la variable estática
00:40:11
esa de arriba
00:40:13
más más
00:40:15
¿sí?
00:40:17
entonces cuando llamo el área
00:40:19
hago el ancho por largo
00:40:21
y luego
00:40:23
public static int
00:40:25
total rectángulos creados
00:40:27
me hago un método estático
00:40:29
que lo que hace es
00:40:31
devolverme cuántos rectángulos
00:40:33
se han creado
00:40:35
¿sí?
00:40:37
entonces cuando luego haré un main
00:40:39
que usa esta clase de aquí
00:40:41
habrá algunos métodos
00:40:43
que lo llamaré sobre instancia
00:40:45
de rectángulo, haré new rectángulo
00:40:47
y luego sobre este objeto creado
00:40:49
por ejemplo calcularé el área
00:40:51
o puedo preguntarle el largo
00:40:53
y habrá otras cosas que en vez
00:40:55
la llamo sobre
00:40:57
la
00:40:59
sobre la
00:41:01
¿sí?
00:41:03
¿entiende?
00:41:05
ahora luego haremos esto
00:41:07
hacemos un ejemplo
00:41:09
pero la idea
00:41:11
es esta de aquí
00:41:13
estas son como variables
00:41:15
compartidas que no dependen
00:41:17
de la instancia del objeto
00:41:19
y que todos los objetos pueden ver
00:41:21
¿vale?
00:41:23
en un cierto sentido
00:41:25
no sé si quería decir
00:41:27
algo más sobre esto
00:41:29
¿vale?
00:41:33
vale
00:41:41
vale
00:41:45
hagamos una cosa
00:41:49
- Subido por:
- Stefano C.
- Licencia:
- Reconocimiento
- Visualizaciones:
- 6
- Fecha:
- 15 de enero de 2024 - 11:51
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 41′ 54″
- Relación de aspecto:
- 4:3 Hasta 2009 fue el estándar utilizado en la televisión PAL; muchas pantallas de ordenador y televisores usan este estándar, erróneamente llamado cuadrado, cuando en la realidad es rectangular o wide.
- Resolución:
- 960x720 píxeles
- Tamaño:
- 116.30 MBytes