Saltar navegación

Clases 2 (Modificadores acceso y static) - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 15 de enero de 2024 por Stefano C.

8 visualizaciones

Descargar la transcripción

Voy a grabar este vídeo, por lo tanto, si habláis, me autorizáis a que grabe. 00:00:00
Vale, entonces, hemos visto el Main, hemos visto la diferencia entre Static y no Static, 00:00:08
ahora luego haremos ejemplos y probaremos un poco las cosas. 00:00:17
Vamos a hablar de otro tema más sencillo, que es la organización del código. 00:00:22
Hasta ahora nosotros principalmente lo que hemos hecho es crear clases, 00:00:33
creamos un proyecto y creamos clases allí dentro. 00:00:38
Algunos de vosotros sí que han empezado a crear paquetes, lo que se llaman packages. 00:00:41
La idea es que yo pueda estructurar mejor las varias secciones de mi código, 00:00:47
las varias secciones de mi sistema, creando paquetes de clases. 00:00:55
Todas las clases que están relacionadas con un tema más amplio, más general, 00:01:01
las puedo poner dentro del mismo package. 00:01:13
De esta forma organizo mejor el código y se queda más fácil de mantener 00:01:16
y sobre todo más fácil de reutilizar. 00:01:25
En principio no, porque los ejercicios que hacemos nosotros son ejercicios que son sencillos. 00:01:32
Cuando yo hago un proyecto, que es un proyecto serio, estoy haciendo una escuela 00:01:40
y hay un montón de cosas que tener en cuenta, 00:01:45
entonces a lo mejor puedo crear paquetes distintos, uno para gestionar la parte del personal, 00:01:48
otro paquete que se ocupe de la parte didáctica o académica de las asignaturas. 00:01:55
Todo lo que es relacionado a alumnos, profesores y cosas por el estilo, 00:02:03
a lo mejor lo meto en un package y lo suelto en otro package. 00:02:08
Esto no quiere decir que luego entre packages no se puedan ver, 00:02:11
hay formas para crear un objeto que está en otro package o cosas por el estilo. 00:02:15
¿Conocéis vosotros Scanner? 00:02:20
¿Scanner está en vuestro proyecto? 00:02:24
¿La clase Scanner la habéis escrito vosotros en vuestro programa? 00:02:33
Se accede a ella que está en otro package, 00:02:38
de hecho al principio si os acordáis estaba el import, import java.util.scanner, 00:02:41
eso es un package, un package, 00:02:48
o sea el package java que contiene un sotopackage que es el package útil 00:02:51
que tiene dentro la clase Scanner. 00:02:57
Entonces yo lo que puedo hacer es irme a otro package, 00:02:59
importar o todo el package entero o algunas de las clases. 00:03:01
Cuando yo creo packages, al principio de mi clase tengo que poner package 00:03:07
y el nombre del paquete. 00:03:13
Si vosotros lo habéis hecho alguna vez, ahora hacemos un ejemplo, 00:03:15
pues os lo ponen automático, si lo hacéis bien. 00:03:17
La idea es que estos packages, cómo se organizan los packages, 00:03:21
si vais a mirar luego dentro del file system, 00:03:30
cómo se están estructurando las carpetas, etc, etc, 00:03:35
los paquetes, etc, etc, 00:03:40
veréis que se utilizan unas carpetas, 00:03:42
cada package es una carpeta, 00:03:46
que estarán, si hay subpackages habrá carpetas dentro, 00:03:48
y luego dentro pondremos los puntos java. 00:03:51
Para entender esto, la mejor cosa es hacer un ejemplo. 00:03:54
Y aquí por ejemplo, esta es la situación actual, 00:04:00
tengo un proyecto nuevo con una clase prueba, 00:04:04
está en el default packages, 00:04:08
esto quiere decir que no hay package. 00:04:10
Si voy a mirar, 00:04:12
dónde está mi workspace, 00:04:17
debería estar por aquí. 00:04:20
Dentro del workspace, que está esta cosa de metadatos 00:04:25
que se os crea cuando creáis el workspace, 00:04:29
hay todos los proyectos, cada carpeta es un proyecto distinto. 00:04:33
Estas carpetas se corresponden con los proyectos que tengo aquí. 00:04:38
En particular, está el proyecto de hoy, 00:04:42
este de aquí, 00:04:47
si lo busco aquí hay una carpeta que tiene el mismo nombre. 00:04:48
Si entro dentro de esta carpeta, tengo varias cosas, 00:04:52
nos interesa principalmente, 00:04:58
search en bin, 00:05:00
search es los fuentes, 00:05:02
es esta carpeta de aquí, 00:05:05
se corresponde, si entro dentro de source, 00:05:07
encuentro prueba.java. 00:05:12
Aquí directamente porque no hay ningún package, 00:05:16
es solo el paquete por defecto que es nada. 00:05:19
Si me voy a bin, 00:05:23
encuentro las clases. 00:05:26
Automáticamente Eclipse, 00:05:30
lo que hace es pillarme lo que está en la carpeta source, 00:05:33
compilarlo usando Java C, 00:05:39
de esto y de todas las otras cosas que están en la carpeta source, 00:05:42
y me guarda el resultado en la carpeta bin. 00:05:45
Estos luego son los que usa para ejecutarlo 00:05:49
cuando yo le doy al botón verde para que empiece a ejecutar. 00:05:52
¿Qué pasa si ahora creo aquí un nuevo package? 00:05:57
Me dice, ¿cómo se llama el package? 00:06:07
Le digo, ¿se llama HAKUNO? 00:06:11
Fijaos que se enfada, 00:06:17
mejor que el nombre del package sea en lowercase, 00:06:21
y luego le doy Finish. 00:06:29
Si os fijáis, aquí me ha creado un package vacío. 00:06:31
¿Qué pasa en el mundo del file system? 00:06:35
Que si ahora entro en source, 00:06:40
existe una carpeta nueva que es HAKUNO. 00:06:42
Este es el package, dentro no hay nada. 00:06:45
Si yo lo hago desde la aplicación, 00:06:51
la aplicación se da cuenta de esto. 00:06:57
Si yo lo hago desde fuera, 00:06:59
luego tendré que decirle a la aplicación, 00:07:01
oye mira, lo he creado. 00:07:04
Entonces, consejo, casi siempre hacerlo desde la aplicación. 00:07:05
Si usáis un IDE, haced todo desde el IDE. 00:07:08
No hagáis cosas a mitad desde fuera del IDE, 00:07:12
porque buscad la forma de cómo se hace en NetBeans, 00:07:15
en Eclipse, en Intellij, en lo que sea, 00:07:21
pero no lo hagáis vosotros directamente. 00:07:24
Porque a veces no se da cuenta, 00:07:27
y luego hay una diferencia entre lo que hay aquí y lo que hay. 00:07:29
Si ahora yo pido prueba, 00:07:37
y lo muevo dentro de HAKUNO, 00:07:39
veis que aquí se queda package1, 00:07:43
veis que aquí me ha añadido esto. 00:07:46
Entonces ahora esta clase es parte de este package, 00:07:51
y si voy aquí, veo que dentro de HAKUNO, 00:07:56
ahora está prueba.java. 00:08:00
¿Puedo hacer subpackages? 00:08:04
Sí. 00:08:07
Botón derecho, nuevo package, 00:08:09
veis que aquí me ha escrito ya HAKUNO, 00:08:12
y le pongo punto, subpack 1. 00:08:16
Este punto, lo que me está diciendo, 00:08:22
es que soy un subpackage del package anterior. 00:08:26
Le doy a finish, 00:08:32
y veis que subpack me lo ha creado dentro de pack, 00:08:34
como hijo de pack. 00:08:39
Si quiero crear un package 2, 00:08:41
entonces veis que pack1 y pack2 son hermanos, 00:08:51
pero subpack es interno a esto. 00:08:55
Entonces puedo hacer así. 00:08:59
Está bloqueado. 00:09:05
Fijaos que ahora me dice que el package al que pertenece prueba 00:09:10
es package.pack1.subpack1. 00:09:14
Si en algún momento yo tuviera que trabajar con prueba ahora, 00:09:19
debería llamarla pack1.subpack1.prueba, 00:09:25
¿sí? 00:09:31
O importar directamente prueba como import pack1.subpack1.prueba, 00:09:32
y ya está. 00:09:40
¿Ok? 00:09:42
Recuerdaos cuando aquí, 00:09:43
scanner, scanner, es igual a new scanner, 00:09:45
en el system.in, 00:09:49
aquí me dice import scanner. 00:09:57
Veis que aquí estoy importando del package java, 00:10:02
que tiene un subpackage que se llama útil, 00:10:06
estoy importando la clase scanner, 00:10:09
y entonces solo la puedo utilizar tranquilamente. 00:10:14
¿Sí? 00:10:17
También si yo digo, mira, de java.util, 00:10:19
hay un montón de cosas en este package, 00:10:22
y me interesan todas, 00:10:25
podría utilizar esto. 00:10:27
Esto me está diciendo, 00:10:30
importa todas las clases que están dentro del package java.util. 00:10:31
¿Y qué hay en java.util? 00:10:39
Ya que estamos, 00:10:41
yo me puedo ir a api.java, 00:10:42
de java.util, 00:10:47
y aquí está un poco todo lo que está aquí dentro, 00:10:52
todas estas clases, 00:10:57
todas estas clases, 00:11:00
de una de ellas debería ser scanner. 00:11:03
Sí, sí. 00:11:10
Algunas se van quitando, 00:11:13
algunas se van a marcar como deprecated, 00:11:15
que quiere decir no la uses, 00:11:19
porque ya tiene algún problema, 00:11:22
que la dejamos allí, 00:11:25
para que programas hechos anteriormente que la usen, 00:11:27
no dejen de funcionar, 00:11:31
pero si tú estás haciendo un programa nuevo, 00:11:33
pues deberías usar una alternativa, 00:11:35
normalmente allí mismo te lo dice, 00:11:37
te dice, mira no uses esta, usa esta otra. 00:11:39
Y luego, 00:11:42
algunas veces si ven que es un problema de seguridad, 00:11:43
o cosa por el estilo, 00:11:46
pues la quitan. 00:11:47
Y tú te puedes ir a scanner, 00:11:48
y ver qué puedes hacer con scanner, 00:11:51
entonces aquí te describe qué es scanner, 00:11:53
cómo funciona, 00:11:55
por qué, 00:11:56
bla, bla, bla, 00:11:57
te dice todos los constructores que tienes de scanner, 00:11:58
y te dice todos los programas, 00:12:02
los métodos que puedes utilizar sobre scanner. 00:12:06
Ahora de estas, 00:12:10
hay mogollón. 00:12:12
Estas son todas las clases, 00:12:21
que están ya creadas dentro de Java, 00:12:23
y que tú puedes reutilizar, 00:12:27
para alguna de tus proyectos. 00:12:29
Son unos cuantos. 00:12:32
Entonces, 00:12:35
cuando tú dices, 00:12:36
oye mira, 00:12:37
quiero hacer una comunicación a internet, 00:12:38
pues posiblemente por aquí hay alguna clase, 00:12:40
que te ayuda, 00:12:44
porque una parte de esta comunicación, 00:12:46
ya está programada, 00:12:48
y tú en vez de reprogramarla desde cero, 00:12:49
pues usas socket, 00:12:51
usas inetadress, 00:12:53
usas server socket, 00:12:54
cosas que te permiten de comunicarte así. 00:12:55
Oye mira, 00:12:58
quiero hacer un trabajo sobre matemática, 00:12:59
y necesito operaciones matemáticas, 00:13:02
pues te buscas la clase math, 00:13:04
o pico, 00:13:06
m, n, o, 00:13:07
m, m, m, 00:13:08
ma, ma, ma, ma, 00:13:09
math, 00:13:10
Oracle ahora mismo, 00:13:17
pero bueno, 00:13:19
el desarrollador de Java. 00:13:20
Math, 00:13:22
vale, 00:13:23
y aquí dentro de math, 00:13:24
yo puedo irme a mirar, 00:13:26
todo lo que me permite hacer math, 00:13:27
math me permite, 00:13:29
por ejemplo, 00:13:30
aparte que me da algunos campos, 00:13:31
como el valor de pi, 00:13:33
o el valor de los logaritmos naturales, 00:13:35
y cosas por estilo, 00:13:40
y a partir de allí, 00:13:42
por ejemplo, 00:13:43
si yo quiero el método abs de un valor, 00:13:44
esto me da el valor absoluto, 00:13:46
de un double, 00:13:48
de un float, 00:13:49
de un int, 00:13:50
de un long, 00:13:51
esto es el arcoseno, 00:13:52
de un valor, 00:13:54
me da el arco tangente, 00:13:56
el redondeado hacia arriba, 00:13:58
el copiar el signo de un valor, 00:14:01
el coseno de, 00:14:06
que se yo, 00:14:08
exponencial, 00:14:09
el exponente se ha dicho, 00:14:10
que se yo, 00:14:12
vale, 00:14:13
por aquí encontráis un montón de operaciones matemáticas, 00:14:14
esto por ejemplo, 00:14:20
la potencia, 00:14:21
para hacer a elevado a la b, 00:14:22
pues uso esto, 00:14:24
creo que lo usamos una vez, 00:14:25
pregunta para vosotros, 00:14:27
este señor de aquí, 00:14:29
¿estático o no? 00:14:31
quien dice, 00:14:38
si es estático, 00:14:39
quien dice, 00:14:42
no, no es estático, 00:14:43
quien dice, 00:14:46
me gustaría estar en casa en el sofá, 00:14:47
porque estoy triste, 00:14:49
vale, 00:14:51
esto me dice, 00:14:53
esto de aquí, 00:14:54
¿vosotros lo usaríais sobre un objeto o no? 00:14:55
¿necesita un objeto que me dé que valor hacer, 00:14:58
para poder hacer a elevado a la b o no? 00:15:01
y por ejemplo, 00:15:16
yo hago a elevado a la b, 00:15:17
¿el valor que me devuelve, 00:15:21
que tipo tiene? 00:15:22
porque los parámetros no son de un objeto, 00:15:32
es como cuando haces, 00:15:38
si es, 00:15:40
para que sea estático, 00:15:42
para que sea no estático, 00:15:44
es esta situación de aquí, 00:15:47
donde yo llamo área, 00:15:50
¿y donde están los parámetros? 00:15:53
dentro del rectángulo 1, 00:15:55
que es un objeto, 00:15:57
que tiene su ancho, 00:15:58
pero cuando en vez es estático, 00:16:00
como no tienes un objeto, 00:16:04
que te da el ancho y el largo, 00:16:06
entonces el método es estático, 00:16:08
y te pide el largo y el ancho, 00:16:09
y aquí es lo mismo, 00:16:11
POU te dice a y b, 00:16:13
y te hace a elevado a la b, 00:16:15
si hubiese un objeto exponente, 00:16:17
que dentro tiene dos parámetros, 00:16:24
que son base y exponente, 00:16:26
entonces tendría un método, 00:16:28
que es calcular, 00:16:30
que simplemente lo que hace, 00:16:31
es pillarse la base, 00:16:33
y hacerla el exponente, 00:16:34
pero como no hay un objeto, 00:16:36
y como todos estos métodos de aquí, 00:16:38
todas estas operaciones aquí, 00:16:40
son operaciones matemáticas, 00:16:41
al fin y al cabo, 00:16:43
al que le paso los parámetros, 00:16:44
para hacer esta operación matemática, 00:16:45
pues entonces son todos estáticos, 00:16:47
si te fijas son todos estáticos, 00:16:49
nunca crearás un objeto math, 00:16:51
siempre usarás math punto, 00:16:53
la operación que quieres hacer, 00:16:55
esta es una clase estática, 00:16:58
puramente estática, 00:17:00
¿Entonces lo que habías dicho, 00:17:02
de una potencia ligada a un exponente, 00:17:04
eso por ejemplo no sería estático? 00:17:07
Si yo me creara un objeto, 00:17:10
que es objeto expo algo, 00:17:13
que dentro tiene dos parámetros, 00:17:18
que es mi base y mi exponente, 00:17:20
entonces este es un objeto, 00:17:22
y yo lo hago para crear un valor, 00:17:23
lo que hago es crear un nuevo objeto, 00:17:26
diciendo tu base es 3, 00:17:28
y tu exponente es 4, 00:17:30
y luego está un método calcular, 00:17:31
que me pilla 3, 00:17:33
me lo eleva a la 4, 00:17:34
y me devuelve lo que sea, 00:17:35
pues entonces no, 00:17:36
sería todo no estático, 00:17:37
pero a lo mejor no es un buen planteamiento, 00:17:40
luego se complica, 00:17:46
cada vez que yo quiero hacer A elevado a la B, 00:17:47
tengo que crear un nuevo objeto, 00:17:49
poniendo A, poniendo B, 00:17:51
y luego pedirle cálculate, 00:17:52
mientras aquí directamente lo pido, 00:17:54
eso se me explica, 00:17:56
entonces volviendo a los sub packages, 00:17:59
fijaos que aquí también, 00:18:03
lo que ha hecho es que ahora tiene PAC1 y PAC2, 00:18:05
que son hermanos, 00:18:08
y que si yo entro dentro de PAC1, 00:18:10
está sub PAC1, 00:18:12
y dentro de PAC1 está esto, 00:18:13
esto era sobre organización de código, 00:18:29
también aquí se habla del importar, 00:18:33
otra cosa que hemos hablado, 00:18:39
y que tenemos que tener en cuenta, 00:18:44
es overloading o sobrecarga, 00:18:45
que es que yo en una misma clase, 00:18:48
puedo crear 5 métodos, 00:18:50
que se llaman igual, 00:18:53
los 5 métodos se llaman, 00:18:55
calcular área, 00:18:59
pero que cada uno me pille parámetros distintos, 00:19:00
uno me pilla solo un lado, 00:19:04
uno me pilla el lado de la altura, 00:19:05
uno me pilla el otro lado, 00:19:07
uno me pilla el lado y la hipotenusa, 00:19:09
que se yo, 00:19:11
la idea es que se puede sobrecargar un método, 00:19:14
cuando se sobrecarga, 00:19:17
cuando se llaman igual, 00:19:18
el nombre es el mismo, 00:19:20
lo que cambia es la firma, 00:19:22
la firma es nombre y tipo de parámetros, 00:19:24
no es lo mismo calcular área sin nada, 00:19:30
que calcular área de string, 00:19:33
que calcular área de string int, 00:19:36
cada uno será un método distinto, 00:19:38
se asume que todos hagan lo mismo, 00:19:40
calcular área, 00:19:43
pero me dan parámetros distintos, 00:19:44
ejemplo, 00:19:46
aquí hemos visto al principio, 00:19:52
aquí por ejemplo tengo un método 00:19:54
que me devuelve el valor absoluto, 00:19:56
y está sobrecargado, 00:19:58
que yo lo puedo pedir sobre un double, 00:20:01
lo puedo pedir sobre un float, 00:20:04
lo puedo pedir sobre un int, 00:20:05
lo puedo pedir sobre un long, 00:20:06
hace lo mismo, 00:20:08
siempre te doy el valor absoluto de este número, 00:20:10
si es negativo lo pongo positivo, 00:20:12
si es positivo lo dejo así, 00:20:13
pero este de aquí te acepta un double, 00:20:17
¿cuál uso?, 00:20:20
si yo llamo math.abs de 3, 00:20:22
me usa esto, 00:20:25
si yo llamo math.abs de 3.0, 00:20:27
me usa esto, 00:20:31
si yo llamo math.abs de 3f, 00:20:33
me usa esto, 00:20:37
¿a la vez o no? 00:20:51
Siempre que tenga nombre, 00:21:09
yo creo que te lo permito, 00:21:11
siempre que la firma sea distinta, 00:21:13
no puedo hacer static, saludo, 00:21:16
y luego static, saludo, 00:21:19
que te llame a ti mismo, 00:21:22
no static, saludo, 00:21:24
que te llame a tu nombre, 00:21:26
porque sería la misma firma, 00:21:28
entonces no, 00:21:30
¿me explico? 00:21:31
Aquí tengo una prueba, 00:21:38
me digo, voy a hacer un método, 00:21:40
el método es public, static, saludo, 00:21:42
y digo, si eso, hola, 00:21:49
ahora puedo hacer uno, 00:22:03
que en vez de dependa de mi nombre, 00:22:05
porque prueba tiene string, nombre, 00:22:08
y decir, vuelvo a hacer saludo, 00:22:14
que ahora haga esto, 00:22:19
más dis.nombre, 00:22:21
y que no sea static, 00:22:23
son distintos, 00:22:26
este es static y este no, 00:22:28
pero la firma es la misma, 00:22:30
entonces en este caso no lo puedo hacer, 00:22:35
¿dónde? ¿aquí o aquí? 00:22:44
Si aquí le pongo, por ejemplo, 00:22:46
string, nombre, 00:22:48
y luego aquí hago más nombre, 00:22:50
esto funciona, 00:22:54
y tengo la versión estática, 00:22:56
que no depende del objeto, 00:22:59
porque cualquiera puede llamar, 00:23:01
saluda Estefano, 00:23:02
y te dice, hola Estefano, 00:23:03
saluda Antonio, 00:23:04
hola Antonio, 00:23:05
saluda Sara, hola Sara, 00:23:06
o este de aquí, 00:23:08
que en vez se llama sobre el objeto, 00:23:09
porque no te dice quien saludar, 00:23:12
quien te dice saludar es dis.nombre, 00:23:14
este objeto que es este de aquí, 00:23:16
entonces esto lo llamo como instancia.saludo, 00:23:19
y esto lo llamo como prueba.saludo, 00:23:24
de quien quiero saludar, 00:23:27
Para poder sobrecargar un método, 00:23:40
la firma tiene que ser distinta, 00:23:44
la firma es el nombre, 00:23:46
y luego los tipos de parámetros, 00:23:48
como este es nombre de string, 00:23:50
y este es nombre de void, 00:23:52
pues me va. 00:23:54
O a lo mejor usa variables estáticas que están aquí. 00:24:01
Tened en cuenta también, 00:24:09
que que pasa si yo aquí le pongo dis. 00:24:11
¿Por qué se enfada? 00:24:22
¿Por qué? 00:24:25
Porque dis haría referencia a la instancia en la que me has llamado, 00:24:28
pero ese es estático, 00:24:33
no lo estás llamando sobre una instancia, 00:24:34
entonces no existe, 00:24:36
entonces no lo puede hacer, 00:24:38
me dice, 00:24:39
estás haciendo referencia, 00:24:41
no puedes usar dis, 00:24:43
esta palabra, 00:24:45
in a static context, 00:24:47
no puedes hacer referencia a esta instancia, 00:24:50
en un contexto que no tiene instancias, 00:24:53
que es estático. 00:24:56
Pregunta, 00:25:00
y si aquí en vez tuviera una variable estática, 00:25:01
string, 00:25:11
fijaos que si es estática, 00:25:17
te la pone en cursiva, 00:25:19
la puedo usar aquí, 00:25:23
¿la puedo usar aquí? 00:25:26
O de hecho de otra forma, 00:25:42
esto sería prueba.gato, 00:25:45
esto sería prueba.gato, 00:25:48
¿sí? 00:25:56
¿Cómo? 00:25:58
Es que como estoy dentro de la misma clase, 00:26:00
y es estática, 00:26:03
me refiero a la clase, 00:26:04
entonces si la quito, 00:26:05
él entiende que es esa, 00:26:07
es esta, 00:26:09
porque es la única, 00:26:10
pero imagínate que yo fuera en otra clase, 00:26:11
y quiero usar esta variable aquí, 00:26:14
pues entonces la debería llamar como prueba.gato, 00:26:16
ahora hacemos ejemplos, 00:26:22
entonces entiende el concepto de overloading, 00:26:24
¿sí? 00:26:29
Algunas veces no ha servido, 00:26:30
la última cosa que tenemos que ver hoy, 00:26:32
es la encapsulación y visibilidad, 00:26:35
y con esto hemos acabado. 00:26:38
Vale, esto ya lo hemos visto, 00:26:42
pero vamos a ver que opciones tenemos, 00:26:44
siempre que yo, 00:26:46
por favor chicos, 00:26:47
hola, 00:26:48
siempre que yo defina un atributo, 00:26:50
o un método, 00:26:53
¿vale? 00:26:55
Le puedo decir, 00:26:56
quién puede ver este atributo, 00:26:58
o este método, 00:27:03
¿sí? 00:27:05
¿Cómo funciona? 00:27:06
Seguramente siempre dentro de la clase 00:27:07
que estoy utilizando, 00:27:11
yo puedo ver mis métodos, 00:27:13
y mis atributos, 00:27:15
siempre, 00:27:16
¿vale? 00:27:17
Pero puede ser que yo quiera 00:27:18
que gente fuera de mi clase 00:27:20
pueda utilizar estos métodos, 00:27:23
o puede ser que no quiera 00:27:25
que lo quieran ver 00:27:30
y lo quieran utilizar, 00:27:32
por eso tengo unos modificadores, 00:27:33
¿vale? 00:27:37
Tengo cuatro modificadores posibles, 00:27:38
Public, 00:27:40
Protected, 00:27:41
Packaged, 00:27:42
y Private, 00:27:43
¿sí? 00:27:44
¿Cómo funciona esto? 00:27:46
Si es publico, 00:27:47
publico quiere decir 00:27:48
que todos los pueden ver, 00:27:50
sean en mi clase, 00:27:53
o sean en la clase fuera, 00:27:54
¿sí? 00:27:56
No está protegido. 00:27:57
El siguiente paso es Protected, 00:27:59
Protected quiere decir, 00:28:02
oye, 00:28:04
no todos lo pueden ver, 00:28:05
no todos pueden utilizar estos métodos, 00:28:06
no todos pueden utilizar estos atributos, 00:28:07
¿quién puede hacerlo? 00:28:10
Solo los que están en mi mismo paquete, 00:28:12
o que heredan de mí. 00:28:16
¿Qué quiere decir? 00:28:19
No lo sé, 00:28:21
por eso está en rojo. 00:28:22
No sabemos todavía qué es la herencia, 00:28:24
cuando veremos la herencia 00:28:26
volveré a sacar esto 00:28:28
y os diré, 00:28:30
¿os acordáis Protected? 00:28:31
Pues a esto, 00:28:32
¿sí? 00:28:33
Pero por ahora, 00:28:34
Protected es 00:28:35
mi mismo paquete, 00:28:36
mi clase, 00:28:38
mi paquete, 00:28:39
o sea, 00:28:40
todas las clases de mi paquete 00:28:41
y todas las clases que hereden de mí, 00:28:42
independientemente que sean de mi paquete o no. 00:28:44
¿Qué quiere decir? 00:28:46
No lo sé, 00:28:47
veré. 00:28:48
Package, 00:28:50
esto es, 00:28:51
todas las clases que pertenecen a mi mismo package, 00:28:53
¿vale? 00:28:56
Todas las que están en mi mismo package, 00:28:57
pues pueden acceder a mis métodos, 00:28:59
a este método que he marcado como package, 00:29:01
o algo así. 00:29:03
Si no pongo nada, 00:29:04
si no me equivoco, 00:29:06
es esto. 00:29:07
No me acuerdo nunca si es esto o esto, 00:29:10
si no pongo nada. 00:29:12
Que esto añade, 00:29:15
además de los paquetes, 00:29:16
los heredados, 00:29:17
que no sabemos qué es, 00:29:18
por lo tanto, 00:29:19
por ahora esto no existe, 00:29:20
rojo, 00:29:21
pero existe, 00:29:22
pero por ahora no sabemos bien, 00:29:23
¿sí? 00:29:25
Porque para entender esto, 00:29:26
te tengo que explicar la herencia, 00:29:27
que no la hemos visto todavía. 00:29:28
Y el último es Private, 00:29:30
se puede utilizar solo dentro de esta clase. 00:29:32
Entonces, 00:29:37
hay un método, 00:29:38
solo dentro de esta clase, 00:29:39
hay un atributo, 00:29:40
solo dentro de esta clase. 00:29:41
Esto me sirve, 00:29:42
y lo hemos hecho ya en varios ejemplos, 00:29:43
para decir, 00:29:44
oye, mira, 00:29:45
yo tengo un atributo que es mi nombre, 00:29:46
y yo no quiero que, 00:29:48
cuando tú crees un alumno que tenga este nombre, 00:29:50
gente desde otras clases, 00:29:53
desde otro lado, 00:29:55
la clase, 00:29:56
qué sé yo, 00:29:57
una clase que ha escrito un tercero, 00:29:59
pueda acceder a mi clase y cambiarme el nombre. 00:30:01
para hacer un ejemplo más concreto, 00:30:06
edad, 00:30:07
¿vale? 00:30:08
Yo no quiero que una persona desde fuera 00:30:09
pueda acceder a edad 00:30:11
y poner "-37", 00:30:13
porque la edad negativa no existe. 00:30:15
Si yo lo pongo Public, 00:30:18
este atributo, 00:30:20
cualquiera desde fuera puede acceder 00:30:21
y darle el valor que le da la gana, 00:30:24
porque es una variable como cualquier. 00:30:26
Si yo quiero poder poner algo, 00:30:28
decir, 00:30:31
oye, mira, no, 00:30:32
espera, 00:30:33
que si alguien intenta modificarlo, 00:30:34
haz una verifica, 00:30:35
lo pongo Private, 00:30:36
entonces nadie puede acceder allí. 00:30:38
Y luego me creo un método, 00:30:40
un método set, 00:30:42
¿vale? 00:30:44
set nombre, 00:30:45
set edad, 00:30:46
que es un método. 00:30:47
Entonces, 00:30:49
cuando alguien desde fuera 00:30:50
intenta cambiar la edad, 00:30:51
tiene que pasar por ese método. 00:30:53
No está cambiando directamente la variable, 00:30:55
está llamando ese método. 00:30:57
Y yo, como programador, 00:30:59
puedo poner en ese método 00:31:01
una serie de controles, 00:31:03
de decir, 00:31:04
si ese número que me están intentando poner 00:31:05
es negativo, 00:31:07
no lo cambies. 00:31:08
¿Eh? 00:31:10
Y ahora hacemos ejemplos de eso. 00:31:11
Estos son modificadores de acceso 00:31:14
para atributos y métodos. 00:31:17
Cualquier método, 00:31:20
cualquier atributo que vosotros queráis, 00:31:21
puede ser Public, 00:31:22
Protected, 00:31:23
Packaged o Private. 00:31:24
O nada. 00:31:25
Si no le pongo nada, 00:31:26
creo que es esto, 00:31:28
no me acuerdo nunca. 00:31:29
Si es Protected o Packaged. 00:31:30
Si no le pongo nada. 00:31:32
Ahora lo vemos. 00:31:33
Es Packaged. 00:31:35
Modificadores para las clases. 00:31:40
Nosotros hasta ahora hemos siempre 00:31:44
hecho Public y Class. 00:31:45
¿Sí? 00:31:47
Pero yo puedo hacer también 00:31:48
Clases Secas. 00:31:49
Sin poner nada. 00:31:50
Que es como si pusiera Packaged, 00:31:52
Class. 00:31:54
¿Vale? 00:31:55
Estas son clases 00:31:56
que están protegidas, 00:31:57
que no se ven desde fuera, 00:31:59
que se ven solo dentro de mi Package. 00:32:01
¿Para qué me sirve? 00:32:05
Porque a veces, 00:32:07
yo quiero hacer una clase alumno 00:32:08
y dentro de la clase alumno 00:32:10
haya algunos valores de alumno 00:32:12
que yo quiero modelizar 00:32:15
que no se modelizan 00:32:17
con un tipo primitivo, 00:32:19
sino que se modelizarían 00:32:21
como otra clase. 00:32:22
Pero esta otra clase 00:32:24
no quiero que se use desde fuera. 00:32:25
Quiero utilizarla solo dentro de aquí, 00:32:27
solo dentro del alumno. 00:32:28
Entonces la creo así. 00:32:30
La creo sin nada. 00:32:31
Ahora hacemos ejemplo. 00:32:33
Y también se pueden poner 00:32:36
modificadores al permiso 00:32:40
de creación de objetos. 00:32:41
O sea, en los constructores. 00:32:43
Nosotros hasta ahora 00:32:45
los constructores 00:32:46
los hemos hecho todos Public. 00:32:47
Entonces se pueden crear 00:32:50
desde cualquier clase. 00:32:51
Cualquier clase puede crear un objeto 00:32:52
de la clase que estoy creando yo. 00:32:54
Pero se puede poner también Packaged. 00:32:57
Entonces se puede crear 00:32:59
solo dentro de las clases 00:33:00
de mi mismo paquete. 00:33:01
O Protected, 00:33:02
entonces solo el mismo paquete 00:33:03
o heredados. 00:33:05
Y Private, 00:33:07
que solo lo puedo crear 00:33:08
dentro de esta clase. 00:33:09
¿Vale? 00:33:12
Y con esto... 00:33:18
Subido por:
Stefano C.
Licencia:
Reconocimiento
Visualizaciones:
8
Fecha:
15 de enero de 2024 - 11:52
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
33′ 20″
Relación de aspecto:
4:3 Hasta 2009 fue el estándar utilizado en la televisión PAL; muchas pantallas de ordenador y televisores usan este estándar, erróneamente llamado cuadrado, cuando en la realidad es rectangular o wide.
Resolución:
960x720 píxeles
Tamaño:
176.93 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid