1 00:00:00,000 --> 00:00:08,099 Voy a grabar esta clase, por lo tanto, si vosotros habláis, me autorizáis a que se grabe vuestra voz. 2 00:00:08,960 --> 00:00:11,179 Pues hoy vamos a empezar con un tema nuevo. 3 00:00:11,679 --> 00:00:19,800 Hemos acabado la parte, digamos, básica de la programación. 4 00:00:20,839 --> 00:00:25,500 Hasta ahora nosotros estábamos en un estado temprano de la programación. 5 00:00:25,500 --> 00:00:29,500 Estamos trabajando con programación estructurada. 6 00:00:30,719 --> 00:00:37,579 Allí entran los if, entran los while, entran los for, entran las llamadas a métodos, 7 00:00:37,700 --> 00:00:43,640 bueno, las llamadas a funciones y procedimientos que nosotros hemos visto muy poco, 8 00:00:43,880 --> 00:00:48,219 porque ahora cuando vamos a entrar en los objetos utilizaremos mucho. 9 00:00:48,219 --> 00:01:12,060 La programación estructurada se basa sobre esos tres pilares que hemos visto, cuatro si queremos, que hemos visto hace ya un mes, mes y medio, que son el condicional, la iteración, la llamada método y si queremos la declaración de variables, cosas básicas. 10 00:01:12,060 --> 00:01:22,390 La unidad fundamental de la programación estructurada es la función. 11 00:01:23,129 --> 00:01:29,310 O sea, cuando yo hago un proyecto en programación estructurada, lo divido en funciones. 12 00:01:29,829 --> 00:01:31,469 Creo varias funciones. 13 00:01:31,810 --> 00:01:38,409 Estas funciones se llaman una a otra y hacen lo que tiene que hacer el sistema. 14 00:01:38,409 --> 00:01:41,290 Yo tengo un main, que es una función, digamos, inicial. 15 00:01:41,290 --> 00:01:43,310 dentro de esta función inicial 16 00:01:43,310 --> 00:01:45,510 voy a llamar trozos de códigos 17 00:01:45,510 --> 00:01:46,909 a lo que le he dado un nombre 18 00:01:46,909 --> 00:01:48,209 para identificarlos 19 00:01:48,209 --> 00:01:49,849 y a lo que le puedo pasar parámetros 20 00:01:49,849 --> 00:01:52,209 para que estos trozos de códigos 21 00:01:52,209 --> 00:01:54,430 no hagan una sola función 22 00:01:54,430 --> 00:01:55,790 sino una clase de función 23 00:01:55,790 --> 00:01:57,349 un conjunto de funciones 24 00:01:57,349 --> 00:02:01,090 nosotros podemos hacer una suma 25 00:02:01,090 --> 00:02:02,769 pero luego a la suma le ponemos dos parámetros 26 00:02:02,769 --> 00:02:05,310 para que no es que me haga siempre 3 más 4 27 00:02:05,310 --> 00:02:07,549 si yo le paso el 3 y le paso el 4 28 00:02:07,549 --> 00:02:08,789 hará 3 más 4 29 00:02:08,789 --> 00:02:10,530 si yo le paso 7 y 12 30 00:02:10,530 --> 00:02:13,270 a 3 más 12. ¿Vale? Se vuelve paramétrica. 31 00:02:13,509 --> 00:02:16,169 Entonces no es la solución de un problema concreto, 32 00:02:16,270 --> 00:02:18,590 sino la solución de un conjunto de problemas. 33 00:02:20,909 --> 00:02:22,449 En la programación estructurada 34 00:02:22,449 --> 00:02:25,330 yo creo funciones. Las funciones se llaman 35 00:02:25,330 --> 00:02:28,449 una a otra, se complican cuanto vosotros 36 00:02:28,449 --> 00:02:31,509 queráis, hasta crear un sistema donde tengo un mogollón 37 00:02:31,509 --> 00:02:34,069 de funciones y una secuencia 38 00:02:34,069 --> 00:02:36,550 con la que llamo estas funciones. 39 00:02:36,750 --> 00:02:40,150 Las funciones dentro pueden llamar otras funciones y cosas por el estilo. 40 00:02:40,150 --> 00:02:47,550 Pero la base, la unidad, el concepto que manipulo es la función, ¿sí? 41 00:02:47,750 --> 00:02:49,610 O, por ejemplo, ¿entendéis? 42 00:02:50,270 --> 00:02:56,210 Ahora, en la programación orientada a objeto, esto cambia, ¿vale? 43 00:02:56,270 --> 00:03:04,229 El problema que tiene la programación estructurada es que sí es mejor que la no estructurada, 44 00:03:04,330 --> 00:03:07,210 que antes era un caos, tenía todo código, saltaba por un lado o por el otro, 45 00:03:07,210 --> 00:03:12,789 Ahora ese código lo he organizado en funciones, entonces puedo llamar a estas funciones, tengo más control. 46 00:03:13,129 --> 00:03:17,310 Pero aún así, los sistemas muy complejos siguen siendo complejos. 47 00:03:17,469 --> 00:03:23,250 ¿Por qué? Porque las funciones no me dicen de quiénes son. 48 00:03:24,250 --> 00:03:32,969 Yo tengo las funciones, pero puedo tener en el mismo lugar, en el mismo módulo, en el mismo package, en el mismo concepto, 49 00:03:33,969 --> 00:03:36,770 muchas funciones que hacen cosas distintas. 50 00:03:36,770 --> 00:03:45,990 Una me calcula el precio, una me llama, me manda un email a los clientes, otra busca proveedores, otra no lo sé. 51 00:03:46,150 --> 00:03:53,250 Tengo un montón de funciones que son todas usadas por mi sistema para que mi sistema funcione, pero están organizadas por función. 52 00:03:53,629 --> 00:03:58,009 No por qué hacen estas funciones o grupos de funciones que hacen lo mismo. 53 00:03:58,990 --> 00:04:06,110 Sí que puedo intentar utilizar módulos para mejorar un poquito estas cosas, pero se mantiene un cierto nivel de caos. 54 00:04:06,110 --> 00:04:08,129 en la gestión de las funciones. 55 00:04:08,289 --> 00:04:15,069 Claramente todo esto es una cuestión de escalabilidad del problema. 56 00:04:15,509 --> 00:04:17,350 Mientras el problema es sencillo, 57 00:04:17,569 --> 00:04:19,430 todos los problemas que hemos hecho nosotros 58 00:04:19,430 --> 00:04:21,850 no requieren ni siquiera de funciones. 59 00:04:22,529 --> 00:04:23,889 Todos los ejercicios que hacemos nosotros, 60 00:04:23,949 --> 00:04:26,410 que hemos hecho hasta ahora, son tan sencillos 61 00:04:26,410 --> 00:04:28,750 que yo lo hago directamente en un mail y se acabó. 62 00:04:28,949 --> 00:04:30,170 En un mail y se acabó. 63 00:04:32,230 --> 00:04:35,050 Sin embargo, cuando esto se complica 64 00:04:35,050 --> 00:04:38,550 y yo empiezo a decir, no, no, hago un ejercicito, hago un sistema, 65 00:04:38,709 --> 00:04:43,709 hago un programa suficientemente complejo, 66 00:04:44,009 --> 00:04:47,649 pues entonces tengo que empezar a organizar las funciones, 67 00:04:47,829 --> 00:04:49,389 organizar los módulos, etcétera, etcétera. 68 00:04:49,750 --> 00:04:50,509 Y funciona. 69 00:04:51,310 --> 00:04:54,529 ¿Hasta cuándo no quiero hacer algo todavía más complejo? 70 00:04:54,610 --> 00:04:57,829 ¿Y cómo la informática empezó con cosas sencillitas 71 00:04:57,829 --> 00:05:00,370 y luego ha ido creciendo, creciendo, creciendo? 72 00:05:00,529 --> 00:05:04,209 Hasta ahora que tenemos cosas maravillosas y mirabolantes 73 00:05:04,209 --> 00:05:07,170 a la que constantemente estamos acostumbrados, 74 00:05:07,290 --> 00:05:12,269 que pero hace 20, 30 años no existían, ni se pensaban. 75 00:05:12,949 --> 00:05:16,290 El mismo, qué sé yo, YouTube, Google y cosas por el estilo 76 00:05:16,290 --> 00:05:19,009 no tienen tan muchísimos años, ¿vale? 77 00:05:19,069 --> 00:05:20,449 Hace 30 años no existían. 78 00:05:21,589 --> 00:05:25,449 Pues ha llegado un momento en que hasta la programación estructural 79 00:05:25,449 --> 00:05:27,629 no era suficiente, ¿vale? 80 00:05:27,689 --> 00:05:32,230 Para que esta cosa funcionara se necesitaba organizar todavía mejor 81 00:05:32,230 --> 00:05:36,870 para que yo pueda, por un lado, tener más control sobre lo que estoy haciendo 82 00:05:36,870 --> 00:05:39,829 y, por otro lado, también reutilizar lo que estoy haciendo. 83 00:05:40,029 --> 00:05:45,370 Porque nos hemos dado cuenta que muchos de los problemas que resolvemos en un determinado contexto 84 00:05:45,370 --> 00:05:51,649 luego lo tenemos que resolver otra vez en otros contextos distintos, a lo mejor con pequeños cambios. 85 00:05:52,089 --> 00:05:59,250 Si yo puedo, la solución que he encontrado en un determinado campo o en un determinado entorno, 86 00:05:59,250 --> 00:06:01,569 aplicarla a otros 87 00:06:01,569 --> 00:06:03,410 campos, a otros 88 00:06:03,410 --> 00:06:05,550 entornos, reutilizando el código 89 00:06:05,550 --> 00:06:07,329 que ya he hecho, pues todo esto 90 00:06:07,329 --> 00:06:08,889 es una cosa positiva, ¿vale? 91 00:06:09,290 --> 00:06:11,290 Me hace más rápido 92 00:06:11,290 --> 00:06:12,029 el desarrollo, 93 00:06:13,089 --> 00:06:15,170 me permite, si yo 94 00:06:15,170 --> 00:06:17,410 utilizo el mismo 95 00:06:17,410 --> 00:06:19,209 concepto, si yo mejoro ese 96 00:06:19,209 --> 00:06:21,189 concepto, si yo mejoro ese elemento 97 00:06:21,189 --> 00:06:23,250 y lo he reutilizado en 98 00:06:23,250 --> 00:06:25,069 varios sitios, pues esta mejora se 99 00:06:25,069 --> 00:06:27,149 aplica en todos los sitios que la he reutilizado. 100 00:06:27,149 --> 00:06:29,709 lo que es, puede ser una cosa positiva 101 00:06:29,709 --> 00:06:31,389 ¿vale? entonces se empieza 102 00:06:31,389 --> 00:06:33,610 a pensar al concepto de objeto 103 00:06:33,610 --> 00:06:35,449 ¿vale? el concepto de objeto 104 00:06:35,449 --> 00:06:36,949 clase, vemos que están 105 00:06:36,949 --> 00:06:39,269 relacionados, veremos que es 106 00:06:39,269 --> 00:06:41,829 ¿cuál es la diferencia? es sustancialmente 107 00:06:41,829 --> 00:06:42,129 de 108 00:06:42,129 --> 00:06:45,410 modelizar los elementos 109 00:06:45,410 --> 00:06:46,370 de mi programa 110 00:06:46,370 --> 00:06:48,870 basándome sobre 111 00:06:48,870 --> 00:06:51,329 lo que quiero modelizar 112 00:06:51,329 --> 00:06:53,029 sus características 113 00:06:53,029 --> 00:06:55,009 y sus funcionalidades 114 00:06:55,009 --> 00:07:05,389 O sea, en vez de crear funciones y variables así al azar, que luego se relacionan entre ellos, las voy acorpando en lo que llamarán una clase o un objeto. 115 00:07:05,850 --> 00:07:16,149 Entonces, todas las funciones y todas las variables, todas las características de un determinado concepto, pertenecerán al mismo objeto. 116 00:07:16,149 --> 00:07:19,050 ejemplo, si yo pillo y digo 117 00:07:19,050 --> 00:07:20,889 quiero modelizar un coche 118 00:07:20,889 --> 00:07:23,029 todas las características 119 00:07:23,029 --> 00:07:25,029 del coche y todas las posibles 120 00:07:25,029 --> 00:07:26,649 funcionalidades del coche 121 00:07:26,649 --> 00:07:29,269 irán dentro de un mismo 122 00:07:29,269 --> 00:07:31,269 contexto 123 00:07:31,269 --> 00:07:33,029 de un mismo módulo 124 00:07:33,029 --> 00:07:34,810 de lo que llamaremos una clase 125 00:07:34,810 --> 00:07:35,649 o un objeto 126 00:07:35,649 --> 00:07:39,050 entonces, ¿qué me interesa a mí 127 00:07:39,050 --> 00:07:41,269 del coche? pues depende de mi proyecto 128 00:07:41,269 --> 00:07:42,670 ¿vale? si yo soy 129 00:07:42,670 --> 00:07:45,350 estoy desarrollando un sistema para un taller 130 00:07:45,350 --> 00:07:51,029 pues a lo mejor me interesa la marca, me interesa las piezas que se han estropeado, 131 00:07:51,170 --> 00:07:53,850 me interesa si hay piezas de cambio y cosas por el estilo. 132 00:07:54,209 --> 00:07:57,829 Si yo estoy haciendo un sistema para una venta de coches, 133 00:07:58,250 --> 00:08:00,350 pues a lo mejor las piezas estropeadas no me interesan. 134 00:08:01,110 --> 00:08:02,810 Me interesa el modelo, me interesa el precio. 135 00:08:03,589 --> 00:08:06,850 Si yo estoy haciendo un sistema para carreras de coche, 136 00:08:07,310 --> 00:08:11,350 pues no me interesa el precio, me interesa la velocidad máxima. 137 00:08:11,350 --> 00:08:19,730 Entonces, las características del elemento, del objeto que voy modelizando, dependen del sistema en el que yo me meto. 138 00:08:20,389 --> 00:08:38,190 Entonces, cuando yo tengo un proyecto y digo, vale, voy a desarrollar este proyecto, analizaré lo que necesito y diré, ok, necesito crear tres, cinco, diez objetos, diez conceptos que voy a modelizar, y cada uno de ellos diré cuáles son sus características. 139 00:08:38,190 --> 00:08:47,340 además de las características en el mismo, no quiero decir paquete porque es otra cosa el 140 00:08:47,340 --> 00:08:55,799 package, en el mismo objeto, en el mismo bloque, en el mismo elemento, van también qué puede hacer 141 00:08:55,799 --> 00:09:02,840 este elemento. Entonces un coche, si tengo su marca, tengo su modelo, tengo su velocidad máxima, 142 00:09:02,840 --> 00:09:07,379 ¿qué puede hacer un coche? Dependerá siempre del contexto en el que estoy desarrollando, 143 00:09:07,379 --> 00:09:11,000 del proyecto que estoy haciendo. Por ejemplo, si estoy haciendo un proyecto de movilidad, 144 00:09:11,000 --> 00:09:15,759 al trazamiento, a lo mejor tengo la posibilidad de mover el coche 145 00:09:15,759 --> 00:09:19,960 o de parar el coche. Pues esto mover y esto parar 146 00:09:19,960 --> 00:09:24,159 serán funcionalidades, serán comportamientos de este objeto. 147 00:09:24,720 --> 00:09:27,940 Este objeto podrá moverse o podrá pararse. 148 00:09:28,320 --> 00:09:32,360 Y estos serán sus métodos, sus funciones y procedimientos 149 00:09:32,360 --> 00:09:36,059 que en el mundo de la programación orientada a objetos se definirán 150 00:09:36,059 --> 00:09:40,000 como métodos. Por ejemplo, 151 00:09:40,000 --> 00:09:48,340 string modeliza el concepto de una cadena de caracteres y tiene un montón de comportamientos 152 00:09:48,340 --> 00:09:54,679 que me permiten manipular estos estos cadenas de caracteres como por ejemplo tenemos el tu 153 00:09:54,679 --> 00:10:01,299 aper string que lo que hace es pillar todas las cadenas y ponerla en mayúscula tenemos el punto 154 00:10:01,299 --> 00:10:06,220 length que es un método que me va a contar cuántos caracteres tiene esta string que me devuelve 155 00:10:06,220 --> 00:10:08,779 cuantos caracteres tienen, todo esto son comportamientos 156 00:10:08,779 --> 00:10:09,519 son 157 00:10:09,519 --> 00:10:13,019 funcionalidades útiles 158 00:10:13,019 --> 00:10:14,820 para el mundo de los strings 159 00:10:14,820 --> 00:10:16,519 y yo los junto todos 160 00:10:16,519 --> 00:10:18,039 dentro de la clase string 161 00:10:18,039 --> 00:10:20,860 de esta forma yo luego podré crear objetos string 162 00:10:20,860 --> 00:10:22,539 y todos estos objetos 163 00:10:22,539 --> 00:10:24,679 podrán hacer los comportamientos 164 00:10:24,679 --> 00:10:26,679 que he definido, podrán decirme 165 00:10:26,679 --> 00:10:27,620 cuantos son largos, podrán 166 00:10:27,620 --> 00:10:30,960 mudarse a mayúscula, podrán mudarse a minúscula 167 00:10:30,960 --> 00:10:33,039 podrán pillar un trozo 168 00:10:33,039 --> 00:10:34,799 de sí mismo haciendo el substring 169 00:10:34,799 --> 00:10:38,960 Pueden compararse con otra string 170 00:10:38,960 --> 00:10:41,440 Y todo esto son comportamientos de ese objeto 171 00:10:41,440 --> 00:10:44,659 ¿Sí? 172 00:10:46,100 --> 00:10:47,039 ¿Dudas hasta aquí? 173 00:10:47,259 --> 00:10:49,200 Esta introducción teórica 174 00:10:49,200 --> 00:10:51,399 Ahora, empezamos otra vez 175 00:10:51,399 --> 00:10:53,100 Y algunas cosillas de estas 176 00:10:53,100 --> 00:10:54,440 Las repetiremos 177 00:10:54,440 --> 00:10:56,080 Algunas otras cosas que hay que aprender 178 00:10:56,080 --> 00:10:56,360 ¿Vale? 179 00:10:56,419 --> 00:10:58,360 Entonces, programación orientada a objetos 180 00:10:58,360 --> 00:10:58,779 ¿Vale? 181 00:10:59,700 --> 00:11:02,080 Programación orientada a objetos es un paradigma de programación 182 00:11:02,080 --> 00:11:04,220 Cuyo elemento estructural principal es el objeto 183 00:11:04,220 --> 00:11:04,840 ¿Vale? 184 00:11:04,840 --> 00:11:07,399 este concepto de objeto lo tenemos que entender. 185 00:11:07,539 --> 00:11:09,279 Tenemos que entender muy bien la diferencia 186 00:11:09,279 --> 00:11:11,039 entre objeto y clase, porque 187 00:11:11,039 --> 00:11:13,100 luego la vamos a utilizar constantemente. A partir 188 00:11:13,100 --> 00:11:15,080 de ahora, todo lo que hacemos son objetos 189 00:11:15,080 --> 00:11:15,759 y clases. 190 00:11:17,419 --> 00:11:19,019 Tened en cuenta que en la programación 191 00:11:19,019 --> 00:11:21,019 estructurada, esta misma frase 192 00:11:21,019 --> 00:11:22,600 sería la programación estructurada, 193 00:11:22,759 --> 00:11:25,120 en el paradigma 194 00:11:25,120 --> 00:11:26,799 de programación, cuyo elemento estructural 195 00:11:26,799 --> 00:11:27,500 principal es 196 00:11:27,500 --> 00:11:30,120 la función. 197 00:11:30,919 --> 00:11:31,620 Lo hemos dicho antes. 198 00:11:32,700 --> 00:11:34,240 Aquí estamos en el objeto. 199 00:11:34,240 --> 00:11:45,679 La función es un concepto menos potente del objeto, menos estructurado, menos organizado del objeto. 200 00:11:46,019 --> 00:11:52,240 El objeto es un paso más en la organización de un proyecto, de un paradigma de programación. 201 00:11:53,779 --> 00:11:56,120 Es algo más potente que una función. 202 00:11:56,620 --> 00:12:01,620 El objeto incluye funciones, pero incluye varias funciones todas juntas. 203 00:12:01,620 --> 00:12:04,919 el elemento estructural principal 204 00:12:04,919 --> 00:12:06,799 lo dice aquí, en la función 205 00:12:06,799 --> 00:12:08,720 las mejoras que aporta 206 00:12:08,720 --> 00:12:11,100 la programación orientada a objetos 207 00:12:11,100 --> 00:12:13,299 son análisis, la mente humana 208 00:12:13,299 --> 00:12:15,240 piensa más fácilmente en objetos que en 209 00:12:15,240 --> 00:12:17,019 procesos y datos de forma separada 210 00:12:17,019 --> 00:12:18,460 esto 211 00:12:18,460 --> 00:12:20,960 la programación orientada a objetos 212 00:12:20,960 --> 00:12:22,980 nos ayuda también a entender 213 00:12:22,980 --> 00:12:25,159 mejor problemas complejos 214 00:12:25,159 --> 00:12:26,740 y organizarlos para hacer 215 00:12:26,740 --> 00:12:29,200 un proyecto, cuando yo me pongo ahí 216 00:12:29,200 --> 00:12:30,960 y digo, a ver, quiero modelizar 217 00:12:30,960 --> 00:12:39,000 una escuela y me pongo a pensar qué es que sirve en una escuela. Cada uno de los elementos 218 00:12:39,000 --> 00:12:45,179 que saco para modelizar esta escuela, pues probablemente son objetos y van todos, son 219 00:12:45,179 --> 00:12:51,100 conceptos que van todos juntos con determinados comportamientos, con determinadas funcionalidades 220 00:12:51,100 --> 00:12:56,940 que para la mente humana, como la mente humana está acostumbrada a tratar con estas cosas, 221 00:12:56,940 --> 00:13:05,539 pues es más fácil con respecto a organizar lo mismo en un mundo sin objetos como la programación estructurada. 222 00:13:05,659 --> 00:13:11,779 O sea que me permite hacer cosas más complejas de forma más, entre comillas, natural, 223 00:13:12,059 --> 00:13:17,840 de forma más cercana a cómo normalmente pienso el mundo alrededor. 224 00:13:18,039 --> 00:13:21,539 Por ejemplo, en una escuela. ¿Qué os sirve de una escuela? 225 00:13:21,779 --> 00:13:25,299 ¿Queréis vosotros hacer un programa que gestione una escuela? ¿Qué necesitáis? 226 00:13:26,940 --> 00:13:30,600 Alumnos, ¿vale? Un objeto será el alumno. 227 00:13:31,539 --> 00:13:40,000 Entonces, yo dentro de mi programa crearé una clase alumno y desde esta clase podré crear objetos, ¿vale? 228 00:13:40,220 --> 00:13:42,580 Alumnos. ¿Qué me interesa de un alumno? 229 00:13:44,039 --> 00:13:44,840 Notas. 230 00:13:47,259 --> 00:13:53,240 Curso, exámenes, nombre, asistencia. 231 00:13:53,240 --> 00:13:56,539 todas estas cosas se pueden 232 00:13:56,539 --> 00:13:58,679 modelizar de alguna forma 233 00:13:58,679 --> 00:14:00,879 dentro del objeto alumno 234 00:14:00,879 --> 00:14:02,899 habrá cosas muy sencillas 235 00:14:02,899 --> 00:14:04,700 como nombre, que se podrá 236 00:14:04,700 --> 00:14:05,799 modelizar con un string 237 00:14:05,799 --> 00:14:08,980 habrá edad del alumno 238 00:14:08,980 --> 00:14:10,220 si me interesa saber la edad 239 00:14:10,220 --> 00:14:12,720 o el curso, que se puede modelizar con un int 240 00:14:12,720 --> 00:14:15,299 las notas 241 00:14:15,299 --> 00:14:17,080 o las materias que cursa 242 00:14:17,080 --> 00:14:18,799 a lo mejor ya son un poquito 243 00:14:18,799 --> 00:14:19,659 más complejas 244 00:14:19,659 --> 00:14:21,720 a lo mejor de una 245 00:14:21,720 --> 00:14:26,960 O sea, notas y materia tienen que ir juntitos, ¿vale? 246 00:14:26,960 --> 00:14:30,200 ¿Por qué no quiero tener notas, tres, cinco, siete, cuatro? 247 00:14:30,480 --> 00:14:32,519 ¿De qué materias? Pues no lo sé. 248 00:14:33,539 --> 00:14:36,500 Tendrán que ir juntas con otras, ¿vale? 249 00:14:36,679 --> 00:14:40,340 Entonces a lo mejor yo me puedo crear un objeto materia 250 00:14:40,340 --> 00:14:44,179 que dentro tenga una calificación, ¿vale? 251 00:14:44,179 --> 00:14:49,539 Un nombre, una calificación, y luego al alumno le asocio 252 00:14:49,539 --> 00:14:55,039 ¿Qué le asocio para poderle dar notas en varias materias? 253 00:14:57,220 --> 00:14:59,980 ¿Cómo hago dentro del alumno? 254 00:15:00,600 --> 00:15:02,299 Tengo un int que es su edad. 255 00:15:03,360 --> 00:15:04,980 Tengo un string que es su nombre. 256 00:15:05,600 --> 00:15:06,299 ¿Cómo le doy? 257 00:15:07,220 --> 00:15:11,080 Asumiendo que tengo las materias que son el nombre de la materia con su nota. 258 00:15:11,700 --> 00:15:13,879 Pensamos en notas medias, finales o lo que sea. 259 00:15:14,240 --> 00:15:15,299 Una nota sola por materia. 260 00:15:15,299 --> 00:15:21,759 ¿Cómo puedo hacer que dentro del alumno haya un array de qué? 261 00:15:22,360 --> 00:15:25,580 Las notas, el curso, las materias 262 00:15:25,580 --> 00:15:27,120 Un array de materia 263 00:15:27,120 --> 00:15:33,299 Siendo materia, cada elemento del array será un objeto a su vez 264 00:15:33,299 --> 00:15:36,279 Que dentro tendrá, que materia es con su nota 265 00:15:36,279 --> 00:15:38,600 ¿Se entiende? 266 00:15:38,600 --> 00:15:41,659 entonces, habrá 267 00:15:41,659 --> 00:15:43,779 características de los 268 00:15:43,779 --> 00:15:45,460 objetos que son sencillitas 269 00:15:45,460 --> 00:15:47,720 ¿vale? el nombre, un string 270 00:15:47,720 --> 00:15:49,399 cuidado 271 00:15:49,399 --> 00:15:51,179 el string es ya un objeto 272 00:15:51,179 --> 00:15:53,500 o sea, ya estáis haciendo que ponéis dentro 273 00:15:53,500 --> 00:15:54,799 de un objeto otro objeto, pero bueno 274 00:15:54,799 --> 00:15:57,740 el string es el nombre 275 00:15:57,740 --> 00:15:59,700 la edad es un int, muy fácil 276 00:15:59,700 --> 00:16:01,840 pero luego habrá un array 277 00:16:01,840 --> 00:16:03,480 de materias, siendo 278 00:16:03,480 --> 00:16:05,419 cada posición un objeto materia 279 00:16:05,419 --> 00:16:07,460 y dentro del objeto materia tendré el nombre 280 00:16:07,460 --> 00:16:08,460 de la materia con su nombre 281 00:16:08,460 --> 00:16:14,899 ¿Cómo cambio esto para que dentro de la materia de programación te pueda dar más de una nota? 282 00:16:21,379 --> 00:16:31,799 ¿Cómo cambiaríais vosotros para que un alumno que tenga una red de materias pueda tener por cada materia varias notas? 283 00:16:31,799 --> 00:16:43,269 Una opción, repito la materia en notas, o sea, programación 5, luego programación 4, programación 3, va a bajar. 284 00:16:43,269 --> 00:16:46,070 o 285 00:16:46,070 --> 00:16:48,590 ¿qué podría hacer? 286 00:16:51,259 --> 00:16:53,279 claro, que en la materia dentro 287 00:16:53,279 --> 00:16:55,799 además del nombre y una nota sola 288 00:16:55,799 --> 00:16:56,960 en vez de una nota sola 289 00:16:56,960 --> 00:16:58,360 tengo un array de notas 290 00:16:58,360 --> 00:17:01,039 entonces cuando yo tengo la materia programación 291 00:17:01,039 --> 00:17:03,620 dentro puedo encontrar todas las notas 292 00:17:03,620 --> 00:17:05,279 de él 293 00:17:05,279 --> 00:17:07,220 interesante, ahora tengo 294 00:17:07,220 --> 00:17:09,200 alumno Estefano con 295 00:17:09,200 --> 00:17:11,319 materia programación, notas 296 00:17:11,319 --> 00:17:13,339 10, 10, 10, 10, 10, 10 297 00:17:13,339 --> 00:17:14,299 muy bueno esto de la materia 298 00:17:14,299 --> 00:17:16,980 ¿qué me podría 299 00:17:16,980 --> 00:17:18,400 interesar de la materia? 300 00:17:18,839 --> 00:17:21,140 una funcionalidad de materia que me podría interesar 301 00:17:21,140 --> 00:17:24,720 ¿entendéis? tengo una materia 302 00:17:24,720 --> 00:17:26,759 que está su nombre 303 00:17:26,759 --> 00:17:29,220 y tiene una red de notas 304 00:17:29,220 --> 00:17:30,759 que son las calificaciones que he obtenido 305 00:17:30,759 --> 00:17:31,759 en todos los exámenes 306 00:17:31,759 --> 00:17:34,900 algo que podría pedir a este objeto 307 00:17:34,900 --> 00:17:36,240 la media 308 00:17:36,240 --> 00:17:38,240 pues calcula media 309 00:17:38,240 --> 00:17:40,140 podría ser 310 00:17:40,140 --> 00:17:43,140 uno de los métodos de materia 311 00:17:43,140 --> 00:17:50,230 y este método estaría asociado con el objeto materia. 312 00:17:50,589 --> 00:17:51,730 Entonces ya tengo dos objetos. 313 00:17:52,210 --> 00:17:55,309 Tengo el objeto alumno y tengo el objeto materia. 314 00:17:55,849 --> 00:17:58,150 El objeto alumno tiene un array de materias 315 00:17:58,150 --> 00:18:03,269 y el objeto materia tiene nombre, un array de notas 316 00:18:03,269 --> 00:18:06,470 y tiene la posibilidad de calcular su media. 317 00:18:07,269 --> 00:18:09,630 ¿Qué más podría preguntar a una materia? 318 00:18:13,529 --> 00:18:15,730 Otra funcionalidad que podría tener el objeto materia. 319 00:18:17,490 --> 00:18:18,829 Es nota más alta, ¿vale? 320 00:18:18,890 --> 00:18:21,230 Tengo otro método que es, dame nota más alta. 321 00:18:21,490 --> 00:18:21,970 Perfecto. 322 00:18:22,049 --> 00:18:23,849 ¿Qué números están por encima del 5? 323 00:18:24,549 --> 00:18:26,130 ¿Cuántos exámenes ha aprobado? 324 00:18:26,269 --> 00:18:30,470 Entonces me recorre la red y mira cuántos 5 más tiene, me dice 3. 325 00:18:31,089 --> 00:18:31,430 ¿Más? 326 00:18:31,569 --> 00:18:32,849 Si ha aprobado la materia o no. 327 00:18:33,170 --> 00:18:34,329 Si ha aprobado la materia o no. 328 00:18:34,750 --> 00:18:38,869 Entonces tendré otra funcionalidad que es, has aprobado, que me devuelve true. 329 00:18:38,869 --> 00:18:44,869 Si la media es superior a 5 y ha aprobado al menos 4 exámenes y... 330 00:18:44,869 --> 00:18:46,970 ¿Entendéis lo que quiero decir? 331 00:18:46,970 --> 00:18:50,990 Y como esto es muy lógico desde una perspectiva humana, 332 00:18:51,049 --> 00:18:52,869 o sea, nosotros lo estamos hablando así, 333 00:18:52,970 --> 00:18:55,329 ahora lo tenemos que plasmar en el ordenador, ¿vale? 334 00:18:55,529 --> 00:18:58,069 Pero entender lo que vamos a hacer, 335 00:18:58,170 --> 00:19:00,630 entender qué son los objetos de mi sistema 336 00:19:00,630 --> 00:19:02,150 y qué tengo que modelizar, 337 00:19:02,529 --> 00:19:07,029 es muy cercano a lo que nosotros podemos pensar 338 00:19:07,029 --> 00:19:10,490 y cómo vemos la realidad, ¿vale? 339 00:19:10,750 --> 00:19:13,230 Ahora nosotros aprenderemos, una vez que yo tengo esta idea 340 00:19:13,230 --> 00:19:14,890 y más o menos la he hecho en un papel, 341 00:19:14,890 --> 00:19:18,890 pues ahora la transformó y creó el programa correcto. 342 00:19:18,890 --> 00:19:20,890 ¿Dudas? 343 00:19:20,890 --> 00:19:24,890 ¿Entonces los métodos son los ejercicios que hemos estado haciendo hasta ahora? 344 00:19:24,890 --> 00:19:31,890 En un cierto sentido, algunos de los ejercicios que hemos hecho nosotros podrían ser métodos. 345 00:19:31,890 --> 00:19:37,890 De hecho, nosotros hacíamos ahora todo como main. 346 00:19:37,890 --> 00:19:39,890 Ahora, esto de aquí le podría dar un nombre. 347 00:19:39,890 --> 00:19:41,890 Esto de aquí, ¿qué hacía? Calculaba la área del triángulo. 348 00:19:41,890 --> 00:19:49,410 Pues lo llamo calcular a triángulo y lo pongo dentro del objeto triángulo para que un objeto triángulo pueda calcularse su área. 349 00:19:51,559 --> 00:19:52,640 Y así, así, así, con todo eso. 350 00:19:55,289 --> 00:19:57,170 Vale, entonces, análisis, lo hemos entendido. 351 00:19:57,430 --> 00:19:57,950 Escalabilidad. 352 00:19:59,150 --> 00:20:03,269 Es más fácil añadir nuevas funcionalidades o ampliar las que ya existen, ¿vale? 353 00:20:04,029 --> 00:20:08,970 Complicar, hacer más complejo y completo un sistema es mucho más fácil. 354 00:20:09,390 --> 00:20:13,430 Antes, yo tenía todas las funciones allí mezcladas. 355 00:20:13,430 --> 00:20:15,990 y tenía que añadir algo, lo añadía aquí 356 00:20:15,990 --> 00:20:18,289 y cuando otro lo buscaba 357 00:20:18,289 --> 00:20:19,990 pues ¿dónde lo has añadido? Pues a mitad 358 00:20:19,990 --> 00:20:22,130 de este fichero, quién sabe dónde. Pues ahora 359 00:20:22,130 --> 00:20:24,430 si yo añado la funcionalidad 360 00:20:24,430 --> 00:20:26,170 aprobado 361 00:20:26,170 --> 00:20:28,210 general, ¿vale? Que te da 5 362 00:20:28,210 --> 00:20:29,369 a todas las materias, 363 00:20:29,829 --> 00:20:31,690 que te da 5 a todas las 364 00:20:31,690 --> 00:20:33,789 notas de una materia, 365 00:20:34,670 --> 00:20:36,170 ¿en qué objeto 366 00:20:36,170 --> 00:20:37,309 lo añadiríais vosotros? 367 00:20:39,390 --> 00:20:41,109 Tengo una función que si has 368 00:20:41,109 --> 00:20:43,369 aprobado general, te pone 5 en 369 00:20:43,369 --> 00:20:45,089 todas tus calificaciones de una materia. 370 00:20:46,349 --> 00:20:47,230 ¿Dónde vais? 371 00:20:47,829 --> 00:20:49,130 ¿En materia o en alumno? 372 00:20:50,819 --> 00:20:51,400 En materia. 373 00:20:53,019 --> 00:20:54,599 Materia tendrá una función 374 00:20:54,599 --> 00:20:56,619 que es aprobado general, que si tú 375 00:20:56,619 --> 00:20:58,839 le llamas, sustituye todas tus calificaciones con 5. 376 00:20:59,259 --> 00:21:00,819 Luego se hará, yo accederé 377 00:21:00,819 --> 00:21:02,579 a un alumno, y a este alumno 378 00:21:02,579 --> 00:21:04,460 accederé a su materia, y de este 379 00:21:04,460 --> 00:21:06,480 su materia le diré, tú aprobado general. 380 00:21:07,220 --> 00:21:07,940 Él se aplicará. 381 00:21:11,420 --> 00:21:13,240 En alumno está una red de materias. 382 00:21:14,299 --> 00:21:15,539 Mientras que en materia es una materia. 383 00:21:15,539 --> 00:21:16,880 Eso, programación. 384 00:21:17,400 --> 00:21:18,519 tiene su array de calificación. 385 00:21:19,019 --> 00:21:21,759 Base de datos, tiene su array de calificación. 386 00:21:23,539 --> 00:21:26,559 Depende de cómo entiendas la función. 387 00:21:26,859 --> 00:21:27,980 A lo mejor no es el ejemplo mejor. 388 00:21:28,339 --> 00:21:31,140 Pero la idea es que, dada una funcionalidad, 389 00:21:31,559 --> 00:21:33,480 tú puedes pensar dónde la voy a poner. 390 00:21:34,660 --> 00:21:38,460 Y la asociarás con el elemento, con el objeto, 391 00:21:38,980 --> 00:21:43,579 en la clase donde tú piensas, donde tienes que estar. 392 00:21:44,079 --> 00:21:45,799 De esta forma, cuando uno viene y dice, 393 00:21:45,799 --> 00:21:47,960 oye, mira, esta función, ¿dónde está? 394 00:21:48,299 --> 00:21:49,859 Pues lo puede saber tranquilamente 395 00:21:49,859 --> 00:21:51,740 porque si se usa sobre un determinado objeto 396 00:21:51,740 --> 00:21:53,960 sabe que estará definida dentro 397 00:21:53,960 --> 00:21:54,559 de este objeto. 398 00:21:55,759 --> 00:21:57,559 Entonces es mucho más fácil encontrarlo, 399 00:21:57,920 --> 00:21:59,619 es mucho más fácil decir, oye, mira, 400 00:21:59,700 --> 00:22:01,700 quiero añadir una funcionalidad, sé dónde añadirla. 401 00:22:02,039 --> 00:22:03,640 Esta funcionalidad es una nueva funcionalidad 402 00:22:03,640 --> 00:22:05,400 ¿de qué? ¿Del alumno? Pues le añade al alumno. 403 00:22:05,480 --> 00:22:06,759 ¿De la materia? Le añade a la materia. 404 00:22:07,480 --> 00:22:09,740 Luego, no es que existe una cosa 405 00:22:09,740 --> 00:22:10,519 se hace así. 406 00:22:11,440 --> 00:22:13,539 Depende de vuestro proyecto. A lo mejor 407 00:22:13,539 --> 00:22:15,559 hay algunos proyectos que tendrías 408 00:22:15,559 --> 00:22:20,119 sentido añadirla en alumno, en algunos otros proyectos tiene sentido añadirla 409 00:22:20,119 --> 00:22:26,200 en materia, otros en clase, otros en la escuela, qué sé yo. 410 00:22:26,200 --> 00:22:29,200 Vale, estás hablando de que se puede interactuar entre objetos y también entre clases, ¿no? 411 00:22:29,200 --> 00:22:31,200 ¿Dentro del proyecto, en los paquetes, también...? 412 00:22:31,200 --> 00:22:36,839 Lo hemos hecho, ¿vale? Cuando tú en una clase pones un string o pones un 413 00:22:36,839 --> 00:22:46,799 escáner, estás interactuando con otro sujeto. La clase Scanner y la clase Strip. Nosotros, 414 00:22:46,799 --> 00:22:52,240 en el ejemplo este aquí un poquito borroso que estamos haciendo, tenemos la clase alumno que 415 00:22:52,240 --> 00:23:01,740 dentro tiene una red de materias, entonces está usando otra clase. Puedes usar entre paquetes 416 00:23:01,740 --> 00:23:07,619 diferentes puedes usar entre entre mismos paquetes puede utilizar entre clases distintas entre 417 00:23:07,619 --> 00:23:14,460 proyectos distintos pueden llegar hasta hasta donde llegue cuando nosotros hacemos arriba un 418 00:23:14,460 --> 00:23:21,740 import lo que estamos diciendo es voy a usar una clase de otro paquete importa hay que escáner no 419 00:23:21,740 --> 00:23:27,460 está en tu proyecto está en otro proyecto en otro lado cuando quieres usar arriba tienes que hacer 420 00:23:27,460 --> 00:23:29,559 import javautil.scanner 421 00:23:29,559 --> 00:23:31,700 porque el scanner es una clase 422 00:23:31,700 --> 00:23:33,680 desarrollada dentro 423 00:23:33,680 --> 00:23:35,559 del package java.util 424 00:23:35,559 --> 00:23:40,920 reutilización del código 425 00:23:40,920 --> 00:23:43,140 claramente si yo me he hecho un alumno 426 00:23:43,140 --> 00:23:45,259 bien hecho con todos los datos 427 00:23:45,259 --> 00:23:47,480 con todas las funcionalidades y ahora 428 00:23:47,480 --> 00:23:49,000 en vez de una escuela 429 00:23:49,000 --> 00:23:51,380 quiero hacer, o sea una escuela como la nuestra 430 00:23:51,380 --> 00:23:53,980 quiero hacer otro tipo, una universidad 431 00:23:53,980 --> 00:23:55,519 pues a lo mejor 432 00:23:55,519 --> 00:24:02,660 la clase alumno la puedo pillar exactamente igual de reutilizar y ya tengo movilizado al alumno 433 00:24:02,660 --> 00:24:11,119 claramente en una universidad habrá otras cosas extra que aquí no había y que tendré que modificar 434 00:24:11,119 --> 00:24:17,240 puede que el alumno como base esté bien pero necesite algo más entonces pillaré como base 435 00:24:17,240 --> 00:24:24,859 el alumno y lo extenderé con funcionalidades y con características más avanzadas creando el alumno 436 00:24:24,859 --> 00:24:27,299 universitario, que es un alumno 437 00:24:27,299 --> 00:24:28,539 pero algo más. 438 00:24:28,940 --> 00:24:29,779 Esto se llama herencia. 439 00:24:32,640 --> 00:24:34,480 ¿Sí? Pero la 440 00:24:34,480 --> 00:24:36,539 cosa fundamental es que puedo reutilizar el código. 441 00:24:36,660 --> 00:24:38,160 Es fácil reutilizar el código. 442 00:24:38,559 --> 00:24:40,319 Es sencillo porque como lo entiendo, 443 00:24:40,400 --> 00:24:42,240 como entiendo los varios componentes, 444 00:24:42,319 --> 00:24:44,420 y sé que todo lo relacionado a un alumno está 445 00:24:44,420 --> 00:24:46,400 en la clase de alumno y todo lo relacionado a la materia 446 00:24:46,400 --> 00:24:48,420 está en la clase de materia, si importo la 447 00:24:48,420 --> 00:24:50,539 materia, si pillo materia, pues importo 448 00:24:50,539 --> 00:24:52,559 con ella todas las funcionalidades de materia. 449 00:24:53,099 --> 00:24:54,380 Entonces todo lo que podía hacer antes 450 00:24:54,380 --> 00:24:55,740 sobre la materia lo puedo volver a hacer. 451 00:24:55,740 --> 00:24:58,240 También en mi nuevo proyecto de universidad. 452 00:25:01,700 --> 00:25:11,680 No sabemos todavía cómo creamos objetos. 453 00:25:11,839 --> 00:25:17,279 Estamos con el concepto de que es un objeto y ya veremos cómo se crea un objeto. 454 00:25:17,660 --> 00:25:18,579 Hemos creado un objeto. 455 00:25:19,180 --> 00:25:20,220 New Scanner. 456 00:25:21,259 --> 00:25:22,019 Ahí has creado un objeto. 457 00:25:23,319 --> 00:25:27,880 Cuando tú haces string x es igual a cocodrilo, pues estás creando un objeto. 458 00:25:28,019 --> 00:25:36,339 No haces con el new, porque string es un objeto súper especial y súper utilizado, por lo tanto han hecho cosas malas, 459 00:25:36,380 --> 00:25:40,720 pero tú deberías hacer string x es igual a new string de cocodrilo. 460 00:25:42,079 --> 00:25:46,440 ¿Vale? La operativa new, la función new es la que crea un objeto. 461 00:25:46,440 --> 00:25:47,240 Lo veréis. 462 00:25:49,299 --> 00:25:51,440 Porque la raíz debajo era... 463 00:25:53,039 --> 00:25:53,200 ¿Sí? 464 00:25:53,200 --> 00:25:57,819 Vale, jerarquística de la programación de los objetos 465 00:25:57,819 --> 00:26:01,140 Creamos clases que definen unos datos y un comportamiento 466 00:26:01,140 --> 00:26:02,900 Y creamos objetos de estas clases 467 00:26:02,900 --> 00:26:03,380 ¿Vale? 468 00:26:03,460 --> 00:26:04,539 Entonces hay dos niveles 469 00:26:04,539 --> 00:26:07,339 La clase es un concepto más abstracto 470 00:26:07,339 --> 00:26:09,640 Los objetos se relacionan con la clase 471 00:26:09,640 --> 00:26:11,519 O sea, cuando yo hago el alumno 472 00:26:11,519 --> 00:26:12,519 ¿Vale? 473 00:26:12,539 --> 00:26:13,519 Que decíamos antes 474 00:26:13,519 --> 00:26:16,400 Yo lo que defino es la clase alumno 475 00:26:16,400 --> 00:26:19,920 Yo no defino el alumno Estefan 476 00:26:19,920 --> 00:26:22,720 Yo defino la clase alumno 477 00:26:22,720 --> 00:26:27,339 La clase alumno es genedad, genérica. 478 00:26:28,579 --> 00:26:33,660 Yo digo que un alumno tiene un nombre, y un alumno tiene notas, y un alumno tiene edad. 479 00:26:34,160 --> 00:26:39,859 Pero no estoy diciendo cómo se llama, no estoy diciendo qué edad tiene, ni no estoy diciendo qué materias tiene. 480 00:26:40,619 --> 00:26:45,319 Estoy definiendo un molde de todos los alumnos tendrán un nombre. 481 00:26:45,420 --> 00:26:47,299 Y estoy seguro que todos los alumnos tendrán un nombre. 482 00:26:48,720 --> 00:26:51,579 Y estoy seguro que todos los alumnos tendrán materias. 483 00:26:52,720 --> 00:26:55,720 ¿Sí? Pero no sé ni qué nombre ni qué materias. 484 00:26:56,859 --> 00:27:03,180 Es un poco como cuando yo creaba una variable, pero sin instanciarla, y la instanciaba después. 485 00:27:03,339 --> 00:27:06,579 Cuando yo decía, no, int x es igual a scan.next. 486 00:27:08,480 --> 00:27:12,119 Pues, ¿qué hay dentro de la variable x? 487 00:27:13,420 --> 00:27:14,819 ¿Qué número hay dentro de x? 488 00:27:15,759 --> 00:27:19,420 No lo sé. Hasta que alguien no me meta un número ahí dentro, no lo sé. 489 00:27:19,420 --> 00:27:27,519 Pero sé que cuando lanzaré este programa, pues dentro de X se pondrá un numerito. 490 00:27:27,660 --> 00:27:31,259 Y a partir de ahora, donde yo pongo X, estoy usando ese numerito. 491 00:27:32,920 --> 00:27:34,599 ¿Sí? Es una cosa parecida. 492 00:27:35,299 --> 00:27:40,420 La clase me define la estructura genérica de un elemento, de un concepto. 493 00:27:41,180 --> 00:27:49,400 Tengo el alumno. El alumno tiene estas características, nombre y notas, ¿vale? 494 00:27:49,400 --> 00:27:57,700 Estas funcionalidades, tiene la posibilidad de inscribirse a una nueva materia, de dejar otra materia, de estudiar por el examen, qué sé yo. 495 00:27:57,880 --> 00:28:00,039 Estas son sus funcionalidades, ¿vale? 496 00:28:00,039 --> 00:28:06,380 Todos los alumnos pueden matricularse, todos los alumnos pueden estudiar, si quieren, aprobar. 497 00:28:08,119 --> 00:28:15,579 Pero no he creado un alumno concreto, he creado un molde, una descripción general del alumno, ¿se entiende? 498 00:28:16,299 --> 00:28:17,259 Esa es la clase. 499 00:28:17,259 --> 00:28:20,160 a partir de la clase 500 00:28:20,160 --> 00:28:22,500 yo puedo crear un alumno 501 00:28:22,500 --> 00:28:23,180 concreto 502 00:28:23,180 --> 00:28:26,299 digo, vale, esta es la estructura que tiene 503 00:28:26,299 --> 00:28:28,380 que tener, ahora créame el alumno 504 00:28:28,380 --> 00:28:29,079 Estefano 505 00:28:29,079 --> 00:28:32,119 con la materia 506 00:28:32,119 --> 00:28:34,500 programación y con estas notas 507 00:28:34,500 --> 00:28:37,619 que es distinto del 508 00:28:37,619 --> 00:28:39,859 alumno Lidia 509 00:28:39,859 --> 00:28:41,319 con esta 510 00:28:41,319 --> 00:28:44,680 característica, con estas materias 511 00:28:44,680 --> 00:28:46,140 con estas calificaciones 512 00:28:46,140 --> 00:28:51,940 distintas. Los dos tienen la misma estructura y pueden hacer lo mismo. Tienen los mismos 513 00:28:51,940 --> 00:28:57,500 métodos, los mismos comportamientos y los mismos atributos, las mismas características, 514 00:28:57,500 --> 00:29:11,359 pero son dos objetos distintos. La clase es la generalización de los objetos. Los objetos 515 00:29:11,359 --> 00:29:15,000 son instancias concretas de una clase. 516 00:29:29,740 --> 00:29:32,019 ¿Qué son estos? 517 00:29:39,390 --> 00:29:39,910 ¿Qué son estos? 518 00:29:41,009 --> 00:29:41,690 Triángulos. 519 00:29:42,950 --> 00:29:46,029 La clase es triángulo. 520 00:29:46,829 --> 00:29:48,769 ¿Qué característica tiene la clase triángulo? 521 00:29:49,690 --> 00:29:50,670 Tres lados. 522 00:29:52,920 --> 00:29:53,500 Una altura. 523 00:29:53,980 --> 00:29:54,740 Una base de una altura. 524 00:29:54,839 --> 00:29:55,200 No lo sé. 525 00:29:55,400 --> 00:29:56,799 Lo que me interesa es un triángulo. 526 00:29:57,119 --> 00:29:57,259 ¿Vale? 527 00:29:57,299 --> 00:29:58,319 Pongamos los tres lados. 528 00:29:59,400 --> 00:30:02,160 Todos los triángulos tienen que tener tres lados. 529 00:30:02,900 --> 00:30:06,359 Luego habrá este triángulo aquí, que es equilátero, 530 00:30:06,359 --> 00:30:10,380 que resulta que tiene las tres lados iguales 531 00:30:10,380 --> 00:30:11,960 y que son todos lados unos. 532 00:30:12,500 --> 00:30:13,440 Esto es un objeto. 533 00:30:14,940 --> 00:30:17,319 Es una instancia de la clase triángulo. 534 00:30:18,660 --> 00:30:20,640 Hay otro objeto, que es este de aquí, 535 00:30:20,720 --> 00:30:22,420 que tiene dos, dos y uno. 536 00:30:22,619 --> 00:30:23,680 Es un triángulo isósceles. 537 00:30:25,400 --> 00:30:27,660 Pero es un triángulo. 538 00:30:27,940 --> 00:30:29,740 Es siempre de la clase triángulo, 539 00:30:29,859 --> 00:30:31,279 pero es una instancia distinta. 540 00:30:31,740 --> 00:30:34,079 Este triángulo es distinto de este otro triángulo. 541 00:30:34,079 --> 00:30:38,099 Pero los dos comparten la misma estructura, que tienen tres lados. 542 00:30:38,980 --> 00:30:41,779 Y que tienen el comportamiento cálcula-perímetro. 543 00:30:42,740 --> 00:30:47,500 Ahora, si yo llamo cálcula-perímetro sobre este objeto, ¿qué me dará? 544 00:30:49,380 --> 00:30:50,279 ¿Cuánto es? 545 00:30:51,019 --> 00:30:51,740 Tres. 546 00:30:52,200 --> 00:30:53,960 ¿Y si llamo cálcula-perímetro aquí? 547 00:30:55,319 --> 00:30:56,079 Cinco. 548 00:30:56,920 --> 00:31:00,819 ¿He cambiado el mecanismo con el que cálculo el perímetro? 549 00:31:01,299 --> 00:31:02,019 No. 550 00:31:02,019 --> 00:31:07,480 No, la definición del cálculo a perímetro es siempre lado 1 más lado 2 más lado 3. 551 00:31:09,160 --> 00:31:15,660 Pero si lo llamo sobre esta instancia de aquí, que tiene lado 1, 1, lado 2, 1 y lado 3, 1, 552 00:31:16,039 --> 00:31:18,039 pues hará 1 más 1 más 1 y me da 3. 553 00:31:18,759 --> 00:31:22,940 Si llamo el cálculo a perímetro, misma fórmula, ¿vale? 554 00:31:22,980 --> 00:31:28,119 Pero sobre este objeto de aquí, que tiene 2, 2 y 1, pues hará 2 más 2 más 1. 555 00:31:28,359 --> 00:31:29,180 Entonces me dará 5. 556 00:31:29,180 --> 00:31:33,380 La clase define el método de la misma forma 557 00:31:33,380 --> 00:31:37,220 Es pilla el lado 1, suma el lado 2, suma el lado 3 558 00:31:37,220 --> 00:31:42,799 Pero luego, llamándolo sobre instancias distintas 559 00:31:42,799 --> 00:31:44,680 Obtendré valores distintos 560 00:31:44,680 --> 00:31:46,539 ¿Entiendes? 561 00:31:48,940 --> 00:31:49,839 Lo mismo los alumnos 562 00:31:49,839 --> 00:31:53,000 Todos los alumnos tendrán sus nombres, tendrán su cadena 563 00:31:53,000 --> 00:31:55,559 Pero si yo tengo la función saluda 564 00:31:55,559 --> 00:31:57,799 Que dice, hola, soy 565 00:31:57,799 --> 00:31:58,980 Y dice su nombre 566 00:31:58,980 --> 00:32:00,960 o si lo llamo sobre el alumno 567 00:32:00,960 --> 00:32:02,619 Estefano, dirá hola soy Estefano 568 00:32:02,619 --> 00:32:05,000 si lo llamo sobre el objeto 569 00:32:05,000 --> 00:32:07,339 Lidia, dirá hola soy Lidia 570 00:32:07,339 --> 00:32:09,319 en la definición general 571 00:32:09,319 --> 00:32:11,359 yo tendré una variable 572 00:32:11,359 --> 00:32:12,700 que será string nombre 573 00:32:12,700 --> 00:32:14,779 que tendrá dentro el nombre del alumno 574 00:32:14,779 --> 00:32:17,019 y la definición de la función 575 00:32:17,019 --> 00:32:19,180 saludas hará hola soy 576 00:32:19,180 --> 00:32:20,279 más nombre 577 00:32:20,279 --> 00:32:22,640 ¿se entiende? 578 00:32:24,259 --> 00:32:24,440 ¿sí? 579 00:32:25,339 --> 00:32:27,500 entonces clase general 580 00:32:27,500 --> 00:32:38,420 genérica de una definición generalizada de lo que de lo que voy a modelizar a partir de allí es un 581 00:32:38,420 --> 00:32:44,359 molde vale pensado el molde de lava de la playa no sólo tenéis el molde para la arena de un 582 00:32:44,359 --> 00:32:50,700 pingüino vale entonces vosotros lo tenéis lo rellenáis de arena y hacéis un pingüino pues 583 00:32:50,700 --> 00:32:56,359 ese es un objeto el molde se queda aquí todos tendrán la misma característica pero has creado 584 00:32:56,359 --> 00:33:01,640 objeto que ahora está allí pues pongo otra vez arena al otro otro pingüino ahora tengo dos 585 00:33:01,640 --> 00:33:07,099 objetos pingüinos tienen la misma característica pero son distintos si yo modifico a uno y le pongo 586 00:33:07,099 --> 00:33:14,059 piedras para para hacerlo más bonito el otro es una cosa aparte entiende todos tienen la misma 587 00:33:14,059 --> 00:33:25,140 estructura pero son dos objetos distintos dudas los objetos colaboran entre ellos para conseguir 588 00:33:25,140 --> 00:33:27,140 algo, ¿vale? Una vez que yo he creado varias 589 00:33:27,140 --> 00:33:29,119 clases y he creado varios objetos, 590 00:33:29,279 --> 00:33:31,180 pues los objetos hablarán entre ellos 591 00:33:31,180 --> 00:33:33,200 para hacer algo. ¿Qué quiere decir 592 00:33:33,200 --> 00:33:34,839 hablar? Pues llamar ese método, 593 00:33:35,380 --> 00:33:37,039 cambiar características, 594 00:33:37,720 --> 00:33:39,339 hacer cosas, ¿vale? Sustancialmente 595 00:33:39,339 --> 00:33:40,940 llamar métodos uno de otro. 596 00:33:41,579 --> 00:33:43,019 ¿Sí? Entonces yo tengo string, 597 00:33:43,019 --> 00:33:45,079 es un objeto, pues lo que hago 598 00:33:45,079 --> 00:33:46,640 es string le digo pues 599 00:33:46,640 --> 00:33:49,079 to lowercase y lo que he 600 00:33:49,079 --> 00:33:50,960 hecho es cambiar el objeto para que 601 00:33:50,960 --> 00:33:52,500 se disminuya. Desde mi 602 00:33:52,500 --> 00:33:55,000 programa he comunicado con 603 00:33:55,000 --> 00:33:56,599 ese objeto para que haga algo. 604 00:33:58,799 --> 00:34:00,700 Entre objetos, la forma que ahorrar es 605 00:34:00,700 --> 00:34:02,880 pasándose mensajes, ¿vale? Haciendo llamadas 606 00:34:02,880 --> 00:34:04,160 a métodos, sustancialmente. 607 00:34:04,660 --> 00:34:06,940 Llamando métodos de alumno 608 00:34:06,940 --> 00:34:08,659 de materia, materia de alumno, 609 00:34:09,199 --> 00:34:10,260 coche de taller, 610 00:34:10,639 --> 00:34:12,840 taller de... 611 00:34:12,840 --> 00:34:14,380 de... ¿cómo se llama? 612 00:34:14,559 --> 00:34:15,159 Mecánico. 613 00:34:16,840 --> 00:34:18,500 Clase de profesor, 614 00:34:18,599 --> 00:34:20,320 qué sé yo. Pues pueden 615 00:34:20,320 --> 00:34:22,260 comunicarse entre ellos llamándose métodos 616 00:34:22,260 --> 00:34:24,599 y pasándose parámetros, como hemos visto ayer 617 00:34:24,599 --> 00:34:26,440 que he pasado a los parámetros del asunto. 618 00:34:28,000 --> 00:34:29,480 Todas estas cosas las veremos. 619 00:34:29,579 --> 00:34:30,559 Esto es muy genérico. 620 00:34:31,039 --> 00:34:32,119 Ahora luego vemos un ejemplo. 621 00:34:33,639 --> 00:34:36,480 Cada clase va a ocuparse de lo que es su responsabilidad. 622 00:34:36,699 --> 00:34:39,420 El alumno se ocupa de alumno, la materia se ocupa de materia, 623 00:34:40,000 --> 00:34:43,300 la aula se ocupa de las cosas de la aula, etc. 624 00:34:45,139 --> 00:34:48,239 Por ejemplo, un coche puede ser una clase 625 00:34:48,239 --> 00:34:50,260 con unas características o con seriedad propia. 626 00:34:50,260 --> 00:34:52,440 Un coche puede tener como característica 627 00:34:52,440 --> 00:34:54,780 color, marca, modelo y matrícula. 628 00:34:55,460 --> 00:34:57,079 Entonces, todos los objetos 629 00:34:57,079 --> 00:34:59,219 que yo creo a partir de este molde 630 00:34:59,219 --> 00:35:00,460 serán coches 631 00:35:00,460 --> 00:35:02,320 y que tendrán como características 632 00:35:02,320 --> 00:35:04,719 el color, la marca, el modelo y la matrícula. 633 00:35:06,599 --> 00:35:06,719 ¿Sí? 634 00:35:07,000 --> 00:35:09,460 Yo puedo pillar un objeto, coche, cualquiera 635 00:35:09,460 --> 00:35:11,719 y saber que él tiene una matrícula. 636 00:35:11,719 --> 00:35:13,400 Porque es parte de su estructura. 637 00:35:15,179 --> 00:35:15,300 ¿Sí? 638 00:35:16,360 --> 00:35:17,800 Su funcionalidad puede ser 639 00:35:17,800 --> 00:35:18,860 desplazarse o parar. 640 00:35:19,219 --> 00:35:21,019 Entonces, yo puedo pillar un cualquier coche, 641 00:35:21,019 --> 00:35:27,260 es decir desplázate o pillaron cualquier cosa decir para y él lo hará porque puede hacerlo 642 00:35:28,820 --> 00:35:34,400 una clase de coches de responsabilidad de manejar todo aquello que tenga que ver con el coche un 643 00:35:34,400 --> 00:35:41,239 garage con muchos coches puede hacer uso de ellas o un conductor también entonces yo tendré la clase 644 00:35:41,239 --> 00:35:47,920 conductor y la clase taller que podrá utilizar los coches utilizar estas funcionalidades de aquí 645 00:35:47,920 --> 00:35:53,639 Por ejemplo, un conductor puede usar la funcionalidad desplazarse de un coche para moverse de Madrid a Barcelona. 646 00:36:09,349 --> 00:36:18,590 Cuando queramos que un coche se desplace en un garage, por ejemplo, tendremos que comunicarnos con el coche específico y dar la dirección a la que queremos que se desplace. 647 00:36:18,590 --> 00:36:34,309 Entonces, si yo he hecho un sistema de administración, de un, ¿cómo se dice?, management de coches en talleres, pues tengo una plaza libre en el taller de calle mayor, pues pillo este coche y le digo, desplázate a calle mayor. 648 00:36:34,650 --> 00:36:37,809 Pues ahora el coche está en calle mayor y puede ir al taller de calle mayor. 649 00:36:38,829 --> 00:36:43,369 Allí no hay piezas, hay que moverlo a otro lado, pues le diré al coche, desplázate a otro lado. 650 00:36:44,789 --> 00:36:45,750 ¿Entendéis lo que quiero decir? 651 00:36:45,750 --> 00:36:59,639 estamos a un nivel más abstracto 652 00:36:59,639 --> 00:37:01,239 ¿vale? pero en un 653 00:37:01,239 --> 00:37:02,440 contexto de 654 00:37:02,440 --> 00:37:05,420 no front-end, o sea, no que veas 655 00:37:05,420 --> 00:37:07,400 el monigote, ma back-end 656 00:37:07,400 --> 00:37:09,440 del proyecto, o sea, del juego 657 00:37:09,440 --> 00:37:11,880 en el que tú tienes que 658 00:37:11,880 --> 00:37:15,500 ¿cómo se dice? modelizar 659 00:37:15,500 --> 00:37:17,599 que tu player 660 00:37:17,599 --> 00:37:19,039 está en esta zona 661 00:37:19,039 --> 00:37:21,599 y que se toca este sitio 662 00:37:21,599 --> 00:37:23,679 pasa algo, pues eso sería 663 00:37:23,679 --> 00:37:25,199 una clase 664 00:37:25,199 --> 00:37:27,460 jugador, con dentro a lo mejor 665 00:37:27,460 --> 00:37:29,400 unas coordinadas para saber dónde está 666 00:37:29,400 --> 00:37:31,280 y en base a dónde está en esas 667 00:37:31,280 --> 00:37:33,219 coordinadas le dices, uy mira, ha pisado 668 00:37:33,219 --> 00:37:35,320 una trampa, o mira, uuuh, está 669 00:37:35,320 --> 00:37:37,059 salvo, o... no sé. 670 00:37:38,119 --> 00:37:39,159 Pero sí, 671 00:37:39,480 --> 00:37:41,659 un juego, o sea, un jugador 672 00:37:41,659 --> 00:37:43,519 dentro de un juego, de un 673 00:37:43,519 --> 00:37:45,440 programa que podemos hacer nosotros, se puede 674 00:37:45,440 --> 00:37:47,739 modelizar con un... 675 00:37:47,739 --> 00:37:49,119 Es más, normalmente 676 00:37:49,119 --> 00:37:51,579 tú, lo que creas 677 00:37:51,579 --> 00:37:53,280 es una entidad 678 00:37:53,280 --> 00:37:55,840 genérica que tiene puntos de vida 679 00:37:55,840 --> 00:37:57,400 y tienes punto daño 680 00:37:57,400 --> 00:37:59,579 y tienes velocidad de ataque 681 00:37:59,579 --> 00:38:01,659 luego a partir de esta entidad 682 00:38:01,659 --> 00:38:03,420 creas tanto los monstruos como 683 00:38:03,420 --> 00:38:04,460 los jugadores 684 00:38:04,460 --> 00:38:07,360 tienen la misma cosa 685 00:38:07,360 --> 00:38:09,800 solo que los jugadores también tendrán inventario 686 00:38:09,800 --> 00:38:11,420 entonces tienen todos los objetos de inventario 687 00:38:11,420 --> 00:38:17,619 clases 688 00:38:17,619 --> 00:38:20,139 una clase es lo que 689 00:38:20,139 --> 00:38:21,840 en el lenguaje de programación 690 00:38:21,840 --> 00:38:24,179 nos va a permitir definir o construir 691 00:38:24,179 --> 00:38:26,099 uno o varios objetos, ¿vale? 692 00:38:26,400 --> 00:38:28,519 La clase es la definición general 693 00:38:28,519 --> 00:38:30,199 de los objetos. Los objetos son 694 00:38:30,199 --> 00:38:31,679 instancias de una clase. 695 00:38:32,619 --> 00:38:34,199 Podemos decir que son moldes 696 00:38:34,199 --> 00:38:36,659 para construir objetos. Estos moldes 697 00:38:36,659 --> 00:38:38,440 tienen que ser escritos, programados 698 00:38:38,440 --> 00:38:40,820 y cada molde va a tener unas características. 699 00:38:41,400 --> 00:38:42,159 Un nombre, 700 00:38:42,760 --> 00:38:44,519 atributos y métodos. 701 00:38:45,000 --> 00:38:46,440 Entonces, cuando yo creo una clase, 702 00:38:46,900 --> 00:38:47,960 le doy un nombre, 703 00:38:48,500 --> 00:38:50,440 PublicClassAlumno. 704 00:38:51,420 --> 00:38:52,280 Esta clase es 705 00:38:52,280 --> 00:38:53,639 alumno, ¿vale? 706 00:38:54,179 --> 00:39:06,280 Tendrá unos atributos, el nombre, el apellido, el DNI, el NIA, las materias, el curso, lo que me interese. 707 00:39:07,179 --> 00:39:15,559 Y luego los métodos, lo que puede hacer, estudiar, darse de alta en una materia, hacer un examen. 708 00:39:15,559 --> 00:39:26,440 por ejemplo, la clase Persona se define en un fichero que tiene el mismo nombre de extensión, 709 00:39:26,440 --> 00:39:27,440 .java. 710 00:39:27,440 --> 00:39:34,059 Porque la clase Persona nosotros la haremos en el fichero Persona.java, esto lo sabemos 711 00:39:34,059 --> 00:39:35,059 desde el principio. 712 00:39:35,059 --> 00:39:42,380 La palabra reservada class define una clase, definimos los atributos, los datos relevantes 713 00:39:42,380 --> 00:39:43,380 y los métodos. 714 00:39:43,380 --> 00:39:46,539 Por ejemplo, vosotros no habéis visto todavía UML. 715 00:39:47,599 --> 00:39:49,039 Es el Modeling Language. 716 00:39:49,300 --> 00:39:52,579 Lo veréis en el entorno de desarrollo. 717 00:39:53,920 --> 00:39:56,599 Pero en UML se define así. 718 00:39:56,800 --> 00:40:00,039 Hay como cajitas, hay un diagrama que se llama el diagrama de clases 719 00:40:00,039 --> 00:40:02,519 que te permite definir las clases. 720 00:40:02,920 --> 00:40:07,420 Es un documento que te pueden dar y tú dices, vale, a partir de aquí, pues creo la clase. 721 00:40:07,420 --> 00:40:09,099 Esta es una clase de una persona. 722 00:40:09,099 --> 00:40:11,159 tiene como atributos 723 00:40:11,159 --> 00:40:13,059 el nombre que es un string 724 00:40:13,059 --> 00:40:15,039 y la edad que es un int, estas son las cosas 725 00:40:15,039 --> 00:40:16,619 que me interesan de esta persona 726 00:40:16,619 --> 00:40:19,420 y luego tiene un método escribir 727 00:40:19,420 --> 00:40:21,480 que no recibe ningún parámetro 728 00:40:21,480 --> 00:40:23,440 y que no devuelve ningún parámetro 729 00:40:23,440 --> 00:40:24,940 por lo tanto es un procedimiento 730 00:40:24,940 --> 00:40:26,099 no es una función 731 00:40:26,099 --> 00:40:28,559 y que hará algo 732 00:40:28,559 --> 00:40:30,760 escribir a lo mejor escribe hola soy 733 00:40:30,760 --> 00:40:32,980 su nombre y tengo 734 00:40:32,980 --> 00:40:33,860 su edad 735 00:40:33,860 --> 00:40:34,900 ¿vale? 736 00:40:36,000 --> 00:40:38,019 ¿cómo se traduce esto 737 00:40:38,019 --> 00:40:39,320 en Java 738 00:40:39,320 --> 00:40:42,420 tenemos public class persona 739 00:40:42,420 --> 00:40:44,059 esto es persona 740 00:40:44,059 --> 00:40:48,480 la P mayúscula, la primera letra 741 00:40:48,480 --> 00:40:50,280 mayúscula siempre lo hemos hecho, esto va 742 00:40:50,280 --> 00:40:51,980 en el fichero persona.java 743 00:40:51,980 --> 00:40:54,480 luego abro llaves 744 00:40:54,480 --> 00:40:56,440 y fijaos, fuera 745 00:40:56,440 --> 00:40:58,659 del main, fuera de cualquier 746 00:40:58,659 --> 00:41:00,659 otro método 747 00:41:00,659 --> 00:41:02,420 estoy dentro 748 00:41:02,420 --> 00:41:03,820 del bloque public class 749 00:41:03,820 --> 00:41:06,500 donde no hemos escrito nunca, si os acordáis 750 00:41:06,500 --> 00:41:08,699 la primera vez y yo decía, aquí no escribimos nunca 751 00:41:08,699 --> 00:41:10,739 por un rato, luego escribiremos aquí también. 752 00:41:11,239 --> 00:41:12,860 ¿Vale? Pues pongo 753 00:41:12,860 --> 00:41:15,000 una serie de variables 754 00:41:15,000 --> 00:41:16,579 que serán los 755 00:41:16,579 --> 00:41:18,039 atributos de esta persona. 756 00:41:19,139 --> 00:41:20,300 Pregunta para vosotros. 757 00:41:20,780 --> 00:41:22,699 ¿Cuál es el ámbito de estas variables? 758 00:41:26,960 --> 00:41:28,320 La clase persona. 759 00:41:28,320 --> 00:41:30,280 Es decir, que todos los 760 00:41:30,280 --> 00:41:32,199 métodos de la clase persona 761 00:41:32,199 --> 00:41:34,440 podrán acceder a estas variables. 762 00:41:35,699 --> 00:41:38,239 Son variables que son compartidas 763 00:41:38,239 --> 00:41:42,300 por todos los métodos. Todos los métodos pueden acceder al nombre y todos los métodos 764 00:41:42,300 --> 00:41:46,079 pueden acceder a la edad. Son características 765 00:41:46,079 --> 00:41:50,300 propias de lo que luego será el objeto. Cuando yo creeré el objeto 766 00:41:50,300 --> 00:41:52,900 tendré que instanciar el nombre y la edad. 767 00:41:55,460 --> 00:41:59,460 Y luego tengo, Pablo, y que voy a describir, que es este método de aquí. 768 00:42:00,480 --> 00:42:03,780 ¿Veis que vacío no recibe ningún parámetro? 769 00:42:04,480 --> 00:42:06,820 Aquí no tiene, en las paréntesis no tiene nada. 770 00:42:06,820 --> 00:42:08,500 y devuelve nada. 771 00:42:09,079 --> 00:42:09,960 Por lo tanto, voy. 772 00:42:11,260 --> 00:42:13,599 Fijaos que no está el static. 773 00:42:15,880 --> 00:42:16,059 ¿Vale? 774 00:42:16,139 --> 00:42:19,019 Porque esto es un método del objeto. 775 00:42:19,900 --> 00:42:22,079 Cuando los métodos son de los objetos, 776 00:42:22,420 --> 00:42:23,800 no tienen el static. 777 00:42:25,739 --> 00:42:26,980 Y luego, si quiero, 778 00:42:27,280 --> 00:42:29,460 porque una clase puede no tener main, 779 00:42:29,719 --> 00:42:30,380 lo veremos, 780 00:42:31,000 --> 00:42:33,699 pues le puedo poner un main para probar esta clase. 781 00:42:34,159 --> 00:42:36,699 Si yo quiero aquí crear un objeto persona 782 00:42:36,699 --> 00:42:37,820 y hacerle hacer algo, 783 00:42:37,820 --> 00:42:42,320 pues entonces me creo un main, como lo hemos creado, y aquí dentro haré lo que tengo que 784 00:42:42,320 --> 00:42:46,940 hacer para crear este main. Crear una persona, hacer que salude, escribir algo, etcétera. 785 00:42:49,940 --> 00:42:55,320 Pero lo que me interesa es que cuando yo quiero crear alumno, public class alumno, 786 00:42:55,320 --> 00:43:01,940 que tenía alumno dentro, tenía public string nombre, public int edad, y tendrá un public 787 00:43:01,940 --> 00:43:07,900 materia, con corchete, porque será un array de materia, ¿vale? 788 00:43:08,559 --> 00:43:09,260 Punto y coma. 789 00:43:09,400 --> 00:43:11,099 Fijaos que no se instancian. 790 00:43:11,659 --> 00:43:14,320 Yo no he puesto aquí public string nombre Estefano, 791 00:43:14,880 --> 00:43:16,579 porque este es el molde general. 792 00:43:16,820 --> 00:43:17,840 Tú tendrás un nombre. 793 00:43:18,539 --> 00:43:19,380 ¿Cuál es este nombre? 794 00:43:19,480 --> 00:43:19,940 No lo sé. 795 00:43:19,940 --> 00:43:22,840 Cuando creerás una persona, le pondrás cómo se llama. 796 00:43:23,039 --> 00:43:25,679 Cuando creerás un alumno, le pondrás cómo se llama el alumno. 797 00:43:27,139 --> 00:43:27,619 ¿Entienden? 798 00:43:29,460 --> 00:43:31,460 Y luego, ¿qué hacía el alumno? 799 00:43:31,460 --> 00:43:38,539 el alumno estudiaba, tendré public void estudiar. Si quiero que estudie un libro concreto, 800 00:43:38,539 --> 00:43:50,019 tendré public void estudiar libro entre paréntesis libro n, libro l. Lo haremos estas cosas, ¿vale? 801 00:43:50,019 --> 00:43:58,559 El clases en un archivo solo puede haber una clase public, ¿vale? Public class persona 802 00:43:58,559 --> 00:44:00,559 está en persona.java y solo puede 803 00:44:00,559 --> 00:44:02,639 haber esta public class, pero en el 804 00:44:02,639 --> 00:44:04,460 mismo archivo puede haber otras clases 805 00:44:04,460 --> 00:44:05,519 que no sean public. 806 00:44:06,219 --> 00:44:08,460 Por ahora no, en un futuro ya 807 00:44:08,460 --> 00:44:10,340 los pondremos. Entonces yo puedo hacer 808 00:44:10,340 --> 00:44:12,420 public class alumno 809 00:44:12,420 --> 00:44:14,539 y luego más abajo poner class materia. 810 00:44:15,440 --> 00:44:16,519 No es pública. 811 00:44:16,679 --> 00:44:17,139 ¿Qué quiere decir? 812 00:44:19,179 --> 00:44:20,300 Puede haber otras 813 00:44:20,300 --> 00:44:22,619 contenidas, pero no accesible desde el exterior. 814 00:44:23,400 --> 00:44:24,480 ¿Vale? Puede haber private 815 00:44:24,480 --> 00:44:26,519 class materia, quiere decir que solo 816 00:44:26,519 --> 00:44:28,480 desde dentro de esa clase se 817 00:44:28,480 --> 00:44:29,420 puede acceder a las demás. 818 00:44:30,719 --> 00:44:32,440 Los atributos de una clase 819 00:44:32,440 --> 00:44:34,679 son propios de la misma 820 00:44:34,679 --> 00:44:36,840 y se podrán consultar internamente 821 00:44:36,840 --> 00:44:38,460 por parte de los métodos de la misma. 822 00:44:39,039 --> 00:44:40,619 O sea, como los atributos tienen 823 00:44:40,619 --> 00:44:42,300 como ámbito toda la clase, 824 00:44:42,800 --> 00:44:44,639 desde los métodos se pueden acceder, 825 00:44:44,719 --> 00:44:46,380 se pueden ver, se pueden andar a trabajar. 826 00:44:46,880 --> 00:44:48,460 ¿Vale? Hay sistemas 827 00:44:48,460 --> 00:44:50,579 para que esto sea más difícil 828 00:44:50,579 --> 00:44:52,460 o más fácil, para que a lo mejor yo quiero 829 00:44:52,460 --> 00:44:54,300 que se vean desde dentro de todo el 830 00:44:54,300 --> 00:44:56,219 package o desde dentro de todo el proyecto 831 00:44:56,219 --> 00:44:58,400 o cosas por el estilo, ya veremos cómo se va. 832 00:44:58,480 --> 00:45:08,739 ¿Qué es un objeto? Un objeto es un elemento concreto de la clase definida, una instancia 833 00:45:08,739 --> 00:45:17,659 de la clase. Yo tengo el molde, pongo la arena y hago nuestra llamada. En el momento de la 834 00:45:17,659 --> 00:45:24,059 ejecución, no antes, se crean los objetos de la clase para los cuales hemos escrito 835 00:45:24,059 --> 00:45:28,480 código. La clase es la idea general. Cuando luego ejecuto el programa, el programa se 836 00:45:28,480 --> 00:45:30,639 para decir, ahora créame tres alumnos, el primero 837 00:45:30,639 --> 00:45:32,440 se llama Paco, vale, perfecto, he creado 838 00:45:32,440 --> 00:45:34,500 el alumno, objeto con nombre 839 00:45:34,500 --> 00:45:36,579 Paco, ahora créame otra persona 840 00:45:36,579 --> 00:45:38,460 que se llame no sé qué, pues me 841 00:45:38,460 --> 00:45:40,420 crea el objeto persona que se llama no sé qué 842 00:45:40,420 --> 00:45:42,340 etcétera, etcétera, ¿sí? 843 00:45:44,199 --> 00:45:44,679 Cada 844 00:45:44,679 --> 00:45:46,380 objeto tendrá un nombre para 845 00:45:46,380 --> 00:45:48,360 poder utilizarlo en nuestro programa, vale 846 00:45:48,360 --> 00:45:50,320 una referencia, como una 847 00:45:50,320 --> 00:45:52,500 las variables que hemos creado 848 00:45:52,500 --> 00:45:54,380 nosotros, cuando yo creo string x 849 00:45:54,380 --> 00:45:56,199 estoy creando un objeto string 850 00:45:56,199 --> 00:45:58,300 y su nombre para poder manipularlo 851 00:45:58,300 --> 00:46:00,119 es este x. Cuando creo string 852 00:46:00,119 --> 00:46:02,000 nombre, estoy creando un objeto string 853 00:46:02,000 --> 00:46:03,780 que tiene como nombre para poder 854 00:46:03,780 --> 00:46:06,039 manipularlo, nombre. ¿Entienden? 855 00:46:07,440 --> 00:46:08,360 Un objeto 856 00:46:08,360 --> 00:46:10,019 va a tener estas cosas. Va a tener 857 00:46:10,019 --> 00:46:11,840 una identidad. O sea, 858 00:46:12,159 --> 00:46:14,000 cada objeto es distinto 859 00:46:14,000 --> 00:46:16,000 de otros objetos. Si yo tengo un objeto 860 00:46:16,000 --> 00:46:17,739 persona aquí y otro objeto persona aquí, 861 00:46:18,119 --> 00:46:20,059 si cambio el nombre a la persona 1, 862 00:46:20,679 --> 00:46:22,059 la persona 2 no se ve 863 00:46:22,059 --> 00:46:22,559 afectada. 864 00:46:24,000 --> 00:46:25,940 Si yo tengo Stefano y Lidia, 865 00:46:26,500 --> 00:46:27,980 dos personas, y ahora 866 00:46:27,980 --> 00:46:29,760 a Estéfano le cambio el nombre en 867 00:46:29,760 --> 00:46:31,480 Superestéfano, pues 868 00:46:31,480 --> 00:46:33,820 a Superestéfano le he cambiado el nombre, pero 869 00:46:33,820 --> 00:46:36,059 Lidia se sigue llamando Lidia. Son dos objetos 870 00:46:36,059 --> 00:46:37,340 individuales. 871 00:46:38,420 --> 00:46:38,480 ¿Sí? 872 00:46:40,019 --> 00:46:41,639 Atributos. El estado. 873 00:46:41,860 --> 00:46:43,980 O sea, cada objeto, mientras que 874 00:46:43,980 --> 00:46:46,019 en la clase yo he definido cuáles 875 00:46:46,019 --> 00:46:47,579 son las características, 876 00:46:48,000 --> 00:46:50,380 el objeto las tendrá estanciadas. 877 00:46:50,860 --> 00:46:51,659 Si os acordáis aquí, 878 00:46:52,159 --> 00:46:53,960 nosotros hemos dicho, la persona tiene 879 00:46:53,960 --> 00:46:56,119 nombre y edad. Pero no te digo 880 00:46:56,119 --> 00:46:57,880 qué nombre y qué edad. Ahora, 881 00:46:57,980 --> 00:47:03,059 Un objeto sí te tengo que decir qué nombre tiene y sí te tengo que decir qué edad tiene. 882 00:47:03,679 --> 00:47:08,719 La clase no tiene un valor específico para el nombre, pero un objeto sí. 883 00:47:13,210 --> 00:47:14,710 Como antes los triángulos. 884 00:47:15,329 --> 00:47:22,869 Todos los triángulos tienen tres lados, pero un objeto concreto de triángulo tendrá lado 1, 1, lado 2, 2 y lado 3, 7. 885 00:47:23,769 --> 00:47:25,010 Creo que no es un triángulo. 886 00:47:25,929 --> 00:47:26,449 ¿Sí? 887 00:47:28,559 --> 00:47:32,659 Y luego tendrá unos métodos, ¿vale? O sea, lo que puede hacer. 888 00:47:33,099 --> 00:47:35,059 Una vez que tengo a la persona, puedo decir, persona, saluda. 889 00:47:35,519 --> 00:47:37,840 Y Estefano le dirá, hola, soy Super Estefano, que es lo que me duele. 890 00:47:42,119 --> 00:47:43,380 Aquí os lo he explicado un poquito. 891 00:47:43,599 --> 00:47:46,500 La identidad, los objetos se crean en una memoria RAM, 892 00:47:46,940 --> 00:47:50,559 en una zona de la memoria que se llama el chip. 893 00:47:51,380 --> 00:47:52,360 Lo hemos visto alguna vez. 894 00:47:53,800 --> 00:47:57,539 Su identidad se definirá con un valor de referencia único del objeto. 895 00:47:57,539 --> 00:47:58,719 ¿Os acordáis qué es esto? 896 00:48:08,690 --> 00:48:09,090 Efectivamente. 897 00:48:09,090 --> 00:48:17,190 ¿Os acordáis que cuando decíamos que entre objetos no se puede hacer el punto equals porque lo que está comparando no es el objeto mismo? 898 00:48:17,429 --> 00:48:22,409 No, no se puede usar el igual igual porque no está comparando lo que es el objeto, sino la referencia. 899 00:48:22,809 --> 00:48:26,090 Porque nosotros los objetos los trabajamos por referencia. 900 00:48:27,250 --> 00:48:36,429 Cuando yo creo un nuevo objeto, lo que obtengo es un puntador, una dirección, un lugar de la memoria donde allí está este objeto. 901 00:48:37,150 --> 00:48:37,789 ¿Vale? 902 00:48:38,550 --> 00:48:43,550 Entonces, esta referencia me guía a donde empieza en la memoria este objeto. 903 00:48:43,670 --> 00:48:47,869 Es un código especial que ya vas a utilizar para decir, 904 00:48:47,989 --> 00:48:48,769 ¿estos son objetos o no? 905 00:48:48,829 --> 00:48:52,989 ¿Sarán distintos el objeto persona Estefano y el objeto persona Lidia? 906 00:48:53,289 --> 00:48:55,670 Pues son dos objetos distintos. 907 00:48:55,789 --> 00:48:58,130 Y tendrán referencia, número de referencia distinto. 908 00:48:58,250 --> 00:49:00,650 Por eso, si yo hago igual, igual, pues me dirán que no. 909 00:49:01,289 --> 00:49:03,670 Hasta si yo quiero una persona que se llama Estefano 910 00:49:03,670 --> 00:49:06,269 y otra persona que se llama Estefano, 911 00:49:06,269 --> 00:49:08,929 estos son dos objetos distintos 912 00:49:08,929 --> 00:49:11,590 y si cambio 913 00:49:11,590 --> 00:49:12,849 el primer Stéfano 914 00:49:12,849 --> 00:49:15,489 a otro nombre, el segundo Stéfano 915 00:49:15,489 --> 00:49:16,750 se queda Stéfano 916 00:49:16,750 --> 00:49:19,309 ¿sí? volveremos 917 00:49:19,309 --> 00:49:19,929 sobre este tema 918 00:49:19,929 --> 00:49:22,949 el Java no se trabaja con DCM de memoria 919 00:49:22,949 --> 00:49:24,050 gracias, ¿vale? 920 00:49:24,190 --> 00:49:27,190 se usa un concepto más abstracto 921 00:49:27,190 --> 00:49:29,349 ¿vale? el nombre simple es lo que identifica un objeto 922 00:49:29,349 --> 00:49:31,230 en algunos lenguajes de programación 923 00:49:31,230 --> 00:49:32,650 como CE o C++ 924 00:49:32,650 --> 00:49:34,349 C++ se orienta a objetos 925 00:49:34,349 --> 00:49:36,730 tenéis que manipular la memoria. 926 00:49:37,150 --> 00:49:38,909 Cuando creáis un objeto, 927 00:49:39,110 --> 00:49:40,829 le tenéis que decir, oye, mira, reserva 928 00:49:40,829 --> 00:49:42,730 este trozo de memoria y allí 929 00:49:42,730 --> 00:49:44,710 me creas el objeto. Y que 930 00:49:44,710 --> 00:49:46,550 cuando ya no lo usáis, le tenéis que decir, 931 00:49:46,690 --> 00:49:48,369 oye, mira, destruyeme esa memoria 932 00:49:48,369 --> 00:49:49,369 y líberala. 933 00:49:51,170 --> 00:49:51,610 ¿Sí? 934 00:49:52,670 --> 00:49:54,650 En Java, gracias, pues 935 00:49:54,650 --> 00:49:56,650 esto no lo hacemos. Yo quiero un objeto, 936 00:49:56,730 --> 00:49:58,429 digo, hazme un objeto. Y es la 937 00:49:58,429 --> 00:50:00,710 Java Virtual Machine que se encarga de encontrar 938 00:50:00,710 --> 00:50:01,789 dónde está 939 00:50:01,789 --> 00:50:23,780 Entonces, decíamos, aquí en Java yo no me refiero a construir un trozo de memoria y luego trabajo con esta memoria, 940 00:50:23,780 --> 00:50:28,199 como en C++ o cosas por el estilo, sino que yo tengo una referencia al bloque de memoria, 941 00:50:28,199 --> 00:50:30,219 no sé cuánta memoria ha gastado, no sé 942 00:50:30,219 --> 00:50:32,219 cómo gestiona la memoria, no sé 943 00:50:32,219 --> 00:50:34,079 cuándo destruye o cuándo crea un objeto, 944 00:50:34,400 --> 00:50:36,219 pues que lo haga él. Lo hace 945 00:50:36,219 --> 00:50:37,679 la Java de Tornosheet. Yo 946 00:50:37,679 --> 00:50:40,179 paso de eso. Yo simplemente utilizaré 947 00:50:40,179 --> 00:50:42,199 una referencia a ese objeto y él me lo 948 00:50:42,199 --> 00:50:44,460 hace encontrar todo ya hecho. 949 00:50:45,539 --> 00:50:46,360 Un objeto 950 00:50:46,360 --> 00:50:48,179 es un valor que se puede asignar a 951 00:50:48,179 --> 00:50:50,039 una variable cuyo tipo es la clase. 952 00:50:50,420 --> 00:50:52,159 Entonces yo, un objeto string, 953 00:50:52,519 --> 00:50:54,179 la clase string, puedo crear un objeto 954 00:50:54,179 --> 00:50:56,000 que sea string x es igual 955 00:50:56,000 --> 00:50:58,340 a no sé qué. Si hago un alumno, 956 00:50:58,719 --> 00:51:00,099 puedo crear alumno 957 00:51:00,099 --> 00:51:02,059 mi primer alumno, es igual 958 00:51:02,059 --> 00:51:03,460 y creo un objeto alumno. 959 00:51:04,519 --> 00:51:06,519 Si quiero hacer una persona, puedo hacer persona 960 00:51:06,519 --> 00:51:08,599 mi persona, es igual 961 00:51:08,599 --> 00:51:10,079 como hacía 962 00:51:10,079 --> 00:51:12,699 las variables antes. Ahora haremos ejemplos. 963 00:51:13,199 --> 00:51:14,780 Si queremos 964 00:51:14,780 --> 00:51:16,599 crear un objeto tipo persona, 965 00:51:16,860 --> 00:51:17,840 podemos identificar 966 00:51:17,840 --> 00:51:19,559 persona alumno, por ejemplo. 967 00:51:22,059 --> 00:51:24,280 ¿Cuál es el nombre 968 00:51:24,280 --> 00:51:24,960 de esta variable? 969 00:51:24,960 --> 00:51:29,860 alumno, el tipo de esta variable 970 00:51:29,860 --> 00:51:31,579 persona 971 00:51:31,579 --> 00:51:33,380 el valor de esta variable 972 00:51:33,380 --> 00:51:35,840 todavía no lo sé 973 00:51:35,840 --> 00:51:36,800 no está estanciado 974 00:51:36,800 --> 00:51:39,880 he creado la variable, pero no hay 975 00:51:39,880 --> 00:51:40,539 dentro un objeto 976 00:51:40,539 --> 00:51:41,880 ¿sí? 977 00:51:49,460 --> 00:51:51,039 llego hasta aquí y me paro 978 00:51:51,039 --> 00:51:52,460 un momento, ¿vale? porque esto ya 979 00:51:52,460 --> 00:51:54,659 lo hemos hablado, entonces hemos dicho que 980 00:51:54,659 --> 00:51:56,860 siempre al final del objeto tenemos por un lado 981 00:51:56,860 --> 00:51:59,059 la identificación, por otro lado los atributos 982 00:51:59,059 --> 00:52:00,880 son las características que define 983 00:52:00,880 --> 00:52:01,860 un objeto, ¿vale? 984 00:52:02,219 --> 00:52:04,420 tiene una visibilidad 985 00:52:04,420 --> 00:52:06,119 ¿vale? este es el public 986 00:52:06,119 --> 00:52:08,179 private protected, es decir 987 00:52:08,179 --> 00:52:10,059 ¿dónde se ven estas variables? 988 00:52:10,519 --> 00:52:12,159 por ahora nosotros ponemos todo public 989 00:52:12,159 --> 00:52:14,000 y se ve por todos lados, pero 990 00:52:14,000 --> 00:52:16,099 luego más adelante empezaremos a cambiar 991 00:52:16,099 --> 00:52:18,239 un poquito esta visibilidad 992 00:52:18,239 --> 00:52:20,159 para proteger algunos datos 993 00:52:20,159 --> 00:52:22,219 algunos datos que tienen que ser 994 00:52:22,219 --> 00:52:24,280 importantes o 995 00:52:24,280 --> 00:52:25,599 controlados 996 00:52:25,599 --> 00:52:28,000 pues no quiero que alguien 997 00:52:28,000 --> 00:52:30,219 desde fuera de mi proyecto entre y diga 998 00:52:30,219 --> 00:52:32,599 cámbialo, entonces lo protejo, ¿vale? 999 00:52:32,940 --> 00:52:33,260 Lo veo. 1000 00:52:35,059 --> 00:52:36,679 Los tipos pueden ser 1001 00:52:36,679 --> 00:52:38,599 o primitivos, int, float, 1002 00:52:38,800 --> 00:52:40,159 cosas por el estilo, otra clase, 1003 00:52:40,420 --> 00:52:42,599 string, scanner, persona, 1004 00:52:42,820 --> 00:52:44,639 alumno, coche, triángulo, 1005 00:52:45,019 --> 00:52:45,880 etcétera, etcétera, 1006 00:52:46,420 --> 00:52:48,119 y el identificador de atributos, ¿vale? 1007 00:52:48,219 --> 00:52:48,940 Por ejemplo, 1008 00:52:51,280 --> 00:52:54,219 nombres de tipo string, que es una clase, 1009 00:52:54,460 --> 00:52:56,099 edades de tipo int, que es un tipo 1010 00:52:56,099 --> 00:52:57,599 primitivo, ¿vale? 1011 00:52:57,599 --> 00:52:59,659 Y el estado de un objeto 1012 00:52:59,659 --> 00:53:01,179 será definido para los valores. 1013 00:53:01,179 --> 00:53:02,840 yo hago una fotografía instantánea 1014 00:53:02,840 --> 00:53:05,000 en un cierto momento, miro los valores 1015 00:53:05,000 --> 00:53:07,239 de todos sus atributos, ese es su estado 1016 00:53:07,239 --> 00:53:09,000 en este momento la persona 1017 00:53:09,000 --> 00:53:11,159 Estefano se llama Estefano 1018 00:53:11,159 --> 00:53:13,099 y tiene edad 44 1019 00:53:13,099 --> 00:53:14,679 fotografía 1020 00:53:14,679 --> 00:53:17,300 si cambio algo, porque es el cumpleaños 1021 00:53:17,300 --> 00:53:18,820 por ejemplo 1022 00:53:18,820 --> 00:53:21,579 cambia desde 44, 43, 44 1023 00:53:21,579 --> 00:53:23,059 o lo que sea, pues 1024 00:53:23,059 --> 00:53:25,039 ahora ha cambiado su estado 1025 00:53:25,039 --> 00:53:26,280 ¿entiendes? 1026 00:53:27,840 --> 00:53:29,320 ¿y los métodos? 1027 00:53:29,320 --> 00:53:34,739 Pues los métodos son los servicios que proporciona este objeto, lo que puede hacer este objeto, ¿vale? 1028 00:53:35,179 --> 00:53:41,800 Pues el objeto, hemos dicho persona, puede saludar, el objeto alumno puede estudiar, el objeto coche puede desplazarse o pararse, etc. 1029 00:53:43,139 --> 00:53:53,719 Cada uno de estos servicios es un método, y un método tiene un nombre, unos parámetros que utiliza y un valor que se devuelve, que puede ser void. 1030 00:53:53,719 --> 00:53:57,019 cuando yo defino una funcionalidad 1031 00:53:57,019 --> 00:53:58,719 le digo, ¿cómo se llama esta funcionalidad? 1032 00:53:59,000 --> 00:54:00,000 cálculo a perímetro 1033 00:54:00,000 --> 00:54:02,380 si pilla o no parámetros 1034 00:54:02,380 --> 00:54:04,800 ¿vale? podría ser que le paso 1035 00:54:04,800 --> 00:54:06,739 los lados o que no le paso ningún lado 1036 00:54:06,739 --> 00:54:08,400 porque usa los atributos suyos 1037 00:54:08,400 --> 00:54:10,780 y luego si al final me devuelve 1038 00:54:10,780 --> 00:54:12,780 algo, por ejemplo, el cálculo a perímetro podría decir 1039 00:54:12,780 --> 00:54:14,719 me devuelves al final un int 1040 00:54:14,719 --> 00:54:16,000 porque hace la suma 1041 00:54:16,000 --> 00:54:18,539 de los lados y me lo devuelve 1042 00:54:18,539 --> 00:54:20,519 o un double o lo que sea 1043 00:54:20,519 --> 00:54:22,679 es importante 1044 00:54:22,679 --> 00:54:27,679 saber qué método implementó una clase, qué parámetros tiene que utilizar y qué devuelve, 1045 00:54:27,679 --> 00:54:32,639 ¿vale? Porque si no, no puede utilizar los métodos. No es importante cómo se hacen las cosas, 1046 00:54:32,639 --> 00:54:39,840 sino qué se puede hacer. Cuando yo te digo el alumno puede estudiar, ¿vale? A mí no me interesa 1047 00:54:39,840 --> 00:54:46,380 qué hace el método estudiar. Eso puede ser hasta que lo implemente otra persona. ¿Println vosotros 1048 00:54:46,380 --> 00:54:47,619 la habéis implementado. 1049 00:54:49,119 --> 00:54:50,400 No. Pero la habéis 1050 00:54:50,400 --> 00:54:52,119 usado. ¿Qué hace 1051 00:54:52,119 --> 00:54:54,260 Println? ¿Cómo se hace escribir en 1052 00:54:54,260 --> 00:54:57,420 pantalla? Ni idea. 1053 00:54:57,980 --> 00:54:58,599 Pero lo usáis. 1054 00:54:59,719 --> 00:55:01,380 Lo usáis porque sabéis que existe 1055 00:55:01,380 --> 00:55:03,519 Println y que pilla un determinado 1056 00:55:03,519 --> 00:55:04,639 parámetro, que es un string. 1057 00:55:05,519 --> 00:55:06,820 Sabéis cómo se usa, 1058 00:55:07,440 --> 00:55:09,199 cómo hace las cosas, no me interesa. 1059 00:55:10,219 --> 00:55:11,320 Mismo concepto. Hay un 1060 00:55:11,320 --> 00:55:13,539 mogollón de clases 1061 00:55:13,539 --> 00:55:15,099 y de objetos por ahí 1062 00:55:15,099 --> 00:55:17,739 y yo los puedo utilizar sin saber 1063 00:55:17,739 --> 00:55:19,880 cómo lo hacen las cosas por debajo. 1064 00:55:21,099 --> 00:55:21,199 ¿Sí? 1065 00:55:22,340 --> 00:55:24,039 Y esto me permite también reutilizar 1066 00:55:24,039 --> 00:55:25,039 el código, etcétera, etcétera. 1067 00:55:25,980 --> 00:55:26,659 Entonces ahora, 1068 00:55:27,800 --> 00:55:29,219 dispuesto a una breve pausa, 1069 00:55:29,760 --> 00:55:32,260 vamos a crear una clase. 1070 00:55:32,780 --> 00:55:33,840 ¿Sí? Una clase 1071 00:55:33,840 --> 00:55:35,920 persona. Y vamos a ver qué podemos 1072 00:55:35,920 --> 00:55:36,559 hacer con ella. 1073 00:55:37,440 --> 00:55:39,820 ¿Sí? Paro esto. 1074 00:55:41,340 --> 00:55:41,559 Vale. 1075 00:55:42,039 --> 00:55:43,159 Vamos a hacer 1076 00:55:43,159 --> 00:55:45,679 un poquito de práctica, ¿vale? 1077 00:55:45,679 --> 00:55:51,960 Para entender lo que hemos dicho hasta ahora en palabras abstractas, ¿vale? 1078 00:55:52,400 --> 00:55:59,860 Entonces, he creado un nuevo proyecto con objetos donde pondré los ejemplos, ¿vale? 1079 00:56:00,579 --> 00:56:05,039 Por favor, vamos a crear una nueva clase, ¿vale? 1080 00:56:05,159 --> 00:56:07,260 Y vamos a crear la clase Persona. 1081 00:56:11,360 --> 00:56:13,000 Esta es mi clase Persona, ¿vale? 1082 00:56:13,000 --> 00:56:15,360 ¿Qué me interesa de una persona? 1083 00:56:15,360 --> 00:56:18,099 ¿Cuáles son los atributos? 1084 00:56:18,260 --> 00:56:20,960 ¿Cuáles son las características principales de una persona? 1085 00:56:21,940 --> 00:56:23,599 Pues string, nombre. 1086 00:56:25,599 --> 00:56:28,460 Fijaos que aparece un colorín nuevo. 1087 00:56:29,000 --> 00:56:29,400 Azul. 1088 00:56:31,219 --> 00:56:32,760 Antes esto era negro. 1089 00:56:33,159 --> 00:56:38,099 No era como un marroncito, un color amarillento, una cosa del estilo. 1090 00:56:38,519 --> 00:56:39,519 Ahora es azul. 1091 00:56:39,639 --> 00:56:42,059 Cuando es un atributo, lo marca de azul. 1092 00:56:42,360 --> 00:56:42,880 ¿Vale? 1093 00:56:42,980 --> 00:56:44,500 Y fijaos dónde lo estoy escribiendo. 1094 00:56:44,500 --> 00:56:57,960 aquí no hay ningún main, e int edad. Me quedo aquí por ahora. Entonces, cada persona 1095 00:56:57,960 --> 00:57:06,840 que yo crearé tendrá un nombre o una edad. ¿Qué puede hacer una persona? Por ejemplo, 1096 00:57:06,840 --> 00:57:20,619 public void cumplirAños. ¿Qué hará la función cumplirAños? 1097 00:57:20,619 --> 00:57:28,280 Que cuando sea la fecha de la fecha de nacimiento, edad más uno, o algo así. 1098 00:57:28,280 --> 00:57:32,460 Vale, pero tú la llamarás el día de su cumpleaños. Hagámoslo sencillo. Entonces, ¿qué haré? 1099 00:57:32,460 --> 00:57:34,059 edad 1100 00:57:34,059 --> 00:57:36,019 más más 1101 00:57:36,019 --> 00:57:40,559 podría ser 1102 00:57:40,559 --> 00:57:42,059 que nosotros 1103 00:57:42,059 --> 00:57:44,559 cuando yo llamo cumplir años 1104 00:57:44,559 --> 00:57:45,960 quiera saber 1105 00:57:45,960 --> 00:57:47,659 cuál es la nueva edad 1106 00:57:47,659 --> 00:57:49,420 por lo tanto 1107 00:57:49,420 --> 00:57:52,840 podría decirle, oye mira, devuélveme un entero 1108 00:57:52,840 --> 00:57:54,840 haces edad más más 1109 00:57:54,840 --> 00:57:56,420 y devuelves 1110 00:57:56,420 --> 00:57:57,480 edad 1111 00:57:57,480 --> 00:58:02,280 ahora es una función, cuando yo llamo cumpleaños 1112 00:58:02,280 --> 00:58:03,239 cumplir años 1113 00:58:03,239 --> 00:58:05,900 Pues él pillará la edad actual de esta persona 1114 00:58:05,900 --> 00:58:07,079 Le hace cumplir el año 1115 00:58:07,079 --> 00:58:08,380 Entonces le pone un más más 1116 00:58:08,380 --> 00:58:11,360 Y luego me devuelve la nueva edad 1117 00:58:11,360 --> 00:58:13,840 Para que yo pueda usarla o no 1118 00:58:13,840 --> 00:58:15,719 ¿Sí? 1119 00:58:16,579 --> 00:58:17,420 Muy bien 1120 00:58:17,420 --> 00:58:19,780 ¿Qué más puede hacer una persona? 1121 00:58:23,230 --> 00:58:23,869 Saludar 1122 00:58:23,869 --> 00:58:25,130 En un momento, ¿eh? 1123 00:58:26,050 --> 00:58:26,610 Public 1124 00:58:26,610 --> 00:58:30,230 El saludar 1125 00:58:30,230 --> 00:58:31,349 Yo quiero que la persona diga 1126 00:58:31,349 --> 00:58:33,210 Ahora me llamo su nombre 1127 00:58:33,210 --> 00:58:34,949 Y tengo no sé cuántos años 1128 00:58:34,949 --> 00:58:35,590 ¿Vale? 1129 00:58:35,769 --> 00:59:01,320 ¿Devuelve algo? No. Voy. Saludad. Si, so. Hola. Soy. Más nombre. Más. Y tengo. Más edad. Más años. 1130 00:59:01,320 --> 00:59:05,230 fijaos que este nombre, este dad 1131 00:59:05,230 --> 00:59:06,030 son azules 1132 00:59:06,030 --> 00:59:08,090 como estos 1133 00:59:08,090 --> 00:59:11,090 fijaos que si yo aquí hago 1134 00:59:11,090 --> 00:59:11,630 int 1135 00:59:11,630 --> 00:59:13,550 num 1136 00:59:13,550 --> 00:59:16,570 es igual a 3 1137 00:59:16,570 --> 00:59:18,170 lo veis que esto no es azul 1138 00:59:18,170 --> 00:59:21,650 esta es una variable local, solo existe aquí dentro 1139 00:59:21,650 --> 00:59:23,550 mientras esta es una variable 1140 00:59:23,550 --> 00:59:24,710 del objeto 1141 00:59:24,710 --> 00:59:26,369 existe en toda la versión 1142 00:59:26,369 --> 00:59:28,130 ¿si? 1143 00:59:29,250 --> 00:59:30,289 ¿lo veis la diferencia, no? 1144 00:59:31,630 --> 00:59:31,929 bueno 1145 00:59:31,929 --> 00:59:39,289 una persona pero puede saludar no en general no a una persona concreta a 1146 00:59:39,289 --> 00:59:54,750 alguien vale entonces yo tendré public void saludar string nombre del otro esto 1147 00:59:54,750 --> 01:00:02,170 es un método que me pilla una variable un parámetro yo te voy a decir oye 1148 01:00:02,170 --> 01:00:11,090 persona saluda a Juan. Entonces él dirá, hola Juan, soy mi nombre y tengo mi edad. 1149 01:00:11,090 --> 01:00:41,909 Aquí se han aparecido, pero aquí pondrá, hola, más nombre del otro. Ahora, ¿os he 1150 01:00:41,909 --> 01:00:44,829 dicho yo qué persona es esta? ¿Quién es? 1151 01:00:45,309 --> 01:00:48,030 ¿No? ¿Os he dicho quién es el otro 1152 01:00:48,030 --> 01:00:50,690 que saluda? ¿Veis que aquí es todo 1153 01:00:50,690 --> 01:00:53,909 genérico? No sé. Yo sé 1154 01:00:53,909 --> 01:00:56,650 cómo lo va a hacer. Sé qué va a hacer. 1155 01:00:57,570 --> 01:00:59,929 Pero no sé con qué datos 1156 01:00:59,929 --> 01:01:08,389 exactamente va a hacer. Luego volveremos aquí. 1157 01:01:08,389 --> 01:01:11,010 ¿Vale? Imaginámonos que yo 1158 01:01:11,010 --> 01:01:14,429 quiera saber la edad sin cumplir los años. 1159 01:01:14,929 --> 01:01:15,690 ¿Puedo? 1160 01:01:15,690 --> 01:01:19,070 nosotros por ahora esto lo hemos dicho que son public 1161 01:01:19,070 --> 01:01:19,409 ¿vale? 1162 01:01:21,769 --> 01:01:23,170 luego veremos que hay 1163 01:01:23,170 --> 01:01:27,429 hagamos uno 1164 01:01:27,429 --> 01:01:29,190 public 1165 01:01:29,190 --> 01:01:31,389 int 1166 01:01:31,389 --> 01:01:33,530 get edad 1167 01:01:33,530 --> 01:01:34,949 normalmente 1168 01:01:34,949 --> 01:01:38,090 aquellos métodos que lo que hacen 1169 01:01:38,090 --> 01:01:39,989 es devolver uno de los 1170 01:01:39,989 --> 01:01:41,869 atributos, se llaman 1171 01:01:41,869 --> 01:01:43,929 getters, son get 1172 01:01:43,929 --> 01:01:45,889 y el atributo, get 1173 01:01:45,889 --> 01:01:53,010 nombre me dará nombre, get edad me dará edad. Entonces tengo get edad, que lo que hace es 1174 01:01:53,010 --> 01:02:03,980 return, edad. Fijaos que esto no escribe nada en pantalla, solo que cuando lo llamo yo tendré 1175 01:02:03,980 --> 01:02:12,260 de vuelta la edad de esta persona en este momento. Y luego existen los sectors. Los 1176 01:02:12,260 --> 01:02:18,000 sectors son para modificar la cosa. Por ejemplo, si yo quiero cambiar mi nombre, pues tendré 1177 01:02:18,000 --> 01:02:36,610 public void set nombre que lo que hará es nombre es igual algo a nuevo nombre como le paso nuevo 1178 01:02:36,610 --> 01:02:56,239 nombre string nuevo nombre si entonces yo me echo mi clase a mi clase persona lo que hace es tener 1179 01:02:56,239 --> 01:02:58,179 un nombre, una edad. Todas las personas 1180 01:02:58,179 --> 01:03:00,500 tendrán un nombre y edad. ¿Qué pueden hacer todas las personas? 1181 01:03:00,659 --> 01:03:01,820 Pueden cumplir el año, 1182 01:03:02,300 --> 01:03:04,199 pueden saludar, pueden saludar 1183 01:03:04,199 --> 01:03:06,340 a otra persona, a otro nombre 1184 01:03:06,340 --> 01:03:08,360 que le doy yo, o pueden 1185 01:03:08,360 --> 01:03:10,599 saber, puedo saber su edad 1186 01:03:10,599 --> 01:03:12,139 o puedo cambiar su nombre. 1187 01:03:13,780 --> 01:03:14,300 ¿Vale? 1188 01:03:15,199 --> 01:03:15,719 Perfecto. 1189 01:03:17,159 --> 01:03:18,280 Ahora podría hacer un main 1190 01:03:18,280 --> 01:03:19,800 y usar esta persona. 1191 01:03:20,960 --> 01:03:22,199 ¿Vale? O usar varias personas. 1192 01:03:22,880 --> 01:03:24,059 El main lo puedo hacer aquí, 1193 01:03:24,059 --> 01:03:26,280 Pero para cambiar un poco las cosas 1194 01:03:26,280 --> 01:03:28,980 Lo voy a hacer en otra clase 1195 01:03:28,980 --> 01:03:29,400 ¿Vale? 1196 01:03:29,420 --> 01:03:30,500 Para ver qué se puede hacer 1197 01:03:30,500 --> 01:03:32,659 Antes 1198 01:03:32,659 --> 01:03:35,840 A ver si se me ha olvidado algo 1199 01:03:35,840 --> 01:03:39,090 Ahora tenemos 1200 01:03:39,090 --> 01:03:41,969 Vamos a hacer antes la otra clase 1201 01:03:41,969 --> 01:03:44,449 Y luego nos crea una clase 1202 01:03:44,449 --> 01:03:46,349 Lo podría hacer aquí 1203 01:03:46,349 --> 01:03:46,570 ¿Vale? 1204 01:03:46,630 --> 01:03:47,929 Pero para que veáis 1205 01:03:47,929 --> 01:03:50,409 Luego a lo mejor lo muevo aquí 1206 01:03:50,409 --> 01:03:53,050 La clase que será main persona 1207 01:03:53,050 --> 01:03:56,389 que es la clase que va a usar 1208 01:03:56,389 --> 01:03:57,010 la persona. 1209 01:03:58,269 --> 01:03:59,710 Esta sí tiene un main. 1210 01:04:00,190 --> 01:04:02,150 Mi punto de acceso de mi proyecto 1211 01:04:02,150 --> 01:04:03,489 empezará aquí. 1212 01:04:05,010 --> 01:04:06,230 Fijaos que persona 1213 01:04:06,230 --> 01:04:07,889 no tiene un main. 1214 01:04:08,829 --> 01:04:10,329 Persona por sí misma no se puede 1215 01:04:10,329 --> 01:04:11,389 ejecutar, no hace nada. 1216 01:04:12,909 --> 01:04:14,090 Persona me 1217 01:04:14,090 --> 01:04:16,289 representa una persona, pero por sí 1218 01:04:16,289 --> 01:04:17,750 misma no hace nada. Será 1219 01:04:17,750 --> 01:04:19,989 otro proyecto que creará personas 1220 01:04:19,989 --> 01:04:22,050 y las hará interactuar entre ellas. 1221 01:04:23,050 --> 01:04:28,550 Entonces, la pregunta ahora es, vale, ¿y cómo creo personas? 1222 01:04:28,969 --> 01:04:35,889 Yo sé que puedo hacer persona, persona1, como variable. 1223 01:04:36,530 --> 01:04:39,730 Yo puedo crear una variable de tipo persona. 1224 01:04:40,369 --> 01:04:42,429 Pero, ¿cómo le meto dentro a una persona? 1225 01:04:43,869 --> 01:04:44,469 Vamos a ver. 1226 01:04:45,849 --> 01:04:49,469 Para crear un objeto se necesita un constructor. 1227 01:04:51,110 --> 01:04:51,329 ¿Vale? 1228 01:04:51,329 --> 01:04:54,289 Un constructor es un método especial 1229 01:04:54,289 --> 01:04:56,269 ¿Vale? 1230 01:04:56,710 --> 01:04:58,590 Que no devuelve nada 1231 01:04:58,590 --> 01:05:00,690 Pero no en el sentido que devuelve void 1232 01:05:00,690 --> 01:05:02,650 Que tampoco devuelve void 1233 01:05:02,650 --> 01:05:03,409 ¿Qué devuelve? 1234 01:05:07,039 --> 01:05:09,139 Devuelve un objeto de esa clase 1235 01:05:09,139 --> 01:05:11,260 ¿Vale? 1236 01:05:12,480 --> 01:05:13,119 Entonces 1237 01:05:13,119 --> 01:05:16,559 Para crear 1238 01:05:16,559 --> 01:05:19,139 A ver, aquí se me perdió algo 1239 01:05:19,139 --> 01:05:21,119 Además una clase proporciona un método especial 1240 01:05:21,119 --> 01:05:22,099 Que son constructores 1241 01:05:22,099 --> 01:05:25,119 Que son los que se encargan de crear nuevos objetos de esa clase 1242 01:05:25,119 --> 01:05:28,679 Si tiene que llamar exactamente igual que la clase. 1243 01:05:29,139 --> 01:05:29,260 ¿Vale? 1244 01:05:29,420 --> 01:05:32,300 O sea, el constructor de persona se llamará persona. 1245 01:05:32,639 --> 01:05:32,980 Muy bien. 1246 01:05:33,659 --> 01:05:36,039 Los métodos constructores no devuelven nada. 1247 01:05:36,039 --> 01:05:39,300 Porque en realidad devuelven un objeto de esa clase. 1248 01:05:39,480 --> 01:05:41,380 Entonces, como solo devuelve un objeto de esa clase, 1249 01:05:41,480 --> 01:05:42,920 pues no se le pone cosa que devuelve. 1250 01:05:43,840 --> 01:05:46,460 Se ejecutan al momento de la creación del objeto. 1251 01:05:46,719 --> 01:05:48,599 Cuando tú haces la creación del objeto, 1252 01:05:48,840 --> 01:05:50,480 pues se ejecuta ese constructor. 1253 01:05:51,460 --> 01:05:54,059 Para usar un constructor, tengo que usar el comando new. 1254 01:05:55,119 --> 01:06:01,239 Y el código contenido de los constructores se suele usar para inicializar los atributos del objeto. 1255 01:06:02,860 --> 01:06:04,699 A ver si quitas de pronto el ejemplo. 1256 01:06:06,199 --> 01:06:13,000 Si no defino ningún constructor, o sea, actualmente yo en la clase persona no he definido ningún constructor, ¿justo? 1257 01:06:13,480 --> 01:06:16,019 Pues existe un constructor por defecto. 1258 01:06:16,840 --> 01:06:21,360 El constructor por defecto inicializa los atributos como pueda. 1259 01:06:21,360 --> 01:06:30,519 O sea, int lo inicializa a cero, las variables numéricas en general a cero, los booleanos 1260 01:06:30,519 --> 01:06:42,780 a falso, los objetos a nulo, que es un comodín para decir que no existe ningún objeto. 1261 01:06:42,780 --> 01:06:47,739 Si defino yo un constructor, si digo, vale, no, espera, no uses el constructor por defecto, 1262 01:06:47,739 --> 01:06:53,360 un constructor mío propio, puede ser inautomático y el constructor por defecto deja de existir. 1263 01:06:53,360 --> 01:06:59,500 Y si yo quiero un constructor por defecto igual antes, tengo que construir también eso. Ahora lo 1264 01:06:59,500 --> 01:07:04,980 veremos. Se pueden definir distintos constructores. Por ejemplo, un constructor de una persona que 1265 01:07:04,980 --> 01:07:10,059 pide nombre y edad y otro constructor de una persona que solo pide el nombre y que asuma 1266 01:07:10,059 --> 01:07:15,360 que la edad sea cero. Nace un nuevo niño, creo la persona, le doy el nombre y se da el cero. 1267 01:07:17,739 --> 01:07:29,739 Ejemplo. Public Persona, lo veis aquí. Con String Enter. Y aquí define. Y esto 1268 01:07:29,739 --> 01:07:35,000 a veces solo con el nombre. Vamos a crearlo aquí. En vez de darle un ejemplo, lo creamos 1269 01:07:35,000 --> 01:07:48,400 ahí. Entonces, me voy a crear una persona ahora. New Persona. Y ya está. Esto está 1270 01:07:48,400 --> 01:07:53,800 creando el constructor por defecto de persona porque porque aquí no hay ningún 1271 01:07:53,800 --> 01:07:59,440 constructor todavía no lo ha creado entonces por defecto él me ha creado una 1272 01:07:59,440 --> 01:08:04,699 persona así y ahora le puedo decir persona 1 1273 01:08:04,699 --> 01:08:22,239 saluda quien me escribirá esto en pantalla 1274 01:08:22,239 --> 01:08:24,859 Hola, soy nada y tengo nada años. 1275 01:08:26,479 --> 01:08:28,420 A no ser que si no está... 1276 01:08:28,420 --> 01:08:29,159 ¿Otras opciones? 1277 01:08:31,899 --> 01:08:32,319 A ver. 1278 01:08:32,899 --> 01:08:34,119 Hola, nul y cero. 1279 01:08:35,359 --> 01:08:38,479 Hola, soy nul y tengo cero años. 1280 01:08:40,180 --> 01:08:43,479 Porque int es cero. 1281 01:08:43,920 --> 01:08:45,659 El valor por defecto de int es cero. 1282 01:08:46,119 --> 01:08:49,899 El valor por defecto de string, siendo string un objeto, es nulo. 1283 01:08:50,979 --> 01:08:52,920 Por lo tanto, me debería escribir. 1284 01:08:56,279 --> 01:08:58,500 Hola, soy Nuli y tengo cero años. 1285 01:09:02,489 --> 01:09:04,590 Ahora, hagámosles cumplir años. 1286 01:09:05,369 --> 01:09:08,369 Persona 1, cumplir años. 1287 01:09:11,579 --> 01:09:12,699 Y ahora saluda otra vez. 1288 01:09:13,319 --> 01:09:15,220 Persona 1, punto saludar. 1289 01:09:21,659 --> 01:09:22,779 En principio tiene cero años. 1290 01:09:23,340 --> 01:09:24,520 Aquí ha cumplido dos años. 1291 01:09:24,520 --> 01:09:25,859 Y ahora dice que tiene uno. 1292 01:09:27,520 --> 01:09:28,220 ¿Qué le cuesta? 1293 01:09:30,819 --> 01:09:31,659 Un boli. 1294 01:09:32,479 --> 01:09:32,899 Sí. 1295 01:09:32,899 --> 01:09:44,340 Vale, ahora, como cumplir años no hace nada, podríamos poner que en cumpleaños, cuando lo hace, escribe también 1296 01:09:44,340 --> 01:09:50,340 Cumpleaños feliz 1297 01:09:50,340 --> 01:09:57,979 Vale, en italiano si aprendéis 1298 01:09:57,979 --> 01:10:01,800 Santiago, riarte 1299 01:10:10,609 --> 01:10:12,609 Sí, es lo más bonito. 1300 01:10:12,609 --> 01:10:15,609 ¿Sí? 1301 01:10:22,609 --> 01:10:25,609 Vale, entonces, si os fijáis, he modificado el cumplir años, 1302 01:10:25,609 --> 01:10:29,609 y ahora cuando llamo a cumplir años, me escribe aquí Tantia Curiatez. 1303 01:10:29,609 --> 01:10:32,609 ¿Sí? 1304 01:10:32,609 --> 01:10:34,609 Vale. 1305 01:10:34,609 --> 01:10:39,609 Ahora, pero crear una persona así que se llame null, 1306 01:10:39,609 --> 01:10:42,369 vamos a crear nosotros 1307 01:10:42,369 --> 01:10:44,489 un constructor 1308 01:10:44,489 --> 01:10:45,750 vale, entonces decimos 1309 01:10:45,750 --> 01:10:47,329 cuando creo una persona 1310 01:10:47,329 --> 01:10:49,510 normalmente yo lo pongo justo después 1311 01:10:49,510 --> 01:10:52,229 de los atributos, los constructores 1312 01:10:52,229 --> 01:10:54,310 atributo, constructores, métodos 1313 01:10:54,310 --> 01:10:56,210 vale, entonces yo hago 1314 01:10:56,210 --> 01:10:58,090 public persona 1315 01:10:58,090 --> 01:10:59,810 que parámetros 1316 01:10:59,810 --> 01:11:00,550 pilla 1317 01:11:00,550 --> 01:11:03,630 mi constructor 1318 01:11:03,630 --> 01:11:06,109 tendrá un string 1319 01:11:06,109 --> 01:11:07,270 nombre 1320 01:11:07,270 --> 01:11:10,090 e un int 1321 01:11:10,090 --> 01:11:11,390 edad. 1322 01:11:13,029 --> 01:11:14,829 ¿No veis que se llaman igual 1323 01:11:14,829 --> 01:11:16,449 pero este es azul 1324 01:11:16,449 --> 01:11:17,470 y esto es 1325 01:11:17,470 --> 01:11:18,970 es 1326 01:11:18,970 --> 01:11:22,050 no sé qué color es este. 1327 01:11:22,050 --> 01:11:22,810 Marlón. 1328 01:11:24,010 --> 01:11:25,170 Por ahora hagámoslo así. 1329 01:11:27,529 --> 01:11:27,649 ¿Vale? 1330 01:11:28,630 --> 01:11:30,729 Entonces, ahora voy aquí 1331 01:11:30,729 --> 01:11:31,930 y le digo 1332 01:11:31,930 --> 01:11:35,250 nombre es igual a n 1333 01:11:35,250 --> 01:11:37,010 edad 1334 01:11:37,010 --> 01:11:38,029 es igual a n. 1335 01:11:38,710 --> 01:11:46,930 esto que está haciendo me crea una persona a esta persona el constructor me dice cuando 1336 01:11:46,930 --> 01:11:53,350 creas una persona tienes que pasarme un string un entero el string que me has pasado lo usaré 1337 01:11:53,350 --> 01:12:04,829 como nombre el entero que más pasado lo usaré como ya ahora si yo guardo esto me 1338 01:12:04,829 --> 01:12:09,829 persona se enfada. ¿Por qué se enfada? 1339 01:12:09,829 --> 01:12:14,829 Porque el constructor por defecto deja de existir. 1340 01:12:14,829 --> 01:12:19,829 Porque el constructor por defecto ha dejado de existir. El constructor por defecto, que es 1341 01:12:19,829 --> 01:12:24,829 el que no tiene parámetros, ahora ya no existe. Entonces no puedo crear 1342 01:12:24,829 --> 01:12:33,859 una persona usando el constructor sin parámetros. ¿Entiendes? 1343 01:12:33,859 --> 01:12:45,859 ¿Y si yo lo quisiera? Si yo lo quisiera, debería aquí, explícitamente, crearme un public Persona sin parámetros, 1344 01:12:45,859 --> 01:12:54,619 que ahora pondrá nombre anónimo y edad 0. 1345 01:12:54,619 --> 01:13:04,020 Ahora vuelve a no quejarse, pero ahora no me dirá soy null, me dirá soy anónimo, 1346 01:13:04,020 --> 01:13:18,989 Porque yo aquí la he, si ahora lo lanzo, veis, me dice soy anónimo, porque ha usado el constructor sin parámetros. 1347 01:13:19,689 --> 01:13:25,750 Entonces ha usado este constructor de aquí y entonces ha puesto nombre anónimo edad cero. 1348 01:13:27,449 --> 01:13:28,050 ¿Sí? 1349 01:13:29,430 --> 01:13:33,630 ¿Y cómo hago desde aquí para usar este otro constructor en vez? 1350 01:13:33,630 --> 01:13:56,689 Hola, soy Sara, tengo 34 años 1351 01:13:56,689 --> 01:13:57,850 Anteaburete 1352 01:13:57,850 --> 01:14:00,289 Hola, soy Sara, tengo 35 años 1353 01:14:00,289 --> 01:14:05,489 Vamos a ver un momento el consultor, por favor 1354 01:14:05,489 --> 01:14:09,500 Ah, bueno 1355 01:14:09,500 --> 01:14:16,130 Vale, muy bien 1356 01:14:16,130 --> 01:14:19,170 Hagamos saludar a Sara 1357 01:14:19,170 --> 01:14:20,510 Otra persona 1358 01:14:20,510 --> 01:14:23,520 ¿A quién saludamos? 1359 01:14:28,439 --> 01:14:29,079 Paco 1360 01:14:29,079 --> 01:14:37,470 Hola, Paco, soy Sara 1361 01:14:37,470 --> 01:14:39,789 ahora no estoy usando 1362 01:14:39,789 --> 01:14:42,050 este método de aquí 1363 01:14:42,050 --> 01:14:45,640 pero estoy usando 1364 01:14:45,640 --> 01:14:47,199 este método de aquí 1365 01:14:47,199 --> 01:14:50,119 porque al haberme pasado un string 1366 01:14:50,119 --> 01:14:51,619 ahora 1367 01:14:51,619 --> 01:14:53,159 uso esto 1368 01:14:53,159 --> 01:14:54,979 ¿se entiende? 1369 01:15:07,689 --> 01:15:07,930 ¿sí? 1370 01:15:14,619 --> 01:15:15,420 persona 1371 01:15:15,420 --> 01:15:17,579 persona dos 1372 01:15:17,579 --> 01:15:19,500 es igual 1373 01:15:19,500 --> 01:15:21,300 a new persona 1374 01:15:21,300 --> 01:15:33,210 persona uno 1375 01:15:33,210 --> 01:15:35,810 punto saludar 1376 01:15:35,810 --> 01:15:43,609 ¿cómo puedo hacer 1377 01:15:43,609 --> 01:15:44,850 que persona uno 1378 01:15:44,850 --> 01:15:46,729 salude a persona dos? 1379 01:15:55,880 --> 01:15:57,060 se enfada 1380 01:15:57,060 --> 01:15:57,680 ¿por qué? 1381 01:16:00,439 --> 01:16:02,619 ¿qué tipo tiene persona dos? 1382 01:16:05,149 --> 01:16:07,510 tipo persona 1383 01:16:07,510 --> 01:16:09,470 ¿y qué necesito poner yo 1384 01:16:09,470 --> 01:16:10,449 dentro de saludar? 1385 01:16:10,449 --> 01:16:13,069 El nombre sería entonces el punto... 1386 01:16:13,069 --> 01:16:15,810 Entonces, ¿cómo puedo yo...? 1387 01:16:15,810 --> 01:16:20,449 Probámoslo. 1388 01:16:20,550 --> 01:16:22,350 Para ver el caos, ¿vale? 1389 01:16:22,890 --> 01:16:24,569 Le digo, ah, claro, haz así. 1390 01:16:26,029 --> 01:16:27,210 Y no funciona. 1391 01:16:29,210 --> 01:16:29,989 El caos. 1392 01:16:32,229 --> 01:16:32,829 ¡Caos! 1393 01:16:35,949 --> 01:16:38,489 Está poniendo la referencia al objeto. 1394 01:16:38,930 --> 01:16:40,149 ¿Qué es esto? 1395 01:16:40,149 --> 01:16:40,189 ¿Qué es esto? 1396 01:16:43,840 --> 01:16:45,840 Mi paquete. 1397 01:16:46,840 --> 01:16:48,840 ¿Qué es esto? 1398 01:16:52,840 --> 01:16:54,840 La clase. 1399 01:16:54,840 --> 01:16:56,840 ¿Qué es esta cosa aquí? 1400 01:17:08,840 --> 01:17:10,840 Esta sería, 1401 01:17:10,840 --> 01:17:12,979 no es exactamente, pero la referencia 1402 01:17:12,979 --> 01:17:13,760 del objeto 1403 01:17:13,760 --> 01:17:16,859 cuando yo no sé 1404 01:17:16,859 --> 01:17:18,359 cómo se escribe un objeto 1405 01:17:18,359 --> 01:17:19,979 y él no lo sabe porque no se lo he dicho 1406 01:17:19,979 --> 01:17:22,520 pues me escribe, soy un objeto 1407 01:17:22,520 --> 01:17:24,159 de este tipo, et 1408 01:17:24,159 --> 01:17:26,680 a la posición 1409 01:17:26,680 --> 01:17:28,260 de memoria, ahí está 1410 01:17:28,260 --> 01:17:34,000 por lo tanto, no, esto no me vale 1411 01:17:34,000 --> 01:17:36,300 ¿cómo podría hacer? 1412 01:17:37,500 --> 01:17:38,020 string 1413 01:17:38,020 --> 01:17:41,039 punto nombre 1414 01:17:41,039 --> 01:17:47,199 Esto es 1415 01:17:47,199 --> 01:17:49,500 Array.length 1416 01:17:49,500 --> 01:17:52,119 ¿Recordáis? 1417 01:17:53,619 --> 01:17:53,880 ¿Vale? 1418 01:17:54,380 --> 01:17:57,260 El length es un atributo 1419 01:17:57,260 --> 01:17:59,520 De la clase de los arrays 1420 01:17:59,520 --> 01:18:01,619 Aquí yo 1421 01:18:01,619 --> 01:18:03,680 Si tengo un objeto de persona 2 1422 01:18:03,680 --> 01:18:05,159 Puedo decir 1423 01:18:05,159 --> 01:18:07,140 Oye, mira, accede 1424 01:18:07,140 --> 01:18:09,020 A su campo nombre 1425 01:18:09,020 --> 01:18:11,680 Entonces ahora 1426 01:18:11,680 --> 01:18:19,840 Me dice, hola anónimo, soy Sara. ¿Por qué? Porque el pobre persona 2 es un anónimo. 1427 01:18:22,250 --> 01:18:34,550 Ahora modificamos estas cosas. Persona 2, punto, set nombre, ¿cuál tema es difícil? 1428 01:18:34,869 --> 01:18:35,510 ¿Cómo? Pepe. 1429 01:18:35,510 --> 01:18:43,840 Hola, Pepe, soy Sara 1430 01:18:43,840 --> 01:18:45,439 y tengo 34 años 1431 01:18:45,439 --> 01:18:49,420 ¿Lo veis? 1432 01:18:52,020 --> 01:18:52,260 ¿Sí? 1433 01:18:58,109 --> 01:19:00,890 Cuando inicializas un objeto 1434 01:19:00,890 --> 01:19:03,090 para saber cuál es la diferencia entre uno y otro 1435 01:19:03,090 --> 01:19:04,909 sí o sí cogen 1436 01:19:04,909 --> 01:19:06,130 todos los atributos 1437 01:19:06,130 --> 01:19:08,529 no hay opción en la que pille 1438 01:19:08,529 --> 01:19:09,529 solo uno y otro 1439 01:19:09,529 --> 01:19:12,189 No se comparan los objetos 1440 01:19:12,189 --> 01:19:14,609 nos sabemos comparar objetos 1441 01:19:14,609 --> 01:19:17,329 si pero lo digo porque cuando creas 1442 01:19:17,329 --> 01:19:19,090 va a pillar todos los atributos 1443 01:19:19,090 --> 01:19:19,529 si o si 1444 01:19:19,529 --> 01:19:21,829 eso no hay opción 1445 01:19:21,829 --> 01:19:25,310 a ver, tú puedes pillar 1446 01:19:25,310 --> 01:19:27,109 nosotros hemos hecho uno 1447 01:19:27,109 --> 01:19:28,470 con dos atributos 1448 01:19:28,470 --> 01:19:30,050 y hemos hecho uno con 1449 01:19:30,050 --> 01:19:31,829 ninguno 1450 01:19:31,829 --> 01:19:34,810 podemos hacer uno con un atributo solo 1451 01:19:34,810 --> 01:19:36,810 y el hecho es que tú tienes que 1452 01:19:36,810 --> 01:19:38,989 inicializar las variables de alguna forma 1453 01:19:38,989 --> 01:19:41,229 si no las inicializas se inicializarán 1454 01:19:41,229 --> 01:19:43,050 a su valor por defecto. 1455 01:19:43,069 --> 01:19:43,970 Claro, pero si o si 1456 01:19:43,970 --> 01:19:44,789 si la pilla 1457 01:19:44,789 --> 01:19:45,369 el nuevo objeto 1458 01:19:45,369 --> 01:19:46,630 que se vaya a instanciar 1459 01:19:46,630 --> 01:19:47,270 si o si pilla 1460 01:19:47,270 --> 01:19:48,130 todos los atributos 1461 01:19:48,130 --> 01:19:49,310 entonces solo que no se... 1462 01:19:49,310 --> 01:19:50,489 Tendrá esos atributos 1463 01:19:50,489 --> 01:19:51,529 solo que no se van a instanciar. 1464 01:19:53,029 --> 01:19:54,489 Los objetos anul 1465 01:19:54,489 --> 01:19:55,710 en los tipos primitivos 1466 01:19:55,710 --> 01:19:56,909 a su valor primitivo. 1467 01:19:57,590 --> 01:19:58,069 Claro, y eso es 1468 01:19:58,069 --> 01:19:58,649 la diferencia 1469 01:19:58,649 --> 01:19:59,270 entre uno y otro. 1470 01:19:59,649 --> 01:20:00,069 Valores, 1471 01:20:00,170 --> 01:20:00,729 sus atributos, 1472 01:20:00,909 --> 01:20:01,890 los valores de los atributos 1473 01:20:01,890 --> 01:20:02,390 que se van a instanciar. 1474 01:20:05,569 --> 01:20:06,350 Puede no estar 1475 01:20:06,350 --> 01:20:07,609 también en los mismos valores. 1476 01:20:07,609 --> 01:20:08,770 Lo que lo diferencia 1477 01:20:08,770 --> 01:20:10,369 es que están en posiciones distintas. 1478 01:20:10,449 --> 01:20:11,069 Si yo creo 1479 01:20:11,069 --> 01:20:13,390 si yo creo persona 2 así 1480 01:20:13,390 --> 01:20:15,649 y ahora creo persona 3 así 1481 01:20:15,649 --> 01:20:19,539 estos tienen exactamente 1482 01:20:19,539 --> 01:20:20,159 los mismos valores 1483 01:20:20,159 --> 01:20:22,819 pero no son el mismo objeto 1484 01:20:22,819 --> 01:20:25,699 mirad 1485 01:20:25,699 --> 01:20:29,909 persona 2 1486 01:20:29,909 --> 01:20:32,109 punto saluda 1487 01:20:32,109 --> 01:20:38,250 y también 1488 01:20:38,250 --> 01:20:39,210 persona 3 1489 01:20:39,210 --> 01:20:47,289 estos dos señores 1490 01:20:47,289 --> 01:20:50,680 son lo mismo 1491 01:20:50,680 --> 01:20:53,060 si 1492 01:20:53,060 --> 01:20:54,279 ah bueno 1493 01:20:54,279 --> 01:21:01,850 SISO, persona 2, igual, igual, persona 3. 1494 01:21:06,739 --> 01:21:07,420 H. 1495 01:21:11,350 --> 01:21:16,529 Son dos copias de un objeto por los mismos valores. 1496 01:21:17,550 --> 01:21:18,710 Pero no son el mismo objeto. 1497 01:21:19,229 --> 01:21:23,529 De hecho, si yo ahora hago cumplir los años a persona 2, 1498 01:21:29,090 --> 01:21:34,340 y vuelvo a escribir los dos, no son el mismo objeto. 1499 01:21:34,340 --> 01:21:36,000 porque 1500 01:21:36,000 --> 01:21:38,699 esto 1501 01:21:38,699 --> 01:21:40,479 ha cumplido años 1502 01:21:40,479 --> 01:21:41,880 pero el otro no 1503 01:21:41,880 --> 01:21:44,960 si ahora le digo 1504 01:21:44,960 --> 01:21:55,140 escríbeme 1505 01:21:55,140 --> 01:21:57,140 esa cosa malvada que no sabemos 1506 01:21:57,140 --> 01:21:57,739 que es 1507 01:21:57,739 --> 01:21:59,739 dos y tres 1508 01:21:59,739 --> 01:22:02,520 veis que esto 1509 01:22:02,520 --> 01:22:04,079 es una persona 1510 01:22:04,079 --> 01:22:06,300 en esta locación 1511 01:22:06,300 --> 01:22:08,579 y esta es una persona en una locación 1512 01:22:08,579 --> 01:22:09,439 completamente distinta 1513 01:22:09,439 --> 01:22:13,000 son dos objetos distintos 1514 01:22:13,000 --> 01:22:14,500 ahora 1515 01:22:14,500 --> 01:22:16,939 persona 1516 01:22:16,939 --> 01:22:19,180 P4 es igual 1517 01:22:19,180 --> 01:22:20,239 a persona 2 1518 01:22:20,239 --> 01:22:27,500 y ahora aquí escribo 1519 01:22:27,500 --> 01:22:29,000 si hizo 1520 01:22:29,000 --> 01:22:30,680 P4 1521 01:22:30,680 --> 01:22:37,550 veis que esto y esto son iguales 1522 01:22:37,550 --> 01:22:41,890 estos son dos referencias 1523 01:22:41,890 --> 01:22:43,010 al mismo objeto 1524 01:22:43,010 --> 01:22:45,630 si ahora 1525 01:22:45,630 --> 01:22:59,489 Ahora yo hago persona dos punto cumpleaños y luego digo me imprimes, saludas, P4 punto 1526 01:22:59,489 --> 01:23:15,930 saludar. Veis que persona cuatro ha cumplido años. Pero en ningún lado he hecho P4 punto 1527 01:23:15,930 --> 01:23:30,479 cumpleaños. Pero es que esto y esto son lo mismo. De hecho... 1528 01:23:30,479 --> 01:23:37,670 ¿Proyecta? ¿Truque? ¿Cuál es el concepto? Sí, con muchos conceptos, ¿eh? 1529 01:23:44,920 --> 01:23:50,180 Pregunta para vosotros, ¿vale? Entonces, nosotros hemos hecho un método saludar 1530 01:23:50,180 --> 01:23:56,779 que no tiene nada y que dice, hola, soy no sé qué, tengo edad, ¿vale? Un método que 1531 01:23:56,779 --> 01:24:08,289 dice, oye mira, te doy un string y tú escribes lo que sea. ¿Puedo saludar a una persona? ¿Cómo haría? 1532 01:24:15,479 --> 01:24:19,939 Quiero un método saludar que salude a una persona, no a un string, no a un nada. 1533 01:24:24,310 --> 01:24:27,329 Voluntarios. No todos a la vez, por favor. 1534 01:24:27,329 --> 01:24:36,909 Quiero un método saludar 1535 01:24:36,909 --> 01:24:38,750 Pero que no salude una string 1536 01:24:38,750 --> 01:24:39,770 Salude una persona 1537 01:24:39,770 --> 01:24:40,670 ¿Cómo lo hago? 1538 01:24:43,619 --> 01:24:45,260 Saludar persona 1539 01:24:45,260 --> 01:24:47,020 Dictamente 1540 01:24:47,020 --> 01:24:50,279 Public void 1541 01:24:50,279 --> 01:24:52,399 Saludar 1542 01:24:52,399 --> 01:24:56,180 Persona 1543 01:24:56,180 --> 01:24:58,979 Persona 1544 01:24:58,979 --> 01:25:04,159 ¿Y qué hago? 1545 01:25:04,439 --> 01:25:04,979 Sí, son. 1546 01:25:05,539 --> 01:25:05,899 ¿Y yo? 1547 01:25:07,039 --> 01:25:07,640 Hola. 1548 01:25:08,159 --> 01:25:08,579 Hola. 1549 01:25:09,279 --> 01:25:09,840 Más. 1550 01:25:10,119 --> 01:25:10,760 Persona. 1551 01:25:12,920 --> 01:25:13,399 Más. 1552 01:25:16,470 --> 01:25:16,829 Más. 1553 01:25:17,069 --> 01:25:18,130 O sea, bien, sí, más, bien, sí. 1554 01:25:18,409 --> 01:25:18,569 No. 1555 01:25:19,869 --> 01:25:21,949 Si pongan así, me pone el código real. 1556 01:25:22,149 --> 01:25:23,409 Ah, punto, nombre. 1557 01:25:25,720 --> 01:25:26,060 Bien, sí. 1558 01:25:26,760 --> 01:25:27,619 Bien, son. 1559 01:25:36,550 --> 01:25:42,029 Entonces, ahora lo que voy a hacer es acceder a la persona que me has pasado como parámetro, ¿no? 1560 01:25:42,029 --> 01:25:44,449 y acceder allí 1561 01:25:44,449 --> 01:25:45,810 a ese objeto 1562 01:25:45,810 --> 01:25:47,649 a su campo nombre 1563 01:25:47,649 --> 01:25:49,489 y lo pongo aquí 1564 01:25:49,489 --> 01:25:52,029 entonces ahora 1565 01:25:52,029 --> 01:25:53,409 esto me permite 1566 01:25:53,409 --> 01:25:55,829 en el lado 1567 01:25:55,829 --> 01:25:58,409 aquí, limpio un poco 1568 01:25:58,409 --> 01:25:59,069 porque si no 1569 01:25:59,069 --> 01:26:01,829 aquí tengo tres personas 1570 01:26:01,829 --> 01:26:04,149 ¿vale? dámosles nombres 1571 01:26:04,149 --> 01:26:05,949 distintos, este es Paco 1572 01:26:05,949 --> 01:26:08,289 que tiene 18 años 1573 01:26:08,289 --> 01:26:10,590 esto es 1574 01:26:10,590 --> 01:26:34,140 Entonces, ahora puede hacer que persona 1, punto, saludar, persona 2. 1575 01:26:39,489 --> 01:26:44,369 Ahora, ¿cuál de estos tres métodos estará utilizando? 1576 01:26:44,750 --> 01:26:49,750 ¿Veis? Esto funciona. Hola, Paco. Soy Sara. Son los dos espacios. 1577 01:26:49,750 --> 01:26:58,510 ¿Cuál de estos tres métodos está utilizando? ¿Esto, esto o esto? 1578 01:26:58,510 --> 01:27:00,510 El último. 1579 01:27:00,510 --> 01:27:04,510 ¿No veis que los tres métodos se llaman igual? 1580 01:27:04,510 --> 01:27:07,510 ¿En qué se diferencian? 1581 01:27:07,510 --> 01:27:09,510 En los parámetros que le estás pasando. 1582 01:27:09,510 --> 01:27:12,510 En los parámetros que le estás pasando. 1583 01:27:12,510 --> 01:27:15,449 Esto se llama sobrecarga del método. 1584 01:27:16,670 --> 01:27:19,289 Un método se puede sobrecargar. 1585 01:27:23,850 --> 01:27:25,489 Overload, en inglés. 1586 01:27:26,430 --> 01:27:30,970 Overload, que no es overwrite, que es otra cosa que veremos más adelante. 1587 01:27:31,810 --> 01:27:33,010 ¿Qué quiere decir? 1588 01:27:34,750 --> 01:27:40,350 Los métodos se pueden diferenciar si su firma es distinta. 1589 01:27:40,350 --> 01:27:48,470 La firma de un método es su nombre y los tipos de parámetros. 1590 01:27:49,310 --> 01:27:52,869 O sea, la firma de esto es saludar void. 1591 01:27:53,670 --> 01:27:56,250 La firma de esto es saludar string. 1592 01:27:57,010 --> 01:27:59,229 La firma de esto es saludar persona. 1593 01:28:00,569 --> 01:28:18,819 Yo no puedo poner otro método que tenga la misma firma de un método ya existente. 1594 01:28:18,819 --> 01:28:20,180 Pero se llaman distinto. 1595 01:28:21,100 --> 01:28:22,640 Encima no cuenta cómo se llaman. 1596 01:28:22,819 --> 01:28:23,659 Conta el tipo. 1597 01:28:24,439 --> 01:28:26,479 La firma de esto es saludar de string. 1598 01:28:27,000 --> 01:28:29,000 La firma de esto es saludar de string. 1599 01:28:31,029 --> 01:28:36,409 Pero, si yo cambio esto y pongo int repetición, 1600 01:28:37,630 --> 01:28:41,810 pues ya la firma de esto aquí es saludar de string, int. 1601 01:28:42,350 --> 01:28:43,850 Por lo tanto, es distinto de los demás. 1602 01:28:44,569 --> 01:28:46,250 ¿Cómo sé cuál de esto uso? 1603 01:28:46,789 --> 01:28:48,449 Dependiendo de los parámetros que me pasas. 1604 01:28:48,449 --> 01:28:49,569 No me pasas parámetros. 1605 01:28:49,569 --> 01:28:51,710 uso el que no tiene parámetro 1606 01:28:51,710 --> 01:28:53,930 me pasa solo un string, uso esto 1607 01:28:53,930 --> 01:28:56,329 me pasa un string de un int, uso esto 1608 01:28:56,329 --> 01:28:58,229 me pasa una persona, uso esto 1609 01:28:58,229 --> 01:29:02,079 es lo mismo que pasa 1610 01:29:02,079 --> 01:29:03,960 con println, lo hemos visto ayer 1611 01:29:03,960 --> 01:29:06,560 println está sobrecargado 1612 01:29:06,560 --> 01:29:08,159 porque hay un println 1613 01:29:08,159 --> 01:29:09,840 de string, un println de int 1614 01:29:09,840 --> 01:29:12,319 un println de double, un println de float 1615 01:29:12,319 --> 01:29:16,680 un println de... 1616 01:29:16,680 --> 01:29:17,180 ¿entiendes? 1617 01:29:18,460 --> 01:29:20,460 vale, como uso esto 1618 01:29:20,460 --> 01:29:22,560 ¿qué hace esto aquí? claramente 1619 01:29:22,560 --> 01:29:23,359 for 1620 01:29:23,359 --> 01:29:27,000 y si es igual a cero 1621 01:29:27,000 --> 01:29:30,979 y menor que rep 1622 01:29:30,979 --> 01:29:32,640 y más más 1623 01:29:32,640 --> 01:29:48,859 ¿vale? entonces ahora tengo 1624 01:29:48,859 --> 01:29:50,779 un método que se usa 1625 01:29:50,779 --> 01:29:52,600 un string 1626 01:29:52,600 --> 01:29:54,960 y luego 1627 01:29:54,960 --> 01:29:56,060 le pongo cuatro 1628 01:29:56,060 --> 01:29:58,819 pues saluda a esta persona cuatro veces 1629 01:29:58,819 --> 01:30:10,470 ¿sí? útil 1630 01:30:10,470 --> 01:30:11,430 no, pero 1631 01:30:11,430 --> 01:30:13,729 ¿dudas? 1632 01:30:16,109 --> 01:30:18,630 entonces tú el mismo método 1633 01:30:18,630 --> 01:30:20,210 esto te serviría para que 1634 01:30:20,210 --> 01:30:25,970 diferentes funciones el mismo método según los parámetros no no no esto te sirve para crear la 1635 01:30:25,970 --> 01:30:34,409 misma función pero con parámetros distintos lo que no tenéis que hacer bajo ningún concepto es 1636 01:30:34,409 --> 01:30:39,609 que saludar haga una cosa cuando lo llamas con string y una cosa completamente distinta cuando 1637 01:30:39,609 --> 01:30:47,029 lo llamas con int eso está mal porque yo cuando cuando leo el saludar me espero que salude y si 1638 01:30:47,029 --> 01:30:50,329 Y cuando lo llamo saludar con un int, me saluda diciendo hola. 1639 01:30:50,529 --> 01:30:56,029 Y cuando lo salga con un string, lo que me hace es calcular la media de las asignaturas. 1640 01:30:56,229 --> 01:30:57,090 Digo, ¿qué es eso? 1641 01:30:58,369 --> 01:30:59,890 Saludar tiene que hacer lo mismo. 1642 01:31:00,430 --> 01:31:02,409 Lo que pasa es que lo hace con distintos parámetros. 1643 01:31:03,109 --> 01:31:03,890 Saludar, saluda. 1644 01:31:04,310 --> 01:31:09,729 Luego puede saludar un anónimo, puede saludar sin decir el nombre, puede saludar diciendo el nombre de una persona, 1645 01:31:09,729 --> 01:31:16,090 puede saludar saludando a la persona, puede saludar a la persona cuatro veces, puede saludar a la persona calurosamente, puede saludar... 1646 01:31:16,090 --> 01:31:18,090 No lo sé, creo. 1647 01:31:18,090 --> 01:31:23,090 Y en el caso de una función, también se podría sobrecargarlo, ¿no? 1648 01:31:23,090 --> 01:31:25,090 Esta es una función, es verdad. 1649 01:31:25,090 --> 01:31:27,090 Esto es un... 1650 01:31:27,090 --> 01:31:29,090 Métodos son... esto es un... 1651 01:31:29,090 --> 01:31:31,090 En el momento en que aquí devuelves... perdón. 1652 01:31:31,090 --> 01:31:34,090 Aquí devuelves algo, pues es un... pero es lo mismo. 1653 01:31:34,090 --> 01:31:36,090 Nosotros somos métodos, ¿vale? 1654 01:31:36,090 --> 01:31:38,090 Que luego devuelvo un valor o no... 1655 01:31:38,090 --> 01:31:42,090 Sí, pero en una función que te tiene que devolver también puedes sobrecargarlo. 1656 01:31:42,090 --> 01:31:44,090 Porque no. 1657 01:31:44,090 --> 01:31:48,130 Y igualmente te tiene que devolver el valor en el tipo de... 1658 01:31:48,130 --> 01:31:49,350 Tienen que hacer lo que tienen que hacer. 1659 01:31:49,489 --> 01:31:52,369 Si tú quieres hacer una cosa distinta, no lo llames igual. 1660 01:31:52,529 --> 01:31:52,689 Vale. 1661 01:31:53,869 --> 01:31:57,270 Si tú ahora quieres hacer una cosa que no hace saludar, pues llámalo cocodrilo. 1662 01:31:57,829 --> 01:31:58,130 Vale. 1663 01:31:58,930 --> 01:32:00,029 ¿Por qué lo quieres llamar igual? 1664 01:32:00,329 --> 01:32:02,510 O sea, llamarlo igual le llevaría a confusión. 1665 01:32:02,729 --> 01:32:07,510 Porque luego tú tienes que recordar que saludar de int hace una cosa 1666 01:32:07,510 --> 01:32:09,710 y saludar de flota hace una cosa completamente distinta. 1667 01:32:10,109 --> 01:32:11,090 No es lógico. 1668 01:32:11,970 --> 01:32:12,369 Interesante. 1669 01:32:12,369 --> 01:32:21,550 Ahora, ¿qué más podemos hacer con estas cosas? ¿Más o menos? Vale, ahora mirad esta cosa aquí, 1670 01:32:21,550 --> 01:32:28,029 que luego la veremos más en un futuro, pero ¿qué pasa si yo aquí le pongo privado? 1671 01:32:28,029 --> 01:32:32,079 Que el nombre no se veía. 1672 01:32:32,079 --> 01:32:44,270 Que ahora nombre se ve solo dentro de persona. O sea, que aquí yo lo puedo usar porque estoy 1673 01:32:44,270 --> 01:32:51,579 dentro de persona y pueda acceder a su nombre pero cuando desde fuera desde una 1674 01:32:51,579 --> 01:33:03,880 clase que no es persona intentó acceder al nombre pero como podría acceder 1675 01:33:03,880 --> 01:33:19,939 a esto desde fuera debería crearme un método que me permite eso public 1676 01:33:19,939 --> 01:33:28,619 string get nombre return nombre 1677 01:33:28,619 --> 01:33:38,220 Entonces, ahora aquí, este método es public. Entonces, yo lo puedo llamar desde fuera. 1678 01:33:38,220 --> 01:33:54,600 public string getNombre, returnNombre. Y el método getNombre sí se puede llamar desde fuera, 1679 01:33:54,600 --> 01:34:01,380 porque es public. Yo no puedo acceder al atributo nombre, pero sí puedo acceder al tipo nombre. 1680 01:34:01,380 --> 01:34:03,380 ¿Qué ha logrado con esto? 1681 01:34:07,430 --> 01:34:09,430 ¿Qué utilidad tiene haber hecho esta cosa? 1682 01:34:12,890 --> 01:34:14,890 ¿Qué ha logrado con esto? 1683 01:34:18,369 --> 01:34:32,560 ¿Qué ha logrado con esto? Fijaos, vuelvo a ser público. ¿Lo puedo leer? 1684 01:34:36,359 --> 01:34:39,060 Persona dos punto nombre es igual a... 1685 01:34:39,060 --> 01:35:01,590 igual a cocodrilo. Y ahora lo llamo otra vez persona2, ya se llama cocodrilo. Ahora, si 1686 01:35:01,590 --> 01:35:20,840 yo pongo esto private, ya no puede. O sea, con este jueguecito he programado la posibilidad 1687 01:35:20,840 --> 01:35:23,260 de que las personas desde fuera 1688 01:35:23,260 --> 01:35:24,979 pueden saber mi nombre 1689 01:35:24,979 --> 01:35:27,079 pero no lo pueden sobreescribir 1690 01:35:27,079 --> 01:35:33,100 esta cosa aquí 1691 01:35:33,100 --> 01:35:34,659 es privada 1692 01:35:34,659 --> 01:35:36,880 solo se puede acceder desde persona 1693 01:35:36,880 --> 01:35:39,100 esto quiere decir que si yo 1694 01:35:39,100 --> 01:35:40,819 intento acceder desde fuera 1695 01:35:40,819 --> 01:35:42,239 no puedo 1696 01:35:42,239 --> 01:35:43,880 me dice es privada 1697 01:35:43,880 --> 01:35:45,039 aquí encima dice 1698 01:35:45,039 --> 01:35:48,939 no lo puedo ver 1699 01:35:48,939 --> 01:35:53,140 esto quiere decir que he hecho 1700 01:35:53,140 --> 01:36:01,260 un atributo que es de sola lectura. Lo puedo leer, porque hay una forma de leerlo, pero 1701 01:36:01,260 --> 01:36:11,960 no lo puedo modificar. No lo puedo modificar. Sí que puedo, porque tengo siete nombres 1702 01:36:11,960 --> 01:36:21,600 que es público. Ahora, ¿qué pasa, pero? Que yo aquí podría poner que si tienes los 1703 01:36:21,600 --> 01:36:24,899 privilegios, entonces sí cámbialo. Si tienes 1704 01:36:24,899 --> 01:36:29,659 los permisos para cambiarlo, entonces 1705 01:36:29,659 --> 01:36:32,079 cámbialo. Pero si no los tienes, no. 1706 01:36:33,640 --> 01:36:36,159 Por ejemplo, anescan. 1707 01:36:36,159 --> 01:36:39,180 es igual a newscanner. 1708 01:36:41,279 --> 01:36:52,229 System.ring. Si eso, dame la password. 1709 01:36:55,439 --> 01:36:58,300 ring.vd es igual 1710 01:36:58,300 --> 01:37:26,260 a scan.next.cfd.equals1,2,3,4, pues entonces cambia el nombre. 1711 01:37:26,260 --> 01:37:35,739 Se ha implementado un nivel de seguridad increíblemente alto, ¿vale? 1712 01:37:37,560 --> 01:37:39,180 Creo que tengo un error por algún lado. 1713 01:37:40,060 --> 01:37:40,680 Falta una. 1714 01:37:42,220 --> 01:37:43,560 Falta, tenemos ya. 1715 01:37:46,819 --> 01:37:51,020 Y, sustancialmente, lo que me hace es, si tú intentas hacer el set nombre, 1716 01:37:51,140 --> 01:37:54,819 fijaos que no puedo ahora directamente cambiarlo porque es privado. 1717 01:37:54,920 --> 01:37:56,319 Desde fuera no lo puedo cambiar. 1718 01:37:56,319 --> 01:37:58,659 pero puedo decir, oye mira 1719 01:37:58,659 --> 01:38:00,640 intenta cambiarlo con get 1720 01:38:00,640 --> 01:38:01,880 con set nombre 1721 01:38:01,880 --> 01:38:13,890 entonces ahora me dice 1722 01:38:13,890 --> 01:38:15,630 vale, muy bien, pero que hará 1723 01:38:15,630 --> 01:38:17,850 ahora intenta 1724 01:38:17,850 --> 01:38:19,310 llamar el set nombre 1725 01:38:19,310 --> 01:38:21,529 y cuando intenta cambiar el set nombre 1726 01:38:21,529 --> 01:38:23,489 me dice, para, para, para, para, dame la password 1727 01:38:23,489 --> 01:38:25,630 si yo la password 1728 01:38:25,630 --> 01:38:27,149 es correcta, entonces 1729 01:38:27,149 --> 01:38:29,270 la persona cambiará su nombre, dirá 1730 01:38:29,270 --> 01:38:31,510 si tú no eres el administrador 1731 01:38:31,510 --> 01:38:33,789 y no tienes la password, esta operación no te deja hacer 1732 01:38:33,789 --> 01:38:40,079 dame la password 1733 01:38:40,079 --> 01:38:55,199 Pico, pico, pico, pico, pico y cinco. Pues veis que sigue siendo Paco. Sin embargo, si soy el administrador y tengo la clave secreta, la del PIN de mi banco, mi espera ha cambiado. 1734 01:38:59,569 --> 01:39:04,789 ¿Dudas? Lo he dicho porque es la del PIN de vuestro banco también, ¿sabéis? 1735 01:39:06,529 --> 01:39:08,090 Nadie se cree que la vas a tener. 1736 01:39:09,409 --> 01:39:09,949 ¿Qué hora es eso? 1737 01:39:11,970 --> 01:39:12,369 Psicología. 1738 01:39:12,369 --> 01:39:18,909 Ahora, esto es una tontería, porque alguien mira el código y sabe en password, pero si 1739 01:39:18,909 --> 01:39:23,130 este de aquí fuera un acceso a una base de datos, donde en esta base de datos están 1740 01:39:23,130 --> 01:39:27,130 el usuario, los usuarios administradores, que queda si tú eres un administrador, en 1741 01:39:27,130 --> 01:39:30,689 el caso de un administrador te permite cambiar, en el caso de que no eres un administrador 1742 01:39:30,689 --> 01:39:33,369 no te permite, pues ya sería una cosa distinta. 1743 01:39:33,369 --> 01:39:39,479 Segundo de DAM en acceso a datos. 1744 01:39:39,479 --> 01:39:41,399 básicamente el set 1745 01:39:41,399 --> 01:39:43,319 porque no estoy viendo otro sentido, sería 1746 01:39:43,319 --> 01:39:45,439 para eso, porque si no, ¿para qué lo harías 1747 01:39:45,439 --> 01:39:47,600 privado? O sea, set y get, si tú 1748 01:39:47,600 --> 01:39:49,460 pones un public aquí 1749 01:39:49,460 --> 01:39:51,479 no te sirve de nada el set y get 1750 01:39:51,479 --> 01:39:53,460 ¿vale? La idea, pero es 1751 01:39:53,460 --> 01:39:55,479 que tú deberías proteger 1752 01:39:55,479 --> 01:39:57,539 tus objetos diciendo 1753 01:39:57,539 --> 01:39:59,500 los objetos, los atributos, los hago 1754 01:39:59,500 --> 01:40:01,479 privados y doy la 1755 01:40:01,479 --> 01:40:03,279 posibilidad de get y set 1756 01:40:03,279 --> 01:40:04,979 a las otras personas 1757 01:40:04,979 --> 01:40:06,640 pero controlados 1758 01:40:06,640 --> 01:40:09,199 tanto en el get como en el set 1759 01:40:09,199 --> 01:40:10,760 yo puedo añadir código 1760 01:40:10,760 --> 01:40:12,720 la ventaja del CET y del GET 1761 01:40:12,720 --> 01:40:15,220 que nosotros normalmente no usamos, normalmente lo usamos así 1762 01:40:15,220 --> 01:40:16,500 pero en la realidad 1763 01:40:16,500 --> 01:40:18,979 es que tú deberías aquí poner 1764 01:40:18,979 --> 01:40:20,960 un código que proteja 1765 01:40:20,960 --> 01:40:22,859 ese atributo 1766 01:40:22,859 --> 01:40:24,760 diciendo, mira, te voy a dar la edad 1767 01:40:24,760 --> 01:40:26,380 solo si tú tienes 1768 01:40:26,380 --> 01:40:28,739 los derechos 1769 01:40:28,739 --> 01:40:30,800 si tú eres esa persona, si tú eres 1770 01:40:30,800 --> 01:40:33,100 un administrador, si tú tienes una password 1771 01:40:33,100 --> 01:40:34,699 si tú tienes un certificado 1772 01:40:34,699 --> 01:40:37,340 entonces eso lo codificaría aquí 1773 01:40:37,340 --> 01:40:38,779 es la diferencia de 1774 01:40:38,779 --> 01:40:39,979 si yo pongo private 1775 01:40:39,979 --> 01:40:43,300 cualquiera puede leerlo 1776 01:40:43,300 --> 01:40:45,619 y escribirlo sin ningún control 1777 01:40:45,619 --> 01:40:47,159 o sea, yo puedo ahora 1778 01:40:47,159 --> 01:40:49,319 acceder a persona3 1779 01:40:49,319 --> 01:40:52,739 punto edad 1780 01:40:52,739 --> 01:40:55,000 y decirle, tienes menos 8 años 1781 01:40:55,000 --> 01:40:57,760 perfecto 1782 01:40:57,760 --> 01:41:00,529 pero yo podría decir 1783 01:41:00,529 --> 01:41:02,890 no, mira, vamos a hacer otra cosa 1784 01:41:02,890 --> 01:41:04,550 vamos a hacer que 1785 01:41:04,550 --> 01:41:05,689 edad es privada 1786 01:41:05,689 --> 01:41:08,510 y que cuando alguien 1787 01:41:08,510 --> 01:41:09,810 hace un set de edad 1788 01:41:09,810 --> 01:41:14,770 ¿Dónde está? No está todavía. Tenemos el get, pero no el set, ¿vale? 1789 01:41:15,090 --> 01:41:23,789 Cuando alguien hace un public void set edad que me da un entero e, 1790 01:41:26,260 --> 01:41:28,979 yo compruebo que e sea mayor que cero. 1791 01:41:31,220 --> 01:41:38,560 Si e es mayor que cero, edad es igual a e. 1792 01:41:40,760 --> 01:41:44,800 Esto quiere decir que ahora cuando alguien intentará acceder a edad no puede, 1793 01:41:44,800 --> 01:41:46,920 dice, vale, no te preocupes, lo intento 1794 01:41:46,920 --> 01:41:47,939 con set de edad 1795 01:41:47,939 --> 01:41:50,520 e intento darte 1796 01:41:50,520 --> 01:41:51,960 un valor negativo 1797 01:41:51,960 --> 01:41:58,560 y esto no lo permito. 1798 01:41:58,699 --> 01:42:00,100 Y ahora hago persona tres 1799 01:42:00,100 --> 01:42:04,039 punto saludar. 1800 01:42:06,250 --> 01:42:08,289 Estefano ahora saludará, pero no 1801 01:42:08,289 --> 01:42:10,590 con menos ocho años, con la edad que tengo. 1802 01:42:11,670 --> 01:42:15,579 Porque 1803 01:42:15,579 --> 01:42:17,739 como menos ocho es negativo, pues lo he 1804 01:42:17,739 --> 01:42:19,720 controlado. Entonces, esto me permite decir 1805 01:42:19,720 --> 01:42:22,180 ok, te doy la posibilidad de acceder 1806 01:42:22,180 --> 01:42:23,899 y de modificarlo, pero 1807 01:42:23,899 --> 01:42:25,979 según mis reglas, un valor negativo 1808 01:42:25,979 --> 01:42:27,060 no te permito darlo. 1809 01:42:27,600 --> 01:42:30,159 Valor superior a 120 no te permito darlo. 1810 01:42:32,039 --> 01:42:33,880 Que luego, en un futuro, 1811 01:42:34,380 --> 01:42:35,739 aquí lo podemos hacer es 1812 01:42:35,739 --> 01:42:36,340 else 1813 01:42:36,340 --> 01:42:39,529 close 1814 01:42:39,529 --> 01:42:46,970 new 1815 01:42:46,970 --> 01:42:48,770 extraction 1816 01:42:48,770 --> 01:42:57,029 Entonces, 1817 01:42:57,289 --> 01:43:03,510 explode. Si tú intentas 1818 01:43:03,510 --> 01:43:05,289 un error, pues que salte un error 1819 01:43:05,289 --> 01:43:07,710 que luego 1820 01:43:07,710 --> 01:43:09,090 alguien puede recoger diciendo 1821 01:43:09,090 --> 01:43:11,609 alguien ha intentado poner un dato que no es 1822 01:43:11,609 --> 01:43:13,590 correcto. Y a lo mejor desloguear 1823 01:43:13,590 --> 01:43:15,470 el usuario que lo ha intentado porque es 1824 01:43:15,470 --> 01:43:17,529 un usuario malicioso. O ponerle un 1825 01:43:17,529 --> 01:43:19,689 tico por algún lado y decir, lo has intentado una vez. 1826 01:43:20,029 --> 01:43:21,369 La tercera vez que intentas hacer 1827 01:43:21,369 --> 01:43:23,569 algo que no es de mi sistema, te ha hecho el sistema. 1828 01:43:25,050 --> 01:43:25,430 Y de allí 1829 01:43:25,430 --> 01:43:26,569 puedes complicar cuando te da. 1830 01:43:28,050 --> 01:43:29,010 Vale, cosilla. 1831 01:43:30,029 --> 01:43:31,590 Pero yo, a mí no me 1832 01:43:31,590 --> 01:43:33,210 gusta hacer las cosas sencillas. 1833 01:43:33,510 --> 01:43:34,970 ¿Vale? Y cuando voy 1834 01:43:34,970 --> 01:43:37,189 a leer esto, no entiendo 1835 01:43:37,189 --> 01:43:39,050 qué es N y qué es E. 1836 01:43:39,189 --> 01:43:39,710 ¿Qué es N? 1837 01:43:40,789 --> 01:43:41,590 ¿Qué es N? 1838 01:43:42,470 --> 01:43:44,810 Ni idea. ¿Es el nombre? Ah, pongo 1839 01:43:44,810 --> 01:43:46,689 nombre. Ah. 1840 01:43:47,350 --> 01:43:48,289 Int, edad. 1841 01:43:49,409 --> 01:43:50,909 Ahora sí que lo entiendo. 1842 01:43:54,609 --> 01:43:55,130 ¿Qué ha pasado? 1843 01:44:00,779 --> 01:44:03,140 Vamos a ver qué hace. Pues lo lanzo. 1844 01:44:05,140 --> 01:44:06,720 Uy, soy nule. 1845 01:44:06,840 --> 01:44:08,100 Tengo cero años. ¿Qué ha pasado? 1846 01:44:12,880 --> 01:44:13,779 ¿Veis los colorines? 1847 01:44:13,779 --> 01:44:25,090 lo veis que no está cambiando estos porque aquí he creado unas variables local y entonces aquí 1848 01:44:25,090 --> 01:44:32,550 dentro tiene prioridad este nombre a esta edad y me está simplemente diciendo oye mira pone dentro 1849 01:44:32,550 --> 01:44:45,210 de la variable localidad lo que hay dentro de la realidad no está cambiando nada podría hacer 1850 01:44:45,210 --> 01:44:47,489 setNombre 1851 01:44:47,489 --> 01:44:49,470 de nombre. 1852 01:44:51,210 --> 01:44:51,770 Sí. 1853 01:44:53,409 --> 01:44:55,270 Y además sería guay 1854 01:44:55,270 --> 01:44:57,590 porque si yo en setNombre 1855 01:44:57,590 --> 01:44:59,729 he puesto algunas condiciones 1856 01:44:59,729 --> 01:45:01,550 para decir el nombre no tiene que ser más largo 1857 01:45:01,550 --> 01:45:03,430 de 20 gratis, pues aquí 1858 01:45:03,430 --> 01:45:07,510 lo está aplicando. Pero 1859 01:45:07,510 --> 01:45:12,000 ¿cómo hago yo a decir 1860 01:45:12,000 --> 01:45:13,260 oye, quiero usar esto? 1861 01:45:14,439 --> 01:45:16,039 Porque cuando estoy fuera 1862 01:45:16,039 --> 01:45:17,579 yo puedo hacer 1863 01:45:17,579 --> 01:45:19,739 persona3.nombre 1864 01:45:19,739 --> 01:45:21,500 entonces es el nombre 1865 01:45:21,500 --> 01:45:23,079 del objeto persona3 1866 01:45:23,079 --> 01:45:24,600 pero cuando estoy aquí 1867 01:45:24,600 --> 01:45:29,619 ¿cómo hago a decir, oye, quiero el nombre 1868 01:45:29,619 --> 01:45:31,319 pero no el nombre este de aquí 1869 01:45:31,319 --> 01:45:32,479 quiero el nombre 1870 01:45:32,479 --> 01:45:34,239 del objeto 1871 01:45:34,239 --> 01:45:37,619 ¿sí me explico? o sea, quiero el nombre 1872 01:45:37,619 --> 01:45:39,220 del objeto que 1873 01:45:39,220 --> 01:45:41,340 seré, que pero ahora 1874 01:45:41,340 --> 01:45:43,420 no soy, porque ahora estoy definiendo la clase 1875 01:45:43,420 --> 01:45:44,760 no hay ningún objeto aquí 1876 01:45:44,760 --> 01:45:47,239 ¿pero cómo hago referencia al objeto 1877 01:45:47,239 --> 01:45:49,460 que construiré en un futuro 1878 01:45:49,460 --> 01:45:51,479 si todavía no tengo la referencia. 1879 01:45:55,010 --> 01:45:55,270 Dis. 1880 01:45:55,270 --> 01:46:00,119 Ah, y la palabra reservada 1881 01:46:00,119 --> 01:46:02,859 dis, este, este objeto. 1882 01:46:03,920 --> 01:46:06,020 Entonces, dis.nombre 1883 01:46:06,020 --> 01:46:08,840 accede a este objeto 1884 01:46:08,840 --> 01:46:10,380 su variable nombre. 1885 01:46:11,460 --> 01:46:12,880 Y aquí lo puedo usar 1886 01:46:12,880 --> 01:46:14,180 porque estoy dentro de persona, 1887 01:46:14,300 --> 01:46:16,239 entonces nombre, hasta si es privado, 1888 01:46:16,340 --> 01:46:17,079 pero es accesible. 1889 01:46:30,489 --> 01:46:40,430 Es porque es bonito 1890 01:46:40,430 --> 01:46:41,909 cuando tú haces un constructor 1891 01:46:41,909 --> 01:46:43,689 que lo que le pases 1892 01:46:43,689 --> 01:46:46,090 tenga el mismo nombre 1893 01:46:46,090 --> 01:46:48,189 de lo que efectivamente van a instanciar. 1894 01:46:48,829 --> 01:46:50,050 Pero si no le pongo el dis 1895 01:46:50,050 --> 01:46:52,050 tiene el problema que es ambiguo. 1896 01:46:53,149 --> 01:46:54,310 Y él lo pilla como local 1897 01:46:54,310 --> 01:46:55,750 en vez que como así. 1898 01:46:56,210 --> 01:46:57,529 Entonces para desambiguar 1899 01:46:57,529 --> 01:47:00,409 yo le estoy diciendo que el nombre que me has pasado 1900 01:47:00,409 --> 01:47:02,229 tú como variable local, ponlo 1901 01:47:02,229 --> 01:47:04,449 dentro de este objeto 1902 01:47:04,449 --> 01:47:05,590 su campo nombre. 1903 01:47:09,550 --> 01:47:10,590 Esto me vale 1904 01:47:10,590 --> 01:47:12,069 si es público, si es privado, 1905 01:47:12,149 --> 01:47:13,930 normalmente los 1906 01:47:13,930 --> 01:47:16,310 constructores suelen tener 1907 01:47:16,310 --> 01:47:21,100 este aspecto. 1908 01:47:21,380 --> 01:47:22,819 Si lo piensas, cuando yo 1909 01:47:22,819 --> 01:47:23,779 hago set nombre 1910 01:47:23,779 --> 01:47:26,079 de nombre, 1911 01:47:30,350 --> 01:47:31,789 oye, set nombre 1912 01:47:31,789 --> 01:47:32,810 ¿de qué objeto? 1913 01:47:35,189 --> 01:47:36,649 De este nombre. 1914 01:47:36,649 --> 01:47:43,479 es que estoy haciendo 1915 01:47:43,479 --> 01:47:44,899 dis.setNombre 1916 01:47:44,899 --> 01:47:46,619 sin decirlo 1917 01:47:46,619 --> 01:47:50,979 claro, pero eso sería lo mismo que lo que has puesto arriba 1918 01:47:50,979 --> 01:47:51,279 ¿verdad? 1919 01:47:52,659 --> 01:47:54,979 ese dis.setNombre sería 1920 01:47:54,979 --> 01:47:57,159 lo mismo que dis.nombre 1921 01:47:57,159 --> 01:47:59,159 no es lo mismo 1922 01:47:59,159 --> 01:48:01,140 porque dis.nombre cambia directamente 1923 01:48:01,140 --> 01:48:02,920 esta variable, si yo aquí le pongo 1924 01:48:02,920 --> 01:48:04,939 pensa edad, ¿vale? 1925 01:48:05,119 --> 01:48:07,140 nosotros hemos dicho que edad tiene que ser positiva 1926 01:48:07,140 --> 01:48:09,199 yo aquí puedo pasarle menos 7 1927 01:48:09,199 --> 01:48:13,680 mientras que si usara 1928 01:48:13,680 --> 01:48:16,020 setedad, pues como pasa 1929 01:48:16,020 --> 01:48:20,829 por aquí, no me permite. 1930 01:48:24,609 --> 01:48:24,729 ¿Sí? 1931 01:48:26,470 --> 01:48:27,550 Podría yo poner, 1932 01:48:27,670 --> 01:48:28,670 para que está seguro, 1933 01:48:30,250 --> 01:48:32,430 this.edad 1934 01:48:32,430 --> 01:48:33,909 es igual a 1935 01:48:33,909 --> 01:48:34,869 edad. 1936 01:48:35,689 --> 01:48:36,890 Porque esto ahora lo llamo edad. 1937 01:48:42,970 --> 01:48:44,369 Perdón, era edad. 1938 01:48:45,729 --> 01:48:46,829 Ahí. Ahora sí. 1939 01:48:47,289 --> 01:48:47,970 Y esto pone a cero. 1940 01:48:48,750 --> 01:48:51,250 Cuando tú llamas setedad, yo por defecto te lo pongo 1941 01:48:51,250 --> 01:48:53,350 a cero. Independientemente 1942 01:48:53,350 --> 01:48:54,430 del número que me has dado tú. 1943 01:48:54,430 --> 01:49:00,810 Si es un número aceptable, pongo el número que has puesto tú. 1944 01:49:01,329 --> 01:49:03,310 Y si no, lo dejo a cero. 1945 01:49:04,189 --> 01:49:06,869 Tú me pones menos ocho y te pongo cero, por defecto. 1946 01:49:08,170 --> 01:49:13,869 Entonces, ahora, si alguien hace aquí persona, Sara, de menos 34, 1947 01:49:15,569 --> 01:49:17,989 él con esto lo pillaría. 1948 01:49:19,670 --> 01:49:20,590 Con esto no. 1949 01:49:20,590 --> 01:49:25,210 pero nadie me prohíbe 1950 01:49:25,210 --> 01:49:26,689 aquí 1951 01:49:26,689 --> 01:49:28,270 hacer mi comprobación 1952 01:49:28,270 --> 01:49:31,069 si edad es mayor 1953 01:49:31,069 --> 01:49:31,909 que cero 1954 01:49:31,909 --> 01:49:33,949 pues ponle eso 1955 01:49:33,949 --> 01:49:41,319 de donde lo quieres hacer 1956 01:49:41,319 --> 01:49:43,239 como lo quieres hacer, si el setter ya lo tienes 1957 01:49:43,239 --> 01:49:45,199 si el getter ya lo tienes, si lo quieres poner 1958 01:49:45,199 --> 01:49:47,300 el getter y el setter, porque a lo mejor tú quieres 1959 01:49:47,300 --> 01:49:49,199 que edad no sea accesible 1960 01:49:49,199 --> 01:49:51,340 desde fuera, entonces si yo pillo 1961 01:49:51,340 --> 01:49:53,720 getter edad y me lo cargo 1962 01:49:53,720 --> 01:49:55,159 setter edad 1963 01:49:55,159 --> 01:49:57,159 y me lo cargo, y esto lo hago 1964 01:49:57,159 --> 01:50:00,239 privado. Pues ahora 1965 01:50:00,239 --> 01:50:02,680 la edad no la puedes 1966 01:50:02,680 --> 01:50:04,319 modificar desde fuera. La puedes 1967 01:50:04,319 --> 01:50:06,739 modificar solo con métodos 1968 01:50:06,739 --> 01:50:08,439 de mi clase, que son 1969 01:50:08,439 --> 01:50:10,500 cuando lo creas, puedes dar una edad 1970 01:50:10,500 --> 01:50:12,539 pero yo miro que sea 1971 01:50:12,539 --> 01:50:14,520 mayor que cero, para que tú no me 1972 01:50:14,520 --> 01:50:16,500 des un número negativo. Si me 1973 01:50:16,500 --> 01:50:18,340 das un número negativo, esto no lo haces, entonces 1974 01:50:18,340 --> 01:50:20,399 se queda al valor por defecto, o sea, cero. 1975 01:50:23,000 --> 01:50:24,140 Y que cuando 1976 01:50:24,140 --> 01:50:26,460 tú quieras aumentar, tienes que 1977 01:50:26,460 --> 01:50:27,140 cumplir los años. 1978 01:50:28,220 --> 01:50:30,300 En el que yo podría hacerlo más complejo, 1979 01:50:30,380 --> 01:50:32,260 decir qué día es hoy, cuál es tu cumpleaños 1980 01:50:32,260 --> 01:50:34,399 y en base a eso ver si te doy más uno 1981 01:50:34,399 --> 01:50:34,619 o no. 1982 01:50:36,239 --> 01:50:38,180 Pero ahora yo tengo una variable 1983 01:50:38,180 --> 01:50:40,340 que sólo gestionan mis 1984 01:50:40,340 --> 01:50:42,359 métodos. Y como yo sé cómo 1985 01:50:42,359 --> 01:50:44,420 tienen que funcionar, evito 1986 01:50:44,420 --> 01:50:46,659 que la gente me ponga años 7.000. 1987 01:50:47,180 --> 01:50:47,779 Evito que la 1988 01:50:47,779 --> 01:50:50,060 gente ponga años 1989 01:50:50,060 --> 01:50:50,960 menos 4.000. 1990 01:50:51,779 --> 01:50:53,520 Porque todos los métodos 1991 01:50:53,520 --> 01:50:55,640 los estoy gestionando yo. La edad 1992 01:50:55,640 --> 01:50:57,960 varía con métodos que funcionan 1993 01:50:57,960 --> 01:50:59,640 bien porque los he implementado yo como 1994 01:50:59,640 --> 01:51:01,960 programador. Tú puedes usar mis métodos, 1995 01:51:02,939 --> 01:51:03,800 pero como varía 1996 01:51:03,800 --> 01:51:05,659 y como gestiona, tú no puedes 1997 01:51:05,659 --> 01:51:07,739 directamente llegar a la edad y poner lo que te da 1998 01:51:07,739 --> 01:51:09,939 la gana. Tienes que pasar bajo mi control. 1999 01:51:10,560 --> 01:51:11,720 Porque no hay un método 2000 01:51:11,720 --> 01:51:13,720 o un acceso que te 2001 01:51:13,720 --> 01:51:15,460 permita poner lo que te da la gana en edad. 2002 01:51:17,220 --> 01:51:17,680 Esto es un tema 2003 01:51:17,680 --> 01:51:19,319 un poquito más avanzado. Se me ha ido por allí. 2004 01:51:21,039 --> 01:51:21,439 Existe. 2005 01:51:21,920 --> 01:51:22,779 Lo volveremos a ver. 2006 01:51:22,779 --> 01:51:28,880 entonces lo que sí que me interesa 2007 01:51:28,880 --> 01:51:29,619 es el dis 2008 01:51:29,619 --> 01:51:32,020 aquí está 2009 01:51:32,020 --> 01:51:37,750 y luego estamos en los métodos estáticos 2010 01:51:37,750 --> 01:51:39,649 y hemos acabado este bloque 2011 01:51:39,649 --> 01:51:40,989 ahora hacemos ejercicio 2012 01:51:40,989 --> 01:51:46,470 la diferencia entre los métodos 2013 01:51:46,470 --> 01:51:47,729 que nosotros hemos hecho ahora 2014 01:51:47,729 --> 01:51:49,689 todos los métodos lo veis que no tienen ninguno 2015 01:51:49,689 --> 01:51:50,569 estático 2016 01:51:50,569 --> 01:51:54,250 y los métodos estáticos 2017 01:51:54,250 --> 01:51:56,350 son que 2018 01:51:56,350 --> 01:52:09,319 los métodos no estáticos son sobre los objetos. Los métodos estáticos son sobre la clase. O sea, 2019 01:52:09,319 --> 01:52:20,899 un método que varía su comportamiento dependiendo del objeto sobre el que lo llamo es sin estático. 2020 01:52:20,899 --> 01:52:24,600 un objeto que hace lo mismo 2021 01:52:24,600 --> 01:52:27,020 lo llame sobre un objeto 2022 01:52:27,020 --> 01:52:28,399 lo llame sobre otro objeto 2023 01:52:28,399 --> 01:52:30,520 pues este método 2024 01:52:30,520 --> 01:52:31,720 es estable 2025 01:52:31,720 --> 01:52:37,680 con un ejemplo 2026 01:52:37,680 --> 01:52:45,079 voy a hacer una nueva clase 2027 01:52:45,079 --> 01:52:54,859 la clase triángulo 2028 01:52:54,859 --> 01:52:57,060 la clase triángulo tiene 2029 01:52:57,060 --> 01:52:58,100 interlado 1 2030 01:52:58,100 --> 01:53:00,239 interlado 2 2031 01:53:00,239 --> 01:53:02,220 interlado 3 2032 01:53:02,220 --> 01:53:04,899 tiene un método 2033 01:53:04,899 --> 01:53:07,060 public 2034 01:53:07,060 --> 01:53:09,500 no sé si estático o no 2035 01:53:09,500 --> 01:53:13,020 int 2036 01:53:13,020 --> 01:53:15,840 calcula perímetro 2037 01:53:15,840 --> 01:53:22,470 que haces return 2038 01:53:22,470 --> 01:53:24,130 L1 2039 01:53:24,130 --> 01:53:26,630 más L2 más L3 2040 01:53:26,630 --> 01:53:31,909 pregunta para vosotros 2041 01:53:31,909 --> 01:53:33,970 este triángulo 2042 01:53:33,970 --> 01:53:35,270 o sea este método 2043 01:53:35,270 --> 01:53:36,329 es estático o no 2044 01:53:36,329 --> 01:53:46,819 si lo llamo sobre triángulos distintos 2045 01:53:46,819 --> 01:53:49,260 da un resultado distinto 2046 01:53:49,260 --> 01:54:14,300 con el mismo resultado. No está. ¿Estamos a acuerdo con esto? Vale. public int calcula 2047 01:54:14,300 --> 01:54:38,090 perímetro de INT LADO1, INT LADO2, INT LADO3. RETURN LADO1 más LADO2 más LADO3. ¿Estático o no? 2048 01:54:38,090 --> 01:55:09,489 Vamos a ver la diferencia en un main. 2049 01:55:10,130 --> 01:55:12,050 Como os he dicho, el main lo puede hacer en otra clase, 2050 01:55:12,270 --> 01:55:13,250 pero también lo puede hacer aquí. 2051 01:55:14,270 --> 01:55:15,270 Entonces tengo un main. 2052 01:55:15,970 --> 01:55:17,270 Me creo dos triángulos. 2053 01:55:18,050 --> 01:55:19,029 Triángulo 1. 2054 01:55:21,350 --> 01:55:22,750 Triángulo de 1. 2055 01:55:22,750 --> 01:55:24,850 es igual a un nuevo triángulo. 2056 01:55:28,140 --> 01:55:29,039 ¡Ay! ¿Qué me falta? 2057 01:55:30,539 --> 01:55:31,239 ¡Exacto! 2058 01:55:31,340 --> 01:55:31,800 Constructor. 2059 01:55:34,060 --> 01:55:34,659 ¡Pablo! 2060 01:55:34,659 --> 01:55:34,739 ¡Pablo! 2061 01:55:36,640 --> 01:55:37,920 Triángulo 2062 01:55:37,920 --> 01:55:39,100 de 2063 01:55:39,100 --> 01:55:42,039 int L1 2064 01:55:42,039 --> 01:55:44,380 int L2 2065 01:55:44,380 --> 01:55:46,340 int 2066 01:55:46,340 --> 01:55:48,659 L3 2067 01:55:49,399 --> 01:55:52,359 dis.L1 2068 01:55:53,520 --> 01:55:54,699 es igual a L1 2069 01:55:54,699 --> 01:55:58,119 Dis.L2 es igual a L2 2070 01:55:58,119 --> 01:56:01,720 Dis.L3 es igual a L3 2071 01:56:01,720 --> 01:56:03,020 Es una versión simplificada 2072 01:56:03,020 --> 01:56:08,640 No todas las triplas de números son un triángulo 2073 01:56:08,640 --> 01:56:11,079 1, 1, 7000 no es un triángulo 2074 01:56:11,079 --> 01:56:16,329 Ok, vuelvo aquí 2075 01:56:16,329 --> 01:56:17,970 Entonces te digo 2076 01:56:17,970 --> 01:56:21,090 Fijaos que ya no existe el constructor por defecto 2077 01:56:21,090 --> 01:56:23,229 Porque he usado un constructor con 3 capas 2078 01:56:23,229 --> 01:56:26,229 3, 4, 5 2079 01:56:26,229 --> 01:56:26,970 Terno fitabólico 2080 01:56:27,609 --> 01:56:45,670 este es un triángulo, si, triángulo T2 es igual a new triángulo 3, 3, 3, triángulo equilátero del lado 3. 2081 01:56:45,670 --> 01:56:58,890 Ahora, si yo hago siso T1 punto cálculo a perímetro, o si yo hago siso T2 punto cálculo a perímetro, 2082 01:56:59,050 --> 01:57:04,560 A que estos me dan valores distintos 2083 01:57:04,560 --> 01:57:07,689 ¿Por qué? 2084 01:57:08,229 --> 01:57:12,810 Porque calcula perímetro es un método propio del objeto 2085 01:57:12,810 --> 01:57:18,390 Y usará los atributos del objeto para calcularse 2086 01:57:18,390 --> 01:57:22,510 Entonces este objeto aquí que tiene como atributos 3, 4, 5 2087 01:57:22,510 --> 01:57:24,250 Hará 3 más 4 más 5 2088 01:57:24,250 --> 01:57:27,390 Mientras que este objeto aquí que tiene 3, 3, 3 2089 01:57:27,390 --> 01:57:29,289 Pues hará 3 más 3 más 3 2090 01:57:29,289 --> 01:57:31,029 ¿Están de acuerdo hasta aquí? 2091 01:57:31,989 --> 01:57:32,229 Vale 2092 01:57:32,229 --> 01:57:35,029 Ahora, imaginámonos que esto no sea estático. 2093 01:57:35,949 --> 01:57:46,369 Entonces, si no es estático, yo no puedo llamar calcular perímetro de 4, 4, 4. 2094 01:57:47,970 --> 01:57:49,229 Bueno, espera que... 2095 01:57:49,229 --> 01:57:50,949 Vamos 5, 5, 5. 2096 01:57:53,319 --> 01:57:55,000 ¿Y qué se enfada? ¿Por qué se enfada? 2097 01:57:55,359 --> 01:58:03,310 Me dice, the method calcular perímetro int, int, int is undefined for the type triángulo. 2098 01:58:03,310 --> 01:58:06,569 no puedo 2099 01:58:06,569 --> 01:58:08,989 porque desde un entorno estático 2100 01:58:08,989 --> 01:58:10,689 estoy intentando acceder 2101 01:58:10,689 --> 01:58:12,029 a un objeto 2102 01:58:12,029 --> 01:58:14,630 porque esto sin estático es de un objeto 2103 01:58:14,630 --> 01:58:16,130 le tengo que decir 2104 01:58:16,130 --> 01:58:17,789 a qué objeto llamarlo 2105 01:58:17,789 --> 01:58:19,449 por ejemplo T1 junto 2106 01:58:19,449 --> 01:58:21,170 ahora dice, ah sí, claro 2107 01:58:21,170 --> 01:58:23,449 pero se enfada 2108 01:58:23,449 --> 01:58:24,409 porque dice 2109 01:58:24,409 --> 01:58:45,510 si yo lo pongo así 2110 01:58:45,510 --> 01:58:47,550 se enfada porque dice 2111 01:58:47,550 --> 01:58:50,189 cannot make a static reference 2112 01:58:50,189 --> 01:58:51,869 to a non-static method 2113 01:58:51,869 --> 01:58:52,890 calcula perímetro 2114 01:58:52,890 --> 01:58:55,770 no puede hacer una referencia estática 2115 01:58:55,770 --> 01:58:58,090 a un método que no es estático 2116 01:58:58,090 --> 01:59:00,430 ¿Qué quiere decir? Estoy en un mundo estático 2117 01:59:00,430 --> 01:59:02,989 Estoy en un mundo que no es de un objeto 2118 01:59:02,989 --> 01:59:03,949 Es de la clase 2119 01:59:03,949 --> 01:59:06,770 Y tú me estás diciendo cálcula perímetro 2120 01:59:06,770 --> 01:59:08,729 Pero cálcula perímetro me has dicho 2121 01:59:08,729 --> 01:59:10,750 Que no es de una clase, es de un objeto 2122 01:59:10,750 --> 01:59:12,010 ¿Pero de qué objeto? 2123 01:59:12,729 --> 01:59:14,609 No me has dicho sobre qué objeto trabajar 2124 01:59:14,609 --> 01:59:16,289 ¿Vale? 2125 01:59:16,729 --> 01:59:17,970 Entonces digo, vale, muy bien 2126 01:59:17,970 --> 01:59:19,430 Trabaja sobre T1 2127 01:59:19,430 --> 01:59:22,069 Ah, ahora sí 2128 01:59:22,069 --> 01:59:22,970 ¿Vale? 2129 01:59:23,649 --> 01:59:25,689 Está usando este señor de aquí 2130 01:59:25,689 --> 01:59:27,609 Que le paso tres parámetros 2131 01:59:27,609 --> 01:59:35,310 y me lo calcula. Ahora, si yo lo llamo sobre T1 o lo llamo sobre T2, ¿cambia algo? 2132 01:59:47,609 --> 01:59:57,779 Es que no le he puesto el System Out, ¿eh? Esto de aquí es el de arriba. Si, eso. Y esto va allí adentro. 2133 01:59:57,779 --> 02:00:10,800 Si lo llevamos sobre T1, T2 2134 02:00:10,800 --> 02:00:11,500 ¿Cambia algo? 2135 02:00:15,739 --> 02:00:17,840 No, porque ahora no depende este calcular 2136 02:00:17,840 --> 02:00:19,979 El perímetro de qué objeto 2137 02:00:19,979 --> 02:00:22,279 No depende de sus valores 2138 02:00:22,279 --> 02:00:24,680 Mas depende de los valores que ponga aquí 2139 02:00:24,680 --> 02:00:28,350 O sea que esta es una función 2140 02:00:28,350 --> 02:00:30,670 Que no depende del objeto 2141 02:00:30,670 --> 02:00:33,250 No usa cosas dentro del objeto 2142 02:00:33,250 --> 02:00:35,689 No usa nada de los atributos de los objetos 2143 02:00:35,689 --> 02:00:36,430 Lo veis que aquí 2144 02:00:36,430 --> 02:00:38,789 no uso ningún atributo del objeto 2145 02:00:38,789 --> 02:00:40,989 entonces es una función 2146 02:00:40,989 --> 02:00:43,350 independiente del objeto 2147 02:00:43,350 --> 02:00:44,729 es una función 2148 02:00:44,729 --> 02:00:46,010 de la clase 2149 02:00:46,010 --> 02:00:50,060 no, el igual depende del objeto 2150 02:00:50,060 --> 02:00:51,939 porque tú haces este objeto 2151 02:00:51,939 --> 02:00:54,600 igual a este otro objeto, son dos objetos que usas 2152 02:00:54,600 --> 02:00:56,300 el igual se lo llamas 2153 02:00:56,300 --> 02:00:57,020 solo el mismo objeto 2154 02:00:57,020 --> 02:00:59,560 como el random 2155 02:00:59,560 --> 02:01:03,319 el math.random 2156 02:01:03,319 --> 02:01:04,840 no has creado 2157 02:01:04,840 --> 02:01:06,720 math x es igual a new math 2158 02:01:06,720 --> 02:01:08,720 Y luego has hecho X punturando. 2159 02:01:09,399 --> 02:01:11,279 Has usado más punturando más X. 2160 02:01:13,939 --> 02:01:14,119 ¿Sí? 2161 02:01:15,020 --> 02:01:20,000 Es decir, que como este de aquí es independiente del objeto sobre el que lo llamo, 2162 02:01:20,479 --> 02:01:21,939 debería ser estático. 2163 02:01:23,060 --> 02:01:26,880 Ahora, si es estático, no lo llamo sobre un objeto. 2164 02:01:29,510 --> 02:01:30,869 Lo llamo sobre la clase. 2165 02:01:39,720 --> 02:01:42,560 Que ahora, si estoy en esta misma clase, 2166 02:01:45,100 --> 02:01:47,899 puedo hasta no nombrarla, porque él sabe. 2167 02:01:47,899 --> 02:01:53,659 yo estoy dentro de la clase triángulo, este es el main del triángulo y entonces hace una llamada 2168 02:01:53,659 --> 02:02:07,800 estática a un entorno estático. Perfecto. Pero si estuviera en el main, main triángulo, con un main, 2169 02:02:07,800 --> 02:02:22,550 y quisiera usar el triángulo, o sea que ahora este main de aquí me lo copia allí. Él aquí se enfadaría 2170 02:02:22,550 --> 02:02:24,430 porque decía, oye, mira, en esta clase 2171 02:02:24,430 --> 02:02:26,470 no hay un método cálculo a perímetro. 2172 02:02:27,470 --> 02:02:28,890 ¿Qué cálculo a perímetro 2173 02:02:28,890 --> 02:02:30,970 quieres usar? Quieres usar 2174 02:02:30,970 --> 02:02:34,880 el de la clase 2175 02:02:34,880 --> 02:02:35,600 triángulo. 2176 02:02:41,149 --> 02:02:41,949 Tengo que 2177 02:02:41,949 --> 02:02:43,829 especificar, cálculo a perímetro 2178 02:02:43,829 --> 02:02:44,729 de qué clase. 2179 02:02:45,890 --> 02:02:47,649 Como esto es estático, 2180 02:02:47,789 --> 02:02:49,930 ¿veis que es en cursiva? 2181 02:02:50,710 --> 02:02:51,810 Como esto es estático, 2182 02:02:52,069 --> 02:02:53,630 no se llama sobre un objeto. 2183 02:02:54,970 --> 02:02:55,970 Se llama sobre 2184 02:02:55,970 --> 02:02:58,939 la clase. 2185 02:02:59,300 --> 02:03:02,760 ¿Por qué es estático y no estático? Esa es la clave, ¿vale? 2186 02:03:03,220 --> 02:03:08,979 Un método es estático si no usa los atributos del objeto. 2187 02:03:09,979 --> 02:03:16,739 Es no estático, o sea, no se pone nada, si usa la cosa del objeto. 2188 02:03:17,359 --> 02:03:23,960 Un método, llamámoslo estático y dinámico, si un método es estático, se llama sobre la clase, 2189 02:03:24,859 --> 02:03:27,880 si un método es dinámico, se llama sobre el objeto. 2190 02:03:30,869 --> 02:03:34,489 Porque este método usará los valores del objeto 2191 02:03:34,489 --> 02:03:36,550 Entonces le tengo que decir qué objeto 2192 02:03:36,550 --> 02:03:41,569 Mientras este método no usa los valores de un objeto 2193 02:03:41,569 --> 02:03:43,109 Porque usa estos valores de aquí 2194 02:03:43,109 --> 02:03:48,329 Si yo, por ejemplo, hiciera una clase que se llama geometría 2195 02:03:48,329 --> 02:03:51,630 Donde hago cosas de geometría 2196 02:03:51,630 --> 02:03:53,789 Calcula el triángulo de un cuadrado 2197 02:03:53,789 --> 02:03:55,850 Calcula el triángulo del... 2198 02:03:55,850 --> 02:03:57,010 Perdón, el perímetro de un cuadrado 2199 02:03:57,010 --> 02:03:57,930 El área de un cuadrado 2200 02:03:57,930 --> 02:03:59,890 Pero sin usar objetos 2201 02:03:59,890 --> 02:04:02,430 es una clase general de geometría 2202 02:04:02,430 --> 02:04:04,010 que te permite hacer todas estas cosas 2203 02:04:04,010 --> 02:04:06,210 y eso serían todos métodos estáticos 2204 02:04:06,210 --> 02:04:08,170 como la clase 2205 02:04:08,170 --> 02:04:08,649 MAF 2206 02:04:08,649 --> 02:04:12,090 tú dices 2207 02:04:12,090 --> 02:04:13,970 quiero hacer una elevación a potencia 2208 02:04:13,970 --> 02:04:15,930 2 elevado a la 7, tengo el método 2209 02:04:15,930 --> 02:04:18,329 PAO, vale, PAO 2 7 2210 02:04:18,329 --> 02:04:19,850 te hace 2 elevado a la 7 2211 02:04:19,850 --> 02:04:24,800 ¿de qué objeto? existe un objeto 2212 02:04:24,800 --> 02:04:26,720 no hay un objeto 2213 02:04:26,720 --> 02:04:28,560 sobre el que llamar la potencia 2214 02:04:28,560 --> 02:04:30,560 de 2 a la 7, que se lo llama sobre este 2215 02:04:30,560 --> 02:04:34,500 objeto te da un resultado y si lo llamas sobre un objeto distinto te da un 2216 02:04:34,500 --> 02:04:39,500 resultado distinto. La elevación a potencia no es dependiente de un objeto, 2217 02:04:39,500 --> 02:04:46,989 es una función matemática genérica. Por lo tanto, es estática. Píllame un número 2218 02:04:46,989 --> 02:04:55,270 al azar entre 0 y 1. Depende de un objeto. 2219 02:04:55,270 --> 02:05:03,220 Depende de los parámetros 0 y 1. Si yo te los paso, ya está. Ahora, ¿podría ser un 2220 02:05:03,220 --> 02:05:04,920 objeto donde pone 2221 02:05:04,920 --> 02:05:06,560 atributo 2222 02:05:06,560 --> 02:05:09,619 número mínimo, atributo número máximo 2223 02:05:09,619 --> 02:05:11,159 y que tenga un método que 2224 02:05:11,159 --> 02:05:13,020 diga random que me pilla 2225 02:05:13,020 --> 02:05:14,739 desde el número mínimo al número máximo. 2226 02:05:15,399 --> 02:05:16,739 Sí, en ese caso 2227 02:05:16,739 --> 02:05:19,119 no sería estático. 2228 02:05:20,439 --> 02:05:21,079 Sería 2229 02:05:21,079 --> 02:05:22,020 propio del objeto. 2230 02:05:22,720 --> 02:05:25,359 Porque está usando dos parámetros del objeto. 2231 02:05:26,140 --> 02:05:27,420 Pero entonces no se lo paso. 2232 02:05:27,420 --> 02:05:29,079 El random en este caso no sería. 2233 02:05:29,520 --> 02:05:30,840 Sería un random sin parámetros 2234 02:05:30,840 --> 02:05:32,680 y el dentro va a usar 2235 02:05:32,680 --> 02:05:36,279 haremos esto primero 2236 02:05:36,279 --> 02:05:38,479 a ver, paso número uno 2237 02:05:38,479 --> 02:05:39,239 topo este