1 00:00:00,000 --> 00:00:03,899 vale, pues que bien esto ya 2 00:00:03,899 --> 00:00:05,599 problema solucionado 3 00:00:05,599 --> 00:00:07,820 se lo pasamos por parámetro y estupendo 4 00:00:07,820 --> 00:00:08,759 pero 5 00:00:08,759 --> 00:00:10,500 nunca se hace así 6 00:00:10,500 --> 00:00:13,259 claro, pero y lo que habéis pensado 7 00:00:13,259 --> 00:00:14,980 eso es oro, puro 8 00:00:14,980 --> 00:00:17,820 es que eso es lo que tenéis que hacer, os van a pagar por pensar 9 00:00:17,820 --> 00:00:21,579 si, si, si, de verdad 10 00:00:21,579 --> 00:00:24,460 ¿por qué? 11 00:00:25,460 --> 00:00:26,940 pues porque y si 12 00:00:26,940 --> 00:00:29,640 el método tiene que acceder a un montón de cosas 13 00:00:29,640 --> 00:00:31,719 no le puedo pasar 14 00:00:31,719 --> 00:00:33,780 hay mil cosas, es un poco engorroso 15 00:00:33,780 --> 00:00:37,119 estoy hablando en términos de 16 00:00:37,119 --> 00:00:38,679 escritura de código 17 00:00:38,679 --> 00:00:41,539 no es que sea computacionalmente 18 00:00:41,539 --> 00:00:43,200 poco eficiente, es estupendísimo 19 00:00:43,200 --> 00:00:46,140 lo que pasa es que es un rollo, constructores enormes 20 00:00:46,140 --> 00:00:47,380 o hacer un montón de set 21 00:00:47,380 --> 00:00:48,299 pues es un rollo 22 00:00:48,299 --> 00:00:51,899 cuando ya tenemos un montón de componentes 23 00:00:51,899 --> 00:00:52,859 que queremos pasarle 24 00:00:52,859 --> 00:00:55,079 ¿qué podemos hacer? 25 00:00:56,079 --> 00:00:57,460 pues, mira 26 00:00:57,460 --> 00:01:00,039 vamos a inventarnos, según se han ido inventando 27 00:01:00,039 --> 00:01:01,799 cosas en Java, según iban haciendo falta 28 00:01:01,799 --> 00:01:03,460 pues se han ido inventando cosas en Java 29 00:01:03,460 --> 00:01:05,780 pues de repente se inventa una cosa 30 00:01:05,780 --> 00:01:07,099 que son 31 00:01:07,099 --> 00:01:08,859 las clases internas 32 00:01:08,859 --> 00:01:10,980 que se usan muchísimo 33 00:01:10,980 --> 00:01:13,819 que es, vamos a ver, mi problema 34 00:01:13,819 --> 00:01:14,640 es que esta clase 35 00:01:14,640 --> 00:01:17,260 no puede acceder 36 00:01:17,260 --> 00:01:19,799 a nada de esta otra, porque son 37 00:01:19,799 --> 00:01:21,579 clases separadas, entonces ya sabemos 38 00:01:21,579 --> 00:01:23,140 ¿verdad? eso lo tenemos clarísimo 39 00:01:23,140 --> 00:01:25,379 dos clases separadas para acceder 40 00:01:25,379 --> 00:01:27,620 una a lo de la otra 41 00:01:27,620 --> 00:01:29,260 se lo tenemos que pasar por parámetro 42 00:01:29,260 --> 00:01:31,400 a sus métodos, que es lo que hemos hecho 43 00:01:31,400 --> 00:01:33,620 si lo hemos pasado por los set o por constructor 44 00:01:33,620 --> 00:01:35,000 por parámetro, no hay otro 45 00:01:35,000 --> 00:01:37,120 vale, pero 46 00:01:37,120 --> 00:01:38,980 como eso es un rollo, pues 47 00:01:38,980 --> 00:01:41,260 llega en lumbreras 48 00:01:41,260 --> 00:01:42,120 y dice 49 00:01:42,120 --> 00:01:44,819 pues meto una dentro de otra 50 00:01:44,819 --> 00:01:47,420 y magnífico, si meto esta dentro 51 00:01:47,420 --> 00:01:49,439 de esta otra, pues hala, ya puede 52 00:01:49,439 --> 00:01:51,439 acceder esta a lo de aquí, y no tengo ni que pasárselo 53 00:01:52,239 --> 00:01:53,219 pues efectivamente 54 00:01:53,219 --> 00:01:55,500 ese parche, lo llamo parche 55 00:01:55,500 --> 00:01:57,079 pero en realidad es un recurso de programación 56 00:01:57,079 --> 00:01:58,939 muy usado, pues ya está 57 00:01:58,939 --> 00:02:01,299 y ya lo podemos usar 58 00:02:01,299 --> 00:02:03,200 que es meter una clase 59 00:02:03,200 --> 00:02:04,000 dentro de la otra 60 00:02:04,000 --> 00:02:07,180 pero eso no es algo que uno haga 61 00:02:07,180 --> 00:02:08,300 porque le da la gana 62 00:02:08,300 --> 00:02:11,400 tengo aquí un montón de clases en mi aplicación 63 00:02:11,400 --> 00:02:13,120 mis 300, 500 clases 64 00:02:13,120 --> 00:02:15,439 y esta quiero que acceda a esta otra 65 00:02:15,439 --> 00:02:17,280 y a propiedades 66 00:02:17,280 --> 00:02:19,180 de aquí y no me apetece pasárselas 67 00:02:19,180 --> 00:02:20,740 por parámetro porque entonces tengo que ir a 68 00:02:20,740 --> 00:02:22,460 propiedades, meto esta dentro de la otra 69 00:02:22,460 --> 00:02:23,879 A ver, ojo, no 70 00:02:23,879 --> 00:02:25,580 Esas cosas hay que hacerlas con criterio 71 00:02:25,580 --> 00:02:28,340 Entonces, lo de clases internas 72 00:02:28,340 --> 00:02:29,439 Que es lo que estoy diciendo 73 00:02:29,439 --> 00:02:30,939 Que es que una clase está dentro de la otra 74 00:02:30,939 --> 00:02:34,400 Tiene que hacerse cuando a nivel de diseño 75 00:02:34,400 --> 00:02:36,139 Tiene sentido 76 00:02:36,139 --> 00:02:37,840 ¿Vale? Tiene sentido 77 00:02:37,840 --> 00:02:40,219 Y a nivel de diseño tiene sentido 78 00:02:40,219 --> 00:02:42,379 Cuando la clase que yo meto dentro de otra 79 00:02:42,379 --> 00:02:44,280 Solo tiene sentido 80 00:02:44,280 --> 00:02:45,900 Que existan objetos de ella 81 00:02:45,900 --> 00:02:48,240 Si existe la otra clase 82 00:02:48,240 --> 00:02:49,840 ¿Vale? 83 00:02:49,900 --> 00:02:51,020 Entonces vamos a 84 00:02:51,020 --> 00:02:54,840 Tres minutos para que entendáis esto 85 00:02:54,840 --> 00:02:57,960 Porque es importante 86 00:02:57,960 --> 00:03:00,039 Tienes que ser los mejores 87 00:03:00,039 --> 00:03:02,000 No hacer las cosas así a lo tonto 88 00:03:02,000 --> 00:03:03,919 Porque vais a tener de rodaje un año 89 00:03:03,919 --> 00:03:04,419 Un año y medio 90 00:03:04,419 --> 00:03:08,219 Si sois los buenos, los que sabéis pensar 91 00:03:08,219 --> 00:03:09,280 Los que lo entendéis todo 92 00:03:09,280 --> 00:03:11,900 Pues tendréis rodaje toda vuestra vida 93 00:03:11,900 --> 00:03:19,020 Vale 94 00:03:19,020 --> 00:03:41,039 Y ahora es cuando Juan saca su boli 95 00:03:41,039 --> 00:03:42,340 Y su papel 96 00:03:42,340 --> 00:03:44,419 que eso es lo que tendría que hacer todo el mundo 97 00:03:44,419 --> 00:03:46,180 porque lo que escribes 98 00:03:46,180 --> 00:03:48,639 normalmente es lo que mejor 99 00:03:48,639 --> 00:03:49,719 interiorizas 100 00:03:49,719 --> 00:03:54,800 porque se piensa con la mano 101 00:03:54,800 --> 00:03:55,639 bastante a menudo 102 00:03:55,639 --> 00:03:58,560 no solo piensa el cerebro 103 00:03:58,560 --> 00:03:59,539 piensa el cerebro y la mano 104 00:03:59,539 --> 00:04:17,240 desde que nació 105 00:04:17,240 --> 00:04:20,600 desde que le enseñaron a coger o hacer 106 00:04:20,600 --> 00:04:22,079 las barritas 107 00:04:22,079 --> 00:04:23,560 y aprendió a hacer las barritas y dijo ya está 108 00:04:23,560 --> 00:04:26,259 ojo que yo he hecho 109 00:04:26,259 --> 00:04:28,720 para mi ortografía 110 00:04:28,720 --> 00:04:30,180 hasta que los abandonaste 111 00:04:30,180 --> 00:04:31,819 pero no mejoraron para la caligrafía 112 00:04:31,819 --> 00:04:32,339 son malísimos 113 00:04:32,339 --> 00:04:33,680 bueno 114 00:04:33,680 --> 00:04:37,060 bueno a ver 115 00:04:37,060 --> 00:04:39,720 clases internas 116 00:04:39,720 --> 00:04:40,220 que son 117 00:04:40,220 --> 00:04:43,180 vamos a dejarlas entendidas 118 00:04:43,180 --> 00:04:45,379 y así las podremos aplicar y utilizar 119 00:04:45,379 --> 00:04:46,319 siempre que queramos 120 00:04:46,319 --> 00:04:52,279 Y este es uno de los contextos en los cuales viene bien usado, el contexto de las interfaces gráficas. 121 00:04:52,899 --> 00:04:57,319 Pero no solo, no solo, hay muchos otros. 122 00:04:58,279 --> 00:05:12,730 Bueno, pues cuando yo os dije en su momento que una clase tiene dentro dos partes, 123 00:05:12,730 --> 00:05:15,009 que son las propiedades 124 00:05:15,009 --> 00:05:17,629 que caracterizan 125 00:05:17,629 --> 00:05:19,769 los objetos 126 00:05:19,769 --> 00:05:21,610 que se van a instanciar de esa clase 127 00:05:21,610 --> 00:05:22,990 esa es una de las partes, las propiedades 128 00:05:22,990 --> 00:05:25,509 lo va a caracterizar el color, la altura 129 00:05:25,509 --> 00:05:27,810 no sé cuánto, y los métodos 130 00:05:27,810 --> 00:05:29,870 que es 131 00:05:29,870 --> 00:05:31,790 el código 132 00:05:31,790 --> 00:05:33,410 que esos objetos van a poder 133 00:05:33,410 --> 00:05:34,769 ejecutar 134 00:05:34,769 --> 00:05:37,769 su comportamiento, lo que van a poder hacer 135 00:05:37,769 --> 00:05:39,730 y eso que van a poder hacer pues va a modificar 136 00:05:39,730 --> 00:05:41,350 sus propiedades o lo que haga falta 137 00:05:41,350 --> 00:05:43,329 pues siempre os dije 138 00:05:43,329 --> 00:05:45,569 bueno, os miento un poco pero bueno 139 00:05:45,569 --> 00:05:47,910 os voy mintiendo poco a poco, pues sí efectivamente 140 00:05:47,910 --> 00:05:50,170 os mentí un poco 141 00:05:50,170 --> 00:05:52,350 porque no es sólo eso 142 00:05:52,350 --> 00:05:53,649 lo que puede tener dentro de una clase 143 00:05:53,649 --> 00:05:55,310 aparte de propiedades y métodos 144 00:05:55,310 --> 00:05:58,149 hay otras dos cosas más que puede tener, alguna ya la hemos mencionado 145 00:05:58,149 --> 00:05:59,129 también es lo de estática 146 00:05:59,129 --> 00:06:02,230 la mencionamos un poco por encima pero bueno 147 00:06:02,230 --> 00:06:04,449 como si la hagáis por olvidada 148 00:06:04,449 --> 00:06:06,389 no pasa nada, ya surgirá en proyectos 149 00:06:06,389 --> 00:06:07,649 del año que viene, ya son más grandes 150 00:06:07,649 --> 00:06:10,529 la otra cosa que puede tener 151 00:06:10,529 --> 00:06:26,360 dentro de una clase, es el bloque static, que es esto, static y entre llaves, un código que afecta solamente a propiedades estáticas de la clase 152 00:06:26,360 --> 00:06:33,720 y sería como una especie de inicialización de la parte estática de la clase, una especie de inicialización de las propiedades estáticas 153 00:06:33,720 --> 00:06:40,620 y se puede ejecutar también código, sentencias de código, pero que toquen solo variables estáticas de la clase, 154 00:06:40,620 --> 00:06:46,519 Es como una especie de inicialización de lo que se llama el contexto estático de la clase, 155 00:06:46,680 --> 00:06:49,100 que es las propiedades estáticas que tiene esta clase, 156 00:06:49,959 --> 00:06:54,819 que son esas propiedades que están ahí, que pueden existir aunque no exista ningún objeto de la clase. 157 00:06:56,000 --> 00:07:00,420 Esas son las propiedades estáticas, las que pueden existir aunque no exista ningún objeto de la clase. 158 00:07:01,319 --> 00:07:04,660 Por esas propiedades se puede hacer un bloque estático para inicializarlas, 159 00:07:04,720 --> 00:07:05,939 para hacer comprobaciones con ellas, 160 00:07:05,939 --> 00:07:08,500 y ese bloque estático se va a ejecutar 161 00:07:08,500 --> 00:07:10,120 una única vez 162 00:07:10,120 --> 00:07:11,939 la primera vez 163 00:07:11,939 --> 00:07:14,379 que se hace referencia a esa clase 164 00:07:14,379 --> 00:07:16,399 o que se crea un objeto 165 00:07:16,399 --> 00:07:18,279 de esa clase, que es en el momento 166 00:07:18,279 --> 00:07:20,060 en el que aparecen las variables estáticas, ¿verdad? 167 00:07:20,779 --> 00:07:22,259 En el momento en el que aparecen las variables 168 00:07:22,259 --> 00:07:23,540 estáticas de una clase, 169 00:07:24,459 --> 00:07:26,279 ¿cuándo aparecen? La primera vez 170 00:07:26,279 --> 00:07:27,000 que en un main 171 00:07:27,000 --> 00:07:30,339 se llaman a esas variables con clase 172 00:07:30,339 --> 00:07:32,540 a punto no sé qué o se crea un objeto, 173 00:07:32,680 --> 00:07:34,259 la primera vez que se hace referencia 174 00:07:34,259 --> 00:07:36,399 a una clase, esa primera vez 175 00:07:36,399 --> 00:07:38,259 es la que aparece en todas las variables 176 00:07:38,259 --> 00:07:38,819 estáticas. 177 00:07:39,699 --> 00:07:42,100 Y se quedan ahí. Y ya van a existir para siempre. 178 00:07:42,860 --> 00:07:43,019 ¿Vale? 179 00:07:43,740 --> 00:07:45,600 Bueno, pues esa vez, esa primera vez 180 00:07:45,600 --> 00:07:47,579 en la que se quedan todas las propiedades estáticas, 181 00:07:48,160 --> 00:07:50,139 también se ejecuta este código si lo hubiera. 182 00:07:50,639 --> 00:07:52,300 ¿Vale? Pues esta es la primera 183 00:07:52,300 --> 00:07:54,420 cosa que digo, que también 184 00:07:54,420 --> 00:07:56,399 puede estar aparte de propiedades y métodos. 185 00:07:57,560 --> 00:07:58,360 Y también puede 186 00:07:58,360 --> 00:07:59,980 haber otra cosa, que son 187 00:07:59,980 --> 00:08:01,740 clases internas. 188 00:08:01,740 --> 00:08:04,519 Puede haber una clase dentro de otra 189 00:08:04,519 --> 00:08:08,259 Es decir, dentro de esta clase A 190 00:08:08,259 --> 00:08:12,540 Puedo declarar yo dentro directamente una clase B 191 00:08:12,540 --> 00:08:21,490 Así alegremente 192 00:08:21,490 --> 00:08:23,310 Con sus propiedades 193 00:08:23,310 --> 00:08:26,730 Por ejemplo, esta podría tener a lo mejor una propiedad 194 00:08:26,730 --> 00:08:30,629 Y para distanciar un objeto de esa clase B 195 00:08:30,629 --> 00:08:32,590 Tendría que distanciar primero uno de clase A 196 00:08:32,590 --> 00:08:35,850 si 197 00:08:35,850 --> 00:08:39,049 lo que pasa es que las clases internas 198 00:08:39,049 --> 00:08:41,029 pueden ser, pueden admitir dentro 199 00:08:41,029 --> 00:08:43,029 una cosa 200 00:08:43,029 --> 00:08:43,529 que es 201 00:08:43,529 --> 00:08:47,009 la clase interna puede tener dentro el modificador 202 00:08:47,009 --> 00:08:47,450 estático 203 00:08:47,450 --> 00:08:51,009 entonces puedes instanciar un objeto 204 00:08:51,009 --> 00:08:51,809 clase interna 205 00:08:51,809 --> 00:08:54,429 si no existe uno de la de arriba 206 00:08:54,429 --> 00:08:56,269 en este modificador, lo digo para no 207 00:08:56,269 --> 00:08:58,029 responderte así 208 00:08:58,029 --> 00:09:00,649 sin mentirte, pero no quiero 209 00:09:00,649 --> 00:09:01,710 meterme en eso, dime 210 00:09:01,710 --> 00:09:04,710 Sí, a ver 211 00:09:04,710 --> 00:09:06,909 Primero, esto se declararía así 212 00:09:06,909 --> 00:09:09,409 La clase va directamente dentro de la otra 213 00:09:09,409 --> 00:09:11,169 No va dentro de un método ni de nada 214 00:09:11,169 --> 00:09:12,570 Va directamente dentro de la otra 215 00:09:12,570 --> 00:09:14,210 ¿Vale? Esta otra clase 216 00:09:14,210 --> 00:09:16,970 Y ahora, ¿qué implicaciones tiene esto? 217 00:09:17,669 --> 00:09:19,710 Bueno, esto es otra clase distinta 218 00:09:19,710 --> 00:09:21,230 Es otra clase diferente 219 00:09:21,230 --> 00:09:23,710 ¿Vale? Entonces, con un código así 220 00:09:23,710 --> 00:09:24,889 Tendríamos dos clases 221 00:09:24,889 --> 00:09:26,870 La clase está de aquí 222 00:09:26,870 --> 00:09:29,049 Y la otra clase 223 00:09:29,049 --> 00:09:31,529 Cuyo nombre se convierte en compuesto 224 00:09:31,529 --> 00:09:34,490 la otra clase se llama en realidad 225 00:09:34,490 --> 00:09:37,629 así 226 00:09:37,629 --> 00:09:40,490 es decir, su nombre cambia 227 00:09:40,490 --> 00:09:42,590 de hecho, cuando compilamos 228 00:09:42,590 --> 00:09:45,009 si compilamos esto y vemos lo que ha generado 229 00:09:45,009 --> 00:09:47,190 pues vemos que ha generado 230 00:09:47,190 --> 00:09:47,990 una clase A 231 00:09:47,990 --> 00:09:50,409 y la otra la ha llamado así 232 00:09:50,409 --> 00:09:54,090 tendríamos la A.class 233 00:09:54,090 --> 00:09:57,029 y esta.class 234 00:09:57,029 --> 00:09:57,830 porque el punto 235 00:09:57,830 --> 00:09:59,649 como nombre de fichero 236 00:09:59,649 --> 00:10:00,590 vale 237 00:10:00,590 --> 00:10:03,750 ¿vale? entonces, para empezar el nombre es distinto 238 00:10:03,750 --> 00:10:05,710 el nombre no es directamente, el nombre cambia 239 00:10:05,710 --> 00:10:07,789 pero bueno, eso es lo de menos, y ahora, ¿qué implicaciones 240 00:10:07,789 --> 00:10:09,129 tiene a nivel de código? 241 00:10:10,289 --> 00:10:11,649 pues que resulta 242 00:10:11,649 --> 00:10:13,789 que esta clase que está aquí dentro 243 00:10:13,789 --> 00:10:15,470 puede acceder 244 00:10:15,470 --> 00:10:17,309 si le da la gana, vamos a imaginarnos que 245 00:10:17,309 --> 00:10:19,049 yo aquí voy a hacer un método 246 00:10:19,049 --> 00:10:20,850 mostrar 247 00:10:20,850 --> 00:10:25,110 pues esta clase interna de aquí 248 00:10:25,110 --> 00:10:27,850 puede acceder 249 00:10:27,850 --> 00:10:29,370 por supuesto a sus propiedades 250 00:10:29,370 --> 00:10:31,190 como siempre, claro, eso no cambia 251 00:10:31,190 --> 00:10:42,690 pero es que también puede, si le da la gana, acceder a las propiedades de la clase que la contiene. 252 00:10:42,690 --> 00:10:44,870 Es decir, esto tiene sentido. 253 00:10:46,809 --> 00:10:55,370 Sin embargo, desde la clase externa no se puede acceder a las propiedades de la interna, no se puede, ¿vale? 254 00:10:56,250 --> 00:10:59,690 Pero desde la clase interna sí se puede acceder a las de la externa. 255 00:10:59,690 --> 00:11:02,490 entonces, espera, déjame un poco terminar 256 00:11:02,490 --> 00:11:03,950 para que a lo mejor se resuelvan las dudas 257 00:11:03,950 --> 00:11:05,330 después de acabar 258 00:11:05,330 --> 00:11:08,429 entonces, ahora, claro, esto es una cosa rara 259 00:11:08,429 --> 00:11:09,529 me diréis, vale 260 00:11:09,529 --> 00:11:12,850 pero si me dices que son clases separadas 261 00:11:12,850 --> 00:11:15,029 y que por tanto yo puedo hacer objetos separados 262 00:11:15,029 --> 00:11:16,629 si yo instancio 263 00:11:16,629 --> 00:11:18,429 un objeto de clase B 264 00:11:18,429 --> 00:11:20,990 y llamo luego a mostrar 265 00:11:20,990 --> 00:11:23,049 la Y está claro 266 00:11:23,049 --> 00:11:25,110 la que se haya creado en el constructor 267 00:11:25,110 --> 00:11:27,129 la que sea, pero que X muestra 268 00:11:27,129 --> 00:11:29,590 claro, que X muestra 269 00:11:29,590 --> 00:11:34,230 claro, es que para yo poder crear un objeto de esta clase 270 00:11:34,230 --> 00:11:37,789 tiene que existir un objeto de esta 271 00:11:37,789 --> 00:11:41,929 y yo cuando lo instancie, lo instanciaré 272 00:11:41,929 --> 00:11:46,049 asociado a ese objeto, haré algo como esto 273 00:11:46,049 --> 00:11:52,029 yo tengo el objeto A 274 00:11:52,029 --> 00:11:53,490 perdón 275 00:11:53,490 --> 00:12:00,029 algo así 276 00:12:00,029 --> 00:12:04,659 yo tengo un objeto A 277 00:12:04,659 --> 00:12:05,740 vale, pues muy bien 278 00:12:05,740 --> 00:12:07,039 new clase A 279 00:12:07,039 --> 00:12:12,259 y ahora como ya tengo un objeto A 280 00:12:12,259 --> 00:12:14,059 con sus propiedades dentro llenas 281 00:12:14,059 --> 00:12:15,879 las que sean como ya lo tengo 282 00:12:15,879 --> 00:12:17,759 ya podría crear 283 00:12:17,759 --> 00:12:20,519 un objeto de la otra clase 284 00:12:20,519 --> 00:12:24,259 pero asociado a este 285 00:12:24,259 --> 00:12:29,210 bueno, espera, lo estoy llamando A B 286 00:12:29,210 --> 00:12:31,669 sería clase A, clase B 287 00:12:31,669 --> 00:12:40,799 entonces 288 00:12:40,799 --> 00:12:44,200 asociado a este objeto 289 00:12:44,200 --> 00:12:46,700 se hace el nio 290 00:12:46,700 --> 00:12:51,299 algo así, ahora lo comprobamos 291 00:12:51,299 --> 00:12:53,519 porque no recuerdo muy bien si aquí también es obligatorio 292 00:12:53,519 --> 00:12:54,899 poner clase A, yo creo que no 293 00:12:54,899 --> 00:12:56,779 pero lo que me importa es la idea 294 00:12:56,779 --> 00:12:58,100 ¿vale? 295 00:12:58,919 --> 00:13:01,700 entonces, para instanciar 296 00:13:01,700 --> 00:13:03,799 un objeto de la clase de dentro 297 00:13:03,799 --> 00:13:05,100 para instanciarlo 298 00:13:05,100 --> 00:13:07,120 tiene que existir 299 00:13:07,120 --> 00:13:08,899 un objeto de la de arriba 300 00:13:08,899 --> 00:13:11,100 ¿vale? tiene que existir 301 00:13:11,100 --> 00:13:13,659 ¿cuando te está después de placear es un punto? 302 00:13:14,000 --> 00:13:14,940 sí, sí, sí, es un punto 303 00:13:14,940 --> 00:13:17,519 ¿vale? tiene que existir 304 00:13:17,519 --> 00:13:19,899 entonces ahora ya esa primera duda está resuelta 305 00:13:19,899 --> 00:13:22,259 si yo llamo a los métodos de B 306 00:13:22,259 --> 00:13:23,960 los métodos de B 307 00:13:23,960 --> 00:13:25,940 trabajan con las propiedades 308 00:13:25,940 --> 00:13:28,259 estas y con las del objeto 309 00:13:28,259 --> 00:13:30,240 este, trabajan con las de este 310 00:13:30,240 --> 00:13:31,299 sin ningún problema 311 00:13:31,299 --> 00:13:34,059 sin embargo tiene sentido que desde la 312 00:13:34,059 --> 00:13:36,100 externa yo no pueda hacer hasta propiedades 313 00:13:36,100 --> 00:13:38,419 porque este objeto puede existir 314 00:13:38,419 --> 00:13:39,919 por libre independientemente 315 00:13:39,919 --> 00:13:42,379 entonces si yo desde aquí pudiera acceder 316 00:13:42,379 --> 00:13:44,340 a las propiedades de aquí y creo este 317 00:13:44,340 --> 00:13:46,340 objeto por libre, cuando 318 00:13:46,340 --> 00:13:48,220 accedo a esas propiedades, es que no están 319 00:13:48,220 --> 00:13:50,120 ni creadas, ¿qué valor tendría? 320 00:13:50,320 --> 00:13:51,500 no se puede, ¿vale? 321 00:13:54,629 --> 00:13:56,710 es que no, puede existir 322 00:13:56,710 --> 00:13:58,149 un objeto de esta clase 323 00:13:58,149 --> 00:14:00,769 sin que estas propiedades existan, no existen 324 00:14:00,769 --> 00:14:02,710 ni siquiera, entonces no tiene sentido que nos dejen 325 00:14:02,710 --> 00:14:03,850 por código acceder a ellas 326 00:14:03,850 --> 00:14:06,830 pero cuando estos objetos existan 327 00:14:06,830 --> 00:14:11,370 Esta tiene que existir, con lo cual tiene sentido que me dejen hacer estas propiedades. 328 00:14:12,309 --> 00:14:18,230 Luego esas son las implicaciones que tiene en cuanto a desarrollo, a escritura de código. 329 00:14:19,690 --> 00:14:23,289 Y entonces uno podría decir, bueno, ¿y con esto qué gano? 330 00:14:23,789 --> 00:14:34,169 Primero, gano una cosa que es la más importante, que es hacer diseños que de nuevo se correspondan muchísimo mejor con la realidad que estoy representando. 331 00:14:34,169 --> 00:14:36,629 porque si yo hago un diseño de clases 332 00:14:36,629 --> 00:14:38,570 que responde a la realidad de lo que estoy 333 00:14:38,570 --> 00:14:40,870 gestionando seguramente esa aplicación 334 00:14:40,870 --> 00:14:42,629 me va a ser mucho más fácil 335 00:14:42,629 --> 00:14:44,529 luego irla manteniendo, irla ampliando 336 00:14:44,529 --> 00:14:46,730 cosas porque estoy precisamente 337 00:14:46,730 --> 00:14:48,149 representando la situación real 338 00:14:48,149 --> 00:14:50,929 con lo cual cualquier cosa que se incorpora a la realidad 339 00:14:50,929 --> 00:14:52,649 se va a incorporar 340 00:14:52,649 --> 00:14:54,529 a mi aplicación de forma natural porque mi 341 00:14:54,529 --> 00:14:56,610 aplicación es directamente un reflejo 342 00:14:56,610 --> 00:14:58,669 de la realidad, no entonces por 343 00:14:58,669 --> 00:15:00,230 ejemplo una situación en la cual 344 00:15:00,230 --> 00:15:01,529 tenemos 345 00:15:01,529 --> 00:15:04,429 alumnos y matrículas 346 00:15:04,429 --> 00:15:07,129 una aplicación que gestiona alumnos, matrículas 347 00:15:07,129 --> 00:15:09,129 una secretaría, vale, pues yo puedo 348 00:15:09,129 --> 00:15:10,929 hacer mis clases alumno 349 00:15:10,929 --> 00:15:12,909 con mis objetos alumno, mis clases 350 00:15:12,909 --> 00:15:15,090 matrícula con mis objetos matrícula 351 00:15:15,090 --> 00:15:17,090 vale, luego poner pues dentro 352 00:15:17,090 --> 00:15:18,889 de la clase alumno un objeto 353 00:15:18,889 --> 00:15:20,990 matrícula que sea su matrícula, puedo hacer ese 354 00:15:20,990 --> 00:15:23,110 diseño, o también podríamos decir 355 00:15:23,110 --> 00:15:25,009 vale, solamente 356 00:15:25,009 --> 00:15:26,889 tiene sentido que existan objetos 357 00:15:26,889 --> 00:15:28,190 matrícula, solo 358 00:15:28,190 --> 00:15:29,990 si son de un alumno 359 00:15:29,990 --> 00:15:32,190 mi aplicación no quiere 360 00:15:32,190 --> 00:15:34,570 que exista un objeto matrícula por libre 361 00:15:34,570 --> 00:15:36,509 no puede, no debería 362 00:15:36,509 --> 00:15:39,230 yo poder hacer un new matrícula 363 00:15:39,230 --> 00:15:40,909 sin más y que exista un objeto matrícula 364 00:15:40,909 --> 00:15:41,350 por libre 365 00:15:41,350 --> 00:15:44,090 ¿vale? entonces 366 00:15:44,090 --> 00:15:46,269 ¿cómo puedo a lo mejor reflejar eso? 367 00:15:46,830 --> 00:15:48,690 vale, pues que la clase matrícula 368 00:15:48,690 --> 00:15:50,169 la hago interna 369 00:15:50,169 --> 00:15:51,870 a la clase alumno 370 00:15:51,870 --> 00:15:53,509 ¿vale? 371 00:15:53,509 --> 00:15:55,149 si, o sea, clase alumno tiene 372 00:15:55,149 --> 00:15:56,649 de propiedad una matrícula 373 00:15:56,649 --> 00:15:57,850 ya, pero es que ya no la tendría 374 00:15:57,850 --> 00:16:00,730 claro, ya no la tendría 375 00:16:00,730 --> 00:16:02,490 entonces, tú puedes 376 00:16:02,490 --> 00:16:04,009 programar de esta manera 377 00:16:04,009 --> 00:16:06,850 tú tienes tu clase alumno con sus propiedades 378 00:16:06,850 --> 00:16:08,690 tiene una clase interna matrícula 379 00:16:08,690 --> 00:16:10,129 y entonces tú te creas tu alumno 380 00:16:10,129 --> 00:16:12,470 y cuando te creas una matrícula 381 00:16:12,470 --> 00:16:14,970 obligatoriamente esa matrícula ya va asociada a un alumno 382 00:16:14,970 --> 00:16:16,970 obligatoriamente, es que no hay tu tía 383 00:16:16,970 --> 00:16:18,090 tienes que crearla aparte 384 00:16:18,090 --> 00:16:20,269 tienes que estar creando un objeto alumno 385 00:16:20,269 --> 00:16:21,789 y luego crear el objeto matrícula 386 00:16:21,789 --> 00:16:23,210 ya, pero si están por separado igual 387 00:16:23,210 --> 00:16:26,029 creas el objeto alumno, matrícula, luego tendrías que hacer el set 388 00:16:26,029 --> 00:16:27,230 para asociarlos 389 00:16:27,230 --> 00:16:29,769 entonces aquí 390 00:16:29,769 --> 00:16:32,169 pues primero garantizas que nadie 391 00:16:32,169 --> 00:16:34,350 va a instanciar una matrícula que se va a quedar suelta 392 00:16:34,350 --> 00:16:35,929 por libre ahí en la aplicación, muerta 393 00:16:35,929 --> 00:16:38,169 no, cualquier objeto matrícula 394 00:16:38,169 --> 00:16:40,129 es que va a estar asociado a un alumno 395 00:16:40,129 --> 00:16:42,149 sí o sí, no necesitas luego hacer 396 00:16:42,149 --> 00:16:43,950 el set para asociárselo ni nada 397 00:16:43,950 --> 00:16:46,169 porque ese alumno ha tenido que 398 00:16:46,169 --> 00:16:48,289 existir para yo poder crear una matrícula 399 00:16:48,289 --> 00:16:50,210 eso es la primera 400 00:16:50,210 --> 00:16:51,190 cosa, y la segunda 401 00:16:51,190 --> 00:16:54,190 desde la clase matrícula yo ya 402 00:16:54,190 --> 00:16:55,649 puedo acceder tranquilamente 403 00:16:55,649 --> 00:16:57,490 A todas las propiedades del alumno 404 00:16:57,490 --> 00:16:59,850 Puedo hacer dentro del método matrícula 405 00:16:59,850 --> 00:17:01,350 Mostrar datos de no sé qué 406 00:17:01,350 --> 00:17:04,509 Y en ese mismo método de matrícula 407 00:17:04,509 --> 00:17:05,470 Pues puedo yo ya 408 00:17:05,470 --> 00:17:07,569 Usar las propiedades de la matrícula 409 00:17:07,569 --> 00:17:09,490 Y las del alumno, tranquilamente 410 00:17:09,490 --> 00:17:12,049 Pero en el objeto alumno no puedes acceder a tu matrícula 411 00:17:12,049 --> 00:17:13,170 No, ya, pero 412 00:17:13,170 --> 00:17:15,009 Sí, pero depende de lo que tengas que hacer 413 00:17:15,009 --> 00:17:17,309 Pero desde aquí, si la gestión es 414 00:17:17,309 --> 00:17:18,890 Pues hacer no sé qué con las matrículas 415 00:17:18,890 --> 00:17:20,549 Tú tienes aquí los métodos 416 00:17:20,549 --> 00:17:22,589 Y estos métodos ya te pueden hacer a lo de arriba 417 00:17:22,589 --> 00:17:25,170 Que de nuevo depende, o sea, que es una herramienta más de diseño 418 00:17:25,170 --> 00:17:41,910 No es que sea la herramienta que haya que utilizar, es un recurso más, un recurso más para diseñar, hacer una clase interna que te puede venir muy bien muchas veces, sobre todo la gran ventaja es que te facilita el paso de parámetros, porque aquí no hay parámetros que pasar. 419 00:17:41,910 --> 00:17:53,690 Si tú en matrícula quieres poner un método que necesite los datos del alumno al que está asociado esa matrícula, tienes que hacerlo muy retorcido, lo tienes que pasar el objeto alumno por parámetro. 420 00:17:54,369 --> 00:18:02,529 Eso luego se te puede complicar un poquito más, ahora llamar a ese método, pues tienes que coger el alumno al que esa matrícula estaba asociado, pasárselo. 421 00:18:02,529 --> 00:18:07,369 Entonces, en función de la situación y de lo que estés resolviendo, esto puede ser mucho más cómodo. 422 00:18:07,450 --> 00:18:11,529 Aquí metes el método y ese método tranquilamente lo tiene todo a su disposición. 423 00:18:12,329 --> 00:18:14,230 Toda la matrícula y todo el alumno. 424 00:18:14,349 --> 00:18:19,630 ¿Y hay algún método que me muestre las subclases, o sea, las clases que están dentro de una clase? 425 00:18:20,109 --> 00:18:20,289 No. 426 00:18:21,390 --> 00:18:23,650 ¿Por qué no puedo saber las clases que están dentro de una clase? 427 00:18:24,529 --> 00:18:26,690 Porque eres el desarrollador, que has hecho ese diseño. 428 00:18:27,190 --> 00:18:27,769 Sí, pero no. 429 00:18:29,490 --> 00:18:30,769 Claro, eres el... 430 00:18:30,769 --> 00:18:31,670 Sí, sí, lo he hecho yo, claro. 431 00:18:32,529 --> 00:18:35,150 claro, pero es que si no lo has hecho tú 432 00:18:35,150 --> 00:18:36,890 ese diseño 433 00:18:36,890 --> 00:18:38,670 estará con una API 434 00:18:38,670 --> 00:18:41,130 me refiero, estará con un uso, el que lo ha hecho 435 00:18:41,130 --> 00:18:42,970 te dirá, estos son los métodos que tú puedes usar 436 00:18:42,970 --> 00:18:45,049 y tú usarás esos métodos, como lo haya hecho 437 00:18:45,049 --> 00:18:45,970 por dentro te da igual 438 00:18:45,970 --> 00:18:47,930 dime 439 00:18:47,930 --> 00:18:50,089 si yo cambiase 440 00:18:50,089 --> 00:18:52,589 X de la clase A 441 00:18:52,589 --> 00:18:54,329 en la clase B 442 00:18:54,329 --> 00:18:55,529 si metieras esto aquí 443 00:18:55,529 --> 00:18:58,089 no, si yo en caso 444 00:18:58,089 --> 00:19:00,509 que tiene X y lo cambiase en la clase B 445 00:19:00,509 --> 00:19:03,529 Sí, sí, sí, claro 446 00:19:03,529 --> 00:19:05,630 Claro, o sea, tú ves de aquí 447 00:19:05,630 --> 00:19:07,009 Si a X le das 7 448 00:19:07,009 --> 00:19:09,609 El X de A se cambia 449 00:19:09,609 --> 00:19:11,829 ¿Vale? Con lo cual esto a veces 450 00:19:11,829 --> 00:19:13,609 Se confunde con la herencia 451 00:19:13,609 --> 00:19:14,950 No tiene nada que ver 452 00:19:14,950 --> 00:19:17,789 Porque tú cuando una clase le da de otra 453 00:19:17,789 --> 00:19:19,869 Tienes dos clases diferentes 454 00:19:19,869 --> 00:19:21,569 Pero los objetos 455 00:19:21,569 --> 00:19:23,390 Son completamente independientes 456 00:19:23,390 --> 00:19:25,470 Entonces cuando una clase le da de otra 457 00:19:25,470 --> 00:19:27,789 Si esta clase hiciera un extens de clase A 458 00:19:27,789 --> 00:19:30,029 Efectivamente tiene un X dentro 459 00:19:30,029 --> 00:19:32,529 al que acceder, pero ese X es el suyo propio 460 00:19:32,529 --> 00:19:34,230 y cuando instanciamos 461 00:19:34,230 --> 00:19:36,230 un objeto de clase B y accedemos a X 462 00:19:36,230 --> 00:19:38,329 accedemos a su propia copia 463 00:19:38,329 --> 00:19:38,769 de X 464 00:19:38,769 --> 00:19:40,390 y clase A tendrá 465 00:19:40,390 --> 00:19:43,630 si la pasas por parámetro como a cualquier otra 466 00:19:43,630 --> 00:19:46,109 pero si esta hereda de esta 467 00:19:46,109 --> 00:19:47,710 este tiene su propio X 468 00:19:47,710 --> 00:19:49,769 y clase A tiene su propio X 469 00:19:49,769 --> 00:19:51,130 cuando tú instancias uno de B 470 00:19:51,130 --> 00:19:54,369 tiene su copia de X y uno de A tiene su copia de X 471 00:19:54,369 --> 00:19:55,670 sin embargo 472 00:19:55,670 --> 00:19:58,009 cuando no estás heredando 473 00:19:58,009 --> 00:19:59,390 sino que es una clase interna 474 00:19:59,390 --> 00:20:01,589 esta tiene 475 00:20:01,589 --> 00:20:04,289 el X que es el único que existe 476 00:20:04,289 --> 00:20:05,910 compartido por los dos 477 00:20:05,910 --> 00:20:08,289 por este objeto al que también puede acceder 478 00:20:08,289 --> 00:20:10,210 este X no es que sea 479 00:20:10,210 --> 00:20:11,309 una propiedad de clase B 480 00:20:11,309 --> 00:20:14,109 es de A, lo que pasa es que 481 00:20:14,109 --> 00:20:16,269 esta tiene acceso directo a ella 482 00:20:16,269 --> 00:20:18,170 para mostrarlo, para modificarlo 483 00:20:18,170 --> 00:20:19,849 para lo que sea, es una propiedad 484 00:20:19,849 --> 00:20:22,349 a la que puede acceder, o sea esto no es una herencia 485 00:20:22,349 --> 00:20:24,549 entonces esto no responde 486 00:20:24,549 --> 00:20:26,569 a clase B 487 00:20:26,569 --> 00:20:27,829 es clase A, sino 488 00:20:27,829 --> 00:20:30,549 responde a la idea de tiene un 489 00:20:30,549 --> 00:20:32,930 clase A tiene un clase B 490 00:20:32,930 --> 00:20:34,730 un alumno tiene 491 00:20:34,730 --> 00:20:36,410 una matrícula, ¿vale? 492 00:20:36,430 --> 00:20:38,210 nunca haríamos matrícula extensa alumno 493 00:20:38,210 --> 00:20:40,750 porque una matrícula no es 494 00:20:40,750 --> 00:20:41,630 un alumno 495 00:20:41,630 --> 00:20:44,529 pero sí lo haríamos como clase interna 496 00:20:44,529 --> 00:20:46,970 porque un alumno sí tiene una matrícula 497 00:20:46,970 --> 00:20:47,990 entonces 498 00:20:47,990 --> 00:20:50,250 dos opciones, como hemos dicho 499 00:20:50,250 --> 00:20:52,450 o bien que clase A tenga un objeto 500 00:20:52,450 --> 00:20:54,869 matrícula dentro y que luego lo instanciemos 501 00:20:54,869 --> 00:20:56,309 o lo pasemos con el set, lo que sea 502 00:20:56,309 --> 00:20:57,849 o como clase interna. 503 00:20:57,950 --> 00:21:00,089 Como clase interna tenemos la seguridad 504 00:21:00,089 --> 00:21:02,289 de que no va a haber objetos matrícula en la aplicación 505 00:21:02,289 --> 00:21:04,490 sueltos. Y luego está otra ventaja. 506 00:21:04,890 --> 00:21:05,950 Y es otro recurso más. 507 00:21:06,250 --> 00:21:07,509 A mí me marea la idea 508 00:21:07,509 --> 00:21:10,049 de no poder acceder 509 00:21:10,049 --> 00:21:11,710 como propiedad de clase A a los 510 00:21:11,710 --> 00:21:14,049 alumnos y matrículas. 511 00:21:14,589 --> 00:21:15,930 Las matrículas de todos los alumnos, 512 00:21:16,029 --> 00:21:18,349 como las tienes que recopilar, pues lo que sea. 513 00:21:18,650 --> 00:21:18,910 Claro. 514 00:21:19,609 --> 00:21:21,089 Pero no puedes acceder directamente 515 00:21:21,089 --> 00:21:21,670 a través de los alumnos. 516 00:21:21,690 --> 00:21:24,190 Claro, es que depende de lo que quieras hacer, pues no lo harías así. 517 00:21:24,190 --> 00:21:26,250 claro, esto en realidad lo de las clases 518 00:21:26,250 --> 00:21:28,410 internas se usa para cosas muy concretas 519 00:21:28,410 --> 00:21:30,230 no es que se use todo el rato 520 00:21:30,230 --> 00:21:32,109 no, para cosas muy concretas, para una aplicación 521 00:21:32,109 --> 00:21:34,130 en general, tú tienes tus colecciones de datos 522 00:21:34,130 --> 00:21:35,670 efectivamente, como hemos 523 00:21:35,670 --> 00:21:38,170 hecho más hasta ahora, ¿vale? pero es 524 00:21:38,170 --> 00:21:39,930 un recurso más que a veces en algún 525 00:21:39,930 --> 00:21:41,930 contexto pequeño tiene sentido 526 00:21:41,930 --> 00:21:44,109 y en este de la interfaz 527 00:21:44,109 --> 00:21:45,890 gráfica es justo lo que necesitamos 528 00:21:45,890 --> 00:21:47,730 los listeners 529 00:21:47,730 --> 00:21:49,950 solo tiene sentido que haya listeners 530 00:21:49,950 --> 00:21:51,509 si hay un frame 531 00:21:51,509 --> 00:21:54,390 si no, ¿para qué quiere uno un listener suelto? 532 00:21:54,589 --> 00:21:55,829 solo tiene sentido si hay un frame 533 00:21:55,829 --> 00:21:59,150 luego que los listeners sean clases internas 534 00:21:59,150 --> 00:22:00,710 porque una clase 535 00:22:00,710 --> 00:22:02,950 puede tener todas las internas que hagan falta 536 00:22:02,950 --> 00:22:05,109 no tiene por qué tener una, todas las que hagan falta 537 00:22:05,109 --> 00:22:06,670 bueno pues 538 00:22:06,670 --> 00:22:08,630 que los listeners sean clases internas 539 00:22:08,630 --> 00:22:10,849 y al ser clases internas 540 00:22:10,849 --> 00:22:12,829 ya pueden acceder a todo 541 00:22:12,829 --> 00:22:13,690 lo que hay en el frame 542 00:22:13,690 --> 00:22:16,630 entonces lo único que tenemos que hacer es sacarlo 543 00:22:16,630 --> 00:22:18,809 de variable local de constructor a propiedad 544 00:22:18,809 --> 00:22:19,789 de clase del frame 545 00:22:19,789 --> 00:22:21,529 Y ya está solucionado 546 00:22:21,529 --> 00:22:22,769 ¿Vale? 547 00:22:23,509 --> 00:22:24,230 Entonces 548 00:22:24,230 --> 00:22:27,210 Nos queda algo así 549 00:22:27,210 --> 00:22:34,730 ¿Quién se ha dormido? 550 00:22:36,309 --> 00:22:37,630 ¿Tú te habías dormido? 551 00:22:38,410 --> 00:22:39,509 Un poco, ¿no? 552 00:22:42,630 --> 00:22:44,230 Vale, pues entonces 553 00:22:44,230 --> 00:22:48,789 Mi ventana 554 00:22:48,789 --> 00:22:50,690 Versión 2 555 00:22:50,690 --> 00:22:57,069 ¿Por qué lloras? 556 00:22:57,069 --> 00:22:59,170 Tú estás aquí por gusto, se supone 557 00:22:59,170 --> 00:23:05,759 Venga, pues vamos a hacernos una copia 558 00:23:05,759 --> 00:23:06,779 De mi ventana 559 00:23:06,779 --> 00:23:12,000 Hago copy-paste 560 00:23:12,000 --> 00:23:13,960 Mi ventana 2 561 00:23:13,960 --> 00:23:19,420 De verdad, tenéis que graduaros la pista 562 00:23:29,220 --> 00:23:52,319 no, no, no 563 00:23:52,319 --> 00:23:54,519 te puede ayudar para actividades creativas 564 00:23:54,519 --> 00:23:55,220 claro, lo que he dicho 565 00:23:55,220 --> 00:23:57,380 en la facultad de filosofía 566 00:23:57,380 --> 00:23:59,920 claro, pero aquí no 567 00:23:59,920 --> 00:24:01,559 ni el pegamento tampoco 568 00:24:01,559 --> 00:24:03,140 tampoco 569 00:24:03,140 --> 00:24:11,680 Un polvorón 570 00:24:11,680 --> 00:24:12,920 Eso igual sí, hombre 571 00:24:12,920 --> 00:24:15,359 Uf, eso menos todavía 572 00:24:15,359 --> 00:24:18,319 No, no, no, no, por Dios 573 00:24:18,319 --> 00:24:20,380 Venga, a ver 574 00:24:20,380 --> 00:24:22,319 He hecho una copia de mi ventana 575 00:24:22,319 --> 00:24:23,180 Mi ventana 2 576 00:24:23,180 --> 00:24:25,740 ¿Qué es esta? Mi ventana 2 577 00:24:25,740 --> 00:24:26,299 Haced un 578 00:24:26,299 --> 00:24:29,259 A ver, pero haced simple 579 00:24:29,259 --> 00:24:31,599 Mi ventana, le ponéis aquí, botón derecho, copy 580 00:24:31,599 --> 00:24:33,319 Hacéis en el main paste 581 00:24:33,319 --> 00:24:34,839 Y ya te lo ofrece con nombre 2 582 00:24:34,839 --> 00:24:37,319 Vale, mi ventana 2 583 00:24:37,319 --> 00:24:42,710 Pues mi ventana 2 584 00:24:42,710 --> 00:24:44,569 Vamos a hacer el listener 585 00:24:44,569 --> 00:24:46,789 Vamos a meterlo dentro, como clase interna 586 00:24:46,789 --> 00:24:49,390 Pues vamos a copiar 587 00:24:49,390 --> 00:24:50,849 El escucha saludar este 588 00:24:50,849 --> 00:24:55,049 Bueno 589 00:24:55,049 --> 00:24:55,930 Vamos a 590 00:24:55,930 --> 00:24:58,029 El action performance solo 591 00:24:58,029 --> 00:25:14,380 Vale, y copio el action performance 592 00:25:14,380 --> 00:25:17,259 Enterito 593 00:25:17,259 --> 00:25:21,910 que tenía aquí 594 00:25:21,910 --> 00:25:28,960 todos los atajos 595 00:25:28,960 --> 00:25:31,380 que sean con este dedo, eso sí me los puedes decir 596 00:25:31,380 --> 00:25:33,420 pero los que impliquen dos dedos 597 00:25:33,420 --> 00:25:33,920 no 598 00:25:33,920 --> 00:25:38,880 ¿se te atasca la mano? 599 00:25:40,220 --> 00:25:41,380 es que no, es que nací 600 00:25:41,380 --> 00:25:42,460 esta articulación 601 00:25:42,460 --> 00:25:44,980 bueno, a ver, nací 602 00:25:44,980 --> 00:25:47,240 imagino que nacería con ella suelta 603 00:25:47,240 --> 00:25:50,660 y en algún momento se soldó, pero se soldó girada 604 00:25:50,660 --> 00:25:51,140 entonces 605 00:25:51,140 --> 00:25:54,220 claro, o sea, a ver, yo puedo hacer así 606 00:25:54,220 --> 00:25:56,279 pero para hacer así tengo que subir mucho esto 607 00:25:56,279 --> 00:25:56,920 entonces 608 00:25:56,920 --> 00:25:58,640 Es muy incómodo 609 00:25:58,640 --> 00:26:01,339 O sea que tú puedes hacer esto y puedes hacer esto 610 00:26:01,339 --> 00:26:02,079 ¿Verdad? Con las dos 611 00:26:02,079 --> 00:26:03,900 Pues yo con esta llego hasta aquí 612 00:26:03,900 --> 00:26:04,779 Ya no llego hasta aquí 613 00:26:04,779 --> 00:26:12,079 Como pianista habría tenido un futuro 614 00:26:12,079 --> 00:26:22,180 Pues lo toqué algunos años 615 00:26:22,180 --> 00:26:24,460 Poder se puede 616 00:26:24,460 --> 00:26:26,539 Vale, pues de mi ventana a dos 617 00:26:26,539 --> 00:26:28,859 Entonces ya lo hemos puesto como clase interna 618 00:26:28,859 --> 00:26:32,480 Implementation Listener 619 00:26:32,480 --> 00:26:33,220 El import 620 00:26:33,220 --> 00:26:37,380 Sí, pero precisamente los acordes 621 00:26:37,380 --> 00:26:37,880 O sea, es que 622 00:26:37,880 --> 00:26:38,779 Claro 623 00:26:38,779 --> 00:26:43,960 Vale, pues entonces 624 00:26:43,960 --> 00:26:46,059 ¿Qué? 625 00:26:50,279 --> 00:26:52,240 Pero a ver, que tenéis el cuello muy ágil 626 00:26:52,240 --> 00:26:52,700 Vosotras 627 00:26:52,700 --> 00:26:56,140 Tenéis que agradecerme 628 00:26:56,140 --> 00:26:57,420 Las sesiones que os estoy dando 629 00:26:57,420 --> 00:27:01,019 A ver, echa un copia y pega 630 00:27:01,019 --> 00:27:06,940 A ver, clase escucha saludar 631 00:27:06,940 --> 00:27:08,599 Copiáis y pegáis 632 00:27:08,599 --> 00:27:10,619 Pero dejáis sobre la acción performe dentro 633 00:27:10,619 --> 00:27:11,180 ¿Vale? 634 00:27:13,039 --> 00:27:14,119 Claro, entonces 635 00:27:14,119 --> 00:27:16,880 El escucha saludar, ¿qué necesitaba? 636 00:27:17,099 --> 00:27:18,619 Necesitaba acceder a texto 637 00:27:18,619 --> 00:27:19,740 A saluda y a despide 638 00:27:19,740 --> 00:27:22,279 Ya está, pues puede acceder directamente 639 00:27:22,279 --> 00:27:24,220 Como es interna, la hemos hecho interna 640 00:27:24,220 --> 00:27:26,839 Puede acceder a todas las propiedades de la clase 641 00:27:26,839 --> 00:27:29,140 tranquilamente, puede acceder a todas ellas 642 00:27:29,140 --> 00:27:31,099 claro, pero es que 643 00:27:31,099 --> 00:27:33,460 no son propiedades de la clase, son locales 644 00:27:33,460 --> 00:27:35,200 a construir interfaz, no pasa nada 645 00:27:35,200 --> 00:27:37,400 vamos a hacerlas como propiedades de la clase 646 00:27:37,400 --> 00:27:40,519 ala 647 00:27:40,519 --> 00:27:43,279 vamos a hacerlas como propiedades 648 00:27:43,279 --> 00:27:45,160 de la clase, no pasa nada 649 00:27:45,160 --> 00:27:46,519 las hago como propiedades del frame 650 00:27:46,519 --> 00:27:48,619 ya son propiedades de la clase 651 00:27:48,619 --> 00:27:50,339 entonces 652 00:27:50,339 --> 00:27:52,140 ahora ya 653 00:27:52,140 --> 00:27:55,500 puede acceder, veis, tranquilamente 654 00:27:55,500 --> 00:27:56,720 a ellas como clase interna 655 00:27:56,720 --> 00:28:06,339 Pues ya está 656 00:28:06,339 --> 00:28:08,380 La clase interna accede a ello 657 00:28:08,380 --> 00:28:13,609 Entonces ahora ya 658 00:28:13,609 --> 00:28:16,049 El objeto lo tengo que crear igualmente 659 00:28:16,049 --> 00:28:17,910 Bueno, el constructor ya le quito todo esto 660 00:28:17,910 --> 00:28:18,269 Claro 661 00:28:18,269 --> 00:28:21,289 Lo sella, ni falta que me hacen 662 00:28:21,289 --> 00:28:22,230 Ni las quiero 663 00:28:22,230 --> 00:28:24,289 Vale 664 00:28:24,289 --> 00:28:30,450 Vale 665 00:28:30,450 --> 00:28:37,710 no, no he hecho nada 666 00:28:37,710 --> 00:28:39,369 os lo he dejado igual, he sacado 667 00:28:39,369 --> 00:28:41,809 los componentes los he sacado 668 00:28:41,809 --> 00:28:43,309 fuera, como variables de clase 669 00:28:43,309 --> 00:28:44,130 están fuera 670 00:28:44,130 --> 00:28:47,450 el constructor, mi ventana, construí 671 00:28:47,450 --> 00:28:49,410 interfaz, ahora ya como los he sacado fuera 672 00:28:49,410 --> 00:28:51,390 ya no los declara dentro, porque ya están 673 00:28:51,390 --> 00:28:52,750 fuera los propiedades de la clase 674 00:28:52,750 --> 00:28:55,049 he instanciado 675 00:28:55,049 --> 00:28:56,450 mi listener 676 00:28:56,450 --> 00:28:59,529 que es una clase interna, no pasa 677 00:28:59,529 --> 00:29:01,609 nada, la instancia igualmente, como veis 678 00:29:01,609 --> 00:29:03,390 no le hace falta que le ponga su nombre 679 00:29:03,390 --> 00:29:05,390 doble, su nombre porque 680 00:29:05,390 --> 00:29:07,529 como la estamos accediendo 681 00:29:07,529 --> 00:29:09,470 desde la propia clase, no hace 682 00:29:09,470 --> 00:29:10,809 falta ponérselo, vale 683 00:29:10,809 --> 00:29:13,650 entonces instanciamos la clase, que es interna 684 00:29:13,650 --> 00:29:15,809 la instanciamos y se la añadimos 685 00:29:15,809 --> 00:29:17,589 y se acabó y ya está 686 00:29:17,589 --> 00:29:21,690 y listo, y ahora ya en la clase interna 687 00:29:21,690 --> 00:29:23,650 pues, un segundo 688 00:29:23,650 --> 00:29:25,329 la clase interna es igual que la que era 689 00:29:25,329 --> 00:29:27,809 pero ya me olvido del paso de parámetros 690 00:29:27,809 --> 00:29:30,109 no hace falta, porque ya accede directamente 691 00:29:30,109 --> 00:29:31,549 a todo lo de la interfaz. 692 00:29:33,210 --> 00:29:34,029 ¿Hasta dónde? 693 00:29:38,369 --> 00:29:41,789 Que le estaba pasando, 694 00:29:41,950 --> 00:29:43,529 como era copia y pega la versión anterior, 695 00:29:43,670 --> 00:29:45,730 le estaba pasando cosas al constructor, se lo he quitado. 696 00:29:46,069 --> 00:29:46,450 Nada más. 697 00:29:54,490 --> 00:29:55,410 Claro, porque 698 00:29:55,410 --> 00:29:57,569 este escucha saludar ya no tiene 699 00:29:57,569 --> 00:29:59,509 propiedades ni tiene nada porque ya accede 700 00:29:59,509 --> 00:30:01,809 directamente a las de la clase 701 00:30:01,809 --> 00:30:03,789 que la contiene, que es el frame, esa es la ventaja 702 00:30:03,789 --> 00:30:04,529 de que sea interna 703 00:30:04,529 --> 00:30:07,490 pero 704 00:30:07,490 --> 00:30:09,849 entre hoy 705 00:30:09,849 --> 00:30:11,710 y mañana, aparte de subir 706 00:30:11,710 --> 00:30:13,390 todos los proyectos 707 00:30:13,390 --> 00:30:15,450 al tema, organizados y eso 708 00:30:15,450 --> 00:30:16,589 y las grabaciones, pues 709 00:30:16,589 --> 00:30:19,710 lo tendréis todo esto, lo tendréis todo ahí subido 710 00:30:31,640 --> 00:30:37,240 en cuanto lo hagáis 3 o 4 veces 711 00:30:37,240 --> 00:30:37,599 ya está 712 00:30:37,599 --> 00:30:43,380 ya, pero es que lo de subir y bajar 713 00:30:43,380 --> 00:30:43,740 es relativo 714 00:30:43,740 --> 00:30:49,400 que subo, que bajo 715 00:30:49,400 --> 00:30:50,480 el ratón, la pantalla 716 00:31:09,670 --> 00:31:46,529 Bueno, pues a ver 717 00:31:46,529 --> 00:31:57,230 Vale, de todas maneras 718 00:31:57,230 --> 00:31:59,730 Vais a hacer ahora 719 00:31:59,730 --> 00:32:01,150 Una parecida 720 00:32:01,150 --> 00:32:03,329 Para que a todo el mundo ya le quede claro 721 00:32:03,329 --> 00:32:04,710 Como se colocan las cosas y demás 722 00:32:04,710 --> 00:32:07,230 Antes de pasar a lo siguiente 723 00:32:07,230 --> 00:32:09,470 Claro, a ver 724 00:32:09,470 --> 00:32:10,970 Estamos arrancando un mundo 725 00:32:10,970 --> 00:32:13,230 De posibilidades enormes 726 00:32:13,230 --> 00:32:14,829 Que tenemos que explorar 727 00:32:14,829 --> 00:32:17,329 vale, bueno pues entonces 728 00:32:17,329 --> 00:32:19,150 solo de cara a que todo el mundo esté organizado 729 00:32:19,150 --> 00:32:21,130 situado y sepa construir 730 00:32:21,130 --> 00:32:21,990 lo básico 731 00:32:21,990 --> 00:32:24,430 pues a ver 732 00:32:24,430 --> 00:32:26,170 haced una interfaz vosotros 733 00:32:26,170 --> 00:32:29,190 en la que haya que pedir 734 00:32:29,190 --> 00:32:30,509 pida un nombre 735 00:32:30,509 --> 00:32:32,509 o sea un área de texto para pedir un nombre 736 00:32:32,509 --> 00:32:34,450 se escribe un nombre 737 00:32:34,450 --> 00:32:36,349 y cuando se le dé al enter 738 00:32:36,349 --> 00:32:38,289 pues diga tu nombre 739 00:32:38,289 --> 00:32:40,089 tiene 27 letras 740 00:32:40,089 --> 00:32:42,230 por ejemplo, vale ya está 741 00:32:42,230 --> 00:32:44,049 entonces lo único que os digo es 742 00:32:44,049 --> 00:32:47,250 el componente 743 00:32:47,250 --> 00:32:48,890 para 744 00:32:48,890 --> 00:32:50,710 poner texto 745 00:32:50,710 --> 00:32:51,589 se llama text fill 746 00:32:51,589 --> 00:32:53,789 se llama j text fill 747 00:32:53,789 --> 00:32:55,670 ese es el componente para meter texto 748 00:32:55,670 --> 00:32:58,650 y el evento por defecto del text fill 749 00:32:58,650 --> 00:32:59,670 es darle al enter 750 00:32:59,670 --> 00:33:01,829 cuando estás situado en él y has escrito le das a enter 751 00:33:01,829 --> 00:33:06,500 lo tendrás que 752 00:33:06,500 --> 00:33:08,339 se guarda dentro del objeto text fill 753 00:33:08,339 --> 00:33:09,880 tú sácalo con el método que 754 00:33:09,880 --> 00:33:12,000 text fill 755 00:33:12,000 --> 00:33:14,119 es el objeto que tiene dentro de todo 756 00:33:14,119 --> 00:33:16,259 el texto que tú hayas puesto, su tamaño 757 00:33:16,259 --> 00:33:16,839 tiene un montón 758 00:33:16,839 --> 00:33:18,759 ¿lo sacas de él? 759 00:33:19,859 --> 00:33:21,980 igual, si el Jbutton tiene un gettest 760 00:33:21,980 --> 00:33:24,240 ¿cómo no va a tener el textfield 761 00:33:24,240 --> 00:33:24,779 un gettest? 762 00:33:26,200 --> 00:33:26,680 claro 763 00:33:26,680 --> 00:33:29,059 ¿puedo repetir el enunciado? 764 00:33:30,299 --> 00:33:30,720 sí 765 00:33:30,720 --> 00:33:33,359 enunciado 766 00:33:33,359 --> 00:33:35,420 a ver 767 00:33:35,420 --> 00:33:37,900 ¿necesito un ratón? 768 00:33:37,900 --> 00:33:39,380 sí, sí 769 00:33:39,380 --> 00:33:40,420 ¿necesito café? 770 00:33:41,579 --> 00:33:42,099 enunciado 771 00:33:42,099 --> 00:33:46,160 Enunciado va a ser la 772 00:33:46,160 --> 00:33:47,579 Segunda GUI 773 00:33:54,200 --> 00:33:55,339 ¿Qué quieres que te haga? 774 00:33:55,539 --> 00:33:55,700 Si no 775 00:33:55,700 --> 00:33:57,539 A ver 776 00:33:57,539 --> 00:34:05,740 Efectivamente 777 00:34:05,740 --> 00:34:06,599 Por eso os traigo 778 00:34:06,599 --> 00:34:07,180 Vale 779 00:34:07,180 --> 00:34:09,940 Pues me vais a hacer 780 00:34:09,940 --> 00:34:11,579 A ver voy a hacer aquí una clasecita 781 00:34:11,579 --> 00:34:13,380 solo para poner el texto 782 00:34:13,380 --> 00:34:17,460 lo que me vais a hacer es 783 00:34:17,460 --> 00:34:18,019 esto 784 00:34:18,019 --> 00:34:25,719 aplicación con una 785 00:34:25,719 --> 00:34:27,460 interfaz gráfica 786 00:34:28,579 --> 00:34:29,780 gráfica 787 00:34:29,780 --> 00:34:29,960 no 788 00:34:29,960 --> 00:34:33,420 gráfica, a ver, ¿quién tenía que 789 00:34:33,420 --> 00:34:33,760 fumar? 790 00:34:34,420 --> 00:34:35,860 que permita 791 00:34:35,860 --> 00:34:39,679 introducir 792 00:34:39,679 --> 00:34:41,340 tu nombre 793 00:34:41,340 --> 00:34:41,840 y 794 00:34:41,840 --> 00:34:46,679 Y te indique 795 00:34:46,679 --> 00:34:51,639 Cuántas letras tiene 796 00:34:51,639 --> 00:34:56,380 Área de texto 797 00:34:56,380 --> 00:34:58,139 Metes el nombre, enter 798 00:34:58,139 --> 00:34:59,360 Tu nombre tiene no sé cuántas 799 00:34:59,360 --> 00:35:01,880 Ya está 800 00:35:01,880 --> 00:35:05,880 Y te indica