2024-10-21-Programacion - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Palabras reservadas. Tipos de variables. Uso de memoria. Variables locales y miembro. Alcance de variables. Comentarios.
Y nada, ya estamos grabando. Y nada, preguntaros si tenéis alguna duda antes de empezar a hablar de otras cosas. Este tema 1 es como muy introductorio sobre el que hemos estado trabajando.
00:00:00
el tema 2, lo abro luego esta noche
00:00:12
en principio la fecha de apertura es mañana
00:00:15
pero bueno, lo abro luego esta noche o mañana por la mañana
00:00:18
y bueno, todavía ya empezamos
00:00:21
a hacer alguna cosilla más con el lenguaje Java
00:00:24
pero todavía es como muy sencillo
00:00:28
sencillo al menos para los que ya habéis programado con anterioridad
00:00:30
igual los que llegáis desde cero sí que necesitáis
00:00:33
toda esta introducción para empezar a ir aterrizando un poco
00:00:37
¿Tenéis alguna cosilla, alguna pregunta que queráis que comentemos antes de arrancar? ¿A contaros yo cosas? No, vale, pues nada, genial.
00:00:39
Sí, sí, ese es, no sé si con alguna pequeña variación que nos surja según vayamos haciendo las tutorías de este año, pero ese chuletario es el que hemos utilizado por lo menos los dos últimos años y bueno, pues hay un resumen razonable de lo que es la sintaxis.
00:01:03
Como ya os comentaba que el examen en sí lo haremos en papel, pues bueno, que tengáis ese chuletario de referencia. Entonces, contad con él, sí. De hecho, normalmente junto con el examen os lo damos nosotros el chuletario el propio día que tengáis la prueba.
00:01:22
No, no, no, ese chuletario lo tendréis a vuestra disposición para cuidar el hombre. Es aconsejable quizás que lo echéis un ojo para estar familiarizado con la información que tiene, porque igual el día del examen no es el mejor momento para familiarizarse, porque tendréis que estar más centrados en el examen.
00:01:39
Pero esa hoja la tendréis a mano para que podáis vosotros tirar de ella como referencia.
00:02:00
Y si en ese chuletario a la que vayamos hablando de los diferentes contenidos,
00:02:07
bueno, pues os parece que vendría bien añadir alguna cosilla, pues no lo decís.
00:02:13
Y en principio, el chuletario es común para los dos grupos, lo tendría que coordinar con el otro profesor.
00:02:18
Pero bueno, si son cosas para sintaxis y todo esto, que os puedan ayudar en el día del examen,
00:02:24
pues lo podemos añadir en principio sin problema bueno pues no sé exactamente a qué diferencias te
00:02:30
refieres a problemas en tanto en cuanto a la instalación o en tanto en cuanto a que aparecen
00:03:00
diferentes opciones ya pues probablemente entre todas las opciones java te da una cantidad de
00:03:05
alternativas brutales y no solamente para lo que es la gestión de un proyecto java sino para la
00:03:46
gestión de proyectos muy en general, o sea
00:03:52
es un mundo, estos IDEs
00:03:54
están estupendos porque
00:03:56
todas esas opciones al final son
00:03:58
nos facilitan la vida una vez que nosotros
00:04:00
estamos haciendo trabajos
00:04:02
pues que tengan que ver con esas alternativas
00:04:04
pero aquí
00:04:06
vamos a trabajar con
00:04:08
programas Java
00:04:10
razonablemente sencillos y no vamos
00:04:11
a profundizar en todo eso, no sé si
00:04:14
en la asignatura de entornos de desarrollo
00:04:16
que claro va un poco más al hilo de
00:04:18
este tipo de IDEs, que no toda la
00:04:20
asignatura versa, digamos, sobre estar viendo en torno al desarrollo.
00:04:22
Luego hacéis bastantes más cosas en ese módulo. Pero no sé si
00:04:26
ahí sí que hará un poco más recorrido sobre todas las opciones de menú que van apareciendo.
00:04:30
En principio, de nuestra asignatura se queda un poco fuera del
00:04:35
ámbito de lo que vamos a trabajar. Esto no quiere decir que si
00:04:38
alguna a ti tú crees, pues yo creo que esta por lo que
00:04:42
sugiere me va a resultar interesante. No quiere decir que ponla
00:04:46
en los foros y bueno pues entre todos y yo mismo si quieres la investigó un poquillo y llegamos a
00:04:50
conclusiones pero lo que es en sí necesario para la asignatura el millón de opciones que nos
00:04:56
proporciona eclipse o net bienes no va a ser necesario que las conozcáis ya sí sí sí mira
00:05:01
bueno te cuento te cuento un poco para poner en contexto quizás la pregunta y a ver si termino
00:05:40
respondiendo te en los programas que nosotros vamos a hacer en principio durante la asignatura
00:05:44
aunque bueno en la base para luego hacer grandes proyectos no pues son sencillos van a tener poca
00:05:51
cosa el de esta forma veremos lo que son paquetes en algún momento habla en alguno de los temas no
00:05:56
recuerdo exactamente en cuál de lo que son los paquetes digamos en java cuando estamos creando
00:06:03
un proyecto aquí con eclipse estas nuevas versiones ofrecen directamente al crear un
00:06:09
proyecto, lo voy a ir haciendo por aquí, después borramos este proyecto, vamos a llamarlo a A, una cosa
00:06:14
sencillota, la propia creación del proyecto genera aquí en la carpeta source este ficherito, este
00:06:22
ficherito tiene como objetivo digamos estructurar diferentes clases que puedan estar distribuidas
00:06:29
en diferentes paquetes, ahora te explico un poco la idea de los paquetes, digamos que es como un
00:06:36
enlace ahí para que todo el código Java sea capaz de localizar
00:06:41
unas clases a otras. Entonces aquí con cierta sintaxis se puede
00:06:46
meter ese tipo de información. ¿Qué vengo yo haciendo en esta
00:06:51
asignatura todo este tiempo? Pues en cuanto creo un proyecto
00:06:55
elimino este. El hecho de tener esto, cuando tú quieres crear
00:06:58
una nueva clase, te obliga a que organizes las cosas sí o sí
00:07:02
por paquetes. Entonces por eso te estaba exigiendo que tuvieras
00:07:06
que introdujese es un paquete y el hecho de crear un paquete
00:07:08
luego ya te dejaba seguir con el proyecto adelante.
00:07:12
Para evitar esto, nuestros pequeños proyectos de ahora,
00:07:15
yo lo que hago directamente es eliminar este ficherito.
00:07:18
Y eliminando este ficherito nos libramos de esta situación.
00:07:20
Que para grandes proyectos puede ser interesante, cuidado,
00:07:24
pero que ahora quizás nos van a complicar más la vida
00:07:26
que nos la van a favorecer.
00:07:30
¿Qué son los paquetes en Java?
00:07:32
No sé si de hecho tenía apuntado a hablaros un poco de ello aquí
00:07:34
Y si no, bueno, os lo cuento ya que va al hilo.
00:07:37
Pues vamos a ponernos en la situación de un gran proyecto.
00:07:40
Imagínate que la banca te coge y te dice, pues mira, quiero que me hagas un proyecto, pero integral de todo.
00:07:43
No un proyecto que haga una función main y me saque por pantalla tres cosillas, sino algo que me resulte ya funcional.
00:07:51
Y la banca, por ejemplo, igual si alguno soy de banca me tomo la pata,
00:07:59
Pero bueno, vamos a suponer que tiene varias líneas de negocio, una de créditos, otra de cuentas corrientes y otra para trabajar en bolsa, ¿no?
00:08:05
Y entonces, si tú coges y te pones a hacer código para la aplicación en su conjunto, pues resultará que para dar servicio a cada uno de estos campos,
00:08:14
de estas líneas de trabajo, necesitas hacer 10 ficheritos con extensión .java.
00:08:23
Y claro, como si necesitas 10 ficheros con extensión .java para las tres funcionalidades, pues terminar juntando 30 y esas 30 estarían agrupadas en un único directorio, en lo que sería un único paquete que por defecto un proyecto, si quitamos el módulo este, es el paquete por defecto.
00:08:28
Entonces, ¿qué es lo que podemos hacer? Pues podemos decir, mira, vamos a organizar el código de Java por bloques. Entonces, para lo que decíamos de bolsa, pues hacemos un paquete que vendría a ser en la estructura del sistema de archivos, un directorio y ahí organizo todo el código que tiene que ver con bolsa.
00:08:47
Entonces ahí creo los 10 ficheritos .java con el código correspondiente que tiene que ver con bolsa. Creo otro directorio, es decir, un mecanismo de organización del código. Creo otro paquete que finalmente en la estructura del sistema de archivos va a ser un directorio diferente, donde creo la parte de préstamos y otro paquete para la otra parte que habíamos comentado.
00:09:05
con lo cual, bueno, pues visualmente lo tengo mejor organizado
00:09:31
que luego tengo un problema
00:09:34
en el código que tiene que ver con las acciones a bolsa
00:09:35
porque me detectan un error, pues ya por lo menos sé
00:09:40
que me tengo que ir al paquete de bolsa y no en toda la vorágine
00:09:43
de 30 ficheros con todo mezclado
00:09:46
que si en lugar de 3 funcionalidades hablamos de 50, pues al igual
00:09:48
tenemos 150 ficheros, pues localizar
00:09:52
en esos 150 es más difícil que localizar justo en el
00:09:55
paquetito, precisamente vamos al término
00:09:58
de paquete donde tenemos organizado todo el código que tiene
00:10:01
que ver con bolsa. Es decir, una forma
00:10:04
de ser ordenado, digamos, en el código. Entonces, esa es la idea
00:10:07
de los paquetes. Y luego, además, una de las características
00:10:10
que tiene la programación orientada a objetos es
00:10:13
que es tener
00:10:16
la intención de reutilizar el código. Si yo
00:10:18
un primer banco me sugiere que
00:10:22
le haga un desarrollo, pues igual tengo que hacer
00:10:25
todo el código es de cero pero a lo mejor luego entrando en esa línea de negocio pues otros 10
00:10:28
bancos me lo piden también y resulta que la forma de trabajar para en bolsa de todos ellos a lo
00:10:33
mejor termina siendo muy parecida pues pero otras otras a lo mejor otras líneas de negocio no tanto
00:10:38
no pues entonces a lo mejor puedo ir al primero de los proyectos y directamente coger el paquete
00:10:43
de donde he desarrollado el código relacionado con bolsa y coger y utilizarlo directamente
00:10:49
trasladando ese paquete de forma completa al otro proyecto
00:10:56
y haciendo quizás algún pequeño retoque.
00:11:00
¿Estas ventajas tiene?
00:11:02
Al final, en los proyectos de ingeniería,
00:11:03
de ingeniería y ingeniería software también,
00:11:06
lo que sueles facturar son horas que facturas
00:11:09
y horas que tienes que pagar a quien está haciendo el desarrollo.
00:11:13
Si ya lo tienes hecho el código de otra ocasión,
00:11:15
a lo mejor con un poco de suerte hasta puedes facturar como nuevo
00:11:20
y tener los beneficios como reutilizado.
00:11:22
Y no solamente es el desarrollo, sino porque nosotros ahora justo aquí con Eclipse y en las clases vamos a hacer programas y parece que aquello ya se terminó, pero el hecho de hacer el desarrollo del código quizás no sea la que más tiempo te dedica en ocasiones y seguro que no es la que más dolor de cabeza te da.
00:11:26
Porque luego, bueno, pues hay que probar todo aquello, hay que tener certeza si vas a dar un producto ya incluyente que va a ser final que prácticamente nunca falla, ¿no? Por no quemar la imagen de tu empresa dando algo desarrollado y poco probado.
00:11:46
Entonces, paquetes que ya tienes muy trabajados, pues están ya muy probados y si los reutilizas, aparte de no tener que hacer el código, ya muy bien probados, pues eso ganas. Entonces, es un poco el espíritu de distribuir los proyectos en paquetes. ¿Sí? Más o menos.
00:12:00
Para nuestros proyectos, ahora en el momento, mira, cuando, si quitas el módulo, el ficherito ese, como lo he borrado yo aquí de este proyecto, te libras de ello.
00:12:21
Y luego, si quieres de todas formas organizar el código en paquetes, pues por aquí puedes crear nuevos paquetes y luego el código ir distribuyéndolo por ahí.
00:12:30
más o menos para hacer un enlace del estilo de lo que decía
00:12:38
el módulo info este de todo el proyecto, luego en la cabecera
00:12:43
se puede poner aquí código donde identifiques cada clase
00:12:47
en qué paquete está, que es con la etiqueta package
00:12:51
pero bueno, ya esto lo vamos viendo
00:12:54
pero un poco el espíritu de los paquetes es este, y bueno pues
00:12:59
ya ves, esto tiene un montón de opciones, yo seguro
00:13:06
Seguro que, al menos en un tema que habla de refactorización en entornos de desarrollo, hablaría de esta, de refactor y source, que viene a ser que el propio IDE te reconstruya o te dé ciertas características al código sin que cambie la funcionalidad, cambiando nombres de variables, cosas de este estilo.
00:13:10
trabajéis más en entornos
00:13:30
con ello. Y luego, bueno, pues por aquí
00:13:32
ya veis, tiene un millón de opciones
00:13:34
que seguro que todas son
00:13:36
súper útiles y te aportan cosas
00:13:38
y que yo no he utilizado nunca porque son tantas.
00:13:40
¿Alguna otra cosita por ahí?
00:13:50
Sí.
00:14:21
Sí. El bytecode.
00:14:28
No, no,
00:14:41
en realidad va contra el punto class.
00:14:42
Yo creo que sí.
00:14:46
El intérprete, a veces
00:14:48
nos intentan ayudar tanto los
00:14:49
cuando hacen los programas, que probablemente
00:14:51
el intérprete hasta sea capaz
00:14:54
de generar, el intérprete
00:14:56
te hablo del programa Java, no del Java
00:14:58
que es el compilador, probablemente
00:15:00
hasta si lo enfrentas al
00:15:02
punto Java, a lo mejor hasta te lo ejecuta
00:15:04
porque se va al código, hace el proceso
00:15:06
ese que haría el compilador
00:15:08
y
00:15:09
si
00:15:10
en realidad
00:15:18
si tú
00:15:26
Mira, te cuento, si tú utilizas el intérprete, que el intérprete es Java, el compilador es Javad, el intérprete Java. Si tú utilizas el intérprete, a ver, si saco aquí un editor texto, si tú, para compilar, el compilador es Javad, y el intérprete es Java.
00:15:26
si tú utilizas el intérprete imagínate que ya teníamos aquí una clase que era hola mundo punto
00:15:50
java entonces sobre esta clase es ahora que tú pasas el compilador y ésta te da esta es la que
00:15:56
te da el punto clase sobre el intérprete lo que le pasas es hola mundo en principio sin extensión
00:16:06
es como como en principio funciona pero si lo pasas sin extensión en el que ejecutas el punto
00:16:15
class y puede ser que si le pones me parece que alguna vez que he hecho yo alguna prueba si le
00:16:21
pones el donde está el código fuente pues el intérprete intenta intentar trabajar tanto por
00:16:27
nosotros que es como que hace las dos fases de una entonces es como que lo intenté compilar
00:16:34
e interpretar vale igual no hasta nos funciona pero lo suyo suyo lo purista es compiló con jabba
00:16:40
obtengo el punto clas y ejecutó con el intérprete el hola mundo sin el punto clas y en principio si
00:16:47
al ponerlo así sobre el que tira es sobre este no sobre este y se lo traga puede ser si yo creo
00:16:54
yo creo que no creo que pasa como tú dices pero cuando tú ejecutas así lo que te ejecuta realmente
00:17:09
es este a ver miramos vamos a hacer una pequeña prueba mira tenemos aquí este ejecutable el hola
00:17:17
2 este es el que cree cuando se dice la copia está el otro día entonces os dije que os comentaba la
00:17:28
semana pasada que tiene un directorio de trabajo eclipse que es este entonces vamos a ir ahí no
00:17:38
vamos a ir a ese proyecto a la hora 2 y mira no vamos a ir aquí al bien que tiene el punto
00:17:47
classo lo veis que si yo pongo aquí java bueno vamos a poner la ruta completa wish java aquí
00:17:54
me chiva la ruta observa que aquí no está el punto java si ponemos esto y ponemos hola hola 2 es cómo
00:18:00
funciona es decir me ha funcionado porque porque ha tirado del fichero punto clas miramos a para
00:18:14
ya salir de dudas total voy a cambiar el nombre a este fichero para que no exista el punto clas
00:18:22
y lo voy a llamar por un momento lo cambió el nombre vale ahora ahora lo recuperó por si
00:18:30
queremos hacer algo con él y entonces si ahora hago una ejecución es hago la ejecución del
00:18:40
intérprete que está en esa ruta de o la 2 pero ya no existe o la 2 punto clas sino que si teclas
00:18:46
punto 2 por dice que no puede encontrar el fichero ves como para que como ya no existe el punto clas
00:18:51
el intérprete en realidad está intentando tirar del punto clas y de hecho el mensaje que nos da
00:18:59
errores no puede encontrar el fichero punto clas del ejecutable o lados si volvemos a recuperarlo
00:19:04
pues en principio volvería a ir es decir que la idea funciona el teclado hay un poco la idea es
00:19:11
que contra quien tira el intérprete es contra el punto class y si lo ejecutamos contra el punto
00:19:22
java y funciona pues bueno es porque pues porque nos quiere ayudar el intérprete más de lo normal
00:19:27
pero no es en realidad para lo que está para lo que está diseñado mira ves ahora volvemos a
00:19:33
ejecutar y ya nos vuelve a funcionar porque porque tenemos volvemos a tener el punto class no sé si
00:19:40
has visto el bueno la tutoría del otro día y el vídeo hacíamos el proyecto este justo desde aquí
00:19:49
desde el terminal con un editor nano, compilábamos y terminábamos
00:19:55
lanzando el intérprete. Si quieres un poco aclarar
00:19:59
cómo lo hicimos, en el vídeo este que os tengo colgado en el aula virtual, justo estuvimos hablando
00:20:03
un poco de todo esto. Que es para centrar conceptos, porque ya no vamos
00:20:07
a volver a hacer proyectos a través de esos medios, sino que
00:20:11
utilizaremos el IDE. ¿Alguna cosilla más por ahí?
00:20:15
Te salen pequeñas, ¿no? No sé si será porque...
00:20:46
Te sale de partida pequeño, ¿no?
00:21:04
Es que...
00:21:08
A ver, a ver, ¿dónde es?
00:21:09
Yo...
00:21:46
Sí.
00:21:47
Sí, bueno, y te iba a comentar yo justo eso también.
00:21:48
Están Virtual Boss,
00:21:51
que es una cosa independiente en sí de la máquina.
00:21:53
Tiene una cosa que se llama las Guest Additions,
00:21:57
que es, bueno, pues cosas adicionales a los invitados,
00:21:59
se podría traducir, pero bueno,
00:22:02
que lo que te hace es que...
00:22:04
¿Sí?
00:22:09
sí que lo pusiste
00:22:09
entonces
00:22:16
ya
00:22:17
es que
00:22:20
es que justo
00:22:21
justo con
00:22:21
las
00:22:25
las GES Addition
00:22:25
suelen tener que ver
00:22:26
con eso
00:22:26
entre otras cosas
00:22:27
pero
00:22:28
pero
00:22:29
cuando no tienes instaladas
00:22:29
las GES Addition
00:22:31
implica que
00:22:31
te salen pequeño
00:22:33
y luego cuando metes
00:22:34
las GES Addition
00:22:35
entre otras cosas
00:22:36
lo que hace es
00:22:37
digamos adaptar
00:22:37
al tamaño
00:22:38
de tu pantalla
00:22:39
y te lo vuelve en grande
00:22:40
teóricamente
00:22:41
eh
00:22:43
sí
00:22:44
las
00:22:44
las
00:22:45
Ya, claro
00:22:47
Pues no sé decirte
00:22:51
¿No habrás cambiado de versión
00:22:56
De VirtualBox respecto al año pasado
00:22:58
Y se te ha quedado desactualizada
00:23:00
La gestión?
00:23:02
Y ha sido a posteriori
00:23:14
Sí
00:23:16
Sí, nada
00:23:38
No se me ocurre nada así de antemano
00:23:40
No sé si quieres abrir
00:23:42
Si te da muchos problemas
00:23:44
Pon algún pantallazo ahí en el foro
00:23:46
A ver si entre todos se nos ocurre echarte una mano.
00:23:48
Así de primeras, se me ocurría lo de la Guest Addition, pero poco más.
00:23:51
A bote pronto.
00:23:55
Bueno, nos vas contando, Silvia.
00:24:07
Pero ¿por qué has puesto Java.class?
00:24:31
¿O cómo?
00:24:33
Sí, si le pones la extensión .class, mira, no sé si me estás viendo a mí ahora.
00:24:34
Si le pones la extensión .class, es verdad que no funciona.
00:24:43
O sea, el intérprete utiliza el .class, pero sin ponerle el .class.
00:24:45
Ya, igual te está pasando esto porque, como has organizado el proyecto con paquetes, entonces igual intenta buscar esas estructuras que te aportaría el ficherito módulo java.modulo, ese que aparecía ahí al principio, que bien configurado te da la estructura de cómo encontrar unos paquetes u otros.
00:24:50
mira hace una cosa si te parece crea un nuevo proyecto elimina el fichero ese genera el hola
00:25:43
mundo y si quieres intenta ejecutarlo desde el terminal yo creo que va a funcionar sí sí pues
00:25:51
mira en él justo ese proceso es uno de los que hicimos te lo digo por bueno pues por darme otras
00:26:11
cosas lo hicimos justo aquí en este vídeo en este que no sé si has podido ver el vídeo que os colgué
00:26:18
de la semana pasada justo estuvimos haciendo eso desde el terminal creando un proyecto no
00:26:25
lo creamos no lo metíamos en ningún paquete y ejecutamos el bueno con el intérprete del punto
00:26:31
class entonces si te parece echar un ojillo y si tienes algún problema si quieres en la próxima
00:26:38
tutoría si ves que aún así no te sale o a través del foro me lo comentas y lo intento echar un
00:26:44
vistazo por hacer algo lo digo por hacer algo un poco diferente a lo que hicimos ya la semana
00:26:51
pasada sabes si te parece vale de tal forma no te quedes con la duda ya te digo si vuelves a
00:26:55
intentarlo viendo el vídeo y no te funciona o bien por foros o la semana que viene lo echamos un ojo
00:27:05
que para eso son estas tutorías en principio para aclarar dudas que podéis tener bueno alguna
00:27:11
cosilla más pues hoy yo creo que hoy mismo os abro os abro el tema 2 y como en el tema 1 ya
00:27:22
lo habíamos repasado y no tiene grandes cosas que hacer pues lo vamos a hablar sobre contenidos que
00:27:34
tenéis que se os abren aquí en este tema entre lo que comentemos hoy y bueno durante la semana
00:27:39
cosas que podéis ir viendo incluso la tutoría de la semana que viene si es necesario pues
00:27:46
terminamos de finiquitarlo porque este tema tiene solo una semana de vida y luego ya la siguiente
00:27:50
pues nos vamos a ir al tema 3. Vamos a ir directamente ya aquí a Eclipse y vamos a empezar
00:27:55
a hablar de diferentes conceptos de los que van a aparecer por ahí. El lenguaje, cuando trabajamos
00:28:05
con un lenguaje de programación, pues hay un montón de... ese lenguaje tiene una semántica,
00:28:11
que es como se entienden las cosas, una sintaxis, típico como en lengua castellana tenemos palabras que tienen su sujeto, su predicado,
00:28:18
pues aquí es necesario para hablar en castellano, pues seguir una determinada estructura, pues los lenguajes de programación tienen su sintaxis.
00:28:28
¿Quién se encarga de comprobar esa sintaxis? Pues el compilador.
00:28:37
cuando nosotros le pasamos a un código java con código fuente
00:28:45
el compilador lo que verifica es todas estas cosas
00:28:50
el compilador en sí no sabe si tu propósito es
00:28:53
en tu algoritmo es una suma y tú le pones
00:28:58
el signo de resta, pues el compilador no sabe interpretar que tú lo que querías
00:29:02
era sumar, pero sí sabe que si en lugar de
00:29:06
si tú tienes dos variables y pones a más b, pues le gusta porque
00:29:10
el más lo entiende como un símbolo que hace sumas, el a menos b lo entiende también y si pones a, z, b, pues esto no lo sé, porque con una variable que pueda haber por aquí y otra aquí, no hay nada que me realice una operación entre dos variables poniendo la etiqueta de una z.
00:29:14
Entonces, este no le gustaría y estas, pues en principio sí le gustaría.
00:29:32
En Java, dentro de la sintaxis que tenemos, todas las instrucciones, que no necesariamente tienen por qué estar en una línea,
00:29:39
pero lo que sí que sucede es que todas las instrucciones acaban con un punto y coma.
00:29:46
Pues bueno, eso forma parte de la sintaxis de Java.
00:29:49
¿No vamos a otro lenguaje? Pues podrá tener una sintaxis un poquito diferente y obligarnos a seguir unas determinadas pautas que hay igual Java, ¿no?
00:29:52
En cada uno de los lenguajes tendremos que aprender esa síntesis, igual que si queremos hablar en castellano, en vasco, en catalán o en gallego. Cada uno tiene sus reglas y hay que trabajar sobre ellas.
00:29:58
Entonces tendremos una serie de palabras que son reservadas en cada uno de los lenguajes y que terminarán utilizándolas o tokens que terminarán utilizándolas para validar que sean correctas las estructuras.
00:30:12
Entonces fijaros por aquí, public, static, void, todas estas que nos aparecen por aquí en rosita, son palabras de esas reservadas que tenemos en Java.
00:30:29
String, esta no nos aparece en rosita, pero también es una palabra reservada que necesariamente tenemos que utilizar para darle ciertas funcionalidades
00:30:41
y que no podemos definir, por ejemplo, nosotros variables que tengan estos nombres porque confundirían estas palabras claves con aquellas variables que queremos ir utilizando en nuestro programa.
00:30:50
Hola2, en cambio, no es una palabra que esté reservada por Java, con lo cual lo podemos utilizar nosotros para dar nombre a una clase.
00:31:00
Pues ahí tenemos la clase Hola2, que no utiliza una de las etiquetas propias de Java y que tiene reservadas.
00:31:07
Bueno, entonces, ¿con qué tipo de cosas trabajamos nosotros en Java?
00:31:14
Pues una de las cosas con las que trabajamos, bueno, en cualquier lenguaje de programación, una de las cosas que necesitamos son variables.
00:31:24
¿Las variables para qué nos sirven? Pues nos sirven para ir teniendo información del desarrollo de nuestro programa mientras está en ejecución, cosas que no queremos perder.
00:31:29
Mira, si queremos hacer un programa que sume números, pues cogemos y podemos definir con una etiqueta de las definidas en Java, int.
00:31:43
esta está asociada a un tipo de datos entero, es decir, un valor numérico entero
00:31:54
que se almacenará en la memoria RAM con 32 bits
00:31:59
y lo siguiente que vamos a identificar va a ser una variable de tipo entero
00:32:03
entonces ponemos int a, entonces ponemos aquí un punto y coma
00:32:10
pues a sería una variable de tipo entero
00:32:15
y en esta a podríamos guardar números para ir utilizando luego en el programa
00:32:18
entre un determinado rango que es el que acepta guardar información de tipo sin decimales, números sin decimales en 32 bits.
00:32:24
Aquí podríamos coger y decir, pues mira, que directamente va teniendo ya un valor, un 7 de inicio.
00:32:37
Lo que hacemos es aquí, en una variable que es de tipo entero, guardar un número.
00:32:42
Igual que tenemos los tipos enteros, pues podemos tener cadenas de caracteres.
00:32:49
Las cadenas de caracteres en Java, estas son cosas que tenemos que aprender de cada uno de los lenguajes,
00:32:53
No tanto el algoritmo de pensar cómo vamos a resolver un problema,
00:32:58
porque ese algoritmo sí que puede ser común a muchos lenguajes.
00:33:02
Y lo podríamos escribir incluso antes de programar en un lenguaje o en otro con pseudocódigo.
00:33:06
Pero sí que cada uno de los lenguajes, luego cuando vamos a llegar a la concreción de escribirlo en él,
00:33:11
pues tendrá unas, a lo mejor otro lenguaje utilizará entero para guardar un valor numérico que no tenga decimales.
00:33:17
Pues Java utiliza int. ¿Qué utiliza Java para guardar cadenas de caracteres? Pues string. Entonces lo que definamos como string es nombre. Los string los metemos en Java entre comillados. El texto que queremos que vaya en esta cadena de caracteres que en el contexto de este método lo hemos llamado nombre y es de tipo cadena de caracteres porque lo hemos definido como un string, pues lo ponemos entre comillas aquí.
00:33:26
Entonces, por ejemplo, ponemos aquí José, con lo cual la variable José en este momento tiene un valor, la variable ese nombre en este momento tiene un valor que es José y el tipo de información que ha sido capaz de guardar al definirla como un string es una cadena caracteres, que la sintaxis para ponerlo en Java es entrecomillado.
00:33:57
Pues igual que tenemos estos dos tipos, pues tenemos otro tipo para guardar números enteros que es el tipo long, pues también guarda valores enteros, pero este cuando hace una reserva en la memoria RAM, y ahora os hablo de la memoria RAM, para albergar el valor que tiene B, reserva más bits, entonces como reserva más espacio en memoria, el rango de valores puede ser mayor.
00:34:18
Si quisiéramos guardar, por ejemplo, no sé si en el tema habla de la población mundial o cuando habla un poco del ejemplo de esto, el número de habitantes que tenemos en el mundo, pues a lo mejor en 32 bits no dan como para guardar un número de la población mundial.
00:34:46
O sí, bueno, siempre habrá un número más grande que ya no entrará dentro del rango de los que aceptan los enteros.
00:35:03
Entonces, en ese caso, lo que haríamos sería definir otra variable que también es de tipo entero, sin decimales, long,
00:35:09
y entonces este, como ocupa más espacio, reserva más espacio de memoria para guardar el valor,
00:35:16
pues su rango de valores que puede guardar es mayor.
00:35:21
En cuanto a los enteros, tenemos estos, luego tenemos otro tipo, que es el tipo byte, que también guarda enteros.
00:35:26
Y en cuanto a los valores que almacenan con decimales numéricos, pues tenemos el float, tenemos el double, estos dos nos permiten guardar valores con decimales, punto, como carácter, a ver qué es lo que está pasando aquí, bueno, con float me decía que hiciera un casting ahí, float, no sé muy bien por qué, bueno, luego os hablo de los casting también.
00:35:32
Pues estos admiten números decimales. Los tipos de datos que tenemos predefinidos en Java, pues para enteros estos tres, para números incluyendo el float, que me está dando ahora un mensajillo de error, luego lo investigamos.
00:36:24
cadena de caracteres, tenemos los string, hay algunos más, pero estos son los más típicos.
00:36:39
Para un solo carácter, es decir, un valor alfanumérico, pero uno solo,
00:36:46
pues podemos definir un char, los char, si las cadenas de caracteres se guardan entre dos comillas,
00:36:52
pues los char se guardan con una comilla simple.
00:36:59
Y luego tenemos también los Boolean, que son tipos de datos que almacenan dos posibles valores, que son o bien verdadero, true, o bien falso, la otra alternativa. Iremos trabajando mucho sobre ellos.
00:37:03
¿Qué pasa cuando nosotros queremos dar de alta una variable que vamos a ir utilizando en nuestro programa?
00:37:21
Pues esto se traduce en que el intérprete en este caso necesitará para guardar esta información que A, hasta que termine de estar en uso A, si la queremos volver a utilizar por aquí,
00:37:31
que este dato sea capaz de guardarse relacionado
00:37:46
con una variable A en nuestro programa, implicará
00:37:50
que se tendrá que guardar ese valor en algún sitio.
00:37:52
¿Qué tenemos en el ordenador para guardar este tipo de información
00:37:55
de los programas en ejecución?
00:37:58
Pues tenemos la memoria RAM.
00:38:02
Si abrimos el ordenador en la asignatura
00:38:04
de sistemas informáticos, veremos que es un dispositivo
00:38:07
que está penchado junto al procesador y junto al resto
00:38:10
de componentes hardware. El sistema operativo hace una gestión
00:38:14
intermedia entre los programas que necesitan hacer uso de la RAM
00:38:18
y el hardware que está pinchado en nuestro ordenador. El hardware
00:38:22
nos queda muy lejos, entonces nosotros desde el lenguaje, cuando estemos hablando
00:38:26
de nuestros programas, diremos, nuestro intérprete en este momento
00:38:29
está dando de alta una variable de tipo entero
00:38:34
que sabemos que en memoria RAM ocupa 7 bytes y queremos que guarde
00:38:37
un valor de un 7. Por lo que hará el intérprete será decir al sistema operativo
00:38:41
vete a buscar en el sistema operativo, busca en la memoria RAM
00:38:46
espacio de 32 bits al menos, y relacionalo con que tiene que ver
00:38:52
con esta variable A del programa que estoy ejecutando.
00:38:58
Y guarda el valor 7. Esto es lo que hará el sistema operativo
00:39:01
y hará esa reserva. ¿Hasta cuándo tendrá reservado
00:39:07
nuestro programa esa memoria RAM para guardar
00:39:11
información en nuestra variable? Hasta que esta variable se salga de ámbito.
00:39:15
El ámbito es un término que tiene que ver con el momento
00:39:20
en el que está viviendo, tiene vida
00:39:23
nuestra variable en el programa. Y los ámbitos los marcan las llaves.
00:39:27
Entonces, esta variable A está en el ámbito
00:39:32
de este método main
00:39:35
entonces cuando acabe el método main
00:39:37
finalizará la variable a que está definida dentro de este ámbito
00:39:41
si, bueno
00:40:03
el recolector de basura es una herramienta
00:40:05
me preguntaba, lo digo porque en la grabación
00:40:09
vuestro audio no se escucha, me preguntaba
00:40:12
un compañero si hay alguna forma
00:40:15
de saber cuando el recolector de basura va a liberar
00:40:18
la memoria RAM que ha reservado para una determinada variable
00:40:21
en nuestros programas de Java.
00:40:24
El recolector de basura es un programa que corre por ahí detrás,
00:40:27
que nosotros no tenemos que preocupar en principio por él,
00:40:30
y que es el encargado de irse dando cuenta de aquellas variables
00:40:33
que han dejado de utilizarse dentro de nuestro programa
00:40:38
y cuando se da cuenta de esto, avisa al sistema operativo
00:40:41
de que esa variable ya no tiene sentido en nuestro programa
00:40:46
y el sistema operativo libera esa memoria RAM para que pueda ser utilizada por otras variables en nuestro programa
00:40:49
o por otras variables de otros programas diferentes. Ese es el recolector de basura.
00:40:55
El recolector de basura es un proceso que corre de forma independiente a nuestro programa.
00:40:59
Entonces se activa cuando él quiere. No sé exactamente, bueno, cuando él quiere, entiendo que habrá que en sí Java en su estructura
00:41:04
tendrá unos criterios para activar el recolector de basura, pero no es algo que nosotros,
00:41:12
normalmente nuestros programas
00:41:16
hagamos, si que hay
00:41:18
la posibilidad para objetos de clase
00:41:20
que ya os comentaré lo que son los objetos
00:41:22
de clase y como trabajan con la memoria RAM
00:41:25
si que creo recordar
00:41:27
que tiene un método que es el método destroy
00:41:29
en el cual podemos
00:41:31
obligar sin que sea
00:41:32
el recolector de basura de forma
00:41:34
independiente cuando el
00:41:36
le toque
00:41:38
liberar la memoria RAM, obligar a nosotros
00:41:39
a que se libere, pero normalmente a no ser
00:41:42
que tengamos un lenguaje de altísimo
00:41:44
rendimiento, pues nos despreocupamos de liberar
00:41:47
la memoria RAM y ya será el recolector de basura quien se encargue
00:41:50
de hacerlo. Esto es una
00:41:53
ventaja que tiene Java, la existencia del recolector de basura
00:41:56
porque luego hay otros lenguajes como C, que creo
00:41:59
que os hablaba de él el primer día, una pregunta que me planteabais
00:42:02
algunos de vosotros, que no tiene recolector de basura.
00:42:05
Entonces, si tú reservas memoria para
00:42:09
variables y tú por código no la liberas,
00:42:11
lo que vas haciendo es dejar bloqueada esa memoria continuamente en el ordenador.
00:42:14
Y si haces muchísimas reservas de memoria sin liberar nunca,
00:42:19
podrías llegar a comerte todos los recursos de memoria RAM que tiene el ordenador
00:42:23
y dejarte de funcionar no solo tu programa, sino todos los demás que estén ejecutándose en tu ordenador.
00:42:26
¿Por qué? Por falta de memoria RAM.
00:42:31
En este caso con Java, somos afortunados que el recolector de basura lo va a ir haciendo a su aire.
00:42:33
Él va a chequear que hay variables que ya no están usándose. ¿Por qué?
00:42:39
Porque el ámbito donde se estaban ejecutando ha dejado de estar en funcionamiento, entonces ya no son necesarias esas variables y como no lo son, el recolector de basura coordinado con el sistema operativo liberará esa memoria RAM.
00:42:42
y os decía antes
00:42:55
creo que el método
00:42:58
destroy durante el curso
00:43:00
lo veremos en algún momento
00:43:02
puede con independencia
00:43:04
de que el recolector de basura
00:43:06
libere memoria RAM creo que puede dar
00:43:08
la orden de liberar memoria RAM
00:43:10
pero
00:43:11
generalmente no lo hacemos y os decía
00:43:14
a no ser que sea un programa de alto rendimiento
00:43:16
que necesitemos que todos los recursos
00:43:18
estén muy muy disponibles en todo
00:43:20
momento, que pasa que
00:43:22
normalmente si vamos a hacer un programa de este estilo
00:43:24
no solemos trabajar con Java
00:43:26
es un programa que su máximo objetivo
00:43:27
sea sacar el mejor de los
00:43:30
rendimientos y el tiempo real
00:43:32
como podrían ser otros programas
00:43:34
imaginaros yo que sé un programa que está
00:43:36
un día os hablaba de ello también
00:43:38
una central nuclear y
00:43:40
de un sensor tiene que detectar una fuga
00:43:42
y no le vale cada milisegundo
00:43:44
a lo mejor es oro para bloquear
00:43:46
o sellar unas puertas
00:43:48
entonces esos programas a lo mejor
00:43:49
tienen que ser en tiempo real
00:43:52
de cuando pasa ya tiene que estar el aviso dado, pues esos programas
00:43:53
no los haríamos en Java en ningún caso. Utilizarían otros lenguajes más
00:43:58
enfocados a ese tipo de funciones. Continúo con esto.
00:44:01
Me vais interrumpiendo si tenéis consultas que hacerme.
00:44:12
O si me preguntáis alguna cosa y no queda muy clara, pues también
00:44:15
me decís. Cuando trabajamos
00:44:19
con variables en nuestros programas, ya os digo
00:44:22
las variables tienen que guardarse
00:44:27
en memoria RAM. El primero
00:44:29
de los días, os decía, un programa normalmente
00:44:33
y Java en particular es un lenguaje orientado a
00:44:35
utiliza programación orientada a objetos
00:44:38
con lo cual tenemos clases y de esas clases creamos
00:44:42
objetos. Y os hablaba del desarrollo de una clase
00:44:45
donde había profesores y creábamos diferentes clases
00:44:48
y luego interactuaban unas con otras.
00:44:50
estos objetos, vamos a crear en este programa una clase
00:44:53
esto que estoy haciendo ahora es comentar el código
00:44:58
en Java hay dos opciones, puedes comentar el código línea a línea
00:45:08
que es con
00:45:13
las dos barritas estas o bloquer de código multilínea
00:45:16
con la barra y el asterisco y al finalizar asterisco
00:45:20
barra, esto que implica aquel código que pongamos entre
00:45:24
comentarios, bien sea código o bien sea texto. Todo lo que se encuentre el compilador
00:45:28
Javad cuando vaya a compilar nuestro programa, lo que encuentre como comentario, es decir,
00:45:33
a la línea que hayamos antepuesto el barra barra o le hayamos puesto la barra asterisco
00:45:38
con cierre asterisco barra, lo considera como comentarios al código, no código propiamente
00:45:44
dicho y no lo tiene en cuenta en la compilación. Este código no lo voy a borrar ahora de momento
00:45:49
por si lo queremos reutilizar, pero como no me interesa por el momento, lo voy a poner como comentado.
00:45:56
Y mirad, vamos a crear en este proyecto otra clase, en el proyecto hola2, que es justo sobre el que estamos,
00:46:04
este a, vamos a crear la clase, por ejemplo, la clase profesor o la clase alumno.
00:46:09
Fijaros que ahora ya nuestro programa tiene dos clases, una hola2.java, que es donde está ese punto de entrada
00:46:25
del programa, el módulo main y otra clase alumno que tendrá una serie de características
00:46:32
propias de los alumnos y definiremos unos métodos que serán aquellas acciones que
00:46:38
hacen los alumnos. Y luego podremos ir dando de alta alumnos para que vayan participando
00:46:43
en nuestro programa. Vamos a suponer que los alumnos tienen un nombre y los nombres en
00:46:48
qué tipo de variables los almacenamos. Los almacenamos en variables de tipo string.
00:46:57
Pues mira, vamos a definir aquí que cuando yo luego dé de alto a un alumno, tendrá unos parámetros, madre mía, teclado, bueno, tendrá unos parámetros, no lo corrijo porque la letra del teclado de retroceso no me va muy bien.
00:47:02
de hecho tendrá unos parámetros que caracterizarán a los alumnos
00:47:29
por ejemplo tendrán un nombre
00:47:34
y luego vamos a suponer que tienen una edad
00:47:35
los parámetros numéricos hemos dicho
00:47:56
la edad será un número entero
00:48:00
no será muy grande, vamos a definirlo como un entero
00:48:02
y luego los alumnos podrán hacer una serie de cosas
00:48:05
os acordáis que os comentaba que las cosas que pueden hacer
00:48:10
las identificamos como métodos
00:48:14
Entonces, dentro de las etiquetas, pues tenemos public, que ya hablaremos de qué es, o private, o protected, public void, saludar, vamos a poner. Ponemos aquí otras llaves. System.out, ahora repasamos todo este código.
00:48:16
mirad aquí, respecto a los ámbitos que os decía
00:48:44
hemos definido un ámbito que corresponde a toda la clase
00:49:03
he abierto aquí una llave, Eclipse me está archivando que se cierra aquí
00:49:08
con lo cual las variables que definamos en este ámbito
00:49:12
como puede ser el senombre o el iedad
00:49:15
están activas en todo momento
00:49:19
en el que tengamos un alumno, cuando creemos una variable de tipo alumno
00:49:24
ahora la vamos a crear después, su ámbito de vida es el que hemos definido con código entre estas dos llaves.
00:49:28
Como estas variables están definidas en todo el ámbito, esas variables se habrá reservado en memoria RAM
00:49:35
para ellas mientras el alumno exista. En cambio, si cogemos y ponemos aquí saludar y definimos una variable
00:49:42
de tipo string, que la definamos como misal hola desde saludar, esta variable misal, que viene a significar
00:49:52
de mi saludo, está definida en este otro ámbito, con lo cual esta variable está disponible dentro del método saludar
00:50:10
y estas para toda acción que realice un alumno, por ser su ámbito. Si cogemos y ponemos aquí otro método
00:50:17
que sea despedirse. La variable misal está disponible en el método saludar pero como está
00:50:25
definido en este método una vez que se encuentra la llave de cierre de saludar misal desaparece y
00:50:45
será el recolector de basura el que termine eliminando ese espacio de memoria y no estará
00:50:51
disponible en despedir. ¿Por qué? Porque solamente está en este ámbito. En cambio ese nombre eiedad
00:50:57
como está disponible en todo el ámbito de la clase alumno
00:51:03
podríamos utilizarla dentro de saludar o podríamos utilizarla
00:51:07
dentro de despedir. Fijaros como
00:51:10
si yo le doy un valor aquí a iedad
00:51:14
no se queja el compilador, no se pone en rojo
00:51:16
si le doy un nuevo valor a mi sal
00:51:25
tampoco se queja, ¿por qué?
00:51:28
porque estas dos variables en esta zona
00:51:34
están dentro del ámbito donde están definidas, una porque
00:51:37
está definida en toda la clase y otra porque está definida dentro del método
00:51:40
saludar. Pero si yo trabajo con
00:51:43
esas dos variables dentro del método despedir
00:51:46
y edad sí que le sigue gustando, pero mi sal
00:51:49
ya no. ¿Por qué? Porque no existe en el ámbito de despedir,
00:51:53
solamente existe en el ámbito de saludar. Se entiende
00:51:55
más o menos supongo esto de los ámbitos donde están definidas
00:52:04
las variables. Mirad, aquí
00:52:07
en este proyecto tenemos
00:52:11
el main y la clase alumno.
00:52:15
En este proyecto cogemos y podemos definir en el método main, que decimos que es el punto de entrada a nuestro programa,
00:52:18
podemos definir una variable.
00:52:25
Entonces decimos string sbar y la inicializamos como variable 1.
00:52:26
Nuevamente esta variable estará definida dentro del ámbito del main.
00:52:38
Todo lo que pase dentro del main podrá utilizar la variable sbar.
00:52:41
String es una clase que está definida en las librerías de Java.
00:52:47
Como vamos a...
00:52:52
Bueno, string luego tiene...
00:52:54
Sí, string está definida dentro de las clases de Java.
00:52:55
En particular, el tipo string, sí.
00:52:58
Java tiene definidas una serie de variables
00:53:01
que son estas que os había puesto por aquí.
00:53:04
Las voy a rescatar, todas estas.
00:53:08
Que las llama variables primitivas.
00:53:11
Primitivas de Java.
00:53:14
Es decir, que las tiene definidas
00:53:16
para que las utilice cualquiera en cualquier momento.
00:53:18
son características muy habituales en todo programa,
00:53:20
que existan cadenas de caracteres, con lo cual nos han despreocupado
00:53:25
de que tengamos que nosotros definir los componentamientos
00:53:29
de estos tipos de variables y las han definido ellos en las librerías.
00:53:31
En cambio, no todo proyecto tiene una clase que sea alumno.
00:53:37
Esta es muy particular del problema que queremos resolver nosotros.
00:53:42
Entonces, aquí es donde empezamos a nosotros a actuar
00:53:45
definiendo nuestras clases propias de nuestro ejercicio.
00:53:47
Nuestro ejercicio utilizará cosas que definamos nosotros particulares para él y utilizará cosas que están disponibles desde las clases de Java.
00:53:50
Fijaros, hemos querido definir una variable que al llegar aquí habrá pedido nuestro programa sistema operativo que haga una reserva de memoria para guardar con ese nombre el valor jose.
00:54:01
y podremos definir una nueva variable que en este caso
00:54:12
en lugar de ser de tipo string sea de un tipo que hemos creado nosotros
00:54:17
en nuestro programa, que tenemos un esquema de qué características tiene
00:54:21
y cómo se comporta. Entonces cogemos y definimos un alumno aquí
00:54:25
alumno al 1, vamos a llamarlo alumno 1
00:54:28
Entonces ahora acabamos de definir una variable
00:54:34
de tipo alumno. ¿Al 1 qué tendrá? Pues tendrá las características
00:54:48
string, ese nombre que tendrá, pues
00:54:52
aquellas características que se hayan definido en las librerías
00:54:55
de Java para toda variable que sea de tipo string.
00:54:58
Ya veremos cosas que se pueden hacer con los strings. Sobre todo
00:55:01
es trabajar con cadenas de caracteres. Al 1, ¿qué
00:55:04
será? Pues será una variable en nuestro programa, igual que
00:55:07
ese nombre lo es, que es de tipo objeto
00:55:10
de una clase que tendrá como características
00:55:13
y cosas que puede hacer aquello que hayamos definido
00:55:16
para este tipo de datos. Este tipo de datos es un tipo que hemos
00:55:19
incorporado a nosotros en nuestro programa como una clase, que es la clase
00:55:22
alumno. ¿Y qué es en particular lo que puede hacer? Pues lo que hayamos puesto nosotros aquí en el
00:55:25
programa Java, tendrá estas características y estos métodos, estas
00:55:29
propiedades. Los tipos que ya están disponibles en Java,
00:55:33
string es un poco particular, pero bueno, aquí en este contexto lo vamos a meter
00:55:44
también entre los tipos propiamente definidos en Java para lo que os voy a contar,
00:55:47
como puede ser, por ejemplo, el tipo string, el tipo int, son los tipos primitivos
00:55:51
de Java. Y los tipos como alumno, que son clases que definimos
00:55:56
nosotros, de los cuales podemos crear también variables, son
00:56:01
variables referenciadas. Ahora os desarrollo lo de referenciadas.
00:56:05
Tipos primitivos, variables referenciadas. ¿Qué sucede cuando
00:56:09
en nuestro programa, si os pierdo en algún momento me cortáis
00:56:14
o me vais diciendo? ¿Qué sucede cuando en mi programa yo defino
00:56:19
una variable de un tipo primitivo.
00:56:23
Pues directamente, como os decía antes,
00:56:26
el intérprete va a preguntar al sistema operativo
00:56:29
por espacio donde guardar una información
00:56:32
tipo cadena de caracteres, porque la hemos dicho string,
00:56:34
o entero, si siguiéramos con este otro ejemplo,
00:56:37
le va a asociar a esa zona de memoria
00:56:41
el nombre de la variable, ese nombre,
00:56:44
y va a guardar su información.
00:56:46
Es decir, en esta línea de texto,
00:56:49
cuando llegamos a esta línea de código
00:56:51
cogerá mi intérprete y dirá
00:57:05
sistema operativo, necesito
00:57:08
espacio para almacenar
00:57:11
un string
00:57:16
el sistema operativo buscará en la memoria RAM y dirá
00:57:17
una vez en un sitio, otra vez en otro
00:57:22
es una gestión que hace el sistema operativo con independencia
00:57:24
de que nosotros la podamos controlar, pues dirá
00:57:27
en la posición de la memoria RAM, en la 20.000
00:57:29
resulta que tengo espacio para guardar
00:57:32
tu stream
00:57:35
y te lo reservo
00:57:36
con lo cual
00:57:37
desde la 20.000 hasta un determinado
00:57:40
espacio que ocupará para la cadena stream
00:57:43
vamos a suponer que es hasta la 20.020
00:57:44
este espacio
00:57:47
está reservado y ahí voy a guardar
00:57:51
tu información que es José
00:57:52
y cuando quieras
00:57:54
preguntarme por ella, lo voy a dejar asociado
00:57:56
a una variable que me has dicho que es ese nombre
00:57:58
cuando tú me preguntes por ese nombre, me iré
00:58:00
a la posición 20.000 y sabiendo que en el espacio
00:58:02
entre la 20.000 y 20.030 está la información relacionada con ese nombre, te diré
00:58:06
que lo que había ahí es José. Si yo cojo
00:58:10
en el programa para esa misma variable y le pongo ese
00:58:14
nombre igual a José2, pues dirá, como ese nombre está
00:58:17
asociado a esta zona de memoria, para la cual he reservado ya
00:58:21
un espacio, pues en ese espacio de memoria guardo ese 2. Cuando me preguntes
00:58:25
por ese nombre, ahora lo que pondrás será jose2
00:58:30
y te devolveré que esa variable en esa posición de memoria
00:58:32
tiene jose2, en la forma en la que va a ir trabajando Java.
00:58:36
Para cuando hacemos la definición de una variable primitiva de Java,
00:58:41
el sistema operativo ya hace esta reserva.
00:58:53
Pero cuando hacemos la definición de una variable
00:58:57
que es referenciada, es decir, un objeto, la variable que apunta a un objeto
00:59:00
de una clase nuestra o incluso de una clase de Java, pero un objeto de una clase
00:59:06
en una de las variables primitivas, lo que estamos reservando es una referencia
00:59:12
en memoria. ¿Esto cómo funciona? Esta instrucción está escrita aquí en dos fases
00:59:17
que la vamos a romper ahora. Vamos a quitar este trozo aquí y ahora vamos a poner esto.
00:59:24
En estos dos trozos. Cuando nosotros cogemos y hacemos esto, estamos definiendo una variable que va a ser de tipo alumno. Pero no, el sistema operativo en este caso no reserva el espacio de memoria necesario para albergar toda la información de un alumno.
00:59:36
Fijaros, como poco, un alumno necesita espacio de memoria para guardar un nombre y una edad. Lo que hace es guardar una referencia. Dice, vale, esta variable, cuando vayas a querer referirte a ella, tienes para esta variable, busco en memoria RAM y te doy la posición 30.000 en este caso.
00:59:54
esa referencia es donde
01:00:15
vas a ir a buscar información cuando
01:00:19
hagas referencia en tu programa al 1
01:00:22
que es un objeto de la clase alumno
01:00:25
pero no te he reservado de la 30.000
01:00:28
a un determinado número de memoria RAM
01:00:31
donde puedas guardar el nombre y la edad
01:00:35
solamente te voy a reservar un trocito de memoria
01:00:38
pequeño para que se almacene
01:00:41
una referencia. Es decir, aquí voy a decirte
01:00:44
que si tú ahora coges y me haces este otro bloque de código
01:00:48
new, con este new es el momento
01:00:52
en el que te voy a reservar espacio para guardar todos estos datos.
01:00:57
Entonces, con este new se fija
01:01:02
en cómo está construido el alumno, que tiene
01:01:05
un nombre y una edad, y dice, para un string necesito
01:01:08
20 bytes y para
01:01:12
un entero necesito
01:01:14
32. Entonces aquí es cuando
01:01:16
yo cojo y busco en memoria RAM
01:01:18
un espacio mucho más grande
01:01:20
donde poder guardar esa información
01:01:22
que imaginemos que es del 50.000
01:01:24
al 50.050.
01:01:26
En este espacio de 50.000 al 50.050
01:01:30
en el 50.000
01:01:33
estará para
01:01:34
alumno 1
01:01:36
el nombre
01:01:37
desde el 50.000 al 50.030, vamos a suponer, y del 50.030 al 50.050 es donde estará la edad.
01:01:40
Y aquí, en este espacio entre el 30.000 y el 30.002, lo que guardará es que la información DAL1 se encuentra a partir del 50.000.
01:02:02
Recapitulamos.
01:02:18
Las variables primitivas hacen, cuando tú defines una variable directamente de las primitivas de Java,
01:02:20
hacen ya la reserva del espacio donde se va a guardar su información
01:02:25
sin que tengamos nosotros que hacer nada más.
01:02:30
Dice ya, reservo memoria para que tú pongas ahí el dato, José 2.
01:02:33
Cuando definimos un objeto de una clase, lo que se guarda es,
01:02:38
estamos aquí definiendo un objeto de una clase,
01:02:44
lo que se guarda es en memoria run la posición donde luego
01:02:47
vamos a ser capaces de guardar los datos de ese objeto
01:02:54
si ese objeto tiene un nombre y una edad
01:02:58
necesitará un espacio de memoria RAM que hemos hecho un supuesto aquí que es del
01:03:02
50.000 a 50.050, pero si aquí tienes 50 parámetros
01:03:06
pues necesitará más espacio para guardar todos esos datos, pues entonces el
01:03:10
espacio para guardar el objeto iría del 50.000 al 60.000
01:03:14
y en esta definición donde no hemos hecho este new
01:03:17
lo único que se requiere de memoria RAM es el espacio necesario e imprescindible
01:03:21
a donde luego va a guardarse la información de todo el objeto de la clase.
01:03:29
Una posibilidad podría ser definir esto a nul, mirad.
01:03:39
Esto lo que implica es, si lo definimos a nul, lo que implica es que este objeto no apunta a ninguna posición de memoria.
01:03:43
en este espacio
01:03:50
pondríamos null, no estamos apuntando a ningún sitio
01:03:52
y luego cuando hacemos el new
01:03:55
lo que hacemos es cargar
01:03:57
en esta referencia que está entre la 30.000 y la 30.002
01:03:59
ese 50.000 que es donde el sistema operativo
01:04:04
ha encontrado espacio en memoria RAM
01:04:07
para guardar sus datos
01:04:09
eso pasa con el new
01:04:11
si nosotros cogemos y ponemos la instrucción esta
01:04:14
como la habíamos puesto al principio
01:04:18
con las dos cosas de una atacada al 2 y hacemos aquí un niño alumno es una atacada digamos que
01:04:20
hace estos dos procesos y haciendo estos dos procesos ya lo que tenemos es algo que se empieza
01:04:34
a parecer mucho a lo que en una sola instrucción hacemos para las variables de primitivas dejaba
01:04:42
Que es que para ALDOS ya tenemos un espacio de memoria donde poder guardar información para sus variables. ¿Se entiende más o menos? La parte de la gestión de memoria no es fácil del todo, eso ya lo digo, pero bueno, como lo repasaremos mucho.
01:04:47
estáis ahí verdad me oís sí sí vale se entiende esto es lioso un poco lioso sí bueno vamos a
01:05:12
vamos a repetirlo intentando simplificarlo definimos una variable de tipo entero que
01:05:32
son las que existen en java y igual a 10 a 20 el sistema operativo busca espacio para esta
01:05:40
variable y los enteros tienen un tamaño de 32 y en ese espacio no es necesario hacer un
01:05:49
nosotros específico específico por código y directamente cuando nosotros pongamos una
01:05:54
referencia de y ya directamente nos dirá el valor de 20 entonces el sistema operativo habrá ido y
01:06:02
y habrá buscado en un espacio de memoria el 40.000 y dirá, pues a partir de ahí guardo con los siguientes 32 bits, 20.
01:06:11
Si yo digo, escríbeme, escribe el valor de i por pantalla, con System of Println, por pantalla me saldrá un 20,
01:06:18
y la variable i vale 20. Si yo cojo y digo, alumno, mi alum, esto lo que está haciendo es, fijaros, si yo digo, alumno, mi alum,
01:06:29
¿qué es? Información que puede tener en su nombre,
01:06:48
información que puede tener en su edad, o algo
01:06:53
que puede llegar a ser, del cual podemos expresar su nombre
01:06:56
y su edad. Pues todavía no es ninguna de las cosas. Si yo digo
01:07:01
alumno1 ese nombre, defino un alumno y digo ahora aquí
01:07:04
mi alumno, mi alumno ese nombre, pues aquí me estoy
01:07:15
refiriendo al nombre del alumno.
01:07:19
Si yo cojo y digo mi ALU1 y edad, me estoy refiriendo a la edad del alumno.
01:07:23
Pero si digo mi ALU, ¿a qué me refiero?
01:07:29
Al nombre, a la edad, a otra de sus características, a ninguna de ellas en particular.
01:07:33
Entonces, como un alumno, digamos que tendríamos la posibilidad de tener diferentes parámetros,
01:07:39
uno que es el nombre, otro que es la edad, y todos ellos son comunes a mi ALU,
01:07:46
con Mialu no nos referimos a ninguno de ellos
01:07:51
sino a algo desde lo que podemos llegar a cualquiera de ellos
01:07:54
entonces lo que tenemos es una referencia
01:07:58
al objeto en memoria RAM
01:08:00
que no es ninguno de todos esos valores
01:08:04
en este caso, esa referencia a todos los posibles valores
01:08:06
a los que vamos a ir accediendo este alumno Mialu
01:08:14
pues sería una posición de memoria en memoria RAM
01:08:16
es decir, un espacio que nos reserva el sistema operativo en memoria RAM
01:08:19
en una determinada posición. A partir de la posición 90.000
01:08:22
vas a poder empezar a localizar información del alumno.
01:08:25
Y luego cuando tú coges y haces
01:08:31
mialu igual a new y pones esta expresión de new
01:08:33
y pones aquí el mismo nombre de la clase que es un método constructor del cual hablaremos
01:08:41
con este new es cuando de verdad hacemos
01:08:45
reserva para todos estos valores. Con lo cual
01:08:49
ya sí que podemos empezar a acceder a cada uno
01:08:53
de ellos. Si yo pongo
01:08:55
System.out, con las
01:09:13
instrucciones, la instrucción System.out
01:09:15
println, println es un
01:09:17
método que tenemos
01:09:19
en Java, en las librerías de la
01:09:21
clase System.out, y que
01:09:23
nos permite escribir por pantalla,
01:09:25
pues yo podría poner, entrecomillado,
01:09:28
información como si fuese un
01:09:30
string aquí, que os decía,
01:09:31
el valor de
01:09:35
i es,
01:09:37
si hago esta ejecución,
01:09:41
¿Veis? Me muestra el valor de i es, que es lo que le acabo de decir yo, que nos muestre por pantalla este método.
01:09:42
Y en println podemos enlazar diferentes variables para ir mostrando por pantalla datos.
01:09:51
Entonces, si yo digo, le pongo aquí un más i, pues este i no lo pongo entrecomillado, con lo cual ya no es una cadena de caracteres, sino que es una variable que tenemos disponible en el código, que es i.
01:09:56
Entonces, si yo pongo aquí mi valor de i es más i, lo que hará será juntar esta cadena de caracteres con esta variable. Entonces, si yo cojo y hago esto, me dice mi valor de i es 20.
01:10:08
¿Qué es lo que ha pasado en este programa? En relación a memoria rank, os decía, cuando hemos llegado aquí, se ha reservado en la posición 80.000, digamos, una que elige el sistema operativo, un espacio donde guardar información para un entero y ha puesto el valor 20.
01:10:24
Y cuando ha llegado aquí, ha dicho, quiero saber la información de esta variable, pues el programa tiene que la variable i está en la posición 80.000 y coge su valor y lo muestra por pantalla, que es este 20.
01:10:40
Sí, te cuento. Una de las características que tiene la programación orientada a objetos es la sobrecarga. Se utiliza mucho en métodos y nosotros podemos sobrecargar métodos que es que métodos como este que pone aquí saludar, poniendo aquí unos determinados parámetros extras, pues podemos hacer que salude de diferentes formas.
01:10:55
Entonces, con el mismo método saludar está sobrecargado y puede tener comportamientos diferentes según llames al método saludar que no tiene aquí dentro de los paréntesis nada o uno que sí que tenga ciertas cosas. Esa es la sobrecarga de métodos.
01:12:01
Luego hay otra cosa en los lenguajes de programación orientado a objeto que es la sobrecarga de operadores, que tiene que ver justo con lo que tú dices. Que Java no permite definir sobrecarga de operadores. Existe la que hay ya predefinida en Java, pero no te permite darle nuevos comportamientos al operador más.
01:12:15
Entonces, ¿qué pasa?
01:12:32
Que si tú en el código pones un más,
01:12:33
depende si te encuentras una cosa por aquí,
01:12:35
a la izquierda y a la derecha se comporta de una forma
01:12:38
y si te encuentras otra, se comporta de otra.
01:12:40
Entonces, si tú a la izquierda y a la derecha del más
01:12:43
pones números, lo que hace es sumártelo como números.
01:12:46
Pero si a la izquierda tienes una cadena de caracteres,
01:12:49
lo que hace es concatenar cadenas de caracteres,
01:12:52
es decir, unir una con otra.
01:12:55
O sea, es diferente comportamiento de un mismo operador
01:12:59
porque el operador está sobrecargado.
01:13:01
¿Y por qué se comporta de una forma o de otra?
01:13:03
En función de lo que va encontrando a izquierda o derecha.
01:13:06
Mira, si ponemos aquí, para que lo veas.
01:13:12
Mira, aquí nos ha sacado el valor de i es,
01:13:29
y como esto es una cadena de caracteres,
01:13:34
ha concatenado cadena de caracteres.
01:13:37
Entonces pone i, que es 20, y luego i2, que es 10.
01:13:38
Si tú coges y haces así, mira,
01:13:44
Le pones aquí unos paréntesis como en matemáticas.
01:13:46
Antes de esto, de este más, antes de operar con este más, va a dar prioridad a los paréntesis.
01:13:49
Entonces, fíjate con los paréntesis.
01:13:55
Le das aquí y te pone el valor de i es 30.
01:13:57
¿Por qué?
01:14:00
Porque aquí hace esta operación antes y como lo que se encuentra este más,
01:14:01
a la izquierda y a la derecha son números, hace la operación, en este caso, el más de sumar dos números.
01:14:05
Y ya no le dice el valor de i es 30.
01:14:11
En cambio, este más se sigue comportando como una concatenación de cadenas, de caracteres, porque a la izquierda se ha encontrado una cadena de caracteres.
01:14:13
Vale, pues continuamos por aquí para intentar llegar a lo de la...
01:14:26
No es fácil entender la memoria RAM, por lo menos los primeros días, pero insistiremos mucho con ella.
01:14:32
Y unos días u otros terminarán con la tecla de explicarlo para que lo entendáis seguro.
01:14:38
bueno, aquí estábamos mostrando
01:14:43
y, mirad, si cogemos y ponemos
01:14:45
alumno
01:14:48
mial
01:14:52
sin poner lo del new que os decía
01:14:54
si yo ahora pongo aquí un system.out.println
01:14:56
y lo que muestro es esto
01:14:58
bueno, fijaros que ni siquiera
01:15:01
me deja por no haberlo inicializado
01:15:13
por ser una variable local
01:15:15
vamos a ponerle aquí
01:15:17
vamos a inicializarlo a nulo
01:15:18
que no tenga ningún valor
01:15:25
¿vale? Dice el valor de mi al es null. Mira, si yo cojo y, en este caso, si yo cojo y pongo aquí y le hago el new, que es como empieza a reservar memoria este new en las primitivas, no es necesario hacer un new para que ya el sistema operativo haga reserva de memoria RAM.
01:15:29
Para los objetos de las clases es necesario este new. Entonces, si yo ahora hago esto, le he quitado el null este y lo he inicializado después de hacer un new, fijaros que lo que me muestra aquí es esto que me acaba de decir mi alumno, me di cuenta que pertenece a la clase alumno y me he puesto aquí un identificador que yo creo que tiene que ver con la posición de memoria en la que va a estar referenciado el alumno.
01:15:53
Ese 80.000 que os decía antes, o 90.000,
01:16:21
tiene que ver con, este número tiene que ver con ese dato de
01:16:23
verdad.
01:16:27
Y ahora si cojo y digo, mi al punto, ese nombre,
01:16:28
igual a Rubén, y el system.out.println lo pongo de mi al,
01:16:33
pero no de mi al ya, que es una referencia en memoria a lo que
01:16:44
va a ser un alumno, sino de ese Rubén, de ese nombre, perdón.
01:16:47
Aquí ya sí que me dice que es Rubén.
01:17:01
Bien, ¿qué es lo que está pasando aquí? Aquí necesitábamos hacer un new, nos reservaba memoria RAM directamente y con i accedíamos ya a su valor. Como es un valor único, porque es un valor primitivo, que es un entero, no hay lugar a dudas, pues ya me muestra el 20.
01:17:03
aquí para el alumno en realidad es un objeto
01:17:18
y lo que tenemos es una referencia a lo que va a ser un alumno
01:17:23
digamos que un puntero a donde va a estar el alumno Mial
01:17:27
pero todavía no le hemos dado información ni a nombres ni a nada
01:17:30
y con este new lo que hacemos es ya reservar espacio de memoria RAM
01:17:33
para que pueda albergar toda la información que hemos definido aquí como parámetros
01:17:38
y para acceder en sí a un nombre que ya es, fijaros, de tipo string
01:17:42
es una variable primitiva, pero que está embebida, digamos, dentro de la clase, pues aquí ya sí que podemos coger y mostrar su nombre,
01:17:48
mial y con el punto accedemos a la variable ese nombre. Bueno, lo iremos retomando. Las variables primitivas no necesitan un new,
01:17:58
que son todas aquellas que son tipos básicos, digamos, de Java y que tenemos predefinidos.
01:18:10
Los objetos, que van a ser aquellas variables que vamos a ir definiendo nosotros relacionadas con nuestras clases, necesitan utilizar la etiqueta new para hacer la reserva de memoria RAM, porque si no, no tenemos ese espacio.
01:18:16
Aquí relacionado con los ámbitos, antes hemos definido unas variables por aquí que tienen que ver con todo que está en el ámbito del objeto alumno y otras con un método.
01:18:42
Estas variables que definimos para un método en particular se llaman variables locales y las que definimos en toda una clase se llaman variables miembro de la clase.
01:18:56
Fijaros, puede haber variables que durante el proceso de saludar vayamos a necesitar pero que no tienen que ver con un alumno.
01:19:11
imaginaos que el alumno está haciendo unos determinados cálculos
01:19:18
calcular una operación trigonométrica
01:19:25
vamos a llamarla trigo
01:19:28
los alumnos tienen capacidad
01:19:33
de hacer cálculos trigonométricos
01:19:37
como una de sus funciones
01:19:41
pueden saludar, pueden despedirse
01:19:44
y pueden hacer cálculos de operaciones trigonométricas
01:19:47
para hacer el cálculo de operación trigonométrica
01:19:49
a lo mejor hay un momento en el que tenemos que guardar, necesitamos conocer pi.
01:19:53
Entonces podemos definir una variable de tipo double, al cual podemos llamar pi, que sea igual a 3.14.
01:20:00
En este caso, cuando por aquí este alumno que hemos creado, queramos, según la lógica de nuestro programa,
01:20:18
que haga un cálculo trigonométrico, pues pondríamos mi al punto trigo.
01:20:24
Y estaríamos diciendo, alumno, este en particular,
01:20:32
podríamos tener más alumnos en nuestro programa,
01:20:36
pero hemos dado de alta uno, realiza una función trigonométrica.
01:20:38
¿Y qué va a hacer cuando realice esta acción el alumno?
01:20:42
Pues lo que va a hacer va a ser lo que hayamos descrito dentro de este método.
01:20:47
y por aquí tendríamos diferentes cálculos que tuvieran que ver con la resolución
01:20:50
de esta operación trigonométrica, todo el código Java que corresponda.
01:20:57
A lo mejor para apoyarnos en estos cálculos va a haber un momento en el que necesitemos pi
01:21:02
porque vamos a hacer unos cálculos de senos y cosenos y vamos a necesitar pi.
01:21:05
Entonces cogemos y definimos esta variable en el ámbito del método trigo
01:21:11
y desaparecerá cuando termine este método.
01:21:16
Esta variable dejará de existir y el recolector de basura la eliminará.
01:21:20
¿Esta variable tiene sentido dentro de las operaciones trigonométricas?
01:21:24
¿O cuando nosotros damos de alta a un alumno tiene sentido que esta variable esté definida aquí?
01:21:30
Pi sería una característica de todo alumno, que normalmente tenemos asociado con un alumno su nombre, su edad, su DNI, características propias del alumno,
01:21:36
pero pi típicamente va a ser una característica propia de los alumnos
01:21:48
en principio no, ¿verdad?
01:21:52
pi, ¿cuándo lo vamos a necesitar?
01:21:54
lo vamos a necesitar cuando realicemos la operación trigonométrica
01:21:56
porque aquí sí que nos va a ser necesaria con toda seguridad
01:22:00
en cambio pi lo vamos a necesitar cuando saludemos
01:22:02
pues no, para saludarnos es raro que el alumno salude
01:22:06
despidiéndose adiós soy pi o adiós pi
01:22:09
o para despedirse igual
01:22:12
pero en cambio en el contexto de la operación trigonométrica
01:22:13
Oye, ahí sí parece tener sentido la cosa.
01:22:16
Con lo cual, esta, a todas luces, es una variable que por diseño
01:22:19
pega en este método, con lo cual la vamos a definir aquí
01:22:23
como variable local a este método trigo,
01:22:28
y de hecho, se va a dar de alta en el momento en el que llamemos a este método,
01:22:31
es decir, va a existir desde esta llamada,
01:22:35
cuando hagamos esta llamada se va a ejecutar esta parte del código hasta aquí,
01:22:38
y luego va a desaparecer, porque ya no la queremos.
01:22:41
Si no estamos haciendo operaciones trigonométricas,
01:22:43
no queremos esta variable, que el recolector de basura nos libere la RAM
01:22:45
para que vaya más fluido nuestro ordenador, en cambio
01:22:49
y por eso la definimos como una variable local, en cambio están las variables
01:22:52
de clase, que sí que tienen sentido con el
01:22:59
alumno, entonces si nosotros cogemos y damos de aquí, aquí de alta un alumno
01:23:03
todo el tiempo que existe este alumno, fijaros que esta es una
01:23:06
variable que existe en el ámbito del método main, por aquí lo seguimos utilizando
01:23:11
queremos tener disponible por si nos hace falta su nombre
01:23:14
porque es una característica propia del nombre
01:23:18
y queremos tener disponible su edad
01:23:20
porque es una característica propia de su edad
01:23:21
si nosotros el nombre lo definiésemos aquí
01:23:23
como una variable local del método trigo
01:23:26
¿qué pasaría?
01:23:30
pues que aquí, fijaros
01:23:32
como no está disponible para el alumno
01:23:33
¿veis que ahora se me queja y no me compila el programa?
01:23:36
aquí en ese nombre
01:23:38
nombre es una característica propia de los alumnos
01:23:39
¿cuándo tiene vida el alumno? Desde que lo creo hasta que desaparece.
01:23:42
Es una variable de este tipo, con lo cual tiene sentido que el nombre
01:23:47
esté en todo el ámbito de la clase. Con lo cual, ese nombre,
01:23:50
lejos de ser una variable del método trigo,
01:23:55
es una variable del alumno en sí y la tenemos que definir en el ámbito del alumno.
01:23:58
Y estas variables son las que llamamos variables de clase.
01:24:04
La variable de clase
01:24:08
pertenecen a los objetos de la clase e identifican a la clase.
01:24:09
¿Podría compilarnos el programa si la definimos esta aquí?
01:24:15
Nos compila seguro.
01:24:18
¿Pero por diseño sería correcto que pille este aquí?
01:24:20
Pues no.
01:24:22
Es algo local al método trigo.
01:24:23
Retomando un momentito lo de la memoria RAM que decíamos antes.
01:24:29
Cuando nosotros aquí hacemos un new de un objeto mial,
01:24:33
para qué variables
01:24:38
se reserva
01:24:41
el sistema operativo
01:24:43
espacio en memoria RAM, para aquellas que son
01:24:45
propias del alumno, ¿cuáles son propias del alumno?
01:24:47
estas, las variables de clase
01:24:49
para pi
01:24:51
en este momento en el que estoy
01:24:53
dando de alta un alumno
01:24:55
se reserva memoria RAM, no
01:24:56
porque es una variable local
01:24:58
a trigo, de hecho, fijaros
01:25:01
como no existe, que si yo pongo aquí
01:25:05
ni al punto
01:25:07
pi
01:25:12
igual a 3
01:25:13
pues no me compila, ¿por qué?
01:25:15
porque pi no es una variable propia de los
01:25:17
alumnos, no es una característica de los alumnos
01:25:20
pi es una variable que
01:25:21
tiene su
01:25:23
vida durante su ámbito
01:25:24
su vida vive dentro del método trigo
01:25:27
y cuando lo ejecuten se creará
01:25:29
esa variable y cuando no
01:25:32
desaparecerá, porque el
01:25:33
recolector de basura la liberará
01:25:35
su espacio de memoria RAM
01:25:37
entonces, si damos de alta esta variable
01:25:38
se hace una solicitud al sistema operativo
01:25:43
para guardar esta información.
01:25:45
Pi, no.
01:25:48
Si luego vengo por aquí
01:25:49
y llamo al método trigo,
01:25:50
que es un método propio
01:25:53
de las acciones que son
01:25:55
capaces de hacer los alumnos,
01:25:57
en el momento que entro aquí
01:25:58
se encuentra esta variable y hará una reserva
01:25:59
de memoria al sistema operativo para pi
01:26:02
y guardará 3.14
01:26:04
que estará activa en el ámbito
01:26:05
del método trigo.
01:26:08
Cuando termine el método trigo, ¿qué pasa?
01:26:10
que desaparece pi y ya no está disponible
01:26:11
para seguir utilizándolo por aquí. ¿Por qué? Porque su ámbito era
01:26:14
el tiempo de ejecución de ese método.
01:26:17
¿Se entiende más o menos?
01:26:26
Mirad, aquí hemos cogido y ¿qué hemos hecho? Hemos definido
01:26:28
dos variables primitivas de Java, de tipo entero
01:26:31
las dos. Pues en la posición
01:26:34
80.000 guardo un 20 y la reserva
01:26:37
para la variable i y para la variable i2
01:26:41
el sistema operativo buscará otra posición, que aquí pone 80.000 del copy y pega de antes,
01:26:44
que será la 80.300, por ejemplo, y guardará el 10.
01:26:48
Cada variable, lógicamente, tiene un espacio de memoria diferente.
01:26:53
Si yo muestro la información de i, me mostrará lo que hay en la posición de memoria 80.000
01:26:57
y escribirá un 20. Si muestro la información de la variable i2,
01:27:01
pues buscará 80.300 y mostrará un 10.
01:27:06
pues igual que para dos variables de tipos primitivos de Java
01:27:09
tenemos espacios de memoria distintos, aunque los dos sean de tipo entero
01:27:14
pues si yo he creado aquí un alumno
01:27:19
que le he llamado Mial y ahora creo aquí un segundo alumno
01:27:22
que llamo, vamos a llamarlo con un nombre propio, vamos a poner Sandra
01:27:26
creo el alumno Sandra, pues cuando hice esta operación
01:27:32
del new se me reservó en una posición de memoria, vamos a poner
01:27:43
las 90.000, por decir una,
01:27:46
será la que sea, el sistema operativo localizará una, la 99.000,
01:27:51
reservará un espacio de memoria para los datos
01:27:55
de un alumno que en el programa lo hemos nombrado como Mial
01:27:57
y que en un momento dado, ya que tiene estas características, tendrá una edad
01:28:02
y un nombre. De hecho, le hemos puesto un nombre que ha sido Rubén.
01:28:06
Y ahora, cuando hago este new,
01:28:12
el intérprete pedirá al sistema
01:28:13
operativo, el intérprete de Java
01:28:16
un espacio de memoria y el sistema
01:28:18
operativo localizará por ahí un espacio de memoria
01:28:20
igual teníamos corriendo Excel
01:28:22
y se ha apagado y ha liberado
01:28:24
memoria Excel y ahora tengo
01:28:26
la posición 60.000
01:28:28
y en la posición 60.000
01:28:30
es la que reserva
01:28:34
para que Sandra pueda guardar sus datos
01:28:36
¿Sí? ¿No me escucháis?
01:28:38
Vaya
01:28:45
Bueno, hoy no se ha aguantado más
01:28:45
por lo menos. El otro día, bueno, avisé por aquí a ver si pueden hacer algo con la red. ¿Se recupera o no?
01:28:48
Bueno, voy a pausar un poco la grabación hasta que lo recuperemos. Nada, ¿no me oís? Y nada, continuamos aquí
01:28:59
después de este pequeño lapsus que hemos tenido con la red. Mirad, os estaba contando que, igual que para las clases
01:29:07
primitivas, cada vez que definimos una variable se hace una reserva de memoria RAM diferente, pues para nuestras
01:29:16
variables que creamos como objetos y
01:29:21
tras hacer el new, donde finalmente se termina haciendo la reserva
01:29:25
de memoria RAM para nuestro objeto alumno en este caso
01:29:29
será donde se va a ir guardando esta información, si creamos
01:29:33
diferentes objetos de la misma clase, tendremos diferentes espacios de memoria
01:29:37
si ponemos aquí Sandra ese nombre
01:29:41
ay no, es verdad, no, no, no estoy
01:29:45
compartiendo, bien avisado, como he tenido que reiniciar
01:29:51
no la he puesto a compartir, ahora la pongo ya, ahí estamos
01:29:58
ya, compartiendo, ya me veis, ¿verdad? Pues
01:30:14
esto que os decía, vale, pues ahora para la variable Sandra, pues
01:30:18
también tiene disponible, como ya que es un alumno, tiene entre sus características que puede
01:30:22
tener un nombre y una edad, pues para Sandra podemos decir que su nombre
01:30:26
sea, precisamente ya que hemos llamado al objeto Sandra, vamos a decir que
01:30:30
sí que se llama Sandra. Fijaros, que se guarde
01:30:34
Sandra en memoria RAM en una zona reservada por el sistema operativo
01:30:39
para la variable ese nombre de el objeto Sandra implicará
01:30:42
que a partir de la posición 60.000 habrá un sitio
01:30:46
donde pondrá Sandra. Cuando queramos acceder a esta variable
01:30:50
el sistema operativo dirá Sandra empieza en el 60.000 y justo es
01:30:54
el nombre que queremos recuperar, pues llegaremos al 60.000
01:30:58
y dirá, pues el nombre se encuentra a partir de esta posición
01:31:02
y el dato que tiene es Sandra.
01:31:06
Si cogemos y decimos Sandra.iedad igual a 30,
01:31:08
pues probablemente saltando desde el 60.000
01:31:16
todo el espacio que necesite para guardar un string
01:31:19
que es el que corresponde al nombre,
01:31:21
pues a lo mejor en la posición 60.000,
01:31:25
bueno, este dato de cantidad es inventada,
01:31:31
pero ahí pues cogerá y guardará 30.
01:31:34
entonces si ahora nosotros cogemos y decimos
01:31:36
system.out.println, sácame por pantalla
01:31:39
el nombre de Sandra
01:31:41
pues muéstrame
01:31:43
por pantalla, system.out.println
01:31:45
si decimos muéstrame Sandra
01:31:48
pues nos mostraría 60.000
01:31:53
que es la posición de memoria
01:31:59
que tiene, no como cuando pulsábamos
01:32:01
decíamos muéstrame y que ya directamente
01:32:03
mostraba el dato, no, Sandra mostrará
01:32:05
60.000
01:32:07
si cogemos y decimos
01:32:09
system.sandra.sedaz
01:32:10
ese nombre
01:32:15
pues que es lo que
01:32:17
hará, pues dirá, tengo que sacar por pantalla
01:32:19
Sandra
01:32:21
sé que empieza en la posición 60.000
01:32:22
y como es
01:32:25
el primer parámetro
01:32:27
este sería el caso
01:32:28
de que estuviera así, como primer parámetro
01:32:31
como es el primer parámetro
01:32:33
guardo un string, pues ese string es el que
01:32:35
corresponde al nombre, según me han identificado
01:32:37
entonces 60.000 más
01:32:39
un desplazamiento de 0 al ser el primer parámetro
01:32:40
muestro el contenido que tiene, pues muestro Sandra
01:32:43
y si cojo y digo
01:32:45
System.off.println Sandra
01:32:47
y edad
01:32:49
pues lo que hará será decir
01:32:51
me voy al 60.000
01:32:53
que es el punto de inicio en memoria RAM
01:32:54
para la que el sistema operativo me ha reservado
01:32:57
espacio, y el que quiero mostrar
01:32:59
en particular es si edad
01:33:01
se dará cuenta que antes había un nombre
01:33:02
y sabiendo la cantidad de espacio
01:33:05
que reserva para un string
01:33:07
mira, el siguiente es la edad, pues mostrará el contenido que hay a partir de
01:33:09
en este ejemplo que hemos puesto, el 6400, que sería un 30
01:33:13
lo pulsamos aquí y veis, aquí tenemos zona de memoria, que este
01:33:16
corresponde a este, no es ni un dato ni otro, ni el nombre
01:33:23
ni la edad, aquí cuando hemos mostrado el nombre y aquí cuando hemos mostrado
01:33:27
la edad, y esa misma jugada si la hacemos
01:33:31
en lugar de para una variable de tipo clase
01:33:35
alumno, es decir, un objeto de la clase alumno
01:33:44
que era Sandra, lo hacemos para otro que hemos definido con anterioridad
01:33:48
aquí, que lo llamábamos Mial, pues al ejecutar
01:33:51
fijaros como la posición de memoria
01:33:56
que tenemos para Sandra es una, que nos da
01:34:02
el sistema operativo, y la que tenemos para Mial es otra
01:34:05
y luego sus datos, bueno, pues son diferentes, es decir
01:34:08
un comportamiento, como es lógico
01:34:11
al ser variables distintas, diferente a la hora de mostrarlo
01:34:14
por pantalla y los espacios de memoria que ha utilizado el programa para guardar uno y otro
01:34:17
diferentes de la misma forma que había sucedido aquí con los enteros, que cuando enseñábamos sí
01:34:22
mostraba 20, cuando enseñábamos sí 2 mostraba 10. ¿Se entiende más o menos? Variables, referencias,
01:34:27
objetos, estoy haciendo un repaso de las cosas que tengo por aquí, variables locales y variables
01:34:46
en miembro, también hemos hablado un poco, el alcance de las variables.
01:34:50
Las variables de tipo
01:34:55
primitivo, dependiendo si son variables
01:34:59
locales o son variables de clase, es necesario inicializarlas
01:35:02
o no, antes de utilizarlas. Las variables locales
01:35:06
es necesario inicializarlas, las variables de clase no. Y si no las
01:35:10
inicializamos, ¿qué valor tienen al principio? Pues hay una serie de valores por
01:35:14
defecto las variables numéricas me da igual que tengan decimales o no tienen como valor cero su
01:35:18
valor inicial si no le damos un valor por defecto inicial escoger el de por defecto que es cero si
01:35:29
tú quieres que una variable inicialmente tenga un valor distinto de cero obligatoriamente se
01:35:35
lo tienes que dar igual que estamos haciendo aquí las las variables tipo cadena de caracteres
01:35:40
es decir las string
01:35:49
tienen comillas comillas
01:35:52
es decir tienen una cadena de caracteres vacía
01:35:55
sin ningún dato
01:35:57
las variables booleanas
01:35:58
estas variables son las que
01:36:01
sus dos alternativas
01:36:05
son verdadero o falso
01:36:07
el verdadero o falso se utiliza mucho
01:36:09
luego en las condiciones
01:36:11
y en los bucles que iremos viendo
01:36:13
en las próximas tutorías y en los próximos
01:36:15
temas, por defecto
01:36:17
tiene false, es decir, si tú defines una variable booleana
01:36:19
y de inicio no le das un valor, pues esa variable va a
01:36:22
valer falso, y bueno, y ya está
01:36:25
estos son los valores que hay por defecto
01:36:30
otra cosa de la que hemos hablado también han sido los comentarios
01:36:32
en Java, los ponemos para una línea
01:36:35
bueno, para lo que hay a partir de las dos
01:36:39
barras en una línea, son comentarios, entonces si la ponemos
01:36:42
al principio de la línea, toda la línea es un comentario, es típico
01:36:45
poner ciertos comentarios en los programas, sobre todo en zonas de código que son un poco
01:36:48
difíciles de interpretar, pues nos ponemos unas pistas por si luego
01:36:52
repasamos el código o tenemos que hacerle un mantenimiento, saber un poco de qué va
01:36:56
lo que hicimos ahí, cuando hicimos ese código. Y si lo ponemos en una
01:37:00
línea, puede ser que haya código anteriormente y a partir
01:37:04
de un determinado momento poner un comentario. Entonces lo que hay a partir de aquí es
01:37:08
un comentario y en este caso sería la línea entera.
01:37:12
y si lo que queremos es comentarios multiliña
01:37:15
ya hemos dicho que el compilador de Java
01:37:18
considera comentarios multiliña lo que se encuentre
01:37:21
entre la barra y el asterisco
01:37:24
y asterisco y barra, todo lo que pongamos aquí, ya veis que el id
01:37:27
me lo muestra en verde, quiere decir que son comentarios
01:37:30
no lo va a tener en cuenta el compilador, cuando
01:37:34
el compilador coja el punto Java y genera el bytecode
01:37:36
todo esto será como que lo borra y como si no existiera
01:37:39
no le interesa para generar bytecode que luego
01:37:42
sea ejecutable. Otra cosa que también es
01:37:45
que podemos comentar aquí que es rápida ya que no nos queda
01:37:55
mucho tiempo es las constantes. Hay variables
01:38:00
que irán, normalmente una variable reserva una zona de memoria
01:38:03
y podremos ir cambiando su valor. Aquí i vale 20
01:38:08
pues aquí decimos que a partir de aquí i vale la 30.
01:38:11
En la zona de memoria RAM, en la 80.000 pasará su valor de 20 a 30
01:38:15
y a partir de ahora, cuando queramos acceder ahí,
01:38:20
pues nos mostrará el valor que justo tenga la RAM,
01:38:23
que si se ha ido sobreescribiendo será el nuevo.
01:38:25
En Java podemos definir constantes.
01:38:29
Una constante no es más que una variable,
01:38:32
la definimos de partida como una variable,
01:38:35
con lo cual hará la reserva en memoria RAM para guardar su valor,
01:38:38
pero al ponerle la etiqueta final,
01:38:42
pues ya no podremos modificarla.
01:38:45
No sé si como variable local me deja.
01:38:49
Sí, pues fijaros, si le ponemos la etiqueta final, si ahora yo intento cambiar el valor de pi aquí, digo que no, que ya pi me gusta más como 3.15, ¿veis? No me deja.
01:38:51
Y si le quito la etiqueta final, pues como es una variable normal, podría cambiar su valor como cualquier variable de un valor que tiene ahora mismo a otro diferente.
01:39:05
Entonces, si a una variable le ponemos la etiqueta final, se convierte en una constante.
01:39:14
¿Para qué nos sirve?
01:39:18
Bueno, pues nos sirve para ir utilizándola
01:39:19
como parte de las operaciones,
01:39:23
pero no ir modificando su valor.
01:39:25
Es una constante.
01:39:27
Y es con la etiqueta final.
01:39:30
Normalmente las...
01:39:33
Fijaros, aquí hemos puesto pi minúscula
01:39:35
cuando hay un convenio
01:39:38
que se suele seguir a la hora de programar en Java,
01:39:40
que no es obligado para el compilador,
01:39:45
pero que si lo seguimos todos
01:39:48
es de buenas prácticas y así cuando vayamos
01:39:49
encontrando diferentes personas códigos
01:39:52
si todos hemos seguido los mismos
01:39:54
criterios, pues nos resultará
01:39:56
un poco más fácil mantenerlo
01:39:58
entonces las constantes
01:40:00
se suelen definir con letras
01:40:02
mayúsculas todas, entonces si vamos
01:40:04
a definir una constante ponemos pi
01:40:06
y si tiene varios valores
01:40:07
imaginaros que
01:40:10
queremos definir una constante
01:40:12
que tiene el número
01:40:14
máximo de espectadores que pueden entrar en un estadio
01:40:16
sería num y si lo queremos poner con dos palabras
01:40:18
num más, aquí lo definimos como
01:40:22
final de tipo entero y
01:40:26
el número máximo de espectadores serían 50.000
01:40:30
y la forma de nombrar la constante con mayúsculas
01:40:32
y si está formada por varias palabras con un guión bajo
01:40:38
las variables normalmente el convenio
01:40:42
que hay es que empiecen por una letra minúscula y si tienen varias varias palabras que cada una
01:40:49
de las palabras empiece con letra mayúscula entonces imaginaos que te definimos un int y
01:40:59
queremos es número de entradas pues una forma sería ponerlo así en un número o num entradas
01:41:06
o entrada entradas entonces esto sería siguiendo un convenio muy utilizado una forma de definir
01:41:12
una variable la primera letra minúscula y luego cada una de las nuevas palabras que formasen
01:41:19
parte de esa variable entradas yo tengo costumbre ya lo ir viendo cuando voy haciendo los programas
01:41:25
que no es obligado ni mucho menos de poner una primera letra aquí en minúscula para seguir este
01:41:33
criterio con el que más o menos me dé una idea si luego veo y edad por ahí en mitad del código
01:41:39
de qué tipo es entonces si empieza por una y pues sé que es una variable de tipo entero si empieza
01:41:45
por una s de tipo string en cierto momento estuve trabajando una empresa que seguía en esta
01:41:49
nomenclatura y ahí se me quedó y siempre me salen las variables de esta forma pero esto es un
01:41:56
criterio más particular mío o del contexto es en el que trabajé yo que el que es de verdad está como
01:42:01
muy aceptado que es este otro no necesariamente identificar el tipo pero sin minúsculas y
01:42:07
siguientes letras con mayúsculas las clases
01:42:11
la empiezan con una letra mayúscula aquí alumno lo tengo correcto y los métodos
01:42:17
empiezan con letra minúscula que yo lo he hecho mal aquí vale no seguido el
01:42:23
convenio sería trigo con té minúscula saluda saludo con saludar con ese
01:42:27
minúscula y despedir con de minúscula
01:42:33
No lo he hecho de acuerdo al criterio de buenas prácticas, el nombre de los métodos.
01:42:38
Pero bueno, ya veis que antes puse pi aquí como constante con minúsculas y el compilador le vale.
01:42:43
Esto también está de esta forma y le vale.
01:42:52
Con lo cual, bueno, pues está bien seguirlo, pero no va a bloquear los programas el no utilizarlos así.
01:42:54
Y bueno, pues de mi guión de aquí, de cosas que os quería contar relacionadas con el tema 2,
01:43:04
he tachado unos cuantos y la
01:43:08
semana siguiente yo creo que continuamos
01:43:10
con otros pocos. Nos quedan
01:43:12
cinco minutos para cerrar
01:43:14
y bueno, aprovecho por si queréis
01:43:15
hacerme alguna pregunta o alguna
01:43:18
o alguna
01:43:20
sugerencia un poco desesperada de la clase
01:43:22
ahí con la memoria y eso, si
01:43:24
os ha costado mucho seguirlo.
01:43:25
Esto de la memoria hablaremos mucho de ello, entonces
01:43:28
no os preocupéis, pero sí que es importante entenderlo.
01:43:30
Ya, claro.
01:43:45
Claro, si
01:43:48
tienen letras, pues
01:43:49
El significado que tiene el símbolo de más es concatenar, unir unos con otros.
01:43:51
Si tienes números, lo que te hace es sumar.
01:43:57
Sobrecarga de operador, es decir, el operador se comporta de diferentes formas según lo que tenga por ahí alrededor.
01:44:02
¿Alguna otra cosilla por ahí?
01:44:14
De las clases, bueno, pues un poco lo que vengo haciendo, este es el tercer año que doy distancia
01:44:21
y un poco las organizamos
01:44:26
siempre así, estamos
01:44:29
pues os pregunto si tenéis dudas, intentamos
01:44:30
aclararlas o ponernos sobre la
01:44:33
pista de alguna duda que tengáis
01:44:35
y luego os voy contando cosas
01:44:36
si en un momento dado veis
01:44:38
no sé, que alguna
01:44:40
otra técnica creéis que va a resultar
01:44:42
más provechosa, me decís, yo no tengo
01:44:44
inconveniente y si hay alguna cosa en particular
01:44:46
que queráis que tratemos en
01:44:48
alguna reunión, si la adelantáis
01:44:50
en los foros, pues siempre está bien, no va a ser
01:44:52
que me preguntéis algo durante la tutoría
01:44:54
que en ese momento no sea capaz de resolveros.
01:44:58
Si me la comentáis con anterioridad, pues la preparo yo un poquillo.
01:45:01
Y si no, pues bueno, yo siempre vendré con un guión
01:45:05
para contaros alguna peli por ahí.
01:45:07
¿Alguna otra cosa? Sí.
01:45:16
Sí, sí, sí.
01:45:28
Tenéis bastantes ejercicios para hacer.
01:45:30
Ahora ya veréis ya en el tema 2, ya hay colecciones de ejercicios
01:45:34
por ahí un poco relacionados con el nivel
01:45:37
del tema que vamos viendo
01:45:39
para que podáis practicar. Están resueltos
01:45:41
en líneas generales todos
01:45:43
pero bueno, pues está bien
01:45:44
que los intentéis hacer vosotros antes de
01:45:47
mirar las soluciones
01:45:49
para entrenaros programando
01:45:50
que ya os comentaba días atrás
01:45:52
que si no le echas
01:45:55
ratos ahí programando
01:45:57
viendo el código solo, luego no te sale
01:45:58
pero sí, sí, hay
01:46:01
muchos ejercicios propuestos
01:46:02
y bueno, si queréis
01:46:05
vosotros investigar más, supongo que habréis
01:46:07
hecho alguna búsqueda por internet, te salen miles, pero vamos
01:46:10
también dentro de nuestro curso también ofrecemos enunciados
01:46:13
de ejercicios y estos ejercicios resueltos
01:46:16
bueno, pues nada, si no tenéis nada más voy a ir deteniendo
01:46:18
dime, si en
01:46:28
mira, un momentito
01:46:36
te pide contraseña, voy a poner la misma en todas
01:46:37
las clases, mira
01:46:41
aquí justo que está el enlace, aquí
01:46:45
os he puesto enlace a la contraseña
01:46:47
y le pongo PROC 2024 a todas
01:46:49
ellas. Entonces, os iré
01:46:51
poniendo enlaces a cada una de las tutorías
01:46:53
y en todas le pongo la misma
01:46:55
contraseña para que no
01:46:57
os volváis locos. Y además lo tenéis aquí
01:46:59
chivado justo al lado de los enlaces.
01:47:01
Sí.
01:47:06
Bueno, pues nada.
01:47:10
- Autor/es:
- JM
- Subido por:
- Jose Manuel M.
- Licencia:
- Dominio público
- Visualizaciones:
- 112
- Fecha:
- 21 de octubre de 2024 - 19:28
- Visibilidad:
- Clave
- Centro:
- IES ALONSO DE AVELLANEDA
- Duración:
- 1h′ 47′ 14″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 187.80 MBytes