1 00:00:00,000 --> 00:00:08,000 Voy a grabar este vídeo, por lo tanto, si habláis, me autorizáis a que grabe. 2 00:00:08,000 --> 00:00:17,000 Vale, entonces, hemos visto el Main, hemos visto la diferencia entre Static y no Static, 3 00:00:17,000 --> 00:00:21,000 ahora luego haremos ejemplos y probaremos un poco las cosas. 4 00:00:22,000 --> 00:00:33,000 Vamos a hablar de otro tema más sencillo, que es la organización del código. 5 00:00:33,000 --> 00:00:38,000 Hasta ahora nosotros principalmente lo que hemos hecho es crear clases, 6 00:00:38,000 --> 00:00:41,000 creamos un proyecto y creamos clases allí dentro. 7 00:00:41,000 --> 00:00:46,000 Algunos de vosotros sí que han empezado a crear paquetes, lo que se llaman packages. 8 00:00:47,000 --> 00:00:55,000 La idea es que yo pueda estructurar mejor las varias secciones de mi código, 9 00:00:55,000 --> 00:01:01,000 las varias secciones de mi sistema, creando paquetes de clases. 10 00:01:01,000 --> 00:01:13,000 Todas las clases que están relacionadas con un tema más amplio, más general, 11 00:01:13,000 --> 00:01:16,000 las puedo poner dentro del mismo package. 12 00:01:16,000 --> 00:01:25,000 De esta forma organizo mejor el código y se queda más fácil de mantener 13 00:01:25,000 --> 00:01:28,000 y sobre todo más fácil de reutilizar. 14 00:01:32,000 --> 00:01:39,000 En principio no, porque los ejercicios que hacemos nosotros son ejercicios que son sencillos. 15 00:01:40,000 --> 00:01:45,000 Cuando yo hago un proyecto, que es un proyecto serio, estoy haciendo una escuela 16 00:01:45,000 --> 00:01:48,000 y hay un montón de cosas que tener en cuenta, 17 00:01:48,000 --> 00:01:55,000 entonces a lo mejor puedo crear paquetes distintos, uno para gestionar la parte del personal, 18 00:01:55,000 --> 00:02:02,000 otro paquete que se ocupe de la parte didáctica o académica de las asignaturas. 19 00:02:03,000 --> 00:02:08,000 Todo lo que es relacionado a alumnos, profesores y cosas por el estilo, 20 00:02:08,000 --> 00:02:11,000 a lo mejor lo meto en un package y lo suelto en otro package. 21 00:02:11,000 --> 00:02:15,000 Esto no quiere decir que luego entre packages no se puedan ver, 22 00:02:15,000 --> 00:02:20,000 hay formas para crear un objeto que está en otro package o cosas por el estilo. 23 00:02:20,000 --> 00:02:22,000 ¿Conocéis vosotros Scanner? 24 00:02:24,000 --> 00:02:28,000 ¿Scanner está en vuestro proyecto? 25 00:02:33,000 --> 00:02:37,000 ¿La clase Scanner la habéis escrito vosotros en vuestro programa? 26 00:02:38,000 --> 00:02:41,000 Se accede a ella que está en otro package, 27 00:02:41,000 --> 00:02:48,000 de hecho al principio si os acordáis estaba el import, import java.util.scanner, 28 00:02:48,000 --> 00:02:51,000 eso es un package, un package, 29 00:02:51,000 --> 00:02:57,000 o sea el package java que contiene un sotopackage que es el package útil 30 00:02:57,000 --> 00:02:59,000 que tiene dentro la clase Scanner. 31 00:02:59,000 --> 00:03:01,000 Entonces yo lo que puedo hacer es irme a otro package, 32 00:03:01,000 --> 00:03:05,000 importar o todo el package entero o algunas de las clases. 33 00:03:07,000 --> 00:03:13,000 Cuando yo creo packages, al principio de mi clase tengo que poner package 34 00:03:13,000 --> 00:03:15,000 y el nombre del paquete. 35 00:03:15,000 --> 00:03:17,000 Si vosotros lo habéis hecho alguna vez, ahora hacemos un ejemplo, 36 00:03:17,000 --> 00:03:20,000 pues os lo ponen automático, si lo hacéis bien. 37 00:03:21,000 --> 00:03:30,000 La idea es que estos packages, cómo se organizan los packages, 38 00:03:30,000 --> 00:03:35,000 si vais a mirar luego dentro del file system, 39 00:03:35,000 --> 00:03:40,000 cómo se están estructurando las carpetas, etc, etc, 40 00:03:40,000 --> 00:03:42,000 los paquetes, etc, etc, 41 00:03:42,000 --> 00:03:46,000 veréis que se utilizan unas carpetas, 42 00:03:46,000 --> 00:03:48,000 cada package es una carpeta, 43 00:03:48,000 --> 00:03:51,000 que estarán, si hay subpackages habrá carpetas dentro, 44 00:03:51,000 --> 00:03:54,000 y luego dentro pondremos los puntos java. 45 00:03:54,000 --> 00:03:58,000 Para entender esto, la mejor cosa es hacer un ejemplo. 46 00:04:00,000 --> 00:04:04,000 Y aquí por ejemplo, esta es la situación actual, 47 00:04:04,000 --> 00:04:08,000 tengo un proyecto nuevo con una clase prueba, 48 00:04:08,000 --> 00:04:10,000 está en el default packages, 49 00:04:10,000 --> 00:04:12,000 esto quiere decir que no hay package. 50 00:04:12,000 --> 00:04:14,000 Si voy a mirar, 51 00:04:17,000 --> 00:04:20,000 dónde está mi workspace, 52 00:04:20,000 --> 00:04:22,000 debería estar por aquí. 53 00:04:25,000 --> 00:04:29,000 Dentro del workspace, que está esta cosa de metadatos 54 00:04:29,000 --> 00:04:33,000 que se os crea cuando creáis el workspace, 55 00:04:33,000 --> 00:04:38,000 hay todos los proyectos, cada carpeta es un proyecto distinto. 56 00:04:38,000 --> 00:04:42,000 Estas carpetas se corresponden con los proyectos que tengo aquí. 57 00:04:42,000 --> 00:04:47,000 En particular, está el proyecto de hoy, 58 00:04:47,000 --> 00:04:48,000 este de aquí, 59 00:04:48,000 --> 00:04:52,000 si lo busco aquí hay una carpeta que tiene el mismo nombre. 60 00:04:52,000 --> 00:04:58,000 Si entro dentro de esta carpeta, tengo varias cosas, 61 00:04:58,000 --> 00:05:00,000 nos interesa principalmente, 62 00:05:00,000 --> 00:05:02,000 search en bin, 63 00:05:02,000 --> 00:05:05,000 search es los fuentes, 64 00:05:05,000 --> 00:05:07,000 es esta carpeta de aquí, 65 00:05:07,000 --> 00:05:10,000 se corresponde, si entro dentro de source, 66 00:05:12,000 --> 00:05:15,000 encuentro prueba.java. 67 00:05:16,000 --> 00:05:19,000 Aquí directamente porque no hay ningún package, 68 00:05:19,000 --> 00:05:22,000 es solo el paquete por defecto que es nada. 69 00:05:23,000 --> 00:05:26,000 Si me voy a bin, 70 00:05:26,000 --> 00:05:28,000 encuentro las clases. 71 00:05:30,000 --> 00:05:33,000 Automáticamente Eclipse, 72 00:05:33,000 --> 00:05:39,000 lo que hace es pillarme lo que está en la carpeta source, 73 00:05:39,000 --> 00:05:42,000 compilarlo usando Java C, 74 00:05:42,000 --> 00:05:45,000 de esto y de todas las otras cosas que están en la carpeta source, 75 00:05:45,000 --> 00:05:49,000 y me guarda el resultado en la carpeta bin. 76 00:05:49,000 --> 00:05:52,000 Estos luego son los que usa para ejecutarlo 77 00:05:52,000 --> 00:05:56,000 cuando yo le doy al botón verde para que empiece a ejecutar. 78 00:05:57,000 --> 00:06:07,000 ¿Qué pasa si ahora creo aquí un nuevo package? 79 00:06:07,000 --> 00:06:11,000 Me dice, ¿cómo se llama el package? 80 00:06:11,000 --> 00:06:17,000 Le digo, ¿se llama HAKUNO? 81 00:06:17,000 --> 00:06:20,000 Fijaos que se enfada, 82 00:06:21,000 --> 00:06:26,000 mejor que el nombre del package sea en lowercase, 83 00:06:29,000 --> 00:06:31,000 y luego le doy Finish. 84 00:06:31,000 --> 00:06:35,000 Si os fijáis, aquí me ha creado un package vacío. 85 00:06:35,000 --> 00:06:40,000 ¿Qué pasa en el mundo del file system? 86 00:06:40,000 --> 00:06:42,000 Que si ahora entro en source, 87 00:06:42,000 --> 00:06:45,000 existe una carpeta nueva que es HAKUNO. 88 00:06:45,000 --> 00:06:48,000 Este es el package, dentro no hay nada. 89 00:06:51,000 --> 00:06:57,000 Si yo lo hago desde la aplicación, 90 00:06:57,000 --> 00:06:59,000 la aplicación se da cuenta de esto. 91 00:06:59,000 --> 00:07:01,000 Si yo lo hago desde fuera, 92 00:07:01,000 --> 00:07:04,000 luego tendré que decirle a la aplicación, 93 00:07:04,000 --> 00:07:05,000 oye mira, lo he creado. 94 00:07:05,000 --> 00:07:08,000 Entonces, consejo, casi siempre hacerlo desde la aplicación. 95 00:07:08,000 --> 00:07:12,000 Si usáis un IDE, haced todo desde el IDE. 96 00:07:12,000 --> 00:07:15,000 No hagáis cosas a mitad desde fuera del IDE, 97 00:07:15,000 --> 00:07:21,000 porque buscad la forma de cómo se hace en NetBeans, 98 00:07:21,000 --> 00:07:24,000 en Eclipse, en Intellij, en lo que sea, 99 00:07:24,000 --> 00:07:27,000 pero no lo hagáis vosotros directamente. 100 00:07:27,000 --> 00:07:29,000 Porque a veces no se da cuenta, 101 00:07:29,000 --> 00:07:33,000 y luego hay una diferencia entre lo que hay aquí y lo que hay. 102 00:07:37,000 --> 00:07:39,000 Si ahora yo pido prueba, 103 00:07:39,000 --> 00:07:42,000 y lo muevo dentro de HAKUNO, 104 00:07:43,000 --> 00:07:46,000 veis que aquí se queda package1, 105 00:07:46,000 --> 00:07:49,000 veis que aquí me ha añadido esto. 106 00:07:51,000 --> 00:07:56,000 Entonces ahora esta clase es parte de este package, 107 00:07:56,000 --> 00:08:00,000 y si voy aquí, veo que dentro de HAKUNO, 108 00:08:00,000 --> 00:08:03,000 ahora está prueba.java. 109 00:08:04,000 --> 00:08:07,000 ¿Puedo hacer subpackages? 110 00:08:07,000 --> 00:08:08,000 Sí. 111 00:08:09,000 --> 00:08:12,000 Botón derecho, nuevo package, 112 00:08:12,000 --> 00:08:15,000 veis que aquí me ha escrito ya HAKUNO, 113 00:08:16,000 --> 00:08:21,000 y le pongo punto, subpack 1. 114 00:08:22,000 --> 00:08:26,000 Este punto, lo que me está diciendo, 115 00:08:26,000 --> 00:08:31,000 es que soy un subpackage del package anterior. 116 00:08:32,000 --> 00:08:34,000 Le doy a finish, 117 00:08:34,000 --> 00:08:39,000 y veis que subpack me lo ha creado dentro de pack, 118 00:08:39,000 --> 00:08:41,000 como hijo de pack. 119 00:08:41,000 --> 00:08:44,000 Si quiero crear un package 2, 120 00:08:51,000 --> 00:08:55,000 entonces veis que pack1 y pack2 son hermanos, 121 00:08:55,000 --> 00:08:59,000 pero subpack es interno a esto. 122 00:08:59,000 --> 00:09:02,000 Entonces puedo hacer así. 123 00:09:05,000 --> 00:09:07,000 Está bloqueado. 124 00:09:10,000 --> 00:09:14,000 Fijaos que ahora me dice que el package al que pertenece prueba 125 00:09:14,000 --> 00:09:18,000 es package.pack1.subpack1. 126 00:09:19,000 --> 00:09:24,000 Si en algún momento yo tuviera que trabajar con prueba ahora, 127 00:09:25,000 --> 00:09:30,000 debería llamarla pack1.subpack1.prueba, 128 00:09:31,000 --> 00:09:32,000 ¿sí? 129 00:09:32,000 --> 00:09:40,000 O importar directamente prueba como import pack1.subpack1.prueba, 130 00:09:40,000 --> 00:09:42,000 y ya está. 131 00:09:42,000 --> 00:09:43,000 ¿Ok? 132 00:09:43,000 --> 00:09:45,000 Recuerdaos cuando aquí, 133 00:09:45,000 --> 00:09:49,000 scanner, scanner, es igual a new scanner, 134 00:09:49,000 --> 00:09:51,000 en el system.in, 135 00:09:57,000 --> 00:09:59,000 aquí me dice import scanner. 136 00:10:02,000 --> 00:10:06,000 Veis que aquí estoy importando del package java, 137 00:10:06,000 --> 00:10:09,000 que tiene un subpackage que se llama útil, 138 00:10:09,000 --> 00:10:14,000 estoy importando la clase scanner, 139 00:10:14,000 --> 00:10:17,000 y entonces solo la puedo utilizar tranquilamente. 140 00:10:17,000 --> 00:10:18,000 ¿Sí? 141 00:10:19,000 --> 00:10:22,000 También si yo digo, mira, de java.util, 142 00:10:22,000 --> 00:10:25,000 hay un montón de cosas en este package, 143 00:10:25,000 --> 00:10:27,000 y me interesan todas, 144 00:10:27,000 --> 00:10:29,000 podría utilizar esto. 145 00:10:30,000 --> 00:10:31,000 Esto me está diciendo, 146 00:10:31,000 --> 00:10:37,000 importa todas las clases que están dentro del package java.util. 147 00:10:39,000 --> 00:10:41,000 ¿Y qué hay en java.util? 148 00:10:41,000 --> 00:10:42,000 Ya que estamos, 149 00:10:42,000 --> 00:10:46,000 yo me puedo ir a api.java, 150 00:10:47,000 --> 00:10:49,000 de java.util, 151 00:10:52,000 --> 00:10:57,000 y aquí está un poco todo lo que está aquí dentro, 152 00:10:57,000 --> 00:10:59,000 todas estas clases, 153 00:11:00,000 --> 00:11:02,000 todas estas clases, 154 00:11:03,000 --> 00:11:06,000 de una de ellas debería ser scanner. 155 00:11:10,000 --> 00:11:12,000 Sí, sí. 156 00:11:13,000 --> 00:11:15,000 Algunas se van quitando, 157 00:11:15,000 --> 00:11:19,000 algunas se van a marcar como deprecated, 158 00:11:19,000 --> 00:11:21,000 que quiere decir no la uses, 159 00:11:22,000 --> 00:11:25,000 porque ya tiene algún problema, 160 00:11:25,000 --> 00:11:27,000 que la dejamos allí, 161 00:11:27,000 --> 00:11:31,000 para que programas hechos anteriormente que la usen, 162 00:11:31,000 --> 00:11:33,000 no dejen de funcionar, 163 00:11:33,000 --> 00:11:35,000 pero si tú estás haciendo un programa nuevo, 164 00:11:35,000 --> 00:11:37,000 pues deberías usar una alternativa, 165 00:11:37,000 --> 00:11:39,000 normalmente allí mismo te lo dice, 166 00:11:39,000 --> 00:11:41,000 te dice, mira no uses esta, usa esta otra. 167 00:11:42,000 --> 00:11:43,000 Y luego, 168 00:11:43,000 --> 00:11:46,000 algunas veces si ven que es un problema de seguridad, 169 00:11:46,000 --> 00:11:47,000 o cosa por el estilo, 170 00:11:47,000 --> 00:11:48,000 pues la quitan. 171 00:11:48,000 --> 00:11:50,000 Y tú te puedes ir a scanner, 172 00:11:51,000 --> 00:11:53,000 y ver qué puedes hacer con scanner, 173 00:11:53,000 --> 00:11:55,000 entonces aquí te describe qué es scanner, 174 00:11:55,000 --> 00:11:56,000 cómo funciona, 175 00:11:56,000 --> 00:11:57,000 por qué, 176 00:11:57,000 --> 00:11:58,000 bla, bla, bla, 177 00:11:58,000 --> 00:12:02,000 te dice todos los constructores que tienes de scanner, 178 00:12:02,000 --> 00:12:06,000 y te dice todos los programas, 179 00:12:06,000 --> 00:12:09,000 los métodos que puedes utilizar sobre scanner. 180 00:12:10,000 --> 00:12:12,000 Ahora de estas, 181 00:12:12,000 --> 00:12:14,000 hay mogollón. 182 00:12:21,000 --> 00:12:23,000 Estas son todas las clases, 183 00:12:23,000 --> 00:12:27,000 que están ya creadas dentro de Java, 184 00:12:27,000 --> 00:12:29,000 y que tú puedes reutilizar, 185 00:12:29,000 --> 00:12:31,000 para alguna de tus proyectos. 186 00:12:32,000 --> 00:12:34,000 Son unos cuantos. 187 00:12:35,000 --> 00:12:36,000 Entonces, 188 00:12:36,000 --> 00:12:37,000 cuando tú dices, 189 00:12:37,000 --> 00:12:38,000 oye mira, 190 00:12:38,000 --> 00:12:40,000 quiero hacer una comunicación a internet, 191 00:12:40,000 --> 00:12:44,000 pues posiblemente por aquí hay alguna clase, 192 00:12:44,000 --> 00:12:46,000 que te ayuda, 193 00:12:46,000 --> 00:12:48,000 porque una parte de esta comunicación, 194 00:12:48,000 --> 00:12:49,000 ya está programada, 195 00:12:49,000 --> 00:12:51,000 y tú en vez de reprogramarla desde cero, 196 00:12:51,000 --> 00:12:53,000 pues usas socket, 197 00:12:53,000 --> 00:12:54,000 usas inetadress, 198 00:12:54,000 --> 00:12:55,000 usas server socket, 199 00:12:55,000 --> 00:12:58,000 cosas que te permiten de comunicarte así. 200 00:12:58,000 --> 00:12:59,000 Oye mira, 201 00:12:59,000 --> 00:13:02,000 quiero hacer un trabajo sobre matemática, 202 00:13:02,000 --> 00:13:04,000 y necesito operaciones matemáticas, 203 00:13:04,000 --> 00:13:06,000 pues te buscas la clase math, 204 00:13:06,000 --> 00:13:07,000 o pico, 205 00:13:07,000 --> 00:13:08,000 m, n, o, 206 00:13:08,000 --> 00:13:09,000 m, m, m, 207 00:13:09,000 --> 00:13:10,000 ma, ma, ma, ma, 208 00:13:10,000 --> 00:13:11,000 math, 209 00:13:17,000 --> 00:13:19,000 Oracle ahora mismo, 210 00:13:19,000 --> 00:13:20,000 pero bueno, 211 00:13:20,000 --> 00:13:22,000 el desarrollador de Java. 212 00:13:22,000 --> 00:13:23,000 Math, 213 00:13:23,000 --> 00:13:24,000 vale, 214 00:13:24,000 --> 00:13:26,000 y aquí dentro de math, 215 00:13:26,000 --> 00:13:27,000 yo puedo irme a mirar, 216 00:13:27,000 --> 00:13:29,000 todo lo que me permite hacer math, 217 00:13:29,000 --> 00:13:30,000 math me permite, 218 00:13:30,000 --> 00:13:31,000 por ejemplo, 219 00:13:31,000 --> 00:13:33,000 aparte que me da algunos campos, 220 00:13:33,000 --> 00:13:35,000 como el valor de pi, 221 00:13:35,000 --> 00:13:40,000 o el valor de los logaritmos naturales, 222 00:13:40,000 --> 00:13:42,000 y cosas por estilo, 223 00:13:42,000 --> 00:13:43,000 y a partir de allí, 224 00:13:43,000 --> 00:13:44,000 por ejemplo, 225 00:13:44,000 --> 00:13:46,000 si yo quiero el método abs de un valor, 226 00:13:46,000 --> 00:13:48,000 esto me da el valor absoluto, 227 00:13:48,000 --> 00:13:49,000 de un double, 228 00:13:49,000 --> 00:13:50,000 de un float, 229 00:13:50,000 --> 00:13:51,000 de un int, 230 00:13:51,000 --> 00:13:52,000 de un long, 231 00:13:52,000 --> 00:13:54,000 esto es el arcoseno, 232 00:13:54,000 --> 00:13:56,000 de un valor, 233 00:13:56,000 --> 00:13:58,000 me da el arco tangente, 234 00:13:58,000 --> 00:14:01,000 el redondeado hacia arriba, 235 00:14:01,000 --> 00:14:06,000 el copiar el signo de un valor, 236 00:14:06,000 --> 00:14:08,000 el coseno de, 237 00:14:08,000 --> 00:14:09,000 que se yo, 238 00:14:09,000 --> 00:14:10,000 exponencial, 239 00:14:10,000 --> 00:14:12,000 el exponente se ha dicho, 240 00:14:12,000 --> 00:14:13,000 que se yo, 241 00:14:13,000 --> 00:14:14,000 vale, 242 00:14:14,000 --> 00:14:20,000 por aquí encontráis un montón de operaciones matemáticas, 243 00:14:20,000 --> 00:14:21,000 esto por ejemplo, 244 00:14:21,000 --> 00:14:22,000 la potencia, 245 00:14:22,000 --> 00:14:24,000 para hacer a elevado a la b, 246 00:14:24,000 --> 00:14:25,000 pues uso esto, 247 00:14:25,000 --> 00:14:27,000 creo que lo usamos una vez, 248 00:14:27,000 --> 00:14:29,000 pregunta para vosotros, 249 00:14:29,000 --> 00:14:31,000 este señor de aquí, 250 00:14:31,000 --> 00:14:34,000 ¿estático o no? 251 00:14:38,000 --> 00:14:39,000 quien dice, 252 00:14:39,000 --> 00:14:40,000 si es estático, 253 00:14:42,000 --> 00:14:43,000 quien dice, 254 00:14:43,000 --> 00:14:44,000 no, no es estático, 255 00:14:46,000 --> 00:14:47,000 quien dice, 256 00:14:47,000 --> 00:14:49,000 me gustaría estar en casa en el sofá, 257 00:14:49,000 --> 00:14:51,000 porque estoy triste, 258 00:14:51,000 --> 00:14:52,000 vale, 259 00:14:53,000 --> 00:14:54,000 esto me dice, 260 00:14:54,000 --> 00:14:55,000 esto de aquí, 261 00:14:55,000 --> 00:14:58,000 ¿vosotros lo usaríais sobre un objeto o no? 262 00:14:58,000 --> 00:15:01,000 ¿necesita un objeto que me dé que valor hacer, 263 00:15:01,000 --> 00:15:04,000 para poder hacer a elevado a la b o no? 264 00:15:16,000 --> 00:15:17,000 y por ejemplo, 265 00:15:17,000 --> 00:15:20,000 yo hago a elevado a la b, 266 00:15:21,000 --> 00:15:22,000 ¿el valor que me devuelve, 267 00:15:22,000 --> 00:15:24,000 que tipo tiene? 268 00:15:32,000 --> 00:15:35,000 porque los parámetros no son de un objeto, 269 00:15:38,000 --> 00:15:39,000 es como cuando haces, 270 00:15:40,000 --> 00:15:41,000 si es, 271 00:15:42,000 --> 00:15:44,000 para que sea estático, 272 00:15:44,000 --> 00:15:46,000 para que sea no estático, 273 00:15:47,000 --> 00:15:50,000 es esta situación de aquí, 274 00:15:50,000 --> 00:15:52,000 donde yo llamo área, 275 00:15:53,000 --> 00:15:55,000 ¿y donde están los parámetros? 276 00:15:55,000 --> 00:15:57,000 dentro del rectángulo 1, 277 00:15:57,000 --> 00:15:58,000 que es un objeto, 278 00:15:58,000 --> 00:15:59,000 que tiene su ancho, 279 00:16:00,000 --> 00:16:02,000 pero cuando en vez es estático, 280 00:16:04,000 --> 00:16:06,000 como no tienes un objeto, 281 00:16:06,000 --> 00:16:08,000 que te da el ancho y el largo, 282 00:16:08,000 --> 00:16:09,000 entonces el método es estático, 283 00:16:09,000 --> 00:16:11,000 y te pide el largo y el ancho, 284 00:16:11,000 --> 00:16:12,000 y aquí es lo mismo, 285 00:16:13,000 --> 00:16:15,000 POU te dice a y b, 286 00:16:15,000 --> 00:16:17,000 y te hace a elevado a la b, 287 00:16:17,000 --> 00:16:19,000 si hubiese un objeto exponente, 288 00:16:24,000 --> 00:16:26,000 que dentro tiene dos parámetros, 289 00:16:26,000 --> 00:16:28,000 que son base y exponente, 290 00:16:28,000 --> 00:16:30,000 entonces tendría un método, 291 00:16:30,000 --> 00:16:31,000 que es calcular, 292 00:16:31,000 --> 00:16:33,000 que simplemente lo que hace, 293 00:16:33,000 --> 00:16:34,000 es pillarse la base, 294 00:16:34,000 --> 00:16:35,000 y hacerla el exponente, 295 00:16:36,000 --> 00:16:38,000 pero como no hay un objeto, 296 00:16:38,000 --> 00:16:40,000 y como todos estos métodos de aquí, 297 00:16:40,000 --> 00:16:41,000 todas estas operaciones aquí, 298 00:16:41,000 --> 00:16:43,000 son operaciones matemáticas, 299 00:16:43,000 --> 00:16:44,000 al fin y al cabo, 300 00:16:44,000 --> 00:16:45,000 al que le paso los parámetros, 301 00:16:45,000 --> 00:16:47,000 para hacer esta operación matemática, 302 00:16:47,000 --> 00:16:49,000 pues entonces son todos estáticos, 303 00:16:49,000 --> 00:16:51,000 si te fijas son todos estáticos, 304 00:16:51,000 --> 00:16:53,000 nunca crearás un objeto math, 305 00:16:53,000 --> 00:16:55,000 siempre usarás math punto, 306 00:16:55,000 --> 00:16:57,000 la operación que quieres hacer, 307 00:16:58,000 --> 00:17:00,000 esta es una clase estática, 308 00:17:00,000 --> 00:17:02,000 puramente estática, 309 00:17:02,000 --> 00:17:04,000 ¿Entonces lo que habías dicho, 310 00:17:04,000 --> 00:17:07,000 de una potencia ligada a un exponente, 311 00:17:07,000 --> 00:17:10,000 eso por ejemplo no sería estático? 312 00:17:10,000 --> 00:17:13,000 Si yo me creara un objeto, 313 00:17:13,000 --> 00:17:16,000 que es objeto expo algo, 314 00:17:18,000 --> 00:17:20,000 que dentro tiene dos parámetros, 315 00:17:20,000 --> 00:17:22,000 que es mi base y mi exponente, 316 00:17:22,000 --> 00:17:23,000 entonces este es un objeto, 317 00:17:23,000 --> 00:17:26,000 y yo lo hago para crear un valor, 318 00:17:26,000 --> 00:17:28,000 lo que hago es crear un nuevo objeto, 319 00:17:28,000 --> 00:17:30,000 diciendo tu base es 3, 320 00:17:30,000 --> 00:17:31,000 y tu exponente es 4, 321 00:17:31,000 --> 00:17:33,000 y luego está un método calcular, 322 00:17:33,000 --> 00:17:34,000 que me pilla 3, 323 00:17:34,000 --> 00:17:35,000 me lo eleva a la 4, 324 00:17:35,000 --> 00:17:36,000 y me devuelve lo que sea, 325 00:17:36,000 --> 00:17:37,000 pues entonces no, 326 00:17:37,000 --> 00:17:39,000 sería todo no estático, 327 00:17:40,000 --> 00:17:43,000 pero a lo mejor no es un buen planteamiento, 328 00:17:46,000 --> 00:17:47,000 luego se complica, 329 00:17:47,000 --> 00:17:49,000 cada vez que yo quiero hacer A elevado a la B, 330 00:17:49,000 --> 00:17:51,000 tengo que crear un nuevo objeto, 331 00:17:51,000 --> 00:17:52,000 poniendo A, poniendo B, 332 00:17:52,000 --> 00:17:54,000 y luego pedirle cálculate, 333 00:17:54,000 --> 00:17:56,000 mientras aquí directamente lo pido, 334 00:17:56,000 --> 00:17:58,000 eso se me explica, 335 00:17:59,000 --> 00:18:02,000 entonces volviendo a los sub packages, 336 00:18:03,000 --> 00:18:05,000 fijaos que aquí también, 337 00:18:05,000 --> 00:18:08,000 lo que ha hecho es que ahora tiene PAC1 y PAC2, 338 00:18:08,000 --> 00:18:10,000 que son hermanos, 339 00:18:10,000 --> 00:18:12,000 y que si yo entro dentro de PAC1, 340 00:18:12,000 --> 00:18:13,000 está sub PAC1, 341 00:18:13,000 --> 00:18:16,000 y dentro de PAC1 está esto, 342 00:18:29,000 --> 00:18:33,000 esto era sobre organización de código, 343 00:18:33,000 --> 00:18:37,000 también aquí se habla del importar, 344 00:18:39,000 --> 00:18:44,000 otra cosa que hemos hablado, 345 00:18:44,000 --> 00:18:45,000 y que tenemos que tener en cuenta, 346 00:18:45,000 --> 00:18:48,000 es overloading o sobrecarga, 347 00:18:48,000 --> 00:18:50,000 que es que yo en una misma clase, 348 00:18:50,000 --> 00:18:53,000 puedo crear 5 métodos, 349 00:18:53,000 --> 00:18:54,000 que se llaman igual, 350 00:18:55,000 --> 00:18:57,000 los 5 métodos se llaman, 351 00:18:59,000 --> 00:19:00,000 calcular área, 352 00:19:00,000 --> 00:19:04,000 pero que cada uno me pille parámetros distintos, 353 00:19:04,000 --> 00:19:05,000 uno me pilla solo un lado, 354 00:19:05,000 --> 00:19:07,000 uno me pilla el lado de la altura, 355 00:19:07,000 --> 00:19:09,000 uno me pilla el otro lado, 356 00:19:09,000 --> 00:19:11,000 uno me pilla el lado y la hipotenusa, 357 00:19:11,000 --> 00:19:12,000 que se yo, 358 00:19:14,000 --> 00:19:17,000 la idea es que se puede sobrecargar un método, 359 00:19:17,000 --> 00:19:18,000 cuando se sobrecarga, 360 00:19:18,000 --> 00:19:20,000 cuando se llaman igual, 361 00:19:20,000 --> 00:19:22,000 el nombre es el mismo, 362 00:19:22,000 --> 00:19:24,000 lo que cambia es la firma, 363 00:19:24,000 --> 00:19:28,000 la firma es nombre y tipo de parámetros, 364 00:19:30,000 --> 00:19:33,000 no es lo mismo calcular área sin nada, 365 00:19:33,000 --> 00:19:36,000 que calcular área de string, 366 00:19:36,000 --> 00:19:38,000 que calcular área de string int, 367 00:19:38,000 --> 00:19:40,000 cada uno será un método distinto, 368 00:19:40,000 --> 00:19:43,000 se asume que todos hagan lo mismo, 369 00:19:43,000 --> 00:19:44,000 calcular área, 370 00:19:44,000 --> 00:19:46,000 pero me dan parámetros distintos, 371 00:19:46,000 --> 00:19:47,000 ejemplo, 372 00:19:52,000 --> 00:19:54,000 aquí hemos visto al principio, 373 00:19:54,000 --> 00:19:56,000 aquí por ejemplo tengo un método 374 00:19:56,000 --> 00:19:58,000 que me devuelve el valor absoluto, 375 00:19:58,000 --> 00:20:01,000 y está sobrecargado, 376 00:20:01,000 --> 00:20:04,000 que yo lo puedo pedir sobre un double, 377 00:20:04,000 --> 00:20:05,000 lo puedo pedir sobre un float, 378 00:20:05,000 --> 00:20:06,000 lo puedo pedir sobre un int, 379 00:20:06,000 --> 00:20:08,000 lo puedo pedir sobre un long, 380 00:20:08,000 --> 00:20:10,000 hace lo mismo, 381 00:20:10,000 --> 00:20:12,000 siempre te doy el valor absoluto de este número, 382 00:20:12,000 --> 00:20:13,000 si es negativo lo pongo positivo, 383 00:20:13,000 --> 00:20:15,000 si es positivo lo dejo así, 384 00:20:17,000 --> 00:20:20,000 pero este de aquí te acepta un double, 385 00:20:20,000 --> 00:20:22,000 ¿cuál uso?, 386 00:20:22,000 --> 00:20:25,000 si yo llamo math.abs de 3, 387 00:20:25,000 --> 00:20:27,000 me usa esto, 388 00:20:27,000 --> 00:20:31,000 si yo llamo math.abs de 3.0, 389 00:20:31,000 --> 00:20:33,000 me usa esto, 390 00:20:33,000 --> 00:20:37,000 si yo llamo math.abs de 3f, 391 00:20:37,000 --> 00:20:39,000 me usa esto, 392 00:20:51,000 --> 00:20:53,000 ¿a la vez o no? 393 00:21:09,000 --> 00:21:11,000 Siempre que tenga nombre, 394 00:21:11,000 --> 00:21:13,000 yo creo que te lo permito, 395 00:21:13,000 --> 00:21:16,000 siempre que la firma sea distinta, 396 00:21:16,000 --> 00:21:19,000 no puedo hacer static, saludo, 397 00:21:19,000 --> 00:21:22,000 y luego static, saludo, 398 00:21:22,000 --> 00:21:24,000 que te llame a ti mismo, 399 00:21:24,000 --> 00:21:26,000 no static, saludo, 400 00:21:26,000 --> 00:21:28,000 que te llame a tu nombre, 401 00:21:28,000 --> 00:21:30,000 porque sería la misma firma, 402 00:21:30,000 --> 00:21:31,000 entonces no, 403 00:21:31,000 --> 00:21:33,000 ¿me explico? 404 00:21:38,000 --> 00:21:40,000 Aquí tengo una prueba, 405 00:21:40,000 --> 00:21:42,000 me digo, voy a hacer un método, 406 00:21:42,000 --> 00:21:48,000 el método es public, static, saludo, 407 00:21:49,000 --> 00:21:53,000 y digo, si eso, hola, 408 00:22:03,000 --> 00:22:05,000 ahora puedo hacer uno, 409 00:22:05,000 --> 00:22:08,000 que en vez de dependa de mi nombre, 410 00:22:08,000 --> 00:22:13,000 porque prueba tiene string, nombre, 411 00:22:14,000 --> 00:22:19,000 y decir, vuelvo a hacer saludo, 412 00:22:19,000 --> 00:22:21,000 que ahora haga esto, 413 00:22:21,000 --> 00:22:23,000 más dis.nombre, 414 00:22:23,000 --> 00:22:26,000 y que no sea static, 415 00:22:26,000 --> 00:22:28,000 son distintos, 416 00:22:28,000 --> 00:22:30,000 este es static y este no, 417 00:22:30,000 --> 00:22:35,000 pero la firma es la misma, 418 00:22:35,000 --> 00:22:38,000 entonces en este caso no lo puedo hacer, 419 00:22:44,000 --> 00:22:46,000 ¿dónde? ¿aquí o aquí? 420 00:22:46,000 --> 00:22:48,000 Si aquí le pongo, por ejemplo, 421 00:22:48,000 --> 00:22:50,000 string, nombre, 422 00:22:50,000 --> 00:22:54,000 y luego aquí hago más nombre, 423 00:22:54,000 --> 00:22:56,000 esto funciona, 424 00:22:56,000 --> 00:22:59,000 y tengo la versión estática, 425 00:22:59,000 --> 00:23:01,000 que no depende del objeto, 426 00:23:01,000 --> 00:23:02,000 porque cualquiera puede llamar, 427 00:23:02,000 --> 00:23:03,000 saluda Estefano, 428 00:23:03,000 --> 00:23:04,000 y te dice, hola Estefano, 429 00:23:04,000 --> 00:23:05,000 saluda Antonio, 430 00:23:05,000 --> 00:23:06,000 hola Antonio, 431 00:23:06,000 --> 00:23:08,000 saluda Sara, hola Sara, 432 00:23:08,000 --> 00:23:09,000 o este de aquí, 433 00:23:09,000 --> 00:23:12,000 que en vez se llama sobre el objeto, 434 00:23:12,000 --> 00:23:14,000 porque no te dice quien saludar, 435 00:23:14,000 --> 00:23:16,000 quien te dice saludar es dis.nombre, 436 00:23:16,000 --> 00:23:19,000 este objeto que es este de aquí, 437 00:23:19,000 --> 00:23:24,000 entonces esto lo llamo como instancia.saludo, 438 00:23:24,000 --> 00:23:27,000 y esto lo llamo como prueba.saludo, 439 00:23:27,000 --> 00:23:30,000 de quien quiero saludar, 440 00:23:31,000 --> 00:23:32,000 Si 441 00:23:40,000 --> 00:23:44,000 Para poder sobrecargar un método, 442 00:23:44,000 --> 00:23:46,000 la firma tiene que ser distinta, 443 00:23:46,000 --> 00:23:48,000 la firma es el nombre, 444 00:23:48,000 --> 00:23:50,000 y luego los tipos de parámetros, 445 00:23:50,000 --> 00:23:52,000 como este es nombre de string, 446 00:23:52,000 --> 00:23:54,000 y este es nombre de void, 447 00:23:54,000 --> 00:23:56,000 pues me va. 448 00:24:01,000 --> 00:24:05,000 O a lo mejor usa variables estáticas que están aquí. 449 00:24:09,000 --> 00:24:11,000 Tened en cuenta también, 450 00:24:11,000 --> 00:24:14,000 que que pasa si yo aquí le pongo dis. 451 00:24:22,000 --> 00:24:24,000 ¿Por qué se enfada? 452 00:24:25,000 --> 00:24:27,000 ¿Por qué? 453 00:24:28,000 --> 00:24:33,000 Porque dis haría referencia a la instancia en la que me has llamado, 454 00:24:33,000 --> 00:24:34,000 pero ese es estático, 455 00:24:34,000 --> 00:24:36,000 no lo estás llamando sobre una instancia, 456 00:24:36,000 --> 00:24:38,000 entonces no existe, 457 00:24:38,000 --> 00:24:39,000 entonces no lo puede hacer, 458 00:24:39,000 --> 00:24:41,000 me dice, 459 00:24:41,000 --> 00:24:43,000 estás haciendo referencia, 460 00:24:43,000 --> 00:24:45,000 no puedes usar dis, 461 00:24:45,000 --> 00:24:47,000 esta palabra, 462 00:24:47,000 --> 00:24:50,000 in a static context, 463 00:24:50,000 --> 00:24:53,000 no puedes hacer referencia a esta instancia, 464 00:24:53,000 --> 00:24:56,000 en un contexto que no tiene instancias, 465 00:24:56,000 --> 00:24:58,000 que es estático. 466 00:25:00,000 --> 00:25:01,000 Pregunta, 467 00:25:01,000 --> 00:25:05,000 y si aquí en vez tuviera una variable estática, 468 00:25:11,000 --> 00:25:13,000 string, 469 00:25:17,000 --> 00:25:19,000 fijaos que si es estática, 470 00:25:19,000 --> 00:25:22,000 te la pone en cursiva, 471 00:25:23,000 --> 00:25:25,000 la puedo usar aquí, 472 00:25:26,000 --> 00:25:28,000 ¿la puedo usar aquí? 473 00:25:42,000 --> 00:25:45,000 O de hecho de otra forma, 474 00:25:45,000 --> 00:25:48,000 esto sería prueba.gato, 475 00:25:48,000 --> 00:25:51,000 esto sería prueba.gato, 476 00:25:56,000 --> 00:25:58,000 ¿sí? 477 00:25:58,000 --> 00:26:00,000 ¿Cómo? 478 00:26:00,000 --> 00:26:03,000 Es que como estoy dentro de la misma clase, 479 00:26:03,000 --> 00:26:04,000 y es estática, 480 00:26:04,000 --> 00:26:05,000 me refiero a la clase, 481 00:26:05,000 --> 00:26:07,000 entonces si la quito, 482 00:26:07,000 --> 00:26:09,000 él entiende que es esa, 483 00:26:09,000 --> 00:26:10,000 es esta, 484 00:26:10,000 --> 00:26:11,000 porque es la única, 485 00:26:11,000 --> 00:26:14,000 pero imagínate que yo fuera en otra clase, 486 00:26:14,000 --> 00:26:16,000 y quiero usar esta variable aquí, 487 00:26:16,000 --> 00:26:19,000 pues entonces la debería llamar como prueba.gato, 488 00:26:22,000 --> 00:26:24,000 ahora hacemos ejemplos, 489 00:26:24,000 --> 00:26:28,000 entonces entiende el concepto de overloading, 490 00:26:29,000 --> 00:26:30,000 ¿sí? 491 00:26:30,000 --> 00:26:32,000 Algunas veces no ha servido, 492 00:26:32,000 --> 00:26:35,000 la última cosa que tenemos que ver hoy, 493 00:26:35,000 --> 00:26:38,000 es la encapsulación y visibilidad, 494 00:26:38,000 --> 00:26:40,000 y con esto hemos acabado. 495 00:26:42,000 --> 00:26:44,000 Vale, esto ya lo hemos visto, 496 00:26:44,000 --> 00:26:46,000 pero vamos a ver que opciones tenemos, 497 00:26:46,000 --> 00:26:47,000 siempre que yo, 498 00:26:47,000 --> 00:26:48,000 por favor chicos, 499 00:26:48,000 --> 00:26:49,000 hola, 500 00:26:50,000 --> 00:26:53,000 siempre que yo defina un atributo, 501 00:26:53,000 --> 00:26:55,000 o un método, 502 00:26:55,000 --> 00:26:56,000 ¿vale? 503 00:26:56,000 --> 00:26:58,000 Le puedo decir, 504 00:26:58,000 --> 00:27:03,000 quién puede ver este atributo, 505 00:27:03,000 --> 00:27:05,000 o este método, 506 00:27:05,000 --> 00:27:06,000 ¿sí? 507 00:27:06,000 --> 00:27:07,000 ¿Cómo funciona? 508 00:27:07,000 --> 00:27:11,000 Seguramente siempre dentro de la clase 509 00:27:11,000 --> 00:27:13,000 que estoy utilizando, 510 00:27:13,000 --> 00:27:15,000 yo puedo ver mis métodos, 511 00:27:15,000 --> 00:27:16,000 y mis atributos, 512 00:27:16,000 --> 00:27:17,000 siempre, 513 00:27:17,000 --> 00:27:18,000 ¿vale? 514 00:27:18,000 --> 00:27:20,000 Pero puede ser que yo quiera 515 00:27:20,000 --> 00:27:23,000 que gente fuera de mi clase 516 00:27:23,000 --> 00:27:25,000 pueda utilizar estos métodos, 517 00:27:25,000 --> 00:27:30,000 o puede ser que no quiera 518 00:27:30,000 --> 00:27:32,000 que lo quieran ver 519 00:27:32,000 --> 00:27:33,000 y lo quieran utilizar, 520 00:27:33,000 --> 00:27:37,000 por eso tengo unos modificadores, 521 00:27:37,000 --> 00:27:38,000 ¿vale? 522 00:27:38,000 --> 00:27:40,000 Tengo cuatro modificadores posibles, 523 00:27:40,000 --> 00:27:41,000 Public, 524 00:27:41,000 --> 00:27:42,000 Protected, 525 00:27:42,000 --> 00:27:43,000 Packaged, 526 00:27:43,000 --> 00:27:44,000 y Private, 527 00:27:44,000 --> 00:27:45,000 ¿sí? 528 00:27:46,000 --> 00:27:47,000 ¿Cómo funciona esto? 529 00:27:47,000 --> 00:27:48,000 Si es publico, 530 00:27:48,000 --> 00:27:50,000 publico quiere decir 531 00:27:50,000 --> 00:27:53,000 que todos los pueden ver, 532 00:27:53,000 --> 00:27:54,000 sean en mi clase, 533 00:27:54,000 --> 00:27:56,000 o sean en la clase fuera, 534 00:27:56,000 --> 00:27:57,000 ¿sí? 535 00:27:57,000 --> 00:27:58,000 No está protegido. 536 00:27:59,000 --> 00:28:02,000 El siguiente paso es Protected, 537 00:28:02,000 --> 00:28:04,000 Protected quiere decir, 538 00:28:04,000 --> 00:28:05,000 oye, 539 00:28:05,000 --> 00:28:06,000 no todos lo pueden ver, 540 00:28:06,000 --> 00:28:07,000 no todos pueden utilizar estos métodos, 541 00:28:07,000 --> 00:28:10,000 no todos pueden utilizar estos atributos, 542 00:28:10,000 --> 00:28:12,000 ¿quién puede hacerlo? 543 00:28:12,000 --> 00:28:15,000 Solo los que están en mi mismo paquete, 544 00:28:16,000 --> 00:28:19,000 o que heredan de mí. 545 00:28:19,000 --> 00:28:21,000 ¿Qué quiere decir? 546 00:28:21,000 --> 00:28:22,000 No lo sé, 547 00:28:22,000 --> 00:28:23,000 por eso está en rojo. 548 00:28:24,000 --> 00:28:26,000 No sabemos todavía qué es la herencia, 549 00:28:26,000 --> 00:28:28,000 cuando veremos la herencia 550 00:28:28,000 --> 00:28:30,000 volveré a sacar esto 551 00:28:30,000 --> 00:28:31,000 y os diré, 552 00:28:31,000 --> 00:28:32,000 ¿os acordáis Protected? 553 00:28:32,000 --> 00:28:33,000 Pues a esto, 554 00:28:33,000 --> 00:28:34,000 ¿sí? 555 00:28:34,000 --> 00:28:35,000 Pero por ahora, 556 00:28:35,000 --> 00:28:36,000 Protected es 557 00:28:36,000 --> 00:28:38,000 mi mismo paquete, 558 00:28:38,000 --> 00:28:39,000 mi clase, 559 00:28:39,000 --> 00:28:40,000 mi paquete, 560 00:28:40,000 --> 00:28:41,000 o sea, 561 00:28:41,000 --> 00:28:42,000 todas las clases de mi paquete 562 00:28:42,000 --> 00:28:44,000 y todas las clases que hereden de mí, 563 00:28:44,000 --> 00:28:46,000 independientemente que sean de mi paquete o no. 564 00:28:46,000 --> 00:28:47,000 ¿Qué quiere decir? 565 00:28:47,000 --> 00:28:48,000 No lo sé, 566 00:28:48,000 --> 00:28:49,000 veré. 567 00:28:50,000 --> 00:28:51,000 Package, 568 00:28:51,000 --> 00:28:52,000 esto es, 569 00:28:53,000 --> 00:28:56,000 todas las clases que pertenecen a mi mismo package, 570 00:28:56,000 --> 00:28:57,000 ¿vale? 571 00:28:57,000 --> 00:28:59,000 Todas las que están en mi mismo package, 572 00:28:59,000 --> 00:29:01,000 pues pueden acceder a mis métodos, 573 00:29:01,000 --> 00:29:03,000 a este método que he marcado como package, 574 00:29:03,000 --> 00:29:04,000 o algo así. 575 00:29:04,000 --> 00:29:06,000 Si no pongo nada, 576 00:29:06,000 --> 00:29:07,000 si no me equivoco, 577 00:29:07,000 --> 00:29:08,000 es esto. 578 00:29:10,000 --> 00:29:12,000 No me acuerdo nunca si es esto o esto, 579 00:29:12,000 --> 00:29:13,000 si no pongo nada. 580 00:29:15,000 --> 00:29:16,000 Que esto añade, 581 00:29:16,000 --> 00:29:17,000 además de los paquetes, 582 00:29:17,000 --> 00:29:18,000 los heredados, 583 00:29:18,000 --> 00:29:19,000 que no sabemos qué es, 584 00:29:19,000 --> 00:29:20,000 por lo tanto, 585 00:29:20,000 --> 00:29:21,000 por ahora esto no existe, 586 00:29:21,000 --> 00:29:22,000 rojo, 587 00:29:22,000 --> 00:29:23,000 pero existe, 588 00:29:23,000 --> 00:29:25,000 pero por ahora no sabemos bien, 589 00:29:25,000 --> 00:29:26,000 ¿sí? 590 00:29:26,000 --> 00:29:27,000 Porque para entender esto, 591 00:29:27,000 --> 00:29:28,000 te tengo que explicar la herencia, 592 00:29:28,000 --> 00:29:30,000 que no la hemos visto todavía. 593 00:29:30,000 --> 00:29:32,000 Y el último es Private, 594 00:29:32,000 --> 00:29:37,000 se puede utilizar solo dentro de esta clase. 595 00:29:37,000 --> 00:29:38,000 Entonces, 596 00:29:38,000 --> 00:29:39,000 hay un método, 597 00:29:39,000 --> 00:29:40,000 solo dentro de esta clase, 598 00:29:40,000 --> 00:29:41,000 hay un atributo, 599 00:29:41,000 --> 00:29:42,000 solo dentro de esta clase. 600 00:29:42,000 --> 00:29:43,000 Esto me sirve, 601 00:29:43,000 --> 00:29:44,000 y lo hemos hecho ya en varios ejemplos, 602 00:29:44,000 --> 00:29:45,000 para decir, 603 00:29:45,000 --> 00:29:46,000 oye, mira, 604 00:29:46,000 --> 00:29:48,000 yo tengo un atributo que es mi nombre, 605 00:29:48,000 --> 00:29:50,000 y yo no quiero que, 606 00:29:50,000 --> 00:29:53,000 cuando tú crees un alumno que tenga este nombre, 607 00:29:53,000 --> 00:29:55,000 gente desde otras clases, 608 00:29:55,000 --> 00:29:56,000 desde otro lado, 609 00:29:56,000 --> 00:29:57,000 la clase, 610 00:29:57,000 --> 00:29:59,000 qué sé yo, 611 00:29:59,000 --> 00:30:01,000 una clase que ha escrito un tercero, 612 00:30:01,000 --> 00:30:04,000 pueda acceder a mi clase y cambiarme el nombre. 613 00:30:05,000 --> 00:30:06,000 O, 614 00:30:06,000 --> 00:30:07,000 para hacer un ejemplo más concreto, 615 00:30:07,000 --> 00:30:08,000 edad, 616 00:30:08,000 --> 00:30:09,000 ¿vale? 617 00:30:09,000 --> 00:30:11,000 Yo no quiero que una persona desde fuera 618 00:30:11,000 --> 00:30:13,000 pueda acceder a edad 619 00:30:13,000 --> 00:30:15,000 y poner "-37", 620 00:30:15,000 --> 00:30:17,000 porque la edad negativa no existe. 621 00:30:18,000 --> 00:30:20,000 Si yo lo pongo Public, 622 00:30:20,000 --> 00:30:21,000 este atributo, 623 00:30:21,000 --> 00:30:24,000 cualquiera desde fuera puede acceder 624 00:30:24,000 --> 00:30:26,000 y darle el valor que le da la gana, 625 00:30:26,000 --> 00:30:28,000 porque es una variable como cualquier. 626 00:30:28,000 --> 00:30:31,000 Si yo quiero poder poner algo, 627 00:30:31,000 --> 00:30:32,000 decir, 628 00:30:32,000 --> 00:30:33,000 oye, mira, no, 629 00:30:33,000 --> 00:30:34,000 espera, 630 00:30:34,000 --> 00:30:35,000 que si alguien intenta modificarlo, 631 00:30:35,000 --> 00:30:36,000 haz una verifica, 632 00:30:36,000 --> 00:30:38,000 lo pongo Private, 633 00:30:38,000 --> 00:30:40,000 entonces nadie puede acceder allí. 634 00:30:40,000 --> 00:30:42,000 Y luego me creo un método, 635 00:30:42,000 --> 00:30:44,000 un método set, 636 00:30:44,000 --> 00:30:45,000 ¿vale? 637 00:30:45,000 --> 00:30:46,000 set nombre, 638 00:30:46,000 --> 00:30:47,000 set edad, 639 00:30:47,000 --> 00:30:49,000 que es un método. 640 00:30:49,000 --> 00:30:50,000 Entonces, 641 00:30:50,000 --> 00:30:51,000 cuando alguien desde fuera 642 00:30:51,000 --> 00:30:53,000 intenta cambiar la edad, 643 00:30:53,000 --> 00:30:55,000 tiene que pasar por ese método. 644 00:30:55,000 --> 00:30:57,000 No está cambiando directamente la variable, 645 00:30:57,000 --> 00:30:59,000 está llamando ese método. 646 00:30:59,000 --> 00:31:01,000 Y yo, como programador, 647 00:31:01,000 --> 00:31:03,000 puedo poner en ese método 648 00:31:03,000 --> 00:31:04,000 una serie de controles, 649 00:31:04,000 --> 00:31:05,000 de decir, 650 00:31:05,000 --> 00:31:07,000 si ese número que me están intentando poner 651 00:31:07,000 --> 00:31:08,000 es negativo, 652 00:31:08,000 --> 00:31:10,000 no lo cambies. 653 00:31:10,000 --> 00:31:11,000 ¿Eh? 654 00:31:11,000 --> 00:31:14,000 Y ahora hacemos ejemplos de eso. 655 00:31:14,000 --> 00:31:17,000 Estos son modificadores de acceso 656 00:31:17,000 --> 00:31:20,000 para atributos y métodos. 657 00:31:20,000 --> 00:31:21,000 Cualquier método, 658 00:31:21,000 --> 00:31:22,000 cualquier atributo que vosotros queráis, 659 00:31:22,000 --> 00:31:23,000 puede ser Public, 660 00:31:23,000 --> 00:31:24,000 Protected, 661 00:31:24,000 --> 00:31:25,000 Packaged o Private. 662 00:31:25,000 --> 00:31:26,000 O nada. 663 00:31:26,000 --> 00:31:28,000 Si no le pongo nada, 664 00:31:28,000 --> 00:31:29,000 creo que es esto, 665 00:31:29,000 --> 00:31:30,000 no me acuerdo nunca. 666 00:31:30,000 --> 00:31:32,000 Si es Protected o Packaged. 667 00:31:32,000 --> 00:31:33,000 Si no le pongo nada. 668 00:31:33,000 --> 00:31:35,000 Ahora lo vemos. 669 00:31:35,000 --> 00:31:37,000 Es Packaged. 670 00:31:40,000 --> 00:31:44,000 Modificadores para las clases. 671 00:31:44,000 --> 00:31:45,000 Nosotros hasta ahora hemos siempre 672 00:31:45,000 --> 00:31:47,000 hecho Public y Class. 673 00:31:47,000 --> 00:31:48,000 ¿Sí? 674 00:31:48,000 --> 00:31:49,000 Pero yo puedo hacer también 675 00:31:49,000 --> 00:31:50,000 Clases Secas. 676 00:31:50,000 --> 00:31:52,000 Sin poner nada. 677 00:31:52,000 --> 00:31:54,000 Que es como si pusiera Packaged, 678 00:31:54,000 --> 00:31:55,000 Class. 679 00:31:55,000 --> 00:31:56,000 ¿Vale? 680 00:31:56,000 --> 00:31:57,000 Estas son clases 681 00:31:57,000 --> 00:31:59,000 que están protegidas, 682 00:31:59,000 --> 00:32:01,000 que no se ven desde fuera, 683 00:32:01,000 --> 00:32:05,000 que se ven solo dentro de mi Package. 684 00:32:05,000 --> 00:32:07,000 ¿Para qué me sirve? 685 00:32:07,000 --> 00:32:08,000 Porque a veces, 686 00:32:08,000 --> 00:32:10,000 yo quiero hacer una clase alumno 687 00:32:10,000 --> 00:32:12,000 y dentro de la clase alumno 688 00:32:12,000 --> 00:32:15,000 haya algunos valores de alumno 689 00:32:15,000 --> 00:32:17,000 que yo quiero modelizar 690 00:32:17,000 --> 00:32:19,000 que no se modelizan 691 00:32:19,000 --> 00:32:21,000 con un tipo primitivo, 692 00:32:21,000 --> 00:32:22,000 sino que se modelizarían 693 00:32:22,000 --> 00:32:24,000 como otra clase. 694 00:32:24,000 --> 00:32:25,000 Pero esta otra clase 695 00:32:25,000 --> 00:32:27,000 no quiero que se use desde fuera. 696 00:32:27,000 --> 00:32:28,000 Quiero utilizarla solo dentro de aquí, 697 00:32:28,000 --> 00:32:30,000 solo dentro del alumno. 698 00:32:30,000 --> 00:32:31,000 Entonces la creo así. 699 00:32:31,000 --> 00:32:33,000 La creo sin nada. 700 00:32:33,000 --> 00:32:36,000 Ahora hacemos ejemplo. 701 00:32:36,000 --> 00:32:40,000 Y también se pueden poner 702 00:32:40,000 --> 00:32:41,000 modificadores al permiso 703 00:32:41,000 --> 00:32:43,000 de creación de objetos. 704 00:32:43,000 --> 00:32:45,000 O sea, en los constructores. 705 00:32:45,000 --> 00:32:46,000 Nosotros hasta ahora 706 00:32:46,000 --> 00:32:47,000 los constructores 707 00:32:47,000 --> 00:32:50,000 los hemos hecho todos Public. 708 00:32:50,000 --> 00:32:51,000 Entonces se pueden crear 709 00:32:51,000 --> 00:32:52,000 desde cualquier clase. 710 00:32:52,000 --> 00:32:54,000 Cualquier clase puede crear un objeto 711 00:32:54,000 --> 00:32:57,000 de la clase que estoy creando yo. 712 00:32:57,000 --> 00:32:59,000 Pero se puede poner también Packaged. 713 00:32:59,000 --> 00:33:00,000 Entonces se puede crear 714 00:33:00,000 --> 00:33:01,000 solo dentro de las clases 715 00:33:01,000 --> 00:33:02,000 de mi mismo paquete. 716 00:33:02,000 --> 00:33:03,000 O Protected, 717 00:33:03,000 --> 00:33:05,000 entonces solo el mismo paquete 718 00:33:05,000 --> 00:33:07,000 o heredados. 719 00:33:07,000 --> 00:33:08,000 Y Private, 720 00:33:08,000 --> 00:33:09,000 que solo lo puedo crear 721 00:33:09,000 --> 00:33:12,000 dentro de esta clase. 722 00:33:12,000 --> 00:33:14,000 ¿Vale? 723 00:33:18,000 --> 00:33:20,000 Y con esto...