1 00:00:00,370 --> 00:00:04,309 Entonces, segunda parte sobre objetos, ¿vale? 2 00:00:05,169 --> 00:00:07,769 Si habláis, me dais la autorización a grabaros. 3 00:00:08,509 --> 00:00:12,689 Entonces, hemos estado hablando del concepto de clase, el concepto de objetos, ¿vale? 4 00:00:12,710 --> 00:00:21,010 La clase es un molde general que define las características generales del concepto que estoy modelizando 5 00:00:21,010 --> 00:00:30,449 y luego a partir de este molde general voy a crear objetos concretos, instancias concretas de esta clase 6 00:00:30,449 --> 00:00:36,649 que serán todos con la misma estructura pero con valores concretos distintos, ¿vale? 7 00:00:38,229 --> 00:00:44,049 Entonces, este es un ejemplo, hemos dicho, de cómo se crea una clase, ¿vale? 8 00:00:44,049 --> 00:00:53,950 Esta es la clase Persona, a continuación pongo sus atributos, o sea, las características relevantes para mí, para una persona, que son el nombre y la edad en este caso. 9 00:00:54,929 --> 00:01:03,869 Luego, después, los métodos que hacen, o sea, los comportamientos, las funcionalidades que implementa una persona, lo que puede hacer una persona. 10 00:01:04,510 --> 00:01:07,810 Que serán métodos sin el static, ¿vale? 11 00:01:07,810 --> 00:01:11,989 Finalmente puedo tener o no, ahora veremos ejemplos 12 00:01:11,989 --> 00:01:15,109 Un método main que es el punto de acceso de mi programa 13 00:01:15,109 --> 00:01:20,049 Donde aquí crearé los objetos, los haré interactuar, haré que hagan lo que tienen que hacer 14 00:01:20,049 --> 00:01:23,090 ¿Vale? Ya veremos que hacemos aquí 15 00:01:23,090 --> 00:01:32,189 Entonces, la clase en un archivo puede haber solo una clase pública 16 00:01:32,189 --> 00:01:35,109 Puede haber más de una clase, pero la clase pública es una sola 17 00:01:35,109 --> 00:01:38,769 Y tiene que llamarse con el nombre de la clase .java, ya lo hemos dicho 18 00:01:38,769 --> 00:01:45,129 Los atributos de una clase son propios de la misma y se podrán consultar internamente por parte de los métodos de la misma 19 00:01:45,129 --> 00:01:46,590 Vale, esto lo hemos dicho 20 00:01:46,590 --> 00:01:47,870 Objetos, vale 21 00:01:47,870 --> 00:01:51,549 Un objeto es un elemento concreto de la clase definida 22 00:01:51,549 --> 00:01:56,230 Una instancia de clase, un objeto creado a partir del molde 23 00:01:56,230 --> 00:02:09,090 Una configuración concreta de todas las posibles configuraciones que podría haber en esa clase 24 00:02:09,090 --> 00:02:13,409 O sea, cuando yo digo una persona tiene un nombre, me vale cualquier nombre 25 00:02:13,409 --> 00:02:18,990 Pero luego habrá la persona que se llama Estefano, esa es una persona concreta 26 00:02:18,990 --> 00:02:23,650 En el momento de la ejecución, cuidado 27 00:02:23,650 --> 00:02:27,590 Cuando se ejecuta, cuando se lanza el programa 28 00:02:27,590 --> 00:02:30,169 Es cuando se crean los objetos 29 00:02:30,169 --> 00:02:34,389 Yo en el programa diré que aquí me creas un objeto con una new o cosa por el estilo 30 00:02:34,389 --> 00:02:37,469 Cuando vosotros hacéis scanner, scanner es igual a new scanner 31 00:02:37,469 --> 00:02:43,409 Allí le estáis diciendo, mira, cuando pasará por aquí el flujo de ejecuciones del programa 32 00:02:43,409 --> 00:02:45,870 Aquí es donde creará un objeto 33 00:02:45,870 --> 00:02:52,030 Pero en tiempo de compilación, mientras nosotros estamos programando, el objeto no existe 34 00:02:52,030 --> 00:02:56,349 Se creará cuando se ejecuta el programa 35 00:02:56,349 --> 00:03:00,590 Cuando yo le digo, venga, le doy al triangulito verde, le digo, lanza el programa 36 00:03:00,590 --> 00:03:09,770 El programa encontrará la instrucción new y es en ese momento que hará todo el trabajo que tiene que hacer para crear un objeto 37 00:03:09,770 --> 00:03:11,949 ¿Quién lo hace? Pues la Java Virtual Machine 38 00:03:11,949 --> 00:03:27,530 El Java Virtual Machine interpretará el comando new como vete a la zona de memoria reservada para este proceso, recorta un trocito de esa memoria y guárdalo porque ese trocito de memoria ahora tiene un significado, ahora es un objeto. 39 00:03:28,090 --> 00:03:32,949 Y dentro de este trocito de objeto, ponle los datos que tienes que ponerle. 40 00:03:33,849 --> 00:03:34,569 Ahora veremos cómo. 41 00:03:34,569 --> 00:03:42,729 Entonces es el momento de ejecutar que se crean los objetos de las clases para los cuales hemos escrito código 42 00:03:42,729 --> 00:03:48,090 Cada objeto tendrá un nombre para poder reutilizarlo en nuestro programa 43 00:03:48,090 --> 00:03:52,210 Cuidado, este nombre no es este nombre 44 00:03:52,210 --> 00:04:03,469 Es el nombre que le doy yo a la variable que será un manejador, un handler en inglés de este objeto 45 00:04:03,469 --> 00:04:11,849 Cuando yo hago scannerScan, ese scan es este nombre de aquí 46 00:04:11,849 --> 00:04:16,689 Es una referencia a este objeto 47 00:04:16,689 --> 00:04:18,889 Es como yo en el código luego puedo decir 48 00:04:18,889 --> 00:04:20,689 Mira, ¿te acuerdas el objeto que has creado? 49 00:04:21,009 --> 00:04:22,889 Pues ahora haz algo sobre ese objeto 50 00:04:22,889 --> 00:04:24,790 Pues lo he llamado scan 51 00:04:24,790 --> 00:04:32,269 Ahora cuando hago scan.next estoy diciendo llama el método next sobre el objeto scan 52 00:04:32,269 --> 00:04:34,850 ¿Se entiende? 53 00:04:35,610 --> 00:04:38,589 Entonces, un objeto va a tener una identidad 54 00:04:38,589 --> 00:04:41,009 Es decir, quién es, cómo se refiere a eso 55 00:04:41,009 --> 00:04:42,790 Este nombre del que hablamos aquí 56 00:04:42,790 --> 00:04:46,550 El nombre que le habré dado yo cuando lo he creado y metido en una variable 57 00:04:46,550 --> 00:04:48,209 O en un array 58 00:04:48,209 --> 00:04:52,889 Los atributos que conformarán su estado 59 00:04:52,889 --> 00:04:58,470 Es decir, el valor de todos los atributos que tiene ese objeto 60 00:04:58,470 --> 00:05:00,430 Yo le he puesto nombre y edad 61 00:05:00,430 --> 00:05:07,850 Pues el valor de nombre y el valor de edad conforman, constituyen el estado de este objeto. 62 00:05:08,209 --> 00:05:11,610 En este momento se llama Estefano y tiene 43 años. 63 00:05:12,029 --> 00:05:16,129 Mañana cumple los años, pues ahora tiene Estefano y tiene 44 años. 64 00:05:17,610 --> 00:05:23,910 ¿Se entiende? El estado de un objeto es una fotografía de todos sus atributos y el valor que tienen en este momento. 65 00:05:24,970 --> 00:05:28,329 Y luego están los métodos que definen el comportamiento de este objeto. 66 00:05:28,329 --> 00:05:29,750 ¿Qué puede hacer este objeto? 67 00:05:30,430 --> 00:05:49,449 Yo los defino en abstracto, en general, en la clase y luego cuando creo un objeto, este objeto podrá hacer estos métodos que he definido abstractamente, pero utilizando los valores propios de ese objeto. 68 00:05:49,449 --> 00:06:07,509 Yo he definido que el método saluda dice hola, pon tu nombre y luego diga ahí tengo, pon tu edad, años, cuando lo llamaré sobre persona 1, este objeto usará como nombre Paco y como edad 30. 69 00:06:08,149 --> 00:06:12,550 Este objeto usará como nombre Sara y como edad 25. 70 00:06:12,550 --> 00:06:18,050 Sería el identificador que he utilizado 71 00:06:18,050 --> 00:06:19,629 Esto se haría con 72 00:06:19,629 --> 00:06:20,509 Si es una persona 73 00:06:20,509 --> 00:06:23,149 Persona, persuno 74 00:06:23,149 --> 00:06:25,550 Es igual a new persona 75 00:06:25,550 --> 00:06:28,310 De todas formas ahora como creamos un objeto 76 00:06:28,310 --> 00:06:29,870 Lo vemos en dos minutos 77 00:06:29,870 --> 00:06:36,319 La identidad 78 00:06:36,319 --> 00:06:38,339 Los objetos se crean en la memoria RAM 79 00:06:38,339 --> 00:06:39,899 Vosotros sabéis que hay dos memorias 80 00:06:39,899 --> 00:06:41,180 Hay la memoria RAM 81 00:06:41,180 --> 00:06:44,100 Y la memoria disco duro 82 00:06:44,100 --> 00:06:45,699 Secundaria 83 00:06:45,699 --> 00:06:47,379 Que es la que cuando apagáis 84 00:06:47,379 --> 00:06:48,439 No se borra 85 00:06:48,439 --> 00:07:04,600 La RAM, cada vez que apagáis el ordenador, se borra casi por completo, hoy en día hay dudas, pero se debería borrar todo, entonces entre una ejecución y otra he destruido todo lo que tenía en RAM y por lo tanto no tengo las variables que había usado antes. 86 00:07:05,060 --> 00:07:11,579 Si quiero guardar entre ejecución algo de datos, tendré que usar ficheros, y eso lo veremos al final del curso. 87 00:07:11,579 --> 00:07:17,279 Su identidad se definirá como un valor de referencia único del objeto 88 00:07:17,279 --> 00:07:26,800 ¿Os acordáis cuando yo os decía, creo una variable y aquí dentro está un numerito que apunta al objeto de verdad? 89 00:07:27,459 --> 00:07:32,199 Pues ese numerito es la identidad, la referencia al objeto 90 00:07:32,199 --> 00:07:38,240 Cada vez que yo usaré ese numerito, ese código, estoy referenciando un objeto concreto 91 00:07:38,240 --> 00:07:43,079 Si yo copio esa referencia, tendré dos referencias al mismo objeto 92 00:07:43,079 --> 00:07:47,699 En Java no se trabaja con direcciones de memoria 93 00:07:47,699 --> 00:07:51,500 Se usa un concepto más abstracto, nombres simbólicos que identifican un objeto 94 00:07:51,500 --> 00:07:55,759 Esto es los nombres que le damos, las variables al fin y al cabo 95 00:07:55,759 --> 00:08:01,939 Un objeto es un valor que se puede asignar a una variable cuyo tipo es la clase misma 96 00:08:01,939 --> 00:08:04,160 La clase define el tipo 97 00:08:04,160 --> 00:08:07,920 El objeto es un valor específico de este tipo 98 00:08:07,920 --> 00:08:32,460 Es decir, que cuando vosotros hacéis scanner, scan, estáis creando una variable. ¿Cómo se llama la variable? Scan. ¿De qué tipo es la variable? Scanner. ¿Y qué es scanner? Una clase del que yo estoy creando un objeto. 99 00:08:32,460 --> 00:08:53,179 Cuando vosotros hacéis string gato es igual a algo, ¿qué es esto? Una variable. ¿Cómo se llama esta variable? Gato. ¿Qué tipo tiene? ¿String qué es? Una clase, del que yo estoy creando un objeto. 100 00:08:53,179 --> 00:08:54,820 ¿Se entiende? 101 00:08:55,720 --> 00:08:57,820 Cualquier clase que vosotros creáis 102 00:08:57,820 --> 00:09:00,480 Es sustancialmente un nuevo tipo 103 00:09:00,480 --> 00:09:03,860 Nosotros tenemos los tipos primitivos 104 00:09:03,860 --> 00:09:06,139 Int, flow, at, bla bla bla 105 00:09:06,139 --> 00:09:09,120 Y luego hemos usado al menos dos otros tipos 106 00:09:09,120 --> 00:09:11,080 Sin saber muy bien cómo utilizarlo 107 00:09:11,080 --> 00:09:12,039 Pero hemos usado scanner 108 00:09:12,039 --> 00:09:13,860 Que lo usamos como tipo 109 00:09:13,860 --> 00:09:15,919 ¿Os acordáis que en una declaración de variable es 110 00:09:15,919 --> 00:09:19,139 Tipo, nombre de la variable, igual valor 111 00:09:19,139 --> 00:09:20,740 Y nosotros usamos scanner 112 00:09:20,740 --> 00:09:22,500 Scanner es igual a new scanner 113 00:09:22,500 --> 00:09:25,179 Pues scanner es el tipo de esta variable 114 00:09:25,179 --> 00:09:27,440 Y scanner es una clase 115 00:09:27,440 --> 00:09:29,039 Cada vez que defino una clase 116 00:09:29,039 --> 00:09:32,399 La puedo usar para definir un tipo 117 00:09:32,399 --> 00:09:35,440 Mi clase persona 118 00:09:35,440 --> 00:09:37,659 Está definiendo el tipo persona 119 00:09:37,659 --> 00:09:40,419 Que serán objetos con una determinada estructura 120 00:09:40,419 --> 00:09:42,100 Tendrán nombre y edad 121 00:09:42,100 --> 00:09:44,240 Entonces podré crear 122 00:09:44,240 --> 00:09:46,779 Una variable persona 123 00:09:46,779 --> 00:09:48,980 Que se llama persona1 124 00:09:48,980 --> 00:09:52,320 Y dentro le meteré un objeto de tipo persona 125 00:09:52,320 --> 00:10:02,419 La clase define el tipo y por lo tanto puedo crear una variable del tipo de la clase 126 00:10:02,419 --> 00:10:13,549 La clase coche, una vez definida, yo puedo hacer coche, mi coche es igual a new coche, bla bla bla 127 00:10:13,549 --> 00:10:16,529 Esto de aquí 128 00:10:16,529 --> 00:10:22,509 Si queremos crear un objeto de tipo persona, podemos crear persona alumno 129 00:10:22,509 --> 00:10:25,730 alumno es el nombre de la variable 130 00:10:25,730 --> 00:10:30,509 y persona es que te está diciendo que este de aquí será un objeto 131 00:10:30,509 --> 00:10:33,149 que tiene como tipo persona 132 00:10:33,149 --> 00:10:37,029 vete a la clase persona y mírate cuáles son sus atributos 133 00:10:37,029 --> 00:10:40,169 y sabrás la estructura del alumno 134 00:10:40,169 --> 00:10:43,750 vete a la clase persona y mírate los métodos 135 00:10:43,750 --> 00:10:46,809 y sabrás qué puede hacer este alumno 136 00:10:46,809 --> 00:10:55,980 los atributos, ¿vale? son las características que define el objeto 137 00:10:55,980 --> 00:10:58,820 Repito que los pongo en la clase como abstracto 138 00:10:58,820 --> 00:11:03,360 Y luego en los instancios le doy un valor concreto cuando creo un objeto 139 00:11:03,360 --> 00:11:06,500 Cada atributo tiene una visibilidad 140 00:11:06,500 --> 00:11:09,500 Que es public, private, protected 141 00:11:09,500 --> 00:11:11,340 Por ahora lo dejamos allí 142 00:11:11,340 --> 00:11:13,980 Es donde puedo ver esta variable 143 00:11:13,980 --> 00:11:16,379 Si la puedo ver solo dentro del objeto 144 00:11:16,379 --> 00:11:19,159 O si la puedo ver también desde fuera del objeto 145 00:11:19,159 --> 00:11:20,860 Hablaremos de esto más adelante 146 00:11:20,860 --> 00:11:24,399 Un tipo que puede ser primitivo 147 00:11:24,399 --> 00:11:25,860 Puede ser un int como edad 148 00:11:25,860 --> 00:11:28,720 o puede ser 149 00:11:28,720 --> 00:11:30,379 otro objeto 150 00:11:30,379 --> 00:11:32,279 como por ejemplo cuando pongo string 151 00:11:32,279 --> 00:11:34,559 nombre, string es otro 152 00:11:34,559 --> 00:11:35,759 objeto en realidad 153 00:11:35,759 --> 00:11:38,600 identificador 154 00:11:38,600 --> 00:11:39,440 del atributo 155 00:11:39,440 --> 00:11:42,419 que es el nombre 156 00:11:42,419 --> 00:11:44,220 que doy a este atributo, por ejemplo 157 00:11:44,220 --> 00:11:45,860 nombre o por ejemplo edad 158 00:11:45,860 --> 00:11:48,720 todo esto ahora lo vemos en práctica 159 00:11:48,720 --> 00:11:50,019 pero es porque 160 00:11:50,019 --> 00:11:52,059 necesito llegar a los constructores porque 161 00:11:52,059 --> 00:11:54,240 si no, no podemos construir objetos 162 00:11:54,240 --> 00:12:00,659 Por ejemplo, la persona tiene nombre y edad como atributos 163 00:12:00,659 --> 00:12:03,840 Entonces tendrá nombre que es un string, que es una clase 164 00:12:03,840 --> 00:12:08,559 Este tipo string en realidad es una clase, es un objeto 165 00:12:08,559 --> 00:12:13,860 Y edad que es de tipo int, que es un tipo primitivo 166 00:12:13,860 --> 00:12:20,539 El estado de un objeto está definido por los valores de sus atributos en un momento concreto 167 00:12:20,539 --> 00:12:23,519 El estado puede variar al cambiar los valores del atributo 168 00:12:23,519 --> 00:12:29,679 Si yo tengo una persona que se llama Estefano con 40 años, pues ahora su estado es Estefano con 40 años. 169 00:12:30,039 --> 00:12:46,019 Si de mañana ejecuto el método cumplir años, o cumpleaños feliz, pues lo que hace es sumarle 1 a los 40 y ahora su estado es nombre Estefano y edad 41, porque ha cumplido los años. 170 00:12:47,799 --> 00:12:48,039 ¿Dudas? 171 00:12:48,519 --> 00:12:52,070 Y luego tenemos los métodos, ¿vale? 172 00:12:52,070 --> 00:12:55,429 Estamos aquí, estamos haciendo esto, identidad, tributos y métodos. 173 00:12:55,470 --> 00:12:59,330 identidad, hemos visto identidad, atributos y métodos 174 00:12:59,330 --> 00:13:03,450 los métodos pueden proporcionar unos servicios a otros objetos 175 00:13:03,450 --> 00:13:07,409 pueden hacer algo, son los que yo tengo un objeto 176 00:13:07,409 --> 00:13:10,090 y que puede hacer este objeto, que puede hacer string 177 00:13:10,090 --> 00:13:16,659 si yo tengo un string, que puede hacer, que puedo pedir que haga 178 00:13:16,659 --> 00:13:29,500 que le pedimos nosotros a string s, string s es igual a 179 00:13:29,500 --> 00:13:33,220 hola, que puede hacer, s.length 180 00:13:33,220 --> 00:13:36,860 Un servicio, dame cuantos caracteres contienes 181 00:13:36,860 --> 00:13:39,039 Pues eso es algo que hace string 182 00:13:39,039 --> 00:13:40,259 Otros 183 00:13:40,259 --> 00:13:42,740 Equals 184 00:13:42,740 --> 00:13:46,519 Esto es una función de string 185 00:13:46,519 --> 00:13:50,980 Que se permite compararse con otro objeto string 186 00:13:50,980 --> 00:13:52,940 Y decirme si somos iguales o no 187 00:13:52,940 --> 00:13:55,480 ¿Qué más servicios me proporciona? 188 00:13:58,179 --> 00:13:58,940 Tu uppercase 189 00:13:58,940 --> 00:14:00,980 Soy una string 190 00:14:00,980 --> 00:14:03,679 Voy a darte una versión de mí mismo 191 00:14:03,679 --> 00:14:05,279 Pero toda en mayúsculas 192 00:14:05,279 --> 00:14:13,139 Todas estas son métodos que proporciona la clase string a quien quiera utilizarlo, y todo lo que hemos visto en la tanda de ejercicio de string. 193 00:14:16,360 --> 00:14:30,259 Un método suele tener un nombre, por ejemplo, tu string, perdón, lo que hemos dicho ahora, tu uppercase o length, ese es el nombre del método. 194 00:14:30,259 --> 00:14:34,820 Unos parámetros, por ejemplo, length no tiene ningún parámetro 195 00:14:34,820 --> 00:14:37,159 Es abierta paréntesis, cerrada paréntesis 196 00:14:37,159 --> 00:14:40,059 Pero el equals, para poder comparar dos 197 00:14:40,059 --> 00:14:45,659 Tienes que pasarle como parámetro el segundo string con el que vas a comparar 198 00:14:45,659 --> 00:14:49,899 Este string es .equals, abierta paréntesis 199 00:14:49,899 --> 00:14:53,899 Y el segundo string que hace para ver si estos dos son iguales 200 00:14:53,899 --> 00:14:56,019 Entonces admite un parámetro 201 00:14:56,019 --> 00:15:02,019 Los parámetros que se hacen, como habéis hecho las funciones y los procedimientos. 202 00:15:02,799 --> 00:15:06,460 Lo hemos visto ayer, por ejemplo, en los ejemplos que hemos hecho en la pizarra. 203 00:15:06,860 --> 00:15:09,960 Y un valor que devuelve a quien ha llamado el método. 204 00:15:10,899 --> 00:15:12,779 O sea, el return. 205 00:15:13,480 --> 00:15:16,779 Que si no quiero devolver nada, será null. 206 00:15:17,139 --> 00:15:18,340 Será void. 207 00:15:19,340 --> 00:15:19,460 ¿Sí? 208 00:15:21,120 --> 00:15:23,639 Es importante saber qué métodos implementa una clase, 209 00:15:23,639 --> 00:15:26,480 qué parámetros tienen los métodos 210 00:15:26,480 --> 00:15:28,840 y que devuelven para que otros programas 211 00:15:28,840 --> 00:15:30,240 puedan usar esos métodos 212 00:15:30,240 --> 00:15:34,100 no es importante cómo hace las cosas 213 00:15:34,100 --> 00:15:35,279 sino lo que puede hacer 214 00:15:35,279 --> 00:15:40,539 yo no sé cómo se calcula la longitud de una string 215 00:15:40,539 --> 00:15:43,059 ¿sabéis cómo se hace dentro length? 216 00:15:45,769 --> 00:15:46,409 ¿estás seguro? 217 00:15:47,610 --> 00:15:48,789 ¿estás seguro que hace un for 218 00:15:48,789 --> 00:15:52,950 y va haciendo y más más por cada posición? 219 00:15:52,950 --> 00:15:56,409 o que dentro lo guarda como un array 220 00:15:56,409 --> 00:15:59,710 y devuelve el atributo length del array 221 00:15:59,710 --> 00:16:02,029 o que, ¿sabes cómo se hace? 222 00:16:02,629 --> 00:16:04,789 No me interesa saber cómo se hace, ¿vale? 223 00:16:05,450 --> 00:16:08,710 Yo sé que la string puede darme su longitud 224 00:16:08,710 --> 00:16:12,110 como se hace por dentro no es importante 225 00:16:12,110 --> 00:16:13,570 ¿Sí? 226 00:16:18,899 --> 00:16:20,039 Una clase, ¿vale? 227 00:16:20,039 --> 00:16:21,940 Entonces, esta de aquí, por ejemplo 228 00:16:21,940 --> 00:16:24,259 es un ejemplo de clase, la clase persona 229 00:16:24,259 --> 00:16:26,419 public class persona 230 00:16:26,419 --> 00:16:28,519 tiene string apellido 231 00:16:28,519 --> 00:16:30,360 string nombre, fijaos 232 00:16:30,360 --> 00:16:31,179 le he dado un valor 233 00:16:31,179 --> 00:16:33,259 ¿por qué no le he dado un valor? 234 00:16:37,779 --> 00:16:39,840 ¿por qué no le pongo string apellido igual a Estefano? 235 00:16:47,029 --> 00:16:48,950 porque no estoy definiendo 236 00:16:48,950 --> 00:16:50,049 un objeto 237 00:16:50,049 --> 00:16:52,250 estoy definiendo una clase 238 00:16:52,250 --> 00:16:54,490 estoy definiendo el molde 239 00:16:54,490 --> 00:16:57,129 estoy diciendo la estructura que tendrán 240 00:16:57,129 --> 00:16:57,750 los objetos 241 00:16:57,750 --> 00:17:00,470 pero no puedo darte un valor concreto 242 00:17:00,470 --> 00:17:02,509 porque habrá un objeto que se llama Estefano 243 00:17:02,509 --> 00:17:04,609 un objeto que se llama Paco, un objeto que se llama Sara 244 00:17:04,609 --> 00:17:05,809 un objeto que se llama Lidia 245 00:17:05,809 --> 00:17:07,990 ¿Me explico? 246 00:17:10,210 --> 00:17:11,650 Entonces, aquí yo te digo que 247 00:17:11,650 --> 00:17:14,789 Todas las personas tendrán un apellido y un nombre 248 00:17:14,789 --> 00:17:16,109 Eso lo tienen que tener 249 00:17:16,109 --> 00:17:18,809 ¿Cuál será su valor? 250 00:17:19,390 --> 00:17:21,410 Dependerá en el momento que creo el objeto 251 00:17:21,410 --> 00:17:22,309 ¿Qué valor le doy? 252 00:17:23,069 --> 00:17:24,349 Y eso ahora lo veremos en un momento 253 00:17:24,349 --> 00:17:26,349 ¿Qué puede hacer una persona? 254 00:17:26,930 --> 00:17:28,250 Puede pillar un apellido 255 00:17:28,250 --> 00:17:28,930 ¿Vale? 256 00:17:29,170 --> 00:17:30,769 Le puedo pedir a una persona 257 00:17:30,769 --> 00:17:31,630 Get apellido 258 00:17:31,630 --> 00:17:33,630 Que sostanzamente me devuelve su apellido 259 00:17:33,630 --> 00:17:36,809 Puedo poner set apellido 260 00:17:36,809 --> 00:17:39,130 Y le paso un apellido nuevo. 261 00:17:39,470 --> 00:17:43,170 Esto permite cambiar el apellido al objeto. 262 00:17:44,630 --> 00:17:45,069 ¿Lo veis? 263 00:17:46,990 --> 00:17:48,190 GetNombre es este nombre. 264 00:17:48,490 --> 00:17:56,630 Por ejemplo, estoy definiendo una clase Persona que tiene cuatro posibles servicios, cuatro posibles métodos que me proporciona. 265 00:17:57,069 --> 00:18:03,109 Puedo saber cómo se llama tanto apellido como nombre y cambiarle tanto apellido como nombre. 266 00:18:04,170 --> 00:18:05,849 ¿Cómo se hace? Ahora lo vemos. 267 00:18:05,849 --> 00:18:12,470 Estos de aquí que se llaman get algo y set algo de un atributo 268 00:18:12,470 --> 00:18:17,089 ¿Veis que? Get apellido, set apellido, get nombre, set nombre 269 00:18:17,089 --> 00:18:20,269 Se suelen llamar getter y setters 270 00:18:20,269 --> 00:18:22,789 Veremos por qué son útiles 271 00:18:22,789 --> 00:18:27,380 Y aquí es donde quería llegar, ¿vale? 272 00:18:27,380 --> 00:18:28,619 ¿Cómo se crea un objeto? 273 00:18:28,700 --> 00:18:31,339 Porque hemos dicho, vale, yo tengo la clase, creo los objetos 274 00:18:31,339 --> 00:18:33,299 Pero ¿cómo se crea un objeto? 275 00:18:33,299 --> 00:18:48,119 ¿Vale? Para crear un objeto se necesita de un constructor. Un constructor es un método especial. ¿Vale? Es un método cuya función es crear un objeto de esa clase. 276 00:18:48,859 --> 00:19:01,319 Entonces, coche tendrá su constructor que me permite crear una instancia de clase. Persona tendrá su constructor que me permite crear una instancia, un objeto de tipo persona. 277 00:19:01,319 --> 00:19:07,039 Además una clase proporciona unos métodos especiales que se llaman constructores 278 00:19:07,039 --> 00:19:10,460 Que son los que se encargan de crear nuevos objetos de esa clase 279 00:19:10,460 --> 00:19:13,480 Se tiene que llamar exactamente igual que la clase 280 00:19:13,480 --> 00:19:14,859 Ahora tanto hacemos ejemplos 281 00:19:14,859 --> 00:19:17,299 Los métodos constructores no devuelven nada 282 00:19:17,299 --> 00:19:22,119 No tienen void o int porque lo que devuelven es un objeto de esa clase 283 00:19:22,119 --> 00:19:26,480 Se ejecutan al momento de la creación del objeto 284 00:19:26,480 --> 00:19:29,940 Y para usar un constructor tengo que utilizar el new 285 00:19:29,940 --> 00:19:32,000 Cuando vosotros hacéis newScanner 286 00:19:32,000 --> 00:19:34,819 Estáis utilizando el constructor de Scanner 287 00:19:34,819 --> 00:19:38,039 Cuando hacéis newArray 288 00:19:38,039 --> 00:19:40,359 Estáis creando un constructor de Array 289 00:19:40,359 --> 00:19:42,460 Pero el Array es raro, es un objeto el Array 290 00:19:42,460 --> 00:19:43,220 Pero es raro 291 00:19:43,220 --> 00:19:46,619 El código contenido de los constructores se suele usar 292 00:19:46,619 --> 00:19:49,000 Para inicializar los atributos del objeto 293 00:19:49,000 --> 00:19:49,519 ¿Vale? 294 00:19:50,359 --> 00:19:52,200 Entonces yo con esto creo que 295 00:19:52,200 --> 00:19:56,180 Mira, esto es un constructor por ejemplo 296 00:19:56,180 --> 00:20:00,369 PublicPersona 297 00:20:00,369 --> 00:20:02,710 ¿Veis que no es publicStaticVoid? 298 00:20:03,269 --> 00:20:05,609 y no es public void 299 00:20:05,609 --> 00:20:07,230 o no es public class 300 00:20:07,230 --> 00:20:09,650 public class persona define la 301 00:20:09,650 --> 00:20:09,950 la 302 00:20:09,950 --> 00:20:12,349 esto está mal 303 00:20:12,349 --> 00:20:15,390 define la clase 304 00:20:15,390 --> 00:20:17,170 ¿vale? dentro de la clase 305 00:20:17,170 --> 00:20:19,450 hay un método especial que pone solo public 306 00:20:19,450 --> 00:20:21,650 persona y me pilla 307 00:20:21,650 --> 00:20:23,309 dos valores 308 00:20:23,309 --> 00:20:25,130 nom y e 309 00:20:25,130 --> 00:20:27,789 este nom lo guardaré en nombre 310 00:20:27,789 --> 00:20:29,769 este e lo guardaré en edad 311 00:20:29,769 --> 00:20:31,710 entonces para crear un nuevo 312 00:20:31,710 --> 00:20:32,289 objeto 313 00:20:32,289 --> 00:20:34,809 lo que tendré que hacer es 314 00:20:34,809 --> 00:20:36,509 new persona 315 00:20:36,509 --> 00:20:38,109 del nombre 316 00:20:38,109 --> 00:20:40,049 coma la edad 317 00:20:40,049 --> 00:20:43,130 esta de aquí me creará un nuevo objeto 318 00:20:43,130 --> 00:20:44,930 que tiene como nombre Lola 319 00:20:44,930 --> 00:20:47,130 y como edad 30 320 00:20:47,130 --> 00:20:49,349 y lo guardará en una variable 321 00:20:49,349 --> 00:20:50,710 de tipo persona 322 00:20:50,710 --> 00:20:52,190 que se llama persona1 323 00:20:52,190 --> 00:20:54,529 se entiende más o menos 324 00:20:54,529 --> 00:20:57,289 esta era la teoría 325 00:20:57,289 --> 00:20:59,609 vamos a hacer un poco de práctica 326 00:20:59,609 --> 00:21:12,220 Vale, voy a crear un nuevo proyecto 327 00:21:12,220 --> 00:21:15,539 Voy a mirar 328 00:21:15,539 --> 00:21:20,500 Objetos 329 00:21:20,500 --> 00:21:32,039 Entonces tengo aquí 330 00:21:32,039 --> 00:21:35,180 Me creo un nuevo package 331 00:21:35,180 --> 00:21:38,960 De ejemplo objetos 332 00:21:38,960 --> 00:21:45,980 Y vamos a crear una nueva clase 333 00:21:45,980 --> 00:21:48,720 Pregunta para vosotros 334 00:21:48,720 --> 00:21:50,759 ¿Qué queréis modelizar? 335 00:21:53,119 --> 00:21:56,779 Un animal, una persona, un libro, un coche, un avión 336 00:21:56,779 --> 00:22:04,740 ¿En serio? ¿Fantasía cero? 337 00:22:11,950 --> 00:22:13,170 ¡Qué aburrido! ¡Coche! 338 00:22:14,089 --> 00:22:14,450 ¿Vale? 339 00:22:16,490 --> 00:22:20,710 Podría haber sido bestia mitológica, pero no, coche 340 00:22:20,710 --> 00:22:25,009 Entonces, aquí tenemos un coche 341 00:22:25,009 --> 00:22:25,809 ¿Sí? 342 00:22:25,809 --> 00:22:28,490 Quiero 343 00:22:28,490 --> 00:22:30,609 Definir 344 00:22:30,609 --> 00:22:33,609 Qué es importante 345 00:22:33,609 --> 00:22:34,630 Para mí y para un coach 346 00:22:34,630 --> 00:22:36,130 Entonces 347 00:22:36,130 --> 00:22:39,750 Yo no sé, ahora lo estamos haciendo en general 348 00:22:39,750 --> 00:22:40,210 ¿Vale? 349 00:22:40,589 --> 00:22:41,190 Deberíamos 350 00:22:41,190 --> 00:22:44,509 Plantearnos 351 00:22:44,509 --> 00:22:48,069 ¿Por qué estamos creando un coche? 352 00:22:48,170 --> 00:22:48,910 ¿Es para un taller? 353 00:22:49,230 --> 00:22:52,089 ¿Es para una carrera? 354 00:22:52,089 --> 00:22:53,849 ¿Es para...? No lo sé 355 00:22:53,849 --> 00:22:55,670 ¿Vale? Pero en general 356 00:22:55,670 --> 00:22:57,049 Pensamos al coche en general 357 00:22:57,049 --> 00:23:00,109 ¿Qué es importante para vosotros en un coche? 358 00:23:03,400 --> 00:23:03,940 El motor 359 00:23:03,940 --> 00:23:06,799 ¿Y qué del motor? 360 00:23:07,019 --> 00:23:09,519 Porque vamos a la cilindrada 361 00:23:09,519 --> 00:23:12,059 La potencia 362 00:23:12,059 --> 00:23:15,789 Claro, pero ¿cómo defines un motor? 363 00:23:16,109 --> 00:23:18,569 Porque motor, racías, secas, pues serían otros objetos 364 00:23:18,569 --> 00:23:20,529 Vamos sobre el sencillo 365 00:23:20,529 --> 00:23:25,059 Vamos antes sobre lo sencillo, ¿vale? 366 00:23:27,579 --> 00:23:28,960 La matrícula, venga 367 00:23:28,960 --> 00:23:31,359 String, matrícula 368 00:23:31,359 --> 00:23:32,619 Importantísimo 369 00:23:32,619 --> 00:23:35,119 Fijaos, ¿dónde la he escrito? 370 00:23:36,339 --> 00:23:39,779 La he escrito dentro de Public Class 371 00:23:39,779 --> 00:23:41,660 Pero no dentro de un método 372 00:23:41,660 --> 00:23:44,420 ¿Sí? 373 00:23:45,720 --> 00:23:47,420 Perfecto, tengo una matrícula 374 00:23:47,420 --> 00:23:48,900 ¿Qué matrícula tiene este coche? 375 00:23:52,910 --> 00:23:53,470 Ni idea 376 00:23:53,470 --> 00:23:57,930 Yo estoy definiendo la idea abstracta 377 00:23:57,930 --> 00:23:59,769 Cada coche tendrá una matrícula 378 00:23:59,769 --> 00:24:02,490 ¿Cuál es la matrícula de un coche concreto? 379 00:24:02,990 --> 00:24:04,029 Pues eso es otro problema 380 00:24:04,029 --> 00:24:06,089 ¿Sí? 381 00:24:07,609 --> 00:24:09,009 Sé que será un string. 382 00:24:11,019 --> 00:24:11,900 ¿Quiero que sea un int? 383 00:24:12,099 --> 00:24:13,220 Pues le puedo poner que sea un int. 384 00:24:14,079 --> 00:24:14,539 Si quiero. 385 00:24:15,359 --> 00:24:18,039 Pero, y ahora sé que me vale un código alfanumérico. 386 00:24:19,079 --> 00:24:19,380 Más. 387 00:24:19,900 --> 00:24:22,559 ¿Qué nos interesa del coche? 388 00:24:23,579 --> 00:24:24,319 La marca. 389 00:24:24,720 --> 00:24:25,299 ¿Qué es la marca? 390 00:24:29,519 --> 00:24:30,220 ¿Pero qué tipo es? 391 00:24:33,799 --> 00:24:34,240 String. 392 00:24:35,619 --> 00:24:36,059 Modelo. 393 00:24:38,220 --> 00:24:38,660 Más. 394 00:24:42,000 --> 00:24:44,779 No, no pongamos todo igual porque si no luego nos sale complejo. 395 00:24:45,319 --> 00:24:46,500 Pongamos un int. 396 00:24:47,079 --> 00:24:47,519 Int. 397 00:24:52,640 --> 00:24:53,079 Año. 398 00:24:53,480 --> 00:25:04,789 velocidad máxima así es y nos movemos todo lo que habéis dicho es correcto y puede valer como 399 00:25:04,789 --> 00:25:10,549 no sabemos qué estamos haciendo pues tampoco sé qué poner aquí podría poner mil cosas o podría 400 00:25:10,549 --> 00:25:16,970 poner pocas vale pero estoy creando un objeto lo estoy definiendo que mi objeto las cosas 401 00:25:16,970 --> 00:25:24,200 importantes de mi objeto es saber su matrícula saber su modelo saber su velocidad máxima inter 402 00:25:24,200 --> 00:25:26,319 Año 403 00:25:26,319 --> 00:25:29,079 Fabricación 404 00:25:29,079 --> 00:25:29,680 ¿Se dice así? 405 00:25:30,920 --> 00:25:31,740 Año fab 406 00:25:31,740 --> 00:25:33,920 Antigüedad, no sé 407 00:25:33,920 --> 00:25:38,150 A lo mejor modelo es Megane 408 00:25:38,150 --> 00:25:40,789 Y luego año de fabricación es 2010 409 00:25:40,789 --> 00:25:47,710 Lo que tú quieras 410 00:25:47,710 --> 00:25:50,349 Dices, esto ya no me vale 411 00:25:50,349 --> 00:25:51,430 Pues a lo mejor lo cambio 412 00:25:51,430 --> 00:25:54,410 Esto debería estar por algún lado 413 00:25:54,410 --> 00:25:56,710 También descrito que qué se entiende con modelo 414 00:25:56,710 --> 00:25:58,470 O sea, modelo es por ejemplo 415 00:25:58,470 --> 00:26:00,630 Megane o Renault Megane 416 00:26:00,630 --> 00:26:01,450 O 417 00:26:01,450 --> 00:26:04,589 No lo sé, pero eso depende de ti 418 00:26:04,589 --> 00:26:05,869 Porque lo estás creando tú 419 00:26:05,869 --> 00:26:10,480 Entonces, pongámonos aquí para mantenerlo 420 00:26:10,480 --> 00:26:12,059 Fácil, podría poner 37 421 00:26:12,059 --> 00:26:13,819 Podría poner Arrays aquí 422 00:26:13,819 --> 00:26:15,799 Pero somos buenos 423 00:26:15,799 --> 00:26:18,019 Y por ahora nos molesto con los Arrays 424 00:26:18,019 --> 00:26:18,779 ¿Vale? 425 00:26:19,460 --> 00:26:22,400 Entonces, ahora yo tengo este coche 426 00:26:22,400 --> 00:26:23,680 ¿Vale? 427 00:26:23,779 --> 00:26:25,640 Para poder crear un coche 428 00:26:25,640 --> 00:26:28,480 Necesito un constructor 429 00:26:28,480 --> 00:26:32,819 entonces 430 00:26:32,819 --> 00:26:34,319 public 431 00:26:34,319 --> 00:26:35,980 coche 432 00:26:35,980 --> 00:26:38,960 y la pregunta es 433 00:26:38,960 --> 00:26:41,799 que me van a dar 434 00:26:41,799 --> 00:26:44,099 cuando construyen un coche 435 00:26:44,099 --> 00:26:45,740 cuando yo quiero crear 436 00:26:45,740 --> 00:26:46,900 un objeto coche 437 00:26:46,900 --> 00:26:49,759 que parámetros me pasan 438 00:26:49,759 --> 00:26:51,480 para que yo pueda 439 00:26:51,480 --> 00:26:52,619 rellenar estos 440 00:26:52,619 --> 00:26:57,609 entonces me pasarían 441 00:26:57,609 --> 00:26:58,329 string 442 00:26:58,329 --> 00:27:00,349 m 443 00:27:00,349 --> 00:27:04,650 String 444 00:27:04,650 --> 00:27:07,230 String 445 00:27:07,230 --> 00:27:09,349 No, int 446 00:27:09,349 --> 00:27:14,359 Int 447 00:27:14,359 --> 00:27:19,500 Yo tengo aquí un método especial 448 00:27:19,500 --> 00:27:21,839 Que se llamará cuando se construye un nuevo objeto 449 00:27:21,839 --> 00:27:23,859 En el que me pasarán dos string 450 00:27:23,859 --> 00:27:24,799 Y dos int 451 00:27:24,799 --> 00:27:26,559 Y yo lo que haré es decir 452 00:27:26,559 --> 00:27:28,759 Oye mira, matrícula 453 00:27:28,759 --> 00:27:30,059 Esma 454 00:27:30,059 --> 00:27:33,460 Modelo 455 00:27:33,460 --> 00:27:34,880 Esmo 456 00:27:34,880 --> 00:27:40,380 Velocidad máxima es B 457 00:27:40,380 --> 00:27:45,599 Y año fabricación es igual a 458 00:27:45,599 --> 00:27:57,779 Oye, esto en su versión más sencilla absoluta 459 00:27:57,779 --> 00:28:03,240 Yo me estoy imaginando que aquí me dan modelos correctos 460 00:28:03,240 --> 00:28:06,359 La matrícula es formada como tiene que formar 461 00:28:06,359 --> 00:28:10,980 La velocidad máxima no es 7 millones o no es negativa 462 00:28:10,980 --> 00:28:20,039 el año de fabricación es un año humano, no es el 300 a.C., ¿sí? 463 00:28:21,299 --> 00:28:23,819 Estoy pensando que lo que me están dando es todo correcto. 464 00:28:24,119 --> 00:28:34,720 Si quisiera, podría intentar hacer algo, en plan, si v es mayor o igual que 0, 465 00:28:34,720 --> 00:28:36,500 Entonces esto 466 00:28:36,500 --> 00:28:39,630 El se 467 00:28:39,630 --> 00:28:44,859 Velocidad máxima 468 00:28:44,859 --> 00:28:45,880 Es igual a 1 469 00:28:45,880 --> 00:28:52,420 El constructor es un método 470 00:28:52,420 --> 00:28:54,480 Es un método que se llamará 471 00:28:54,480 --> 00:28:56,019 Al construir el objeto 472 00:28:56,019 --> 00:28:57,759 Esto me permite 473 00:28:57,759 --> 00:28:59,859 Hacer lo que me da la gana 474 00:28:59,859 --> 00:29:01,980 Lo que hacía en los métodos, lo puedo hacer aquí 475 00:29:01,980 --> 00:29:04,119 O sea, no es que necesariamente lo he mandado B 476 00:29:04,119 --> 00:29:05,680 Entonces B tiene que ser perfecto 477 00:29:05,680 --> 00:29:07,440 ¿Puedo yo comprobarlo? 478 00:29:07,440 --> 00:29:08,279 ¿Puedo yo hacer un while? 479 00:29:08,400 --> 00:29:09,700 ¿Hacer algo sobre esto? 480 00:29:09,700 --> 00:29:15,740 La matrícula, la matrícula tiene un código, tiene cuatro números, luego una letra y cosas por el estilo 481 00:29:15,740 --> 00:29:20,519 Yo puedo ir a mirar esta matrícula y decir, oye, la matrícula tiene que tener este formato 482 00:29:20,519 --> 00:29:23,140 Y si no tiene ese formato, hacer algo 483 00:29:23,140 --> 00:29:29,400 Desde avisar, desde meter una matrícula por defecto 0000AA 484 00:29:29,400 --> 00:29:33,839 A explotar, a hacer saltar el programa entero 485 00:29:33,839 --> 00:29:36,200 ¿Me has dado matrícula que no me vale? Pues fuera 486 00:29:36,200 --> 00:29:39,460 ¿Sí? Eso depende de mí 487 00:29:39,460 --> 00:29:43,700 Depende de quien usa coche 488 00:29:43,700 --> 00:29:46,539 De si yo quiero que el coche sea seguro 489 00:29:46,539 --> 00:29:48,119 Y quien lo use 490 00:29:48,119 --> 00:29:50,119 Pues no pueda meter 491 00:29:50,119 --> 00:29:52,400 Una matrícula como le da la gana 492 00:29:52,400 --> 00:29:53,980 O si yo quiero que 493 00:29:53,980 --> 00:29:56,180 No, me fío que estas comprobaciones 494 00:29:56,180 --> 00:29:57,279 No se han hecho aquí 495 00:29:57,279 --> 00:30:00,380 Si no se han hecho allá donde se crea el coche 496 00:30:00,380 --> 00:30:03,240 No sé si me explico lo que quiero decir 497 00:30:03,240 --> 00:30:07,460 Por ahora yo he asumido que 498 00:30:07,460 --> 00:30:10,539 lo que me dan aquí, aquí y aquí 499 00:30:10,539 --> 00:30:11,660 está bien 500 00:30:11,660 --> 00:30:14,359 y la velocidad, si me dan 501 00:30:14,359 --> 00:30:15,859 una velocidad negativa 502 00:30:15,859 --> 00:30:17,500 le pongo 1 503 00:30:17,500 --> 00:30:19,880 como velocidad máxima 504 00:30:19,880 --> 00:30:22,119 si me dan una velocidad positiva 505 00:30:22,119 --> 00:30:23,240 le pongo la que me han puesto 506 00:30:23,240 --> 00:30:27,380 entonces aquí he hecho una pequeña 507 00:30:27,380 --> 00:30:29,180 comprobación sobre este parámetro 508 00:30:29,180 --> 00:30:33,130 aquí tengo 509 00:30:33,130 --> 00:30:34,869 mi constructor 510 00:30:34,869 --> 00:30:35,309 coche 511 00:30:35,309 --> 00:30:38,690 ¿qué puede hacer un coche? 512 00:30:46,279 --> 00:30:46,519 vale 513 00:30:46,519 --> 00:30:49,059 El problema es que tengo yo aquí 514 00:30:49,059 --> 00:30:51,019 Algo que me defina la velocidad 515 00:30:51,019 --> 00:30:52,099 A la que estoy yendo 516 00:30:52,099 --> 00:30:55,670 Pero la velocidad máxima no cambia 517 00:30:55,670 --> 00:30:58,390 Si acelero, aumenta la velocidad máxima 518 00:30:59,150 --> 00:31:00,569 Aumenta la velocidad 519 00:31:00,569 --> 00:31:01,789 Pero no la velocidad máxima 520 00:31:01,789 --> 00:31:04,509 Entonces, por ejemplo, por la elección 521 00:31:04,509 --> 00:31:06,490 De datos que he puesto aquí 522 00:31:06,490 --> 00:31:08,730 El concepto de acelerar 523 00:31:08,730 --> 00:31:13,250 No sé cómo reflejarlo 524 00:31:13,250 --> 00:31:14,509 Yo hago acelerar, ¿y qué hago? 525 00:31:14,750 --> 00:31:15,430 Lo puedo hacer, ¿eh? 526 00:31:17,309 --> 00:31:17,829 Public 527 00:31:17,829 --> 00:31:19,869 Devuelve algo 528 00:31:19,869 --> 00:31:25,420 Voy a acelerar 529 00:31:25,420 --> 00:31:26,579 Pero es que velocidad no la tengo 530 00:31:26,579 --> 00:31:29,599 Entonces lo que hace acelerar es 531 00:31:29,599 --> 00:31:32,559 Brrrrrr 532 00:31:32,559 --> 00:31:39,170 Sí, tanto es para hacer pruebas 533 00:31:39,170 --> 00:31:41,789 Entonces cada coche puede acelerar 534 00:31:41,789 --> 00:31:43,450 Y cuando acelera simplemente te escribe 535 00:31:43,450 --> 00:31:46,190 Brrrrrr 536 00:31:46,190 --> 00:31:46,849 No hace nada más 537 00:31:46,849 --> 00:31:49,269 Más cosas que puede hacer un coche 538 00:31:49,269 --> 00:31:57,609 Frena, pero es lo mismo que antes 539 00:31:57,609 --> 00:32:00,450 No me decís cosas interesantes 540 00:32:00,450 --> 00:32:01,329 Frenar 541 00:32:01,329 --> 00:32:03,630 Entonces cuando freno, ¿qué hace? 542 00:32:04,690 --> 00:32:05,609 Ahora 543 00:32:05,609 --> 00:32:19,599 Que un coche se venda 544 00:32:19,599 --> 00:32:20,720 Es un poco raro 545 00:32:20,720 --> 00:32:24,059 A lo mejor habrá otro que tendrá a vender un coche 546 00:32:24,059 --> 00:32:25,059 Pero que el coche 547 00:32:25,059 --> 00:32:27,180 Si, si, lo sé 548 00:32:27,180 --> 00:32:32,420 Cambiar matrícula 549 00:32:32,420 --> 00:32:33,799 Venga, podemos decir 550 00:32:33,799 --> 00:32:36,759 Cambia dueño, entonces cambia la matrícula 551 00:32:36,759 --> 00:32:38,720 Si, vale, perfecto 552 00:32:38,720 --> 00:32:40,660 Public void 553 00:32:40,660 --> 00:32:42,559 Cambia matrícula 554 00:32:44,019 --> 00:32:46,599 Cambia matrícula 555 00:32:46,599 --> 00:32:47,980 ¿Qué le pasamos al cambio de matrícula? 556 00:32:47,980 --> 00:33:06,140 Un string matrícula nueva, y lo que hacemos es que matrícula es igual a matrícula nueva. 557 00:33:08,900 --> 00:33:18,980 Podría yo aquí preguntarme si la matrícula nueva es una matrícula real, entonces cámbiala, si no, no. 558 00:33:20,220 --> 00:33:24,339 Podría hacer lo que me da la gana, esto es un método, estoy haciendo métodos sencillos. 559 00:33:24,339 --> 00:33:25,720 Más 560 00:33:25,720 --> 00:33:44,680 Sí 561 00:33:44,680 --> 00:33:47,180 No cambiamos esto por ahora 562 00:33:47,180 --> 00:33:48,640 Usamos año de fabricación 563 00:33:48,640 --> 00:33:50,380 Hagamos un, no sé 564 00:33:50,380 --> 00:33:52,059 Que te diga que si es 565 00:33:52,059 --> 00:33:54,299 Anterior del 2010 566 00:33:54,299 --> 00:33:55,859 Te diga la etiqueta 567 00:33:55,859 --> 00:33:58,339 Si es 2010, antes del 2010 no tiene etiqueta 568 00:33:58,339 --> 00:33:59,299 Y si no te dice 569 00:33:59,299 --> 00:34:00,500 Soy eco 570 00:34:00,500 --> 00:34:02,220 ¿Sí? 571 00:34:02,680 --> 00:34:04,720 Entonces, yo digo 572 00:34:04,720 --> 00:34:06,140 Public 573 00:34:06,140 --> 00:34:10,380 Por ejemplo, bolean 574 00:34:10,380 --> 00:34:12,019 Soy eco 575 00:34:12,019 --> 00:34:33,579 Y lo que contesto es, si año FAB es menor que 2010, por ejemplo, es para hacer ejemplos. 576 00:34:34,500 --> 00:34:38,659 Entonces, return falso. 577 00:34:40,619 --> 00:34:45,820 Elche, return true. 578 00:34:45,820 --> 00:34:49,969 O si soy un pro 579 00:34:49,969 --> 00:34:52,530 Return 580 00:34:52,530 --> 00:35:02,590 Si 581 00:35:02,590 --> 00:35:04,909 Bueno, sería 582 00:35:04,909 --> 00:35:06,429 Al revés, ¿no? 583 00:35:16,530 --> 00:35:17,989 Otra cosa, por ejemplo 584 00:35:17,989 --> 00:35:20,530 Public 585 00:35:20,530 --> 00:35:23,769 Void 586 00:35:23,769 --> 00:35:25,929 Descríbete 587 00:35:25,929 --> 00:35:29,519 Que dirá 588 00:35:29,519 --> 00:35:34,739 Soy un coche 589 00:35:34,739 --> 00:35:36,119 Más 590 00:35:36,119 --> 00:35:37,400 Modelo 591 00:35:37,400 --> 00:35:39,719 Más 592 00:35:39,719 --> 00:35:40,539 que hemos puesto 593 00:35:40,539 --> 00:35:42,519 con matricula 594 00:35:42,519 --> 00:35:49,380 más matricula 595 00:35:49,380 --> 00:35:51,119 más 596 00:35:51,119 --> 00:35:54,420 del año 597 00:35:54,420 --> 00:36:03,769 más año 598 00:36:03,769 --> 00:36:04,210 fab 599 00:36:04,210 --> 00:36:09,179 lo escribe y luego me voy a hacer 600 00:36:09,179 --> 00:36:15,099 un public string 601 00:36:15,099 --> 00:36:18,280 get 602 00:36:18,280 --> 00:36:20,320 descripción 603 00:36:20,320 --> 00:36:24,699 que lo que hace es 604 00:36:24,699 --> 00:36:26,519 return 605 00:36:26,519 --> 00:36:28,019 esta cosa 606 00:36:28,019 --> 00:36:31,639 Veis la diferencia entre uno y otro 607 00:36:31,639 --> 00:36:35,679 Estos dos son métodos 608 00:36:35,679 --> 00:36:38,920 Este de aquí directamente lo escribe en pantalla 609 00:36:38,920 --> 00:36:41,000 Este de aquí no lo escribe en pantalla 610 00:36:41,000 --> 00:36:42,639 Me devuelve un string 611 00:36:42,639 --> 00:36:45,380 Que luego yo decidiré qué hacer con este string 612 00:36:45,380 --> 00:36:47,519 Si escribirlo en pantalla o hacer otra cosa 613 00:36:47,519 --> 00:36:56,030 Cuando pongo describete me saldrá esto en consola 614 00:36:56,030 --> 00:36:59,070 Cuando pongo descripción no me saldrá absolutamente nada en consola 615 00:36:59,070 --> 00:37:00,530 Porque no estoy escribiendo nada 616 00:37:00,530 --> 00:37:03,929 Ahora los vamos a usar y veremos la diferencia 617 00:37:03,929 --> 00:37:17,969 Pero estos son métodos distintos. Esto no devuelve nada y escribe en pantalla. Esto devuelve un string que es lo que aquí escribí en pantalla, pero sin escribirlo en pantalla, me lo devuelve nada más. Luego a lo mejor yo con eso lo pongo todo en mayúscula y lo escribo en pantalla. 618 00:37:17,969 --> 00:37:25,260 Por ejemplo, estos son métodos, ahora los vamos a usar 619 00:37:25,260 --> 00:37:27,659 Lo que quiero decir con esto es 620 00:37:27,659 --> 00:37:34,619 Vamos aquí a rellenar las características del coche 621 00:37:34,619 --> 00:37:40,519 Cómo se construye un coche y qué hace un coche 622 00:37:40,519 --> 00:37:41,760 Qué puede hacer un coche 623 00:37:41,760 --> 00:37:44,380 Si yo aquí no defino qué puede hacer el coche, no lo puede hacer 624 00:37:44,380 --> 00:37:47,519 ¿Se entiende? 625 00:37:48,679 --> 00:37:51,679 Y ahora tengo que hacer algo con los coches 626 00:37:51,679 --> 00:37:54,800 Fijaos que por ahora ya he definido un molde 627 00:37:54,800 --> 00:37:56,780 Pero no he jugado con este molde 628 00:37:56,780 --> 00:37:58,960 No he creado un objeto, no le he hecho hacer nada 629 00:37:58,960 --> 00:38:00,739 ¿Dónde se crean los objetos 630 00:38:00,739 --> 00:38:01,880 Si se hacen hacer algo? 631 00:38:04,139 --> 00:38:05,539 En el main, ¿vale? 632 00:38:05,699 --> 00:38:08,300 Necesito un main, ¿dónde se encuentra este main? 633 00:38:08,840 --> 00:38:09,860 Puede estar aquí 634 00:38:09,860 --> 00:38:11,500 O en otra clase 635 00:38:11,500 --> 00:38:13,780 Lo vamos a hacer aquí 636 00:38:13,780 --> 00:38:15,280 Luego lo movemos en otra clase 637 00:38:15,280 --> 00:38:17,280 Entonces aquí ahora tengo un main 638 00:38:17,280 --> 00:38:20,380 Public, static 639 00:38:20,380 --> 00:38:22,139 El main es static 640 00:38:22,139 --> 00:38:23,260 Main 641 00:38:23,260 --> 00:38:25,059 Perdón, void 642 00:38:25,059 --> 00:38:26,320 Main 643 00:38:26,320 --> 00:38:28,360 De string 644 00:38:28,360 --> 00:38:30,239 Args 645 00:38:30,239 --> 00:38:34,030 Y ahora empezamos a jugar 646 00:38:34,030 --> 00:38:38,320 Quiero crear un coche 647 00:38:38,320 --> 00:38:40,579 El coche1 648 00:38:40,579 --> 00:38:41,639 ¿Vale? 649 00:38:42,099 --> 00:38:42,960 Entonces diré 650 00:38:42,960 --> 00:38:45,679 Créeme una variable de tipo coche 651 00:38:45,679 --> 00:38:46,719 Coche 652 00:38:46,719 --> 00:38:49,099 Que se llama 653 00:38:49,099 --> 00:38:51,579 Coche, coche, coche 654 00:38:51,579 --> 00:38:54,039 Que se llama 655 00:38:54,039 --> 00:38:55,900 coche1 656 00:38:55,900 --> 00:38:58,519 y que le pongo dentro 657 00:38:58,519 --> 00:39:00,559 un nuevo objeto 658 00:39:00,559 --> 00:39:02,699 de tipo coche 659 00:39:02,699 --> 00:39:04,639 y le tendré 660 00:39:04,639 --> 00:39:06,900 que poner los parámetros 661 00:39:06,900 --> 00:39:08,260 para construir un coche 662 00:39:08,260 --> 00:39:10,579 entonces le diré 663 00:39:10,579 --> 00:39:15,780 modelo, ¿no? 664 00:39:16,519 --> 00:39:18,940 cuidado que tiene que ir con el orden que pone aquí 665 00:39:18,940 --> 00:39:20,219 el primero es la matrícula 666 00:39:20,219 --> 00:39:22,559 la matrícula es claramente 1, 2, 3 667 00:39:22,559 --> 00:39:27,119 A, como la paso de muchos de vosotros 668 00:39:27,119 --> 00:39:30,699 La segunda es el modelo 669 00:39:30,699 --> 00:39:32,059 ¿Qué modelo es? 670 00:39:35,539 --> 00:39:36,699 No tenéis fantasía 671 00:39:36,699 --> 00:39:38,739 Audi 672 00:39:38,739 --> 00:39:40,360 Es una marca, pero me vale 673 00:39:40,360 --> 00:39:41,940 Audi A3 674 00:39:41,940 --> 00:39:43,260 ¿Es Audi A3? 675 00:39:44,179 --> 00:39:44,900 Más 676 00:39:44,900 --> 00:39:47,280 ¿Cuál es su velocidad máxima? 677 00:39:48,820 --> 00:39:50,440 230 km por hora 678 00:39:50,440 --> 00:39:52,880 ¿Cuál es su año de fabricación? 679 00:39:54,880 --> 00:39:55,599 2023 680 00:39:55,599 --> 00:40:00,440 Pues esto me ha creado un nuevo objeto 681 00:40:00,440 --> 00:40:02,820 ¿Sí? 682 00:40:02,840 --> 00:40:07,920 si yo lanzo el programa ahora, ¿qué hace? 683 00:40:10,139 --> 00:40:14,760 nada, has creado el objeto y has acabado el programa 684 00:40:14,760 --> 00:40:18,900 hagamos hacer algo al objeto, por ejemplo, oye 685 00:40:18,900 --> 00:40:23,679 objeto, descríbete, fijaos 686 00:40:23,679 --> 00:40:27,800 cuando pongo c1 punto, aquí 687 00:40:27,800 --> 00:40:31,460 mi buen amigo el eclipse 688 00:40:31,460 --> 00:40:36,260 ya me está dando todo lo que puedo hacer con este 689 00:40:36,260 --> 00:40:47,579 objeto incluido los métodos que he definido yo los veis y cuando voy completando por ejemplo 690 00:40:47,579 --> 00:40:54,619 escribo de me da todos los métodos que contienen de dentro entonces digo mira es esto descríbete 691 00:40:54,619 --> 00:41:03,860 acordar que describe te me escribe directamente en pantalla por lo tanto si yo haga así me dice 692 00:41:03,860 --> 00:41:06,360 Soy un coche Audi A3 693 00:41:06,360 --> 00:41:08,039 Con matrícula 123A 694 00:41:08,039 --> 00:41:09,539 Del año 2023 695 00:41:09,539 --> 00:41:11,000 Que carácter demoníaco 696 00:41:11,000 --> 00:41:11,780 Sabemos que es 697 00:41:11,780 --> 00:41:17,610 Y me puedo preguntar 698 00:41:17,610 --> 00:41:18,409 Si soy 699 00:41:18,409 --> 00:41:20,570 Eres 700 00:41:20,570 --> 00:41:21,489 Echo 701 00:41:21,489 --> 00:41:26,619 Más C1 702 00:41:26,619 --> 00:41:29,159 Punto Echo 703 00:41:29,159 --> 00:41:29,760 Soy Echo 704 00:41:29,760 --> 00:41:34,519 Entonces el me dirá 705 00:41:34,519 --> 00:41:37,989 Soy Echo, eres Echo 706 00:41:37,989 --> 00:41:46,079 Ahora si yo llamo C1 707 00:41:46,079 --> 00:41:48,059 punto get descripción 708 00:41:48,059 --> 00:41:50,039 me escribe 709 00:41:50,039 --> 00:41:51,000 algo en pantalla 710 00:41:51,000 --> 00:41:53,340 no 711 00:41:53,340 --> 00:41:55,119 esto de aquí 712 00:41:55,119 --> 00:41:57,139 hace lo mismo que antes 713 00:41:57,139 --> 00:41:59,880 porque este de aquí 714 00:41:59,880 --> 00:42:01,460 devuelve un string 715 00:42:01,460 --> 00:42:03,159 pero yo me puedo guardar ese string 716 00:42:03,159 --> 00:42:05,260 string descripción 717 00:42:05,260 --> 00:42:06,019 de c1 718 00:42:06,019 --> 00:42:11,090 y ahora por ejemplo puedo decir 719 00:42:11,090 --> 00:42:12,349 imprímeme 720 00:42:12,349 --> 00:42:14,949 descripción de c1 721 00:42:14,949 --> 00:42:17,670 pero tu uppercase 722 00:42:17,670 --> 00:42:22,829 Entonces ahora 723 00:42:22,829 --> 00:42:24,269 Lo que me está haciendo 724 00:42:24,269 --> 00:42:26,070 Escribiendo todo en mayúsculas 725 00:42:26,070 --> 00:42:33,420 Creamos un segundo, coche 726 00:42:33,420 --> 00:42:37,940 Coche C2 727 00:42:37,940 --> 00:42:39,500 Es igual a qué 728 00:42:39,500 --> 00:42:41,820 New 729 00:42:41,820 --> 00:42:43,340 Coche 730 00:42:43,340 --> 00:42:49,380 Claramente 2, 3, 4, B, B, B 731 00:42:49,380 --> 00:42:52,130 ¿Qué es esto? 732 00:42:56,539 --> 00:42:57,940 Un Mazda 733 00:42:57,940 --> 00:42:59,699 3 734 00:42:59,699 --> 00:43:03,360 Coma 735 00:43:03,360 --> 00:43:04,940 Diversidad máxima 736 00:43:04,940 --> 00:43:10,510 200, está mal Mazda 3 737 00:43:10,510 --> 00:43:14,280 Bajando 738 00:43:14,280 --> 00:43:16,340 En caída libre, sí 739 00:43:16,340 --> 00:43:17,800 ¿Qué más? 740 00:43:19,800 --> 00:43:21,260 Año, pongámoslo viejo 741 00:43:21,260 --> 00:43:22,219 2000 742 00:43:22,219 --> 00:43:23,820 Para que veamos 743 00:43:23,820 --> 00:43:27,260 Fijámoslo en esto 744 00:43:27,260 --> 00:43:28,059 Pongamos 745 00:43:28,059 --> 00:43:29,659 Ah, no, porque no lo escribo 746 00:43:29,659 --> 00:43:31,260 No lo he usado 747 00:43:31,260 --> 00:43:34,039 Ahora he creado un segundo coche 748 00:43:34,039 --> 00:43:37,920 ¿Cómo hago para que se describa el segundo coche? 749 00:43:40,329 --> 00:43:42,530 C2.descríbete 750 00:43:42,530 --> 00:43:48,630 Fijaos, el método es el mismo, pero ahora lo estoy llamando sobre un objeto distinto 751 00:43:48,630 --> 00:43:51,329 Entonces ahora es C2 que se describe 752 00:43:51,329 --> 00:43:58,710 Entonces cuando hago C1 describete, me escribe esto, pero con los datos del objeto C1 753 00:43:58,710 --> 00:44:09,230 Cuando se lo digo al C2, me dice, oye mira, uso los datos del coche C2 754 00:44:09,230 --> 00:44:13,809 ¿se entiende? es el mismo método, yo el método no lo he tocado 755 00:44:13,809 --> 00:44:18,409 el método hace siempre lo mismo, el objeto, su comportamiento 756 00:44:18,409 --> 00:44:21,510 es siempre lo mismo, solo que dos objetos distintos 757 00:44:21,510 --> 00:44:26,650 producen un resultado distinto, porque utilizarán sus propias 758 00:44:26,650 --> 00:44:28,389 variables, sus propios atributos 759 00:44:28,389 --> 00:44:37,989 ¿si o no? ¿dudas? ahora yo podría hacer 760 00:44:37,989 --> 00:44:43,650 c2.soyeco 761 00:44:43,650 --> 00:44:49,869 y esto me hace 762 00:44:49,869 --> 00:44:52,090 nada 763 00:44:52,090 --> 00:44:54,769 porque este es un boolean 764 00:44:54,769 --> 00:44:56,329 pero no le he dicho que lo escriba 765 00:44:56,329 --> 00:44:58,250 pero por ejemplo podría decir 766 00:44:58,250 --> 00:44:59,429 si 767 00:44:59,429 --> 00:45:02,110 c2 es soy eco 768 00:45:02,110 --> 00:45:04,050 entonces 769 00:45:04,050 --> 00:45:04,789 se escribe 770 00:45:04,789 --> 00:45:10,059 c2 771 00:45:10,059 --> 00:45:15,300 c2.matricula 772 00:45:15,300 --> 00:45:16,820 más 773 00:45:16,820 --> 00:45:19,139 es viejo 774 00:45:19,139 --> 00:45:22,320 no, es nuevo 775 00:45:22,320 --> 00:45:34,590 Else es viejo 776 00:45:34,590 --> 00:45:36,329 ¿Qué estoy haciendo? 777 00:45:36,769 --> 00:45:38,250 Estoy llamando el método soyEcho 778 00:45:38,250 --> 00:45:40,349 Sobre el objeto C2 779 00:45:40,349 --> 00:45:42,289 Si me devuelve true 780 00:45:42,289 --> 00:45:44,230 Entonces escribiré esto 781 00:45:44,230 --> 00:45:46,230 Si me devuelve false 782 00:45:46,230 --> 00:45:47,349 Escribiré esto 783 00:45:47,349 --> 00:45:48,590 ¿Y qué escribo? 784 00:45:49,329 --> 00:45:50,789 ¿Notáis algo raro aquí? 785 00:45:53,079 --> 00:45:54,159 Con respecto a aquí 786 00:45:54,159 --> 00:46:01,880 Cuando yo tengo paréntesis 787 00:46:01,880 --> 00:46:03,360 Estoy llamando un método 788 00:46:03,360 --> 00:46:06,940 Cuando yo no tengo paréntesis 789 00:46:06,940 --> 00:46:08,360 Estoy accediendo 790 00:46:08,360 --> 00:46:10,780 Al atributo 791 00:46:10,780 --> 00:46:11,940 De este objeto 792 00:46:11,940 --> 00:46:25,230 Entonces aquí una pregunta 793 00:46:25,230 --> 00:46:26,110 Para vosotros 794 00:46:26,110 --> 00:46:28,989 Que pondré aquí abajo 795 00:46:28,989 --> 00:46:33,030 String 796 00:46:33,030 --> 00:46:35,269 S es igual a 797 00:46:35,269 --> 00:46:35,590 Hola 798 00:46:35,590 --> 00:46:39,800 Int 799 00:46:39,800 --> 00:46:43,639 Gatos es igual 800 00:46:43,639 --> 00:46:45,500 A new 801 00:46:45,500 --> 00:46:47,239 Int 802 00:46:47,239 --> 00:46:48,239 De 10 803 00:46:48,239 --> 00:46:56,909 S.Length 804 00:46:56,909 --> 00:47:03,269 Sí, son gatos.length 805 00:47:03,269 --> 00:47:09,300 ¿Qué me podéis decir ahora de estos length? 806 00:47:13,949 --> 00:47:15,429 Este es un método de qué? 807 00:47:19,579 --> 00:47:20,519 La clase string 808 00:47:20,519 --> 00:47:22,739 Es decir, que dentro de la clase string 809 00:47:22,739 --> 00:47:25,019 Habrá un método declarado 810 00:47:25,019 --> 00:47:28,340 Que será public int 811 00:47:28,340 --> 00:47:30,079 Porque devuelve un entero 812 00:47:30,079 --> 00:47:33,239 Length, que no pilla parámetros 813 00:47:33,239 --> 00:47:36,760 Que hará cosas y te devuelve un numerito 814 00:47:36,760 --> 00:47:37,820 ¿Y esto? 815 00:47:41,789 --> 00:47:52,050 Esto es que este señor es un objeto y tiene dentro un atributo definido como length que yo voy a acceder. 816 00:47:53,250 --> 00:47:58,309 Es decir, que esto es una llamada de método y esto es un acceso a una variable. 817 00:47:59,110 --> 00:48:01,090 Son dos cosas completamente distintas. 818 00:48:03,380 --> 00:48:04,500 ¿Y ahora sabéis por qué? 819 00:48:11,719 --> 00:48:15,619 Es la razón de por qué no estáis durmiendo bien en este mes, mes y medio. 820 00:48:15,619 --> 00:48:19,420 Decíais más, length, length, más...