1 00:00:00,000 --> 00:00:02,480 Ha quedado más o menos claro, ¿no? 2 00:00:02,480 --> 00:00:04,839 Que cuando las clases se distribuyen en varios paquetes, 3 00:00:05,000 --> 00:00:07,660 tenemos el problema de que tenemos ya que dar permiso. 4 00:00:09,699 --> 00:00:13,580 Entonces, lo que me ha preguntado Pablo al final, 5 00:00:14,480 --> 00:00:17,539 pues sí, claro, uno puede, el import, 6 00:00:18,079 --> 00:00:21,000 si ponéis un paquete, un paquete cualquiera, el que sea, 7 00:00:21,000 --> 00:00:27,559 y ponéis asterisco, ponéis asterisco, 8 00:00:27,559 --> 00:00:29,539 eso es como decir 9 00:00:29,539 --> 00:00:32,520 puedes usar sin el nombre largo 10 00:00:32,520 --> 00:00:34,880 todas las clases del paquete 11 00:00:34,880 --> 00:00:36,539 es como importarlas de golpe todas 12 00:00:36,539 --> 00:00:38,000 entonces si secretaría 13 00:00:38,000 --> 00:00:40,000 además de secretario tuviera 20 más 14 00:00:40,000 --> 00:00:43,079 puede usarlas todas con su nombre corto 15 00:00:43,079 --> 00:00:45,039 pero cuidado 16 00:00:45,039 --> 00:00:46,759 porque eso es peligroso 17 00:00:46,759 --> 00:00:48,560 es una práctica de programación muy horrible 18 00:00:48,560 --> 00:00:49,399 poner el asterisco 19 00:00:49,399 --> 00:00:52,179 porque estás haciendo visibles 20 00:00:52,179 --> 00:00:52,979 desde aquí 21 00:00:52,979 --> 00:00:56,399 a un montón de clases de las que a lo mejor no eres consciente 22 00:00:56,399 --> 00:00:58,840 porque tú no tienes por qué saber 23 00:00:58,840 --> 00:01:00,579 todas las clases que hay en este paquete 24 00:01:00,579 --> 00:01:02,000 que has cogido de Pepito Pérez 25 00:01:02,000 --> 00:01:04,079 que a lo mejor tiene seguramente 2.000 26 00:01:04,079 --> 00:01:06,620 entonces si pones el asterisco 27 00:01:06,620 --> 00:01:08,620 estás haciendo visibles las 2.000 28 00:01:08,620 --> 00:01:10,299 y puede 29 00:01:10,299 --> 00:01:12,540 que alguna de esas 2.000 30 00:01:12,540 --> 00:01:14,540 se llame igual que otra 31 00:01:14,540 --> 00:01:16,420 de otro paquete del cual también estás haciendo import 32 00:01:16,420 --> 00:01:18,659 con lo cual ahí va a coger 33 00:01:18,659 --> 00:01:20,099 la del primer import siempre 34 00:01:20,099 --> 00:01:22,579 entonces puede haber 35 00:01:22,579 --> 00:01:24,260 efectos secundarios en la aplicación 36 00:01:24,260 --> 00:01:27,180 hacéis dos import punto asterisco 37 00:01:27,180 --> 00:01:29,700 dos clases se llaman igual 38 00:01:29,700 --> 00:01:31,359 coge siempre 39 00:01:31,359 --> 00:01:33,140 si tú la pones sin el nombre largo abajo 40 00:01:33,140 --> 00:01:34,459 coge siempre la del primero 41 00:01:34,459 --> 00:01:37,120 eso es lo que quieres que ocurra, vale, es ya como 42 00:01:37,120 --> 00:01:39,359 tener demasiadas cosas bajo control 43 00:01:39,359 --> 00:01:40,840 se va a escapar de tu control 44 00:01:40,840 --> 00:01:43,280 entonces, a menos que los import 45 00:01:43,280 --> 00:01:45,159 te queden de más de 100 líneas 46 00:01:45,159 --> 00:01:45,799 que los hay 47 00:01:45,799 --> 00:01:49,219 100 líneas de import, las hay, no pasa nada 48 00:01:49,219 --> 00:01:51,180 pues a menos que ya estés 49 00:01:51,180 --> 00:01:53,079 harto, pon un asterisco 50 00:01:53,079 --> 00:01:55,019 pero bueno, si se puede evitar 51 00:01:55,019 --> 00:01:57,340 pues evita, si se puede evitar sin un coste 52 00:01:57,340 --> 00:01:57,840 demasiado 53 00:01:57,840 --> 00:02:01,340 pero bueno, si tengo un paquete que yo sé que esas clases 54 00:02:01,340 --> 00:02:03,480 claro, si lo tienes todo bajo control 55 00:02:03,480 --> 00:02:04,299 sí, ¿vale? 56 00:02:08,639 --> 00:02:10,780 pues a ver en la uni no, pero sí 57 00:02:10,780 --> 00:02:11,400 hice 58 00:02:11,400 --> 00:02:16,300 vale, pues más o menos 59 00:02:16,300 --> 00:02:18,159 se ha quedado claro, pero yo he mencionado 60 00:02:18,159 --> 00:02:20,120 ahí que hay más modificadores aparte 61 00:02:20,120 --> 00:02:22,479 del public, pues para que pintan esos modificadores 62 00:02:22,479 --> 00:02:23,900 vale, pues a ver 63 00:02:23,900 --> 00:02:25,800 ¿qué ocurre cuando 64 00:02:25,800 --> 00:02:28,159 en general 65 00:02:28,159 --> 00:02:30,099 lo que está dentro de una clase 66 00:02:30,099 --> 00:02:31,759 tanto propiedades 67 00:02:31,759 --> 00:02:33,280 como métodos 68 00:02:33,280 --> 00:02:35,319 se llaman miembros de la clase. 69 00:02:36,219 --> 00:02:37,939 Entonces los miembros de la clase son 70 00:02:37,939 --> 00:02:39,599 propiedades y métodos. Lo digo para 71 00:02:39,599 --> 00:02:41,340 hablar en forma general de ambos. 72 00:02:42,439 --> 00:02:44,060 Pues ¿qué ocurre cuando yo 73 00:02:44,060 --> 00:02:46,120 a un miembro de la clase, me da igual 74 00:02:46,120 --> 00:02:47,719 que sea una propiedad o un método, no le pongo 75 00:02:47,719 --> 00:02:49,740 ningún modificador delante. Ninguno. 76 00:02:51,560 --> 00:02:51,900 Vale. 77 00:02:52,460 --> 00:02:53,939 Pues es como si le hubiera puesto 78 00:02:53,939 --> 00:02:55,439 el modificador por defecto. 79 00:02:55,800 --> 00:03:00,639 que es este, que ya no te lo coge, pues porque ya, no sé, 80 00:03:00,699 --> 00:03:03,199 antiguamente sí que te permitía cogerlo. 81 00:03:03,919 --> 00:03:11,259 Entonces, el modificador por defecto significa que es accesible ese miembro 82 00:03:11,259 --> 00:03:14,659 desde todas las clases del mismo paquete, ¿vale? 83 00:03:14,800 --> 00:03:19,340 O sea, si no ponemos nada, desde todas las clases del mismo paquete es accesible. 84 00:03:19,840 --> 00:03:22,919 Con lo cual, si yo aquí al constructor le quito el public, 85 00:03:22,919 --> 00:03:26,099 desde cualquier otra clase 86 00:03:26,099 --> 00:03:27,560 pero en el mismo paquete 87 00:03:27,560 --> 00:03:29,300 podría hacer new profesor 88 00:03:29,300 --> 00:03:31,500 desde cualquier otra clase 89 00:03:31,500 --> 00:03:32,400 pero que esté en el mismo 90 00:03:32,400 --> 00:03:34,439 desde esta main no podría 91 00:03:34,439 --> 00:03:35,919 porque esta main está en otro 92 00:03:35,919 --> 00:03:37,879 pero desde esta sí 93 00:03:37,879 --> 00:03:40,199 entonces 94 00:03:40,199 --> 00:03:43,479 ese es el modificador por defecto 95 00:03:43,479 --> 00:03:44,340 que es el no haber nada 96 00:03:44,340 --> 00:03:46,939 y luego hay uno que es 97 00:03:46,939 --> 00:03:49,439 el que más muy usado 98 00:03:49,439 --> 00:03:50,800 que es este 99 00:03:50,800 --> 00:03:54,580 ¿y este qué significa? 100 00:03:55,539 --> 00:03:56,300 este dice 101 00:03:56,300 --> 00:03:58,979 solo puedes acceder a este miembro 102 00:03:58,979 --> 00:04:00,599 desde la misma clase 103 00:04:00,599 --> 00:04:02,039 desde la misma 104 00:04:02,039 --> 00:04:05,379 ni siquiera desde clases del mismo paquete 105 00:04:05,379 --> 00:04:07,000 solo desde la misma 106 00:04:07,000 --> 00:04:08,680 ya está 107 00:04:08,680 --> 00:04:10,419 entonces 108 00:04:10,419 --> 00:04:12,800 no, a no ser desde la misma, otra cosa es que luego tú 109 00:04:12,800 --> 00:04:14,159 te inventes un, claro 110 00:04:14,159 --> 00:04:16,240 entonces diríais, anda 111 00:04:16,240 --> 00:04:19,120 ¿y para qué existe 112 00:04:19,120 --> 00:04:20,040 este modificador? 113 00:04:20,040 --> 00:04:21,680 cuando uno hace una clase 114 00:04:21,680 --> 00:04:23,779 la hace para que otras clases 115 00:04:23,779 --> 00:04:26,079 instancien objetos, accedan a las propiedades 116 00:04:26,079 --> 00:04:28,019 accedan a los métodos, hagan cosas 117 00:04:28,019 --> 00:04:30,360 si yo a este método mostrar nombre 118 00:04:30,360 --> 00:04:33,639 le pongo el private este delante 119 00:04:33,639 --> 00:04:36,480 pues el main este no lo puede usar 120 00:04:36,480 --> 00:04:38,439 por supuesto, porque es privado 121 00:04:38,439 --> 00:04:41,680 pero es que ni desde la misma clase podría 122 00:04:41,680 --> 00:04:44,279 aunque yo dentro del mismo paquete 123 00:04:44,279 --> 00:04:45,620 este entidades 124 00:04:45,620 --> 00:04:48,779 claro, imaginaos que dentro de entidades 125 00:04:48,779 --> 00:04:50,439 Me hago una clase cualquiera 126 00:04:50,439 --> 00:04:53,319 Voy a hacerme una clase prueba cualquiera 127 00:04:53,319 --> 00:04:59,060 Con un método main 128 00:04:59,060 --> 00:05:02,639 Y desde esta misma clase prueba mía 129 00:05:02,639 --> 00:05:04,939 Voy a intentar 130 00:05:04,939 --> 00:05:07,379 Bueno, un profesor podría hacer 131 00:05:07,379 --> 00:05:18,089 Vale, estoy aquí en prueba 132 00:05:18,089 --> 00:05:19,189 Profesor 133 00:05:19,189 --> 00:05:22,009 Profesor nombre 134 00:05:22,009 --> 00:05:23,449 Vamos a ponerle aquí 135 00:05:23,449 --> 00:05:28,360 Vale, a ver, estoy 136 00:05:28,360 --> 00:05:30,540 Esta clase mía prueba 137 00:05:30,540 --> 00:05:32,920 está en el mismo paquete que profesor 138 00:05:32,920 --> 00:05:33,480 en el mismo 139 00:05:33,480 --> 00:05:36,339 luego puedo instanciar 140 00:05:36,339 --> 00:05:38,040 no hace falta que ponga el nombre largo 141 00:05:38,040 --> 00:05:40,319 no hace falta ni el import ni nada 142 00:05:40,319 --> 00:05:41,939 no hace falta porque estoy en la misma 143 00:05:41,939 --> 00:05:44,920 podría poner el nombre largo 144 00:05:44,920 --> 00:05:46,279 pero no me hace ninguna falta 145 00:05:46,279 --> 00:05:49,000 podría, porque estoy en el mismo paquete 146 00:05:49,000 --> 00:05:49,560 vale 147 00:05:49,560 --> 00:05:53,079 a profesor he podido acceder 148 00:05:53,079 --> 00:05:53,740 al constructor 149 00:05:53,740 --> 00:05:56,439 porque este tiene el modificador 150 00:05:56,439 --> 00:05:58,839 por public, pero es que aunque tuviera 151 00:05:58,839 --> 00:06:00,180 el modificador por defecto 152 00:06:00,180 --> 00:06:02,439 aunque tuviera el por defecto 153 00:06:02,439 --> 00:06:06,069 podría igualmente 154 00:06:06,069 --> 00:06:06,769 desde prueba 155 00:06:06,769 --> 00:06:09,610 tanto declarar la propiedad 156 00:06:09,610 --> 00:06:11,209 como instanciar el objeto 157 00:06:11,209 --> 00:06:12,889 podría llamar al constructor igual 158 00:06:12,889 --> 00:06:15,589 porque tiene el modificador por defecto 159 00:06:15,589 --> 00:06:17,589 que es desde este mismo paquete puedes 160 00:06:17,589 --> 00:06:18,310 ¿vale? 161 00:06:20,170 --> 00:06:22,350 pero ¿qué pasa con la propiedad nombre? 162 00:06:22,730 --> 00:06:24,209 la propiedad nombre es privada 163 00:06:24,209 --> 00:06:26,250 entonces si yo desde esta clase 164 00:06:26,250 --> 00:06:27,069 que está dentro 165 00:06:27,069 --> 00:06:30,069 intento acceder a la propiedad nombre 166 00:06:30,069 --> 00:06:31,370 p.nombre 167 00:06:31,370 --> 00:06:33,149 para dar un valor 168 00:06:33,149 --> 00:06:35,029 y cambiarle de nombre 169 00:06:35,029 --> 00:06:37,189 pues me dice 170 00:06:37,189 --> 00:06:39,170 lo siento pero nombre no es visible 171 00:06:39,170 --> 00:06:41,149 esta está en la misma clase 172 00:06:41,149 --> 00:06:42,829 perdón, esta clase está en el mismo paquete 173 00:06:42,829 --> 00:06:44,829 pero nombre no es visible 174 00:06:44,829 --> 00:06:46,790 porque tiene el modificador privado 175 00:06:46,790 --> 00:06:49,269 si no lo tuviera 176 00:06:49,269 --> 00:06:50,230 claro que podría 177 00:06:50,230 --> 00:06:52,470 porque está en la misma clase 178 00:06:52,470 --> 00:06:54,750 y tiene el por defecto 179 00:06:54,750 --> 00:06:56,589 pero como tiene el privado 180 00:06:56,589 --> 00:06:57,589 pues no puedo 181 00:06:57,589 --> 00:07:00,149 ¿vale? hasta ahí lo que significa 182 00:07:00,149 --> 00:07:02,550 ahora, ¿qué sentido tiene? 183 00:07:03,410 --> 00:07:04,449 tiene que tener un sentido 184 00:07:04,449 --> 00:07:05,730 todo tiene un sentido 185 00:07:05,730 --> 00:07:09,149 en la vida, bueno, o nada, pero esto sí que lo tiene 186 00:07:09,149 --> 00:07:12,529 ¿qué sentido tiene? 187 00:07:12,930 --> 00:07:14,269 vale, cuando tú haces una clase 188 00:07:14,269 --> 00:07:16,629 tú puedes hacer primero 189 00:07:16,629 --> 00:07:18,930 cosas auxiliares, por ejemplo 190 00:07:18,930 --> 00:07:20,649 este método, a lo mejor 191 00:07:20,649 --> 00:07:22,430 quiere servirse de un método auxiliar 192 00:07:22,430 --> 00:07:23,189 para hacer algo 193 00:07:23,189 --> 00:07:26,050 y este método auxiliar lo has hecho aquí 194 00:07:26,050 --> 00:07:27,350 para llamarlo solo desde aquí 195 00:07:27,350 --> 00:07:29,850 pero no quieres que lo usen desde fuera 196 00:07:29,850 --> 00:07:30,649 porque es un método 197 00:07:30,649 --> 00:07:31,430 cuyo único uso 198 00:07:31,430 --> 00:07:32,350 es ofrecerlo desde aquí 199 00:07:32,350 --> 00:07:33,370 vale 200 00:07:33,370 --> 00:07:34,110 entonces 201 00:07:34,110 --> 00:07:35,189 a ese método 202 00:07:35,189 --> 00:07:35,709 tendría sentido 203 00:07:35,709 --> 00:07:36,410 ponerle private 204 00:07:36,410 --> 00:07:36,790 por ejemplo 205 00:07:36,790 --> 00:07:37,370 pues auxiliar 206 00:07:37,370 --> 00:07:38,670 pero en lo que 207 00:07:38,670 --> 00:07:40,170 las propiedades 208 00:07:40,170 --> 00:07:40,810 respecta 209 00:07:40,810 --> 00:07:41,870 ¿qué sentido tiene? 210 00:07:42,389 --> 00:07:43,129 si tú 211 00:07:43,129 --> 00:07:43,970 a una propiedad 212 00:07:43,970 --> 00:07:45,370 le quitas el privado 213 00:07:45,370 --> 00:07:48,170 esa propiedad 214 00:07:48,170 --> 00:07:49,290 automáticamente 215 00:07:49,290 --> 00:07:49,970 es accesible 216 00:07:49,970 --> 00:07:50,569 desde aquí 217 00:07:50,569 --> 00:07:52,029 tanto para 218 00:07:52,029 --> 00:07:52,889 recibir valor 219 00:07:52,889 --> 00:07:54,089 como para 220 00:07:54,089 --> 00:07:54,709 devolverlo 221 00:07:54,709 --> 00:07:55,230 como por ejemplo 222 00:07:55,230 --> 00:07:56,129 para mostrarlo 223 00:07:56,129 --> 00:07:59,689 con lo cual 224 00:07:59,689 --> 00:08:00,350 tú no puedes 225 00:08:00,350 --> 00:08:01,149 distinguir 226 00:08:01,149 --> 00:08:03,069 el permiso de lectura 227 00:08:03,069 --> 00:08:05,569 del de escritura. No puedes distinguirlo. 228 00:08:06,209 --> 00:08:07,149 Si yo aquí le quito 229 00:08:07,149 --> 00:08:09,050 el privado, automáticamente esta 230 00:08:09,050 --> 00:08:11,649 propiedad se hace accesible 231 00:08:11,649 --> 00:08:13,250 para clases del mismo paquete, 232 00:08:13,829 --> 00:08:14,949 tanto para leer como para escribir. 233 00:08:15,170 --> 00:08:16,709 Van en pack los dos permisos. 234 00:08:17,529 --> 00:08:19,269 Yo aquí, esto 235 00:08:19,269 --> 00:08:21,050 sería escribir en la propiedad 236 00:08:21,050 --> 00:08:23,110 nombre, escribir, y esto 237 00:08:23,110 --> 00:08:25,329 sería mostrar la propiedad 238 00:08:25,329 --> 00:08:26,610 nombre, o sea, leer de la propiedad. 239 00:08:27,750 --> 00:08:29,050 Bueno, pues hay situaciones 240 00:08:29,050 --> 00:08:30,589 en las cuales yo tengo una entidad 241 00:08:30,589 --> 00:08:32,570 y las propiedades que hay dentro 242 00:08:32,570 --> 00:08:34,350 a lo mejor quiero que sean visibles 243 00:08:34,350 --> 00:08:35,330 para ver lo que tienen 244 00:08:35,330 --> 00:08:37,529 pero no quiero que sean modificables 245 00:08:37,529 --> 00:08:38,929 no quiero que sean modificables 246 00:08:38,929 --> 00:08:39,490 por ejemplo 247 00:08:39,490 --> 00:08:42,529 entonces necesito algo alternativo 248 00:08:42,529 --> 00:08:45,590 porque si yo quito el privado 249 00:08:45,590 --> 00:08:47,090 van a ser accesibles 250 00:08:47,090 --> 00:08:48,909 tanto para ser modificadas 251 00:08:48,909 --> 00:08:50,730 como para ser leídas 252 00:08:50,730 --> 00:08:53,669 entonces si queremos ese efecto 253 00:08:53,669 --> 00:08:54,629 lograr ese efecto 254 00:08:54,629 --> 00:08:56,549 que siempre lo queremos 255 00:08:56,549 --> 00:08:58,590 en situaciones más reales 256 00:08:58,590 --> 00:09:27,590 De que una propiedad poder decidir yo si desde fuera permito solo leerla o además de leerla permito escribirla o qué, pues ¿qué mecanismo sacamos? Pues entonces, a esa propiedad, y esto sí que es el uso habitual como se hace siempre, le pongo privada, vale, privada, con lo cual al ponerla privada no puedo acceder ni para leer ni para escribir, está claro, no puedo acceder ni para leer ni para escribir, vale, la pongo privada. 257 00:09:27,590 --> 00:09:34,370 Y ahora, me hago dos métodos, uno que sirva para escribir en la propiedad 258 00:09:34,370 --> 00:09:38,470 y otro que sirva para devolver el valor de la propiedad. 259 00:09:38,990 --> 00:09:41,590 Y a esos dos métodos ya les pongo public si quiero, 260 00:09:41,750 --> 00:09:43,970 o le pongo public solo a uno y al otro no, lo que quiera. 261 00:09:44,830 --> 00:09:47,470 Y esos métodos son los famosos métodos get y set. 262 00:09:48,490 --> 00:09:50,389 Vale, vamos a hacerlos justo aquí abajo. 263 00:09:51,690 --> 00:09:56,470 Vamos a hacer un método, la estructura del método set. 264 00:09:56,470 --> 00:09:58,830 el método set es 265 00:09:58,830 --> 00:10:01,190 un método que 266 00:10:01,190 --> 00:10:02,690 no devuelve nada, tiene void 267 00:10:02,690 --> 00:10:05,190 que nombre nos ponemos todos 268 00:10:05,190 --> 00:10:06,730 de acuerdo, no es que sea obligatorio 269 00:10:06,730 --> 00:10:09,470 pero nos ponemos todos de acuerdo como programadores 270 00:10:09,470 --> 00:10:11,570 en el mundo, los 8000 millones 271 00:10:11,570 --> 00:10:13,490 de programadores que haya, de cual nos hemos 272 00:10:13,490 --> 00:10:14,950 puesto todos de acuerdo para que se 273 00:10:14,950 --> 00:10:17,610 llame ese método, nos hemos puesto todos de acuerdo 274 00:10:17,610 --> 00:10:18,590 que ese método se llame 275 00:10:18,590 --> 00:10:21,750 set y luego el nombre 276 00:10:21,750 --> 00:10:23,809 de la propiedad empezando 277 00:10:23,809 --> 00:10:24,809 en mayúscula 278 00:10:24,809 --> 00:10:30,110 Y luego le paso como parámetro 279 00:10:30,110 --> 00:10:32,009 El valor con el que quiero 280 00:10:32,009 --> 00:10:33,309 Actualizar esa propiedad 281 00:10:33,309 --> 00:10:38,559 Y ahora, ese método 282 00:10:38,559 --> 00:10:39,940 Tiene esto dentro 283 00:10:39,940 --> 00:10:42,879 No, perdón, dis.nombre 284 00:10:42,879 --> 00:10:46,490 Esto es muy 285 00:10:46,490 --> 00:10:48,730 Muy importante, los get y los set 286 00:10:48,730 --> 00:10:49,929 No es difícil 287 00:10:49,929 --> 00:10:52,909 Esto sí que es una cuestión de estudiarlo y memorizarlo 288 00:10:52,909 --> 00:10:53,549 No es difícil 289 00:10:53,549 --> 00:10:57,610 Sí, sí, sí, pero eso luego 290 00:10:57,610 --> 00:11:00,750 eso después, como con los constructores 291 00:11:00,750 --> 00:11:04,009 primero vemos lo que es y luego ya vemos la forma rápida 292 00:11:04,009 --> 00:11:05,470 vale, entonces 293 00:11:05,470 --> 00:11:09,710 este es el método que se llama 294 00:11:09,710 --> 00:11:12,350 el método set, que es un método 295 00:11:12,350 --> 00:11:16,169 que sirve para lo que estamos viendo 296 00:11:16,169 --> 00:11:18,149 le pasamos un valor desde fuera 297 00:11:18,149 --> 00:11:21,610 y coge ese valor y actualiza con él la propiedad 298 00:11:21,610 --> 00:11:24,230 luego entonces, gracias a este método 299 00:11:24,230 --> 00:11:27,169 esta propiedad puede ser privada perfectamente 300 00:11:27,169 --> 00:11:27,970 puede ser privada 301 00:11:27,970 --> 00:11:30,610 y si yo quiero darle un nuevo valor 302 00:11:30,610 --> 00:11:32,929 pues ahora ya desde mi prueba 303 00:11:32,929 --> 00:11:35,250 puedo hacer esto 304 00:11:35,250 --> 00:11:37,950 p.llamo al método 305 00:11:37,950 --> 00:11:38,970 setNombre 306 00:11:38,970 --> 00:11:40,909 y le doy el valor que quiera 307 00:11:40,909 --> 00:11:48,210 perfecto, y si ahora muestro la propiedad 308 00:11:48,210 --> 00:11:49,629 ahora la muestro 309 00:11:49,629 --> 00:11:52,330 que no puedo mostrarla porque no le es privada 310 00:11:52,330 --> 00:11:54,710 entonces no puedo mostrarla 311 00:11:54,710 --> 00:11:55,529 no puedo mostrarla 312 00:11:55,529 --> 00:11:57,389 porque es privada, pero si la mostrara 313 00:11:57,389 --> 00:11:59,850 la veremos como, pues vería que se ha cambiado el nombre 314 00:12:00,429 --> 00:12:02,370 Entonces, es a través del método set 315 00:12:02,370 --> 00:12:05,169 a través del cual yo actualizo 316 00:12:05,169 --> 00:12:07,190 el valor de una propiedad de este objeto. 317 00:12:08,470 --> 00:12:10,850 No es que sea obligatorio programar así, 318 00:12:11,570 --> 00:12:13,710 pero es el consenso que todos seguimos. 319 00:12:14,590 --> 00:12:17,509 ¿Y por qué es importantísimo seguir este consenso? 320 00:12:18,029 --> 00:12:20,129 Porque en una aplicación normal real 321 00:12:20,129 --> 00:12:22,590 no lo hemos hecho todos nosotros. 322 00:12:23,250 --> 00:12:25,009 Si todo lo que hay en nuestra aplicación 323 00:12:25,009 --> 00:12:26,669 lo hemos hecho nosotros, genial. 324 00:12:27,009 --> 00:12:28,129 Hacemos lo que nos dé la gana, 325 00:12:28,250 --> 00:12:29,450 llamemos a los métodos como queramos. 326 00:12:29,850 --> 00:12:31,889 Ponemos los private public que nos dé la gana, 327 00:12:31,970 --> 00:12:32,529 lo que queramos, 328 00:12:32,649 --> 00:12:34,309 porque todo lo que está en esa aplicación 329 00:12:34,309 --> 00:12:34,909 lo hemos hecho nosotros. 330 00:12:35,590 --> 00:12:37,309 Pero normal es que una aplicación real 331 00:12:37,309 --> 00:12:39,750 tire de clases que han hecho otros. 332 00:12:40,350 --> 00:12:42,370 Y esas clases asumen 333 00:12:42,370 --> 00:12:45,210 que cuando vayan a actualizar una propiedad tuya 334 00:12:45,210 --> 00:12:46,190 lo van a hacer a través del set, 335 00:12:46,629 --> 00:12:47,909 con lo cual van a llamar a un set. 336 00:12:48,070 --> 00:12:51,009 Si tú no tienes el set hecho con el convenio, 337 00:12:51,490 --> 00:12:53,429 te va a fallar la interacción con esas clases. 338 00:12:54,409 --> 00:12:56,070 Entonces, hay que seguir estos convenios 339 00:12:56,070 --> 00:12:58,289 porque si tú interaccionas con clases que han hecho otros, 340 00:12:58,289 --> 00:13:00,809 esos otros van a esperar que tú tengas 341 00:13:00,809 --> 00:13:03,190 tus métodos set perfectamente puestos 342 00:13:03,190 --> 00:13:05,009 con su nombre siguiendo 343 00:13:05,009 --> 00:13:06,669 esta regla, set 344 00:13:06,669 --> 00:13:09,049 nombre de la propiedad empezando en mayúscula 345 00:13:09,049 --> 00:13:10,549 de ahí la utilidad 346 00:13:10,549 --> 00:13:12,470 de que las propiedades, como ya dijimos 347 00:13:12,470 --> 00:13:13,870 empiecen en minúscula 348 00:13:13,870 --> 00:13:16,750 para que no haya confusión con los set 349 00:13:16,750 --> 00:13:17,490 ¿vale? 350 00:13:18,970 --> 00:13:20,309 vale, pues entonces 351 00:13:20,309 --> 00:13:22,649 ¿y qué ocurre? con este 352 00:13:22,649 --> 00:13:24,570 método estamos dando permiso de escritura 353 00:13:24,570 --> 00:13:26,549 pero solo hemos dado permiso de escritura 354 00:13:26,549 --> 00:13:28,830 si yo desde aquí quiero leer la variable 355 00:13:28,830 --> 00:13:30,850 no puedo, mi programa 356 00:13:30,850 --> 00:13:32,730 quiere ahora leer la variable para ver si 357 00:13:32,730 --> 00:13:34,129 realmente ha cambiado 358 00:13:34,129 --> 00:13:36,929 el nombre del 359 00:13:36,929 --> 00:13:38,769 profesor, no puedo 360 00:13:38,769 --> 00:13:40,950 he dado permiso 361 00:13:40,950 --> 00:13:42,929 de escritura con el set pero de lectura no lo he dado 362 00:13:42,929 --> 00:13:44,830 vale, pues lo puedo dar 363 00:13:44,830 --> 00:13:46,669 a través del otro método, que es el get 364 00:13:46,669 --> 00:13:48,870 el método get 365 00:13:48,870 --> 00:13:50,950 de nuevo sigue un convenio que tenemos que seguir 366 00:13:50,950 --> 00:13:55,590 ¿qué devuelve el get? como el get 367 00:13:55,590 --> 00:13:57,049 es para recuperar el valor 368 00:13:57,049 --> 00:13:59,129 devuelve el tipo de dato 369 00:13:59,129 --> 00:14:00,690 de la variable que quiero yo recuperar. 370 00:14:01,409 --> 00:14:02,970 Pues el método get me va a devolver 371 00:14:02,970 --> 00:14:04,850 en este caso para el nombre un string. 372 00:14:06,149 --> 00:14:06,789 Vale. ¿Qué 373 00:14:06,789 --> 00:14:09,210 convenio sigue el nombre del método 374 00:14:09,210 --> 00:14:11,009 get? Lo mismo, pero 375 00:14:11,009 --> 00:14:13,090 ahora get el nombre de la 376 00:14:13,090 --> 00:14:14,870 variable mayúscula. 377 00:14:14,870 --> 00:14:16,830 Y no recibe nada porque no le hace ninguna falta. 378 00:14:18,110 --> 00:14:18,909 Y ahora, ¿qué 379 00:14:18,909 --> 00:14:20,769 hace este método? Devolver la 380 00:14:20,769 --> 00:14:22,850 variable. Ya está. 381 00:14:23,889 --> 00:14:24,809 Devuelve la variable. 382 00:14:28,340 --> 00:14:29,460 Vale. Pues la variable es 383 00:14:29,460 --> 00:14:31,440 privada. Luego, yo nunca voy a hacer 384 00:14:31,440 --> 00:14:33,580 un p.nombre. No lo puedo 385 00:14:33,580 --> 00:14:34,559 hacer porque es privada. 386 00:14:35,220 --> 00:14:37,820 Pero tengo la posibilidad de actualizarla 387 00:14:37,820 --> 00:14:39,399 con el set y la 388 00:14:39,399 --> 00:14:40,779 posibilidad de recuperarla con el get. 389 00:14:41,279 --> 00:14:43,620 Luego, este system out no haría p.nombre 390 00:14:43,620 --> 00:14:45,480 porque es imposible, sino que 391 00:14:45,480 --> 00:14:47,039 haría p.getNombre. 392 00:14:48,340 --> 00:14:48,779 Dígame. 393 00:14:55,559 --> 00:14:57,440 ¿Vale? Pues esta 394 00:14:57,440 --> 00:14:59,340 es la manera habitual de programar 395 00:14:59,340 --> 00:15:01,340 las entidades. A todas 396 00:15:01,340 --> 00:15:03,419 las propiedades se las suele poner 397 00:15:03,419 --> 00:15:05,440 privadas. Y luego ya se 398 00:15:05,440 --> 00:15:06,980 hace un par de get y set 399 00:15:06,980 --> 00:15:09,000 para cada una de ellas. 400 00:15:09,899 --> 00:15:11,620 Que en una aplicación en concreto 401 00:15:11,620 --> 00:15:13,580 uno quiere que una propiedad 402 00:15:13,580 --> 00:15:14,899 sea visible para leer 403 00:15:14,899 --> 00:15:17,440 pero no para modificarla. 404 00:15:18,000 --> 00:15:19,039 Pues quitas esto. 405 00:15:19,759 --> 00:15:21,399 Quitas esto y ahora 406 00:15:21,399 --> 00:15:23,440 ya tienes tu propiedad nombre que cualquiera 407 00:15:23,440 --> 00:15:24,799 puede acceder para leerla 408 00:15:24,799 --> 00:15:27,659 pero tienes la garantía de que nadie te la va a modificar. 409 00:15:27,659 --> 00:15:30,700 ¿vale? sin estos métodos 410 00:15:30,700 --> 00:15:32,779 get y set, la alternativa que tendrías 411 00:15:32,779 --> 00:15:34,519 es quitar esto y automáticamente das 412 00:15:34,519 --> 00:15:36,720 permiso simultáneo de leer y de escribir 413 00:15:36,720 --> 00:15:38,799 pero con esto 414 00:15:38,799 --> 00:15:39,740 de los get y los set 415 00:15:39,740 --> 00:15:41,320 pues tú ya 416 00:15:41,320 --> 00:15:44,419 y estos get y set se hacen public 417 00:15:44,419 --> 00:15:46,480 claro, se hacen public porque se supone que son 418 00:15:46,480 --> 00:15:48,840 para dar acceso a clases de fuera del paquete 419 00:15:48,840 --> 00:15:50,759 estos get y set 420 00:15:50,759 --> 00:15:51,460 ya se hacen public 421 00:15:51,460 --> 00:15:53,559 ¿vale? 422 00:15:53,559 --> 00:16:08,279 pues el nombre, como se llama un método 423 00:16:08,279 --> 00:16:10,080 el nombre del objeto, punto 424 00:16:10,080 --> 00:16:12,240 el nombre del método, y esto que me va 425 00:16:12,240 --> 00:16:14,139 a devolver, me va a devolver el valor 426 00:16:14,139 --> 00:16:16,080 de la variable nombre del objeto p 427 00:16:16,080 --> 00:16:17,580 vale 428 00:16:17,580 --> 00:16:19,500 aquí estoy en el mismo paquete 429 00:16:19,500 --> 00:16:22,159 pero desde fuera del paquete que es el main 430 00:16:22,159 --> 00:16:24,320 como son public, pues lo mismo 431 00:16:24,320 --> 00:16:26,139 aquí no haría prof.nombre 432 00:16:26,139 --> 00:16:27,440 aquí lo mismo, haría 433 00:16:27,440 --> 00:16:29,600 prof.set 434 00:16:29,600 --> 00:16:36,000 nombre, ahora aquí 435 00:16:36,000 --> 00:16:38,120 sí que me deja y estoy fuera 436 00:16:38,120 --> 00:16:39,980 del paquete, estoy fuera, pero 437 00:16:39,980 --> 00:16:41,679 me deja, ¿vale? 438 00:16:45,840 --> 00:16:46,279 Efectivamente. 439 00:16:50,990 --> 00:16:52,830 Bueno, pues esto de los get y set 440 00:16:52,830 --> 00:16:54,669 básico. Entonces, normalmente 441 00:16:54,669 --> 00:16:56,730 una entidad cualquiera tiene tropecientas 442 00:16:56,730 --> 00:16:58,730 variables. Uno no hace 443 00:16:58,730 --> 00:17:00,830 el par de get y set a mano, normalmente. 444 00:17:01,929 --> 00:17:02,629 Si tiene un entorno 445 00:17:02,629 --> 00:17:04,609 de desarrollo, pues tiene la suerte que se los 446 00:17:04,609 --> 00:17:06,230 genera solos, ¿vale? 447 00:17:06,809 --> 00:17:07,910 Entonces, por ejemplo, 448 00:17:08,569 --> 00:17:11,069 en la clase secretario 449 00:17:11,069 --> 00:17:13,130 este nombre. Aquí nos 450 00:17:13,130 --> 00:17:15,309 faltan los get y set. Esta clase secretario 451 00:17:15,309 --> 00:17:16,390 si la hiciéramos bien, 452 00:17:17,269 --> 00:17:19,069 pues esta clase secretario tendría su 453 00:17:19,069 --> 00:17:21,130 propiedad privada y 454 00:17:21,130 --> 00:17:22,329 ahora haríamos los get y set 455 00:17:22,329 --> 00:17:25,029 para que el resto de clases puedan 456 00:17:25,029 --> 00:17:27,049 actualizar la propiedad o 457 00:17:27,049 --> 00:17:28,890 recuperarla como Dios manda. 458 00:17:29,930 --> 00:17:30,809 ¿Los escribimos a mano? 459 00:17:31,029 --> 00:17:33,150 Pues deberíais, para que se os quede en la cabeza 460 00:17:33,150 --> 00:17:34,049 cómo funcionan las cosas. 461 00:17:34,450 --> 00:17:36,670 Que sois unos jodidos vagos, 462 00:17:37,109 --> 00:17:38,690 pues hacéis... 463 00:17:38,690 --> 00:17:40,690 Aquí es 40 propiedades por cada... 464 00:17:40,690 --> 00:17:42,130 Claro, cuando tienes muchas propiedades 465 00:17:42,130 --> 00:17:43,029 siempre las generas así. 466 00:17:44,329 --> 00:17:45,529 Pues como hacíamos el constructor. 467 00:17:46,349 --> 00:17:47,190 Botón derecho. 468 00:17:47,490 --> 00:17:48,009 Source. 469 00:17:48,930 --> 00:17:50,609 Generar getter y setters. 470 00:17:52,410 --> 00:17:53,630 Generar getter y setter. 471 00:17:53,630 --> 00:17:55,769 ¿De qué propiedad quieres hacer getter y setter? 472 00:17:56,210 --> 00:17:56,609 De esta. 473 00:17:56,690 --> 00:17:58,190 ¿Quieres hacer los dos o solo una? 474 00:17:59,190 --> 00:17:59,829 ¿Qué quieres? 475 00:17:59,930 --> 00:18:00,750 ¿El get o el set? 476 00:18:00,849 --> 00:18:01,950 Venga, los dos. 477 00:18:02,869 --> 00:18:03,970 Ala, generados. 478 00:18:04,069 --> 00:18:04,509 Pues ya está. 479 00:18:04,690 --> 00:18:06,029 Te los generas así tan bonitos. 480 00:18:08,930 --> 00:18:09,150 ¿Vale? 481 00:18:09,369 --> 00:18:10,549 Es lo mismo que habríamos escrito. 482 00:18:10,549 --> 00:18:33,640 Bueno, pues todo el mundo sabe entonces lo que significa el modificador public, qué implicaciones tiene. Entonces, una clase no admite private, ¿no? No lo admite. Una clase o es public o no tiene nada. 483 00:18:33,640 --> 00:18:36,900 claro, es que una clase privada 484 00:18:36,900 --> 00:18:38,900 significa solo me puedo usar desde mi misma 485 00:18:38,900 --> 00:18:39,980 eso no tiene ningún sentido 486 00:18:39,980 --> 00:18:43,000 entonces cuando una clase 487 00:18:43,000 --> 00:18:43,900 tiene public 488 00:18:43,900 --> 00:18:46,819 repito, eso no significa que todo lo que está dentro 489 00:18:46,819 --> 00:18:48,900 es public, luego ya cada uno de los miembros 490 00:18:48,900 --> 00:18:49,960 de dentro ya se elige 491 00:18:49,960 --> 00:18:51,779 ya se elige 492 00:18:51,779 --> 00:18:54,759 pero desde el momento en que haya alguno solo 493 00:18:54,759 --> 00:18:56,619 que es public, solo con que haya uno 494 00:18:56,619 --> 00:18:58,380 ya en la clase se pone un public delante 495 00:18:58,380 --> 00:19:00,700 con que haya solo uno public 496 00:19:00,700 --> 00:19:02,500 y eso ya da acceso 497 00:19:02,500 --> 00:19:05,039 desde fuera del paquete, con los import correspondientes, 498 00:19:05,140 --> 00:19:06,180 con el nombre largo, etc. 499 00:19:06,700 --> 00:19:08,920 ¿Vale? Y cada miembro se va distinguiendo. 500 00:19:10,460 --> 00:19:10,900 Vale. 501 00:19:11,480 --> 00:19:12,799 Hay un cuarto modificador 502 00:19:12,799 --> 00:19:13,740 que es el protected, 503 00:19:14,140 --> 00:19:16,539 que lo vamos a dejar por ahora porque el protected 504 00:19:16,539 --> 00:19:17,839 es igual que el private, 505 00:19:18,539 --> 00:19:20,660 pero como deja usar 506 00:19:20,660 --> 00:19:22,500 además de sí misma 507 00:19:22,500 --> 00:19:23,700 a las clases herederas. 508 00:19:24,359 --> 00:19:26,619 Pero como las herederas no las conocemos todavía, pero tenemos herencia. 509 00:19:27,420 --> 00:19:28,640 Claro, el private es un 510 00:19:28,640 --> 00:19:30,799 protected, pero que incluye 511 00:19:30,799 --> 00:19:33,079 en la posibilidad de acceder a las herederas 512 00:19:33,079 --> 00:19:34,859 si pones private puedes acceder desde 513 00:19:34,859 --> 00:19:36,440 si pones private no 514 00:19:36,440 --> 00:19:37,619 solo desde la misma 515 00:19:37,619 --> 00:19:40,339 protected amplía a las herederas 516 00:19:40,339 --> 00:19:43,000 vale, ya el por defecto 517 00:19:43,000 --> 00:19:44,640 amplía a las del mismo paquete 518 00:19:44,640 --> 00:19:46,980 un poco menos restrictivo 519 00:19:46,980 --> 00:19:49,380 permite a las herederas usarlo 520 00:19:49,380 --> 00:19:50,099 vale 521 00:19:50,099 --> 00:19:52,299 al final imagino que se usará el private como 522 00:19:52,299 --> 00:19:56,839 bueno, se usa el protected mucho 523 00:19:56,839 --> 00:19:58,880 también, porque casi todas las aplicaciones 524 00:19:58,880 --> 00:20:00,000 tienen una jerarquía de herencia 525 00:20:00,000 --> 00:20:02,799 Sí 526 00:20:02,799 --> 00:20:06,420 Bueno, va también 527 00:20:06,420 --> 00:20:08,140 Depende también de la situación 528 00:20:08,140 --> 00:20:10,599 Claro 529 00:20:10,599 --> 00:20:13,059 Pero bueno, está todo clarísimo 530 00:20:13,059 --> 00:20:18,130 ¿No? Vale, pues lo tenéis 531 00:20:18,130 --> 00:20:18,890 Que revisar 532 00:20:18,890 --> 00:20:21,150 Hombre 533 00:20:21,150 --> 00:20:24,230 Vale, ya por último 534 00:20:24,230 --> 00:20:25,470 Para que veáis lo de los hard 535 00:20:25,470 --> 00:20:28,109 Ya para que veáis lo de los hard 536 00:20:28,109 --> 00:20:29,309 Vamos a hacer esta aplicación 537 00:20:29,309 --> 00:20:32,089 Que funcione, vamos a hacer un main que funcione 538 00:20:32,089 --> 00:20:33,990 Para comprimirla en un JAR 539 00:20:33,990 --> 00:20:36,210 Ver que realmente ha metido todo eso en el JAR 540 00:20:36,210 --> 00:20:37,750 Etcétera, y decirle a la máquina virtual 541 00:20:37,750 --> 00:20:38,609 Ejecuta este JAR 542 00:20:38,609 --> 00:20:40,750 Vamos a hacer eso 543 00:20:40,750 --> 00:20:45,430 Pues justo lo que he dicho vamos a hacer 544 00:20:45,430 --> 00:20:47,190 Vale, entonces 545 00:20:47,190 --> 00:20:49,509 Pero voy a hacer un main 546 00:20:49,509 --> 00:20:52,130 Una aplicación, vamos a cambiar esto para que funcione 547 00:20:52,130 --> 00:20:52,690 Porque si no 548 00:20:52,690 --> 00:20:56,970 Vale, pues este ejemplo de clase paquetes 549 00:20:56,970 --> 00:20:59,289 Tiene mi clase profesor 550 00:20:59,289 --> 00:21:01,789 Que la dejamos así con sus getty set 551 00:21:01,789 --> 00:21:03,730 y su método mostrar nombre, le quito el private 552 00:21:03,730 --> 00:21:05,009 porque luego lo vamos a... 553 00:21:05,009 --> 00:21:06,410 El código ya no es legible, ¿verdad? 554 00:21:08,779 --> 00:21:10,859 Depende si lo has exportado con los fuentes o no. 555 00:21:10,940 --> 00:21:12,460 Lo normal es que lo exportes sin los fuentes. 556 00:21:13,240 --> 00:21:13,559 Claro. 557 00:21:14,779 --> 00:21:17,119 Tienes opción de que en el hard vaya también el código fuente. 558 00:21:17,920 --> 00:21:19,019 Pero no es lo normal. 559 00:21:19,380 --> 00:21:20,180 Que me traiga el código fuente. 560 00:21:20,500 --> 00:21:23,000 Entonces tenemos la clase profesor con nombre, 561 00:21:23,160 --> 00:21:25,180 get, set, constructor y el único método 562 00:21:25,180 --> 00:21:25,819 mostrar nombre. 563 00:21:26,460 --> 00:21:29,059 Podemos llamar al get y ya está, pero bueno, 564 00:21:29,099 --> 00:21:29,720 por hacer algo. 565 00:21:30,500 --> 00:21:32,980 Tenemos secretario con sus get y set. 566 00:21:33,359 --> 00:21:38,980 Y su método también mostrar nombre que no sirve para nada, pero bueno. 567 00:21:40,359 --> 00:21:42,259 Prueba queda para ver del mismo paquete. 568 00:21:42,420 --> 00:21:43,960 Y main, que es la que se va a ejecutar. 569 00:21:44,019 --> 00:21:45,500 Seguro que hay programas que le sacan el código. 570 00:21:47,799 --> 00:21:48,779 Claro, online. 571 00:21:49,119 --> 00:21:50,000 O sea, tropecientos. 572 00:21:50,559 --> 00:21:52,299 Tú buscas de compilador online. 573 00:21:52,500 --> 00:21:53,420 Te dice, súbeme el fichero. 574 00:21:53,480 --> 00:21:53,839 Y ya está. 575 00:21:54,000 --> 00:21:54,680 Y funcionan bien. 576 00:21:55,140 --> 00:21:56,079 Claro, sí, sí, sí. 577 00:21:56,119 --> 00:21:57,539 Tiene que ser muy fácil porque te van a intentar. 578 00:21:57,880 --> 00:22:00,140 Claro, cada vez que te dan un código hard de algo. 579 00:22:00,220 --> 00:22:02,259 Yo, de hecho, cuando llegué al ministerio la primera vez, 580 00:22:02,259 --> 00:22:04,579 pero como la administración funciona tan mal desgraciadamente, 581 00:22:04,920 --> 00:22:07,319 Me dieron un montón de aplicaciones que estaban por mantener. 582 00:22:07,539 --> 00:22:11,500 Me dijeron, alguien se ha ido y esto hay que mantenerlo. 583 00:22:11,660 --> 00:22:13,819 Pues ese alguien que se había ido no había dejado el código fuente. 584 00:22:14,700 --> 00:22:18,099 Claro, entonces, pues como los descompiladores existen, 585 00:22:18,400 --> 00:22:19,299 pues lo pude descompilar. 586 00:22:19,420 --> 00:22:20,380 Si no, imposible, claro. 587 00:22:21,920 --> 00:22:24,079 Vale, pues vamos a cambiar esto para que funcione. 588 00:22:24,220 --> 00:22:25,359 New Entidades Profesor. 589 00:22:25,460 --> 00:22:28,140 Es que el constructor de profesor la había quitado al public, ¿verdad? 590 00:22:30,720 --> 00:22:31,700 ¿Dónde está el constructor? 591 00:22:31,839 --> 00:22:32,740 Sí, la había quitado al public. 592 00:22:35,930 --> 00:22:37,890 Vale, entonces el main ya... 593 00:22:37,890 --> 00:22:38,890 Este main, ¿qué va a hacer? 594 00:22:39,670 --> 00:22:42,109 Va a mostrar el nombre del profesor, 595 00:22:42,250 --> 00:22:43,210 luego va a cambiar 596 00:22:43,210 --> 00:22:45,549 el profesor a Juanito 597 00:22:45,549 --> 00:22:48,430 y va a decir el nuevo nombre es... 598 00:22:48,430 --> 00:22:49,349 Esto va a hacer este main. 599 00:22:49,470 --> 00:22:51,069 Para luego cuando lo ejecutemos desde el JAR 600 00:22:51,069 --> 00:22:55,390 para que... 601 00:22:55,390 --> 00:22:57,529 Sé que este lo quito 602 00:22:57,529 --> 00:22:58,329 porque no hace nada. 603 00:23:00,329 --> 00:23:01,549 Secretario, nada, no vale para nada. 604 00:23:03,569 --> 00:23:05,390 Bueno, es cuando probamos la otra clase. 605 00:23:05,390 --> 00:23:06,430 El nuevo nombre 606 00:23:06,430 --> 00:23:08,730 y ponemos aquí 607 00:23:08,730 --> 00:23:11,529 prof.mostrarnombre 608 00:23:11,529 --> 00:23:12,829 a la nuestra aplicación 609 00:23:12,829 --> 00:23:14,430 nada, va a hacer esto 610 00:23:14,430 --> 00:23:17,210 mostrar el primer nombre 611 00:23:17,210 --> 00:23:19,690 que es pepito y luego cambiarse y mostrar el nuevo 612 00:23:19,690 --> 00:23:21,390 vale, pues esta es nuestra 613 00:23:21,390 --> 00:23:23,390 aplicación súper sofisticada 614 00:23:23,390 --> 00:23:25,549 al get mostrarnombre 615 00:23:25,549 --> 00:23:27,690 ¿cómo? 616 00:23:27,970 --> 00:23:29,849 en vez de get nombre la llamamos mostrarnombre 617 00:23:29,849 --> 00:23:31,509 bueno, es que como ya tenía ese método 618 00:23:31,509 --> 00:23:33,089 mostrarnombre, que es lo que hemos hecho al principio 619 00:23:33,089 --> 00:23:34,630 para, pues lo uso aquí 620 00:23:34,630 --> 00:23:37,430 vale, pero no, no lo llama 621 00:23:37,430 --> 00:23:38,750 esa parte del get 622 00:23:38,750 --> 00:23:41,750 pero hace lo mismo, no, bueno, hace lo mismo 623 00:23:41,750 --> 00:23:43,630 porque este lo muestra por consola, el otro lo devuelve 624 00:23:43,630 --> 00:23:47,769 vale, entonces, esta es nuestra 625 00:23:47,769 --> 00:23:49,470 aplicación que la queremos ya distribuir 626 00:23:49,470 --> 00:23:51,349 para que alguien la use, pues 627 00:23:51,349 --> 00:23:53,430 ahora ya, esta estructura de aquí 628 00:23:53,430 --> 00:23:55,809 el eclipse, el proyecto, esto ya pierde su sentido 629 00:23:55,809 --> 00:23:57,769 ya no vale para nada, no entregamos 630 00:23:57,769 --> 00:23:59,450 el proyecto a un tío para que ese tío 631 00:23:59,450 --> 00:24:01,349 se instale un eclipse, se abra su eclipse 632 00:24:01,349 --> 00:24:03,210 y se lo abre el eclipse, eso es absurdo 633 00:24:03,210 --> 00:24:05,529 ¿qué hacemos? lo empaquetamos 634 00:24:05,529 --> 00:24:07,490 en un JAR y ya le damos el JAR y la máquina 635 00:24:07,490 --> 00:24:09,130 virtual lee el JAR directamente 636 00:24:09,130 --> 00:24:11,529 eso sí, el usuario tiene que tener una máquina 637 00:24:11,529 --> 00:24:12,990 virtual en su ordenador, simplemente 638 00:24:12,990 --> 00:24:15,470 vale, pues JAR es un comando de 639 00:24:15,470 --> 00:24:17,670 compresión que podemos irnos a la consola 640 00:24:17,670 --> 00:24:23,160 uno se puede ir a la consola 641 00:24:23,160 --> 00:24:24,519 y ejecutar este comando 642 00:24:24,519 --> 00:24:26,740 con sus opciones y luego 643 00:24:26,740 --> 00:24:28,920 darle la carpeta raíz donde está todo 644 00:24:28,920 --> 00:24:30,960 pero gracias a que tenemos 645 00:24:30,960 --> 00:24:32,140 un entorno de desarrollo 646 00:24:32,140 --> 00:24:34,859 no nos hace falta comprimir desde la consola 647 00:24:34,859 --> 00:24:36,839 entonces, pues nos 648 00:24:36,839 --> 00:24:38,359 vamos aquí a el proyecto 649 00:24:38,359 --> 00:24:40,680 que Eclipse nos hace muchas cosas 650 00:24:40,680 --> 00:24:41,799 por nosotros 651 00:24:41,799 --> 00:24:44,500 vale, entonces, a ver 652 00:24:44,500 --> 00:24:47,849 proyecto 653 00:24:47,849 --> 00:24:50,170 botón derecho 654 00:24:50,170 --> 00:24:51,769 export 655 00:24:51,769 --> 00:24:55,150 quiero exportar esto, ¿cómo lo quiero exportar? 656 00:24:55,250 --> 00:24:56,710 como un fichero hard 657 00:24:56,710 --> 00:24:58,950 vale 658 00:24:58,950 --> 00:25:00,930 entonces, pero tengo 659 00:25:00,930 --> 00:25:02,990 dos opciones, estos son clases 660 00:25:02,990 --> 00:25:05,029 sin más, como si fueran clases de librería 661 00:25:05,029 --> 00:25:07,250 para que uno de estos proyectos los importe 662 00:25:07,250 --> 00:25:08,769 haga un import, que eso también lo haremos 663 00:25:08,769 --> 00:25:11,349 con las static 664 00:25:11,349 --> 00:25:13,509 o es una aplicación 665 00:25:13,509 --> 00:25:15,650 con un main que se va a ejecutar 666 00:25:15,650 --> 00:25:17,170 esto es una aplicación con un main 667 00:25:17,170 --> 00:25:19,569 entonces las aplicaciones que tienen un main 668 00:25:19,569 --> 00:25:21,750 además de las clases comprimidas 669 00:25:21,750 --> 00:25:23,509 tienen que incorporar un pequeño 670 00:25:23,509 --> 00:25:25,369 ficherito de texto que le dice 671 00:25:25,369 --> 00:25:27,150 a la máquina virtual cuál es la que tiene el main 672 00:25:27,150 --> 00:25:29,369 entonces la máquina virtual mira el fichero de texto 673 00:25:29,369 --> 00:25:30,569 y dice ah la que tiene el main es esta 674 00:25:30,569 --> 00:25:33,589 vale, pues entonces le decimos no, que es de esas, es de las que tiene un main 675 00:25:33,589 --> 00:25:35,049 es de las que se van a ejecutar 676 00:25:35,049 --> 00:25:37,650 no son clases sin más, una tiene un main 677 00:25:37,650 --> 00:25:39,450 Entonces seleccionamos el runable 678 00:25:39,450 --> 00:25:42,390 Y ahora ya 679 00:25:42,390 --> 00:25:43,089 Next 680 00:25:43,089 --> 00:25:45,150 Y nos dice, venga 681 00:25:45,150 --> 00:25:47,349 ¿Y cuál va a ser tu clase main? 682 00:25:48,210 --> 00:25:50,769 Pues, buh, ¿dónde estará mi clase main? 683 00:25:53,150 --> 00:25:54,529 Esto se llamaba 684 00:25:54,529 --> 00:25:56,509 Ejemplo paquetes o algo así 685 00:25:56,509 --> 00:26:02,190 ¿No se llamaba ejemplo paquetes? 686 00:26:06,779 --> 00:26:08,539 Ah, ejemplo clases paquetes 687 00:26:08,539 --> 00:26:09,380 Entonces está 688 00:26:09,380 --> 00:26:12,200 ¿Por qué no me aparece aquí? 689 00:26:12,200 --> 00:26:20,619 Ah, vale, aquí 690 00:26:20,619 --> 00:26:22,700 Ah, es que me pone primero las clases 691 00:26:22,700 --> 00:26:23,279 Vale, entonces 692 00:26:23,279 --> 00:26:25,039 Ejemplo 693 00:26:25,039 --> 00:26:28,859 Buff 694 00:26:28,859 --> 00:26:31,240 Sería más fácil ponerlo a mano 695 00:26:31,240 --> 00:26:33,000 Hay que encontrar 696 00:26:33,000 --> 00:26:35,519 Sí, pero 697 00:26:35,519 --> 00:26:38,160 Tienes que poner bien la 698 00:26:38,160 --> 00:26:39,240 La cadena 699 00:26:39,240 --> 00:26:43,140 A ver, se llama main 700 00:26:43,140 --> 00:26:45,220 Entonces tiene que estar por aquí 701 00:26:45,220 --> 00:26:49,880 Ejemplo 702 00:26:49,880 --> 00:26:51,240 Clases paquetes se llama 703 00:26:51,240 --> 00:26:53,900 Entonces tiene que haber por aquí 704 00:26:53,900 --> 00:26:56,819 Una clase main de ejemplo clases paquetes 705 00:26:56,819 --> 00:27:03,069 Pues es que yo no la veo 706 00:27:03,069 --> 00:27:12,910 A ver, voy a seleccionar uno cualquiera 707 00:27:12,910 --> 00:27:13,730 Y luego se lo cambio 708 00:27:13,730 --> 00:27:19,509 No, es que no 709 00:27:19,509 --> 00:27:23,710 No, es que no me deja cambiar la mano 710 00:27:23,710 --> 00:27:25,470 Pero Jolines, es que tiene que estar ahí 711 00:27:25,470 --> 00:27:27,950 A ver, vamos a 712 00:27:27,950 --> 00:27:30,390 Espera 713 00:27:30,390 --> 00:27:34,130 Está guardado 714 00:27:34,130 --> 00:27:37,069 Abajo del todo sale 715 00:27:37,069 --> 00:27:38,490 ¿Y me lo decís ahora? 716 00:27:39,170 --> 00:27:40,150 Vamos a ver 717 00:27:40,150 --> 00:27:45,309 Yo la veo tu opinión esa 718 00:27:45,309 --> 00:27:47,809 Vamos a ver 719 00:27:47,809 --> 00:27:49,849 Export 720 00:27:49,849 --> 00:27:51,049 Empezamos otra vez 721 00:27:51,049 --> 00:27:52,970 Runable 722 00:27:52,970 --> 00:27:56,660 Next 723 00:27:56,660 --> 00:27:59,440 Y ahora 724 00:27:59,440 --> 00:28:01,799 O sea que esto del orden alfabético no lo practica 725 00:28:01,799 --> 00:28:09,950 claro 726 00:28:09,950 --> 00:28:12,650 pues es donde he estado ya mirando 727 00:28:12,650 --> 00:28:13,829 y no me sale 728 00:28:13,829 --> 00:28:21,390 ¿a vosotros ya os sale? 729 00:28:34,799 --> 00:28:36,200 no me lo puedo creer 730 00:28:36,200 --> 00:28:36,839 a ver que 731 00:28:36,839 --> 00:28:41,500 a ver 732 00:28:41,500 --> 00:28:42,539 entidades 733 00:28:42,539 --> 00:28:43,420 main 734 00:28:43,420 --> 00:28:46,859 a ver, es que si hubiera cambiado el nombre del método 735 00:28:46,859 --> 00:28:48,740 estuviera mal, pero es que está 736 00:28:48,740 --> 00:28:50,500 todo bien 737 00:28:50,500 --> 00:28:59,650 vale, a ver 738 00:28:59,650 --> 00:29:00,210 voy a ponerlo 739 00:29:00,210 --> 00:29:03,390 en el paquete main 740 00:29:03,390 --> 00:29:04,170 vamos a ver 741 00:29:04,170 --> 00:29:34,980 a ver, voy a hacer el fichero a mano y ya está 742 00:29:34,980 --> 00:29:37,059 vale, si esto es 743 00:29:37,059 --> 00:29:39,140 meter en el manifest el nombre de la clase 744 00:29:39,140 --> 00:29:40,420 entonces lo puedo hacer a mano 745 00:29:40,420 --> 00:29:44,049 a ver 746 00:29:44,049 --> 00:29:48,690 voy a, no, no hace falta 747 00:29:48,690 --> 00:29:50,650 voy a ponerle que no sea runable 748 00:29:50,650 --> 00:29:51,970 la diferencia es la misma 749 00:29:51,970 --> 00:29:54,309 a ver, ponerlo vosotros runable 750 00:29:54,309 --> 00:29:56,289 si a vosotros os aparece, pues estupendo 751 00:29:56,289 --> 00:29:57,309 entonces 752 00:29:57,309 --> 00:29:59,049 ¿lo estáis haciendo? 753 00:30:00,190 --> 00:30:00,549 vale 754 00:30:00,549 --> 00:30:07,539 sí, pero que es que a mí no me aparece en la clase 755 00:30:07,539 --> 00:30:08,099 entonces 756 00:30:08,099 --> 00:30:11,819 yo le voy a poner normal y corriente 757 00:30:11,819 --> 00:30:12,359 vale 758 00:30:12,359 --> 00:30:16,720 Bueno, o se lo añado a mano 759 00:30:16,720 --> 00:30:18,000 O se lo añado a mano en el fichero 760 00:30:18,000 --> 00:30:20,579 Venga, no es que me obligue a poner alguna 761 00:30:20,579 --> 00:30:21,700 Pues luego se la cambio yo 762 00:30:21,700 --> 00:30:22,940 Se la voy a cambiar con un par 763 00:30:22,940 --> 00:30:25,000 Venga, ala, puedo cualquier otra y se la cambio 764 00:30:25,000 --> 00:30:26,599 Venga, export 765 00:30:26,599 --> 00:30:29,579 Ala, runable hard file 766 00:30:29,579 --> 00:30:31,079 Next, vale 767 00:30:31,079 --> 00:30:33,619 ¿Dónde? 768 00:30:34,400 --> 00:30:34,759 Pues 769 00:30:34,759 --> 00:30:37,039 Lo voy a poner en el escritorio 770 00:30:37,039 --> 00:30:39,880 Pues yo en el escritorio 771 00:30:39,880 --> 00:30:41,019 Por encontrarlo rápido 772 00:30:41,019 --> 00:30:44,279 Aprofe 773 00:30:44,279 --> 00:30:46,140 el fichero lo llaméis como os dé la gana 774 00:30:46,140 --> 00:30:47,319 punto hard, vale 775 00:30:47,319 --> 00:30:49,700 guardar y ahora 776 00:30:49,700 --> 00:30:52,279 ¿cuál es tu clase principal? 777 00:30:53,420 --> 00:30:53,880 voy a poner 778 00:30:53,880 --> 00:30:55,480 si no me aparece, pongo cualquiera 779 00:30:55,480 --> 00:31:01,920 claro, es que ejemplo clase paquetes 780 00:31:01,920 --> 00:31:03,140 no aparece en ningún sitio 781 00:31:03,140 --> 00:31:09,359 si, vosotros seleccionadla 782 00:31:09,359 --> 00:31:12,420 como queráis 783 00:31:12,420 --> 00:31:13,400 ¿Qué más da? 784 00:31:13,940 --> 00:31:15,900 Es el nombre del punto de vuestra aplicación 785 00:31:15,900 --> 00:31:18,359 Como queráis, llamadla como queráis 786 00:31:18,359 --> 00:31:20,680 Vale, pues 787 00:31:20,680 --> 00:31:22,779 Yo qué sé, voy a solucionar esto mismo 788 00:31:22,779 --> 00:31:25,759 Y luego se la cambio, ya está 789 00:31:25,759 --> 00:31:27,619 A ver si, venga 790 00:31:27,619 --> 00:31:40,480 Vale, ya está 791 00:31:40,480 --> 00:31:41,599 Piti, piti 792 00:31:41,599 --> 00:31:43,660 Ala 793 00:31:43,660 --> 00:31:46,039 Ah, claro 794 00:31:46,039 --> 00:31:47,619 Es que voy a tener que descomprimirlo 795 00:31:47,619 --> 00:31:49,619 Vale, este es el hat, ¿vale? 796 00:31:49,619 --> 00:31:52,700 Entonces, este hard de aquí 797 00:31:52,700 --> 00:31:54,400 Tiene dentro 798 00:31:54,400 --> 00:31:55,900 Toda esa estructura de carpetas 799 00:31:55,900 --> 00:31:58,839 Más un ficherito que informa de cuál es la clase main 800 00:31:58,839 --> 00:32:00,420 Vale, el hard 801 00:32:00,420 --> 00:32:02,859 Se puede ver lo que hay dentro 802 00:32:02,859 --> 00:32:04,099 Con el Winzip, se puede 803 00:32:04,099 --> 00:32:05,779 Entonces, vamos a mirarlo por curiosidad 804 00:32:05,779 --> 00:32:08,039 Vale, entonces 805 00:32:08,039 --> 00:32:10,380 Aquí voy a cambiar la extensión 806 00:32:10,380 --> 00:32:11,539 O sea, voy a cambiar solo 807 00:32:11,539 --> 00:32:13,460 Para que me deje abrirlo con zip 808 00:32:13,460 --> 00:32:15,720 No, porque es que 809 00:32:15,720 --> 00:32:16,720 Mi portátil no lo 810 00:32:16,720 --> 00:32:18,460 No, porque 811 00:32:18,460 --> 00:32:21,960 me tengo que buscarla 812 00:32:21,960 --> 00:32:23,960 en el sistema de archivos y es que no tengo idea 813 00:32:23,960 --> 00:32:25,059 de dónde está, así que 814 00:32:25,059 --> 00:32:28,180 entonces es casi mejor que le cambio la extensión 815 00:32:28,180 --> 00:32:29,680 y luego se vuelva a poner y ya está 816 00:32:29,680 --> 00:32:35,369 vale 817 00:32:35,369 --> 00:32:38,430 vale, se la he cambiado 818 00:32:38,430 --> 00:32:40,569 solo para que me permita abrirla con el 819 00:32:40,569 --> 00:32:41,890 WinZip para ver lo que tiene dentro 820 00:32:41,890 --> 00:32:42,910 vale 821 00:32:42,910 --> 00:32:45,329 extra 822 00:32:45,329 --> 00:32:47,549 lo extraigo todo, vale 823 00:32:47,549 --> 00:32:50,630 vale, fijaos 824 00:32:50,630 --> 00:32:51,410 lo que tiene dentro 825 00:32:51,410 --> 00:32:54,069 Ah, claro, es que 826 00:32:54,069 --> 00:32:56,630 Es que como le he dado otra main 827 00:32:56,630 --> 00:32:57,750 Pues me ha tirado 828 00:32:57,750 --> 00:32:58,930 Me ha exportado la otra 829 00:32:58,930 --> 00:33:00,589 Es que yo no sé por qué a mí no me aparece 830 00:33:00,589 --> 00:33:03,309 ¿Vosotros habéis podido encontrar la main? 831 00:33:04,210 --> 00:33:06,170 Y al entrar dentro habréis visto 832 00:33:06,170 --> 00:33:08,390 Una carpeta entidades 833 00:33:08,390 --> 00:33:10,569 Otra carpeta main 834 00:33:10,569 --> 00:33:12,549 Dentro de entidades la carpeta secretaría 835 00:33:12,549 --> 00:33:13,950 Y habréis visto también 836 00:33:13,950 --> 00:33:16,289 Un fichero que se llama manifest.mf 837 00:33:16,289 --> 00:33:16,609 ¿O no? 838 00:33:18,130 --> 00:33:19,430 Abridmanifest.mf 839 00:33:19,430 --> 00:33:21,529 es un fichero de texto 840 00:33:21,529 --> 00:33:22,710 lo podéis abrir con el blog de notas 841 00:33:22,710 --> 00:33:27,410 si 842 00:33:27,410 --> 00:33:36,069 veréis que ese fichero 843 00:33:36,069 --> 00:33:37,309 manifest punto 844 00:33:37,309 --> 00:33:42,089 no, dentro de meta inf 845 00:33:42,089 --> 00:33:46,009 pues si lo abrís con el blog de notas 846 00:33:46,009 --> 00:33:48,309 veréis que tiene dentro el nombre de la clase 847 00:33:48,309 --> 00:33:48,730 ¿verdad? 848 00:33:49,450 --> 00:33:51,069 no tiene dentro main punto main 849 00:33:51,069 --> 00:33:53,490 pues ese fichero 850 00:33:53,490 --> 00:33:56,130 el manifest punto mf dentro de la clase meta inf 851 00:33:56,130 --> 00:33:58,230 es el que usa la máquina virtual 852 00:33:58,230 --> 00:34:00,470 para saber 853 00:34:00,470 --> 00:34:02,569 que ese es el arranque. Entonces, si vosotros ahora en la consola 854 00:34:02,569 --> 00:34:04,349 hacéis esto, 855 00:34:05,630 --> 00:34:06,109 que es 856 00:34:06,109 --> 00:34:10,090 vamos a llamar a la máquina virtual 857 00:34:10,090 --> 00:34:10,710 Java, 858 00:34:12,050 --> 00:34:13,429 le vamos a dar un hard, 859 00:34:16,099 --> 00:34:17,099 le vamos a dar un hard, 860 00:34:17,579 --> 00:34:19,380 con lo cual ponéis la opción esto para decirle 861 00:34:19,380 --> 00:34:21,260 vamos a dar un hard, y ahora ponéis aquí 862 00:34:21,260 --> 00:34:23,380 vuestro fichero, el que sea, como lo hayáis 863 00:34:23,380 --> 00:34:25,480 llamado, punto hard. 864 00:34:25,800 --> 00:34:27,440 Bueno, os tendréis que ir al escritorio, os tendréis 865 00:34:27,440 --> 00:34:28,199 que ir a donde estéis. 866 00:34:28,199 --> 00:34:30,860 pues veréis que se ejecuta la aplicación 867 00:34:30,860 --> 00:34:33,340 o sea, la máquina virtual entra dentro 868 00:34:33,340 --> 00:34:35,219 del hard, entra dentro 869 00:34:35,219 --> 00:34:37,199 del manifest, busca el main y ejecuta 870 00:34:37,199 --> 00:34:37,780 la aplicación 871 00:34:37,780 --> 00:34:48,750 ¿vale? lo podréis comprobar 872 00:34:48,750 --> 00:34:50,590 que eso funciona así, gran misterio 873 00:34:50,590 --> 00:34:52,489 mío, ¿por qué