1 00:00:00,000 --> 00:00:15,490 Venga, a ver, pues el otro día, a partir de esta aplicación que corregimos, de esta de cuenta, ¿verdad?, de esta de aquí, bueno, pues aunque parecía una chorrada, pues sacamos varias cosas. 2 00:00:16,250 --> 00:00:27,129 Entre ellas incorporamos el concepto de método constructor, ¿verdad?, que es un método especial. 3 00:00:27,129 --> 00:00:40,469 No funciona como el resto de métodos que siguen todos la misma regla. El nombre que ahí me dé la gana, lo más explicativo posible y con minúscula esto por cuestión de estilo, no por obligación. 4 00:00:40,469 --> 00:00:43,170 parámetros que usa el método 5 00:00:43,170 --> 00:00:44,969 que es toda esa información 6 00:00:44,969 --> 00:00:47,009 que el método necesita para trabajar 7 00:00:47,009 --> 00:00:48,850 que no está dentro 8 00:00:48,850 --> 00:00:50,409 del objeto que lo llama 9 00:00:50,409 --> 00:00:52,429 porque lo que está dentro del objeto que lo llama 10 00:00:52,429 --> 00:00:54,789 está ahí y puede acceder 11 00:00:54,789 --> 00:00:55,450 directamente 12 00:00:55,450 --> 00:00:58,570 y luego ya el método 13 00:00:58,570 --> 00:01:00,070 opera, hace lo que le da la gana 14 00:01:00,070 --> 00:01:02,250 con esos parámetros que ha recibido de fuera 15 00:01:02,250 --> 00:01:04,209 que tendrán la información adicional de fuera 16 00:01:04,209 --> 00:01:06,109 y con 17 00:01:06,109 --> 00:01:08,150 las propiedades del objeto que lo llama 18 00:01:08,150 --> 00:01:09,370 opera, hace lo que sea 19 00:01:09,370 --> 00:01:11,650 y eso puede ser 20 00:01:11,650 --> 00:01:13,870 mostrar por consola, conectarse a una base de datos 21 00:01:13,870 --> 00:01:15,709 cualquier cosa y puede ser que 22 00:01:15,709 --> 00:01:16,250 además 23 00:01:16,250 --> 00:01:19,950 entregue, mande 24 00:01:19,950 --> 00:01:21,409 al exterior, lance al exterior 25 00:01:21,409 --> 00:01:22,590 un único valor 26 00:01:22,590 --> 00:01:25,489 si eso ocurre tendrá que haber un retune 27 00:01:25,489 --> 00:01:27,230 con ese valor que lanza al exterior 28 00:01:27,230 --> 00:01:29,750 y aquí el tipo de dato 29 00:01:29,750 --> 00:01:31,730 del valor lanzado 30 00:01:31,730 --> 00:01:33,549 si no lanza nada al exterior 31 00:01:33,549 --> 00:01:33,989 un void 32 00:01:33,989 --> 00:01:37,590 y luego ya como llamamos a ese método 33 00:01:37,590 --> 00:01:53,510 Pues ya lo sabemos, ¿cómo llevamos a ese método? Pues con su nombre y pasándole tantos parámetros ya concretos, valores concretos, en este caso el valor concreto leído por consola, pasándole tantos parámetros como necesite. 34 00:01:53,510 --> 00:01:55,609 y luego el valor de retorno 35 00:01:55,609 --> 00:01:56,450 si lo tuviera 36 00:01:56,450 --> 00:01:58,769 lo uso yo para lo que quiera 37 00:01:58,769 --> 00:02:00,670 para asignarle una variable 38 00:02:00,670 --> 00:02:03,189 en este caso igual de para asignarle una variable 39 00:02:03,189 --> 00:02:04,769 lo uso para concatenar 40 00:02:04,769 --> 00:02:06,810 para lo que quiera ese valor de retorno 41 00:02:06,810 --> 00:02:09,430 si lo quiero usar lo uso para lo que quiera 42 00:02:09,430 --> 00:02:10,509 y si no lo quiero usar 43 00:02:10,509 --> 00:02:13,150 llamo al método sin más y lo tiro a la basura 44 00:02:13,150 --> 00:02:13,750 no pasa nada 45 00:02:13,750 --> 00:02:18,129 entonces el constructor 46 00:02:18,129 --> 00:02:20,030 era un método especial porque 47 00:02:20,030 --> 00:02:23,150 su nombre es obligatoriamente 48 00:02:23,150 --> 00:02:24,270 el de la clase 49 00:02:24,270 --> 00:02:27,509 mayúscula incluida 50 00:02:27,509 --> 00:02:30,289 no devuelve nada 51 00:02:30,289 --> 00:02:32,289 pero ni siquiera se especifica con void 52 00:02:32,289 --> 00:02:33,469 no devuelve nada 53 00:02:33,469 --> 00:02:36,110 recibe los parámetros que uno quiera 54 00:02:36,110 --> 00:02:37,689 y puede tener varias versiones 55 00:02:37,689 --> 00:02:39,550 esta versión sin parámetros 56 00:02:39,550 --> 00:02:41,530 esta que tiene dos 57 00:02:41,530 --> 00:02:43,650 puede tener todas las versiones que quiera 58 00:02:43,650 --> 00:02:45,050 y 59 00:02:45,050 --> 00:02:47,389 cuando se llama este método 60 00:02:47,389 --> 00:02:49,889 se le llama en un momento concreto 61 00:02:49,889 --> 00:02:51,849 y solo en ese, no se le puede llamar 62 00:02:51,849 --> 00:02:53,750 cuando uno quiera en cualquier otro momento, no solo en ese 63 00:02:53,750 --> 00:02:56,750 se le llama automáticamente 64 00:02:56,750 --> 00:02:57,909 la máquina virtual lo llama 65 00:02:57,909 --> 00:03:00,330 cuando se crea el objeto con el new 66 00:03:00,330 --> 00:03:01,770 ahí se le llama 67 00:03:01,770 --> 00:03:03,990 ¿y qué parámetros recibe el método? 68 00:03:04,129 --> 00:03:05,530 los que vayan en los paréntesis 69 00:03:05,530 --> 00:03:07,250 entonces 70 00:03:07,250 --> 00:03:09,550 si yo estoy llamando a este 71 00:03:09,550 --> 00:03:11,949 como este recibe un string 72 00:03:11,949 --> 00:03:13,090 y un double 73 00:03:13,090 --> 00:03:15,469 pues la máquina virtual no tiene duda 74 00:03:15,469 --> 00:03:16,889 de que al que se está llamando 75 00:03:16,889 --> 00:03:18,949 es al que recibe un string y un double 76 00:03:18,949 --> 00:03:19,689 no tiene duda 77 00:03:19,689 --> 00:03:22,610 pero si estoy llamando a este 78 00:03:22,610 --> 00:03:25,009 que no recibe nada, entonces no tiene duda 79 00:03:25,009 --> 00:03:26,889 del que tiene que invocar es este 80 00:03:26,889 --> 00:03:28,750 porque no recibe nada 81 00:03:28,750 --> 00:03:31,050 que yo llamo 82 00:03:31,050 --> 00:03:31,509 a uno 83 00:03:31,509 --> 00:03:33,349 aquí 84 00:03:33,349 --> 00:03:36,969 llamo a uno con otro parámetro 85 00:03:36,969 --> 00:03:38,849 además, con el número 7 86 00:03:38,849 --> 00:03:40,889 el compilador me dirá, oye 87 00:03:40,889 --> 00:03:42,849 no hay ningún constructor 88 00:03:42,849 --> 00:03:44,990 preparado para recibir 89 00:03:44,990 --> 00:03:46,949 un string, un double 90 00:03:46,949 --> 00:03:48,169 y un int, no lo hay 91 00:03:48,169 --> 00:03:50,169 no lo hay, entonces me da error 92 00:03:50,169 --> 00:03:51,930 y efectivamente no lo hay 93 00:03:51,930 --> 00:03:54,169 yo solo tengo constructores preparados 94 00:03:54,169 --> 00:03:54,870 para recibir 95 00:03:54,870 --> 00:03:56,409 nada 96 00:03:56,409 --> 00:04:00,150 o para recibir un string 97 00:04:00,150 --> 00:04:02,229 o un double, solo tengo constructores preparados para eso 98 00:04:02,229 --> 00:04:03,909 entonces solamente 99 00:04:03,909 --> 00:04:05,889 puedo instanciar objetos 100 00:04:05,889 --> 00:04:08,349 o con esta variante o con esta otra 101 00:04:08,349 --> 00:04:09,289 no con otras 102 00:04:09,289 --> 00:04:11,389 ¿vale? 103 00:04:12,629 --> 00:04:13,270 bueno 104 00:04:13,270 --> 00:04:16,110 ¿está claro? ¿hasta ahí? 105 00:04:16,589 --> 00:04:16,769 sí 106 00:04:16,769 --> 00:04:20,050 muy bien, bueno pues ya llega el momento 107 00:04:20,050 --> 00:04:21,870 podemos ya posponerlo más 108 00:04:21,870 --> 00:04:24,209 vamos a tener ya 109 00:04:24,209 --> 00:04:26,189 que enfrentarnos a los public 110 00:04:26,189 --> 00:04:28,470 estos que siempre 111 00:04:28,470 --> 00:04:30,470 quitamos, ponemos, que no sabemos ni por qué 112 00:04:30,470 --> 00:04:32,389 se ponen, ya tenemos 113 00:04:32,389 --> 00:04:34,129 que enfrentarnos ya cuando ya tenemos 114 00:04:34,129 --> 00:04:36,170 varias clases, que es nuestro caso, ahora ya 115 00:04:36,170 --> 00:04:38,050 nuestros ejercicios tienen varias clases 116 00:04:38,050 --> 00:04:40,149 no solo una, ahora ya 117 00:04:40,149 --> 00:04:42,410 sí que sí, lo del public, private 118 00:04:42,410 --> 00:04:44,009 etcétera, podemos jugar con ello 119 00:04:44,009 --> 00:04:46,069 ahora ya sí, cuando tenemos varias 120 00:04:46,069 --> 00:04:48,269 vale, pues vamos a ver 121 00:04:48,269 --> 00:04:50,110 un poquito qué significa eso 122 00:04:50,110 --> 00:04:52,069 y luego cómo lo 123 00:04:52,069 --> 00:04:54,110 lo usamos 124 00:04:54,110 --> 00:04:59,420 vale 125 00:04:59,420 --> 00:04:59,879 pues 126 00:04:59,879 --> 00:05:02,480 esto 127 00:05:02,480 --> 00:05:07,569 ¿dónde está el roto? 128 00:05:18,009 --> 00:05:18,910 bueno, pues ahora ya sí 129 00:05:18,910 --> 00:05:20,350 que sabemos que una aplicación 130 00:05:20,350 --> 00:05:21,850 ¿verdad? 131 00:05:22,569 --> 00:05:24,569 una aplicación en Java, ¿qué es? 132 00:05:25,290 --> 00:05:26,430 es un montón de clases 133 00:05:26,430 --> 00:05:27,949 un conjunto de clases, ¿verdad? 134 00:05:37,040 --> 00:05:38,879 la aplicación que hemos hecho en el ejercicio 135 00:05:38,879 --> 00:05:40,459 11, tiene 136 00:05:40,459 --> 00:05:41,759 la clase cuenta 137 00:05:41,759 --> 00:05:44,620 que representa el concepto 138 00:05:44,620 --> 00:05:46,680 cuenta con las cosas que puede 139 00:05:46,680 --> 00:05:48,079 hacer, ¿vale? 140 00:05:48,199 --> 00:05:50,300 Representa el concepto cuenta como su 141 00:05:50,300 --> 00:05:52,160 cantidad 142 00:05:52,160 --> 00:05:53,720 y titular 143 00:05:53,720 --> 00:05:56,680 y además tiene las cosas 144 00:05:56,680 --> 00:05:58,480 que puede hacer como recibir dinero 145 00:05:58,480 --> 00:06:00,759 en un ingreso, soltar dinero 146 00:06:00,759 --> 00:06:02,540 en una retirada, pues tiene la clase 147 00:06:02,540 --> 00:06:04,860 cuenta y luego además tiene la clase 148 00:06:04,860 --> 00:06:06,899 main, la clase que llamamos la clase principal 149 00:06:06,899 --> 00:06:09,019 porque de este conjunto de clases 150 00:06:09,019 --> 00:06:12,519 si la aplicación es de escritorio y queremos ejecutarla en un ordenador 151 00:06:12,519 --> 00:06:16,100 una será la principal 152 00:06:16,100 --> 00:06:19,519 es decir, la que tiene el método main 153 00:06:19,519 --> 00:06:22,120 la que tiene el main 154 00:06:22,120 --> 00:06:26,620 y ahora cuando lanzamos esa aplicación 155 00:06:26,620 --> 00:06:28,360 la máquina virtual 156 00:06:28,360 --> 00:06:31,279 se va a buscar ese main 157 00:06:31,279 --> 00:06:37,500 y empieza a ejecutar desde ese main 158 00:06:37,500 --> 00:06:38,860 y ahora ya ese main 159 00:06:38,860 --> 00:06:41,040 pues crea objetos de las clases que sea 160 00:06:41,040 --> 00:06:43,399 ¿vale? eso es como hemos trabajado hasta ahora 161 00:06:43,399 --> 00:06:45,259 crea objetos de las clases que sea 162 00:06:45,259 --> 00:06:46,160 en el ejercicio 11 163 00:06:46,160 --> 00:06:49,139 este main creaba 164 00:06:49,139 --> 00:06:51,480 un objeto cuenta y con ese objeto cuenta 165 00:06:51,480 --> 00:06:53,019 hacía retiradas, ingresos 166 00:06:53,019 --> 00:06:54,800 ¿vale? conclusión 167 00:06:54,800 --> 00:06:57,279 una aplicación son muchas clases 168 00:06:57,279 --> 00:06:58,720 ¿vale? 169 00:06:59,259 --> 00:07:01,579 pueden ser 2, 3 o 100.000 170 00:07:01,579 --> 00:07:03,620 entonces si son 100.000 171 00:07:03,620 --> 00:07:05,379 vamos a meter 172 00:07:05,379 --> 00:07:06,579 un poquito de organización 173 00:07:06,579 --> 00:07:08,860 porque si son 100.000 y me dicen 174 00:07:08,860 --> 00:07:10,579 oye, retoca la clase usuario 175 00:07:10,579 --> 00:07:13,019 porque al usuario ahora le hemos metido 176 00:07:13,019 --> 00:07:15,120 su dirección 177 00:07:15,120 --> 00:07:16,120 de correo electrónico. 178 00:07:16,720 --> 00:07:18,480 Madre de Dios, tienes todavía mil clases 179 00:07:18,480 --> 00:07:19,860 hasta que encuentras a tu usuario. 180 00:07:20,839 --> 00:07:22,660 Cuando ya tenemos muchas, vamos a 181 00:07:22,660 --> 00:07:24,800 organizarlas un poquito para que 182 00:07:24,800 --> 00:07:26,860 a la hora de retocar la aplicación me sea más fácil 183 00:07:26,860 --> 00:07:28,860 encontrar la clase que estoy 184 00:07:28,860 --> 00:07:29,279 buscando. 185 00:07:30,279 --> 00:07:32,740 Bueno, pues ¿cómo 186 00:07:32,740 --> 00:07:34,040 organizamos las clases? 187 00:07:34,040 --> 00:07:36,959 Las organizamos en paquetes, ¿verdad? 188 00:07:50,060 --> 00:07:54,199 Entonces, una aplicación normal son varias clases 189 00:07:54,199 --> 00:07:59,279 Si son poquitas, podría tenerlas todas en el mismo paquete 190 00:07:59,279 --> 00:08:03,759 Pero si son muchas clases, lo normal es que las tengan paquetes separados 191 00:08:03,759 --> 00:08:08,040 ¿Vale? Entonces, cada paquete es una carpeta de clases 192 00:08:08,040 --> 00:08:12,800 ¿Vale? Cada paquete es una carpeta con clases 193 00:08:12,800 --> 00:08:45,679 Vale, bueno pues mi aplicación, mi aplicación de gestión de facturas, mi aplicación de gestión de matrículas, mi aplicación de usuarios, la que sea, mi aplicación de inventario, pues mi aplicación tendrá varios paquetes o lo que es lo mismo, varias carpetas y cada carpeta tendrá unas cuantas clases y todas ellas serán la aplicación. 194 00:08:45,679 --> 00:08:48,679 y de todas ellas, una y solo una 195 00:08:48,679 --> 00:08:50,360 debería tener 196 00:08:50,360 --> 00:08:51,320 este método 197 00:08:51,320 --> 00:08:54,440 de tal manera que cuando la aplicación se arranque 198 00:08:54,440 --> 00:08:56,440 el punto de arranque 199 00:08:56,440 --> 00:08:57,480 es este 200 00:08:57,480 --> 00:08:59,639 y a partir de ahí ya 201 00:08:59,639 --> 00:09:02,379 se empiezan a crear objetos de otras clases 202 00:09:02,379 --> 00:09:04,200 que llaman a métodos, babababa 203 00:09:04,200 --> 00:09:05,039 todo lo que sea 204 00:09:05,039 --> 00:09:07,340 bueno, está ahí claro, ¿no? 205 00:09:07,340 --> 00:09:09,440 o sea, cada paquete tiene que tener un main 206 00:09:09,440 --> 00:09:11,720 no, la aplicación 207 00:09:11,720 --> 00:09:13,320 tiene un único main, que estará en uno 208 00:09:13,320 --> 00:09:14,580 de los paquetes en el que sea 209 00:09:14,580 --> 00:09:18,940 Un main por aplicación 210 00:09:18,940 --> 00:09:21,039 Porque la aplicación tiene que arrancar en un punto 211 00:09:21,039 --> 00:09:22,399 Y va a arrancar en ese main 212 00:09:22,399 --> 00:09:24,259 En ese único main 213 00:09:24,259 --> 00:09:26,720 O sea, ahora lo que estamos haciendo nosotros no sería 214 00:09:26,720 --> 00:09:29,059 Sería un proyecto con un main 215 00:09:29,059 --> 00:09:30,559 Sí, a ver, lo que pasa es que 216 00:09:30,559 --> 00:09:31,580 Como estamos haciendo 217 00:09:31,580 --> 00:09:34,519 Para no tener miles de proyectos 218 00:09:34,519 --> 00:09:35,659 Para cada ejercicio 219 00:09:35,659 --> 00:09:38,860 Pues estamos metiendo en un único proyecto 220 00:09:38,860 --> 00:09:40,600 Varios ejercicios 221 00:09:40,600 --> 00:09:41,879 Y entonces por eso hay varios main 222 00:09:41,879 --> 00:09:44,200 Pero es que cada main es una aplicación distinta 223 00:09:44,200 --> 00:09:47,059 cada mail es un ejercicio distinto 224 00:09:47,059 --> 00:09:48,480 lo que es una aplicación distinta 225 00:09:48,480 --> 00:09:50,720 entonces asociamos mail a aplicación 226 00:09:50,720 --> 00:09:52,659 entonces ya no solo estará el mail 227 00:09:52,659 --> 00:09:54,279 sino el resto de clases 228 00:09:54,279 --> 00:09:57,399 que se empiezan a instanciar 229 00:09:57,399 --> 00:09:58,120 desde el mail 230 00:09:58,120 --> 00:10:02,279 bueno, pues entonces 231 00:10:02,279 --> 00:10:03,759 ahora yo tengo una aplicación cualquiera 232 00:10:03,759 --> 00:10:05,460 pues imaginaos que tengo 233 00:10:05,460 --> 00:10:07,740 una aplicación, pues yo que sé 234 00:10:07,740 --> 00:10:09,940 de gestión de usuarios 235 00:10:09,940 --> 00:10:11,399 por poner algo, da lo mismo 236 00:10:11,399 --> 00:10:18,049 vale, pues esta aplicación 237 00:10:18,049 --> 00:10:22,129 después de analizarla, tiene, ¿con qué entidades trabaja? 238 00:10:22,210 --> 00:10:26,830 Pues trabaja con la entidad usuario, que tiene sus datos DNI, 239 00:10:26,950 --> 00:10:28,710 pues entonces habla una clase usuario. 240 00:10:29,509 --> 00:10:31,450 Vale, pues aquí tengo mi clase usuario. 241 00:10:33,090 --> 00:10:37,190 A lo mejor me interesa también una clase que es la clase, 242 00:10:39,210 --> 00:10:42,049 por ejemplo, el usuario se caracteriza por su documento, 243 00:10:42,570 --> 00:10:44,509 pero el documento tiene varias cosas. 244 00:10:44,509 --> 00:10:47,350 la ubicación donde está la foto 245 00:10:47,350 --> 00:10:49,409 un string, pues a lo mejor 246 00:10:49,409 --> 00:10:54,750 tengo mi clase documento 247 00:10:54,750 --> 00:10:56,730 vale 248 00:10:56,730 --> 00:10:58,370 ahora tengo 249 00:10:58,370 --> 00:11:00,049 dentro de la clase usuario 250 00:11:00,049 --> 00:11:02,769 entonces habrá una propiedad que será de tipo documento 251 00:11:02,769 --> 00:11:04,389 da igual, a lo mejor tengo 252 00:11:04,389 --> 00:11:06,629 también ahora una clase de utilidades 253 00:11:06,629 --> 00:11:08,009 que es 254 00:11:08,009 --> 00:11:10,549 la clase que tiene 255 00:11:10,549 --> 00:11:13,629 los métodos 256 00:11:13,629 --> 00:11:18,440 pues yo que sé, utilidades 257 00:11:18,440 --> 00:11:20,120 de entrada y salida, por ejemplo 258 00:11:20,120 --> 00:11:21,899 para 259 00:11:21,899 --> 00:11:24,379 hacer la entrada y salida de datos 260 00:11:24,379 --> 00:11:25,659 pues lo meto en esa clase 261 00:11:25,659 --> 00:11:29,759 luego tengo la clase 262 00:11:29,759 --> 00:11:31,259 que tiene el método main 263 00:11:31,259 --> 00:11:33,960 pues por ejemplo esa podría ser la clase main 264 00:11:33,960 --> 00:11:38,259 y así podría tener muchas 265 00:11:38,259 --> 00:11:39,559 así podría tener muchas 266 00:11:39,559 --> 00:11:41,480 en una única aplicación, muchas 267 00:11:41,480 --> 00:11:45,179 bueno, pues entonces vamos a dividirlas 268 00:11:45,179 --> 00:11:46,379 en diferentes paquetes 269 00:11:46,379 --> 00:11:49,379 pues por ejemplo, normalmente la división que se hace 270 00:11:49,379 --> 00:11:50,179 es conceptual 271 00:11:50,179 --> 00:11:53,580 cada paquete tiene clases 272 00:11:53,580 --> 00:11:55,919 que se refieren 273 00:11:55,919 --> 00:11:58,179 que tienen un significado común 274 00:11:58,179 --> 00:11:58,960 de alguna manera 275 00:11:58,960 --> 00:12:01,440 bueno, pues estas dos de aquí 276 00:12:01,440 --> 00:12:02,740 ¿vale? 277 00:12:03,419 --> 00:12:04,919 pues estas 278 00:12:04,919 --> 00:12:07,059 dos de aquí 279 00:12:07,059 --> 00:12:11,389 por ejemplo, las puedo meter 280 00:12:11,389 --> 00:12:13,990 en el paquete modelo 281 00:12:13,990 --> 00:12:17,389 porque es el modelo de mi aplicación 282 00:12:17,389 --> 00:12:19,149 ¿vale? 283 00:12:19,149 --> 00:12:21,590 a lo mejor 284 00:12:21,590 --> 00:12:22,669 esta clase de aquí 285 00:12:22,669 --> 00:12:25,090 la voy a meter en un paquete 286 00:12:25,090 --> 00:12:27,610 que se llame utilidades 287 00:12:27,610 --> 00:12:33,110 ¿vale? 288 00:12:33,529 --> 00:12:40,129 estos serían los paquetes 289 00:12:40,129 --> 00:12:42,690 ¿vale? esta clase de aquí como significa 290 00:12:42,690 --> 00:12:44,409 otra cosa que es la clase principal 291 00:12:44,409 --> 00:12:46,750 pues por ejemplo la voy a meter en el 292 00:12:46,750 --> 00:12:47,809 paquete main 293 00:12:47,809 --> 00:12:51,629 ¿vale? tengo tres paquetes 294 00:12:51,629 --> 00:12:54,950 bueno pues cada paquete es una carpeta 295 00:12:54,950 --> 00:12:58,370 cada paquete es una carpetita 296 00:12:58,370 --> 00:12:59,409 con el mismo nombre 297 00:12:59,409 --> 00:13:07,019 ¿vale? entonces lo que es mi aplicación 298 00:13:07,019 --> 00:13:09,159 tendrá que tener físicamente 299 00:13:09,159 --> 00:13:11,120 mi aplicación, una carpeta 300 00:13:11,120 --> 00:13:13,159 que se llama modelo y aquí están 301 00:13:13,159 --> 00:13:15,139 estas clases, otra 302 00:13:15,139 --> 00:13:17,279 carpeta que se llama utilidades y ahí está 303 00:13:17,279 --> 00:13:19,460 esa clase, otra carpeta 304 00:13:19,460 --> 00:13:21,019 que se llama main y ahí está esa clase 305 00:13:21,019 --> 00:13:23,139 luego cada paquete lo que 306 00:13:23,139 --> 00:13:25,080 es físicamente es 307 00:13:25,080 --> 00:13:27,059 una carpeta del sistema de archivos 308 00:13:27,059 --> 00:13:28,019 con ese nombre 309 00:13:28,019 --> 00:13:30,759 luego mi aplicación 310 00:13:30,759 --> 00:13:32,899 es diferentes clases 311 00:13:32,899 --> 00:13:34,500 distribuidas en 312 00:13:34,500 --> 00:13:36,159 diferentes carpetas 313 00:13:36,159 --> 00:13:42,440 vale, es necesario que sean todas carpetas 314 00:13:42,440 --> 00:13:44,399 al mismo nivel? No, puedo tener 315 00:13:44,399 --> 00:13:45,700 un árbol de carpetas 316 00:13:45,700 --> 00:13:48,039 por ejemplo, a lo mejor yo tengo 317 00:13:48,039 --> 00:13:50,320 dos clases de utilidades 318 00:13:50,320 --> 00:13:52,500 y unas son específicas 319 00:13:52,500 --> 00:13:54,399 de entrada y salida por consola, por ejemplo 320 00:13:54,399 --> 00:13:56,580 entonces yo quiero una organización 321 00:13:56,580 --> 00:13:58,159 en la que aquí me hago 322 00:13:58,159 --> 00:14:00,220 una subcarpeta 323 00:14:00,220 --> 00:14:02,700 que se llame 324 00:14:02,700 --> 00:14:03,279 consola 325 00:14:03,279 --> 00:14:06,220 entonces, ¿vale? esta carpeta 326 00:14:06,220 --> 00:14:07,500 se llamaría utilidades 327 00:14:07,500 --> 00:14:11,980 y dentro de utilidades me hago una 328 00:14:11,980 --> 00:14:14,360 subcarpeta, una subcarpeta 329 00:14:14,360 --> 00:14:15,879 que se llame, por ejemplo, 330 00:14:16,080 --> 00:14:18,340 consola. Esta carpeta 331 00:14:18,340 --> 00:14:19,139 está dentro de esta. 332 00:14:20,360 --> 00:14:21,820 Tiene sentido esta organización 333 00:14:21,820 --> 00:14:23,539 porque me hace un mapa real 334 00:14:23,539 --> 00:14:25,399 de lo que significa cada cosa. 335 00:14:26,159 --> 00:14:27,980 Estas serían las utilidades, bueno, 336 00:14:27,980 --> 00:14:29,100 utilidades de entrada y salida. 337 00:14:29,679 --> 00:14:32,320 Estas serían las utilidades de entrada y salida, 338 00:14:32,980 --> 00:14:33,600 pero solo 339 00:14:33,600 --> 00:14:36,320 las que van por consola. 340 00:14:36,740 --> 00:14:38,220 Entonces, la meto yo, esas clases 341 00:14:38,220 --> 00:14:39,440 en una carpetita ahí dentro. 342 00:14:40,840 --> 00:14:41,159 ¿Vale? Entonces, 343 00:14:41,159 --> 00:14:42,740 Entonces, ¿aquí qué tendría? 344 00:14:42,899 --> 00:14:44,720 Aquí tendría cuatro paquetes. 345 00:14:44,840 --> 00:14:45,539 Tendría cuatro. 346 00:14:46,559 --> 00:14:48,059 Este, un paquete. 347 00:14:48,419 --> 00:14:50,240 Este, utilidades, otro. 348 00:14:50,940 --> 00:14:51,860 Este, otro. 349 00:14:52,480 --> 00:14:53,879 Y este, consola, otro. 350 00:14:55,840 --> 00:15:00,480 Luego, tengo tantos paquetes como carpetas con clases. 351 00:15:01,039 --> 00:15:02,820 Me da igual que unas estén dentro de otras. 352 00:15:03,360 --> 00:15:04,059 Me da lo mismo. 353 00:15:05,679 --> 00:15:07,100 Aquí tengo cuatro paquetes. 354 00:15:07,100 --> 00:15:09,200 Este, este, este y este. 355 00:15:09,320 --> 00:15:10,720 Porque tengo cuatro carpetas. 356 00:15:11,159 --> 00:15:12,379 Aunque una esté dentro de otra. 357 00:15:12,960 --> 00:15:14,600 Y todas ellas pueden tener clases. 358 00:15:15,600 --> 00:15:18,600 Directamente en utilidades puedo tener yo clases dentro. 359 00:15:19,320 --> 00:15:22,799 Pero dentro de la subcarpeta consola también puedo tener clases. 360 00:15:24,360 --> 00:15:24,840 ¿Vale? 361 00:15:26,460 --> 00:15:28,879 Bueno, pues, ¿cómo sería el nombre de cada paquete? 362 00:15:29,220 --> 00:15:31,879 Hemos dicho que el nombre de cada paquete es el nombre de la carpeta. 363 00:15:32,360 --> 00:15:34,139 Pero, ¿qué pasa cuando es una subcarpeta? 364 00:15:34,940 --> 00:15:37,879 Pues que el nombre del paquete va con prefijo. 365 00:15:38,600 --> 00:15:40,259 El de estas modelos y más. 366 00:15:41,159 --> 00:15:44,559 El de estas utilidades entrada y salida sin más. 367 00:15:46,299 --> 00:15:47,960 El de estas main sin más. 368 00:15:48,580 --> 00:15:50,159 Pero el nombre de este paquete. 369 00:15:50,879 --> 00:15:52,720 Consola barra utilidades. 370 00:15:53,899 --> 00:15:55,899 Utilidades punto consola. 371 00:15:56,960 --> 00:16:02,059 Entonces el nombre de este paquete sería, si lo saco por aquí, 372 00:16:03,299 --> 00:16:09,840 el nombre de este sería toda la ruta, pero con puntos en vez de con barra. 373 00:16:09,840 --> 00:16:11,600 utilidades 374 00:16:11,600 --> 00:16:14,039 entrada y salida 375 00:16:14,039 --> 00:16:15,899 punto consola 376 00:16:15,899 --> 00:16:18,059 con el punto 377 00:16:18,059 --> 00:16:20,259 luego 378 00:16:20,259 --> 00:16:21,580 lo que tengo físicamente 379 00:16:21,580 --> 00:16:24,419 son carpetas y subcarpetas 380 00:16:24,419 --> 00:16:28,580 pero eso para Java son paquetes 381 00:16:28,580 --> 00:16:29,879 y para Java 382 00:16:29,879 --> 00:16:31,340 el nombre que recibe 383 00:16:31,340 --> 00:16:33,519 es el nombre de la carpeta 384 00:16:33,519 --> 00:16:35,820 y si es subcarpeta 385 00:16:35,820 --> 00:16:38,059 es decir, está una dentro de otra 386 00:16:38,059 --> 00:16:39,399 pues toda la ruta 387 00:16:39,399 --> 00:16:41,500 con el separador punto 388 00:16:41,500 --> 00:16:43,879 si dentro de consola 389 00:16:43,879 --> 00:16:45,580 a su vez me da a mí la gana 390 00:16:45,580 --> 00:16:47,399 crear otro paquete 391 00:16:47,399 --> 00:16:49,480 ahí dentro, otra carpeta con 392 00:16:49,480 --> 00:16:51,500 clases que se llama de otra manera 393 00:16:51,500 --> 00:16:52,440 llamémosle x 394 00:16:52,440 --> 00:16:54,879 pues me ha aparecido un quinto paquete 395 00:16:54,879 --> 00:16:57,539 y ese quinto paquete como se llamaría 396 00:16:57,539 --> 00:16:59,019 utilidades.es 397 00:16:59,019 --> 00:17:00,620 consola.x 398 00:17:00,620 --> 00:17:02,460 luego tendría 5 399 00:17:02,460 --> 00:17:05,519 tendría el paquete modelo, el paquete utilidades 400 00:17:05,519 --> 00:17:06,480 el paquete main 401 00:17:06,480 --> 00:17:09,559 el paquete utilidades.consola 402 00:17:09,559 --> 00:17:12,559 y el paquete utilidades.consola.x 403 00:17:12,559 --> 00:17:15,240 cinco paquetes 404 00:17:15,240 --> 00:17:18,420 están organizados como carpetas unas dentro de otras 405 00:17:18,420 --> 00:17:20,299 pero para Java le da igual 406 00:17:20,299 --> 00:17:24,680 para Java son cinco paquetes de la misma categoría todos 407 00:17:24,680 --> 00:17:26,599 cada uno con su nombre 408 00:17:26,599 --> 00:17:30,980 algunos tendrán nombre largo porque está en subcarpetas 409 00:17:30,980 --> 00:17:33,819 y otros nombre corto porque está en el raíz del proyecto 410 00:17:33,819 --> 00:17:35,039 directamente, está en el raíz 411 00:17:35,039 --> 00:17:38,019 en el raíz de la aplicación, lo que se llama el raíz 412 00:17:38,019 --> 00:17:39,099 de la aplicación 413 00:17:39,099 --> 00:17:42,220 pero que tenga el nombre largo o nombre corto 414 00:17:42,220 --> 00:17:44,079 o lo que es lo mismo, que sean subcarpetas 415 00:17:44,079 --> 00:17:46,059 o no, a Java le da 416 00:17:46,059 --> 00:17:48,019 lo mismo, todos son 417 00:17:48,019 --> 00:17:50,000 paquetes con clases dentro 418 00:17:50,000 --> 00:17:51,960 de la misma categoría 419 00:17:51,960 --> 00:17:53,779 y del mismo nivel, es decir 420 00:17:53,779 --> 00:17:55,519 no es que un paquete esté dentro del otro 421 00:17:55,519 --> 00:17:58,119 una carpeta sí está dentro de la otra 422 00:17:58,119 --> 00:18:00,140 pero los paquetes no están 423 00:18:00,140 --> 00:18:00,920 dentro del otro 424 00:18:00,920 --> 00:18:04,279 para Java no está uno dentro del otro 425 00:18:04,279 --> 00:18:05,859 son paquetes con clases 426 00:18:05,859 --> 00:18:07,900 conceptualmente 427 00:18:07,900 --> 00:18:08,859 cada una de las que sea 428 00:18:08,859 --> 00:18:13,349 bueno pues ahora esto que implicación tiene 429 00:18:13,349 --> 00:18:15,849 pues la implicación 430 00:18:15,849 --> 00:18:16,569 que tiene es que 431 00:18:16,569 --> 00:18:18,349 las clases 432 00:18:18,349 --> 00:18:20,890 que están en cada paquete 433 00:18:20,890 --> 00:18:22,710 ahora ya 434 00:18:22,710 --> 00:18:25,089 tienen acceso 435 00:18:25,089 --> 00:18:27,710 para instanciar objetos 436 00:18:27,710 --> 00:18:28,690 o para lo que sea 437 00:18:28,690 --> 00:18:30,809 a clases de otro paquete 438 00:18:30,809 --> 00:18:32,849 en función de esos 439 00:18:32,849 --> 00:18:35,269 modificadores que yo les ponga. 440 00:18:35,369 --> 00:18:36,549 Public, private, no sé qué. 441 00:18:37,589 --> 00:18:38,470 Entonces, esto ahora 442 00:18:38,470 --> 00:18:39,549 vamos a verlo 443 00:18:39,549 --> 00:18:41,730 con código 444 00:18:41,730 --> 00:18:44,869 que es más fácil 445 00:18:44,869 --> 00:18:45,269 de ver. 446 00:18:51,650 --> 00:18:53,109 Vale, pues 447 00:18:53,109 --> 00:19:02,730 en un proyectito aparte, aunque van a ser 448 00:19:02,730 --> 00:19:04,829 cuatro chorradas, vamos a hacerlo en un proyectito aparte 449 00:19:04,829 --> 00:19:06,230 para que se vea claro. 450 00:19:06,490 --> 00:19:08,650 Y luego ya la misma idea la aplicaremos ahora ya 451 00:19:08,650 --> 00:19:09,910 así en el resto de ejercicios. 452 00:19:11,630 --> 00:19:12,069 Entonces, 453 00:19:12,710 --> 00:19:21,049 Voy a hacerme yo un proyecto aparte para subirlo a la aula virtual como ejemplo. 454 00:19:24,339 --> 00:19:29,339 Lo voy a llamar paquetes ejemplo. 455 00:19:31,890 --> 00:19:38,849 Y aquí irán todo lo que tenemos que saber de modificadores de acceso, paquetes y demás. 456 00:19:40,609 --> 00:19:43,269 Vale, pues entonces, esta es mi carpeta raíz. 457 00:19:43,990 --> 00:19:47,509 Ahora vamos a ver realmente la estructura del sistema de archivos en que se mapea. 458 00:19:47,509 --> 00:19:51,069 Yo aquí puedo meter clases sin más 459 00:19:51,069 --> 00:19:53,049 Entonces las estaría metiendo todas en la raíz 460 00:19:53,049 --> 00:19:56,369 Eso no se hace desde la versión Java de no sé qué 461 00:19:56,369 --> 00:19:58,130 Porque la máquina virtual se va a liar 462 00:19:58,130 --> 00:19:59,710 Para ti nada, eso ya nos olvidamos 463 00:19:59,710 --> 00:20:02,690 Entonces las clases las vamos a meter siempre en paquetes 464 00:20:02,690 --> 00:20:05,049 Pues por ejemplo, me voy a hacer un paquete modelo 465 00:20:05,049 --> 00:20:06,069 Un primer paquete 466 00:20:06,069 --> 00:20:11,569 Modelo 467 00:20:11,569 --> 00:20:14,269 Que es el modelo general 468 00:20:14,269 --> 00:20:16,890 Y aquí pues a lo mejor tengo yo mi clase alumno 469 00:20:16,890 --> 00:20:22,640 Porque mi aplicación va a trabajar con alumnos 470 00:20:22,640 --> 00:20:24,839 luego su modelo tiene un alumno 471 00:20:24,839 --> 00:20:27,000 vale 472 00:20:27,000 --> 00:20:29,799 le voy a 473 00:20:29,799 --> 00:20:32,079 como todavía esto no sabemos lo que significa 474 00:20:32,079 --> 00:20:33,660 no lo hemos mencionado, esto lo quito 475 00:20:33,660 --> 00:20:35,880 vale, y el alumno va a tener 476 00:20:35,880 --> 00:20:38,680 su nombre 477 00:20:38,680 --> 00:20:41,339 como vamos a ver solamente el problema de los accesos 478 00:20:41,339 --> 00:20:43,279 una propiedad y se acabó 479 00:20:43,279 --> 00:20:43,839 su nombre 480 00:20:43,839 --> 00:20:47,319 vale, no es obligatorio 481 00:20:47,319 --> 00:20:48,420 poner constructores 482 00:20:48,420 --> 00:20:51,279 porque de hecho hemos hecho los primeros ejercicios 483 00:20:51,279 --> 00:20:52,319 sin hacer constructores 484 00:20:52,319 --> 00:20:54,759 y luego nosotros podíamos crear 485 00:20:54,759 --> 00:20:56,480 alumnos con new alumno. 486 00:20:57,140 --> 00:20:58,480 ¿Vale? Porque no hacer ningún 487 00:20:58,480 --> 00:21:00,819 constructor equivale 488 00:21:00,819 --> 00:21:02,619 para Java hacer 489 00:21:02,619 --> 00:21:04,680 esto, como hacer uno por 490 00:21:04,680 --> 00:21:05,400 defecto vacío. 491 00:21:06,460 --> 00:21:08,579 Si yo no hago ningún constructor, 492 00:21:08,779 --> 00:21:10,819 no lo escribo, se supone 493 00:21:10,819 --> 00:21:12,099 que hay este por defecto. 494 00:21:12,740 --> 00:21:14,599 Por eso podemos hacer el new alumno. 495 00:21:14,599 --> 00:21:16,559 Lo hemos podido hacer sin hacer constructores 496 00:21:16,559 --> 00:21:18,539 nosotros. Porque si no 497 00:21:18,539 --> 00:21:20,500 escribimos ninguno, se supone que está este por 498 00:21:20,500 --> 00:21:22,200 defecto. ¿Vale? 499 00:21:22,319 --> 00:21:24,140 entonces ni lo escribo 500 00:21:24,140 --> 00:21:25,440 vale, alumno 501 00:21:25,440 --> 00:21:27,240 ahora 502 00:21:27,240 --> 00:21:29,900 me voy a hacer pues otro paquete 503 00:21:29,900 --> 00:21:34,970 este pues venga 504 00:21:34,970 --> 00:21:35,650 utilidades 505 00:21:35,650 --> 00:21:40,759 un paquete de utilidades 506 00:21:40,759 --> 00:21:43,380 pues este paquete de utilidades de aquí 507 00:21:43,380 --> 00:21:46,039 que tiene una clase 508 00:21:46,039 --> 00:21:47,579 de utilidades para hacer cosas 509 00:21:47,579 --> 00:21:57,200 un paquete de utilidades 510 00:21:57,200 --> 00:21:58,259 para hacer cosas 511 00:21:58,259 --> 00:21:59,660 vale 512 00:21:59,660 --> 00:22:03,240 por ejemplo, pues que utilidad puede hacer 513 00:22:03,240 --> 00:22:05,359 yo que sé, una utilidad que a lo mejor 514 00:22:05,359 --> 00:22:06,599 me interesa, no sé por qué. 515 00:22:09,059 --> 00:22:09,259 ¿Vale? 516 00:22:12,039 --> 00:22:12,480 Ver 517 00:22:12,480 --> 00:22:14,900 si el nombre, le voy a quitar el public, 518 00:22:18,500 --> 00:22:19,240 ver si 519 00:22:19,240 --> 00:22:21,319 le paso un alumno 520 00:22:21,319 --> 00:22:23,279 y me va a decir si su nombre empieza 521 00:22:23,279 --> 00:22:25,440 por mayúscula. Por ejemplo, una utilidad 522 00:22:25,440 --> 00:22:26,619 que mi aplicación necesita. 523 00:22:27,720 --> 00:22:28,480 Pues vamos a hacer. 524 00:22:29,299 --> 00:22:31,640 ¿Esta aplicación no tiene propiedades? 525 00:22:36,359 --> 00:22:37,440 Bueno, venga, para que tenga 526 00:22:37,440 --> 00:22:38,859 propiedades sí, por ejemplo, 527 00:22:39,660 --> 00:22:41,099 la aplicación se caracteriza 528 00:22:41,099 --> 00:22:43,720 por su propiedad, una propiedad 529 00:22:43,720 --> 00:22:45,779 para poner una propiedad por un char 530 00:22:45,779 --> 00:22:52,849 vale, y 531 00:22:52,849 --> 00:22:54,950 la utilidad que tiene esta aplicación es 532 00:22:54,950 --> 00:22:56,869 ver si un alumno 533 00:22:56,869 --> 00:22:59,049 que yo paso como parámetro, su inicial 534 00:22:59,049 --> 00:23:00,710 es igual que este carácter 535 00:23:00,710 --> 00:23:02,130 por alguna razón 536 00:23:02,130 --> 00:23:04,150 le interesa a la aplicación esto 537 00:23:04,150 --> 00:23:06,009 saber cosas de iniciales 538 00:23:06,009 --> 00:23:08,529 pues nada, entonces este método como sería 539 00:23:08,529 --> 00:23:09,849 me devuelvo un boolean 540 00:23:09,849 --> 00:23:12,349 porque me tiene que devolver sí o no 541 00:23:12,349 --> 00:23:14,589 el método es 542 00:23:14,589 --> 00:23:15,809 empieza por 543 00:23:15,809 --> 00:23:20,089 que hay que pasarle como parámetro 544 00:23:20,089 --> 00:23:21,789 a este método para comparar 545 00:23:21,789 --> 00:23:23,950 si su nombre empieza por este carácter. 546 00:23:25,869 --> 00:23:27,490 El alumno. 547 00:23:29,990 --> 00:23:31,710 El objeto enterito, no pasa nada. 548 00:23:32,650 --> 00:23:33,910 Yo le paso... 549 00:23:35,369 --> 00:23:39,420 Es decir, alumno 550 00:23:39,420 --> 00:23:41,660 es un tipo de datos más 551 00:23:41,660 --> 00:23:43,619 que me acabo de crear. Es un tipo de dato. 552 00:23:44,160 --> 00:23:45,259 Entonces yo le puedo pasar 553 00:23:45,259 --> 00:23:47,779 una variable de tipo alumno. 554 00:23:47,779 --> 00:24:07,859 ¿Y ahora qué tendría que hacer este método? Pues este método tendría que hacer retun o.nombre igual a carácter, ¿verdad? O.nombre charAt, perdón, o.nombre charAt cero. 555 00:24:07,859 --> 00:24:11,519 pues si la inicial 556 00:24:11,519 --> 00:24:13,599 del nombre del alumno 557 00:24:13,599 --> 00:24:14,960 o punto nombres stream 558 00:24:14,960 --> 00:24:17,380 la inicial del nombre del alumno 559 00:24:17,380 --> 00:24:19,900 es igual al carácter 560 00:24:19,900 --> 00:24:21,319 de mi clase utilidades 561 00:24:21,319 --> 00:24:23,299 me va a devolver true y si no false 562 00:24:23,299 --> 00:24:24,559 vale 563 00:24:24,559 --> 00:24:26,859 pues esta clase 564 00:24:26,859 --> 00:24:28,880 necesita usar a la otra 565 00:24:28,880 --> 00:24:30,460 necesita usar a esta 566 00:24:30,460 --> 00:24:32,960 pues aquí nos viene ya el primer problema 567 00:24:32,960 --> 00:24:35,440 me da un error de compilación que no sé de dónde sale 568 00:24:35,440 --> 00:24:37,700 vamos a ver de dónde sale 569 00:24:37,700 --> 00:24:41,779 me dice, uy, lo siento, pero alumno 570 00:24:41,779 --> 00:24:45,680 no lo veo, no lo encuentro por ninguna parte 571 00:24:45,680 --> 00:24:49,579 decimos, pero bueno, pero si alumno, ¿cómo no lo vas a encontrar? 572 00:24:50,440 --> 00:24:54,200 pero si yo lo he hecho, claro, pero es que 573 00:24:54,200 --> 00:24:57,039 alumno está en otro paquete 574 00:24:57,039 --> 00:25:02,039 entonces, está en otro distinto, pues para que 575 00:25:02,039 --> 00:25:06,039 clases de otro paquete diferente al mío puedan 576 00:25:06,039 --> 00:25:16,420 accederme a mí, tengo que poner el public, vale, primer paso, entonces vamos a ponerlo 577 00:25:16,420 --> 00:25:35,210 aquí, vamos a subir ese proyecto, modificador public para la clase, vale, permite que clases 578 00:25:35,210 --> 00:25:36,710 fuera del paquete 579 00:25:36,710 --> 00:25:38,589 del paquete donde esté 580 00:25:38,589 --> 00:25:40,190 clases fuera del paquete 581 00:25:40,190 --> 00:25:43,250 puedan hacer referencia 582 00:25:43,250 --> 00:25:44,069 a esa clase 583 00:25:44,069 --> 00:25:47,089 a esa clase 584 00:25:47,089 --> 00:25:49,289 si no se pone 585 00:25:49,289 --> 00:25:51,150 el public, solamente 586 00:25:51,150 --> 00:25:53,069 pueden hacer referencia a la clase 587 00:25:53,069 --> 00:25:55,109 alumno, clases del mismo 588 00:25:55,109 --> 00:26:13,559 paquete, ¿vale? 589 00:26:13,660 --> 00:26:17,589 es decir, si yo aquí no le pongo 590 00:26:17,589 --> 00:26:18,150 el public 591 00:26:18,150 --> 00:26:20,130 no le pongo el public 592 00:26:20,130 --> 00:26:24,079 ¿vale? pero utilidades 593 00:26:24,079 --> 00:26:32,220 está aquí, fijaos 594 00:26:32,220 --> 00:26:33,039 aquí utilidades 595 00:26:33,039 --> 00:26:36,140 en el mismo paquete, le acabo de subir al paquete 596 00:26:36,140 --> 00:26:38,220 modelo, aquí no ha habido ningún 597 00:26:38,220 --> 00:26:40,299 problema, porque está en el 598 00:26:40,299 --> 00:26:41,660 mismo paquete, está en modelo 599 00:26:41,660 --> 00:26:44,160 con lo cual, aunque alumno no tiene public 600 00:26:44,160 --> 00:26:46,099 cualquier clase 601 00:26:46,099 --> 00:26:48,259 de ese paquete puede hacer referencia a ella 602 00:26:48,259 --> 00:26:50,279 pero en mi caso 603 00:26:50,279 --> 00:26:52,180 anterior, que utilidades estaba en un 604 00:26:52,180 --> 00:26:54,079 paquete aparte, porque a mi me interesa 605 00:26:54,079 --> 00:26:55,980 yo quiero que esté en un paquete aparte 606 00:26:55,980 --> 00:26:58,180 porque se organiza 607 00:26:58,180 --> 00:27:00,099 pues me dice, perdona 608 00:27:00,099 --> 00:27:02,559 Pero alumno, es que no sé ni quién es 609 00:27:02,559 --> 00:27:04,180 Este import, no lo quiero 610 00:27:04,180 --> 00:27:05,259 No 611 00:27:05,259 --> 00:27:07,119 Me lo ha metido el suelo 612 00:27:07,119 --> 00:27:09,759 Vale, este no lo quiero 613 00:27:09,759 --> 00:27:12,400 O sea, perdón, este alumno, lo siento, no lo veo 614 00:27:12,400 --> 00:27:14,079 Vale, pues primer paso 615 00:27:14,079 --> 00:27:15,400 Ah, claro, ¿cómo lo vas a ver? 616 00:27:15,880 --> 00:27:17,279 Primera cosa imprescindible 617 00:27:17,279 --> 00:27:20,920 Public delante del class 618 00:27:20,920 --> 00:27:22,480 Ahora ya 619 00:27:22,480 --> 00:27:24,240 Hacemos el primer paso, y solo el primero 620 00:27:24,240 --> 00:27:26,279 Para poder 621 00:27:26,279 --> 00:27:27,579 Hacer referencia a esta clase 622 00:27:27,579 --> 00:27:29,220 Vale 623 00:27:29,220 --> 00:27:32,400 poniendo el public se me ha quitado el error 624 00:27:32,400 --> 00:27:34,720 no, me sigue diciendo 625 00:27:34,720 --> 00:27:36,640 alumno no lo conozco 626 00:27:36,640 --> 00:27:38,259 ¿por qué no lo conozco? 627 00:27:38,640 --> 00:27:40,460 porque ahora ya sí que os digo la verdad 628 00:27:40,460 --> 00:27:42,400 entera, que os hemos mentido 629 00:27:42,400 --> 00:27:44,200 hasta ahora, alumno 630 00:27:44,200 --> 00:27:46,259 no es el nombre de esta clase 631 00:27:46,259 --> 00:27:46,740 en realidad 632 00:27:46,740 --> 00:27:50,299 el nombre de esta clase tiene que llevar 633 00:27:50,299 --> 00:27:52,420 como prefijo su package 634 00:27:52,420 --> 00:27:54,339 entonces esta clase en realidad 635 00:27:54,339 --> 00:27:56,240 se llama modelo 636 00:27:56,240 --> 00:27:57,480 punto alumno 637 00:27:57,480 --> 00:27:59,259 es como se llama de verdad 638 00:27:59,259 --> 00:28:00,960 con lo cual 639 00:28:00,960 --> 00:28:02,660 si yo pongo su nombre real 640 00:28:02,660 --> 00:28:04,799 ahora ya se calla 641 00:28:04,799 --> 00:28:07,059 ahora ya sí que lo encuentra 642 00:28:07,059 --> 00:28:08,740 este error de aquí ya lo veremos luego 643 00:28:08,740 --> 00:28:10,799 modelo.alumno 644 00:28:10,799 --> 00:28:11,779 ningún problema 645 00:28:11,779 --> 00:28:13,380 ¿vale? 646 00:28:14,940 --> 00:28:17,299 porque el nombre verdadero de la clase 647 00:28:17,299 --> 00:28:18,980 es el del package 648 00:28:18,980 --> 00:28:20,519 punto su clase 649 00:28:20,519 --> 00:28:25,720 independientemente de cómo sea el package 650 00:28:25,720 --> 00:28:27,500 imaginaos que yo me voy a hacer 651 00:28:27,500 --> 00:28:30,519 tengo algunas entidades especiales 652 00:28:30,519 --> 00:28:32,660 que quiero yo 653 00:28:32,660 --> 00:28:34,319 que estén guardadas físicamente 654 00:28:34,319 --> 00:28:35,759 en una subcarpeta de modelo 655 00:28:35,759 --> 00:28:38,599 pues vamos a hacernos unas entidades especiales 656 00:28:38,599 --> 00:28:40,579 y las vamos a meter 657 00:28:40,579 --> 00:28:42,119 en un paquete, new package 658 00:28:42,119 --> 00:28:43,720 modelo 659 00:28:43,720 --> 00:28:46,240 punto especiales 660 00:28:46,240 --> 00:28:51,000 vale, pues como veis 661 00:28:51,000 --> 00:28:52,339 modelo especiales 662 00:28:52,339 --> 00:28:53,759 es otra 663 00:28:53,759 --> 00:28:56,180 es otra 664 00:28:56,180 --> 00:29:00,200 es otro paquete 665 00:29:00,200 --> 00:29:01,440 que está al mismo nivel 666 00:29:01,440 --> 00:29:06,680 está exactamente al mismo nivel 667 00:29:06,680 --> 00:29:08,920 que modelo y que utilidades, modelo especiales 668 00:29:08,920 --> 00:29:10,259 exactamente al mismo 669 00:29:10,259 --> 00:29:12,799 otro paquete con sus clases 670 00:29:12,799 --> 00:29:14,680 lo que pasa es que 671 00:29:14,680 --> 00:29:16,819 al llamarse modelo.especiales 672 00:29:16,819 --> 00:29:18,180 físicamente 673 00:29:18,180 --> 00:29:20,839 está guardada una subcarpeta de este 674 00:29:20,839 --> 00:29:22,180 pero esa java le da igual 675 00:29:22,180 --> 00:29:23,500 ¿vale? 676 00:29:24,200 --> 00:29:26,980 pero a nosotros, pues mira, nos gusta así porque visualmente 677 00:29:26,980 --> 00:29:28,380 nos lo vemos mejor 678 00:29:28,380 --> 00:29:30,980 si yo veo aquí modelo.especiales 679 00:29:30,980 --> 00:29:32,500 veo que aquí van a ir 680 00:29:32,500 --> 00:29:35,099 las clases especiales del modelo 681 00:29:35,099 --> 00:29:36,779 es una cuestión 682 00:29:36,779 --> 00:29:37,559 de claridad 683 00:29:37,559 --> 00:29:40,779 mucho mejor 684 00:29:40,779 --> 00:29:42,579 hacer modelo.especiales 685 00:29:42,579 --> 00:29:43,839 que un paquete especiales y más 686 00:29:43,839 --> 00:29:45,200 porque especiales, especiales de qué 687 00:29:45,200 --> 00:29:48,000 sin embargo si veo modelo.especiales 688 00:29:48,000 --> 00:29:49,559 son entidades especiales 689 00:29:49,559 --> 00:29:52,000 es por una cuestión de claridad 690 00:29:52,000 --> 00:29:52,940 del diseño 691 00:29:52,940 --> 00:29:54,700 bueno pues ahora 692 00:29:54,700 --> 00:29:56,759 efectivamente 693 00:29:56,759 --> 00:29:58,460 si yo entrara 694 00:29:58,460 --> 00:30:00,859 en la estructura de carpetas 695 00:30:00,859 --> 00:30:02,420 de mi proyecto, si yo entrara 696 00:30:02,420 --> 00:30:04,720 que podemos entrar con el show in 697 00:30:04,720 --> 00:30:06,099 system explorer 698 00:30:06,099 --> 00:30:08,700 entramos en la estructura de carpetas de mi 699 00:30:08,700 --> 00:30:10,680 proyecto, que está aquí 700 00:30:10,680 --> 00:30:12,839 efectivamente, ¿qué tengo? 701 00:30:13,900 --> 00:30:14,420 tengo 702 00:30:14,420 --> 00:30:16,180 modelo, carpeta modelo 703 00:30:16,180 --> 00:30:17,759 carpeta utilidades 704 00:30:17,759 --> 00:30:20,140 utilidades tienen 705 00:30:20,140 --> 00:30:21,480 su clase 706 00:30:21,480 --> 00:30:24,480 modelo tiene su clase 707 00:30:24,480 --> 00:30:26,460 y además tiene la subcarpeta 708 00:30:26,460 --> 00:30:27,880 especiales 709 00:30:27,880 --> 00:30:30,160 que tendrá la clase que voy a hacer ahora 710 00:30:30,160 --> 00:30:32,099 ¿vale? 711 00:30:32,140 --> 00:30:34,539 luego tengo tres paquetes con la peculiaridad 712 00:30:34,539 --> 00:30:35,759 que da exactamente igual 713 00:30:35,759 --> 00:30:38,400 de que una carpeta está dentro de la otra 714 00:30:38,400 --> 00:30:40,559 y eso afecta al nombre 715 00:30:40,559 --> 00:30:42,000 del paquete, ya está, al nombre 716 00:30:42,000 --> 00:30:43,940 y le da claridad, nada más 717 00:30:43,940 --> 00:30:46,539 bueno, pues imaginaos que modelo especial 718 00:30:46,539 --> 00:30:48,380 vamos a meter ahora una clase 719 00:30:48,380 --> 00:30:49,019 que sea 720 00:30:49,019 --> 00:30:52,200 pues alumno 721 00:30:52,200 --> 00:30:56,359 ciego, por ejemplo 722 00:30:56,359 --> 00:31:14,500 Necesita adaptación visual. Pues el alumno ciego tendrá, como todos los alumnos, su nombre e imaginaos que tiene un grado, yo que sé, de discapacidad visual, pues su propiedad grado. 723 00:31:16,140 --> 00:31:23,559 Vale, pues fijaos dónde está esta clase alumno ciego. Esta clase alumno ciego está en el paquete modelo.especiales. 724 00:31:23,559 --> 00:31:25,859 ¿qué significa eso? 725 00:31:25,980 --> 00:31:27,599 que el verdadero nombre de la clase 726 00:31:27,599 --> 00:31:28,619 el verdadero nombre 727 00:31:28,619 --> 00:31:32,660 es modelo.especiales.alumnociego 728 00:31:32,660 --> 00:31:35,460 por ejemplo 729 00:31:35,460 --> 00:31:37,819 si en mi clase utilidades 730 00:31:37,819 --> 00:31:39,779 yo ahora 731 00:31:39,779 --> 00:31:42,240 quisiera hacer algo con los alumnos ciegos 732 00:31:42,240 --> 00:31:43,299 en mi clase utilidades 733 00:31:43,299 --> 00:31:44,660 por ejemplo 734 00:31:44,660 --> 00:31:46,460 he ver grado 735 00:31:46,460 --> 00:31:52,380 perdón 736 00:31:52,380 --> 00:31:58,660 devolver grado del 737 00:31:58,660 --> 00:32:01,160 pues le tendría que pasar un alumno ciego 738 00:32:01,160 --> 00:32:04,900 si le paso alumno ciego 739 00:32:04,900 --> 00:32:08,279 sin más 740 00:32:08,279 --> 00:32:12,029 el compilador 741 00:32:12,029 --> 00:32:13,369 como nos podemos imaginar 742 00:32:13,369 --> 00:32:15,869 me dice a mi sentencia 743 00:32:15,869 --> 00:32:16,869 que debería ser 744 00:32:16,869 --> 00:32:19,809 retun a punto grado 745 00:32:19,809 --> 00:32:20,490 ¿no? 746 00:32:22,970 --> 00:32:25,089 a mi sentencia de retun a punto grado 747 00:32:25,089 --> 00:32:26,730 bueno, aquí el método me dice 748 00:32:26,730 --> 00:32:28,549 eh, alumno ciego no lo conozco 749 00:32:28,549 --> 00:32:30,670 pero a ver, si es public 750 00:32:30,670 --> 00:32:32,329 ¿cómo no vas a poder hacer referencia? 751 00:32:32,430 --> 00:32:35,069 él es public, ya, pero es que su nombre no es este 752 00:32:35,069 --> 00:32:36,829 su nombre es 753 00:32:36,829 --> 00:32:43,849 modelo.especiales.alumnociego 754 00:32:43,849 --> 00:32:46,349 ahora ya sí que lo ve perfectamente 755 00:32:46,349 --> 00:32:47,490 ¿vale? 756 00:32:49,640 --> 00:32:52,099 entonces el verdadero nombre de la clase para Java 757 00:32:52,099 --> 00:32:54,460 no es el nombre que ponemos aquí arriba 758 00:32:54,460 --> 00:32:57,660 es el con todo su paquete 759 00:32:57,660 --> 00:32:58,740 ¿por qué? 760 00:32:58,740 --> 00:33:01,500 porque así la máquina virtual va a poder navegar fácilmente 761 00:33:01,500 --> 00:33:03,059 por el sistema de archivos hasta que lo encuentra 762 00:33:03,059 --> 00:33:09,640 si no, hasta ahí estamos 763 00:33:09,640 --> 00:33:13,460 vale, pero claro 764 00:33:13,460 --> 00:33:17,160 normalmente si una aplicación está bien diseñada 765 00:33:17,160 --> 00:33:20,220 y yo tengo las cosas unas metidas dentro de otras 766 00:33:20,220 --> 00:33:23,539 por claridad, puedo tener a lo mejor paquetes 767 00:33:23,539 --> 00:33:25,799 que sean un montón de subcarpetas 768 00:33:25,799 --> 00:33:29,299 modelo, punto especiales, punto no sé qué, punto no sé cuánto 769 00:33:29,299 --> 00:33:32,160 porque así tengo más claridad a la vista 770 00:33:32,160 --> 00:33:33,660 para ver qué significa cada cosa 771 00:33:33,660 --> 00:33:38,019 entonces podría llegar un momento en que mi código fuera un rollo 772 00:33:38,019 --> 00:33:39,359 que te mueres 773 00:33:39,359 --> 00:33:41,759 porque tuviera aquí punto no sé qué 774 00:33:41,759 --> 00:33:43,119 punto no sé cuánto, punto no sé cuánto 775 00:33:43,119 --> 00:33:44,720 entonces para salvarme de eso 776 00:33:44,720 --> 00:33:47,839 para salvarme y no tener que arrastrar todo eso 777 00:33:47,839 --> 00:33:49,779 aquí es donde 778 00:33:49,779 --> 00:33:50,440 entra el import 779 00:33:50,440 --> 00:33:53,359 imagínate que tenemos que usar 780 00:33:53,359 --> 00:33:55,079 alumno ciego en mil sitios 781 00:33:55,079 --> 00:33:57,019 de mi clase aquí, utilidades 782 00:33:57,019 --> 00:33:59,400 alumno ciego en mil sitios 783 00:33:59,400 --> 00:34:01,839 jolín, qué rollo escribir esto todo el rato 784 00:34:01,839 --> 00:34:02,940 que es una línea larguísima 785 00:34:02,940 --> 00:34:05,000 me quedan líneas de código enormes 786 00:34:05,000 --> 00:34:07,900 vale, pues puedo hacer una trampa 787 00:34:07,900 --> 00:34:08,900 que es 788 00:34:08,900 --> 00:34:10,280 pones import 789 00:34:10,280 --> 00:34:12,900 y el nombre de la clase 790 00:34:12,900 --> 00:34:14,079 que quieres acortar 791 00:34:14,079 --> 00:34:16,860 quiero acortar esta clase 792 00:34:16,860 --> 00:34:21,440 vale, pues a partir de ahí 793 00:34:21,440 --> 00:34:23,239 la puedes llamar 794 00:34:23,239 --> 00:34:24,500 siempre como alumno ciego 795 00:34:24,500 --> 00:34:26,119 no hace falsa que pongas su prefijo 796 00:34:26,119 --> 00:34:28,059 si has puesto el import 797 00:34:28,059 --> 00:34:29,280 vale 798 00:34:29,280 --> 00:34:32,659 entonces como hemos puesto el import 799 00:34:32,659 --> 00:34:34,760 de toda esa clase con todo su nombre 800 00:34:34,760 --> 00:34:36,639 ahora ya 801 00:34:36,639 --> 00:34:38,659 puedo usarla con su nombre corto 802 00:34:38,659 --> 00:34:39,059 corto. 803 00:34:40,820 --> 00:34:42,739 Luego, el nombre real es el largo. 804 00:34:44,420 --> 00:34:46,519 El nombre corto lo puedo 805 00:34:46,519 --> 00:34:48,480 usar si me echo un import 806 00:34:48,480 --> 00:34:50,480 antes con el nombre largo. Si no me echo 807 00:34:50,480 --> 00:34:52,000 un import con el nombre largo, pues no. 808 00:34:54,679 --> 00:34:56,340 ¿Y ahora tenemos un objeto 809 00:34:56,340 --> 00:34:58,260 de esta clase? Bueno, eso ya 810 00:34:58,260 --> 00:35:00,360 cuando hagamos la principal. No estamos en ello todavía. 811 00:35:00,619 --> 00:35:02,199 ¿Vale? Ahora mismo estamos en un método que 812 00:35:02,199 --> 00:35:04,360 recibirá cuando haya una aplicación 813 00:35:04,360 --> 00:35:06,260 ejecutándose. Sí, habrá que crear un objeto de 814 00:35:06,260 --> 00:35:08,260 esos y pasárselo. ¿Vale? 815 00:35:11,940 --> 00:35:13,340 Entonces, puedo usar el nombre 816 00:35:13,340 --> 00:35:14,300 recorto aquí 817 00:35:14,300 --> 00:35:16,039 sin paquete 818 00:35:16,039 --> 00:35:21,659 porque he puesto 819 00:35:21,659 --> 00:35:23,539 import 820 00:35:23,539 --> 00:35:29,800 pero cuidado, un segundín y ahora me preguntas 821 00:35:29,800 --> 00:35:31,940 pero cuidado con los import 822 00:35:31,940 --> 00:35:34,059 ¿vale? que tienen su truco también 823 00:35:34,059 --> 00:35:37,579 porque imaginaos que yo tengo 824 00:35:37,579 --> 00:35:40,820 dentro de utilidades 825 00:35:40,820 --> 00:35:43,619 tengo una clase que se llama alumno ciego 826 00:35:43,619 --> 00:35:45,360 no hay ningún problema 827 00:35:45,360 --> 00:35:47,679 yo podría hacerme aquí en utilidades 828 00:35:47,679 --> 00:35:48,940 una clase alumno ciego 829 00:35:48,940 --> 00:35:55,260 no sé por qué querría hacerlo 830 00:35:55,260 --> 00:35:57,139 pero como poder podría 831 00:35:57,139 --> 00:35:59,719 imaginaos que me hago una clase aquí alumno ciego 832 00:35:59,719 --> 00:36:00,800 dentro de utilidades 833 00:36:00,800 --> 00:36:03,860 tengo dos clases que se llaman igual 834 00:36:03,860 --> 00:36:05,260 no pasa nada 835 00:36:05,260 --> 00:36:06,860 porque están en paquetes distintos 836 00:36:06,860 --> 00:36:09,780 su nombre real, el de esta es 837 00:36:09,780 --> 00:36:12,659 modelo.especiales.alumnociego 838 00:36:12,659 --> 00:36:14,579 y el de esta es utilidades.alumnociego 839 00:36:14,579 --> 00:36:16,280 son dos clases distintas 840 00:36:16,280 --> 00:36:17,199 con nombres distintos 841 00:36:17,199 --> 00:36:19,199 Java no tiene ningún problema con eso 842 00:36:19,199 --> 00:36:21,539 ¿cuándo puede llegar el problema? 843 00:36:21,539 --> 00:36:24,420 cuando aquí en esta utilidades hacemos este import 844 00:36:24,420 --> 00:36:26,440 porque ahora 845 00:36:26,440 --> 00:36:28,539 cuando pongamos alumno ciego 846 00:36:28,539 --> 00:36:30,760 ¿a qué alumno ciego te refieres? 847 00:36:31,139 --> 00:36:32,800 al que está en tu propio 848 00:36:32,800 --> 00:36:33,400 paquete 849 00:36:33,400 --> 00:36:35,519 o al del import 850 00:36:35,519 --> 00:36:38,659 pues por defecto él asume que te refieres 851 00:36:38,659 --> 00:36:40,039 al de tu propio paquete 852 00:36:40,039 --> 00:36:42,139 con lo cual 853 00:36:42,139 --> 00:36:44,659 desde aquí tenemos 854 00:36:44,659 --> 00:36:46,599 se nos ha limitado el acceso 855 00:36:46,599 --> 00:36:48,280 a clases alumno ciego de otros 856 00:36:48,280 --> 00:36:49,619 con el import 857 00:36:49,619 --> 00:36:51,519 entonces en esta situación 858 00:36:51,519 --> 00:36:53,079 yo nunca usaría el import 859 00:36:53,079 --> 00:36:55,460 las distinguiría por su nombre real 860 00:36:55,460 --> 00:36:57,619 y pondría aquí 861 00:36:57,619 --> 00:36:58,420 su nombre real 862 00:36:58,420 --> 00:37:03,320 modelo.especiales 863 00:37:04,739 --> 00:37:07,059 .alumnociego 864 00:37:07,059 --> 00:37:08,719 y aquí no hay duda, me refiero a la del otro 865 00:37:08,719 --> 00:37:11,199 me refiero a la del otro, porque he puesto el nombre 866 00:37:11,199 --> 00:37:13,079 completo, me refiero a la del otro 867 00:37:13,079 --> 00:37:15,179 pero si yo 868 00:37:15,179 --> 00:37:16,079 por ahorrarme 869 00:37:16,079 --> 00:37:18,940 escribir líneas, digo 870 00:37:18,940 --> 00:37:19,880 no pasa nada 871 00:37:19,880 --> 00:37:22,820 me voy ahí de chulo 872 00:37:22,820 --> 00:37:24,059 y hago el import 873 00:37:24,059 --> 00:37:26,039 digo, no pasa nada, me echo el import 874 00:37:26,039 --> 00:37:28,539 como me echo el import, puedo usar alumno ciego 875 00:37:28,539 --> 00:37:29,039 sin más 876 00:37:29,039 --> 00:37:32,579 uso alumno ciego sin más, pues la hemos liado 877 00:37:32,579 --> 00:37:34,760 porque ahora, alumno ciego 878 00:37:34,760 --> 00:37:36,940 él sobreentiende que te refieres 879 00:37:36,940 --> 00:37:38,780 a la del propio paquete 880 00:37:38,780 --> 00:37:39,840 que se llama así 881 00:37:39,840 --> 00:37:41,679 ¿vale? 882 00:37:42,260 --> 00:37:44,579 luego, cuidado con los import cuando hay 883 00:37:44,579 --> 00:37:46,519 clases que se llaman igual en diferentes 884 00:37:46,519 --> 00:37:48,599 paquetes, ¿vale? esa situación 885 00:37:48,599 --> 00:37:50,280 hay que resolverla bien 886 00:37:50,280 --> 00:37:52,019 lo que importa es que entendáis 887 00:37:52,019 --> 00:37:53,800 la situación a la que me refiero 888 00:37:53,800 --> 00:37:55,820 en esta 889 00:37:55,820 --> 00:37:58,699 como tengo dentro de mi clase utilidades 890 00:37:58,699 --> 00:37:59,880 un alumno ciego 891 00:37:59,880 --> 00:38:02,000 si yo no pongo prefijo 892 00:38:02,000 --> 00:38:03,980 es la del propio paquete 893 00:38:03,980 --> 00:38:05,179 no es la del import 894 00:38:05,179 --> 00:38:07,880 luego puede estar haciendo algo 895 00:38:07,880 --> 00:38:09,599 que no es lo que yo quiero 896 00:38:09,599 --> 00:38:12,500 vale, pero claro, esta situación 897 00:38:12,500 --> 00:38:14,039 pues no la queremos 898 00:38:14,039 --> 00:38:16,199 me voy a quitar esta clase de aquí 899 00:38:16,199 --> 00:38:17,900 delete, me la quito 900 00:38:17,900 --> 00:38:20,940 y aquí ya no hay problema con el import 901 00:38:20,940 --> 00:38:22,519 no hay problema 902 00:38:22,519 --> 00:38:23,900 me refiero a esta 903 00:38:23,900 --> 00:38:27,880 vale, pues entonces 904 00:38:27,880 --> 00:38:30,539 ya esto nos ha dejado 905 00:38:30,539 --> 00:38:33,179 bien con nombre corto o largo 906 00:38:33,179 --> 00:38:34,519 me da igual 907 00:38:34,519 --> 00:38:36,980 aquí hemos usado el nombre largo para modelo alumno 908 00:38:36,980 --> 00:38:39,179 aquí hemos usado el nombre corto 909 00:38:39,179 --> 00:38:41,079 para alumno ciego porque teníamos el import 910 00:38:41,079 --> 00:38:41,840 no pasa nada 911 00:38:41,840 --> 00:38:43,460 vale 912 00:38:43,460 --> 00:38:47,079 pues ahora ya nos ha dejado 913 00:38:47,079 --> 00:38:48,340 sin error de compilación 914 00:38:48,340 --> 00:38:49,500 acceder 915 00:38:49,500 --> 00:38:52,139 ¿por qué? porque alumno 916 00:38:52,139 --> 00:38:53,119 tiene public 917 00:38:53,119 --> 00:38:56,099 y alumno ciego tiene public 918 00:38:56,099 --> 00:38:58,460 también, si no tiene public 919 00:38:58,460 --> 00:39:00,280 me da igual import, me da igual lo que sea 920 00:39:00,280 --> 00:39:00,980 que no puedo 921 00:39:00,980 --> 00:39:04,579 vale, hasta ahí está 922 00:39:04,579 --> 00:39:08,300 ¿no? bueno, pero sigue 923 00:39:08,300 --> 00:39:10,539 habiendo algo aquí que parece ser que está sin resolver 924 00:39:10,539 --> 00:39:13,980 ¿qué me dice? o.nombre 925 00:39:13,980 --> 00:39:16,099 nombre no está visible 926 00:39:16,099 --> 00:39:17,639 y aquí me dice lo mismo 927 00:39:17,639 --> 00:39:19,920 me dice grado no está visible 928 00:39:19,920 --> 00:39:21,900 vamos a ver 929 00:39:21,900 --> 00:39:23,920 claro, es que 930 00:39:23,920 --> 00:39:26,280 poner el public delante de la clase 931 00:39:26,280 --> 00:39:28,619 solamente te sirve 932 00:39:28,619 --> 00:39:30,280 para poder hacer referencia 933 00:39:30,280 --> 00:39:30,860 a esa clase 934 00:39:30,860 --> 00:39:34,480 pero luego, todo lo que hay dentro 935 00:39:34,480 --> 00:39:35,820 propiedades y métodos 936 00:39:35,820 --> 00:39:38,380 tú ya les tienes que hacer a cada uno 937 00:39:38,380 --> 00:39:39,780 de ellos public o no 938 00:39:39,780 --> 00:39:41,719 a cada uno de ellos por separado 939 00:39:41,719 --> 00:39:44,300 la clase alumno es public 940 00:39:44,300 --> 00:39:46,260 con lo cual yo he podido hacer referencia a ella 941 00:39:46,260 --> 00:39:47,320 aquí 942 00:39:47,320 --> 00:39:50,260 pero luego cuando he intentado acceder 943 00:39:50,260 --> 00:39:52,360 meterme dentro y acceder a nombre 944 00:39:52,360 --> 00:39:54,539 perdona pero nombre 945 00:39:54,539 --> 00:39:56,460 nombre no es public 946 00:39:56,460 --> 00:39:58,099 con lo cual a nombre no te dejo 947 00:39:58,099 --> 00:40:02,099 puede ser que haya otro parámetro que sí 948 00:40:02,099 --> 00:40:03,519 pero a public a este no 949 00:40:03,519 --> 00:40:06,159 pues que tenemos que hacer para que además 950 00:40:06,159 --> 00:40:07,679 de poder hacer referencia alumno 951 00:40:07,679 --> 00:40:10,400 además me deje entrar en nombre 952 00:40:10,400 --> 00:40:13,059 pues ponerle aquí el public 953 00:40:13,059 --> 00:40:16,340 luego los modificadores public 954 00:40:16,340 --> 00:40:18,699 afectan tanto a clases 955 00:40:18,699 --> 00:40:21,380 como a propiedades 956 00:40:21,380 --> 00:40:24,820 para la clase es imprescindible 957 00:40:24,820 --> 00:40:25,659 es el primer paso 958 00:40:25,659 --> 00:40:28,039 porque es para poder hacer referencia a ella 959 00:40:28,039 --> 00:40:30,340 pero ahora ya 960 00:40:30,340 --> 00:40:33,119 si yo me quiero meter dentro de las cosas 961 00:40:33,119 --> 00:40:34,320 además 962 00:40:34,320 --> 00:40:35,579 además 963 00:40:35,579 --> 00:40:37,780 esas cosas tienen que tener public 964 00:40:37,780 --> 00:40:38,940 ¿vale? 965 00:40:45,820 --> 00:40:47,400 no, porque a lo mejor tú quieres 966 00:40:47,400 --> 00:40:48,820 dar acceso a unos sí y a otros no. 967 00:40:50,059 --> 00:40:51,199 Entonces, desde el momento en que 968 00:40:51,199 --> 00:40:53,239 quieres dar acceso solo a uno, 969 00:40:54,280 --> 00:40:55,360 el public tiene que estar. 970 00:40:55,760 --> 00:40:57,039 Porque el public tiene que estar 971 00:40:57,039 --> 00:40:59,579 ya solamente para poder poner tu identificador, 972 00:40:59,679 --> 00:41:00,900 para poder hacer el constructor, new. 973 00:41:02,360 --> 00:41:03,340 Es decir, ya solamente 974 00:41:03,340 --> 00:41:05,360 para poder yo aquí escribir modelo alumno 975 00:41:05,360 --> 00:41:06,219 ya tiene que estar el public. 976 00:41:06,820 --> 00:41:09,179 Ahora hay otra cosa que yo me meta dentro, 977 00:41:09,300 --> 00:41:10,059 como me he metido aquí. 978 00:41:12,119 --> 00:41:13,219 ¿Vale? Entonces, 979 00:41:14,300 --> 00:41:15,599 esto es para yo hacer referencia 980 00:41:15,599 --> 00:41:17,139 a la clase. Y ahora, 981 00:41:17,139 --> 00:41:19,340 si además quiero dar 982 00:41:19,340 --> 00:41:21,239 acceso a 983 00:41:21,239 --> 00:41:22,639 propiedades 984 00:41:22,639 --> 00:41:25,500 tengo que 985 00:41:25,500 --> 00:41:27,179 marcarlas como public 986 00:41:27,179 --> 00:41:30,159 por ejemplo 987 00:41:30,159 --> 00:41:32,320 es que yo puedo querer 988 00:41:32,320 --> 00:41:34,860 dar acceso al nombre, pero a lo mejor tiene un identificador 989 00:41:34,860 --> 00:41:35,519 interno 990 00:41:35,519 --> 00:41:45,429 hombre, por seguridad, efectivamente 991 00:41:45,429 --> 00:41:47,889 porque tú quieres proteger, encapsular 992 00:41:47,889 --> 00:41:49,469 tú ofreces al exterior 993 00:41:49,469 --> 00:41:51,349 solo lo imprescindible 994 00:41:51,349 --> 00:41:53,349 porque si ofreces más parámetros 995 00:41:53,349 --> 00:41:54,949 el otro se puede meter por error 996 00:41:54,949 --> 00:41:57,150 y poner punto id y meterse en el id 997 00:41:57,150 --> 00:41:59,650 y a lo mejor tú no quieres que se pueda meter en el id 998 00:41:59,650 --> 00:42:01,309 ¿vale? entonces un segundito 999 00:42:01,309 --> 00:42:03,110 ahora, por ejemplo aquí 1000 00:42:03,110 --> 00:42:05,269 el public aquí tiene que estar 1001 00:42:05,269 --> 00:42:07,190 pero dentro de que está este public 1002 00:42:07,190 --> 00:42:09,389 a este le doy acceso 1003 00:42:09,389 --> 00:42:10,909 y a este no 1004 00:42:10,909 --> 00:42:13,289 con lo cual 1005 00:42:13,289 --> 00:42:14,750 desde utilidades 1006 00:42:14,750 --> 00:42:17,449 ahora ya sí que me 1007 00:42:17,449 --> 00:42:18,670 deja hacer el opunto nombre 1008 00:42:18,670 --> 00:42:21,250 pero si yo hubiera querido por lo que fuera 1009 00:42:21,250 --> 00:42:22,389 mostrar el id 1010 00:42:22,389 --> 00:42:25,650 pues al id me dice 1011 00:42:25,650 --> 00:42:27,610 no, id no es visible 1012 00:42:27,610 --> 00:42:29,590 a id no te dejo que entres 1013 00:42:29,590 --> 00:42:31,650 porque id no tiene 1014 00:42:31,650 --> 00:42:32,150 el public 1015 00:42:32,150 --> 00:42:34,769 a nombre sí que te dejo 1016 00:42:34,769 --> 00:42:37,650 y de hecho a nombre nos ha dejado 1017 00:42:37,650 --> 00:42:38,949 para comparar el carácter 1018 00:42:38,949 --> 00:42:40,090 pero a id no 1019 00:42:40,090 --> 00:42:45,900 solo nos deja 1020 00:42:45,900 --> 00:42:51,610 acceder a las 1021 00:42:51,610 --> 00:42:53,010 propiedades marcadas 1022 00:42:53,010 --> 00:43:00,530 marcadas como public 1023 00:43:00,530 --> 00:43:02,750 es decir 1024 00:43:02,750 --> 00:43:04,090 A esta no nos deja 1025 00:43:04,090 --> 00:43:06,570 A esta no nos dejaría 1026 00:43:06,570 --> 00:43:09,250 A esta 1027 00:43:09,250 --> 00:43:10,210 Pues no nos deja 1028 00:43:10,210 --> 00:43:13,329 ¿Vale? 1029 00:43:13,329 --> 00:43:13,389 ¿Vale? 1030 00:43:15,869 --> 00:43:16,469 Julín 1031 00:43:16,469 --> 00:43:20,309 El asterisco 1032 00:43:20,309 --> 00:43:21,670 ¿Dónde está? 1033 00:43:22,030 --> 00:43:23,230 Aquí ¿Vale? 1034 00:43:23,750 --> 00:43:26,800 A esta primera de aquí 1035 00:43:26,800 --> 00:43:28,000 No nos está dejando 1036 00:43:28,000 --> 00:43:29,079 A esta otra sí 1037 00:43:29,079 --> 00:43:34,460 Vale, aquí lo mismo 1038 00:43:34,460 --> 00:43:37,320 para yo poder devolver 1039 00:43:37,320 --> 00:43:39,019 el grado de mi alumno ciego 1040 00:43:39,019 --> 00:43:41,239 yo no puedo acceder a la propiedad 1041 00:43:41,239 --> 00:43:43,139 grado de alumno ciego 1042 00:43:43,139 --> 00:43:45,019 si no la he puesto pública, pues aquí igual 1043 00:43:45,019 --> 00:43:46,880 a.grado me dice 1044 00:43:46,880 --> 00:43:48,159 lo siento pero no es visible 1045 00:43:48,159 --> 00:43:50,420 claro, es que si me voy a alumno ciego 1046 00:43:50,420 --> 00:43:53,239 la clase está como pública, luego puedo hacer referencia 1047 00:43:53,239 --> 00:43:54,380 pero el grado no 1048 00:43:54,380 --> 00:43:56,340 luego tendría que poner un public 1049 00:43:56,340 --> 00:43:59,039 así estaría haciendo public 1050 00:43:59,039 --> 00:44:00,539 los dos, si quiero uno sí y otro no 1051 00:44:00,539 --> 00:44:02,039 pues en líneas separadas, como fuera 1052 00:44:02,039 --> 00:44:04,599 ahora ya al ser public 1053 00:44:04,599 --> 00:44:06,440 este ya 1054 00:44:06,440 --> 00:44:08,860 sí que me deja acceder al 1055 00:44:08,860 --> 00:44:10,119 grado, ¿vale? 1056 00:44:10,679 --> 00:44:12,000 Jesús, ¿qué vas a preguntar? 1057 00:44:16,929 --> 00:44:18,750 Justo, efectivamente 1058 00:44:18,750 --> 00:44:22,809 los que tú quieras que sean llamados 1059 00:44:22,809 --> 00:44:24,530 desde fuera de la clase 1060 00:44:24,530 --> 00:44:25,550 ¿vale? 1061 00:44:26,110 --> 00:44:32,769 vale, pues entonces 1062 00:44:32,769 --> 00:44:34,690 hasta aquí está claro, y ahora vamos a parar un momento 1063 00:44:34,690 --> 00:44:36,829 cosas que tienen que estar 1064 00:44:36,829 --> 00:44:38,309 claras, que 1065 00:44:38,309 --> 00:44:40,630 la aplicación reparte las clases 1066 00:44:40,630 --> 00:44:41,469 en paquetes 1067 00:44:41,469 --> 00:44:44,969 lo normal es que una de esos paquetes 1068 00:44:44,969 --> 00:44:46,309 sea la que tenga el método main 1069 00:44:46,309 --> 00:44:47,510 que hace ya las cosas 1070 00:44:47,510 --> 00:44:48,530 ¿vale? 1071 00:44:49,570 --> 00:44:51,789 ahora, clase en un paquete 1072 00:44:51,789 --> 00:44:53,630 su nombre real 1073 00:44:53,630 --> 00:44:56,510 se convierte en su nombre cortito 1074 00:44:56,510 --> 00:44:58,389 el de aquí, con todo el prefijo 1075 00:44:58,389 --> 00:44:59,309 del paquete delante 1076 00:44:59,309 --> 00:45:01,250 y ese es su nombre real 1077 00:45:01,250 --> 00:45:03,409 para yo instanciarla, para lo que quiera 1078 00:45:03,409 --> 00:45:06,489 ¿que me quiero ahorrar el nombre largo? 1079 00:45:06,489 --> 00:45:09,369 donde yo quiera hacer referencia 1080 00:45:09,369 --> 00:45:11,289 a ella, como aquí, donde quiera hacer 1081 00:45:11,289 --> 00:45:13,269 referencia, pues hago 1082 00:45:13,269 --> 00:45:15,050 el import con su nombre largo 1083 00:45:15,050 --> 00:45:15,750 y ya está 1084 00:45:15,750 --> 00:45:19,510 cada vez que quiera acceder a ella, pongo el corto y se acabó 1085 00:45:19,510 --> 00:45:21,329 ¿vale? esto cuidado con el 1086 00:45:21,329 --> 00:45:23,210 matiz de si tengo clases que se llaman igual 1087 00:45:23,210 --> 00:45:25,530 que ahí se genera 1088 00:45:25,530 --> 00:45:27,269 la ambigüedad, eso por un lado 1089 00:45:27,269 --> 00:45:28,469 y ahora por otro 1090 00:45:28,469 --> 00:45:31,210 ¿cómo 1091 00:45:31,210 --> 00:45:33,530 puedo hacer yo referencia y acceder 1092 00:45:33,530 --> 00:45:35,690 a propiedades de una clase 1093 00:45:35,690 --> 00:45:37,849 desde otro paquete, desde una clase desde otro 1094 00:45:37,849 --> 00:45:39,550 pues tengo que poner este 1095 00:45:39,550 --> 00:45:40,889 modificador en la clase 1096 00:45:40,889 --> 00:45:43,070 solo para hacer referencia a la clase 1097 00:45:43,070 --> 00:45:45,889 y ahora ya cada propiedad 1098 00:45:45,889 --> 00:45:47,449 identificar las que quiero y las que no 1099 00:45:47,449 --> 00:45:49,349 si no ponemos el public 1100 00:45:49,349 --> 00:45:50,730 esas propiedades 1101 00:45:50,730 --> 00:45:53,530 solo se pueden acceder desde la 1102 00:45:53,530 --> 00:45:54,510 propia clase 1103 00:45:54,510 --> 00:45:57,570 perdón, desde el propio paquete 1104 00:45:57,570 --> 00:45:58,789 ¿vale? 1105 00:45:59,050 --> 00:46:01,530 si no se pone solo desde el mismo 1106 00:46:01,530 --> 00:46:03,449 paquete, por ejemplo, si yo me hago 1107 00:46:03,449 --> 00:46:04,809 un main o me hago lo que sea 1108 00:46:04,809 --> 00:46:06,710 dentro de mi clase modelo 1109 00:46:06,710 --> 00:46:09,070 esa clase modelo puede acceder 1110 00:46:09,070 --> 00:46:10,829 al ID sin problema, porque es una clase 1111 00:46:10,829 --> 00:46:12,329 que está en el mismo paquete 1112 00:46:12,329 --> 00:46:13,969 en el mismo, vale 1113 00:46:13,969 --> 00:46:15,289 dime 1114 00:46:15,289 --> 00:46:18,429 yo lo que hacía para acceder a una variable 1115 00:46:18,429 --> 00:46:19,769 o cualquier cosa que tenía en otra clase 1116 00:46:19,769 --> 00:46:22,449 era que llamaba el objeto y llamaba esa variable 1117 00:46:22,449 --> 00:46:25,130 creaba un objeto de esa clase 1118 00:46:25,130 --> 00:46:26,369 y le llamaba, pero con el public 1119 00:46:26,369 --> 00:46:28,050 pues no funciona tan bien en la otra 1120 00:46:28,050 --> 00:46:30,409 la demás clase que tengamos en este paquete 1121 00:46:30,409 --> 00:46:31,309 no funciona tan bien en la otra 1122 00:46:31,309 --> 00:46:34,150 tiene que tener el public para tú poder llamar 1123 00:46:34,150 --> 00:46:35,750 esa propiedad desde otra clase 1124 00:46:35,750 --> 00:46:41,409 eso es otra cosa 1125 00:46:41,409 --> 00:46:43,250 que hayamos dos clases iguales 1126 00:46:43,250 --> 00:46:45,750 si están en diferentes paquetes no da ningún error 1127 00:46:45,750 --> 00:46:47,349 es lo que acabamos de explicar 1128 00:46:47,349 --> 00:46:50,610 el problema es cuando tú haces un import 1129 00:46:50,610 --> 00:46:52,610 porque entonces 1130 00:46:52,610 --> 00:46:53,710 estás haciendo un alias 1131 00:46:53,710 --> 00:46:56,590 y a esta clase le estás dando como alias 1132 00:46:56,590 --> 00:46:58,769 un nombre que ya existe en tu paquete 1133 00:46:58,769 --> 00:47:00,809 entonces ahora ya tienes 1134 00:47:00,809 --> 00:47:02,210 la confusión servida 1135 00:47:02,210 --> 00:47:04,650 tienes una clase en tu paquete 1136 00:47:04,650 --> 00:47:05,429 que se llama Pepito 1137 00:47:05,429 --> 00:47:07,289 Una clase en otro paquete 1138 00:47:07,289 --> 00:47:08,110 Que se llama Pepito 1139 00:47:08,110 --> 00:47:11,030 Hago un alias de esa otra con Pepito 1140 00:47:11,030 --> 00:47:12,670 Pues dos iguales, no puede ser 1141 00:47:12,670 --> 00:47:14,809 Venga, vamos a