1 00:00:00,000 --> 00:00:06,080 voy a grabar esta clase por lo tanto si tenéis si decís algo o preguntáis algo 2 00:00:06,080 --> 00:00:11,640 pues me dais autorización a que se grabe también vale entonces hasta ahora 3 00:00:11,640 --> 00:00:17,240 nosotros hemos visto un poquito unas pinceladas de lo que es la orientación 4 00:00:17,240 --> 00:00:19,800 a objetos 5 00:00:19,800 --> 00:00:31,120 y polimorfismo y cosas por el estilo todavía no los hemos tocado sólo vamos a tocar más adelante 6 00:00:31,120 --> 00:00:36,000 las interfaces etcétera etcétera pero por algún lado tenemos que empezar 7 00:00:36,000 --> 00:00:39,760 estamos viendo sustancialmente la diferencia entre clase objeto ahora 8 00:00:39,760 --> 00:00:45,560 estamos trabajando allí estamos viendo que la clase es un molde es una 9 00:00:45,560 --> 00:00:51,240 generalización de un concepto que estoy modelizando y luego una vez que tengo 10 00:00:51,240 --> 00:00:56,720 este molde tengo esta estructura genérica de cómo tienen que ser las 11 00:00:56,720 --> 00:01:02,520 entidades que pertenecen a esta clase pues la instancio y creo gestos 12 00:01:02,520 --> 00:01:07,120 concretos vale la clase cuadrado medida en general la característica del 13 00:01:07,120 --> 00:01:10,120 cuadrado y las operaciones que puede hacer sobre el cuadrado y luego yo 14 00:01:10,120 --> 00:01:15,080 crearé un cuadrado concreto el cuadrado de lado 4 y sobre ese cuadrado 15 00:01:15,080 --> 00:01:19,880 podré hacer todas las operaciones genéricas que hemos dicho antes 16 00:01:19,880 --> 00:01:25,800 hoy vamos a ver algunos conceptos adicionales siempre sobre el que se 17 00:01:25,800 --> 00:01:30,360 relacionan con el concepto de clases sobre el desarrollo de las clases vale 18 00:01:30,360 --> 00:01:36,800 son varios conceptos vamos viendo uno tras otro y se quedan allí para que 19 00:01:36,800 --> 00:01:43,200 vosotros luego los interior y 6 la primera cosa que vamos a ver es el 20 00:01:43,200 --> 00:01:48,440 famoso método vale nosotros este método lo estamos utilizando desde el 21 00:01:48,440 --> 00:01:52,760 primer día que hemos empezado a programar en ya desde el primer día que 22 00:01:52,760 --> 00:01:57,600 hemos creado un programita pues empezamos con la estructura básica de un 23 00:01:57,600 --> 00:02:02,600 programa en java pusimos esta cosa aquí y dije va a ignorar todo vosotros lo que 24 00:02:02,600 --> 00:02:07,880 vais a hacer es trabajar dentro de este método main y allí ponéis el ejercicio 25 00:02:07,880 --> 00:02:13,800 vale con el tiempo hemos visto que tienen algunas palabras pablo y que 26 00:02:13,800 --> 00:02:18,280 estática voy de cosa por estilo que no suenan cada día más porque estamos 27 00:02:18,280 --> 00:02:25,080 aprendiendo que es hoy es el momento un poquito de entender algo más sobre qué 28 00:02:25,080 --> 00:02:29,080 es este método main que quieren decir las palabras que están por allí etcétera 29 00:02:29,080 --> 00:02:35,720 etcétera método main nosotros hemos visto como el punto de acceso a mi 30 00:02:35,720 --> 00:02:42,440 programa vale siempre el ordenador necesita saber cuál es la primera 31 00:02:42,440 --> 00:02:46,520 instrucción que tiene que ejecutar para luego poder empezar a trabajar ya los 32 00:02:46,520 --> 00:02:51,680 objetos llamar a otros métodos etcétera entonces este método main con este 33 00:02:51,680 --> 00:02:59,600 prototipo es el es un método especial no es un método que tú te puedes inventar 34 00:02:59,600 --> 00:03:04,120 es así porque es una forma de reconocerse tutor todos los otros métodos 35 00:03:04,120 --> 00:03:10,000 llámalos como quieras a los parámetros que quieras pero existe este método 36 00:03:10,000 --> 00:03:15,880 especial que si yo lo encuentro entiendo que es el punto de acceso de la 37 00:03:15,880 --> 00:03:22,320 ejecución es donde empieza mi trabajo hemos visto también que en un programa 38 00:03:22,320 --> 00:03:30,840 complejo donde haya varias clases puede ser que haya varios men sí cada clase 39 00:03:30,840 --> 00:03:35,680 puede tener su men pero hemos visto también que normalmente en mi programa 40 00:03:35,680 --> 00:03:43,440 tendré un men principal un men men que es el que hace trabajar de verdad mi 41 00:03:43,440 --> 00:03:48,440 programa que empieza mi sistema vale y luego puede haber otros men que son más 42 00:03:48,440 --> 00:03:52,480 bien de prueba para decir he hecho una clase quiero probar esa clase que hacer 43 00:03:52,480 --> 00:03:58,240 algunos a ver si está funcionando como tiene que funcionar y por lo tanto me 44 00:03:58,240 --> 00:04:03,000 creo un men la uso de objetos de esa clase 45 00:04:04,000 --> 00:04:10,000 vimos vemos que este men es estático es un método estático si os acordáis 46 00:04:10,000 --> 00:04:16,120 vosotros antes de navidad antes de empezar con orientación objetos cuando 47 00:04:16,120 --> 00:04:20,320 creáis una función o una procedura cuando creáis otro método siempre le 48 00:04:20,320 --> 00:04:27,000 ponéis el estático vale llamaba y desde el método men que era estático otros 49 00:04:27,000 --> 00:04:32,480 métodos que también eran estáticos porque no había objetos vale cuando un 50 00:04:32,480 --> 00:04:38,520 método no depende de ningún objeto pues entonces es estático en general 51 00:04:38,520 --> 00:04:45,120 cuando algo dentro de java no depende de un objeto no es una característica una 52 00:04:45,120 --> 00:04:50,840 tributo de un objeto no es un método propio de un objeto pues entonces es más 53 00:04:50,840 --> 00:04:57,200 propio de la clase entonces es un método estático men el método men es un 54 00:04:57,200 --> 00:05:01,680 método estático porque porque cuando yo pido cuando yo llamo el men cuando yo 55 00:05:01,680 --> 00:05:06,000 empiezo a trabajar con el men todavía no he creado ningún objeto no existen 56 00:05:06,000 --> 00:05:10,560 objetos entonces no tengo un objeto sobre el que llamar el método men no 57 00:05:10,560 --> 00:05:16,600 existiría entonces necesariamente tiene que ser algo que no dependa de la 58 00:05:16,600 --> 00:05:21,040 creación de un objeto si el men no fuera estático yo debería hacer antes 59 00:05:21,040 --> 00:05:26,560 una niu de algo crear un objeto es sobre este objeto llamar el men cosa que no 60 00:05:26,560 --> 00:05:31,760 puede hacer porque sería hacer algo antes del inicio del propio de la propia 61 00:05:31,760 --> 00:05:38,320 del propio programa de hecho es estático se puede buscar su 62 00:05:38,320 --> 00:05:43,000 locación sin necesidad que exista un objeto de esa clase vale 63 00:05:43,000 --> 00:05:49,360 imaginemos que sea mi clase no es obligatorio que una clase tenga un men 64 00:05:49,360 --> 00:05:55,160 vale una clase puede perfectamente vivir 65 00:05:55,160 --> 00:06:00,160 existir sin que tenga un men dentro lo que pasa es que por sí misma no no 66 00:06:00,160 --> 00:06:05,360 podrá hacer nada hasta cuando otra clase con un men creará un objeto de esa 67 00:06:05,360 --> 00:06:11,240 clase lo usará o usará sus métodos estáticos ahora veremos un poquito más 68 00:06:11,240 --> 00:06:19,680 adelante que es estático y que vale pero si yo quiero ejecutar esa clase yo 69 00:06:19,680 --> 00:06:25,640 quiero que esa clase sea ejecutable pues entonces sí que necesito que tenga el 70 00:06:25,640 --> 00:06:30,040 método men otra cosa del método men que no hemos 71 00:06:30,040 --> 00:06:36,120 visto hemos visto relativamente es que el método men tiene un parámetro esta 72 00:06:36,120 --> 00:06:42,640 cosa aquí que al principio escribiréis porque os lo decía yo hoy hoy en día 73 00:06:42,640 --> 00:06:47,560 con vuestros conocimientos podéis empezar a entender qué es esto que es 74 00:06:47,560 --> 00:06:54,800 esto que es string es una red vale es una red que se llama 75 00:06:54,800 --> 00:07:03,160 args que es una red de string args que es args 76 00:07:03,160 --> 00:07:11,760 argumentos parámetros y que es esta cosa aquí esta cosa aquí deriva del hecho 77 00:07:11,760 --> 00:07:20,000 que cuando yo lanzo una clase puedo al momento de lanzarla darle algunos 78 00:07:20,040 --> 00:07:25,560 parámetros en el momento en que la ejecuto 79 00:07:25,720 --> 00:07:31,280 si vosotros habéis utilizado alguna vez el cmd la pantalla negra donde están los 80 00:07:31,280 --> 00:07:35,000 con los comandos y habéis hecho un ping habéis hecho un ping alguna vez en vuestra 81 00:07:35,000 --> 00:07:41,760 vida ping sería la clase sería lo que ejecuto es un programa pero a este 82 00:07:41,760 --> 00:07:45,120 programa le tengo que pasar un parámetro que tengo que decir a quien 83 00:07:45,120 --> 00:07:49,360 hacer el ping o a lo mejor le paso más de un parámetro sabéis que puedo poner 84 00:07:49,360 --> 00:07:56,280 ping menos t y la ip a la que hago el ping estas cosas que añado después del 85 00:07:56,280 --> 00:08:04,680 comando son parámetros que paso son argumentos y en java como funciona esta 86 00:08:04,680 --> 00:08:08,680 cosa imaginábamos que una clase mi clase vale 87 00:08:08,680 --> 00:08:16,760 se ejecutaría que están en el fichero mi clase punto java si se compilaría os 88 00:08:16,800 --> 00:08:22,720 acordáis lo hicimos el uno de las primeras veces con javac mi clase punto 89 00:08:22,720 --> 00:08:29,960 java javac que está por java compiler lo que crearía pillaría mi clase punto 90 00:08:29,960 --> 00:08:37,760 java y crea mi clase punto clas que sería una traducción vale una compilación 91 00:08:37,760 --> 00:08:43,560 desde el lenguaje java que habéis escrito vosotros hacia otro lenguaje 92 00:08:43,560 --> 00:08:48,760 intermedio que es el bytecode que es el que interpreta luego la java virtual 93 00:08:48,760 --> 00:08:53,120 machine como intérprete os acordáis de estas cosas 94 00:08:53,120 --> 00:08:59,120 vale una vez que yo he creado la clase para ejecutar la clase mi clase en este 95 00:08:59,120 --> 00:09:05,840 caso uso el comando java mi clase sin el punto clas vale entonces esto el 96 00:09:05,840 --> 00:09:13,520 comando real es java que es como el que dice mira crea una arranca la java 97 00:09:13,520 --> 00:09:17,640 virtual machine arranca lo que hace falta para ejecutar mi programa y le 98 00:09:17,640 --> 00:09:24,120 pasas como parámetro mi clase que será el punto clas que será un código en 99 00:09:24,120 --> 00:09:29,240 bytecode y el intérprete el java virtual machine empieza a leer este fichero de 100 00:09:29,240 --> 00:09:32,880 aquí y interpretar los comandos que están allí dentro 101 00:09:32,880 --> 00:09:37,560 cada comando lo ejecuta otro comando lo ejecuta otro comando lo interpreta lo 102 00:09:37,560 --> 00:09:47,840 ejecuta sin embargo puedo usar el comando java mi clase y luego poner 103 00:09:47,840 --> 00:09:53,560 cosas detrás separada por un espacio vale por ejemplo en este caso java mi 104 00:09:53,560 --> 00:09:59,560 clase algo tres otra cosa estas cosas de aquí 105 00:09:59,560 --> 00:10:04,640 me las encuentro en ax 106 00:10:07,120 --> 00:10:13,600 o sea que si yo lanzo este comando de aquí y luego dentro del main a cedo 107 00:10:13,600 --> 00:10:24,720 arx de 0 encontraré esto y si acedo a arx de 1 encontraré esto si acedo a arx de 2 108 00:10:24,720 --> 00:10:28,840 encontraré otra cosa 109 00:10:29,040 --> 00:10:32,000 de qué tipo 110 00:10:32,240 --> 00:10:39,120 string o sea que esto es 3 es 3 como string 111 00:10:39,120 --> 00:10:45,480 si luego yo allí quería un número y lo quiero cambiar pues de alguna forma 112 00:10:45,480 --> 00:10:51,320 tendré que transformar este número en este string en un número como pues hay 113 00:10:51,320 --> 00:10:55,760 formas de hacer antes o después 114 00:10:55,760 --> 00:11:01,280 como en eclipse no lanzamos las cosas así hay por algún lado una opción al 115 00:11:01,880 --> 00:11:09,720 ejecutar que me dice oye mira cuando lanzas este programa cuando lanzas este 116 00:11:09,720 --> 00:11:15,240 main pasale estas cosas como argumentos ahora después hacemos una prueba para 117 00:11:15,240 --> 00:11:20,200 ver dónde está y cómo funciona y para qué me sirve esto pues a lo mejor 118 00:11:20,200 --> 00:11:25,040 imaginaos que vosotros hacéis una clase que cuando empieza tiene que cargar un 119 00:11:25,040 --> 00:11:30,560 fichero que está en el sistema operativo con el sistema en falsista me 120 00:11:30,560 --> 00:11:35,920 dejaba por algún lado y que este fichero no siempre tiene que ser mismo vale 121 00:11:35,920 --> 00:11:41,400 dependiendo de lo que haces cargas uno o otro a lo mejor en vez de lanzar ya va mi 122 00:11:41,400 --> 00:11:45,480 clase luego allí dentro y la búsqueda pues a lanzas ya va mi clase y el nombre 123 00:11:45,480 --> 00:11:51,360 del fichero y él sabe que cuando empieza en arx de 0 se encontrará el 124 00:11:51,360 --> 00:11:54,880 nombre del fichero que tiene que ir a mirar 125 00:11:54,880 --> 00:12:00,200 es una forma de pasarle datos a mi programa va a hacerme midad en mi 126 00:12:00,200 --> 00:12:08,600 programa dependiente de un parámetro que se da se proporciona a la hora de 127 00:12:08,600 --> 00:12:13,960 ejecutar el momento en que lanzó el programa le paso estos parámetros al 128 00:12:13,960 --> 00:12:19,560 lado ejemplos son por ejemplo tingo que recibe un parámetro de dónde hacer el 129 00:12:19,640 --> 00:12:27,960 mismo sí entonces esto alguna vez en vuestra vida pues puede ser que sea que 130 00:12:27,960 --> 00:12:35,880 sirva existe está allí y no sirve para entender esta cosa de aquí porque está 131 00:12:35,880 --> 00:12:39,080 aquí y para qué sirve 132 00:12:39,920 --> 00:12:44,780 también esta es una rey yo puedo preguntar 133 00:12:44,780 --> 00:12:52,700 oye cuál es la longitud de arx de arx arx.length si arx.length es igual a cero 134 00:12:52,700 --> 00:12:59,500 quiere decir que no hay parámetros adicionales si arx.length es mayor que 135 00:12:59,500 --> 00:13:03,500 cero que decir que el usuario me ha dado algunos parámetros entonces yo puedo 136 00:13:03,500 --> 00:13:07,660 hacer un programa que si el usuario no me ha dado ningún programa ningún 137 00:13:07,660 --> 00:13:13,660 parámetro ningún argumento a lanzarlo pues haga una cosa y si el usuario me ha 138 00:13:13,660 --> 00:13:18,580 dado algunos argumentos pues interprete estos argumentos mire que hacen esos 139 00:13:18,580 --> 00:13:22,300 argumentos ejecute algo y luego siga con mi programa 140 00:13:22,300 --> 00:13:26,460 ¿se entiende? ¿dudas? 141 00:13:26,620 --> 00:13:30,500 cómo se usa después lo veremos 142 00:13:30,660 --> 00:13:37,260 además del método main existe la clase main cuidado no en el sentido que se 143 00:13:37,300 --> 00:13:44,700 tiene que llamar así ¿vale? cuanto que en un programa en un sistema en un conjunto 144 00:13:44,700 --> 00:13:50,100 de clases yo siempre tengo que elegir cuál de estas clases es mi clase 145 00:13:50,100 --> 00:13:56,060 principal la clase principal normalmente es la clase que yo lanzo 146 00:13:56,060 --> 00:14:01,660 la clase que tiene un método main y es el método main que yo lanzo cuando 147 00:14:01,660 --> 00:14:06,900 quiero hacer funcionar mi sistema yo he hecho un sistema de gestión de alumnos 148 00:14:06,900 --> 00:14:11,860 de una escuela ¿vale? y tendrá alumno tendrá escuela tendrá aula tendrá un 149 00:14:11,860 --> 00:14:16,820 montón de clases ¿vale? y a lo mejor cada una de estas clases tiene un main para 150 00:14:16,820 --> 00:14:20,900 probar las funcionalidades alumno tiene un main para probar la funcionalidad del 151 00:14:20,900 --> 00:14:26,260 alumno clase tiene un main para probar las funcionalidades de la clase ¿vale? pero de 152 00:14:26,260 --> 00:14:33,260 todas estas habrá una clase será la clase escuela algo para decir ¿vale? que tiene un 153 00:14:33,260 --> 00:14:36,740 main que cuando lo lanzo no sirve para probar escuela sino que lanza 154 00:14:36,740 --> 00:14:40,100 efectivamente el programa que estoy desarrollando lanza la interfaz para que 155 00:14:40,100 --> 00:14:45,980 yo pueda luego añadir alumnos quitar alumnos me hace el menú de asociar un 156 00:14:45,980 --> 00:14:49,260 alumno con un aula con una asignatura etcétera etcétera los programas que 157 00:14:49,260 --> 00:14:53,900 creamos nosotros esa clase de allí es en un cierto sentido la clase principal 158 00:14:53,900 --> 00:15:00,260 siempre en un sistema debería haber una clase principal para que esta es la que 159 00:15:00,340 --> 00:15:07,660 se lanza para ejecutar ¿si? no tiene por qué llamarse main repito puede llamarse 160 00:15:07,660 --> 00:15:12,260 escuela puede llamarse lo que sea la gama la idea sería que en un cierto sentido 161 00:15:12,260 --> 00:15:18,580 sea fácil de reconocer para que cuando un programador pilla mi código pues sepa 162 00:15:18,580 --> 00:15:23,700 cuál es la clase que tiene que ejecutar ¿si? 163 00:15:23,900 --> 00:15:33,580 vale esto sobre el concepto del método main y lo que es ¿vale? para que si otro 164 00:15:33,580 --> 00:15:39,660 tema de esta clase es el concepto de estático y no estático ¿vale? ya lo hemos 165 00:15:39,660 --> 00:15:44,900 dicho hace tres minutos ya lo hemos dicho también el miércoles si no me equivoco 166 00:15:44,900 --> 00:15:50,820 que salió un poquito pero la idea es tenemos una palabra reservada un 167 00:15:50,940 --> 00:15:56,940 modificador ¿vale? que es la palabra estática esta palabra a veces la hemos 168 00:15:56,940 --> 00:16:01,580 usado a veces no hemos visto si os habéis centrado que todo lo que es 169 00:16:01,580 --> 00:16:06,980 dependiente de objetos no tiene esta palabra todo lo que no depende de un 170 00:16:06,980 --> 00:16:11,660 objeto por sí mismo sino que depende más bien de la clase ¿vale? que puede 171 00:16:11,660 --> 00:16:18,380 funcionar sin crear objetos pues entonces es estático ¿si? 172 00:16:18,380 --> 00:16:24,220 primero si yo no uso la palabra reservada estática lo que estoy haciendo 173 00:16:24,220 --> 00:16:33,900 es que o este esta variable o este atributo o este método se refieren a un 174 00:16:33,900 --> 00:16:40,540 objeto concreto a una instancia de una clase ¿si? no puedo acceder a este 175 00:16:40,540 --> 00:16:47,140 atributo o no puedo ejecutar este método si no hay un objeto concreto 176 00:16:47,140 --> 00:16:52,180 creado antes sobre el que yo pueda acceder o que yo pueda utilizar ¿vale? 177 00:16:52,180 --> 00:16:57,020 entonces un atributo de una clase aparecerá en todas las instancias de 178 00:16:57,020 --> 00:17:05,140 esa clase esto sería si es estático ¿vale? pero cada instancia tendrá un valor 179 00:17:05,140 --> 00:17:10,420 distinto de ese atributo esto es no estático en el sentido cuando yo en la 180 00:17:10,420 --> 00:17:18,620 clase cuadrado digo que es que tiene un lado ¿vale? este lado en todas las 181 00:17:18,620 --> 00:17:25,020 instancias de esa clase aparecerá el atributo lado pero cada objeto tendrá un 182 00:17:25,020 --> 00:17:30,180 valor propio distinto de los otros objetos este valor no es compartido 183 00:17:30,180 --> 00:17:36,060 entre instancias de la clase tendréis cuadrado 1 que tendrá lado 4 y el 184 00:17:36,060 --> 00:17:42,540 cuadrado 2 que tendrá lado 5 ¿vale? el cuadrado 1 tiene lado pero el valor que 185 00:17:42,540 --> 00:17:48,260 tiene dentro es distinto del cuadrado 2 ¿se entiende esto? entonces yo tengo mi 186 00:17:48,260 --> 00:17:54,300 molde cuando lo instancio tengo que mirar todos los atributos que no son 187 00:17:54,300 --> 00:17:59,660 estáticos y darle un valor y esto en un cierto sentido crea el estado de ese 188 00:17:59,660 --> 00:18:07,580 objeto y le da en cierto sentido independencia ¿vale? los valores que tengo 189 00:18:07,580 --> 00:18:11,380 aquí no son los mismos que tiene otro objeto son objetos separados e 190 00:18:11,380 --> 00:18:18,460 independientes si modifico un objeto no afecto el otro ¿si? 191 00:18:18,460 --> 00:18:23,980 un método que no es estático ¿vale? quiere decir que hay que llamarlo sobre 192 00:18:23,980 --> 00:18:30,060 un objeto concreto y usará datos de ese objeto concreto en su ejecución lo 193 00:18:30,060 --> 00:18:35,820 hicimos un ejemplo el miércoles ¿vale? es decir que cuando un método no es 194 00:18:35,820 --> 00:18:42,340 estático quiere decir que depende de un objeto es decir usa atributos y 195 00:18:42,340 --> 00:18:49,180 variables de ese objeto concreto si un método no usa ningún atributo de un 196 00:18:49,180 --> 00:18:53,420 objeto y llamarlo sobre objetos distintos haría exactamente la misma 197 00:18:53,420 --> 00:18:59,860 cosa posiblemente tiene que ser estático si no es estático quiere decir que 198 00:18:59,860 --> 00:19:06,740 depende de la instancia ¿si? también tener en cuenta que cuando estamos en el mundo 199 00:19:06,740 --> 00:19:16,340 no estático todo se referencia al objeto ¿vale? es decir si yo creo un objeto 200 00:19:16,500 --> 00:19:23,580 objeto x es igual a new object ¿vale? un nuevo objeto luego los métodos y los 201 00:19:23,580 --> 00:19:30,300 atributos de este objeto lo llamamos con x punto vete a ese objeto el objeto x y 202 00:19:30,300 --> 00:19:36,220 allí dentro acceda su variable atributo 1 vete al método x y acceda a su método 203 00:19:36,220 --> 00:19:41,500 método 1 con estos parámetros pero siempre es x punto algo lo estoy 204 00:19:41,500 --> 00:19:45,980 llamando sobre el objeto para saber a qué objeto me refiero puesto que estos 205 00:19:45,980 --> 00:19:50,180 dependen del objeto pues tengo que utilizar el objeto mismo si tengo tres 206 00:19:50,180 --> 00:19:56,780 objetos x, y, z pues tendré que elegir a cuáles de estos tres objetos voy a 207 00:19:56,780 --> 00:20:03,980 utilizar para poder acceder a sus variables o acceder a sus métodos ¿se entiende? 208 00:20:03,980 --> 00:20:06,740 ¿dudas? 209 00:20:07,740 --> 00:20:17,300 esto es un ejemplo de no estático aquí tenemos rectángulo ¿vale? la clase 210 00:20:17,300 --> 00:20:23,340 rectángulo tiene variables no estáticas largo y ancho tiene 211 00:20:23,340 --> 00:20:28,780 método set data que me permite poner esta cosa aquí no tiene un constructor 212 00:20:28,780 --> 00:20:36,340 por ejemplo en este caso y permite hacer el área fijaos que cuando hago 213 00:20:36,340 --> 00:20:42,300 este es un método ¿vale? el método área lo veo aquí no le paso parámetros ¿por qué? 214 00:20:42,300 --> 00:20:47,260 porque área este es un método que pertenece a este objeto cuando yo lo 215 00:20:47,260 --> 00:20:53,220 llamaré la llamaré sobre un objeto concreto entonces largo y ancho que voy 216 00:20:53,220 --> 00:20:57,980 a utilizar aquí no son parámetros que me pasas tú para calcular el área son el 217 00:20:57,980 --> 00:21:05,260 largo y el ancho de ese rectángulo concreto entonces si lanzo este método 218 00:21:05,260 --> 00:21:10,900 en el rectángulo que tiene 2 y 4 me utilizará 2 y 4 como parámetros si 219 00:21:10,900 --> 00:21:16,620 lanzo este método en el rectángulo que tiene 20 y 30 pues utilizaré 20 y 30 220 00:21:16,620 --> 00:21:24,940 para estos parámetros ¿se entiende? y esto es así cuando yo tengo mi clase 221 00:21:24,940 --> 00:21:33,780 rectángulo área que tiene el main ¿vale? aquí me creo dos rectángulos distintos ¿vale? 222 00:21:33,780 --> 00:21:40,700 excepto los datos los parámetros de rectángulo 1 esto es un método que se 223 00:21:40,700 --> 00:21:45,260 está llamando sobre el objeto rectángulo 1 no toca nada y para nada las variables 224 00:21:45,260 --> 00:21:51,740 de rectángulo 2 y cuando el resultado es rectángulo 1 punto área pues veis que 225 00:21:51,740 --> 00:21:56,300 no le paso ningún parámetro esto que me calculará me irá a rectángulo 1 que 226 00:21:56,300 --> 00:22:00,500 tiene valores 5 y 6 y por lo tanto utilizará dentro del área el valor de 227 00:22:00,500 --> 00:22:06,100 5 y 6 para ancho y largo ¿si? cuando lo hago con rectángulo 2 estoy 228 00:22:06,100 --> 00:22:09,620 haciendo un rectángulo completamente distinto y calculará sobre el otro 229 00:22:09,620 --> 00:22:14,340 distinto fijaos que los métodos como también si 230 00:22:14,340 --> 00:22:19,900 quisiera acceder a sus parámetros a sus atributos se llaman sobre el objeto 231 00:22:20,100 --> 00:22:26,700 sobre este objeto ¿vale? dudas 232 00:22:31,340 --> 00:22:36,580 sin embargo ¿qué pasa cuando en vez utilizamos estática? que antes lo usábamos 233 00:22:36,580 --> 00:22:40,860 sin saber que era y ahora en vez empezamos a entender un poquito que es 234 00:22:40,860 --> 00:22:49,340 ¿vale? cuando lo que lo que estoy utilizando sea un 235 00:22:49,340 --> 00:22:55,860 atributo sea una variable sea un método no depende de un objeto es 236 00:22:55,860 --> 00:23:01,860 independiente de la instancia es parte de la clase pero independiente de la 237 00:23:01,860 --> 00:23:08,100 instancia ¿vale? es decir que toda la instancia de esta clase siempre harían 238 00:23:08,100 --> 00:23:12,340 lo mismo independientemente de que su ancho y largo sea distinto o que sus 239 00:23:12,340 --> 00:23:17,380 variables sean distintas pues entonces este método no depende de los objetos 240 00:23:17,380 --> 00:23:22,180 sino es un método estático 241 00:23:23,220 --> 00:23:28,580 tú puedes hacer un atributo estático pero no es un atributo los atributos son 242 00:23:28,580 --> 00:23:33,660 de los objetos entonces cada objeto tiene sus atributos aquí es que tú 243 00:23:33,660 --> 00:23:40,100 estás usando un valor que no es propio de cada objeto sino que por ejemplo es 244 00:23:40,100 --> 00:23:44,060 compartido por todos los objetos 245 00:23:45,780 --> 00:23:53,340 entonces estas las cosas estáticas no dependen del objeto dependen de la 246 00:23:53,340 --> 00:23:59,940 clase ¿vale? a lo mejor son funcionalidades o son valores interesantes para esa clase 247 00:23:59,940 --> 00:24:07,500 ¿vale? pero no dependen del objeto en concreto hago un ejemplo a ver si lo 248 00:24:07,500 --> 00:24:14,580 entendemos clase alumno ¿si? nombre el nombre de un alumno es estático o no 249 00:24:14,580 --> 00:24:20,300 estático no estático porque un alumno se llamará de una forma y otro alumno se 250 00:24:20,300 --> 00:24:28,220 llamará de otra forma la edad de un alumno no estático el número de alumnos 251 00:24:28,220 --> 00:24:30,940 que has creado 252 00:24:35,540 --> 00:24:41,140 el número de alumnos que has creado en un cierto momento de la vida de tu 253 00:24:41,140 --> 00:24:47,740 programa has creado hasta aquí siete alumnos eso depende del objeto 254 00:24:49,980 --> 00:24:55,700 si yo creo el objeto 1 objeto 2 objeto 3 y ahora le pregunto al objeto 1 al alumno 255 00:24:55,700 --> 00:25:06,140 1 ¿cuántos alumnos hay? ¿cuánto me dice? 3, ¿al alumno 2? 3, ¿al alumno 3? 3 256 00:25:06,140 --> 00:25:11,140 pues esta información depende del objeto 257 00:25:11,620 --> 00:25:16,100 pues esta información sería estática 258 00:25:16,260 --> 00:25:22,460 no cambia de un objeto a otro y es una información como compartida entre todas 259 00:25:22,460 --> 00:25:26,900 las instancias de la clase todos los instancias de la clase pueden acceder a 260 00:25:26,900 --> 00:25:31,220 cuántos alumnos hay hasta ahora y a lo mejor el alumno 1 cuando se ha creado 261 00:25:31,220 --> 00:25:36,300 él pues era uno solo pero ahora que han creado otros 10 pues él tendrá que 262 00:25:36,300 --> 00:25:39,940 decir hoy mira hay 11 alumnos también 263 00:25:40,100 --> 00:25:42,100 ¿si tiene tendencias? 264 00:25:47,100 --> 00:25:55,380 espera, espera que aquí, ok boomer, entras en youtube los videos tendencias 265 00:25:55,380 --> 00:25:57,380 es algo que se comparte por todos los usuarios 266 00:25:57,380 --> 00:25:59,380 ¿no? 267 00:25:59,380 --> 00:26:01,380 tú contas con tu novia y te van a salir los videos 268 00:26:01,380 --> 00:26:03,380 pero yo me van a salir los mismos 269 00:26:03,380 --> 00:26:05,380 es algo que 270 00:26:05,380 --> 00:26:07,380 bueno, es un momento de sábado 271 00:26:07,820 --> 00:26:11,820 mira, a un nivel muy abstracto quizás 272 00:26:11,820 --> 00:26:13,820 quizás 273 00:26:13,820 --> 00:26:15,820 a un nivel lo práctico hay que ver cómo está hecho 274 00:26:15,820 --> 00:26:17,820 ¿vale? 275 00:26:17,820 --> 00:26:21,820 pero la idea podría ser eso 276 00:26:21,820 --> 00:26:23,820 podría ser 277 00:26:23,820 --> 00:26:25,820 asumiendo que 278 00:26:25,820 --> 00:26:27,820 porque yo creo que eso también no son lo mismo para todos 279 00:26:27,820 --> 00:26:29,820 esos son los mismos para todos 280 00:26:29,820 --> 00:26:31,820 los que tengan los mismos intereses 281 00:26:31,820 --> 00:26:33,820 pero a mí me va a dar 282 00:26:33,820 --> 00:26:35,820 los videos tendencia 283 00:26:36,260 --> 00:26:38,260 los intereses míos hacia otros 284 00:26:38,260 --> 00:26:40,260 y eso depende de un atributo mío personal 285 00:26:40,260 --> 00:26:42,260 pero bueno 286 00:26:42,260 --> 00:26:44,260 no lo sé 287 00:26:44,260 --> 00:26:46,260 si hay algo 288 00:26:46,260 --> 00:26:48,260 a ver para youtube 289 00:26:50,260 --> 00:26:52,260 si lo pillas 290 00:26:52,260 --> 00:26:54,260 considerando que no es programación 291 00:26:54,260 --> 00:26:56,260 pero para hacer un ejemplo 292 00:26:56,260 --> 00:26:58,260 si yo dijera que 293 00:26:58,260 --> 00:27:00,260 youtube funciona con unos cuantos videos 294 00:27:00,260 --> 00:27:02,260 te lo aconsejo en base a tus cosas 295 00:27:02,260 --> 00:27:04,260 y unos cuantos videos son los mismos 296 00:27:04,700 --> 00:27:06,700 para todos 297 00:27:06,700 --> 00:27:08,700 pues eso de allí podría ser estático 298 00:27:08,700 --> 00:27:10,700 en un cierto sentido 299 00:27:10,700 --> 00:27:12,700 ¿sí? 300 00:27:22,700 --> 00:27:24,700 si tú lo piensas 301 00:27:24,700 --> 00:27:26,700 como documento 302 00:27:26,700 --> 00:27:28,700 DNI 303 00:27:28,700 --> 00:27:30,700 a lo mejor 304 00:27:30,700 --> 00:27:32,700 pero si lo piensas como tu DNI 305 00:27:33,140 --> 00:27:35,140 pues tú tienes tu nacionalidad 306 00:27:35,140 --> 00:27:37,140 tendrás España 307 00:27:37,140 --> 00:27:39,140 porque tu atributo nacionalidad 308 00:27:39,140 --> 00:27:41,140 es español 309 00:27:41,140 --> 00:27:43,140 pero si mañana cambias nacionalidad 310 00:27:43,140 --> 00:27:45,140 tú cambias eso 311 00:27:45,140 --> 00:27:47,140 depende de ti 312 00:27:47,140 --> 00:27:49,140 sobre nacionalidad 313 00:27:53,140 --> 00:27:55,140 si considerásemos 314 00:27:55,140 --> 00:27:57,140 no al usuario 315 00:27:57,140 --> 00:27:59,140 sino al documento por sí mismo 316 00:27:59,140 --> 00:28:01,140 como una clase 317 00:28:01,580 --> 00:28:03,580 no como DNI 318 00:28:03,580 --> 00:28:05,580 sino como DNI Español 319 00:28:11,580 --> 00:28:13,580 pero sería también final 320 00:28:13,580 --> 00:28:15,580 no cambias 321 00:28:15,580 --> 00:28:17,580 no es una variable 322 00:28:17,580 --> 00:28:19,580 es una constante 323 00:28:19,580 --> 00:28:21,580 si lo piensas así 324 00:28:21,580 --> 00:28:23,580 ¿sí? 325 00:28:23,580 --> 00:28:25,580 hay un ejemplo aquí 326 00:28:25,580 --> 00:28:27,580 ahora lo vemos 327 00:28:27,580 --> 00:28:29,580 ¿vale? 328 00:28:30,020 --> 00:28:32,020 una variable estática tendrá 329 00:28:32,020 --> 00:28:34,020 el mismo valor para cualquier objeto 330 00:28:34,020 --> 00:28:36,020 que la use 331 00:28:36,020 --> 00:28:38,020 no depende del objeto sino de la clase 332 00:28:38,020 --> 00:28:40,020 es en un cierto sentido una variable global 333 00:28:40,020 --> 00:28:42,020 yo ponga allí un valor 334 00:28:42,020 --> 00:28:44,020 este valor puede cambiar 335 00:28:44,020 --> 00:28:46,020 pero si cambia, cambia para todos 336 00:28:46,020 --> 00:28:48,020 ¿sí? 337 00:28:48,020 --> 00:28:50,020 como las leyes 338 00:28:52,020 --> 00:28:54,020 las leyes son estáticas 339 00:28:56,020 --> 00:28:58,020 sí 340 00:28:58,460 --> 00:29:00,460 es complejo 341 00:29:00,460 --> 00:29:02,460 sacarme del mundo informal 342 00:29:02,460 --> 00:29:04,460 y hacer analogías de ese estilo 343 00:29:04,460 --> 00:29:06,460 puede ser peligroso 344 00:29:06,460 --> 00:29:08,460 a lo mejor hay cosas 345 00:29:08,460 --> 00:29:10,460 luego no estoy seguro 346 00:29:10,460 --> 00:29:12,460 si es para todos igual 347 00:29:12,460 --> 00:29:14,460 un método estático no se llama 348 00:29:14,460 --> 00:29:16,460 sobre un objeto sino sobre la clase 349 00:29:16,460 --> 00:29:18,460 esto es importante 350 00:29:18,460 --> 00:29:20,460 cuando el método no es estático 351 00:29:20,460 --> 00:29:22,460 se hace referencia a un objeto 352 00:29:22,460 --> 00:29:24,460 ¿vale? aquí 353 00:29:24,460 --> 00:29:26,460 rec2.setData 354 00:29:26,900 --> 00:29:28,900 rec2.area 355 00:29:28,900 --> 00:29:30,900 mientras que si 356 00:29:30,900 --> 00:29:32,900 quiero 357 00:29:32,900 --> 00:29:34,900 si tengo un método estático 358 00:29:34,900 --> 00:29:36,900 pues lo llamo sobre la clase 359 00:29:36,900 --> 00:29:38,900 nosotros hemos usado el otro día 360 00:29:38,900 --> 00:29:40,900 math.random 361 00:29:40,900 --> 00:29:42,900 ¿os acordáis? 362 00:29:42,900 --> 00:29:44,900 math no es un objeto 363 00:29:44,900 --> 00:29:46,900 es la clase math 364 00:29:46,900 --> 00:29:48,900 entonces random es un método estático 365 00:29:48,900 --> 00:29:50,900 ¿por qué es un método estático? 366 00:29:50,900 --> 00:29:52,900 porque es un método que devuelve 367 00:29:52,900 --> 00:29:54,900 un número entre 0 y 0,9 periódico 368 00:29:54,900 --> 00:29:56,900 entonces que lo llame sobre un objeto 369 00:29:56,900 --> 00:29:58,900 o sobre otro 370 00:29:58,900 --> 00:30:00,900 siempre hará lo mismo 371 00:30:00,900 --> 00:30:02,900 darte un número aleatorio entre 0 y 0,9 372 00:30:02,900 --> 00:30:04,900 no depende del objeto sobre el que lo llame 373 00:30:04,900 --> 00:30:06,900 ¿si? por lo tanto es estático 374 00:30:18,900 --> 00:30:20,900 la clase tiene un atributo 375 00:30:20,900 --> 00:30:22,900 que es el número de alumnos 376 00:30:22,900 --> 00:30:24,900 ¿el alumno tendría ese atributo también? 377 00:30:24,900 --> 00:30:26,900 no lo tiene el alumno 378 00:30:26,900 --> 00:30:28,900 lo tiene la clase 379 00:30:34,900 --> 00:30:36,900 pero cuando tú tienes un alumno 380 00:30:36,900 --> 00:30:38,900 creas los atributos de ese alumno 381 00:30:38,900 --> 00:30:40,900 no los estáticos 382 00:30:46,900 --> 00:30:48,900 vamos a hacer 383 00:30:48,900 --> 00:30:50,900 esta clase es estática 384 00:30:50,900 --> 00:30:52,900 donde tiene 385 00:30:52,900 --> 00:30:54,900 static e int 386 00:30:54,900 --> 00:30:56,900 operaciones hechas 387 00:30:56,900 --> 00:30:58,900 este señor de aquí 388 00:30:58,900 --> 00:31:00,900 no es un 389 00:31:00,900 --> 00:31:02,900 atributo 390 00:31:02,900 --> 00:31:04,900 de un objeto 391 00:31:04,900 --> 00:31:06,900 es un atributo 392 00:31:06,900 --> 00:31:08,900 es una variable que depende 393 00:31:08,900 --> 00:31:10,900 de esta clase, es estático 394 00:31:10,900 --> 00:31:12,900 me cuenta cuantas operaciones 395 00:31:12,900 --> 00:31:14,900 han sido hechas 396 00:31:14,900 --> 00:31:16,900 al principio hay 0 397 00:31:16,900 --> 00:31:18,900 quien tiene esta 398 00:31:18,900 --> 00:31:20,900 información, ¿la tiene un objeto? 399 00:31:20,900 --> 00:31:22,900 no 400 00:31:22,900 --> 00:31:24,900 la tiene la clase 401 00:31:24,900 --> 00:31:26,900 ¿cada objeto puede acceder a esta 402 00:31:26,900 --> 00:31:28,900 cosa? si 403 00:31:28,900 --> 00:31:30,900 y todos verán la misma 404 00:31:30,900 --> 00:31:32,900 y si un objeto la modifica 405 00:31:32,900 --> 00:31:34,900 todos los demás verán la modificación 406 00:31:34,900 --> 00:31:36,900 es un objeto, es una variable 407 00:31:36,900 --> 00:31:38,900 compartida entre todas las instancias 408 00:31:38,900 --> 00:31:40,900 mientras que 409 00:31:40,900 --> 00:31:42,900 una variable 410 00:31:42,900 --> 00:31:44,900 de un objeto, un atributo de un objeto 411 00:31:44,900 --> 00:31:46,900 se lo modifica, los otros 412 00:31:46,900 --> 00:31:48,900 objetos no se ven afectados 413 00:31:48,900 --> 00:31:50,900 son independientes, este de aquí 414 00:31:50,900 --> 00:31:52,900 es una variable que vale para todos 415 00:31:52,900 --> 00:31:54,900 una variable de clase 416 00:31:54,900 --> 00:31:56,900 no una variable de objeto 417 00:32:08,900 --> 00:32:10,900 no lo entiendo 418 00:32:10,900 --> 00:32:12,900 esto puede cambiar 419 00:32:13,900 --> 00:32:15,900 pues entonces 420 00:32:15,900 --> 00:32:17,900 no es estático 421 00:32:23,900 --> 00:32:25,900 si tu en tu programa 422 00:32:25,900 --> 00:32:27,900 te das cuenta que has creado una operación 423 00:32:27,900 --> 00:32:29,900 estática y luego te das cuenta que 424 00:32:29,900 --> 00:32:31,900 eso depende de los objetos 425 00:32:31,900 --> 00:32:33,900 pues entonces has hecho un error de diseño 426 00:32:33,900 --> 00:32:35,900 porque eso no es una variable de clase 427 00:32:35,900 --> 00:32:37,900 si distintos 428 00:32:37,900 --> 00:32:39,900 objetos tienen valores distintos 429 00:32:39,900 --> 00:32:41,900 pues entonces quiere decir que 430 00:32:41,900 --> 00:32:43,900 no es de clase 431 00:32:43,900 --> 00:32:45,900 será de un grupo 432 00:32:45,900 --> 00:32:47,900 tendrá 3 y un grupo tendrá 4 433 00:32:47,900 --> 00:32:49,900 entonces allí luego hay técnicas 434 00:32:49,900 --> 00:32:51,900 para esta, dividirla en 2 435 00:32:51,900 --> 00:32:53,900 subclase 436 00:32:53,900 --> 00:32:55,900 clase estática 1 y clase estática 2 437 00:32:55,900 --> 00:32:57,900 y estos comparten 438 00:32:57,900 --> 00:32:59,900 una y estos comparten otra 439 00:32:59,900 --> 00:33:01,900 pero eso ya con herencia 440 00:33:05,900 --> 00:33:07,900 operaciones, esta clase estática 441 00:33:07,900 --> 00:33:09,900 aquí tiene 2 tipos 442 00:33:09,900 --> 00:33:11,900 de operaciones 443 00:33:11,900 --> 00:33:13,900 tiene el método estático 444 00:33:13,900 --> 00:33:15,900 calcular a rectángulo 445 00:33:15,900 --> 00:33:17,900 fijaos 446 00:33:17,900 --> 00:33:19,900 de que rectángulo 447 00:33:19,900 --> 00:33:21,900 tengo aquí objetos rectángulos 448 00:33:21,900 --> 00:33:23,900 no, entonces como lo hago esto de aquí 449 00:33:23,900 --> 00:33:25,900 pues le paso directamente 450 00:33:25,900 --> 00:33:27,900 los valores 451 00:33:27,900 --> 00:33:29,900 te digo, mira, aquí habrá 452 00:33:29,900 --> 00:33:31,900 cuando te pido 453 00:33:31,900 --> 00:33:33,900 calcularlo a un rectángulo 454 00:33:33,900 --> 00:33:35,900 te paso el largo y el ancho del rectángulo 455 00:33:35,900 --> 00:33:37,900 fenomenal 456 00:33:37,900 --> 00:33:39,900 esto 457 00:33:39,900 --> 00:33:41,900 hace que independientemente 458 00:33:41,900 --> 00:33:43,900 de que objeto llame 459 00:33:43,900 --> 00:33:45,900 este método de aquí 460 00:33:45,900 --> 00:33:47,900 no es que yo voy a mirar los atributos de este objeto 461 00:33:47,900 --> 00:33:49,900 y entonces objetos distintos 462 00:33:49,900 --> 00:33:51,900 hacen cosas distintas 463 00:33:51,900 --> 00:33:53,900 no, te voy a pasar parámetros 464 00:33:53,900 --> 00:33:55,900 directamente y por lo tanto 465 00:33:55,900 --> 00:33:57,900 que lo haga un objeto, lo haga otro 466 00:33:57,900 --> 00:33:59,900 no depende del objeto 467 00:33:59,900 --> 00:34:01,900 depende de los parámetros 468 00:34:01,900 --> 00:34:03,900 que le paso aquí 469 00:34:03,900 --> 00:34:05,900 se entiende eso 470 00:34:05,900 --> 00:34:07,900 entonces este de aquí 471 00:34:07,900 --> 00:34:09,900 es desvinculado de las 472 00:34:09,900 --> 00:34:11,900 de las instancias 473 00:34:11,900 --> 00:34:13,900 de esta clase 474 00:34:13,900 --> 00:34:15,900 y que hace esta operación 475 00:34:15,900 --> 00:34:17,900 pues lo mismo que antes 476 00:34:17,900 --> 00:34:19,900 calcula esta cosa aquí 477 00:34:19,900 --> 00:34:21,900 y luego soma uno 478 00:34:21,900 --> 00:34:23,900 a las operaciones hechas 479 00:34:23,900 --> 00:34:25,900 antes no tenía 480 00:34:25,900 --> 00:34:27,900 una variable estática 481 00:34:29,900 --> 00:34:31,900 antes cada rectángulo 482 00:34:31,900 --> 00:34:33,900 al máximo podía tener 483 00:34:33,900 --> 00:34:35,900 una variable suya 484 00:34:35,900 --> 00:34:37,900 diciendo 485 00:34:37,900 --> 00:34:39,900 cuantas operaciones han hecho sobre de mi 486 00:34:43,900 --> 00:34:45,900 esto de aquí 487 00:34:45,900 --> 00:34:47,900 es cualquier 488 00:34:47,900 --> 00:34:49,900 operación de esta que se haga 489 00:34:49,900 --> 00:34:51,900 quien lo haga 490 00:34:51,900 --> 00:34:53,900 pues suma uno a estas operaciones hechas 491 00:34:53,900 --> 00:34:55,900 entonces en un determinado momento yo puedo acceder 492 00:34:55,900 --> 00:34:57,900 a esta variable y ver cuantas operaciones 493 00:34:57,900 --> 00:34:59,900 se han hecho, quien la ha hecho no lo se 494 00:34:59,900 --> 00:35:01,900 pero si que se han hecho 66 495 00:35:01,900 --> 00:35:03,900 operaciones en esta ejecución 496 00:35:03,900 --> 00:35:05,900 está claro que si apago 497 00:35:05,900 --> 00:35:07,900 y empiezo otra vez 498 00:35:07,900 --> 00:35:09,900 pues esto será reseteado a cero 499 00:35:11,900 --> 00:35:13,900 si la persistencia de datos 500 00:35:13,900 --> 00:35:15,900 entre una ejecución y otra la veremos más adelante 501 00:35:15,900 --> 00:35:17,900 que es escribir en ficheros 502 00:35:19,900 --> 00:35:21,900 y tengo también otra 503 00:35:21,900 --> 00:35:23,900 otro método estático 504 00:35:23,900 --> 00:35:25,900 que es calcula perímetro rectángulo 505 00:35:25,900 --> 00:35:27,900 que me da siempre el ancho 506 00:35:27,900 --> 00:35:29,900 y el largo, me calcula el perímetro 507 00:35:29,900 --> 00:35:31,900 esta también es una operación 508 00:35:31,900 --> 00:35:33,900 suma uno a las operaciones 509 00:35:33,900 --> 00:35:35,900 entonces luego que hago 510 00:35:37,900 --> 00:35:39,900 como se usa esto 511 00:35:39,900 --> 00:35:41,900 pues si aquí tengo un main 512 00:35:41,900 --> 00:35:43,900 me imagino 513 00:35:43,900 --> 00:35:45,900 dos rectángulos, el rectángulo uno 514 00:35:45,900 --> 00:35:47,900 que está de 3 y 6, uno es 3 515 00:35:47,900 --> 00:35:49,900 que son los mismos, este sería el rectángulo 2 516 00:35:49,900 --> 00:35:51,900 son los mismos valores 517 00:35:51,900 --> 00:35:53,900 que le daba antes 518 00:35:53,900 --> 00:35:55,900 como calculo el área del rectángulo 519 00:35:55,900 --> 00:35:57,900 pues haciendo 520 00:35:57,900 --> 00:35:59,900 la operación estática punto 521 00:35:59,900 --> 00:36:01,900 calcula rectángulo de 3,6 522 00:36:03,900 --> 00:36:05,900 este es el método 523 00:36:05,900 --> 00:36:07,900 estos son los parámetros de rectángulo 524 00:36:07,900 --> 00:36:09,900 que me he imaginado yo 525 00:36:09,900 --> 00:36:11,900 cuidado, no hay un objeto rectángulo aquí 526 00:36:11,900 --> 00:36:13,900 no he hecho por ningún lado 527 00:36:13,900 --> 00:36:15,900 y lo que hace 528 00:36:15,900 --> 00:36:17,900 es llamarlo sobre la clase 529 00:36:17,900 --> 00:36:19,900 no sobre una instancia 530 00:36:19,900 --> 00:36:21,900 como lo veo esto fácilmente 531 00:36:21,900 --> 00:36:23,900 porque empieza por mayúsculo 532 00:36:23,900 --> 00:36:25,900 entonces es una clase 533 00:36:25,900 --> 00:36:27,900 más punto random 534 00:36:27,900 --> 00:36:29,900 más la M mayúscula 535 00:36:29,900 --> 00:36:31,900 son las 536 00:36:31,900 --> 00:36:33,900 dudas? 537 00:36:41,900 --> 00:36:43,900 si no le das estos dos 538 00:36:49,900 --> 00:36:51,900 si yo te pongo calcular 539 00:36:51,900 --> 00:36:53,900 rectángulo de 4 540 00:36:53,900 --> 00:36:55,900 no existe este método 541 00:36:55,900 --> 00:36:57,900 a menos que yo 542 00:36:57,900 --> 00:36:59,900 no sobrecargue el método 543 00:36:59,900 --> 00:37:01,900 arriba y cree también 544 00:37:01,900 --> 00:37:03,900 un método como este de aquí 545 00:37:03,900 --> 00:37:05,900 que solo recibe un int 546 00:37:05,900 --> 00:37:07,900 que es ancho y largo 547 00:37:07,900 --> 00:37:09,900 que es para calcular cuadrados 548 00:37:09,900 --> 00:37:11,900 y entonces si que me volvería a funcionar 549 00:37:17,900 --> 00:37:19,900 fijaos que yo me calculo 550 00:37:19,900 --> 00:37:21,900 el área del rectángulo 551 00:37:21,900 --> 00:37:23,900 otro rectángulo distinto 552 00:37:23,900 --> 00:37:25,900 luego el perímetro de otra cosa 553 00:37:25,900 --> 00:37:27,900 y luego al final digo 554 00:37:27,900 --> 00:37:29,900 he hecho clase estática 555 00:37:29,900 --> 00:37:31,900 punto operaciones hechas 556 00:37:31,900 --> 00:37:33,900 operaciones, que me escribirá esto? 557 00:37:35,900 --> 00:37:37,900 cuanto vale esto? 558 00:37:43,900 --> 00:37:45,900 tres 559 00:37:45,900 --> 00:37:47,900 por cada una de estas operaciones 560 00:37:47,900 --> 00:37:49,900 me habrá sumado uno 561 00:37:49,900 --> 00:37:51,900 de los tres 562 00:37:51,900 --> 00:37:53,900 fijaos que acedo 563 00:37:53,900 --> 00:37:55,900 a una variable 564 00:37:55,900 --> 00:37:57,900 de la clase 565 00:37:57,900 --> 00:37:59,900 no de un objeto 566 00:37:59,900 --> 00:38:01,900 entonces 567 00:38:01,900 --> 00:38:03,900 cuando estoy en ámbito estático 568 00:38:03,900 --> 00:38:05,900 trabajo con las clases 569 00:38:05,900 --> 00:38:07,900 cuando estoy en ámbito no estático 570 00:38:07,900 --> 00:38:09,900 trabajo con instancias 571 00:38:09,900 --> 00:38:11,900 de la clase 572 00:38:11,900 --> 00:38:13,900 los métodos 573 00:38:13,900 --> 00:38:15,900 y los atributos 574 00:38:15,900 --> 00:38:17,900 digamos así, las variables 575 00:38:17,900 --> 00:38:19,900 no estáticas 576 00:38:19,900 --> 00:38:21,900 la llamo sobre una clase 577 00:38:21,900 --> 00:38:23,900 los métodos y atributos 578 00:38:23,900 --> 00:38:25,900 no estáticos 579 00:38:25,900 --> 00:38:27,900 lo llamo sobre un objeto 580 00:38:29,900 --> 00:38:31,900 dudas? 581 00:38:31,900 --> 00:38:33,900 preguntas? 582 00:38:33,900 --> 00:38:35,900 todo lo que no es estático 583 00:38:35,900 --> 00:38:37,900 es propio del objeto 584 00:38:37,900 --> 00:38:39,900 cambia entre objetos 585 00:38:39,900 --> 00:38:41,900 y no se interfiere 586 00:38:41,900 --> 00:38:43,900 uno con otro 587 00:38:43,900 --> 00:38:45,900 son independientes 588 00:38:45,900 --> 00:38:47,900 estático depende de la clase 589 00:38:47,900 --> 00:38:49,900 y varias instancias 590 00:38:49,900 --> 00:38:51,900 que miran, pues mirarían 591 00:38:51,900 --> 00:38:53,900 la misma cosa 592 00:38:53,900 --> 00:38:55,900 es compartida entre instancias 593 00:38:57,900 --> 00:38:59,900 dudas? 594 00:39:03,900 --> 00:39:05,900 y la pregunta es 595 00:39:05,900 --> 00:39:07,900 pero una clase puede ser o estática 596 00:39:07,900 --> 00:39:09,900 o no estática 597 00:39:09,900 --> 00:39:11,900 no se mezclan las cosas 598 00:39:11,900 --> 00:39:13,900 se puede mezclar 599 00:39:13,900 --> 00:39:15,900 estático y estático 600 00:39:15,900 --> 00:39:17,900 ¿habéis mezclado alguna vez 601 00:39:17,900 --> 00:39:19,900 estático y estático? 602 00:39:23,900 --> 00:39:25,900 ¿todas las veces que habéis hecho un objeto 603 00:39:25,900 --> 00:39:27,900 y luego has hecho un main, el main es estático? 604 00:39:27,900 --> 00:39:29,900 entonces sí 605 00:39:29,900 --> 00:39:31,900 se puede mezclar 606 00:39:31,900 --> 00:39:33,900 cosas 607 00:39:33,900 --> 00:39:35,900 estática y no estática 608 00:39:35,900 --> 00:39:37,900 pueden coexistir 609 00:39:37,900 --> 00:39:39,900 yo me puedo hacer la clase 610 00:39:39,900 --> 00:39:41,900 rectángulo 611 00:39:41,900 --> 00:39:43,900 todos los rectángulos tienen un ancho 612 00:39:43,900 --> 00:39:45,900 y todos los rectángulos tienen un largo 613 00:39:45,900 --> 00:39:47,900 pero la clase rectángulo 614 00:39:47,900 --> 00:39:49,900 tiene una variable estática 615 00:39:49,900 --> 00:39:51,900 que es cuántos rectángulos 616 00:39:51,900 --> 00:39:53,900 se han creado 617 00:39:53,900 --> 00:39:55,900 entonces cada vez 618 00:39:55,900 --> 00:39:57,900 que yo 619 00:39:57,900 --> 00:39:59,900 ejecuto 620 00:39:59,900 --> 00:40:01,900 un constructor 621 00:40:01,900 --> 00:40:03,900 de rectángulo al que le paso 622 00:40:03,900 --> 00:40:05,900 los parámetros 623 00:40:05,900 --> 00:40:07,900 lo que hago es asignar 624 00:40:07,900 --> 00:40:09,900 siempre hemos hecho los valores 625 00:40:09,900 --> 00:40:11,900 a los atributos 626 00:40:11,900 --> 00:40:13,900 pero además la variable estática 627 00:40:13,900 --> 00:40:15,900 esa de arriba 628 00:40:15,900 --> 00:40:17,900 más más 629 00:40:17,900 --> 00:40:19,900 ¿sí? 630 00:40:19,900 --> 00:40:21,900 entonces cuando llamo el área 631 00:40:21,900 --> 00:40:23,900 hago el ancho por largo 632 00:40:23,900 --> 00:40:25,900 y luego 633 00:40:25,900 --> 00:40:27,900 public static int 634 00:40:27,900 --> 00:40:29,900 total rectángulos creados 635 00:40:29,900 --> 00:40:31,900 me hago un método estático 636 00:40:31,900 --> 00:40:33,900 que lo que hace es 637 00:40:33,900 --> 00:40:35,900 devolverme cuántos rectángulos 638 00:40:35,900 --> 00:40:37,900 se han creado 639 00:40:37,900 --> 00:40:39,900 ¿sí? 640 00:40:39,900 --> 00:40:41,900 entonces cuando luego haré un main 641 00:40:41,900 --> 00:40:43,900 que usa esta clase de aquí 642 00:40:43,900 --> 00:40:45,900 habrá algunos métodos 643 00:40:45,900 --> 00:40:47,900 que lo llamaré sobre instancia 644 00:40:47,900 --> 00:40:49,900 de rectángulo, haré new rectángulo 645 00:40:49,900 --> 00:40:51,900 y luego sobre este objeto creado 646 00:40:51,900 --> 00:40:53,900 por ejemplo calcularé el área 647 00:40:53,900 --> 00:40:55,900 o puedo preguntarle el largo 648 00:40:55,900 --> 00:40:57,900 y habrá otras cosas que en vez 649 00:40:57,900 --> 00:40:59,900 la llamo sobre 650 00:40:59,900 --> 00:41:01,900 la 651 00:41:01,900 --> 00:41:03,900 sobre la 652 00:41:03,900 --> 00:41:05,900 ¿sí? 653 00:41:05,900 --> 00:41:07,900 ¿entiende? 654 00:41:07,900 --> 00:41:09,900 ahora luego haremos esto 655 00:41:09,900 --> 00:41:11,900 hacemos un ejemplo 656 00:41:11,900 --> 00:41:13,900 pero la idea 657 00:41:13,900 --> 00:41:15,900 es esta de aquí 658 00:41:15,900 --> 00:41:17,900 estas son como variables 659 00:41:17,900 --> 00:41:19,900 compartidas que no dependen 660 00:41:19,900 --> 00:41:21,900 de la instancia del objeto 661 00:41:21,900 --> 00:41:23,900 y que todos los objetos pueden ver 662 00:41:23,900 --> 00:41:25,900 ¿vale? 663 00:41:25,900 --> 00:41:27,900 en un cierto sentido 664 00:41:27,900 --> 00:41:29,900 no sé si quería decir 665 00:41:29,900 --> 00:41:31,900 algo más sobre esto 666 00:41:33,900 --> 00:41:35,900 ¿vale? 667 00:41:41,900 --> 00:41:43,900 vale 668 00:41:45,900 --> 00:41:47,900 vale 669 00:41:49,900 --> 00:41:51,900 hagamos una cosa