1 00:00:00,000 --> 00:00:11,000 Vale, muy bien, estoy grabando estas clases, por lo tanto, si hay alguna pregunta o habláis, pues me dais la autorización a que esté grabado en este vídeo, ¿vale? 2 00:00:11,000 --> 00:00:17,000 Entonces, decíamos que hasta ahora nosotros hemos trabajado con programación estructurada. 3 00:00:17,000 --> 00:00:29,000 Programación estructurada se basa en pocos conceptos como son las variables, como son los arrays, como son los if, como son los while, bueno, más que if y while, 4 00:00:29,000 --> 00:00:35,000 los operadores, los comandos condicionales y los comandos iterativos, ¿vale? 5 00:00:35,000 --> 00:00:43,000 Luego pueden ser de varias formas, el while, the while, the for, más o menos son todo lo mismo, pero son más útiles en un caso o otro, ¿vale? 6 00:00:43,000 --> 00:00:52,000 La dentro, lo vimos al principio, si miráis las transparencias iniciales cuando introducimos el concepto de programación estructurada, 7 00:00:52,000 --> 00:00:59,000 la unidad básica de la programación estructurada es lo que es la función o el método, ¿vale? 8 00:00:59,000 --> 00:01:09,000 Nosotros no nos hemos enfocado muchísimo en esto, lo hemos utilizado, lo hemos visto algunos ejemplos, pero no hemos hecho mucho hincapié 9 00:01:09,000 --> 00:01:17,000 porque ahora ese concepto de función o procedimiento se sustituirá con otro concepto que es prácticamente igual, 10 00:01:17,000 --> 00:01:20,000 pero bueno, tiene algunos matices, que es el método, ¿vale? 11 00:01:20,000 --> 00:01:28,000 En Java, tanto las funciones como los procedimientos, todo lo que hemos hecho oficialmente se llaman métodos, ¿sí? 12 00:01:28,000 --> 00:01:36,000 Y ahora sí que eso será fundamental, ¿vale? A partir de ahora los métodos tenemos que utilizarlo, ¿vale? 13 00:01:36,000 --> 00:01:43,000 Hasta ahora ha sido una introducción, ahora haremos más hincapié allí y cuando estructuraremos lo que es una clase, lo que son, 14 00:01:43,000 --> 00:01:50,000 crearemos objetos, pues veremos para qué sirven los métodos y cómo tenemos que crear los métodos. 15 00:01:50,000 --> 00:01:58,000 Entonces hoy empezamos con la programación orientada a objetos, es un cambio de paradigma, es un cambio de paradigma grande, ¿vale? 16 00:01:58,000 --> 00:02:06,000 Nosotros tenemos la suerte de que ya esto existe y está implementado y que funciona bastante bien, 17 00:02:06,000 --> 00:02:12,000 tened en cuenta que el cambio de estructurada a objetos es un cambio fuerte, ¿vale? 18 00:02:12,000 --> 00:02:24,000 Es un cambio muy interesante porque permite hacer las tareas de programación que hemos hecho hasta ahora 19 00:02:24,000 --> 00:02:35,000 y que haréis por el resto de vuestra vida si seréis programadores, de una forma más intuitiva, de una forma más sólida, de una forma más reutilizable, ¿vale? 20 00:02:35,000 --> 00:02:38,000 Entonces la programación orientada a objetos, ¿vale? 21 00:02:38,000 --> 00:02:46,000 Que P-O-O-O-O-O-P es como se suele encontrar por allí para no escribir todo, es un paradigma de programación 22 00:02:46,000 --> 00:02:49,000 cuyo elemento estructural principal es el objeto, ¿vale? 23 00:02:49,000 --> 00:02:56,000 Entonces antes el elemento estructural era la función, hemos dicho, pues ahora pasamos a un nuevo elemento estructural. 24 00:02:56,000 --> 00:03:05,000 Mis programas no están basados en hago funciones, están basados en pienso objetos, construyo objetos, ¿qué es un objeto? 25 00:03:05,000 --> 00:03:07,000 Ahora lo vamos a ver con K, ¿vale? 26 00:03:07,000 --> 00:03:17,000 Pero todo el planteamiento de solución de mis algoritmos, de mis estructuras, de mi sistema, está basado en clases y objetos 27 00:03:17,000 --> 00:03:21,000 y veremos las relaciones entre clases y objetos, ¿sí? 28 00:03:21,000 --> 00:03:27,000 El elemento estructural de este paradigma de programación imperativo, programación imperativo estructural era la función, ¿vale? 29 00:03:27,000 --> 00:03:28,000 Ahora ya no. 30 00:03:28,000 --> 00:03:34,000 Las mejoras que aportan las programaciones orientadas a objetos son, primero, mejora en el análisis, ¿vale? 31 00:03:34,000 --> 00:03:43,000 La mente humana es más orientada a pensar los problemas y las soluciones a los problemas en términos de objetos 32 00:03:43,000 --> 00:03:47,000 que en términos de procesos y datos separados, ¿vale? 33 00:03:47,000 --> 00:03:51,000 Entonces, cuando ahora veremos que es un objeto, cuando empezaremos a decidir el objeto, 34 00:03:51,000 --> 00:04:00,000 la idea del objeto es que sea algo que se acerque un poquito más a como nosotros pensamos lo que nos rodea alrededor, ¿vale? 35 00:04:00,000 --> 00:04:08,000 Y, por lo tanto, debería ser más intuitivo programar orientado a objetos que programar de forma estructural. 36 00:04:08,000 --> 00:04:15,000 Escalabilidad, es más fácil enfrentarse a problemas que crecen, ¿vale? 37 00:04:15,000 --> 00:04:26,000 Cuando hablamos de escalabilidad dentro del ámbito informático es ponerse de frente a un problema que puede crecer, que puede escalar, ¿vale? 38 00:04:26,000 --> 00:04:33,000 Entonces, cuando un problema es muy sencillo, normalmente cualquier solución básica nos vale. 39 00:04:33,000 --> 00:04:45,000 Cuando los problemas se van complicando, si no nos hemos hecho un esquema mental, un esquema práctico de la solución bien hecho, 40 00:04:45,000 --> 00:04:50,000 pues puede ser que la solución ya no funcione, la solución se vuelva demasiado ineficiente, 41 00:04:50,000 --> 00:05:00,000 puede ser que la solución no me valga para grandes números o por muchos datos o por acceso a problemas complejos, ¿sí? 42 00:05:00,000 --> 00:05:09,000 La orientación a objeto mejora esta posibilidad, mejora la posibilidad de, vale, yo he hecho esta solución, 43 00:05:09,000 --> 00:05:17,000 he visto que cubre este problema a una cierta escala, cuando el problema se vuelve más complejo, 44 00:05:17,000 --> 00:05:25,000 pues solo tengo que retocar algunas cosas de los objetos y posiblemente mi sistema sigue funcionando, si lo he estructurado bien, etc. 45 00:05:25,000 --> 00:05:33,000 Pero tiene, digamos, una facilidad mejor con respecto a lo que era la programación iterativa estructurada, que es lo que hemos hecho hasta ahora. 46 00:05:33,000 --> 00:05:38,000 Y también reutilización de código, es una cosa muy importante. 47 00:05:38,000 --> 00:05:48,000 La idea es que nosotros crearemos clases y crearemos objetos y estos objetos, si los creamos bien, los podemos reutilizar en otros proyectos. 48 00:05:48,000 --> 00:05:56,000 Si yo me creo una serie de clases, objetos, etc., etc., que simulan una persona y, por lo tanto, 49 00:05:56,000 --> 00:06:01,000 ahí dentro hay todos los datos y las funciones y los procedimientos que puede hacer una persona, 50 00:06:01,000 --> 00:06:06,000 si ahora creo un proyecto totalmente nuevo que tiene que ver con personas, 51 00:06:06,000 --> 00:06:16,000 puedo recoger todas las clases y los objetos que he creado de las personas en el proyecto anterior y reutilizarlos completamente en el nuevo. 52 00:06:16,000 --> 00:06:30,000 Antes, como no había objetos, había más bien funciones, tenía que ir en mi proyecto eligiendo cuáles eran las funciones que sí me pueden valer en el nuevo proyecto 53 00:06:30,000 --> 00:06:33,000 para reutilizarlo desde el viejo. 54 00:06:33,000 --> 00:06:40,000 Ahora mismo, con la orientación a objetos, es un poco distinto, porque en un cierto sentido ya los tengo empaquetados. 55 00:06:40,000 --> 00:06:45,000 Yo tendré mi clase persona con los datos de la persona y con los métodos de la persona, 56 00:06:45,000 --> 00:06:54,000 entonces, cuando quiero utilizar otro sistema donde hay una persona, pues reutilizo esa clase, reutilizo ese código. 57 00:06:54,000 --> 00:07:06,000 Entonces, la idea de por qué esto ha sido importante y es todavía importante es porque mejora estos campos y los hace más intuitivos y más interesantes. 58 00:07:06,000 --> 00:07:10,000 Características de la programación orientada a objetos. 59 00:07:10,000 --> 00:07:13,000 Nosotros vamos a crear clases. 60 00:07:13,000 --> 00:07:15,000 Nosotros ya hemos creado clases. 61 00:07:15,000 --> 00:07:23,000 Cuando vosotros empezáis cualquier programa, ¿con qué palabras empezáis el programa? 62 00:07:23,000 --> 00:07:25,000 Public class. 63 00:07:25,000 --> 00:07:27,000 Public class y el nombre de la clase. 64 00:07:27,000 --> 00:07:33,000 Todos los ejercicios que habéis hecho desde el principio han sido clases. 65 00:07:33,000 --> 00:07:35,000 Ya sabéis crear una clase. 66 00:07:35,000 --> 00:07:41,000 Si os acordáis, también las primeras veces, cuando vimos el Hello World, el primer programa, 67 00:07:41,000 --> 00:07:45,000 decíamos, esto es System.AutoTune.Println.HelloWorld. 68 00:07:45,000 --> 00:07:46,000 Hola mundo. 69 00:07:46,000 --> 00:07:47,000 Fenomenal. 70 00:07:47,000 --> 00:07:48,000 Esto es lo que nos interesa. 71 00:07:48,000 --> 00:07:50,000 Todo el resto, ¿por qué está allí? 72 00:07:50,000 --> 00:07:54,000 Y os dije en esos días, ¿por qué estamos orientados? 73 00:07:54,000 --> 00:08:00,000 Java es un lenguaje orientado a objetos, pero nosotros por ahora ignoraremos la parte orientada a objetos. 74 00:08:00,000 --> 00:08:02,000 Por lo tanto, me lo escribe él. 75 00:08:02,000 --> 00:08:04,000 Me escribe el public class. 76 00:08:04,000 --> 00:08:05,000 Yo no sé qué es. 77 00:08:05,000 --> 00:08:07,000 Por ahora me fío y ya veremos en un futuro. 78 00:08:07,000 --> 00:08:14,000 Ahora es ese futuro en el que empezaremos a entender qué es también la parte del principio y la parte del final. 79 00:08:19,000 --> 00:08:23,000 Las clases definen dos cosas sustancialmente. 80 00:08:23,000 --> 00:08:25,000 Cuando yo escribo una clase, tengo que definir dos cosas. 81 00:08:25,000 --> 00:08:32,000 Los datos que voy a utilizar en esta clase y los comportamientos que pueda hacer esta clase. 82 00:08:32,000 --> 00:08:33,000 ¿Sí? 83 00:08:33,000 --> 00:08:39,000 La clase de ejemplo de persona, pues yo tendré que definir una persona en general, 84 00:08:39,000 --> 00:08:43,000 qué datos son relevantes para esta persona. 85 00:08:43,000 --> 00:08:46,000 Vosotros tenéis que modelizar una persona. 86 00:08:46,000 --> 00:08:49,000 ¿Qué datos consideráis interesantes? 87 00:08:49,000 --> 00:08:51,000 ¿Qué datos consideráis interesantes? 88 00:08:54,000 --> 00:08:55,000 ¿Altura? 89 00:08:57,000 --> 00:08:58,000 ¿Qué más? 90 00:08:58,000 --> 00:08:59,000 ¿Peso? 91 00:08:59,000 --> 00:09:00,000 ¿Qué más? 92 00:09:01,000 --> 00:09:02,000 ¿DNI? 93 00:09:02,000 --> 00:09:03,000 ¿Qué más? 94 00:09:03,000 --> 00:09:04,000 ¿Nombre? 95 00:09:05,000 --> 00:09:06,000 ¿Edad? 96 00:09:06,000 --> 00:09:07,000 ¿Vale? 97 00:09:07,000 --> 00:09:13,000 Puedo saber qué es importante en una persona, así seguro. 98 00:09:15,000 --> 00:09:18,000 ¿De qué dependerá una persona? 99 00:09:18,000 --> 00:09:20,000 Los datos importantes de una persona. 100 00:09:23,000 --> 00:09:25,000 En general dependerá del contexto. 101 00:09:25,000 --> 00:09:27,000 ¿Para qué es mi programa? 102 00:09:27,000 --> 00:09:31,000 Si mi programa es para la ciudadanía, para hacer un censo electoral, 103 00:09:31,000 --> 00:09:34,000 la altura de la gente no me interesa. 104 00:09:34,000 --> 00:09:44,000 Si mi programa es un gimnasio con orientación también a perder peso, 105 00:09:44,000 --> 00:09:51,000 a tener que ver con qué se come, formaciones nutricionales y cosas por el estilo, 106 00:09:51,000 --> 00:09:54,000 pues a lo mejor saber cuánto es alto y cuánto pesa una persona, 107 00:09:54,000 --> 00:09:56,000 pues puede ser interesante. 108 00:09:57,000 --> 00:10:05,000 Puede ser que el mismo concepto de persona en varios contextos, 109 00:10:05,000 --> 00:10:08,000 en varios sistemas, en varios programas, 110 00:10:08,000 --> 00:10:12,000 pues tenga una definición un poco distinta. 111 00:10:12,000 --> 00:10:13,000 ¿Vale? 112 00:10:13,000 --> 00:10:18,000 Pero a lo mejor puedo pillar cosas básicas que sí me valdrían para todos. 113 00:10:18,000 --> 00:10:19,000 ¿Vale? 114 00:10:19,000 --> 00:10:20,000 A lo mejor, ¿eh? 115 00:10:20,000 --> 00:10:22,000 No lo sé, en algunos casos se puede hacer. 116 00:10:22,000 --> 00:10:28,000 Si yo estoy modelizando a una persona, saber su nombre, apellido, 117 00:10:28,000 --> 00:10:35,000 pues puede ser útil tanto en un gimnasio como si hago un censo para el estatal, 118 00:10:35,000 --> 00:10:38,000 no sé, como si puede ser una aplicación médica o lo que sea. 119 00:10:38,000 --> 00:10:39,000 ¿Vale? 120 00:10:39,000 --> 00:10:43,000 Un identificador como el DNI, pues me podría valer para todas esas cosas. 121 00:10:43,000 --> 00:10:44,000 ¿Sí? 122 00:10:44,000 --> 00:10:49,000 A lo mejor no lo llamo DNI porque a lo mejor si lo uso en otra nación 123 00:10:49,000 --> 00:10:53,000 no me vale el DNI, pues lo llamo identificador o ID de la persona, 124 00:10:53,000 --> 00:10:55,000 pero podría ser útil. 125 00:10:55,000 --> 00:10:56,000 ¿Vale? 126 00:10:56,000 --> 00:10:59,000 Y luego veremos que la programación a objetos me permite decir, 127 00:10:59,000 --> 00:11:01,000 vale, ya he hecho una persona, la he hecho así, vale, perfecto, 128 00:11:01,000 --> 00:11:04,000 la pillo y la puedo reutilizar en otro sistema. 129 00:11:04,000 --> 00:11:08,000 Y es más, puedo pillar como base lo que ha creado otra persona 130 00:11:08,000 --> 00:11:14,000 o otro programador sobre persona y luego adaptarla a mis necesidades. 131 00:11:14,000 --> 00:11:21,000 Yo tengo una persona ya hecha que tiene solo nombre, apellido e identificador 132 00:11:21,000 --> 00:11:25,000 y ahora quiero hacer mi gimnasio, pues necesito más datos aquí, 133 00:11:25,000 --> 00:11:30,000 pues puedo pillar la persona ya como está hecho y extenderla 134 00:11:30,000 --> 00:11:35,000 y crear datos adicionales y métodos adicionales para una persona 135 00:11:35,000 --> 00:11:38,000 que es para mi contexto concreto. 136 00:11:38,000 --> 00:11:40,000 Eso lo veremos más adelante. 137 00:11:41,000 --> 00:11:49,000 Además de los datos, yo necesito definir los comportamientos. 138 00:11:49,000 --> 00:11:57,000 ¿Qué puede hacer esta clase, esta entidad que yo estoy modelizando? 139 00:11:57,000 --> 00:11:58,000 Una persona. 140 00:11:58,000 --> 00:12:01,000 Una persona puede, tiene su nombre y tiene su apellido, vale, 141 00:12:01,000 --> 00:12:05,000 esto lo hemos dicho, son los datos, vale, los datos puros de esta persona. 142 00:12:05,000 --> 00:12:07,000 ¿Pero qué puede hacer una persona? 143 00:12:08,000 --> 00:12:14,000 En mi programa, en mi modelo de lo que estoy modelizando de una persona, 144 00:12:14,000 --> 00:12:18,000 ¿qué son las actividades que puede hacer una persona? 145 00:12:18,000 --> 00:12:21,000 Y lo tengo que pensar y ver en mi contexto. 146 00:12:21,000 --> 00:12:26,000 Por ejemplo, en un gimnasio la persona podría hacer, usar una máquina 147 00:12:26,000 --> 00:12:33,000 o hacer ejercicio, vale, entonces tendré un método que será hacer ejercicio 148 00:12:33,000 --> 00:12:37,000 que se llamará sobre las personas, o sea, las personas podrán hacer ejercicio 149 00:12:37,000 --> 00:12:42,000 y cuando sea una persona, un objeto persona, una cosa persona por ahora, 150 00:12:42,000 --> 00:12:44,000 ya veremos la diferencia entre falsos objetos, 151 00:12:44,000 --> 00:12:48,000 llama el método hacer ejercicio, pues allí estará el código 152 00:12:48,000 --> 00:12:53,000 que tiene que hacer, que le pasa este objeto a esta persona 153 00:12:53,000 --> 00:12:57,000 cuando yo ejecuto el método hacer ejercicio. 154 00:12:58,000 --> 00:13:04,000 ¿Sí? A lo mejor por algún lado tengo una variable de calorías gastadas hoy 155 00:13:04,000 --> 00:13:10,000 y el método hacer ejercicio pues aumenta el número de calorías gastadas, no lo sé. 156 00:13:12,000 --> 00:13:16,000 Entonces, estas son las dos cosas interesantes de una clase, 157 00:13:16,000 --> 00:13:20,000 cuando yo defino una clase, defino sus datos y sus comportamientos, vale, 158 00:13:20,000 --> 00:13:24,000 y la cosa interesante también es que todo esto va empaquetado, 159 00:13:24,000 --> 00:13:29,000 esto es un único bloque, una única clase que me define sus datos, 160 00:13:29,000 --> 00:13:34,000 todos los datos necesarios para modelizar esa clase 161 00:13:34,000 --> 00:13:40,000 y todos los posibles comportamientos, todos los posibles métodos, 162 00:13:40,000 --> 00:13:46,000 todas las posibles acciones, en cierto sentido, que puede hacer esa clase, 163 00:13:46,000 --> 00:13:48,000 esa persona en nuestro caso. 164 00:13:49,000 --> 00:13:50,000 ¿Dudas? 165 00:13:50,000 --> 00:13:53,000 Una clase no puede estar dentro de otra clase, ¿no? 166 00:13:53,000 --> 00:13:57,000 Una clase, sí, pero esto ya, muy avanzado. 167 00:13:58,000 --> 00:14:02,000 En un fichero solo yo puedo declarar varias clases y hay mecanismos 168 00:14:02,000 --> 00:14:07,000 para lo que se llama las clases anónimas, para crear una clase dentro de otra clase. 169 00:14:11,000 --> 00:14:14,000 Los objetos colaboran entre ellos para conseguir algo, ¿vale? 170 00:14:15,000 --> 00:14:19,000 La idea es que antes nosotros utilizamos un solo fichero, 171 00:14:19,000 --> 00:14:23,000 yo tenía mi fichero, ahí dentro tenía todos los datos, todas las funciones, 172 00:14:23,000 --> 00:14:27,000 todo lo que tenía que hacer, ejecutaba el main y ya está, se acabó. 173 00:14:27,000 --> 00:14:32,000 Ahora, la idea es que yo voy a crear varias clases, 174 00:14:32,000 --> 00:14:38,000 cada clase que me representa algo del sistema en que yo estoy trabajando, ¿vale? 175 00:14:38,000 --> 00:14:42,000 Y luego tendré un main o varios mains o lo que sea, 176 00:14:42,000 --> 00:14:47,000 que en un cierto sentido hace relacionarse entre ellos estos objetos, estas clases. 177 00:14:48,000 --> 00:14:50,000 Por ejemplo, puedo tener la clase Persona, 178 00:14:50,000 --> 00:14:55,000 y puedo tener la clase Gimnasio, que tiene dentro objetos de tipo máquina, 179 00:14:56,000 --> 00:15:01,000 para que luego yo pueda pillar una persona, asociarla a una máquina determinada, 180 00:15:01,000 --> 00:15:04,000 es decir, oye, esta persona está usando esta máquina. 181 00:15:05,000 --> 00:15:12,000 Para luego, a lo mejor, si mi sistema es una gestión de un gimnasio, 182 00:15:12,000 --> 00:15:14,000 donde yo tengo que configurar que, oye, mira, 183 00:15:14,000 --> 00:15:16,000 a media hora una persona ha pillado esta máquina, 184 00:15:16,000 --> 00:15:19,000 entonces esta máquina está bloqueada, no la puede pillar otra persona, 185 00:15:19,000 --> 00:15:22,000 pues entonces tendré que jugar con estas cosas. 186 00:15:23,000 --> 00:15:26,000 A lo mejor habrá un objeto, una clase, que sea Suscripción, 187 00:15:26,000 --> 00:15:32,000 que se asociará con una persona para saber qué tipo de abono tiene esta persona, 188 00:15:32,000 --> 00:15:36,000 si tiene clases solos, si viene todos los días, todos los martes, 189 00:15:36,000 --> 00:15:38,000 o si tiene 30 horas a la semana, no lo sé. 190 00:15:39,000 --> 00:15:43,000 Todo eso dependerá de mi sistema, cuánto lo quiero complicar y cosas así. 191 00:15:43,000 --> 00:15:46,000 Está claro que al principio nosotros haremos ejemplos muy sencillos 192 00:15:46,000 --> 00:15:48,000 y iremos complicando un poco las cosas. 193 00:15:48,000 --> 00:15:52,000 Los programas reales son sistemas relativamente complejos, 194 00:15:53,000 --> 00:15:58,000 que vosotros sabréis en el tercer trimestre del próximo curso. 195 00:15:59,000 --> 00:16:01,000 Con un poco de suerte. 196 00:16:02,000 --> 00:16:06,000 Entre objetos, la forma de colaborar es pasándose mensajes. 197 00:16:06,000 --> 00:16:09,000 Es decir, entre objetos que están trabajando, 198 00:16:09,000 --> 00:16:12,000 entre personas, o entre una persona y una máquina, 199 00:16:12,000 --> 00:16:14,000 se mandan mensajes. 200 00:16:14,000 --> 00:16:18,000 Esto de mandarse mensajes es muy a alto nivel. 201 00:16:18,000 --> 00:16:23,000 En la realidad, siendo más concretos, son llamadas a métodos. 202 00:16:23,000 --> 00:16:27,000 Cuando yo llamo a un método de otro objeto, de otra clase, 203 00:16:27,000 --> 00:16:30,000 lo que está haciendo, en un cierto sentido, es mandarle un mensaje, 204 00:16:30,000 --> 00:16:32,000 pedirle cosas. 205 00:16:32,000 --> 00:16:36,000 Le mando parámetros, los parámetros que estaban entre paréntesis 206 00:16:36,000 --> 00:16:38,000 en la declaración, ¿os acordáis? 207 00:16:38,000 --> 00:16:42,000 Y él me devuelve, o no, porque puede que no le mande nada, 208 00:16:42,000 --> 00:16:47,000 o puede que no me devuelva nada, un resultado, ¿vale? 209 00:16:47,000 --> 00:16:50,000 Que es las funciones y los procedimientos que teníamos antes. 210 00:16:51,000 --> 00:16:54,000 Ahora los llamamos métodos, pero la idea es esta, ¿vale? 211 00:16:54,000 --> 00:16:57,000 Entonces, si yo tengo una persona, y tendré su método, 212 00:16:57,000 --> 00:17:01,000 salúdame, que cuando yo lo llamo, me dice hola. 213 00:17:01,000 --> 00:17:03,000 Y tendré el método, dime cómo te llamas, 214 00:17:03,000 --> 00:17:05,000 y cuando yo le diré, dime cómo te llamas, 215 00:17:05,000 --> 00:17:08,000 me dirá, me llamo, y va a pillar dentro de sus datos 216 00:17:08,000 --> 00:17:10,000 su nombre y su apellido. 217 00:17:11,000 --> 00:17:13,000 ¿Se entiende? 218 00:17:13,000 --> 00:17:15,000 ¿Dudas? 219 00:17:15,000 --> 00:17:17,000 Pero ahora estamos a muy alto nivel. 220 00:17:17,000 --> 00:17:19,000 No hemos empezado con ejemplos concretos. 221 00:17:19,000 --> 00:17:23,000 Vamos adelante para empezar a mueblar lo que es, 222 00:17:23,000 --> 00:17:26,000 luego, los ejemplos prácticos que haremos después. 223 00:17:26,000 --> 00:17:29,000 Cada clase va a ocuparse de lo que es su responsabilidad. 224 00:17:29,000 --> 00:17:31,000 Otra cosa interesante. 225 00:17:31,000 --> 00:17:35,000 No voy a hacer como ahora, que yo tengo un programa 226 00:17:35,000 --> 00:17:37,000 y pongo todo allí, ¿vale? 227 00:17:37,000 --> 00:17:39,000 Estoy haciendo mi programita, 228 00:17:39,000 --> 00:17:42,000 tengo solo el main y algunas funciones que tengo por allí, 229 00:17:42,000 --> 00:17:44,000 pues pongo todo dentro de la misma clase, 230 00:17:44,000 --> 00:17:46,000 como hemos estado haciendo ahora, dentro del mismo fichero, 231 00:17:46,000 --> 00:17:50,000 y allí está mezclado todo lo que hace mi programa. 232 00:17:50,000 --> 00:17:51,000 Ahora no. 233 00:17:51,000 --> 00:17:55,000 Ahora lo que intento hacer es dividir y modelizar las cosas 234 00:17:55,000 --> 00:18:01,000 de forma más en módulos, en bloques, en paquetes distintos. 235 00:18:01,000 --> 00:18:02,000 ¿Vale? 236 00:18:02,000 --> 00:18:05,000 Entonces, estoy en el gimnasio. 237 00:18:05,000 --> 00:18:09,000 Bueno, no, ahora estoy en un taller de coches. 238 00:18:09,000 --> 00:18:10,000 ¿Vale? 239 00:18:10,000 --> 00:18:14,000 Entonces, ¿a mí qué me interesa de este taller de coches? 240 00:18:14,000 --> 00:18:16,000 Bueno, me interesarán los coches, 241 00:18:16,000 --> 00:18:18,000 por lo tanto ahí tendré una clase que representa 242 00:18:18,000 --> 00:18:22,000 todos los datos del coche y todo lo que puede hacer sobre un coche. 243 00:18:22,000 --> 00:18:24,000 Luego me interesarán los clientes, 244 00:18:24,000 --> 00:18:31,000 pues entonces tendré una parte, una clase, unos objetos clientes 245 00:18:31,000 --> 00:18:34,000 que tendrán dentro todos los datos de los clientes. 246 00:18:34,000 --> 00:18:35,000 Si han pagado, no. 247 00:18:35,000 --> 00:18:37,000 Si quieren facturas y no sé qué. 248 00:18:37,000 --> 00:18:38,000 ¿Vale? 249 00:18:38,000 --> 00:18:39,000 Todo ahí. 250 00:18:39,000 --> 00:18:43,000 Tendré los mecánicos, que son otros tipos de personas, 251 00:18:43,000 --> 00:18:45,000 pero que son los que puedan arreglar los coches. 252 00:18:45,000 --> 00:18:48,000 Si no tengo un mecánico disponible, no puedo arreglar el coche, etc. 253 00:18:48,000 --> 00:18:53,000 Cada una de estas entidades dentro de mi sistema 254 00:18:53,000 --> 00:18:59,000 será una clase aparte y solo se empaquetará dentro de esa clase 255 00:18:59,000 --> 00:19:04,000 los datos y los métodos que se refieren a esa clase. 256 00:19:04,000 --> 00:19:05,000 ¿Vale? 257 00:19:05,000 --> 00:19:06,000 Es su responsabilidad. 258 00:19:06,000 --> 00:19:10,000 No pondré en un coche si ha pagado o no, 259 00:19:10,000 --> 00:19:12,000 porque no es el coche que paga. 260 00:19:12,000 --> 00:19:14,000 No sé si me explico lo que quiero decir. 261 00:19:14,000 --> 00:19:15,000 ¿Sí? 262 00:19:15,000 --> 00:19:19,000 Luego, no es una cosa absoluta. 263 00:19:19,000 --> 00:19:24,000 Es una cosa de cómo yo defino mi sistema, mi programa 264 00:19:24,000 --> 00:19:25,000 y para qué sirve. 265 00:19:25,000 --> 00:19:26,000 ¿Vale? 266 00:19:26,000 --> 00:19:29,000 A lo mejor el programa que estoy haciendo yo no es de contabilidad 267 00:19:29,000 --> 00:19:31,000 y por lo tanto no le interesa al cliente. 268 00:19:31,000 --> 00:19:33,000 Es solo para los mecánicos 269 00:19:33,000 --> 00:19:38,000 y la gestión de qué mecánico repara qué coche. 270 00:19:38,000 --> 00:19:44,000 Entonces en mi programa me da igual saber quién es el cliente de este coche. 271 00:19:44,000 --> 00:19:46,000 A mí me interesa tener coches mecánicos 272 00:19:46,000 --> 00:19:48,000 y una forma de que el mecánico diga 273 00:19:48,000 --> 00:19:50,000 oye, mira, este coche lo he pillado yo 274 00:19:50,000 --> 00:19:51,000 entonces lo bloquea 275 00:19:51,000 --> 00:19:52,000 y si viene otro mecánico 276 00:19:52,000 --> 00:19:55,000 intenta ver si este coche está libre para repararlo 277 00:19:55,000 --> 00:19:57,000 dice no, ya está un mecánico asignado 278 00:19:57,000 --> 00:19:59,000 y por lo tanto lo deja en paz. 279 00:19:59,000 --> 00:20:00,000 No lo sé. 280 00:20:00,000 --> 00:20:01,000 ¿Vale? 281 00:20:01,000 --> 00:20:04,000 Son todos... cosas. 282 00:20:04,000 --> 00:20:05,000 ¿Vale? 283 00:20:05,000 --> 00:20:06,000 Aquí, ejemplo. 284 00:20:06,000 --> 00:20:08,000 Un coche puede ser un ejemplo de clase. 285 00:20:08,000 --> 00:20:09,000 ¿Vale? 286 00:20:09,000 --> 00:20:11,000 Con las características y las funcionalidades propias. 287 00:20:11,000 --> 00:20:13,000 Un coche puede tener como características 288 00:20:13,000 --> 00:20:15,000 dependiendo de lo que sea 289 00:20:15,000 --> 00:20:19,000 pues un color, la marca, el modelo y la matrícula. 290 00:20:19,000 --> 00:20:23,000 Para mi programa yo decido que la cosa importante de un coche 291 00:20:23,000 --> 00:20:27,000 es que quiero saber cuál es su color, su marca, su modelo y su matrícula. 292 00:20:27,000 --> 00:20:29,000 Estos son los cuatro datos que me interesan. 293 00:20:29,000 --> 00:20:31,000 ¿Y qué son estos? 294 00:20:31,000 --> 00:20:33,000 Int, string... 295 00:20:33,000 --> 00:20:35,000 ¿Qué son? 296 00:20:35,000 --> 00:20:36,000 No lo sé. 297 00:20:36,000 --> 00:20:37,000 Depende. 298 00:20:37,000 --> 00:20:38,000 ¿Vale? 299 00:20:38,000 --> 00:20:40,000 ¿Una matrícula qué es? 300 00:20:43,000 --> 00:20:46,000 Un string, porque tiene números y cartas. 301 00:20:46,000 --> 00:20:48,000 ¿Color qué es? 302 00:20:51,000 --> 00:20:56,000 String, si lo quiero guardar como azul, verde, naranja. 303 00:20:56,000 --> 00:20:59,000 Si yo tengo una tabla de colores 304 00:20:59,000 --> 00:21:02,000 y el uno es el negro, el dos es el verde, el tres es... 305 00:21:02,000 --> 00:21:03,000 pues es un int. 306 00:21:03,000 --> 00:21:06,000 Si yo lo quiero guardar como RGB 307 00:21:06,000 --> 00:21:08,000 pues serán tres int. 308 00:21:10,000 --> 00:21:12,000 ¿Entendéis lo que quiero decir? 309 00:21:12,000 --> 00:21:14,000 Esto yo tengo que definir 310 00:21:14,000 --> 00:21:16,000 cuáles son las características de la clase 311 00:21:16,000 --> 00:21:19,000 y además tengo que definir 312 00:21:19,000 --> 00:21:21,000 cada uno de estas características, 313 00:21:21,000 --> 00:21:24,000 cada uno de estos atributos, como se llamarán, 314 00:21:24,000 --> 00:21:26,000 cada una de estas variables 315 00:21:26,000 --> 00:21:28,000 qué tipo tiene. 316 00:21:28,000 --> 00:21:29,000 ¿Vale? 317 00:21:29,000 --> 00:21:31,000 En base a mis exigentes. 318 00:21:32,000 --> 00:21:36,000 Las funcionalidades que me interesan del coche, 319 00:21:36,000 --> 00:21:38,000 estoy definiendo el coche, 320 00:21:38,000 --> 00:21:40,000 es desplazarse o parar. 321 00:21:40,000 --> 00:21:42,000 He decidido que mi coche puede hacer dos cosas. 322 00:21:42,000 --> 00:21:44,000 Puedo llamar el método desplazarse, 323 00:21:44,000 --> 00:21:47,000 que entonces se moverá de un kilómetro, qué sé yo, 324 00:21:47,000 --> 00:21:49,000 o el método parar, 325 00:21:49,000 --> 00:21:51,000 que entonces quiere decir que lo paro, 326 00:21:51,000 --> 00:21:53,000 se apaga y se queda ahí. 327 00:21:53,000 --> 00:21:54,000 ¿Por qué? 328 00:21:54,000 --> 00:21:55,000 No lo sé. 329 00:21:55,000 --> 00:21:56,000 Es una gente. 330 00:21:56,000 --> 00:21:57,000 ¿Vale? 331 00:21:57,000 --> 00:21:58,000 Podría hilar más fino 332 00:21:58,000 --> 00:22:01,000 y tener que el coche tiene el método arrancar, 333 00:22:01,000 --> 00:22:03,000 el método apagar el coche, 334 00:22:03,000 --> 00:22:04,000 el método desplazarse 335 00:22:04,000 --> 00:22:06,000 y que cuando llamo el método desplazarse, 336 00:22:06,000 --> 00:22:08,000 si antes no he llamado el método arrancar, 337 00:22:08,000 --> 00:22:10,000 pues no me tiene que funcionar. 338 00:22:10,000 --> 00:22:12,000 Entonces tendré un booleano por ahí 339 00:22:12,000 --> 00:22:14,000 para saber si el motor está encendido o no 340 00:22:14,000 --> 00:22:16,000 y cuando llamo arrancar, 341 00:22:16,000 --> 00:22:18,000 comprobaré si hay gasolina, 342 00:22:18,000 --> 00:22:20,000 porque aquí tengo otra característica 343 00:22:20,000 --> 00:22:24,000 que es litros en el depósito, 344 00:22:24,000 --> 00:22:25,000 qué sé yo. 345 00:22:25,000 --> 00:22:26,000 ¿Vale? 346 00:22:26,000 --> 00:22:28,000 Depende de lo que estamos nosotros modelizando. 347 00:22:28,000 --> 00:22:32,000 Está claro que aquí no le voy a poner 348 00:22:32,000 --> 00:22:35,000 qué sé yo, 349 00:22:35,000 --> 00:22:37,000 tamaño de las ruedas, 350 00:22:37,000 --> 00:22:39,000 si en mis sistemas el tamaño de las ruedas 351 00:22:39,000 --> 00:22:41,000 no me sirve de nada. 352 00:22:41,000 --> 00:22:42,000 ¿Vale? 353 00:22:42,000 --> 00:22:43,000 A lo mejor, pero ahí está, 354 00:22:43,000 --> 00:22:44,000 porque yo he dicho, 355 00:22:44,000 --> 00:22:45,000 oye, mira, 356 00:22:45,000 --> 00:22:47,000 otro proyecto que hemos hecho ya antes, 357 00:22:47,000 --> 00:22:50,000 pues tiene ya un coche, 358 00:22:50,000 --> 00:22:51,000 pillo ese coche 359 00:22:51,000 --> 00:22:52,000 y en ese coche, 360 00:22:52,000 --> 00:22:54,000 porque en ese sistema servía, 361 00:22:54,000 --> 00:22:56,000 pues está la información 362 00:22:56,000 --> 00:22:58,000 de tamaño de las ruedas. 363 00:22:58,000 --> 00:22:59,000 Pero yo, 364 00:22:59,000 --> 00:23:01,000 para no rehacer todo el trabajo otra vez, 365 00:23:01,000 --> 00:23:03,000 pues pillo esa misma clase, 366 00:23:03,000 --> 00:23:06,000 la uso y en mi sistema luego, 367 00:23:06,000 --> 00:23:08,000 pues ese dato o no se pone 368 00:23:08,000 --> 00:23:10,000 o no se lee nunca 369 00:23:10,000 --> 00:23:11,000 y por lo tanto está allí, 370 00:23:11,000 --> 00:23:12,000 ocupa un poco de espacio, 371 00:23:12,000 --> 00:23:13,000 pero me da igual. 372 00:23:13,000 --> 00:23:16,000 Dependerá también de mis exigentes. 373 00:23:16,000 --> 00:23:18,000 Una clase de coche 374 00:23:18,000 --> 00:23:20,000 se responsabilizará de manejar 375 00:23:20,000 --> 00:23:22,000 todo aquello que tenga que ver con el coche. 376 00:23:22,000 --> 00:23:24,000 Un garaje con muchos coches 377 00:23:24,000 --> 00:23:26,000 puede hacer uso de ella 378 00:23:26,000 --> 00:23:28,000 o un conductor también. 379 00:23:28,000 --> 00:23:29,000 ¿Vale? 380 00:23:29,000 --> 00:23:30,000 Entonces yo tengo mi clase de coche 381 00:23:30,000 --> 00:23:32,000 y todo lo referente al coche 382 00:23:32,000 --> 00:23:34,000 está allí dentro. 383 00:23:34,000 --> 00:23:35,000 Pero luego, 384 00:23:35,000 --> 00:23:36,000 ¿cómo uso este coche? 385 00:23:36,000 --> 00:23:38,000 Pues puedo tener taller 386 00:23:38,000 --> 00:23:40,000 que esté dentro del coche. 387 00:23:40,000 --> 00:23:42,000 Puedo tener garaje 388 00:23:42,000 --> 00:23:43,000 que es, 389 00:23:43,000 --> 00:23:44,000 porque tengo una mansión 390 00:23:44,000 --> 00:23:45,000 y 27 coches, 391 00:23:45,000 --> 00:23:47,000 entonces me he hecho un sistema 392 00:23:47,000 --> 00:23:48,000 para ver qué coches 393 00:23:48,000 --> 00:23:49,000 están aparcados 394 00:23:50,000 --> 00:23:52,000 en mis 27 plazas de garajes 395 00:23:52,000 --> 00:23:53,000 y cuáles no. 396 00:23:53,000 --> 00:23:54,000 O puedo hacer 397 00:23:54,000 --> 00:23:56,000 que hay una otra clase 398 00:23:56,000 --> 00:23:57,000 que se llama conductor 399 00:23:57,000 --> 00:23:58,000 que está asociado 400 00:23:58,000 --> 00:23:59,000 o piloto o lo que sea, 401 00:23:59,000 --> 00:24:01,000 que está asociado con el coche 402 00:24:01,000 --> 00:24:02,000 y usará ese coche. 403 00:24:02,000 --> 00:24:03,000 No lo sé. 404 00:24:03,000 --> 00:24:04,000 Ya veremos cómo hacemos 405 00:24:04,000 --> 00:24:05,000 todas estas cosas 406 00:24:05,000 --> 00:24:06,000 y las asociamos. 407 00:24:06,000 --> 00:24:07,000 Lo que tiene que quedar claro 408 00:24:07,000 --> 00:24:09,000 es que ahora yo tengo una clase 409 00:24:09,000 --> 00:24:10,000 que define 410 00:24:10,000 --> 00:24:12,000 cuáles son las características 411 00:24:12,000 --> 00:24:14,000 y cuáles son las funcionalidades 412 00:24:14,000 --> 00:24:15,000 de esa clase 413 00:24:15,000 --> 00:24:16,000 que se puede hacer 414 00:24:16,000 --> 00:24:18,000 y que todo va empaquetado allí. 415 00:24:18,000 --> 00:24:19,000 Si es la clase coche, 416 00:24:19,000 --> 00:24:21,000 todo lo de coche está allí. 417 00:24:21,000 --> 00:24:22,000 Si es la clase persona, 418 00:24:22,000 --> 00:24:23,000 todo lo de persona 419 00:24:23,000 --> 00:24:24,000 tiene que estar allí. 420 00:24:24,000 --> 00:24:25,000 No puedo tener otra clase 421 00:24:25,000 --> 00:24:27,000 que tiene un dato de persona. 422 00:24:28,000 --> 00:24:29,000 No puedo hacer 423 00:24:29,000 --> 00:24:30,000 la clase persona con el nombre 424 00:24:30,000 --> 00:24:32,000 y luego la clase identificación 425 00:24:32,000 --> 00:24:34,000 con el apellido de esa persona. 426 00:24:34,000 --> 00:24:35,000 Pues no. 427 00:24:35,000 --> 00:24:36,000 El apellido de esa persona 428 00:24:36,000 --> 00:24:38,000 tiene que estar dentro de persona. 429 00:24:39,000 --> 00:24:40,000 ¿Dudas? 430 00:24:43,000 --> 00:24:44,000 Cuando queramos 431 00:24:44,000 --> 00:24:45,000 que un coche se desplace 432 00:24:45,000 --> 00:24:46,000 en un garaje, 433 00:24:47,000 --> 00:24:48,000 tendremos que comunicarnos 434 00:24:48,000 --> 00:24:49,000 con el coche específico 435 00:24:49,000 --> 00:24:50,000 y darle la dirección 436 00:24:50,000 --> 00:24:53,000 a la que queremos que se desplace. 437 00:24:53,000 --> 00:24:55,000 Aquí se asume que desplazar 438 00:24:55,000 --> 00:24:56,000 tiene como parámetro 439 00:24:56,000 --> 00:24:57,000 una dirección 440 00:24:57,000 --> 00:25:00,000 y tú haces desplazar a este sitio 441 00:25:00,000 --> 00:25:02,000 y él se desplaza a este sitio. 442 00:25:04,000 --> 00:25:05,000 Cuando yo quiero 443 00:25:05,000 --> 00:25:08,000 que el garaje tendrá una dirección 444 00:25:08,000 --> 00:25:09,000 y yo quiero poner un coche 445 00:25:09,000 --> 00:25:10,000 dentro de ese garaje, 446 00:25:10,000 --> 00:25:12,000 en un main tendré que decir 447 00:25:12,000 --> 00:25:14,000 píllame este coche 448 00:25:15,000 --> 00:25:16,000 sobre este coche 449 00:25:16,000 --> 00:25:20,000 dile desplázate a la dirección 450 00:25:20,000 --> 00:25:21,000 del garaje 451 00:25:21,000 --> 00:25:23,000 y entonces él se desplazará. 452 00:25:25,000 --> 00:25:26,000 ¿Dudas? 453 00:25:26,000 --> 00:25:27,000 ¿Se entiende más o menos 454 00:25:27,000 --> 00:25:29,000 esta idea en general? 455 00:25:32,000 --> 00:25:34,000 Entonces ¿qué es una clase? 456 00:25:35,000 --> 00:25:36,000 Una clase es lo que 457 00:25:36,000 --> 00:25:37,000 en el lenguaje de programación 458 00:25:37,000 --> 00:25:38,000 nos va a permitir 459 00:25:38,000 --> 00:25:39,000 definir o construir 460 00:25:39,000 --> 00:25:41,000 uno o varios objetos. 461 00:25:41,000 --> 00:25:43,000 Una clase es un molde. 462 00:25:44,000 --> 00:25:47,000 Es la definición abstracta 463 00:25:47,000 --> 00:25:49,000 de los objetos. 464 00:25:49,000 --> 00:25:51,000 La clase es persona. 465 00:25:51,000 --> 00:25:52,000 Luego está la persona 466 00:25:52,000 --> 00:25:53,000 que se llama Estefano, 467 00:25:53,000 --> 00:25:55,000 la persona que se llama Carlos, 468 00:25:55,000 --> 00:25:57,000 la persona que se llama Sara. 469 00:25:59,000 --> 00:26:01,000 Todas las personas concretas 470 00:26:01,000 --> 00:26:05,000 son objetos de la clase persona. 471 00:26:07,000 --> 00:26:09,000 Todos tienen la misma estructura. 472 00:26:10,000 --> 00:26:11,000 Todos tienen nombre, 473 00:26:11,000 --> 00:26:12,000 apellido, identificador. 474 00:26:13,000 --> 00:26:14,000 Porque la clase me dice 475 00:26:14,000 --> 00:26:16,000 que una persona tiene 476 00:26:16,000 --> 00:26:17,000 nombre, apellido, 477 00:26:17,000 --> 00:26:18,000 identificador. 478 00:26:18,000 --> 00:26:19,000 Pero la clase no me dice 479 00:26:19,000 --> 00:26:21,000 qué nombre, qué apellido 480 00:26:21,000 --> 00:26:23,000 y qué identificador. 481 00:26:24,000 --> 00:26:25,000 En el momento en que yo creo 482 00:26:25,000 --> 00:26:28,000 un nuevo objeto de una clase, 483 00:26:28,000 --> 00:26:30,000 o sea una persona específica, 484 00:26:30,000 --> 00:26:32,000 al crearla le diré 485 00:26:32,000 --> 00:26:33,000 tú eres una persona 486 00:26:33,000 --> 00:26:34,000 por lo tanto tu estructura 487 00:26:34,000 --> 00:26:35,000 y tu comportamiento 488 00:26:35,000 --> 00:26:36,000 son lo que están definidos 489 00:26:36,000 --> 00:26:37,000 en la clase. 490 00:26:37,000 --> 00:26:38,000 Pero tú en particular 491 00:26:38,000 --> 00:26:40,000 tienes nombre Estefano, 492 00:26:40,000 --> 00:26:41,000 tienes apellido quiesa, 493 00:26:41,000 --> 00:26:43,000 tienes identificador, 494 00:26:43,000 --> 00:26:44,000 lo que sea. 495 00:26:46,000 --> 00:26:47,000 Entonces normalmente, 496 00:26:47,000 --> 00:26:48,000 en un cierto sentido, 497 00:26:48,000 --> 00:26:50,000 la clase una 498 00:26:50,000 --> 00:26:52,000 y a partir de una clase 499 00:26:52,000 --> 00:26:55,000 puedo crear un montón de objetos. 500 00:26:55,000 --> 00:26:58,000 Los objetos son instancias 501 00:26:58,000 --> 00:26:59,000 de una clase. 502 00:26:59,000 --> 00:27:01,000 Yo pillo una clase 503 00:27:01,000 --> 00:27:04,000 en la instancia de un objeto. 504 00:27:04,000 --> 00:27:07,000 La clase es un molde vacío 505 00:27:07,000 --> 00:27:09,000 cuando yo relleno 506 00:27:09,000 --> 00:27:11,000 los varios campos de esa clase 507 00:27:11,000 --> 00:27:13,000 estoy creando un objeto de esa clase 508 00:27:13,000 --> 00:27:15,000 y puedo crear todos los objetos 509 00:27:15,000 --> 00:27:16,000 que quiero. 510 00:27:16,000 --> 00:27:18,000 Pregunta para vosotros. 511 00:27:19,000 --> 00:27:24,000 ¿Puedes volver a repetirlo? 512 00:27:24,000 --> 00:27:25,000 Sí. 513 00:27:25,000 --> 00:27:27,000 Esto no sería igual 514 00:27:27,000 --> 00:27:29,000 que las tablas en base de datos. 515 00:27:29,000 --> 00:27:31,000 Si tienes una tabla 516 00:27:31,000 --> 00:27:33,000 con ciertos atributos, 517 00:27:33,000 --> 00:27:34,000 por ejemplo, 518 00:27:34,000 --> 00:27:36,000 persona, tienes DNI, 519 00:27:36,000 --> 00:27:37,000 tienes... 520 00:27:37,000 --> 00:27:40,000 Si una tabla es la clase, 521 00:27:40,000 --> 00:27:43,000 cada registro es un objeto. 522 00:27:43,000 --> 00:27:44,000 Vale. 523 00:27:45,000 --> 00:27:47,000 Pero no son ni clases ni objetos. 524 00:27:47,000 --> 00:27:48,000 ¿Vale? 525 00:27:48,000 --> 00:27:50,000 Porque faltaría toda la parte del método. 526 00:27:50,000 --> 00:27:52,000 En base de datos no lo hay. 527 00:27:52,000 --> 00:27:53,000 Pero como paralelo, 528 00:27:53,000 --> 00:27:54,000 ¿por qué no? 529 00:27:54,000 --> 00:27:55,000 La tabla te dice, 530 00:27:55,000 --> 00:27:57,000 mira, aquí va nombre, 531 00:27:57,000 --> 00:27:59,000 apellido y edad. 532 00:27:59,000 --> 00:28:00,000 ¿Vale? 533 00:28:00,000 --> 00:28:01,000 Y no te ha dicho nada. 534 00:28:01,000 --> 00:28:03,000 Te ha dicho la estructura, 535 00:28:03,000 --> 00:28:04,000 pero no te ha dicho 536 00:28:04,000 --> 00:28:05,000 qué hay dentro. 537 00:28:05,000 --> 00:28:07,000 Y luego tú vas rellenando con record. 538 00:28:07,000 --> 00:28:08,000 Sí. 539 00:28:08,000 --> 00:28:09,000 Esto es parecido. 540 00:28:09,000 --> 00:28:11,000 La clase te dice, 541 00:28:11,000 --> 00:28:12,000 en general, 542 00:28:12,000 --> 00:28:14,000 qué características tiene 543 00:28:14,000 --> 00:28:16,000 lo que estamos modelizando 544 00:28:17,000 --> 00:28:19,000 y qué puede hacer, 545 00:28:19,000 --> 00:28:23,000 qué métodos puede ejecutar 546 00:28:23,000 --> 00:28:24,000 este objeto. 547 00:28:24,000 --> 00:28:25,000 ¿Vale? 548 00:28:25,000 --> 00:28:26,000 Y a partir de allí, 549 00:28:26,000 --> 00:28:27,000 tú dices, 550 00:28:27,000 --> 00:28:28,000 vale, yo me puedo crear 551 00:28:28,000 --> 00:28:29,000 un objeto concreto 552 00:28:29,000 --> 00:28:31,000 rellenando sus campos 553 00:28:31,000 --> 00:28:33,000 y luego utilizándolo con sus métodos. 554 00:28:33,000 --> 00:28:34,000 ¿Sí? 555 00:28:34,000 --> 00:28:35,000 Y... 556 00:28:37,000 --> 00:28:39,000 Entonces, la clase, repito, 557 00:28:39,000 --> 00:28:40,000 es un molde, 558 00:28:40,000 --> 00:28:43,000 es una abstracción, 559 00:28:43,000 --> 00:28:44,000 ¿vale? 560 00:28:44,000 --> 00:28:45,000 Una categoría, 561 00:28:45,000 --> 00:28:49,000 una clase de lo que estoy modelizando. 562 00:28:49,000 --> 00:28:53,000 Los objetos son instancias concretas. 563 00:28:53,000 --> 00:28:55,000 Son, píllame este molde 564 00:28:55,000 --> 00:28:56,000 y asígnale, 565 00:28:56,000 --> 00:28:58,000 allá donde había campos vacíos, 566 00:28:58,000 --> 00:28:59,000 porque no sé, 567 00:28:59,000 --> 00:29:00,000 yo sé que tiene que poner un nombre, 568 00:29:00,000 --> 00:29:01,000 pero no sé cuál nombre, 569 00:29:01,000 --> 00:29:03,000 pues ahora asígnale un nombre. 570 00:29:03,000 --> 00:29:05,000 Y yo desde una clase sola 571 00:29:05,000 --> 00:29:07,000 puedo hacer muchos objetos distintos. 572 00:29:07,000 --> 00:29:10,000 Cada objeto será un trocito de memoria, 573 00:29:10,000 --> 00:29:11,000 será como una variable, 574 00:29:11,000 --> 00:29:13,000 pero no una variable sencilla 575 00:29:13,000 --> 00:29:15,000 como el tipo int, 576 00:29:15,000 --> 00:29:17,000 que es un cuadradito con dentro el número. 577 00:29:17,000 --> 00:29:19,000 Será un cuadrado grande 578 00:29:19,000 --> 00:29:20,000 con varios campos, 579 00:29:20,000 --> 00:29:21,000 con muchas cosas, 580 00:29:21,000 --> 00:29:22,000 pero es un bloque único 581 00:29:22,000 --> 00:29:24,000 guardado por algún lado en la memoria, 582 00:29:24,000 --> 00:29:26,000 en una zona de la memoria 583 00:29:26,000 --> 00:29:28,000 que se llama el heap, 584 00:29:28,000 --> 00:29:29,000 heap, 585 00:29:29,000 --> 00:29:30,000 ¿vale? 586 00:29:30,000 --> 00:29:32,000 Que es donde la Java Virtual Machine 587 00:29:32,000 --> 00:29:34,000 crea los objetos. 588 00:29:35,000 --> 00:29:37,000 Pregunta, dos preguntas para vosotros. 589 00:29:37,000 --> 00:29:40,000 ¿Cómo se creará un nuevo objeto? 590 00:29:41,000 --> 00:29:43,000 New, ¿vale? 591 00:29:43,000 --> 00:29:45,000 Cuando veis new, 592 00:29:45,000 --> 00:29:47,000 la palabra new, 593 00:29:47,000 --> 00:29:48,000 y nosotros la hemos visto por ejemplo 594 00:29:48,000 --> 00:29:50,000 en los array, ¿vale? 595 00:29:50,000 --> 00:29:53,000 Allí es que se está creando un nuevo objeto. 596 00:29:53,000 --> 00:29:55,000 Cuando nosotros crearemos nuevos objetos 597 00:29:55,000 --> 00:29:57,000 de una clase, 598 00:29:57,000 --> 00:29:59,000 pues pondremos new y ese nombre, 599 00:29:59,000 --> 00:30:01,000 nombre de la clase, ¿sí? 600 00:30:01,000 --> 00:30:03,000 Y le pasaremos los parámetros necesarios 601 00:30:03,000 --> 00:30:05,000 para que construya lo que tiene que construir. 602 00:30:05,000 --> 00:30:07,000 Y a ese punto se creará un objeto. 603 00:30:07,000 --> 00:30:09,000 Y si yo lo llamo diez veces el new, 604 00:30:09,000 --> 00:30:12,000 pues me he creado diez objetos distintos. 605 00:30:12,000 --> 00:30:15,000 ¿El objeto puede tener heredad? 606 00:30:15,000 --> 00:30:18,000 ¿Puede partir de distintas clases? 607 00:30:18,000 --> 00:30:21,000 No, no heredamos. 608 00:30:21,000 --> 00:30:23,000 La herencia viene después. 609 00:30:23,000 --> 00:30:24,000 Por ahora son objetos separados 610 00:30:24,000 --> 00:30:26,000 y cosa por este, ¿vale? 611 00:30:26,000 --> 00:30:27,000 Esto de la herencia os lo digo 612 00:30:27,000 --> 00:30:29,000 porque luego lo haremos, lo veremos. 613 00:30:29,000 --> 00:30:32,000 Pero por ahora vamos a lo básico. 614 00:30:32,000 --> 00:30:35,000 Y no, en Java no puede. 615 00:30:35,000 --> 00:30:37,000 En C++ sí. 616 00:30:37,000 --> 00:30:40,000 Depende del lenguaje programado. 617 00:30:40,000 --> 00:30:43,000 Podemos decir que son moldes para construir objetos. 618 00:30:43,000 --> 00:30:46,000 Estos moldes tienen que ser escritos o programados 619 00:30:46,000 --> 00:30:48,000 y cada molde va a tener unas características 620 00:30:48,000 --> 00:30:51,000 que son el nombre de este molde, 621 00:30:51,000 --> 00:30:53,000 cómo se llama la clase, la clase persona, 622 00:30:53,000 --> 00:30:55,000 los atributos, 623 00:30:55,000 --> 00:30:58,000 que son las características propias de esta clase, 624 00:30:58,000 --> 00:31:01,000 y los métodos, o sea, las funcionalidades 625 00:31:01,000 --> 00:31:03,000 que ofrece esta clase. 626 00:31:03,000 --> 00:31:10,000 Entonces, clase animal. 627 00:31:12,000 --> 00:31:15,000 Nombre de la clase animal. 628 00:31:15,000 --> 00:31:18,000 Atributos de la clase animal. 629 00:31:18,000 --> 00:31:21,000 ¿Qué nos interesa? 630 00:31:24,000 --> 00:31:26,000 ¿Qué nos oye? 631 00:31:26,000 --> 00:31:28,000 Peso. Peso del animal. 632 00:31:28,000 --> 00:31:30,000 ¿Qué es peso? 633 00:31:30,000 --> 00:31:33,000 Es un string, es un boolean. 634 00:31:35,000 --> 00:31:37,000 Double. ¿Qué representa? 635 00:31:37,000 --> 00:31:41,000 Gramos, kilos, toneladas, gramos. 636 00:31:41,000 --> 00:31:44,000 Pues entonces yo pondría peso en gramos. 637 00:31:44,000 --> 00:31:48,000 Así, peso en mayúscula M, gramos. 638 00:31:49,000 --> 00:31:52,000 ¿Qué más nos interesa del animal? 639 00:31:54,000 --> 00:31:56,000 Alimentación. 640 00:31:56,000 --> 00:31:59,000 ¿Qué pilla alimentación? 641 00:31:59,000 --> 00:32:01,000 ¿Qué tipo es? 642 00:32:03,000 --> 00:32:04,000 Un string. 643 00:32:04,000 --> 00:32:06,000 ¿Vale? Puedo poner cualquier cosa. 644 00:32:06,000 --> 00:32:07,000 Vale. 645 00:32:09,000 --> 00:32:12,000 ¿Qué más me interesa del animal? 646 00:32:15,000 --> 00:32:16,000 Color, raza. 647 00:32:16,000 --> 00:32:18,000 Pongo todo lo que sea en atributos. 648 00:32:18,000 --> 00:32:19,000 ¿Vale? 649 00:32:19,000 --> 00:32:22,000 Esto será que cada objeto animal que creo 650 00:32:22,000 --> 00:32:24,000 tendrá su peso en gramos, 651 00:32:24,000 --> 00:32:27,000 su raza, su color, 652 00:32:27,000 --> 00:32:29,000 su alimentación. 653 00:32:29,000 --> 00:32:30,000 ¿Vale? 654 00:32:30,000 --> 00:32:31,000 Estas son las cosas. 655 00:32:31,000 --> 00:32:32,000 ¿Y por qué hay alimentación? 656 00:32:32,000 --> 00:32:35,000 Porque posiblemente este es un animal 657 00:32:35,000 --> 00:32:39,000 que utilizaré en un sistema de un zoo. 658 00:32:39,000 --> 00:32:40,000 ¿Vale? 659 00:32:40,000 --> 00:32:42,000 Y tengo que saber cada animal que está comiendo 660 00:32:42,000 --> 00:32:45,000 para luego poderle dar la comida correcta. 661 00:32:45,000 --> 00:32:46,000 ¿Sí? 662 00:32:46,000 --> 00:32:50,000 O es un sistema de preservación animal 663 00:32:50,000 --> 00:32:52,000 de especies raras 664 00:32:52,000 --> 00:32:54,000 y por lo tanto tengo que saber 665 00:32:54,000 --> 00:32:56,000 en qué hábitat y qué comen cada uno de ellos. 666 00:32:56,000 --> 00:32:57,000 Lo sé. 667 00:32:57,000 --> 00:32:59,000 Está claro que si es una cosa 668 00:32:59,000 --> 00:33:01,000 en que la alimentación no tiene sentido, 669 00:33:01,000 --> 00:33:03,000 pues quito la alimentación. 670 00:33:03,000 --> 00:33:04,000 ¿Se entiende eso? 671 00:33:04,000 --> 00:33:06,000 ¿Y qué puede hacer un animal? 672 00:33:06,000 --> 00:33:08,000 Comer. 673 00:33:08,000 --> 00:33:09,000 ¿Vale? 674 00:33:09,000 --> 00:33:11,000 Cuando yo llamaré el método comer, 675 00:33:11,000 --> 00:33:14,000 que le paso un objeto que come, por ejemplo, 676 00:33:14,000 --> 00:33:17,000 o sea, un algo que come, 677 00:33:17,000 --> 00:33:20,000 él comprobará que la alimentación sea correcta 678 00:33:20,000 --> 00:33:22,000 porque si no, no lo come, 679 00:33:22,000 --> 00:33:24,000 y si lo come, subirá su peso. 680 00:33:24,000 --> 00:33:25,000 Lo sé. 681 00:33:27,000 --> 00:33:28,000 Tamagotchi. 682 00:33:28,000 --> 00:33:29,000 Tamagotchi total. 683 00:33:29,000 --> 00:33:30,000 ¿Vale? 684 00:33:30,000 --> 00:33:32,000 ¿Se entiende esto? 685 00:33:32,000 --> 00:33:33,000 ¿Dudas? 686 00:33:35,000 --> 00:33:36,000 ¿Idea de clase? 687 00:33:37,000 --> 00:33:38,000 Cuando hablo de clase, 688 00:33:38,000 --> 00:33:40,000 hablo de algo general. 689 00:33:40,000 --> 00:33:41,000 ¿Vale? 690 00:33:41,000 --> 00:33:43,000 Es la abstracción. 691 00:33:43,000 --> 00:33:46,000 Yo puedo tener aquí veinte personas, 692 00:33:46,000 --> 00:33:47,000 veinticinco personas. 693 00:33:47,000 --> 00:33:48,000 ¿Vale? 694 00:33:48,000 --> 00:33:51,000 Lo que estoy haciendo es hacer 695 00:33:51,000 --> 00:33:53,000 que tenéis en común 696 00:33:53,000 --> 00:33:54,000 para abstraer y decir, 697 00:33:54,000 --> 00:33:56,000 vale, todos vosotros tenéis un nombre, 698 00:33:56,000 --> 00:33:58,000 todos vosotros tenéis un apellido, 699 00:33:58,000 --> 00:33:59,000 todos vosotros tenéis un... 700 00:33:59,000 --> 00:34:00,000 ¿Vale? 701 00:34:00,000 --> 00:34:01,000 Y a este punto, 702 00:34:01,000 --> 00:34:03,000 cada uno de vosotros tendrá estanciado 703 00:34:03,000 --> 00:34:06,000 el nombre, apellido y los otros atributos 704 00:34:06,000 --> 00:34:08,000 con lo vuestro. 705 00:34:08,000 --> 00:34:09,000 ¿Sí? 706 00:34:09,000 --> 00:34:11,000 Yo soy una persona, como todos vosotros, 707 00:34:11,000 --> 00:34:14,000 pero soy una persona que en el nombre tiene Stefano 708 00:34:14,000 --> 00:34:16,000 y en el apellido tiene Kiki. 709 00:34:16,000 --> 00:34:17,000 ¿Verdad? 710 00:34:19,000 --> 00:34:20,000 ¿Pensaba una clase? 711 00:34:20,000 --> 00:34:22,000 Siempre como ejemplo persona. 712 00:34:22,000 --> 00:34:24,000 Se define en un fichero que tiene el mismo nombre 713 00:34:24,000 --> 00:34:25,000 y extensión. 714 00:34:25,000 --> 00:34:27,000 O sea, que la clase persona, 715 00:34:27,000 --> 00:34:30,000 normalmente, se define en persona.java, 716 00:34:30,000 --> 00:34:32,000 que es lo que hemos hecho nosotros. 717 00:34:32,000 --> 00:34:35,000 En realidad, toda la clase que es pública, 718 00:34:35,000 --> 00:34:37,000 la que se llama public class, 719 00:34:37,000 --> 00:34:39,000 tiene que estar dentro de... 720 00:34:39,000 --> 00:34:41,000 O sea, la public class persona 721 00:34:41,000 --> 00:34:43,000 tiene que estar en persona.java. 722 00:34:43,000 --> 00:34:45,000 La class persona no, 723 00:34:45,000 --> 00:34:47,000 pero lo veremos más adelante. 724 00:34:48,000 --> 00:34:49,000 La palabra reservada class 725 00:34:49,000 --> 00:34:51,000 es la que define una clase. 726 00:34:52,000 --> 00:34:54,000 Definimos los atributos datos relevantes 727 00:34:54,000 --> 00:34:56,000 y los métodos comportamientos de la clase. 728 00:34:56,000 --> 00:35:00,000 Aquí existe una cosa que es el UML, 729 00:35:00,000 --> 00:35:03,000 Universal Modeling Language. 730 00:35:03,000 --> 00:35:05,000 No sé si habéis visto, 731 00:35:05,000 --> 00:35:07,000 o habéis empezado a ver en... 732 00:35:10,000 --> 00:35:13,000 Hay algunos de los diagramas que aprenderéis 733 00:35:13,000 --> 00:35:15,000 y que aprenderéis a amar, 734 00:35:15,000 --> 00:35:17,000 que se llama diagrama de clases, 735 00:35:17,000 --> 00:35:20,000 donde podéis definir las clases 736 00:35:20,000 --> 00:35:23,000 para que luego se mezclen entre ellas, etc. 737 00:35:23,000 --> 00:35:26,000 Entonces, por ejemplo, la clase persona 738 00:35:26,000 --> 00:35:29,000 puede ser esta cosa aquí, 739 00:35:32,000 --> 00:35:34,000 que es una descripción de... 740 00:35:34,000 --> 00:35:37,000 ¿Cómo se llama la clase persona? 741 00:35:37,000 --> 00:35:39,000 ¿Qué atributos tiene? 742 00:35:39,000 --> 00:35:42,000 Tiene un string, que es su nombre, 743 00:35:42,000 --> 00:35:44,000 e un int, que es su edad. 744 00:35:44,000 --> 00:35:46,000 ¿Y qué puede hacer? 745 00:35:46,000 --> 00:35:48,000 ¿Cuáles son los métodos de personas? 746 00:35:48,000 --> 00:35:52,000 El escribir, que no pilla ningún variable 747 00:35:52,000 --> 00:35:54,000 y no devuelve nada. 748 00:35:56,000 --> 00:35:59,000 Esta persona, por como me la han definido, 749 00:35:59,000 --> 00:36:00,000 tiene un solo método, 750 00:36:00,000 --> 00:36:01,000 tiene un solo comportamiento, 751 00:36:01,000 --> 00:36:02,000 una sola funcionalidad, 752 00:36:02,000 --> 00:36:03,000 que es escribir. 753 00:36:03,000 --> 00:36:04,000 ¿Y qué hace esto? 754 00:36:04,000 --> 00:36:05,000 No lo sé. 755 00:36:05,000 --> 00:36:06,000 ¿Vale? 756 00:36:06,000 --> 00:36:08,000 No sé por qué no está escrito. 757 00:36:08,000 --> 00:36:10,000 ¿Cómo podría extender esto? 758 00:36:10,000 --> 00:36:13,000 Pues persona con nombre, apellido, edad, 759 00:36:13,000 --> 00:36:15,000 dirección e identificador. 760 00:36:15,000 --> 00:36:16,000 ¿Vale? 761 00:36:16,000 --> 00:36:18,000 Estos irían aquí, porque son atributos. 762 00:36:18,000 --> 00:36:20,000 ¿Y qué funciones tiene? 763 00:36:20,000 --> 00:36:23,000 Pues podría tener la función mudanza, 764 00:36:23,000 --> 00:36:25,000 que me cambia la dirección. 765 00:36:25,000 --> 00:36:28,000 Podría tener la función saludar, 766 00:36:28,000 --> 00:36:30,000 que me dice hola, me llamo no sé qué, 767 00:36:30,000 --> 00:36:33,000 tengo no sé cuántos años y te saludo. 768 00:36:35,000 --> 00:36:36,000 No lo sé. 769 00:36:36,000 --> 00:36:38,000 Depende de lo que estoy haciendo. 770 00:36:42,000 --> 00:36:43,000 No. 771 00:36:43,000 --> 00:36:44,000 Podría... 772 00:36:44,000 --> 00:36:45,000 No, no es, no sé. 773 00:36:45,000 --> 00:36:46,000 ¿Vale? 774 00:36:46,000 --> 00:36:49,000 Podría que haya funciones que no tocan estas cosas. 775 00:36:49,000 --> 00:36:50,000 Sería raro. 776 00:36:50,000 --> 00:36:51,000 ¿Vale? 777 00:36:51,000 --> 00:36:53,000 Porque normalmente lo que estoy haciendo aquí 778 00:36:53,000 --> 00:36:55,000 es empaquetar datos 779 00:36:55,000 --> 00:36:58,000 y cómo se manejan esos datos, 780 00:36:58,000 --> 00:36:59,000 en un cierto sentido, 781 00:36:59,000 --> 00:37:00,000 las funcionalidades. 782 00:37:00,000 --> 00:37:02,000 Está claro que si la persona puede hacer una cosa 783 00:37:02,000 --> 00:37:04,000 que no tiene nada que ver con lo que 784 00:37:04,000 --> 00:37:06,000 tiene como atributos, 785 00:37:06,000 --> 00:37:08,000 puede pasar, 786 00:37:08,000 --> 00:37:11,000 pero me debería preguntar muy bien 787 00:37:11,000 --> 00:37:13,000 por qué este método está en persona. 788 00:37:13,000 --> 00:37:15,000 Porque a lo mejor no es un método de persona. 789 00:37:15,000 --> 00:37:19,000 Si aquí yo tengo el método de conduce coche, 790 00:37:19,000 --> 00:37:21,000 que lo que hace es mover un coche, 791 00:37:21,000 --> 00:37:23,000 pues a lo mejor no es de persona. 792 00:37:23,000 --> 00:37:25,000 A lo mejor lo debería buscar, 793 00:37:25,000 --> 00:37:27,000 meter en coche mismo 794 00:37:27,000 --> 00:37:29,000 y que luego la persona como atributo 795 00:37:29,000 --> 00:37:30,000 tenga un coche 796 00:37:30,000 --> 00:37:33,000 y entonces pueda acceder a ese coche y moverlo. 797 00:37:35,000 --> 00:37:36,000 ¿Por qué? 798 00:37:36,000 --> 00:37:38,000 Y aquí a lo mejor me adelanto un poco. 799 00:37:38,000 --> 00:37:40,000 Estos atributos 800 00:37:40,000 --> 00:37:42,000 claramente son tipos primitivos. 801 00:37:43,000 --> 00:37:46,000 Pero también pueden ser objetos. 802 00:37:46,000 --> 00:37:49,000 Entonces yo puedo asignar a una persona 803 00:37:50,000 --> 00:37:52,000 un objeto casa 804 00:37:53,000 --> 00:37:55,000 que tendrá su domicilio, 805 00:37:55,000 --> 00:37:57,000 tendrá el color de las ventanas, 806 00:37:57,000 --> 00:37:59,000 tendrá cuántas plantas son 807 00:37:59,000 --> 00:38:00,000 y los metros cuadrados. 808 00:38:00,000 --> 00:38:02,000 Entonces aquí yo tendré un atributo 809 00:38:02,000 --> 00:38:06,000 que no es mi casa dos puntos string, 810 00:38:06,000 --> 00:38:09,000 es mi casa dos puntos casa con la C mayúscula. 811 00:38:09,000 --> 00:38:10,000 ¿Y qué es casa? 812 00:38:10,000 --> 00:38:12,000 Pues una clase. 813 00:38:12,000 --> 00:38:14,000 Me puedo ir a mirar esa clase 814 00:38:14,000 --> 00:38:16,000 y ver qué hay ahí. 815 00:38:16,000 --> 00:38:19,000 Y luego puedo instanciar una casa 816 00:38:19,000 --> 00:38:21,000 y tener mi casa 817 00:38:21,000 --> 00:38:24,000 con mis 2.500 metros cuadrados mínimo 818 00:38:25,000 --> 00:38:28,000 con alquiler 25 euros al mes. 819 00:38:29,000 --> 00:38:30,000 ¿Sí? 820 00:38:30,000 --> 00:38:31,000 ¿Dudas? 821 00:38:32,000 --> 00:38:34,000 Ahora, ¿cómo se traduce esto 822 00:38:35,000 --> 00:38:36,000 en esto? 823 00:38:41,000 --> 00:38:43,000 Public las personas. 824 00:38:43,000 --> 00:38:44,000 ¿Vale? 825 00:38:44,000 --> 00:38:46,000 Aquí es donde va el nombre. 826 00:38:46,000 --> 00:38:53,000 Con las nomenclaturas típicas de Java, ¿vale? 827 00:38:53,000 --> 00:38:55,000 Las clases empiezan por mayúsculas. 828 00:38:55,000 --> 00:38:56,000 ¿Ok? 829 00:38:56,000 --> 00:38:58,000 De esta forma, cuando yo veo una cosa así, 830 00:38:58,000 --> 00:39:00,000 puedo saber si es una clase, 831 00:39:00,000 --> 00:39:01,000 si es un método, 832 00:39:01,000 --> 00:39:02,000 si es una variable, 833 00:39:02,000 --> 00:39:03,000 si es un lo que sea. 834 00:39:03,000 --> 00:39:04,000 ¿Sí? 835 00:39:05,000 --> 00:39:09,000 Aquí va el método escribir, 836 00:39:09,000 --> 00:39:11,000 que hemos dicho que es void 837 00:39:11,000 --> 00:39:12,000 porque no pilla nada 838 00:39:12,000 --> 00:39:13,000 y devuelve nada, 839 00:39:13,000 --> 00:39:15,000 por lo tanto es así. 840 00:39:15,000 --> 00:39:18,000 Si pusiera que aquí escribe un string, 841 00:39:18,000 --> 00:39:20,000 pues aquí dentro podría ser string, 842 00:39:20,000 --> 00:39:21,000 saludo, 843 00:39:21,000 --> 00:39:22,000 y que aquí escriba el saludo, 844 00:39:22,000 --> 00:39:23,000 no lo sé. 845 00:39:23,000 --> 00:39:24,000 ¿Vale? 846 00:39:24,000 --> 00:39:26,000 Y aquí el cuerpo de este método. 847 00:39:26,000 --> 00:39:27,000 O sea, ¿qué hace este método? 848 00:39:27,000 --> 00:39:31,000 Una clase puede o no tener el main. 849 00:39:31,000 --> 00:39:33,000 ¿Os acordáis qué era el main? 850 00:39:34,000 --> 00:39:36,000 ¿Cómo os definí yo el main? 851 00:39:37,000 --> 00:39:40,000 El punto de acceso a mi programa. 852 00:39:40,000 --> 00:39:43,000 Y hasta ahora tenía sentido. 853 00:39:43,000 --> 00:39:44,000 O sea, tengo una clase, 854 00:39:44,000 --> 00:39:46,000 le tengo que decir que este es el punto de acceso, 855 00:39:46,000 --> 00:39:48,000 pues no, es esa clase. 856 00:39:48,000 --> 00:39:49,000 Pero ahora en un sistema 857 00:39:49,000 --> 00:39:51,000 donde yo tengo varias clases, 858 00:39:51,000 --> 00:39:52,000 tengo persona, 859 00:39:52,000 --> 00:39:53,000 tengo casa, 860 00:39:53,000 --> 00:39:54,000 tengo coche, 861 00:39:54,000 --> 00:39:55,000 tengo taller, 862 00:39:55,000 --> 00:39:57,000 pues en todos estos 863 00:39:57,000 --> 00:39:59,000 habrá al menos una clase 864 00:39:59,000 --> 00:40:01,000 que tendrá un main. 865 00:40:01,000 --> 00:40:04,000 Y eso es de donde se empieza a ejecutar. 866 00:40:04,000 --> 00:40:06,000 Será aquí donde yo empezaré a crear 867 00:40:06,000 --> 00:40:08,000 los objetos personas, 868 00:40:08,000 --> 00:40:10,000 luego los asocio con los objetos casa, 869 00:40:10,000 --> 00:40:12,000 luego los asocio con los objetos coche, 870 00:40:12,000 --> 00:40:15,000 y voy creando mi sistema y hacer cosas. 871 00:40:15,000 --> 00:40:17,000 Si tuviera un menú que dice 872 00:40:17,000 --> 00:40:18,000 crea un nuevo coche, 873 00:40:18,000 --> 00:40:19,000 crea una nueva casa, 874 00:40:19,000 --> 00:40:20,000 crea una nueva persona, 875 00:40:20,000 --> 00:40:21,000 asocia persona con casa, 876 00:40:21,000 --> 00:40:23,000 pues el menú sería aquí. 877 00:40:25,000 --> 00:40:27,000 Y este main no necesariamente 878 00:40:27,000 --> 00:40:28,000 está en todas las clases, 879 00:40:28,000 --> 00:40:30,000 que es también una cosa nueva. 880 00:40:30,000 --> 00:40:32,000 Hasta ahora una clase tiene un main, 881 00:40:32,000 --> 00:40:33,000 una clase tiene un main. 882 00:40:33,000 --> 00:40:35,000 Ahora, si yo tengo tres clases, 883 00:40:35,000 --> 00:40:36,000 tengo dos clases, 884 00:40:36,000 --> 00:40:38,000 tengo persona y coche, 885 00:40:38,000 --> 00:40:40,000 para asociar luego personas y coches, 886 00:40:40,000 --> 00:40:42,000 tengo que elegir 887 00:40:42,000 --> 00:40:44,000 si el main está en persona 888 00:40:44,000 --> 00:40:46,000 o si el main está en coche. 889 00:40:46,000 --> 00:40:48,000 O me creo una tercera persona, 890 00:40:48,000 --> 00:40:50,000 que es una tercera clase, 891 00:40:50,000 --> 00:40:51,000 que es mi clase, 892 00:40:51,000 --> 00:40:56,000 ejecutar ejemplo persona coche, 893 00:40:56,000 --> 00:40:57,000 ¿vale? 894 00:40:57,000 --> 00:40:59,000 Y lo que hago es que en esta clase aquí 895 00:40:59,000 --> 00:41:01,000 no es una clase destinada a crear objetos, 896 00:41:01,000 --> 00:41:04,000 es una clase estática, 897 00:41:06,000 --> 00:41:07,000 que sustancialmente lo que hace 898 00:41:07,000 --> 00:41:09,000 es tener solo el main. 899 00:41:09,000 --> 00:41:11,000 Entonces, yo tengo aquí mi persona 900 00:41:11,000 --> 00:41:12,000 con la cosa de persona, 901 00:41:12,000 --> 00:41:13,000 mi coche con la cosa de coche, 902 00:41:13,000 --> 00:41:15,000 y cuando quiero ejecutar, 903 00:41:15,000 --> 00:41:16,000 trabajar con ellos, 904 00:41:16,000 --> 00:41:18,000 pues ejecuto esta tercera clase, 905 00:41:18,000 --> 00:41:21,000 la clase ejecutar. 906 00:41:21,000 --> 00:41:22,000 Y la clase ejecutar, 907 00:41:22,000 --> 00:41:23,000 pues lo que hace 908 00:41:23,000 --> 00:41:24,000 es empezar a crear persona, 909 00:41:24,000 --> 00:41:25,000 crear coches 910 00:41:25,000 --> 00:41:27,000 y asociarlo entre ellos. 911 00:41:28,000 --> 00:41:29,000 ¿Dudas? 912 00:41:33,000 --> 00:41:35,000 Esto es semi nuevo, 913 00:41:35,000 --> 00:41:37,000 casi nuevo, 914 00:41:37,000 --> 00:41:38,000 porque con Raquel 915 00:41:38,000 --> 00:41:40,000 algunos de vosotros lo han visto, 916 00:41:40,000 --> 00:41:42,000 pero nosotros en la vida 917 00:41:42,000 --> 00:41:43,000 hemos escrito aquí. 918 00:41:43,000 --> 00:41:45,000 Nosotros estas cosas de aquí 919 00:41:45,000 --> 00:41:47,000 las hacemos en el main. 920 00:41:47,000 --> 00:41:49,000 Y ahora en vez, 921 00:41:49,000 --> 00:41:50,000 las sacamos del main. 922 00:41:50,000 --> 00:41:51,000 Es más, 923 00:41:51,000 --> 00:41:55,000 las sacamos de todos los métodos. 924 00:41:56,000 --> 00:41:59,000 Las variables que se ponen aquí, 925 00:41:59,000 --> 00:42:01,000 fuera de cualquier método posible, 926 00:42:01,000 --> 00:42:04,000 son lo que son los atributos. 927 00:42:04,000 --> 00:42:08,000 Las variables propias 928 00:42:08,000 --> 00:42:10,000 que luego utilizaré 929 00:42:10,000 --> 00:42:11,000 dentro de la persona 930 00:42:11,000 --> 00:42:13,000 para hacer objetos. 931 00:42:13,000 --> 00:42:15,000 Cuando yo creo un objeto persona, 932 00:42:15,000 --> 00:42:17,000 pues tendrá un string de nombre 933 00:42:17,000 --> 00:42:19,000 y un int de data. 934 00:42:19,000 --> 00:42:20,000 Oye, pero este es nombre, 935 00:42:20,000 --> 00:42:21,000 este es data, 936 00:42:21,000 --> 00:42:22,000 ¿cuáles son? 937 00:42:22,000 --> 00:42:23,000 ¿Cómo se llama esta persona? 938 00:42:23,000 --> 00:42:24,000 No lo sé. 939 00:42:24,000 --> 00:42:25,000 Este es el molde. 940 00:42:25,000 --> 00:42:26,000 Esto me está diciendo 941 00:42:26,000 --> 00:42:27,000 que tendrá un nombre, 942 00:42:27,000 --> 00:42:29,000 tendrá una edad. 943 00:42:29,000 --> 00:42:31,000 Luego a partir de allí 944 00:42:31,000 --> 00:42:32,000 vamos a ver 945 00:42:32,000 --> 00:42:33,000 cómo se le da 946 00:42:33,000 --> 00:42:34,000 y qué persona es. 947 00:42:34,000 --> 00:42:37,000 A partir de este molde de aquí 948 00:42:37,000 --> 00:42:38,000 yo puedo crear 949 00:42:38,000 --> 00:42:40,000 cuántas personas quiero. 950 00:42:42,000 --> 00:42:43,000 ¿Dudas? 951 00:42:44,000 --> 00:42:45,000 ¿Preguntas? 952 00:42:50,000 --> 00:42:52,000 Pregunta para vosotros entonces. 953 00:42:52,000 --> 00:42:54,000 ¿Esta variable nombre? 954 00:42:54,000 --> 00:42:56,000 ¿Qué visibilidad tiene? 955 00:42:56,000 --> 00:42:58,000 ¿Qué ámbito tiene? 956 00:42:58,000 --> 00:42:59,000 ¿Qué scope tiene? 957 00:42:59,000 --> 00:43:01,000 ¿Dónde la puedo usar? 958 00:43:11,000 --> 00:43:12,000 ¿Recuerdas cuál era el ámbito 959 00:43:12,000 --> 00:43:13,000 de una variable? 960 00:43:13,000 --> 00:43:15,000 ¿Dónde existe una variable? 961 00:43:18,000 --> 00:43:19,000 Si yo creo una variable 962 00:43:19,000 --> 00:43:20,000 en algún lado, 963 00:43:20,000 --> 00:43:22,000 ¿hasta dónde existe esa variable? 964 00:43:24,000 --> 00:43:27,000 Dentro de su bloque. 965 00:43:28,000 --> 00:43:30,000 Y aquí empieza un bloque 966 00:43:30,000 --> 00:43:32,000 que acaba al final. 967 00:43:32,000 --> 00:43:33,000 Es decir, 968 00:43:33,000 --> 00:43:35,000 que esta variable nombre 969 00:43:35,000 --> 00:43:36,000 la puedo usar 970 00:43:36,000 --> 00:43:38,000 en cualquier lado de esta clase. 971 00:43:38,000 --> 00:43:39,000 En cualquiera 972 00:43:39,000 --> 00:43:41,000 de los métodos de la clase. 973 00:43:41,000 --> 00:43:43,000 Cualquier método de la clase 974 00:43:43,000 --> 00:43:45,000 puede acceder a ese nombre. 975 00:43:45,000 --> 00:43:47,000 Lo puedo usar aquí dentro, 976 00:43:47,000 --> 00:43:48,000 como lo puedo usar aquí dentro, 977 00:43:48,000 --> 00:43:50,000 como lo puedo usar en otro método. 978 00:43:50,000 --> 00:43:52,000 Como estos son los parámetros, 979 00:43:52,000 --> 00:43:54,000 los atributos, 980 00:43:54,000 --> 00:43:56,000 las características de esta clase, 981 00:43:56,000 --> 00:43:58,000 y los métodos, 982 00:43:58,000 --> 00:43:59,000 aquí lo que van a hacer 983 00:43:59,000 --> 00:44:01,000 es modificar estos atributos, 984 00:44:01,000 --> 00:44:02,000 pues estos atributos 985 00:44:02,000 --> 00:44:03,000 son accesibles 986 00:44:03,000 --> 00:44:05,000 desde cualquier punto de la clase. 987 00:44:10,000 --> 00:44:11,000 Veremos que, 988 00:44:11,000 --> 00:44:13,000 si son públicos, 989 00:44:13,000 --> 00:44:14,000 son hasta accesibles 990 00:44:14,000 --> 00:44:16,000 desde fuera de esta clase. 991 00:44:16,000 --> 00:44:18,000 Si son privados, 992 00:44:18,000 --> 00:44:21,000 solo esta clase 993 00:44:21,000 --> 00:44:23,000 los puede modificar. 994 00:44:23,000 --> 00:44:24,000 Eso dependerá de mí, 995 00:44:24,000 --> 00:44:26,000 cuando veremos ahora los modificadores, 996 00:44:26,000 --> 00:44:27,000 lo veremos más. 997 00:44:27,000 --> 00:44:28,000 Pero si yo tengo aquí 998 00:44:28,000 --> 00:44:30,000 un dato especial, 999 00:44:30,000 --> 00:44:32,000 que no quiero que alguien fuera cambie, 1000 00:44:32,000 --> 00:44:34,000 a menos que no pase 1001 00:44:34,000 --> 00:44:36,000 por un método mío, 1002 00:44:36,000 --> 00:44:37,000 que lo que va a hacer 1003 00:44:37,000 --> 00:44:38,000 es comprobar 1004 00:44:38,000 --> 00:44:39,000 que los datos que me has dado 1005 00:44:39,000 --> 00:44:40,000 son correctos, 1006 00:44:40,000 --> 00:44:41,000 imaginaos que aquí 1007 00:44:41,000 --> 00:44:43,000 hay un string DNI. 1008 00:44:43,000 --> 00:44:44,000 Y yo cuando tú 1009 00:44:44,000 --> 00:44:46,000 configuras el DNI, 1010 00:44:46,000 --> 00:44:48,000 no quiero que tú puedas poner gato, 1011 00:44:48,000 --> 00:44:50,000 porque gato no es un DNI, 1012 00:44:50,000 --> 00:44:51,000 un DNI tiene que ser 1013 00:44:51,000 --> 00:44:53,000 ocho números y una letra. 1014 00:44:53,000 --> 00:44:55,000 Entonces a lo mejor yo me digo, 1015 00:44:55,000 --> 00:44:56,000 oye mira, 1016 00:44:56,000 --> 00:44:58,000 este DNI es privado, 1017 00:44:58,000 --> 00:45:00,000 y te doy un metodito aquí 1018 00:45:00,000 --> 00:45:01,000 que puede ser 1019 00:45:01,000 --> 00:45:03,000 configuraDNI, 1020 00:45:03,000 --> 00:45:04,000 y dentro del metodito 1021 00:45:04,000 --> 00:45:05,000 configuraDNI, 1022 00:45:05,000 --> 00:45:06,000 tú cuando accedes allí 1023 00:45:06,000 --> 00:45:07,000 me comprueba 1024 00:45:07,000 --> 00:45:08,000 antes de asignarlo 1025 00:45:08,000 --> 00:45:09,000 que es efectivamente 1026 00:45:09,000 --> 00:45:11,000 ocho números más una letra. 1027 00:45:12,000 --> 00:45:13,000 Pero bueno, 1028 00:45:13,000 --> 00:45:15,000 me estoy adelantando. 1029 00:45:15,000 --> 00:45:17,000 Lo que sacamos de aquí es, 1030 00:45:17,000 --> 00:45:19,000 creo una clase, 1031 00:45:19,000 --> 00:45:21,000 la clase es un molde, 1032 00:45:21,000 --> 00:45:23,000 tiene los atributos aquí, 1033 00:45:23,000 --> 00:45:25,000 y tiene los métodos aquí, 1034 00:45:25,000 --> 00:45:26,000 ¿vale? 1035 00:45:26,000 --> 00:45:28,000 Puede o no tener un main, 1036 00:45:28,000 --> 00:45:29,000 si tiene el main 1037 00:45:29,000 --> 00:45:30,000 es el punto de acceso 1038 00:45:30,000 --> 00:45:31,000 de mi programa, 1039 00:45:31,000 --> 00:45:32,000 si no tiene el main, 1040 00:45:32,000 --> 00:45:33,000 no. 1041 00:45:33,000 --> 00:45:35,000 Pregunta para vosotros, 1042 00:45:35,000 --> 00:45:36,000 ¿puede haber un programa 1043 00:45:36,000 --> 00:45:38,000 sin main? 1044 00:45:42,000 --> 00:45:45,000 Programa sin main 1045 00:45:45,000 --> 00:45:47,000 no sería ejecutable, 1046 00:45:47,000 --> 00:45:49,000 no sé de dónde empezar. 1047 00:45:49,000 --> 00:45:51,000 Entonces en un sistema, 1048 00:45:51,000 --> 00:45:52,000 por algún lado 1049 00:45:52,000 --> 00:45:54,000 un main tiene que estar. 1050 00:45:54,000 --> 00:45:56,000 ¿Puedo tener 1051 00:45:56,000 --> 00:45:59,000 tres clases y tres main? 1052 00:46:03,000 --> 00:46:05,000 ¿Puedo tener persona con su main, 1053 00:46:05,000 --> 00:46:07,000 coche con su main, 1054 00:46:07,000 --> 00:46:10,000 o casa con su main? 1055 00:46:12,000 --> 00:46:14,000 Lo puedo tener, ¿vale? 1056 00:46:14,000 --> 00:46:16,000 Pero normalmente, 1057 00:46:16,000 --> 00:46:18,000 la idea es que haya uno de estos 1058 00:46:18,000 --> 00:46:20,000 que sea mi sistema, 1059 00:46:20,000 --> 00:46:22,000 este es un main 1060 00:46:22,000 --> 00:46:23,000 que cuando lo lanzo 1061 00:46:23,000 --> 00:46:24,000 empieza mi sistema 1062 00:46:24,000 --> 00:46:25,000 de gestión de cosas y casas 1063 00:46:25,000 --> 00:46:27,000 de personas, ¿sí? 1064 00:46:27,000 --> 00:46:29,000 Mientras que en cada clase 1065 00:46:29,000 --> 00:46:30,000 hay un main 1066 00:46:30,000 --> 00:46:32,000 que hace pruebas 1067 00:46:32,000 --> 00:46:34,000 sobre esta clase. 1068 00:46:34,000 --> 00:46:35,000 Cuando ya he creado la clase persona 1069 00:46:35,000 --> 00:46:37,000 para probar la clase persona 1070 00:46:37,000 --> 00:46:38,000 y crear tres, cuatro personas 1071 00:46:38,000 --> 00:46:39,000 y hacerle hacer algo, 1072 00:46:39,000 --> 00:46:40,000 pues me he creado un main 1073 00:46:40,000 --> 00:46:43,000 para ver de utilizar las personas, 1074 00:46:43,000 --> 00:46:45,000 los objetos personas, ¿vale? 1075 00:46:45,000 --> 00:46:46,000 Y que se lanza esto, 1076 00:46:46,000 --> 00:46:47,000 hace algo, 1077 00:46:47,000 --> 00:46:48,000 pero no es mi sistema, 1078 00:46:48,000 --> 00:46:51,000 es una prueba concreta de este. 1079 00:46:51,000 --> 00:46:52,000 ¿Sí? 1080 00:46:52,000 --> 00:46:53,000 En general, 1081 00:46:53,000 --> 00:46:54,000 lo que debería haber 1082 00:46:54,000 --> 00:46:55,000 es un main 1083 00:46:55,000 --> 00:46:57,000 y las clases que quiero 1084 00:46:57,000 --> 00:46:59,000 y que necesito. 1085 00:46:59,000 --> 00:47:01,000 ¿Dudas? 1086 00:47:01,000 --> 00:47:03,000 ¿Sí? 1087 00:47:09,000 --> 00:47:11,000 Una variable existe 1088 00:47:11,000 --> 00:47:13,000 solo dentro de su bloque. 1089 00:47:13,000 --> 00:47:14,000 Cuando tú haces for, int, 1090 00:47:14,000 --> 00:47:15,000 no sé qué, 1091 00:47:15,000 --> 00:47:19,000 dentro que hagas int aux 1092 00:47:19,000 --> 00:47:20,000 y la usas, 1093 00:47:20,000 --> 00:47:21,000 cuando sale del for, 1094 00:47:21,000 --> 00:47:22,000 aux no existe, 1095 00:47:22,000 --> 00:47:24,000 no la puedes usar fuera del for. 1096 00:47:24,000 --> 00:47:26,000 Porque el ámbito de una variable 1097 00:47:26,000 --> 00:47:28,000 es el bloque en el que crea. 1098 00:47:28,000 --> 00:47:29,000 Ahora, nosotros normalmente 1099 00:47:29,000 --> 00:47:30,000 creamos las variables 1100 00:47:30,000 --> 00:47:31,000 dentro de este bloque. 1101 00:47:31,000 --> 00:47:32,000 Entonces, 1102 00:47:32,000 --> 00:47:33,000 solo existen en el main, 1103 00:47:33,000 --> 00:47:34,000 pero no existen, 1104 00:47:34,000 --> 00:47:35,000 por ejemplo, 1105 00:47:35,000 --> 00:47:36,000 en escribir, 1106 00:47:36,000 --> 00:47:38,000 porque la he creado aquí dentro. 1107 00:47:38,000 --> 00:47:39,000 Ahora, 1108 00:47:39,000 --> 00:47:40,000 lo que he hecho es 1109 00:47:40,000 --> 00:47:43,000 sacar estas variables aquí fuera. 1110 00:47:43,000 --> 00:47:44,000 Al sacarlas aquí fuera, 1111 00:47:44,000 --> 00:47:48,000 existen en el bloque persona. 1112 00:47:48,000 --> 00:47:49,000 Por lo tanto, 1113 00:47:49,000 --> 00:47:50,000 existen tanto en escribir 1114 00:47:50,000 --> 00:47:52,000 como en main. 1115 00:47:52,000 --> 00:47:53,000 Por lo tanto, 1116 00:47:53,000 --> 00:47:54,000 las puedo utilizar 1117 00:47:54,000 --> 00:47:55,000 tanto en escribir 1118 00:47:55,000 --> 00:47:56,000 como en main, 1119 00:47:56,000 --> 00:47:57,000 como en cambia nombre, 1120 00:47:57,000 --> 00:47:58,000 como en saluda, 1121 00:47:58,000 --> 00:48:00,000 como en todos los métodos 1122 00:48:00,000 --> 00:48:02,000 que están aquí. 1123 00:48:02,000 --> 00:48:05,000 Aquí hay como 1124 00:48:05,000 --> 00:48:07,000 tres niveles de variables, 1125 00:48:07,000 --> 00:48:08,000 digamos así. 1126 00:48:08,000 --> 00:48:10,000 Hay las variables locales, 1127 00:48:10,000 --> 00:48:13,000 que son locales a un método. 1128 00:48:13,000 --> 00:48:16,000 Las variables atributos, 1129 00:48:16,000 --> 00:48:18,000 que son comunes a toda la clase, 1130 00:48:18,000 --> 00:48:20,000 las puedo usar en todos los métodos. 1131 00:48:20,000 --> 00:48:21,000 Y luego veremos 1132 00:48:21,000 --> 00:48:24,000 que hay las variables estáticas 1133 00:48:24,000 --> 00:48:25,000 o globales, 1134 00:48:25,000 --> 00:48:27,000 que prácticamente no dependen 1135 00:48:27,000 --> 00:48:28,000 del objeto, 1136 00:48:28,000 --> 00:48:29,000 pero son las mismas 1137 00:48:29,000 --> 00:48:31,000 en todos los objetos. 1138 00:48:31,000 --> 00:48:32,000 Pero digo, 1139 00:48:32,000 --> 00:48:34,000 si no se supone que cada, 1140 00:48:34,000 --> 00:48:35,000 por ejemplo, 1141 00:48:35,000 --> 00:48:36,000 persona y escribir 1142 00:48:36,000 --> 00:48:39,000 son clases que van... 1143 00:48:39,000 --> 00:48:41,000 Escribir no es una clase. 1144 00:48:41,000 --> 00:48:44,000 Es un método de la clase persona. 1145 00:48:44,000 --> 00:48:46,000 Si se supone que persona es una clase 1146 00:48:46,000 --> 00:48:49,000 que existe en un lado 1147 00:48:49,000 --> 00:48:51,000 y luego lo tengo que utilizar 1148 00:48:51,000 --> 00:48:53,000 en el main, por ejemplo... 1149 00:48:53,000 --> 00:48:56,000 Persona es una clase. 1150 00:48:57,000 --> 00:49:00,000 Nombre lo puedes usar aquí. 1151 00:49:03,000 --> 00:49:05,000 Si quieres crear una persona, 1152 00:49:05,000 --> 00:49:07,000 aquí en el main o en otro main 1153 00:49:07,000 --> 00:49:08,000 puedes crear una persona. 1154 00:49:08,000 --> 00:49:09,000 No hemos visto todavía 1155 00:49:09,000 --> 00:49:12,000 cómo creamos los objetos. 1156 00:49:12,000 --> 00:49:13,000 Ahora simplemente 1157 00:49:13,000 --> 00:49:15,000 estamos hablando del molde. 1158 00:49:15,000 --> 00:49:17,000 Estamos hablando de la clase. 1159 00:49:17,000 --> 00:49:18,000 Aquí yo estoy haciendo 1160 00:49:18,000 --> 00:49:19,000 una descripción 1161 00:49:19,000 --> 00:49:21,000 de cómo es una persona. 1162 00:49:21,000 --> 00:49:24,000 De cómo es y lo que hace. 1163 00:49:24,000 --> 00:49:27,000 El cuerpo de uno de estos... 1164 00:49:27,000 --> 00:49:29,000 es cómo lo hace. 1165 00:49:29,000 --> 00:49:33,000 No sé si veis las tres preguntas. 1166 00:49:33,000 --> 00:49:35,000 ¿Qué tiene la persona? 1167 00:49:35,000 --> 00:49:36,000 Sus atributos. 1168 00:49:36,000 --> 00:49:38,000 ¿Qué hace la persona? 1169 00:49:38,000 --> 00:49:39,000 Sus métodos. 1170 00:49:39,000 --> 00:49:41,000 ¿Cómo hace las cosas? 1171 00:49:41,000 --> 00:49:42,000 Pues la descripción 1172 00:49:42,000 --> 00:49:44,000 de la implementación del método. 1173 00:49:45,000 --> 00:49:47,000 Yo puedo tener escribir 1174 00:49:47,000 --> 00:49:48,000 y aquí dentro 1175 00:49:48,000 --> 00:49:50,000 tener implementaciones distintas. 1176 00:49:50,000 --> 00:49:51,000 Si la haces tú, 1177 00:49:51,000 --> 00:49:52,000 haces una implementación. 1178 00:49:52,000 --> 00:49:53,000 Si la haces tú, 1179 00:49:53,000 --> 00:49:54,000 haces una implementación. 1180 00:49:54,000 --> 00:49:55,000 Hacen la misma cosa 1181 00:49:55,000 --> 00:49:56,000 porque los dos sabrán escribir 1182 00:49:56,000 --> 00:49:57,000 sea lo que sea 1183 00:49:57,000 --> 00:49:58,000 lo que quiere decir escribir, 1184 00:49:58,000 --> 00:49:59,000 pero el tuyo lo hace 1185 00:49:59,000 --> 00:50:00,000 de una forma 1186 00:50:00,000 --> 00:50:01,000 y el tuyo lo hace de otra. 1187 00:50:01,000 --> 00:50:02,000 El cómo lo hacen 1188 00:50:02,000 --> 00:50:03,000 son de formas distintas. 1189 00:50:03,000 --> 00:50:05,000 A lo mejor una es más eficiente 1190 00:50:05,000 --> 00:50:07,000 y otra no. 1191 00:50:07,000 --> 00:50:08,000 Como cuando yo daba los ejercicios 1192 00:50:08,000 --> 00:50:09,000 y uno lo resolvía 1193 00:50:09,000 --> 00:50:10,000 de una forma 1194 00:50:10,000 --> 00:50:11,000 y uno de otra. 1195 00:50:11,000 --> 00:50:12,000 Los dos ejercicios 1196 00:50:12,000 --> 00:50:13,000 hacen lo mismo 1197 00:50:13,000 --> 00:50:14,000 y son correctos 1198 00:50:14,000 --> 00:50:15,000 pero uno tarda un segundo 1199 00:50:15,000 --> 00:50:17,000 y uno tarda diez horas. 1200 00:50:17,000 --> 00:50:18,000 Lo están haciendo 1201 00:50:18,000 --> 00:50:19,000 de formas distintas 1202 00:50:19,000 --> 00:50:20,000 pero lo están haciendo a mí. 1203 00:50:20,000 --> 00:50:21,000 Eso depende 1204 00:50:21,000 --> 00:50:25,000 de la implementación. 1205 00:50:25,000 --> 00:50:26,000 Siempre clases. 1206 00:50:26,000 --> 00:50:27,000 En un archivo 1207 00:50:27,000 --> 00:50:28,000 solo puede haber 1208 00:50:28,000 --> 00:50:30,000 una clase public. 1209 00:50:30,000 --> 00:50:31,000 Puede haber más clases 1210 00:50:31,000 --> 00:50:34,000 pero public una clase solo. 1211 00:50:34,000 --> 00:50:35,000 Puede haber 1212 00:50:35,000 --> 00:50:36,000 otras contenidas 1213 00:50:36,000 --> 00:50:37,000 pero no accesibles 1214 00:50:37,000 --> 00:50:38,000 desde el exterior. 1215 00:50:38,000 --> 00:50:40,000 Cuando yo no pongo public 1216 00:50:40,000 --> 00:50:41,000 quiere decir que 1217 00:50:41,000 --> 00:50:42,000 fuera de este fichero 1218 00:50:42,000 --> 00:50:43,000 código escrito 1219 00:50:43,000 --> 00:50:44,000 fuera de este fichero 1220 00:50:44,000 --> 00:50:46,000 no puede acceder 1221 00:50:46,000 --> 00:50:47,000 a estas clases. 1222 00:50:47,000 --> 00:50:49,000 Están como protegidas. 1223 00:50:49,000 --> 00:50:50,000 En realidad 1224 00:50:50,000 --> 00:50:51,000 hay cuatro niveles 1225 00:50:51,000 --> 00:50:53,000 de protección 1226 00:50:53,000 --> 00:50:56,000 desde público a privado. 1227 00:50:56,000 --> 00:50:58,000 La privada es la más estricta. 1228 00:50:58,000 --> 00:51:02,000 La pública es la menos estricta. 1229 00:51:02,000 --> 00:51:04,000 Y luego hay en el medio 1230 00:51:04,000 --> 00:51:05,000 cosas que son 1231 00:51:05,000 --> 00:51:06,000 a nivel de package 1232 00:51:06,000 --> 00:51:08,000 o a nivel de herencia. 1233 00:51:08,000 --> 00:51:09,000 Como no sabemos 1234 00:51:09,000 --> 00:51:10,000 que son estas cosas 1235 00:51:10,000 --> 00:51:12,000 por ahora no lo sabemos. 1236 00:51:12,000 --> 00:51:13,000 Los atributos de una clase 1237 00:51:13,000 --> 00:51:15,000 son propios de la misma 1238 00:51:15,000 --> 00:51:16,000 y se podrán consultar 1239 00:51:16,000 --> 00:51:17,000 internamente 1240 00:51:17,000 --> 00:51:18,000 por parte 1241 00:51:18,000 --> 00:51:19,000 de los métodos de la misma. 1242 00:51:19,000 --> 00:51:20,000 O sea, todos los métodos 1243 00:51:20,000 --> 00:51:22,000 pueden toquetear 1244 00:51:22,000 --> 00:51:23,000 pueden modificar 1245 00:51:23,000 --> 00:51:24,000 y leer 1246 00:51:24,000 --> 00:51:26,000 todos los atributos 1247 00:51:26,000 --> 00:51:28,000 dentro de una misma clase.