Ta3 Taller de Programacion
Ta3 Taller de Programacion
Ta3 Taller de Programacion
TAREA ACADÉMICA 3
Código: U21227145
Ciclo: 03
2023
INDICE DE CONTENIDO
pág. 2
TEMA 1: JSHELL: CONCEPTOS, TESTING, EJEMPLO
jshell admite el acostumbrado parámetro -help, que muestra todas las opciones
disponibles, y el clásico parámetro -v (verbose), que muestra información más
detallada durante la ejecución. Parámetros ambos que merece la pena utilizar, al
menos las primeras veces que se utilice la herramienta.
Una vez arrancado jshell se puede ejecutar código Java directamente en la propia
línea de comandos. Por ejemplo, se puede definir una variable y asignarle un valor:
Como se observa, a pesar de ser Java, no es necesario poner punto y coma al final
de la línea. La variable es automáticamente instanciada e inicializada. Se puede
comprobar su valor escribiendo una expresión que haga referencia a ella:
pág. 3
La expresión es evaluada y el valor resultante es automáticamente impreso. Lo
interesante es que la expresión puede ser todo lo compleja que se quiera:
Si se quiere cambiar una definición sólo hay que volver a declararla, la nueva
declaración sobrescribirá la anterior:
pág. 4
jshell es un editor de líneas que permite moverse por ellas con las teclas de cursor,
tiene teclas de acceso rápido para algunas acciones de edición comunes en la
mayoría de editores, algunas características básicas como un histórico de las
líneas introducidas, y una potente opción de autocompletar.
El autocompletar más básico se obtiene pulsando la tecla de tabulación a medida
que se escribe. Esto hace que se muestren todas las opciones disponibles que
casen con la expresión en curso, o directamente se complete la expresión si sólo
hay una opción disponible. Dependiendo del contexto, volviendo a pulsar tabulador,
se muestra información adicional, como por ejemplo la documentación si está
disponible:
pág. 5
Otras opciones de autocompletar se ejecutan pulsando shift junto con el tabulador.
En ese punto el editor se queda esperando que se pulse una tecla. La v sirve para
crear una variable con la expresión en curso, la m para crear un método, y la i para
importar una clase.
Por defecto están disponibles paquetes del módulo base de Java, pero se pueden
importar paquetes de librerías de terceros que se encuentren en el classpath:
Un último comando que hay que conocer es /exit, que sirve para cerrar jshell.
En definitiva, una herramienta muy útil de la que siempre han presumido muchos
otros lenguajes, sobre todo los de scripts, y que ahora también está disponible de
forma nativa para Java.
pág. 6
TEMA 2: CREACIÓN DE UN REPOSITORIO EN GITHUB, REGISTRO DE UNA
CUENTA, SUBIR ARCHIVOS EN LA CUENTA DE GITHUB
Creación de un repositorio
1. En la esquina superior derecha de cualquier página, utiliza el menú
desplegable + y selecciona New repository (Nuevo repositorio).
pág. 7
Registro de una cuenta
1. Si quieres crear una cuenta personal nueva, asegúrate de haber cerrado sesión
en GitHub.
2. Vaya a la página de precios de GitHub.
3. Lea la información acerca de los diferentes productos y suscripciones que
GitHub ofrece y, después, haga clic en el botón actualizar de la suscripción que
quiere elegir.
4. Sigue las indicaciones para crear tu cuenta personal o de organización.
Pasos siguientes
"Verificar tu dirección de correo electrónico"
"Crear una cuenta empresarial" en la documentación de GitHub Enterprise Cloud
GitHub public roadmap en el repositorio github/roadmap
2. Se habrá creado la carpeta. git con la información del proyecto. Añade los
ficheros para subir el mismo con este comando:
git add
Otra forma de añadir un único fichero es introduciendo el comando siguiente:
git add nombrdelfichero
3. Prepara los ficheros que quieres subir con una pequeña explicación acerca de
los cambios:
git commit -m “Creado el proyecto inicial”
pág. 8
4. Debes subir los cambios a GitHub. Para ello tienes que saber la ruta del
repositorio (acabada en. git) que está en Clone or Download, el botón verde de
la página del proyecto. Luego añade el repositorio desde la terminal con este
comando:
git remote add origin URLrepositorio.git
pág. 9
TEMA 3: FUNCIONAMIENTO DEL JVM
La JVM (Java Virtual Machine) actúa como un motor en tiempo de ejecución para
ejecutar aplicaciones Java.
No confundir con los emuladores, por ejemplo, para programar en Android, aunque
tengan sus similitudes.
Como vimos anteriormente en las características de Java, se destaca por ser
independiente de la plataforma, y precisamente esto se debe a la JVM, pero ¿qué
es realmente la máquina virtual de Java?
JVM es la que realmente llama al método principal presente en un código Java.
JVM es una parte del JRE (Java Run Environment).
Las aplicaciones Java se llaman WORA (Write Once Run Everywhere). Esto
significa que un programador puede desarrollar código Java en un sistema y puede
esperar que se ejecute en cualquier otro sistema habilitado para Java sin ningún
ajuste. Todo esto es posible gracias a la JVM.
1. ¿Cómo funciona?
1.1. Subsistema Java Class Loader
Es principalmente responsable de tres actividades:
Carga
Enlace
Inicialización
1.1.1. Carga
El cargador de clases lee el archivo .class, genera los datos binarios
correspondientes y los guarda en el área de métodos (“method area” –vea la
imagen anterior). Para cada archivo .class, JVM almacena la siguiente información
en el área de método.
Nombre completamente calificado de la clase cargada y su clase primaria
inmediata.
Si el archivo .class está relacionado con Class o Interface o Enum
Información sobre modificadores, variables, métodos, etc.
Después de cargar el archivo .class, JVM crea un objeto de tipo Class para
representar este archivo en la memoria heap. Tenga en cuenta que este objeto es
de tipo Class predefinido en el paquete java.lang. Este objeto Class puede ser
utilizado por el programador para obtener información de nivel de clase como
nombre de clase, nombre principal, métodos e información de variable, etc. Para
obtener esta referencia de objeto, podemos usar el método getClass() de la clase
Object.
pág. 10
Por ejemplo:
Salida:
pág. 11
1.1.2. Vinculación o Enlace
Realiza la verificación, la preparación y (opcionalmente) la resolución.
Verificación: asegura la exactitud del archivo .class, es decir, comprueba si este
archivo está formateado correctamente y generado por un compilador válido o
no. Si la verificación falla, obtenemos la excepción de tiempo de ejecución
java.lang.VerifyError.
Preparación: JVM asigna memoria para las variables de clase e inicializa la
memoria a los valores predeterminados.
Resolución: es el proceso de reemplazar referencias simbólicas del tipo con
referencias directas. Se realiza buscando en el área del método (method area)
para localizar la entidad a la que se hace referencia.
1.1.3. Inicialización
En esta fase, todas las variables estáticas se asignan con sus valores definidos en
el código y en el bloque estático (si corresponde). Esto se ejecuta de arriba a abajo
en una clase y de padres a hijos en la jerarquía de clases.
En general, hay tres cargadores de clase (class loaders):
Cargador de clases Bootstrap (Bootstrap class loader): cada implementación
de JVM debe tener un cargador de clases de arranque, capaz de cargar clases
confiables. Carga las clases API centrales de java presentes en el directorio
JAVA_HOME/jre/lib. Esta ruta se conoce popularmente como ruta de arranque.
Se implementa en lenguajes nativos como C, C++.
Cargador de clases de extensiones (Extension class loader): es un elemento
secundario del Bootstrap class loader. Carga las clases presentes en los
directorios de extensiones JAVA_HOME/jre/lib/ext (Ruta de extensión) o
cualquier otro directorio especificado por la propiedad del sistema java.ext.dirs.
Está implementado en Java por la clase sun. misc.Launcher$ExtClassLoader.
Cargador de clases de sistema/aplicación (system/Application class loader): es
secundario del cargador de clases de extensión. Es responsable de cargar las
clases desde la ruta de la clase de aplicación. Internamente utiliza la variable
de entorno asignada a java.class.path. También se implementa en Java
mediante la clase sun.misc.Launcher$AppClassLoader.
Por ejemplo:
pág. 12
Salida:
pág. 13
1.3. Motor de ejecución (Execution Engine)
El motor de ejecución ejecuta .class (bytecode). Lee el código de bytes línea por
línea, usa datos e información presente en varias áreas de memoria y ejecuta
instrucciones. Se puede clasificar en tres partes:
Intérprete: interpreta el bytecode línea por línea y luego lo ejecuta. La
desventaja aquí es que cuando se llama un método varias veces, cada vez
se requiere interpretación.
Compilador Just-In-Time (JIT): se usa para aumentar la eficiencia del
intérprete. Compila todo el bytecode y lo cambia a código nativo para que
cada vez que el intérprete vea llamadas a métodos repetidos, JIT
proporcione código nativo directo para esa parte, de modo que la
reinterpretación no es necesario, por lo tanto, se mejora la eficiencia.
Recolector de basura: destruye objetos no referenciados.
1.4. Interfaz nativa de Java (JNI – Java Native Interface)
Es una interfaz que interactúa con las Bibliotecas de métodos nativos y proporciona
las bibliotecas nativas (C, C++) necesarias para la ejecución. Permite a la JVM
llamar a bibliotecas C/C ++ y ser llamado por bibliotecas C/C++ que pueden ser
específicas del hardware.
1.5. Bibliotecas de métodos nativos (Native Method Libraries)
Es una colección de bibliotecas nativas (C, C ++) que requiere el motor de
ejecución.
pág. 14
TEMA 4: EJEMPLO DE UN FORMULARIO CON DOS COMPONENTES
VISUALES (NO VISTOS EN CLASES)
Tenemos que arrastrar el Radio Button al formulario y colocarle un nombre (en este caso le puse de
nombre “sexo”). Después vamos a properties de cada Radio Button y seleccionamos al grupo que
creamos anteriormente.
pág. 15
Este es el código que se utilizó para que funcione el formulario.
pág. 16
CONCLUSIONES
BIBLIOGRAFÍAS
https://inmensia.com/blog/20180509/jshell-un-repl-en-java/
https://intelequia.com/blog/post/c%C3%B3mo-subir-un-proyecto-a-un-repositorio-de-github
https://docs.github.com/es/get-started/signing-up-for-github/signing-up-for-a-new-github-
account#signing-up-for-a-new-account
https://docs.github.com/es/get-started/quickstart/create-a-repo
https://javadesdecero.es/fundamentos/como-funciona-maquina-virtual/
pág. 17