1 00:00:00,050 --> 00:00:09,550 Estoy grabando, si vosotros habláis me dais con el consentimiento a grabar vuestra voz, si no levantad la mano y lo paro, ¿vale? 2 00:00:10,330 --> 00:00:19,329 Entonces, hasta ahora hemos estado trabajando con programación estructurada, ¿vale? 3 00:00:20,129 --> 00:00:22,609 Y es la base de la programación, ¿vale? 4 00:00:22,609 --> 00:00:27,949 O sea que, digamos que lo que hemos visto hasta ahora es para programas relativamente sencillos 5 00:00:27,949 --> 00:00:34,289 y es lo que se ha usado por mucho tiempo para programar en el mundo laboral, ¿vale? 6 00:00:34,750 --> 00:00:41,670 Ahora, hace bastante tiempo empezamos a ver que la programación estructurada tenía sus límites. 7 00:00:41,990 --> 00:00:48,609 En particular, esto de basarse sobre funciones, de basarse sobre procedimientos, etc., etc., 8 00:00:48,609 --> 00:00:55,590 Llevaba un momento que en proyectos particularmente complejos, en sistemas complejos 9 00:00:55,590 --> 00:01:01,189 Pues se volvía difícil mantener el código 10 00:01:01,189 --> 00:01:06,930 Se necesitaba un paso más en lo que era el paradigma de organización 11 00:01:06,930 --> 00:01:09,469 El paradigma de cómo me enfrentan los problemas 12 00:01:09,469 --> 00:01:13,849 Y entonces surgió la programación orientada a objetos 13 00:01:13,849 --> 00:01:43,090 Es un nuevo paradigma, es un modo de pensar los programas un poco distintos con respecto a como se pensaba, como lo habéis pensado hasta ahora, introduciendo algunos conceptos básicos sobre el que, ladrillos básicos sobre el que construir luego la programación, una programación más ordenada, más estructurada, termino feo, pero ese es el concepto, más organizada, más fácil luego de mantener y de entender. 14 00:01:43,090 --> 00:01:44,909 Y sobre todo de reutilizar 15 00:01:44,909 --> 00:01:45,530 ¿Vale? 16 00:01:47,349 --> 00:01:49,730 Entonces, la programación orientada a objetos 17 00:01:49,730 --> 00:01:50,430 ¿Vale? 18 00:01:50,590 --> 00:01:54,230 O object oriented programming 19 00:01:54,230 --> 00:01:55,409 ¿Vale? En inglés 20 00:01:55,409 --> 00:01:58,290 Es un paradigma de programación 21 00:01:58,290 --> 00:02:00,069 ¿Vale? Cuya estructura principal 22 00:02:00,069 --> 00:02:02,010 Es esta cosa llamada objeto 23 00:02:02,010 --> 00:02:02,609 ¿Vale? 24 00:02:03,790 --> 00:02:05,049 Tenemos que 25 00:02:05,049 --> 00:02:07,290 Trabajar un poco sobre 26 00:02:07,290 --> 00:02:09,590 El concepto de objeto 27 00:02:09,590 --> 00:02:11,550 Porque es la base, digamos 28 00:02:11,550 --> 00:02:13,330 con el que luego vamos a programar 29 00:02:13,330 --> 00:02:14,469 y tenemos que entender 30 00:02:14,469 --> 00:02:17,849 si en algún momento nos queda claro 31 00:02:17,849 --> 00:02:18,729 que es un objeto 32 00:02:18,729 --> 00:02:21,270 es importante que me lo digáis 33 00:02:21,270 --> 00:02:22,909 ahora, las próximas veces 34 00:02:22,909 --> 00:02:24,530 lo repetiremos 35 00:02:24,530 --> 00:02:26,530 haremos ejemplos 36 00:02:26,530 --> 00:02:29,789 intentemos darle una definición 37 00:02:29,789 --> 00:02:31,169 pero si aún así 38 00:02:31,169 --> 00:02:33,250 o si os quedan dudas 39 00:02:33,250 --> 00:02:34,909 es importante que me lo preguntéis 40 00:02:34,909 --> 00:02:37,430 yo no veo muy bien la diferencia 41 00:02:37,430 --> 00:02:39,650 entre clase y objeto, pues lo hablamos 42 00:02:39,650 --> 00:02:43,250 el elemento estructural 43 00:02:43,250 --> 00:02:45,030 principal que teníamos 44 00:02:45,030 --> 00:02:47,030 antes era la función, la hemos visto ahora 45 00:02:47,030 --> 00:02:49,270 entonces todo se basaba en funciones 46 00:02:49,270 --> 00:02:50,490 que al fin y al cabo 47 00:02:50,490 --> 00:02:53,069 nosotros hemos programado mucho sin funciones 48 00:02:53,069 --> 00:02:54,729 la programación es esa 49 00:02:54,729 --> 00:02:56,770 yo podía hacer un main gigantesco 50 00:02:56,770 --> 00:02:58,430 sin llamar ninguna función 51 00:02:58,430 --> 00:02:59,310 ningún problema 52 00:02:59,310 --> 00:03:02,389 el problema es que cuando quería 53 00:03:02,389 --> 00:03:04,150 que mi código fuera 54 00:03:04,150 --> 00:03:06,569 parametrizado, que tuviera parámetros 55 00:03:06,569 --> 00:03:08,090 que hiciera cosas 56 00:03:08,090 --> 00:03:10,949 En dependiendo de si el parámetro vale una cosa o otra 57 00:03:10,949 --> 00:03:14,189 Pues entonces ya con el main solo se me queda corto 58 00:03:14,189 --> 00:03:16,270 Y necesito las funciones 59 00:03:16,270 --> 00:03:17,050 ¿Vale? 60 00:03:18,310 --> 00:03:22,169 ¿Qué mejoras aporta la programación orientada a objetos? 61 00:03:22,330 --> 00:03:22,889 Es decir, ¿vale? 62 00:03:22,969 --> 00:03:24,009 ¿Y por qué vamos por ahí? 63 00:03:24,090 --> 00:03:24,849 ¿Qué nos esperamos? 64 00:03:26,710 --> 00:03:27,490 Estas, ¿vale? 65 00:03:27,610 --> 00:03:28,129 Análisis 66 00:03:28,129 --> 00:03:30,469 La mente humana piensa más fácilmente en objetos 67 00:03:30,469 --> 00:03:32,729 Que en procesos y datos de forma separada 68 00:03:32,729 --> 00:03:33,389 ¿Vale? 69 00:03:33,389 --> 00:03:55,009 Se ha visto cuando se empezó a crear la programación de estos objetos que la mente humana suele pensar en objetos, en entidades que tienen juntas que son y que hacen. 70 00:03:55,009 --> 00:04:01,909 Cuando vosotros pensáis a un animal, cuando vosotros pensáis a una persona, cuando vosotros pensáis a un cuadrado 71 00:04:01,909 --> 00:04:09,250 Vuestra mente, en un cierto sentido, tiende a asociar lo que es y qué se puede hacer sobre él 72 00:04:09,250 --> 00:04:11,689 ¿Cuadrado? ¿Qué es? 73 00:04:12,069 --> 00:04:15,889 Es una figura geométrica con un lado, que todos los lados son iguales 74 00:04:15,889 --> 00:04:17,610 ¿Y qué puedo hacer sobre él? 75 00:04:17,610 --> 00:04:20,850 Puedo calcular el área, puedo calcular el perímetro 76 00:04:20,850 --> 00:04:25,050 Una persona, ¿qué es una persona? 77 00:04:25,230 --> 00:04:27,829 Pues una persona que es un ser 78 00:04:27,829 --> 00:04:29,329 Es una entidad que tiene 79 00:04:29,329 --> 00:04:30,889 Estas particulares 80 00:04:30,889 --> 00:04:33,389 Características, un nombre 81 00:04:33,389 --> 00:04:34,990 Una altura, un peso 82 00:04:34,990 --> 00:04:36,829 Un... no sé 83 00:04:36,829 --> 00:04:39,069 Lo que queráis vosotros 84 00:04:39,069 --> 00:04:40,850 Y 85 00:04:40,850 --> 00:04:42,730 ¿Qué puede hacer esta persona? 86 00:04:42,850 --> 00:04:45,149 No sé, un momento, puede saludar 87 00:04:45,149 --> 00:04:47,069 Puede comprar algo 88 00:04:47,069 --> 00:04:49,209 Puede moverse, puede... no sé 89 00:04:49,209 --> 00:04:50,769 ¿Vale? Claramente 90 00:04:50,769 --> 00:04:53,689 Dependiendo de que estamos nosotros programando 91 00:04:53,689 --> 00:04:55,069 Y que vamos a programar 92 00:04:55,069 --> 00:04:57,850 Pues nos interesarán más algunas características 93 00:04:57,850 --> 00:04:59,610 Y algunas funciones que otras 94 00:04:59,610 --> 00:05:00,350 ¿Vale? 95 00:05:00,670 --> 00:05:05,230 Si yo estoy programando un sistema de viajes en avión 96 00:05:05,230 --> 00:05:08,769 No me interesa mucho que una persona pueda saludar 97 00:05:09,610 --> 00:05:10,250 ¿Para qué? 98 00:05:10,930 --> 00:05:11,110 ¿Vale? 99 00:05:11,550 --> 00:05:14,569 Pero me puede interesar su nombre, apellido y DNI 100 00:05:14,569 --> 00:05:16,170 Sí, eso es como característica 101 00:05:16,170 --> 00:05:18,430 Porque cuando vuela luego tendrá que tener asociado eso 102 00:05:18,430 --> 00:05:23,910 Y me podrá interesar la posibilidad de desplazar físicamente esa persona 103 00:05:23,910 --> 00:05:26,310 Tendré una variable que me dice dónde está 104 00:05:26,310 --> 00:05:29,649 Y tendré una función o un método 105 00:05:29,649 --> 00:05:31,209 ¿Vale? Se reconoce que es un método 106 00:05:31,209 --> 00:05:33,870 Que me puede cambiar la posición donde está 107 00:05:33,870 --> 00:05:37,949 Para que yo pueda decir que si tú haces un vuelo desde Madrid a Pisa 108 00:05:37,949 --> 00:05:42,370 Antes tu localización era Madrid 109 00:05:42,370 --> 00:05:44,449 Y ahora te la cambia a Pisa porque estás movido 110 00:05:44,449 --> 00:05:46,529 No sé, me estoy inventando todo, ¿vale? 111 00:05:46,529 --> 00:06:06,529 Pero la idea es un poco pensar en esto de aquí. Y esta forma de pensar las cosas en objetos, en entidades que tienen unas características y unas funcionalidades todo junto, es más fácil de pensar para nosotros seres humanos, ¿vale? 112 00:06:06,529 --> 00:06:19,529 Entonces, es más fácil pensar en esto que pensar en datos por una parte y procesos en otras, que era como se pensaba cuando se utilizaba la programación estructural, ¿vale? 113 00:06:20,670 --> 00:06:26,310 Segunda cosa, escalabilidad, ¿vale? Es más fácil añadir nuevas funcionalidades o ampliar las que ya existen. 114 00:06:26,310 --> 00:06:43,670 Cuando yo trabajo en objetos, trabajo con este paradigma, mejorar en un cierto sentido, añadir funcionalidades, añadir, aumentar, escalar el problema, ¿vale? Cuando se habla de escalar el problema es hacer el problema más grande, ¿vale? 115 00:06:43,670 --> 00:06:56,790 Es decir, añadir números de clientes, añadir, no sé, que antes yo trabajaba solo en una región y ahora quiero llegar a nivel nacional y cosas por el estilo. 116 00:06:57,670 --> 00:07:06,910 La programación orientada a objetos me da recursos, me da herramientas más fáciles para poder hacer este tipo de proceso. 117 00:07:06,910 --> 00:07:12,449 Puedo pillar un objeto que ya existe y extenderlo 118 00:07:12,449 --> 00:07:14,509 Y añadirle cosas 119 00:07:14,509 --> 00:07:23,889 Yo tenía personas, pero ahora quiero crear la entidad, el objeto, el concepto de trabajador 120 00:07:23,889 --> 00:07:26,310 Y sé que el trabajador es una persona 121 00:07:26,310 --> 00:07:29,009 Entonces pillo todo lo que tiene una persona 122 00:07:29,009 --> 00:07:33,370 Y además le añado lo propio de un trabajador 123 00:07:33,370 --> 00:07:38,129 Un trabajador sigue teniendo nombre, apellido y DNI 124 00:07:38,129 --> 00:07:39,389 Como todas las personas 125 00:07:39,389 --> 00:07:41,370 Pero además tendrá trabajo 126 00:07:41,370 --> 00:07:44,529 No todas las personas tienen trabajo 127 00:07:44,529 --> 00:07:46,209 Para hacer un ejemplo 128 00:07:46,209 --> 00:07:48,610 El trabajador sigue teniendo trabajo 129 00:07:48,610 --> 00:07:50,029 Entonces es como una extensión 130 00:07:50,029 --> 00:07:53,689 Se puede escalar el problema 131 00:07:53,689 --> 00:07:55,649 Y también reutilizar el código 132 00:07:55,649 --> 00:08:00,110 Como yo tengo los objetos que están empaquetados 133 00:08:00,110 --> 00:08:01,589 Con tus características 134 00:08:01,589 --> 00:08:02,870 Y las propiedades 135 00:08:02,870 --> 00:08:05,870 Las funcionalidades 136 00:08:05,870 --> 00:08:07,350 Que tienen este tipo de objeto 137 00:08:07,350 --> 00:08:09,009 Reutilizar 138 00:08:09,009 --> 00:08:11,529 El código que me hace una determinada cosa 139 00:08:11,529 --> 00:08:12,329 Es mucho más fácil 140 00:08:12,329 --> 00:08:14,509 Porque ya está organizado 141 00:08:14,509 --> 00:08:17,329 En programación 142 00:08:17,329 --> 00:08:18,550 Reutilizar 143 00:08:18,550 --> 00:08:21,269 Código es fundamental 144 00:08:21,269 --> 00:08:22,389 ¿Vale? 145 00:08:22,930 --> 00:08:24,550 Lo que no se quiere en programación 146 00:08:24,550 --> 00:08:27,329 Es que cada vez se reinvente la rueda 147 00:08:27,329 --> 00:08:29,509 Se reinvente la misma cosa 148 00:08:29,509 --> 00:08:31,689 ¿Vale? No quiero que cada vez 149 00:08:31,689 --> 00:08:33,149 Que empiece un proyecto nuevo 150 00:08:33,149 --> 00:08:35,269 Empezar otra vez desde String 151 00:08:35,269 --> 00:08:37,389 Venga, me hago mi implementación de String 152 00:08:37,389 --> 00:08:39,610 Así luego puedo hacer cadenas de caracteres 153 00:08:39,610 --> 00:08:41,090 No, String ya existe 154 00:08:41,090 --> 00:08:42,149 Y lo usamos 155 00:08:42,149 --> 00:08:44,950 Ah, me voy a hacer un programa que lee desde teclado 156 00:08:44,950 --> 00:08:47,490 No, ya existe Scanner, reutiliza Scanner 157 00:08:47,490 --> 00:08:49,470 Todo lo que estamos utilizando nosotros 158 00:08:49,470 --> 00:08:50,769 Que no sabemos de dónde viene 159 00:08:50,769 --> 00:08:51,970 Pero aún lo usamos 160 00:08:51,970 --> 00:08:55,169 Scanner, String, Println 161 00:08:55,169 --> 00:08:56,250 Cosa por estilo 162 00:08:56,250 --> 00:08:58,769 Lo que estamos haciendo en realidad 163 00:08:58,769 --> 00:09:00,809 es reutilizar código, código que está 164 00:09:00,809 --> 00:09:02,389 escondido en un cierto sentido 165 00:09:02,389 --> 00:09:03,730 ¿vale? está 166 00:09:03,730 --> 00:09:06,710 guardado dentro 167 00:09:06,710 --> 00:09:08,809 del API, dentro de la cosa de acá 168 00:09:08,809 --> 00:09:10,809 de las funcionalidades 169 00:09:10,809 --> 00:09:12,830 que me da Java por defecto 170 00:09:12,830 --> 00:09:15,269 y yo lo reutilizo sin necesidad 171 00:09:15,269 --> 00:09:16,870 de ser yo que lo implemente otra vez 172 00:09:16,870 --> 00:09:19,250 la idea es que lo que yo produzco 173 00:09:19,250 --> 00:09:20,750 luego sea posible 174 00:09:20,750 --> 00:09:22,610 reutilizarlo en otros 175 00:09:22,610 --> 00:09:24,809 proyectos, en otros sistemas 176 00:09:24,809 --> 00:09:27,149 en otros programas 177 00:09:27,149 --> 00:09:28,889 que hace mi compañía sin necesidad 178 00:09:28,889 --> 00:09:30,850 de crearlo otra vez, porque ya existe 179 00:09:30,850 --> 00:09:32,450 se puede mejorar 180 00:09:32,450 --> 00:09:34,710 se puede optimizar 181 00:09:34,710 --> 00:09:36,929 se puede sobreescribir 182 00:09:36,929 --> 00:09:38,850 parte diciendo, mira este método 183 00:09:38,850 --> 00:09:41,049 de aquí funciona bien, pero este otro método 184 00:09:41,049 --> 00:09:43,009 funciona de gulín, re hago 185 00:09:43,009 --> 00:09:43,990 solo esta parte de aquí 186 00:09:43,990 --> 00:09:46,870 pero la idea es reutilizar 187 00:09:46,870 --> 00:09:48,909 ¿si? entonces todas estas 188 00:09:48,909 --> 00:09:50,490 son cosas, son ventajas que me 189 00:09:50,490 --> 00:09:52,789 aporta la programación ahorita 190 00:09:52,789 --> 00:09:55,110 de objetos y que quiero poder 191 00:09:55,110 --> 00:09:57,409 utilizar 192 00:09:57,409 --> 00:10:00,470 entonces la característica 193 00:10:00,470 --> 00:10:02,529 de la programación de objetos en general 194 00:10:02,529 --> 00:10:04,570 creamos clases que definen 195 00:10:04,570 --> 00:10:06,149 unos datos y un comportamiento 196 00:10:06,149 --> 00:10:08,129 y creamos objetos de estas clases 197 00:10:08,129 --> 00:10:10,490 esta es la idea fundamental de la programación 198 00:10:10,490 --> 00:10:10,929 de objetos 199 00:10:10,929 --> 00:10:13,690 yo lo que creo es una clase 200 00:10:13,690 --> 00:10:15,990 de hecho nosotros empezamos siempre con public 201 00:10:15,990 --> 00:10:16,509 clase 202 00:10:16,509 --> 00:10:20,309 una clase 203 00:10:20,309 --> 00:10:21,289 que es en general 204 00:10:21,289 --> 00:10:23,830 es una representación 205 00:10:23,830 --> 00:10:25,850 abstracta 206 00:10:25,850 --> 00:10:27,529 de un objeto 207 00:10:27,529 --> 00:10:29,970 ¿vale? cuando yo creo la clase 208 00:10:29,970 --> 00:10:32,370 cuadrado, no estoy creando 209 00:10:32,370 --> 00:10:34,049 un cuadrado concreto 210 00:10:34,049 --> 00:10:35,850 estoy creando 211 00:10:35,850 --> 00:10:37,950 todos los posibles 212 00:10:37,950 --> 00:10:39,850 cuadrados del mundo 213 00:10:39,850 --> 00:10:42,409 estoy creando un molde 214 00:10:42,409 --> 00:10:44,129 ¿vale? la idea 215 00:10:44,129 --> 00:10:45,990 de que a partir del 216 00:10:45,990 --> 00:10:48,250 concepto abstracto de cuadrado 217 00:10:48,250 --> 00:10:49,990 que tendrá sus características 218 00:10:49,990 --> 00:10:52,009 porque todos los cuadrados tienen 219 00:10:52,009 --> 00:10:53,809 una determinada característica, por ejemplo 220 00:10:53,809 --> 00:10:59,690 lado a partir de allí luego crearé cuantos cuadrados reales cuantos 221 00:10:59,690 --> 00:11:05,669 objetos cuadrados quiera yo que pero serán instancias particulares de este 222 00:11:05,669 --> 00:11:11,169 cuadrado me explico en cierto sentido 223 00:11:11,169 --> 00:11:13,970 20 224 00:11:13,970 --> 00:11:17,710 cuando yo pienso cuadrado este es un cuadrado 225 00:11:17,710 --> 00:11:19,929 Cuadrado del lado 1 226 00:11:19,929 --> 00:11:22,470 Pero oye, este también es un cuadrado 227 00:11:22,470 --> 00:11:26,850 Cuadrado del lado 2 228 00:11:26,850 --> 00:11:28,409 ¿Sí? 229 00:11:28,929 --> 00:11:30,049 Y luego está esto 230 00:11:30,049 --> 00:11:32,870 ¿Un cuadrado? 231 00:11:33,149 --> 00:11:34,250 Bueno, más o menos 232 00:11:34,250 --> 00:11:35,409 Cuadrado del lado 7 233 00:11:35,409 --> 00:11:36,570 ¿Vale? 234 00:11:39,289 --> 00:11:44,090 Son todos cuadrados, ¿vale? 235 00:11:44,409 --> 00:11:46,809 Ahora, ¿cuál es la idea general del cuadrado? 236 00:11:46,809 --> 00:11:49,230 La idea general del cuadrado es una figura geométrica 237 00:11:49,230 --> 00:11:51,029 que tenga los lados todos iguales, ¿vale? 238 00:11:51,330 --> 00:11:51,750 de L 239 00:11:51,750 --> 00:11:55,090 entonces mi idea es crear 240 00:11:55,090 --> 00:11:56,950 una clase, ¿vale? 241 00:11:57,169 --> 00:11:59,450 un programa 242 00:11:59,450 --> 00:12:01,389 que considere en general 243 00:12:01,389 --> 00:12:03,129 un cuadrado de lado L 244 00:12:03,129 --> 00:12:05,110 ¿vale? y luego 245 00:12:05,110 --> 00:12:07,409 a partir de esta idea general 246 00:12:07,409 --> 00:12:09,269 la clase, puedo 247 00:12:09,269 --> 00:12:11,389 crear cuantas estancias quiero 248 00:12:11,389 --> 00:12:13,210 de 249 00:12:13,210 --> 00:12:14,269 esta clase 250 00:12:14,269 --> 00:12:17,309 que son objetos reales 251 00:12:17,309 --> 00:12:24,389 Habrá el objeto que es el cuadrado del lado 1, el objeto que es cuadrado del lado 2, el objeto que es cuadrado del lado 7 252 00:12:24,389 --> 00:12:27,769 Es más, puede haber dos cuadrados del lado 1 253 00:12:27,769 --> 00:12:32,840 Son dos objetos distintos, ¿vale? 254 00:12:33,299 --> 00:12:44,000 Todos, pero tendrán las mismas características, las mismas funcionalidades y los mismos valores, digamos, como decirlo 255 00:12:44,000 --> 00:12:52,700 características atributos cosas que los definen todos tendrán siempre las mismas tendrán lados 256 00:12:52,700 --> 00:13:00,259 y tendrá la funcionalidad calcular área y calcular perímetro todos los tienen pero claro calcular la 257 00:13:00,259 --> 00:13:07,000 área sobre este objeto no es lo mismo que calcular la vez sobre este objeto darán resultados distintos 258 00:13:07,000 --> 00:13:11,100 Pero el procedimiento con que se calcula el área es lo mismo 259 00:13:11,100 --> 00:13:14,559 Entonces, la idea de lo que puede hacer 260 00:13:14,559 --> 00:13:18,659 Que tiene un lado, calcular el área, calcular el perímetro 261 00:13:18,659 --> 00:13:20,620 Iría definida en la clase 262 00:13:20,620 --> 00:13:25,000 La clase me define que los cuadrados tienen lado 263 00:13:25,000 --> 00:13:29,139 Y que los cuadrados tienen un método que es calcular área 264 00:13:29,139 --> 00:13:31,279 Y un método que es calcular perímetros 265 00:13:31,279 --> 00:13:34,960 A partir de esta plantilla general 266 00:13:34,960 --> 00:13:39,039 Que me puede crear todos los cuadrados posibles del mundo 267 00:13:39,039 --> 00:13:41,720 Yo voy a crear objetos 268 00:13:41,720 --> 00:13:45,559 Que son instancias particulares de una clase 269 00:13:45,559 --> 00:13:48,039 No es un cuadrado genérico 270 00:13:48,039 --> 00:13:49,980 Es el cuadrado de lado 1 271 00:13:49,980 --> 00:13:52,639 Es un cuadrado de lado 1 272 00:13:52,639 --> 00:13:55,519 Porque puedo tener 3 objetos distintos 273 00:13:55,519 --> 00:13:58,059 Y los 3 sean cuadrados de lado 1 274 00:13:58,059 --> 00:13:58,480 ¿Por qué no? 275 00:13:59,860 --> 00:14:01,500 Yo me he creado el molde 276 00:14:01,500 --> 00:14:04,179 Con este molde puedo crear todos los cuadrados que quiero 277 00:14:04,179 --> 00:14:05,740 Y luego voy creando objetos 278 00:14:05,740 --> 00:14:07,440 Que son cuadrados 279 00:14:07,440 --> 00:14:13,299 Cuadrados, objetos 280 00:14:13,299 --> 00:14:15,259 ¿Vale? La diferencia entre objeto y clase 281 00:14:15,259 --> 00:14:17,440 La clase es 282 00:14:17,440 --> 00:14:19,559 Más bien la abstracción en general 283 00:14:19,559 --> 00:14:21,120 La definición 284 00:14:21,120 --> 00:14:23,820 De lo que estoy modelizando 285 00:14:23,820 --> 00:14:25,659 Y el objeto es 286 00:14:25,659 --> 00:14:26,320 Un 287 00:14:26,320 --> 00:14:29,580 Objeto físico de esa clase 288 00:14:29,580 --> 00:14:30,440 ¿Sí? 289 00:14:31,019 --> 00:14:32,600 No sé si me explico más o menos 290 00:14:32,600 --> 00:14:34,539 Haremos más ejemplos 291 00:14:34,539 --> 00:14:43,340 Y la idea es un poco filosóficos entre ellos, entonces hay que entenderlo, ¿vale? 292 00:14:44,159 --> 00:14:48,559 Los objetos colaboran entre ellos para conseguir algo, ¿vale? 293 00:14:48,559 --> 00:14:56,100 Entonces yo en mi programa lo que tendré que hacer es crear varios objetos, objetos de distintos tipos, depende del programa que estoy haciendo, ¿vale? 294 00:14:56,559 --> 00:15:03,559 Que tengo un programa muy complejo de, como hemos dicho antes, de viajes, pues tendré el objeto persona que representa a la persona que vuelan. 295 00:15:03,559 --> 00:15:05,559 Vuelan, tendré el objeto piloto 296 00:15:05,559 --> 00:15:07,299 O la clase piloto 297 00:15:07,299 --> 00:15:09,299 Que representa los objetos pilotos 298 00:15:09,299 --> 00:15:11,019 Que son los que conducen los aviones 299 00:15:11,019 --> 00:15:12,960 Tendré la clase avión, tendré la clase 300 00:15:12,960 --> 00:15:14,700 No lo sé, aeropuerto 301 00:15:14,700 --> 00:15:16,639 Tendré lo que me sirve 302 00:15:16,639 --> 00:15:18,659 Para crear el sistema y que luego 303 00:15:18,659 --> 00:15:21,000 Todos estos objetos colaboran 304 00:15:21,000 --> 00:15:23,259 Entre ellos, se manden mensajes 305 00:15:23,259 --> 00:15:24,720 Entre ellos, ¿vale? 306 00:15:24,740 --> 00:15:25,519 Que es lo siguiente 307 00:15:25,519 --> 00:15:29,220 Entre objetos la forma de colaborar es pasándose mensajes 308 00:15:29,220 --> 00:15:29,799 ¿Vale? 309 00:15:30,240 --> 00:15:33,059 El pasarse mensajes en el mundo de la programación 310 00:15:33,059 --> 00:15:34,820 A objetos es sustancialmente 311 00:15:34,820 --> 00:15:35,840 Llamar métodos 312 00:15:35,840 --> 00:15:37,759 Cuando yo llamo un método 313 00:15:37,759 --> 00:15:41,059 De una función o una procedura 314 00:15:41,059 --> 00:15:42,679 ¿Vale? Que aquí se llamarán métodos 315 00:15:42,679 --> 00:15:44,659 De otro objeto, le estoy 316 00:15:44,659 --> 00:15:46,720 En un cierto sentido mandando un mensaje 317 00:15:46,720 --> 00:15:48,320 Está mandando un mensaje a este objeto 318 00:15:48,320 --> 00:15:49,879 De decir, oye mira, calcula tu área 319 00:15:49,879 --> 00:15:51,840 Vale, mi área está aquí, y me la devuelve 320 00:15:51,840 --> 00:15:54,240 ¿Sí? 321 00:15:56,240 --> 00:15:58,340 Cada clase va a ocuparse de lo que es 322 00:15:58,340 --> 00:16:00,600 Su responsabilidad, esto es importante también 323 00:16:00,600 --> 00:16:02,480 Si yo hago la clase cuadrado 324 00:16:02,480 --> 00:16:05,879 Todo lo que está dentro de la clase cuadrado 325 00:16:05,879 --> 00:16:07,919 Está relacionado con los cuadrados 326 00:16:07,919 --> 00:16:08,799 ¿Vale? 327 00:16:09,860 --> 00:16:11,659 Dentro de la clase cuadrado tiene que estar 328 00:16:11,659 --> 00:16:14,679 Solo lo que tiene que ver con el cuadrado 329 00:16:14,679 --> 00:16:17,440 Y todo lo que tiene que ver con el cuadrado 330 00:16:17,440 --> 00:16:20,000 No sé si me explico lo que quiero decir 331 00:16:20,000 --> 00:16:20,940 ¿Vale? 332 00:16:21,399 --> 00:16:24,220 Si tengo otro método que calcula la área del triángulo 333 00:16:24,220 --> 00:16:26,240 No tendrá que estar en la clase cuadrado 334 00:16:26,240 --> 00:16:28,399 Tendrá que estar en la clase triángulo 335 00:16:28,399 --> 00:16:29,659 Cada uno a suyo 336 00:16:29,659 --> 00:16:30,299 ¿Vale? 337 00:16:30,480 --> 00:16:31,379 De esta forma 338 00:16:31,379 --> 00:16:38,940 Aíslo bien las funcionalidades y las características de cada uno de los objetos 339 00:16:38,940 --> 00:16:41,960 De las clases con las que voy trabajando 340 00:16:41,960 --> 00:16:44,860 Y entonces, cuando sé que tengo que modificar algo 341 00:16:44,860 --> 00:16:46,980 Pues sé dónde tengo que ir a buscarlo 342 00:16:46,980 --> 00:16:50,139 Sé quién es el responsable de esa cosa 343 00:16:50,139 --> 00:16:52,299 No sé si me explico 344 00:16:52,299 --> 00:16:53,460 ¿Dudas? 345 00:16:54,639 --> 00:16:55,840 Ejemplo que viene por aquí 346 00:16:55,840 --> 00:16:58,980 Un coche puede ser un ejemplo de clase, ¿vale? 347 00:16:58,980 --> 00:17:02,120 El coche en general es una clase, ¿vale? 348 00:17:02,580 --> 00:17:06,140 ¿Qué características puede tener un coche? 349 00:17:06,460 --> 00:17:10,099 Pues, por ejemplo, puede tener color, marca, modelo, matrícula 350 00:17:10,099 --> 00:17:15,160 Todo depende de qué estoy modelizando, ¿vale? 351 00:17:15,160 --> 00:17:22,619 Si estoy modelizando un vendedor, un concesionario de coches 352 00:17:22,619 --> 00:17:24,799 Pues entonces a lo mejor el color es fundamental 353 00:17:24,799 --> 00:17:32,880 Si estoy modelizando un sistema de tráfico automático por la ciudad 354 00:17:32,880 --> 00:17:35,940 Pues a lo mejor que el coche sea verde o naranja no me interesa 355 00:17:35,940 --> 00:17:43,660 Pero todo depende de lo que estoy representando con esta clase 356 00:17:43,660 --> 00:17:47,420 ¿Qué funcionalidades puede tener un coche? 357 00:17:47,519 --> 00:17:49,700 Por ejemplo, desplazarse o parar 358 00:17:49,700 --> 00:17:51,799 Si yo le digo desplazarse, se empieza a mover 359 00:17:51,799 --> 00:17:54,599 Si yo le digo parar, pues está quieto en algún lado 360 00:17:54,599 --> 00:17:55,960 o aparca, ¿vale? 361 00:17:57,160 --> 00:17:58,440 una clase de coche es 362 00:17:58,440 --> 00:18:00,500 responsabilidad de manejar todo aquello que 363 00:18:00,500 --> 00:18:01,920 tenga que ver con el coche 364 00:18:01,920 --> 00:18:04,519 un garaje con muchos coches 365 00:18:04,519 --> 00:18:06,220 puede hacer uso de ellas 366 00:18:06,220 --> 00:18:08,599 o un conductor también, ¿vale? 367 00:18:08,759 --> 00:18:10,779 es decir, yo podría crear 368 00:18:10,779 --> 00:18:12,759 además de la clase coche, una clase 369 00:18:12,759 --> 00:18:14,420 garaje o una clase conductor 370 00:18:14,420 --> 00:18:16,400 que estén de alguna forma 371 00:18:16,400 --> 00:18:18,460 relacionados con coche, porque el garaje 372 00:18:18,460 --> 00:18:20,680 tendrá como clientes coches 373 00:18:20,680 --> 00:18:22,319 que vienen y entran en el garaje 374 00:18:22,319 --> 00:18:24,180 o el conductor 375 00:18:24,180 --> 00:18:30,880 será asociado a un coche y dirá yo como conductor puedo conducir este coche y puede hacer que se 376 00:18:30,880 --> 00:18:36,019 desplace entonces cuando el conductor quiere utilizar el coche pues le mandará un mensaje 377 00:18:36,019 --> 00:18:44,240 de desplázate y el coche se moverá para hacer un ejemplo estamos cuando queramos que un coche 378 00:18:44,240 --> 00:18:49,819 se desplace en un garaje tendremos que comunicarnos con el coche específicos y darle la dirección a la 379 00:18:49,819 --> 00:18:55,980 que queremos que se desplaza por ejemplo si esto es un poco un ejemplo de lo que 380 00:18:55,980 --> 00:19:01,619 se dice dudas podemos hacer otro ejemplo 381 00:19:01,619 --> 00:19:06,000 decime vosotros una clase un objeto un algo que queréis 382 00:19:06,000 --> 00:19:11,599 modelizar un 383 00:19:11,599 --> 00:19:18,059 otro coche coche persona venga persona entonces qué 384 00:19:18,059 --> 00:19:19,700 Característica tiene persona 385 00:19:19,700 --> 00:19:23,240 Dene y nombre, apellido 386 00:19:23,240 --> 00:19:26,039 ¿Qué más? 387 00:19:27,539 --> 00:19:28,059 Dirección 388 00:19:28,059 --> 00:19:29,240 Queremos saber dónde vive 389 00:19:29,240 --> 00:19:29,720 No sé 390 00:19:29,720 --> 00:19:34,380 Dependerá de lo que quiero modelizar 391 00:19:34,380 --> 00:19:34,799 Así 392 00:19:34,799 --> 00:19:38,259 Definir una persona en general 393 00:19:38,259 --> 00:19:39,400 Es complejo, ¿vale? 394 00:19:39,859 --> 00:19:42,240 A lo mejor hay características 395 00:19:42,240 --> 00:19:44,359 Que no me sirven 396 00:19:44,359 --> 00:19:44,640 ¿Vale? 397 00:19:45,119 --> 00:19:47,299 Depende de por qué lo estoy haciendo 398 00:19:47,299 --> 00:19:49,539 Claramente, y haré un estudio 399 00:19:49,539 --> 00:19:51,559 Del programa que estoy haciendo 400 00:19:51,559 --> 00:19:53,819 Y diré, mira, una persona para mí es 401 00:19:53,819 --> 00:19:55,380 Esta cosa aquí 402 00:19:55,380 --> 00:19:57,599 Porque necesito saber esto y esto 403 00:19:57,599 --> 00:19:59,759 Porque lo uso dentro de mi programa 404 00:19:59,759 --> 00:20:01,160 Si una 405 00:20:01,160 --> 00:20:03,940 Característica no la utilizo 406 00:20:03,940 --> 00:20:05,480 Pues no lo pongo 407 00:20:05,480 --> 00:20:07,579 ¿Sí? ¿Y qué puede hacer una persona? 408 00:20:16,490 --> 00:20:17,430 Siempre depende 409 00:20:17,430 --> 00:20:18,490 De lo que vamos a hacer 410 00:20:18,490 --> 00:20:21,009 En general, lo pienso así, pues puede comer 411 00:20:21,009 --> 00:20:22,910 Entonces, puede 412 00:20:22,910 --> 00:20:25,769 Dormir, qué sé yo 413 00:20:25,769 --> 00:20:27,750 Venir a clase, depende de lo que estoy haciendo 414 00:20:27,750 --> 00:20:29,529 A lo mejor si estoy hablando de una universidad 415 00:20:29,529 --> 00:20:31,690 O de una escuela, pues a lo mejor 416 00:20:31,690 --> 00:20:33,609 Tendré la función atender a clase 417 00:20:33,609 --> 00:20:35,809 O falta, o qué sé yo 418 00:20:35,809 --> 00:20:37,470 ¿Sí? ¿Dudas? 419 00:20:39,789 --> 00:20:41,230 Vale, entonces las clases 420 00:20:41,230 --> 00:20:43,829 Una clase es lo que en un lenguaje 421 00:20:43,829 --> 00:20:46,029 De programación nos va a permitir 422 00:20:46,029 --> 00:20:48,069 Definir o construir uno o varios objetos 423 00:20:48,069 --> 00:20:49,369 Es un molde, ¿vale? 424 00:20:49,470 --> 00:20:51,849 Es la idea que a partir de allí 425 00:20:51,849 --> 00:20:53,130 construyo objetos 426 00:20:53,130 --> 00:20:55,849 pero los objetos no los puedo construir cada uno 427 00:20:55,849 --> 00:20:56,750 como le da la gana 428 00:20:56,750 --> 00:20:59,390 los objetos serán todos iguales 429 00:20:59,390 --> 00:21:02,289 porque todos están hechos por el mismo molde 430 00:21:02,289 --> 00:21:04,109 luego tendrán valores 431 00:21:04,109 --> 00:21:05,809 distintos en sus características 432 00:21:05,809 --> 00:21:08,329 pero todos tendrán las mismas características 433 00:21:08,329 --> 00:21:10,309 todos los cuadrados tienen lado 434 00:21:10,309 --> 00:21:12,130 luego el lado valdrá 7 435 00:21:12,130 --> 00:21:14,289 8, 97, pero todos tendrán lado 436 00:21:14,289 --> 00:21:16,630 todos los rectángulos 437 00:21:16,630 --> 00:21:17,609 tendrán dos lados 438 00:21:17,609 --> 00:21:19,069 el lado corto y el lado largo 439 00:21:19,069 --> 00:21:21,109 pero no tienen que tener 440 00:21:21,109 --> 00:21:23,349 Luego, que uno tenga 1 y 7 441 00:21:23,349 --> 00:21:24,809 Y uno tenga 25 y 3 442 00:21:24,809 --> 00:21:25,589 Me da igual 443 00:21:25,589 --> 00:21:27,029 ¿Sí? 444 00:21:27,849 --> 00:21:28,329 ¿Dudas? 445 00:21:30,369 --> 00:21:32,589 Podemos decir que son moldes para construir objetos 446 00:21:32,589 --> 00:21:35,950 Estos moldes tienen que ser escritos o programados 447 00:21:35,950 --> 00:21:38,250 Y cada molde va a tener unas características 448 00:21:38,250 --> 00:21:40,109 Por ejemplo, nombres, tributos y métodos 449 00:21:40,109 --> 00:21:40,329 ¿Vale? 450 00:21:41,509 --> 00:21:43,789 Es decir, que cuando yo creo un molde de estrella aquí 451 00:21:43,789 --> 00:21:45,369 Cada molde tendrá un nombre 452 00:21:45,369 --> 00:21:47,190 O sea, cada clase tiene que tener un nombre 453 00:21:47,190 --> 00:21:48,890 Nombres que hemos puesto nosotros 454 00:21:48,890 --> 00:21:50,630 Nosotros normalmente ponemos ejercicio 1 455 00:21:50,630 --> 00:21:57,650 ejercicio 2 o clase persona o clase coche vale es un nombre es el nombre que 456 00:21:57,650 --> 00:22:02,750 voy a dar a esta clase además del nombre que servirá para luego referirme a ella 457 00:22:02,750 --> 00:22:08,529 y que constituirá un tipo nosotros conocemos el objeto string la clase 458 00:22:08,529 --> 00:22:13,970 string y luego string nosotros lo utilizamos como tipo cuando creamos una 459 00:22:13,970 --> 00:22:23,809 variable hacemos string mi variable entonces todos los las clases constituirán un tipo de variables 460 00:22:23,809 --> 00:22:30,650 de que se podrá devolver en una función que se podrá utilizar para hacer algo pero cuando yo 461 00:22:30,650 --> 00:22:34,910 sustancialmente estoy construyendo una clase al fin y al cabo lo que estoy definiendo es un tipo 462 00:22:34,910 --> 00:22:41,089 de datos vale y este tipo de datos luego se instancia con valores sólo que cuando es un 463 00:22:41,089 --> 00:22:43,329 entero, sus valores son 3, 4, 5 y 7 464 00:22:43,329 --> 00:22:45,309 cuando yo estancio 465 00:22:45,309 --> 00:22:46,730 un tipo, persona 466 00:22:46,730 --> 00:22:48,990 lo que estoy diciendo es que se llama 467 00:22:48,990 --> 00:22:50,569 Estefano Chiesa 468 00:22:50,569 --> 00:22:53,130 que se llama Paco, no sé qué 469 00:22:53,130 --> 00:22:55,069 Fernández, y que tiene 470 00:22:55,069 --> 00:22:57,049 37 años, y que no sé qué 471 00:22:57,049 --> 00:22:58,509 ¿sí? 472 00:23:00,759 --> 00:23:02,680 además del nombre tendrá atributos 473 00:23:02,680 --> 00:23:04,619 que son las características 474 00:23:04,619 --> 00:23:06,200 lo que nosotros hemos llamado las características 475 00:23:06,200 --> 00:23:08,279 de las clases, pues 476 00:23:08,279 --> 00:23:09,519 de los sujetos, pues 477 00:23:09,519 --> 00:23:14,619 En realidad, en terminología de programación orientada a objetos 478 00:23:14,619 --> 00:23:15,940 Se llaman atributos 479 00:23:15,940 --> 00:23:17,680 Entonces, cada clase tiene atributos 480 00:23:17,680 --> 00:23:20,559 ¿Cuáles son los atributos del cuadrado? 481 00:23:22,180 --> 00:23:23,019 El lado 482 00:23:23,019 --> 00:23:25,400 ¿Cuáles son los atributos del coche? 483 00:23:28,099 --> 00:23:29,819 Color, matrícula, etc. 484 00:23:30,319 --> 00:23:31,900 Y luego los métodos 485 00:23:31,900 --> 00:23:35,039 Los métodos es qué puede hacer esa clase 486 00:23:35,039 --> 00:23:36,420 ¿Qué puede hacer? 487 00:23:37,039 --> 00:23:40,359 Que pueden hacer los objetos de esa clase 488 00:23:40,359 --> 00:23:43,000 Que pueden hacer las instancias 489 00:23:43,000 --> 00:23:44,380 De esa clase 490 00:23:44,380 --> 00:23:46,819 ¿Dudas? 491 00:23:50,980 --> 00:23:52,019 Vale, en Java 492 00:23:52,019 --> 00:23:54,400 Una clase, por ejemplo, persona 493 00:23:54,400 --> 00:23:56,339 Se define en un fichero que se llama 494 00:23:56,339 --> 00:23:57,819 Persona.java, ¿vale? 495 00:23:57,920 --> 00:23:58,980 Eso lo hemos definido 496 00:23:58,980 --> 00:24:01,500 Veremos que luego puede no ser así 497 00:24:01,500 --> 00:24:03,720 Pero en general por ahora es así, ¿vale? 498 00:24:04,039 --> 00:24:06,500 Cuando nosotros empezamos con public class 499 00:24:06,500 --> 00:24:07,279 Persona 500 00:24:07,279 --> 00:24:10,500 Esa cosa tiene que estar escrita dentro de un fichero 501 00:24:10,500 --> 00:24:12,039 Que se llama persona.java 502 00:24:12,039 --> 00:24:14,019 ¿Vale? Y esto principalmente 503 00:24:14,019 --> 00:24:14,940 Por esto public 504 00:24:14,940 --> 00:24:16,799 Es esto 505 00:24:16,799 --> 00:24:19,880 ¿Vale? El hecho que es una clase 506 00:24:19,880 --> 00:24:21,740 Pública implica que 507 00:24:21,740 --> 00:24:23,299 Tiene que estar dentro del 508 00:24:23,299 --> 00:24:24,980 Persona.java 509 00:24:24,980 --> 00:24:27,259 Si no fuera pública podría no estar ¿Vale? 510 00:24:27,299 --> 00:24:29,279 Pero por ahora todas nuestras clases son públicas 511 00:24:29,279 --> 00:24:29,799 Por lo tanto 512 00:24:29,799 --> 00:24:33,960 La clase reservada class 513 00:24:33,960 --> 00:24:35,680 Es la que define una clase ¿Vale? 514 00:24:35,799 --> 00:24:37,299 Aquí estoy definiendo una clase 515 00:24:37,299 --> 00:24:39,519 Estoy diciendo oye mira esta es una clase 516 00:24:39,519 --> 00:24:41,019 Que es pública que se llama persona 517 00:24:41,019 --> 00:24:49,720 Este es el nombre, ¿vale? De las tres características que hemos visto antes, nombres, atributos y métodos, este es el nombre que doy a la clase. 518 00:24:51,859 --> 00:25:06,799 Luego definimos los atributos, ¿vale? Que son los datos relevantes. Por ejemplo, esto es UML, ¿vale? No sé si habéis visto ya UML, lo veréis probablemente en entorno de desarrollo, más en concreto, ¿vale? 519 00:25:06,799 --> 00:25:11,640 Pero la clase persona tiene dentro los atributos nombre y edad 520 00:25:11,640 --> 00:25:12,559 ¿Vale? 521 00:25:12,779 --> 00:25:14,319 Nombre es un string 522 00:25:14,319 --> 00:25:16,200 Edad es un int 523 00:25:16,200 --> 00:25:17,339 ¿Sí? 524 00:25:17,740 --> 00:25:20,279 Y finalmente los métodos 525 00:25:20,279 --> 00:25:20,839 ¿Vale? 526 00:25:21,099 --> 00:25:22,700 Los métodos son lo que puede hacer 527 00:25:22,700 --> 00:25:24,920 Como por ejemplo tiene el método de escribir 528 00:25:24,920 --> 00:25:27,740 Que no recibe ningún parámetro 529 00:25:27,740 --> 00:25:30,240 Y no devuelve ningún parámetro 530 00:25:30,240 --> 00:25:30,700 ¿Vale? 531 00:25:30,799 --> 00:25:33,240 Este es un método que no devuelve nada 532 00:25:33,240 --> 00:25:35,299 Es parecido a un procedimiento 533 00:25:35,299 --> 00:25:36,720 ¿Sí? 534 00:25:36,799 --> 00:25:38,880 ¿Y qué hará escribir? Pues no lo sé 535 00:25:38,880 --> 00:25:41,200 Ni idea, luego veremos 536 00:25:41,200 --> 00:25:42,440 ¿Vale? Entonces 537 00:25:42,440 --> 00:25:45,299 Si esta es un poco la idea 538 00:25:45,299 --> 00:25:47,579 De lo que quiero hacer, luego en Java 539 00:25:47,579 --> 00:25:49,579 Eso se traduce en esta cosa 540 00:25:49,579 --> 00:25:50,359 Aquí, ¿vale? 541 00:25:51,380 --> 00:25:52,839 Public class persona 542 00:25:52,839 --> 00:25:55,099 Me define que estoy creando persona 543 00:25:55,099 --> 00:25:56,599 Fijaos que esto se abre aquí 544 00:25:56,599 --> 00:25:58,519 Y se cierra al final 545 00:25:58,519 --> 00:26:00,420 Todo es clase 546 00:26:00,420 --> 00:26:01,960 ¿Vale? 547 00:26:03,180 --> 00:26:05,000 Ahora, nosotros estamos acostumbrados 548 00:26:05,000 --> 00:26:06,119 A tener el main 549 00:26:06,119 --> 00:26:08,400 Pero fijaos en esto 550 00:26:08,400 --> 00:26:10,880 Aquí estoy definiendo 551 00:26:10,880 --> 00:26:13,720 Cosas 552 00:26:13,720 --> 00:26:15,019 Son variables 553 00:26:15,019 --> 00:26:17,920 Fuera del main 554 00:26:17,920 --> 00:26:19,640 Dentro de la clase 555 00:26:19,640 --> 00:26:21,240 Pero fuera del main 556 00:26:21,240 --> 00:26:22,140 ¿Lo veis? 557 00:26:22,380 --> 00:26:25,200 Hasta ahora nosotros esto lo hacíamos todo dentro del main 558 00:26:25,200 --> 00:26:26,339 Ahora no 559 00:26:26,339 --> 00:26:28,799 Porque estas no son variables cualquiera 560 00:26:28,799 --> 00:26:29,779 Estos son los 561 00:26:29,779 --> 00:26:31,500 Atributos 562 00:26:31,500 --> 00:26:33,619 Los atributos de una clase 563 00:26:33,619 --> 00:26:36,880 Se declaran dentro de la clase 564 00:26:36,880 --> 00:26:38,539 Pero fuera de cualquier método 565 00:26:38,539 --> 00:26:40,420 ¿Vale? 566 00:26:40,900 --> 00:26:41,900 Esto serán 567 00:26:41,900 --> 00:26:45,200 La descripción general 568 00:26:45,200 --> 00:26:46,799 Del molde que me da una persona 569 00:26:46,799 --> 00:26:49,240 Para mí una persona lo que tiene de interesante 570 00:26:49,240 --> 00:26:50,880 Es nombre, edad 571 00:26:50,880 --> 00:26:53,039 Y cuando yo crearé 572 00:26:53,039 --> 00:26:54,660 Un objeto persona 573 00:26:54,660 --> 00:26:57,079 Lo que tendré que hacer es instanciar 574 00:26:57,079 --> 00:26:59,259 Estos atributos 575 00:26:59,259 --> 00:27:01,380 Tendré que decir cuál es el valor 576 00:27:01,380 --> 00:27:03,279 De su nombre y cuál es el valor 577 00:27:03,279 --> 00:27:14,559 de ciudad y yo podré tener objetos personas que tengan distintos nombres y 578 00:27:14,559 --> 00:27:20,200 distintas edades o el mismo nombres y distintas edades o distintas edades y 579 00:27:20,200 --> 00:27:24,539 mismo nombre o mismo nombre misma edad me da igual pero el concepto es que 580 00:27:24,539 --> 00:27:28,519 serán objetos distintos puedo llamar yo puedo buscar y otro 581 00:27:28,519 --> 00:27:35,240 stefano que tenga mi misma edad por ejemplo si quiero evitarlo tendré que programar que esto 582 00:27:35,240 --> 00:27:42,480 no es posible pero esto ya es avanzado y luego hemos dicho que nuestra clase persona tiene que 583 00:27:42,480 --> 00:27:49,599 tener un método de escribir vale pues entonces aquí está public voy de escribir porque es void 584 00:27:49,599 --> 00:27:55,680 porque hemos dicho que no devuelve nada y porque no pilla nada porque hemos dicho que no pilla 585 00:27:55,680 --> 00:27:56,400 Ningún parámetro 586 00:27:56,400 --> 00:27:58,420 ¿Vale? Es un ejemplo 587 00:27:58,420 --> 00:28:01,420 ¿Qué quiere decir que la persona 588 00:28:01,420 --> 00:28:02,980 Tiene el método de escribir? 589 00:28:03,119 --> 00:28:05,500 Pues no lo sé, es un ejemplo, no sirve de nada 590 00:28:05,500 --> 00:28:07,519 ¿Vale? Pero en mi programa 591 00:28:07,519 --> 00:28:09,299 Escribir tenía sentido 592 00:28:09,299 --> 00:28:10,420 Pues entonces lo pongo 593 00:28:10,420 --> 00:28:13,539 Y luego una clase puede tener 594 00:28:13,539 --> 00:28:15,559 Un método main que como hemos visto 595 00:28:15,559 --> 00:28:17,240 Es un método especial porque es el método 596 00:28:17,240 --> 00:28:19,700 De punto de acceso a mi trabajo 597 00:28:19,700 --> 00:28:21,420 ¿Vale? Entonces cuando yo 598 00:28:21,420 --> 00:28:22,799 Empiezo el programa 599 00:28:22,799 --> 00:28:24,880 Y tengo que empezar por algún lado 600 00:28:24,880 --> 00:28:26,299 ¿Por dónde empiezo? Pues por el main 601 00:28:26,299 --> 00:28:29,019 ¿Dudas? 602 00:28:34,319 --> 00:28:37,740 Hemos ya dicho que en un archivo solo puede haber una clase public 603 00:28:37,740 --> 00:28:38,400 ¿Vale? 604 00:28:38,619 --> 00:28:40,359 Entonces yo tengo public class 605 00:28:40,359 --> 00:28:41,579 Lo que sea 606 00:28:41,579 --> 00:28:44,579 Y tiene que estar en lo que sea.java 607 00:28:44,579 --> 00:28:45,279 ¿Vale? 608 00:28:45,640 --> 00:28:50,779 En realidad veremos que luego después puedo tener otras clases que no sean public 609 00:28:50,779 --> 00:28:51,740 Hay otros 610 00:28:51,740 --> 00:28:57,180 Modificadores que puedo poner que no sean public 611 00:28:57,180 --> 00:29:06,160 que son, por ejemplo, protected o private, y veremos qué son, por ahora no me interesa, ¿vale? 612 00:29:06,940 --> 00:29:13,720 Y los atributos de una clase son propios de la misma, y se podrán consultar internamente, ¿vale?, en los métodos. 613 00:29:13,839 --> 00:29:23,079 Es decir, que aquí dentro, dentro de este método de aquí, y dentro de este método de aquí, y dentro de todos los métodos, 614 00:29:23,079 --> 00:29:25,400 Yo tengo acceso a estas variables 615 00:29:25,400 --> 00:29:27,920 Estas variables las puedo utilizar 616 00:29:27,920 --> 00:29:29,619 Y aquí dentro 617 00:29:29,619 --> 00:29:31,240 Puedo utilizar nombre, por ejemplo 618 00:29:31,240 --> 00:29:33,279 System.out.println 619 00:29:33,279 --> 00:29:35,400 Nombre, y será este nombre 620 00:29:35,400 --> 00:29:36,619 Aquí, vale 621 00:29:36,619 --> 00:29:39,019 En principio, luego veremos 622 00:29:39,019 --> 00:29:40,759 Detalles sobre esto 623 00:29:40,759 --> 00:29:43,140 Pero la idea es que cuando yo creare un objeto 624 00:29:43,140 --> 00:29:45,099 Que tiene su propio nombre, pues aquí dentro 625 00:29:45,099 --> 00:29:45,900 Los puedo utilizar 626 00:29:45,900 --> 00:29:49,480 Fijaos también en una cosa 627 00:29:49,480 --> 00:29:51,660 Interesante que se me ha pasado antes 628 00:29:51,660 --> 00:29:53,160 ¿Notáis algo raro aquí? 629 00:29:54,259 --> 00:29:57,700 Ya hemos perdido el static 630 00:29:57,700 --> 00:29:58,900 ¿Vale? 631 00:29:59,200 --> 00:30:00,119 ¿Y qué quiere decir eso? 632 00:30:00,480 --> 00:30:01,640 Pues ya lo veremos 633 00:30:01,640 --> 00:30:04,539 Sostancialmente, cuando es static 634 00:30:04,539 --> 00:30:07,220 Se refiere a la clase 635 00:30:07,220 --> 00:30:09,880 Cuando no es static 636 00:30:09,880 --> 00:30:11,539 Se refiere al objeto 637 00:30:11,539 --> 00:30:13,500 A la instancia 638 00:30:13,500 --> 00:30:14,660 De la clase 639 00:30:14,660 --> 00:30:15,759 ¿Vale? 640 00:30:16,339 --> 00:30:17,880 Los métodos static 641 00:30:17,880 --> 00:30:20,200 No dependen del objeto 642 00:30:20,200 --> 00:30:21,799 Sería lo mismo 643 00:30:21,799 --> 00:30:23,700 Sea cual sea el cuadrado 644 00:30:23,700 --> 00:30:25,099 Que lo utiliza 645 00:30:25,099 --> 00:30:28,420 Mientras que los métodos no static 646 00:30:28,420 --> 00:30:30,240 Dependen del objeto 647 00:30:30,240 --> 00:30:31,619 No es lo mismo llamar 648 00:30:31,619 --> 00:30:34,299 Ese método sobre el cuadrado 649 00:30:34,299 --> 00:30:36,299 Del lado 1 que sobre el cuadrado del lado 7 650 00:30:36,299 --> 00:30:40,140 Haremos ejemplos y lo veremos con más detalle 651 00:30:40,140 --> 00:30:41,740 Simplemente 652 00:30:41,740 --> 00:30:43,539 Para que os suene 653 00:30:43,539 --> 00:30:45,299 Y aquí pasamos a objetos 654 00:30:45,299 --> 00:30:48,140 Entonces hasta ahora hemos visto la clase 655 00:30:48,140 --> 00:30:49,619 Que es un objeto 656 00:30:49,619 --> 00:30:53,940 Pues un objeto es un elemento concreto de la clase definida 657 00:30:53,940 --> 00:31:00,819 Y he pillado el molde general y he hecho un objeto concreto a partir de ese molde 658 00:31:00,819 --> 00:31:03,579 ¿Vale? Podré crear todos los objetos que me da la gana 659 00:31:03,579 --> 00:31:05,819 Pero ese es un objeto único 660 00:31:05,819 --> 00:31:07,940 Es una instancia de una clase 661 00:31:07,940 --> 00:31:08,700 ¿Vale? 662 00:31:08,700 --> 00:31:10,880 Cuando se dice instanciar una clase 663 00:31:10,880 --> 00:31:13,599 Quiere decir que a partir de la clase que he creado 664 00:31:13,599 --> 00:31:15,279 Voy a crear un objeto 665 00:31:15,279 --> 00:31:16,240 ¿Vale? 666 00:31:16,240 --> 00:31:23,339 En el momento de la ejecución se crean los objetos de las clases para los cuales hemos escrito código 667 00:31:23,339 --> 00:31:29,279 ¿Vale? Entonces cuando nosotros empezamos a ejecutar nuestro programa 668 00:31:29,279 --> 00:31:36,980 Pues vamos a crear los objetos y le vamos a poner las características y los atributos que se necesitan 669 00:31:36,980 --> 00:31:41,779 Vamos a rellenar sus características, vamos a darle los valores que tienen que valer 670 00:31:41,779 --> 00:31:45,779 ¿Vale? Cada objeto tendrá que tener un nombre para poder utilizarlo 671 00:31:45,779 --> 00:31:51,640 ¿Vale? Será parecido a lo que es una variable, ¿vale? 672 00:31:51,640 --> 00:32:06,400 Por ejemplo, cuando nosotros utilizamos scanner, scan igual new scanner, estamos creando una nueva instancia de la clase scanner, un nuevo objeto de la clase scanner que se llamará scan. 673 00:32:06,980 --> 00:32:08,539 Su nombre es scan, ¿vale? 674 00:32:08,539 --> 00:32:10,640 ScannerScan me define 675 00:32:10,640 --> 00:32:14,640 Oye, mira, te voy a crear un objeto scan 676 00:32:14,640 --> 00:32:16,740 De tipo scanner, ¿vale? 677 00:32:17,039 --> 00:32:18,779 Que es un new scanner 678 00:32:18,779 --> 00:32:20,380 Un nuevo objeto de tipo scanner 679 00:32:20,380 --> 00:32:21,839 ¿Sí? 680 00:32:22,859 --> 00:32:24,779 Un objeto que tiene una identidad 681 00:32:24,779 --> 00:32:26,779 Una individualidad 682 00:32:26,779 --> 00:32:28,299 Es decir, tengo que de alguna forma 683 00:32:28,299 --> 00:32:30,720 Poderme referir a ese objeto que es único 684 00:32:30,720 --> 00:32:31,480 ¿Vale? 685 00:32:31,920 --> 00:32:34,680 La clase me define una clase de objetos 686 00:32:34,680 --> 00:32:38,180 Mientras que un objeto es un objeto único 687 00:32:38,180 --> 00:32:42,000 Es algo único, es una instancia única 688 00:32:42,000 --> 00:32:44,799 El atributo, ¿vale? 689 00:32:44,940 --> 00:32:47,480 El atributo es que me los han definido las clases 690 00:32:47,480 --> 00:32:50,140 Y ahora le doy valores concretos, ¿vale? 691 00:32:50,539 --> 00:32:52,700 Fijaos, la clase aquí me dice 692 00:32:52,700 --> 00:32:54,200 Oye, mira, ¿tienes un nombre o le da? 693 00:32:54,480 --> 00:32:55,339 Sí, pero ¿qué nombre? 694 00:32:56,460 --> 00:32:58,420 Hasta que yo no cree un objeto 695 00:32:58,420 --> 00:33:00,180 No sé qué nombre tiene 696 00:33:00,180 --> 00:33:01,960 ¿Sí? 697 00:33:04,180 --> 00:33:08,339 Y el conjunto de los atributos de un objeto 698 00:33:08,339 --> 00:33:09,680 se define su estado 699 00:33:09,680 --> 00:33:12,240 ¿cuál es el estado de un objeto? 700 00:33:12,640 --> 00:33:14,220 pues pillo todos los atributos 701 00:33:14,220 --> 00:33:16,039 le hago una fotografía ahora 702 00:33:16,039 --> 00:33:17,779 y eso es su estado actual 703 00:33:17,779 --> 00:33:20,160 por ejemplo, la clase persona 704 00:33:20,160 --> 00:33:21,140 que me representa 705 00:33:21,140 --> 00:33:24,619 me llamo Estefano, tengo 40 años 706 00:33:24,619 --> 00:33:25,640 pues entonces 707 00:33:25,640 --> 00:33:28,039 mi foto actual es Estefano 708 00:33:28,039 --> 00:33:28,640 con 40 709 00:33:28,640 --> 00:33:32,259 cuando cumplo los años mi estado cambia 710 00:33:34,900 --> 00:33:35,619 dudas 711 00:33:35,619 --> 00:33:37,160 y los métodos 712 00:33:37,160 --> 00:33:39,259 Que definen el comportamiento 713 00:33:39,259 --> 00:33:41,519 Serán los mismos métodos definidos en la clase 714 00:33:41,519 --> 00:33:42,019 ¿Vale? 715 00:33:42,099 --> 00:33:43,460 Hemos dicho que en la clase lo que hacía 716 00:33:43,460 --> 00:33:46,500 Me daba los métodos que yo puedo utilizar sobre mí 717 00:33:46,500 --> 00:33:47,339 Para hacer algo 718 00:33:47,339 --> 00:33:49,119 Para comportarme 719 00:33:49,119 --> 00:33:50,000 Para cambiar 720 00:33:50,000 --> 00:33:51,700 O hacer algo 721 00:33:51,700 --> 00:33:53,819 Por ejemplo, yo puedo tener en la clase persona 722 00:33:53,819 --> 00:33:55,660 El método cumpleaños 723 00:33:55,660 --> 00:33:59,539 Que lo que hace es actualizar el atributo edad 724 00:33:59,539 --> 00:34:01,059 Haciendo edad++ 725 00:34:01,059 --> 00:34:02,960 ¿Dudas? 726 00:34:02,960 --> 00:34:11,619 Entonces, cuando yo creo un objeto 727 00:34:11,619 --> 00:34:14,039 ¿Dónde se crea el objeto? 728 00:34:15,480 --> 00:34:16,519 Es decir, yo tengo una clase 729 00:34:16,519 --> 00:34:18,519 La clase me define en general 730 00:34:18,519 --> 00:34:21,059 Cómo será hecho este objeto 731 00:34:21,059 --> 00:34:23,239 Y ahora creo uno, creo un New Scanner 732 00:34:23,239 --> 00:34:25,019 ¿Dónde se crea este objeto? 733 00:34:25,659 --> 00:34:27,780 Pues normalmente se crea en la memoria RAM 734 00:34:27,780 --> 00:34:28,880 Digámoslo así 735 00:34:28,880 --> 00:34:31,199 Hay un trocito de memoria 736 00:34:31,199 --> 00:34:33,780 En realidad, un poquito más complejo de esto 737 00:34:33,780 --> 00:34:36,880 La Java Virtual Machine tiene un trozo de memoria 738 00:34:36,880 --> 00:34:39,500 Un bloque de memoria 739 00:34:39,500 --> 00:34:40,420 Que se llama el HIP 740 00:34:40,420 --> 00:34:41,300 HEP 741 00:34:41,300 --> 00:34:46,000 ¿Sabéis la traducción en español? 742 00:34:47,199 --> 00:34:48,460 En italiano me la sé 743 00:34:48,460 --> 00:34:49,199 En español no 744 00:34:49,199 --> 00:34:50,940 HIP 745 00:34:50,940 --> 00:34:51,659 HEP 746 00:34:51,659 --> 00:34:55,000 No, no es salto 747 00:34:55,000 --> 00:34:56,539 Es como un montón 748 00:34:56,539 --> 00:34:59,019 El concepto es montón 749 00:34:59,019 --> 00:35:01,679 Mucho en italiano 750 00:35:01,679 --> 00:35:03,019 No sé, ahora lo buscaré 751 00:35:03,019 --> 00:35:05,920 La idea es que allí es donde se crean los objetos 752 00:35:05,920 --> 00:35:14,420 Entonces, cuando yo creo un nuevo objeto, en este espacio de memoria que yo tengo, me guardo un trocito de memoria y allí guardo los atributos de ese objeto. 753 00:35:15,000 --> 00:35:22,619 Y además, lo referencio. Hago un puntero que apunta a este trozo de memoria. 754 00:35:23,380 --> 00:35:28,219 Y ese puntero es lo que yo utilizo para poder ir a trabajar con ese objeto. 755 00:35:28,219 --> 00:35:38,880 Cuando hago ScannerScan igual NewScan, el NewScan me crea un objeto y me devuelve un puntero a ese trozo de memoria 756 00:35:38,880 --> 00:35:42,159 Ese puntero, ese trozo de memoria es mi variable Scan 757 00:35:42,159 --> 00:35:46,219 No sé si lo entiendo, si me explico 758 00:35:46,219 --> 00:35:52,579 En Java no se trabaja con direcciones de memoria directamente, ¿vale? 759 00:35:53,219 --> 00:35:56,780 Es un concepto un poco más abstracto, pero la idea está por ahí, ¿vale? 760 00:35:56,780 --> 00:36:00,719 Es decir, que yo tengo una referencia para poder ir a buscar este objeto 761 00:36:00,719 --> 00:36:07,920 Será un nombre simbólico que hace él para identificar ese objeto en concreto 762 00:36:07,920 --> 00:36:11,099 Ese objeto en concreto es el que utilizo 763 00:36:11,099 --> 00:36:15,159 Cuando yo hago string nombre es igual a Estefano 764 00:36:15,159 --> 00:36:19,579 Pues he creado un objeto por algún lado con escrito dentro Estefano 765 00:36:19,579 --> 00:36:23,519 Y hago una referencia a él que es el nombre 766 00:36:23,519 --> 00:36:27,739 ¿Vale? Cuando yo utilizaré nombre a partir de ahora me estoy refiriendo a ese trozo de memoria 767 00:36:27,739 --> 00:36:34,750 Un objeto es un valor que se puede asignar a una variable cuyo tipo es la clase 768 00:36:34,750 --> 00:36:39,130 ¿Vale? Lo que hacemos nosotros, scanner, scanner, es igual a new object, o sea, new scanner 769 00:36:39,130 --> 00:36:43,010 Entonces, new scanner es un objeto scanner, se puede asignar a una variable de tipo scanner 770 00:36:43,010 --> 00:36:50,449 Si queremos crear un objeto de tipo persona, por ejemplo, le damos un identificador como persona alumno 771 00:36:50,449 --> 00:36:53,349 ¿Vale? Entonces, este es el identificador 772 00:36:53,349 --> 00:36:55,750 Este es el tipo 773 00:36:55,750 --> 00:36:59,039 Tú das 774 00:36:59,039 --> 00:37:01,480 A partir de ahora 775 00:37:01,480 --> 00:37:02,619 A partir de haberlo creado 776 00:37:02,619 --> 00:37:04,539 Esto todavía no ha creado 777 00:37:04,539 --> 00:37:07,320 Un objeto 778 00:37:07,320 --> 00:37:07,940 ¿Vale? 779 00:37:07,980 --> 00:37:09,599 Pero cuando yo le asignaré un objeto 780 00:37:09,599 --> 00:37:10,539 Ahora veremos cómo 781 00:37:10,539 --> 00:37:11,920 Pues a partir de ahora 782 00:37:11,920 --> 00:37:12,659 Usando alumno 783 00:37:12,659 --> 00:37:13,900 Me referiré a ese objeto 784 00:37:13,900 --> 00:37:16,079 Persona alumno 785 00:37:16,079 --> 00:37:17,000 Es como cuando hago 786 00:37:17,000 --> 00:37:17,780 Int x 787 00:37:17,780 --> 00:37:18,820 ¿Vale? 788 00:37:18,940 --> 00:37:20,280 He creado la variable 789 00:37:20,280 --> 00:37:22,139 Pero no he creado todavía 790 00:37:22,139 --> 00:37:23,079 El valor de la variable 791 00:37:23,079 --> 00:37:24,639 ¿Sí? 792 00:37:25,179 --> 00:37:28,940 Atributos 793 00:37:28,940 --> 00:37:30,780 Son las características de definir el objeto 794 00:37:30,780 --> 00:37:33,780 Cada atributo tiene una visibilidad 795 00:37:33,780 --> 00:37:35,699 Lo hablaremos en futuro 796 00:37:35,699 --> 00:37:37,360 Por ahora todos son public 797 00:37:37,360 --> 00:37:38,480 O no ponemos nada 798 00:37:38,480 --> 00:37:41,619 Un tipo que puede ser primitivo 799 00:37:41,619 --> 00:37:43,119 O puede ser otro objeto 800 00:37:43,119 --> 00:37:44,599 Y aquí las cosas se complican 801 00:37:44,599 --> 00:37:45,699 Por ahora son primitivos 802 00:37:45,699 --> 00:37:48,460 Pero por ejemplo cuando usamos string 803 00:37:48,460 --> 00:37:50,079 Pues string es otro objeto 804 00:37:50,079 --> 00:37:51,860 Entonces ya lo hemos usado 805 00:37:51,860 --> 00:37:53,880 Cuando aquí pensamos en esto 806 00:37:53,880 --> 00:37:58,599 Y estamos haciendo que un atributo es un string 807 00:37:58,599 --> 00:38:00,940 String es otra clase, es otro objeto 808 00:38:00,940 --> 00:38:04,079 Entonces estamos usando un objeto dentro de un objeto 809 00:38:04,079 --> 00:38:05,500 Ya lo estamos haciendo 810 00:38:05,500 --> 00:38:06,460 ¿Vale? 811 00:38:07,079 --> 00:38:09,360 No nos damos cuenta pero ya lo estamos haciendo 812 00:38:09,360 --> 00:38:12,780 Y el identificador del atributo 813 00:38:12,780 --> 00:38:13,119 ¿Vale? 814 00:38:13,260 --> 00:38:14,039 O sea, ¿Cómo se llama? 815 00:38:14,380 --> 00:38:15,780 String nombre, puede ser nombre 816 00:38:15,780 --> 00:38:20,599 Por ejemplo, persona tenía nombre que es de tipo string 817 00:38:20,599 --> 00:38:21,679 Que es una clase 818 00:38:21,679 --> 00:38:24,360 Y edad, que es de tipo int, que es un tipo primitivo 819 00:38:24,360 --> 00:38:25,079 ¿Vale? 820 00:38:25,679 --> 00:38:32,219 El estado de un objeto está definido por los valores que tienen sus atributos en un determinado momento 821 00:38:32,219 --> 00:38:33,420 Ya lo hemos dicho antes 822 00:38:33,420 --> 00:38:36,239 ¿Dudas? 823 00:38:39,090 --> 00:38:40,530 Y luego los métodos 824 00:38:40,530 --> 00:38:42,409 Ya todo esto lo hemos dicho, ¿vale? 825 00:38:42,409 --> 00:38:48,230 Son los servicios que puede proporcionar este objeto a otros 826 00:38:48,230 --> 00:38:48,849 ¿Vale? 827 00:38:49,349 --> 00:38:52,789 Otros objetos pueden llegar a mí, yo tengo estos métodos 828 00:38:52,789 --> 00:38:54,889 Y pueden decir, ejecuta este método 829 00:38:54,889 --> 00:38:56,409 O llamo a este método 830 00:38:56,409 --> 00:38:58,809 Y yo hago lo que dice ese método 831 00:38:58,809 --> 00:39:01,050 ¿Vale? Como por ejemplo soy la persona 832 00:39:01,050 --> 00:39:02,969 Que hace el método 833 00:39:02,969 --> 00:39:04,449 Cumplir años 834 00:39:04,449 --> 00:39:06,449 Si alguien llama a mi método cumplir años 835 00:39:06,449 --> 00:39:09,250 Yo lo que hago es sumar uno a mi variable edad 836 00:39:09,250 --> 00:39:10,070 Porque he cumplido 837 00:39:10,070 --> 00:39:11,650 ¿Sí? 838 00:39:12,190 --> 00:39:14,809 ¿Quién llama esto? Pues puede llamarlo 839 00:39:14,809 --> 00:39:17,130 Un main, puede llamarlo otro objeto 840 00:39:17,130 --> 00:39:19,090 Puedo llamarlo yo mismo 841 00:39:19,090 --> 00:39:20,570 En otra parte 842 00:39:20,570 --> 00:39:22,150 En otro trozo de código 843 00:39:22,150 --> 00:39:26,130 Ya veremos quién es que trabaja 844 00:39:26,130 --> 00:39:29,190 Si os acordáis, la base de la programación orientada a objetos 845 00:39:29,190 --> 00:39:33,750 Es que los objetos interactúan entre ellos 846 00:39:33,750 --> 00:39:37,610 Mandándose mensajes y llamándose métodos uno a otro 847 00:39:37,610 --> 00:39:40,489 ¿Vale? Y con eso hago la tarea que tengo que hacer 848 00:39:40,489 --> 00:39:47,230 Entonces, un método suele tener un nombre, unos parámetros 849 00:39:47,230 --> 00:39:49,090 Y un valor que se devuelve, ¿vale? 850 00:39:49,170 --> 00:39:51,869 Siempre y cuando no se devuelve nada 851 00:39:51,869 --> 00:39:59,449 Y esto ya lo hemos visto hoy tranquilamente, cuando hemos visto funciones y procedimientos hemos estado trabajando sobre esto 852 00:39:59,449 --> 00:40:07,170 Los nombres de las funciones, los parámetros que pillo y que trabajo con ellos, que puedo tener o no puedo tener 853 00:40:07,170 --> 00:40:17,030 Y hemos visto que al final puede que mi método produzca un resultado y que yo quiera devolver ese resultado 854 00:40:17,030 --> 00:40:20,690 O puede ser que simplemente este resultado lo imprimo en pantalla, por ejemplo 855 00:40:20,690 --> 00:40:22,829 Y entonces no lo tengo que devolver 856 00:40:22,829 --> 00:40:23,730 ¿Vale? 857 00:40:26,030 --> 00:40:29,170 Es importante saber qué métodos implementa cada clase 858 00:40:29,170 --> 00:40:33,510 Qué parámetros tienen los métodos y qué devuelven, ¿vale? 859 00:40:33,949 --> 00:40:37,210 Y esto, hay una cosa que se llama el API, lo veremos, ¿vale? 860 00:40:37,289 --> 00:40:40,170 Y empezaremos a utilizarlo más adelante 861 00:40:40,170 --> 00:40:44,670 Que, sustancialmente, es la colección de todas las clases 862 00:40:44,670 --> 00:40:47,750 Que ya existen hechas en Java 863 00:40:47,750 --> 00:40:49,349 Y que yo puedo reutilizar 864 00:40:49,349 --> 00:40:51,110 Como por ejemplo String o Scanner 865 00:40:51,110 --> 00:40:51,650 ¿Vale? 866 00:40:51,929 --> 00:40:54,969 Y hay miles de clases ya hechas 867 00:40:54,969 --> 00:40:56,309 Que yo puedo reutilizar 868 00:40:56,309 --> 00:40:58,050 Y que están programadas ya 869 00:40:58,050 --> 00:41:00,050 Y que las puedo utilizar directamente 870 00:41:00,050 --> 00:41:04,150 Nosotros veremos List, ArrayList, etc, etc, etc 871 00:41:04,150 --> 00:41:04,829 Más adelante 872 00:41:04,829 --> 00:41:07,789 Entonces vamos a crear una clase 873 00:41:07,789 --> 00:41:08,769 ¿Cómo se crea una clase? 874 00:41:09,510 --> 00:41:09,670 ¿Sí? 875 00:41:10,849 --> 00:41:11,909 Por ejemplo 876 00:41:11,909 --> 00:41:13,550 La clase Persona 877 00:41:13,550 --> 00:41:17,590 Tiene string apellido 878 00:41:17,590 --> 00:41:18,630 Y string nombre 879 00:41:18,630 --> 00:41:20,150 Para cambiar un poco 880 00:41:20,150 --> 00:41:22,150 Tiene dos atributos 881 00:41:22,150 --> 00:41:26,110 Public string getApellido 882 00:41:26,110 --> 00:41:27,070 Es un método 883 00:41:27,070 --> 00:41:28,889 ¿Qué hará este getApellido? 884 00:41:29,630 --> 00:41:30,909 Pues devuelve el apellido 885 00:41:30,909 --> 00:41:34,449 ¿Sí? 886 00:41:35,269 --> 00:41:38,289 Veis que no es static 887 00:41:38,289 --> 00:41:42,309 Lo que hace es devolver un string 888 00:41:42,309 --> 00:41:44,809 Y este string es este apellido 889 00:41:44,809 --> 00:41:46,489 Pregunta para vosotros 890 00:41:46,489 --> 00:41:49,269 Si yo llamo GetApellido sobre mí 891 00:41:49,269 --> 00:41:50,690 O sobre otra persona 892 00:41:50,690 --> 00:41:52,750 ¿El resultado será el mismo o será distinto? 893 00:41:58,969 --> 00:41:59,389 El mismo 894 00:41:59,389 --> 00:42:01,849 Si yo me llamo sobre mí, me dirá que me llamo Chiesa 895 00:42:01,849 --> 00:42:04,590 Y si te lo llamo sobre ti, te dice que te llamo Chiesa 896 00:42:04,590 --> 00:42:04,789 ¿Es igual? 897 00:42:08,239 --> 00:42:09,880 Te lo he dicho, sobre dos personas distinto 898 00:42:09,880 --> 00:42:12,699 Sobre dos objetos personas 899 00:42:12,699 --> 00:42:16,440 ¿Pero entonces se refiere a la clase? 900 00:42:17,400 --> 00:42:19,420 ¿Al apellido de clase o al apellido de objeto? 901 00:42:19,920 --> 00:42:21,460 Esto es la definición de clase 902 00:42:21,460 --> 00:42:21,960 ¿Vale? 903 00:42:22,059 --> 00:42:23,599 Pero la clase es un molde 904 00:42:23,599 --> 00:42:26,239 Que me define como están hechos los objetos 905 00:42:26,239 --> 00:42:27,900 En este caso el molde es apellido y nombre 906 00:42:27,900 --> 00:42:30,519 Claro, el molde me dice 907 00:42:30,519 --> 00:42:33,039 Que cada persona tendrá dos atributos 908 00:42:33,039 --> 00:42:34,239 Apellido y nombre 909 00:42:34,239 --> 00:42:35,820 Entonces cuando creo un objeto 910 00:42:35,820 --> 00:42:38,699 El objeto tendrá seguramente un apellido 911 00:42:38,699 --> 00:42:39,519 Y seguramente un nombre 912 00:42:39,519 --> 00:42:41,820 Pero cada objeto tendrá su apellido y su nombre 913 00:42:41,820 --> 00:42:44,500 Entonces cuando yo pillo un objeto cualquiera 914 00:42:44,500 --> 00:42:45,679 Y le llamo 915 00:42:45,679 --> 00:42:47,480 El método que está apellido 916 00:42:47,480 --> 00:42:49,780 Y me devuelve su apellido 917 00:42:49,780 --> 00:42:51,360 Será el apellido 918 00:42:51,360 --> 00:42:53,019 De ese objeto 919 00:42:53,019 --> 00:42:56,039 Entonces si lo llamo sobre objetos distintos 920 00:42:56,039 --> 00:43:00,059 Me devolverán el apellido de cada uno del objeto 921 00:43:00,059 --> 00:43:00,840 Cada uno distinto 922 00:43:00,840 --> 00:43:03,820 Entonces serán siempre objetos distintos 923 00:43:03,820 --> 00:43:05,460 Entonces el resultado es distinto 924 00:43:05,460 --> 00:43:06,079 ¿Vale? 925 00:43:06,679 --> 00:43:09,300 Es un poquito la razón de por qué no es tal estático 926 00:43:09,300 --> 00:43:10,500 ¿Vale? 927 00:43:11,380 --> 00:43:14,340 O sea que el resultado de este método 928 00:43:14,340 --> 00:43:17,840 Depende del objeto sobre el que lo llamo 929 00:43:17,840 --> 00:43:20,320 Si lo llamo sobre persona 1 930 00:43:20,320 --> 00:43:22,519 Pues me contestará una cosa 931 00:43:22,519 --> 00:43:25,119 Si lo llamo sobre persona 2, me contestará una cosa distinta 932 00:43:25,119 --> 00:43:26,699 ¿Sí? 933 00:43:28,139 --> 00:43:29,820 Y luego está este de aquí 934 00:43:29,820 --> 00:43:30,980 ¿Qué hace este método de aquí? 935 00:43:31,159 --> 00:43:31,900 SetApellido 936 00:43:31,900 --> 00:43:42,869 Me dice 937 00:43:42,869 --> 00:43:45,130 Yo me llamo apellido, no devuelvo nada 938 00:43:45,130 --> 00:43:47,570 Pero pillo un 939 00:43:47,570 --> 00:43:49,730 Un valor 940 00:43:49,730 --> 00:43:51,590 ¿Vale? Que se llama apellido igual 941 00:43:51,590 --> 00:43:52,909 ¿Y qué hace? 942 00:43:53,469 --> 00:43:54,710 Lo que tú me has dado 943 00:43:54,710 --> 00:43:57,130 Ponlo dentro 944 00:43:57,130 --> 00:43:59,130 Esta cosa rara de aquí 945 00:43:59,130 --> 00:44:00,630 ¿Qué es esta cosa rara de aquí? 946 00:44:00,809 --> 00:44:04,340 El apellido de dis 947 00:44:04,340 --> 00:44:05,800 ¿Qué es dis? 948 00:44:06,719 --> 00:44:07,559 Este 949 00:44:07,559 --> 00:44:08,639 ¿Este qué? 950 00:44:09,699 --> 00:44:11,519 Este objeto 951 00:44:11,519 --> 00:44:14,619 Pero esa es la palabra que hay que poner para ese objeto 952 00:44:14,619 --> 00:44:16,559 Fijaos 953 00:44:16,559 --> 00:44:17,420 ¿Qué color tiene? 954 00:44:18,739 --> 00:44:20,380 Entonces es una 955 00:44:20,380 --> 00:44:22,960 Palabra reservada 956 00:44:22,960 --> 00:44:24,880 Esta es una palabra 957 00:44:24,880 --> 00:44:25,659 Especial 958 00:44:25,659 --> 00:44:28,300 Para decir este objeto 959 00:44:28,300 --> 00:44:29,579 ¿Vale? 960 00:44:30,280 --> 00:44:31,880 Esta cosa aquí te está diciendo 961 00:44:31,880 --> 00:44:34,199 Vale, te he dado una variable que se llama apellido 962 00:44:34,199 --> 00:44:35,719 Este apellido 963 00:44:35,719 --> 00:44:38,239 El valor que te he pasado por lo dentro 964 00:44:38,239 --> 00:44:40,940 De este apellido 965 00:44:40,940 --> 00:44:45,000 Este es el apellido como atributo 966 00:44:45,000 --> 00:44:48,460 Este es apellido como variable local 967 00:44:48,460 --> 00:44:53,579 ¿Sí? ¿Cómo? 968 00:44:58,619 --> 00:44:59,820 Este de aquí que devuelve 969 00:44:59,820 --> 00:45:02,559 Lo que hay aquí dentro 970 00:45:02,559 --> 00:45:07,570 Son métodos 971 00:45:07,570 --> 00:45:09,429 O sea, no es que tengan que 972 00:45:09,429 --> 00:45:12,610 Estos son los servicios 973 00:45:12,610 --> 00:45:14,130 Que yo te proporciono 974 00:45:14,130 --> 00:45:16,010 Tú me puedes pedir mi apellido 975 00:45:16,010 --> 00:45:17,309 ¿Vale? 976 00:45:18,030 --> 00:45:20,369 Entonces, cuando tú pedirás get apellido 977 00:45:20,369 --> 00:45:21,250 Yo te doy mi apellido 978 00:45:21,250 --> 00:45:23,510 ¿Vale? Ahora, ¿para qué lo usas? 979 00:45:23,670 --> 00:45:25,090 No lo sé, a eso no lo sé 980 00:45:25,090 --> 00:45:28,590 ¿Vale? ¿Para qué puede servir esto de set apellido? 981 00:45:29,070 --> 00:45:30,409 Puede servir al principio 982 00:45:30,409 --> 00:45:31,769 Cuando tú te has creado 983 00:45:31,769 --> 00:45:33,190 Y todavía no tienes un apellido 984 00:45:33,190 --> 00:45:34,630 Para que te dé tu apellido 985 00:45:34,630 --> 00:45:36,570 Para que te configure 986 00:45:36,570 --> 00:45:38,789 Estos valores de aquí 987 00:45:38,789 --> 00:45:40,010 ¿Vale? 988 00:45:40,190 --> 00:45:42,190 Y son ejemplos de métodos 989 00:45:42,190 --> 00:45:42,429 ¿Vale? 990 00:45:43,030 --> 00:45:44,530 En realidad, estos de aquí 991 00:45:44,530 --> 00:45:47,329 Son los que se llaman los getter y setter 992 00:45:47,329 --> 00:45:48,070 ¿Vale? 993 00:45:48,789 --> 00:45:50,130 Por cada apellido 994 00:45:50,130 --> 00:45:51,909 O sea, por cada atributo 995 00:45:51,909 --> 00:45:53,710 Puede haber un get y un set 996 00:45:53,710 --> 00:45:54,829 De ese atributo 997 00:45:54,829 --> 00:45:55,590 ¿Vale? 998 00:45:55,789 --> 00:45:56,829 ¿Tengo atributo apellido? 999 00:45:56,949 --> 00:45:58,630 Tengo get apellido y set apellido 1000 00:45:58,630 --> 00:46:00,110 ¿Tengo nombre? 1001 00:46:00,210 --> 00:46:01,570 Tengo get nombre y set nombre 1002 00:46:01,570 --> 00:46:03,250 Pero lo veremos más adelante 1003 00:46:03,250 --> 00:46:04,690 Más en detalle estas cosas 1004 00:46:04,690 --> 00:46:04,889 ¿Vale? 1005 00:46:04,929 --> 00:46:05,989 Pero ahora simplemente que 1006 00:46:05,989 --> 00:46:08,429 Es para que veáis 1007 00:46:08,429 --> 00:46:09,809 Es que una clase tiene 1008 00:46:09,809 --> 00:46:10,929 Un nombre 1009 00:46:10,929 --> 00:46:13,409 Atributos 1010 00:46:13,409 --> 00:46:20,179 Y varios métodos 1011 00:46:20,179 --> 00:46:22,679 ¿Dudas? 1012 00:46:24,559 --> 00:46:25,920 Aquí hay muchas cosas 1013 00:46:25,920 --> 00:46:26,900 Que tenemos que ver 1014 00:46:26,900 --> 00:46:28,079 Pero con calma 1015 00:46:28,079 --> 00:46:31,519 Sí, sí, luego 1016 00:46:31,519 --> 00:46:34,559 Tendré objetos 1017 00:46:34,559 --> 00:46:37,099 Es que no puedo hacer ejemplos 1018 00:46:37,099 --> 00:46:38,820 Hasta al menos aquí 1019 00:46:38,820 --> 00:46:39,380 ¿Vale? 1020 00:46:39,659 --> 00:46:41,019 Los constructores 1021 00:46:41,019 --> 00:46:43,760 La última cosa 1022 00:46:43,760 --> 00:46:45,199 Y me acabo aquí, ¿vale? 1023 00:46:45,239 --> 00:46:46,300 Son los constructores 1024 00:46:46,300 --> 00:46:48,519 Cuando yo creo un nuevo objeto 1025 00:46:48,519 --> 00:46:51,980 Necesito algo que me construya ese objeto 1026 00:46:51,980 --> 00:46:52,960 ¿Vale? 1027 00:46:53,340 --> 00:46:54,400 Y normalmente 1028 00:46:54,400 --> 00:46:56,280 Esto se llama constructor 1029 00:46:56,280 --> 00:46:58,960 El lunes hacemos ejemplo de estas cosas 1030 00:46:58,960 --> 00:46:59,239 ¿Vale? 1031 00:46:59,360 --> 00:47:00,800 Y ya metemos con todo esto 1032 00:47:00,800 --> 00:47:02,300 Fijaos que 1033 00:47:02,300 --> 00:47:03,840 El último, último 1034 00:47:03,840 --> 00:47:06,940 Cuando yo creo un nuevo objeto 1035 00:47:06,940 --> 00:47:08,460 Entra en juego 1036 00:47:08,460 --> 00:47:10,539 Este comando de aquí 1037 00:47:10,539 --> 00:47:12,539 que nosotros hemos visto 1038 00:47:12,539 --> 00:47:15,179 hemos visto cuando creamos por ejemplo 1039 00:47:15,179 --> 00:47:15,920 new scanner 1040 00:47:15,920 --> 00:47:19,139 o cuando hemos hecho un nuevo 1041 00:47:19,139 --> 00:47:20,420 array 1042 00:47:20,420 --> 00:47:23,219 entonces siempre que yo creo 1043 00:47:23,219 --> 00:47:24,380 un objeto nuevo 1044 00:47:24,380 --> 00:47:26,420 tendré que utilizar una new 1045 00:47:26,420 --> 00:47:27,639 por algún lado 1046 00:47:27,639 --> 00:47:30,199 la new es el objeto que 1047 00:47:30,199 --> 00:47:32,699 es el procedimiento 1048 00:47:32,699 --> 00:47:34,400 el comando que lo que me hace 1049 00:47:34,400 --> 00:47:36,420 es crearme físicamente el objeto 1050 00:47:36,420 --> 00:47:38,280 si 1051 00:47:38,280 --> 00:47:44,340 No, el new está asociado con lo que es un constructor 1052 00:47:44,340 --> 00:47:45,480 Que es un método especial 1053 00:47:45,480 --> 00:47:46,960 Y ya veremos qué es 1054 00:47:46,960 --> 00:47:51,239 Porque cada objeto, como es distinto de los otros objetos 1055 00:47:51,239 --> 00:47:54,500 Tendrá que tener un método especial llamado constructor 1056 00:47:54,500 --> 00:47:56,179 Que es el que me construye