From 3d86b741a2f0d03467f0f42268343b61bd0cf4f0 Mon Sep 17 00:00:00 2001 From: devfzn Date: Thu, 8 Jun 2023 02:18:30 -0400 Subject: [PATCH] =?UTF-8?q?inicio=20Formaci=C3=B3n=20Java=20Orientado=20a?= =?UTF-8?q?=20Objetos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Java JRE y JDK --- .gitignore | 4 + 008_java_oo/README.md | 351 ++++++++++++++++++ 008_java_oo/devstats.png | Bin 0 -> 26596 bytes .../java_primeros_pasos/src/Ejemplo.java | 5 + 008_java_oo/yt_alura_jvm/HolaMundo.java | 5 + README.md | 5 +- 6 files changed, 369 insertions(+), 1 deletion(-) create mode 100644 008_java_oo/README.md create mode 100644 008_java_oo/devstats.png create mode 100644 008_java_oo/intellij_idea/java_primeros_pasos/src/Ejemplo.java create mode 100644 008_java_oo/yt_alura_jvm/HolaMundo.java diff --git a/.gitignore b/.gitignore index 14654a3..cba0fcd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ *.pdf test/ +.idea/ +out/ +*.class +*.iml diff --git a/008_java_oo/README.md b/008_java_oo/README.md new file mode 100644 index 0000000..c61a8ea --- /dev/null +++ b/008_java_oo/README.md @@ -0,0 +1,351 @@ +# Java Orientado a Objetos + +Tablero en [trello](https://trello.com/b/dSotNCw1/g5-formaci%C3%B3n-java) + +## Java [primeros pasos](https://app.aluracursos.com/course/java-primeros-pasos) + +### ¿Que es Java? + +Algunas [estadisticas](https://www.jetbrains.com/es-es/lp/devecosystem-2022/java/) +de jetbrains (2022). + +![img](./devstats.png) + +#### Máquina Virtual Java - JVM + + + +```mermaid +graph TD + A(Código Java)-->B(Ejecutable JAR) + B-->C(Máquina Virtual JVM) + C--> E(Linux) + C--> F(Windows) + C--> G(Mac) +``` + +ej. código Java + +```java +package com.alura.java; + +public class Persona { + + String nombre; + String apellido, + int edad; + + void datosDefault() { + this.nombre = "Diego"; + this.apellido = "Arguelles"; + this.edad = 28; + } + +} +``` + +ej. bytecode + +```java +{ + java.lang.String nombre; + descriptor: Ljava/lang/String; + flags: (0x0000) + + java.lang.String apellido; + descriptor: Ljava/lang/String; + flags: (0x0000) + + int edad; + descriptor: I + flags: (0x0000) + + public com.alura.java.Persona(); + descriptor: ()V + flags: (0x0001) ACC_PUBLIC + Code: + stack=1, locals=1, args_size=1 + 0: aload_0 + 1: invokespecial #1 // Method java/lang/Object."":()V + 4: return + LineNumberTable: + line 3: 0 + + void datosDefault(); + descriptor: ()V + flags: (0x0000) + Code: + stack=2, locals=1, args_size=1 + 0: aload_0 + 1: ldc #7 // String Diego + 3: putfield #9 // Field nombre:Ljava/lang/String; + 6: aload_0 + 7: ldc #15 // String Arguelles + 9: putfield #17 // Field apellido:Ljava/lang/String; + 12: aload_0 + 13: bipush 28 + 15: putfield #20 // Field edad:I + 18: return + LineNumberTable: + line 10: 0 + line 11: 6 + line 12: 12 + line 13: 18 +} +``` + +#### Características de JVM + +- Administración de memoria +- Multiplataforma +- Seguridad +- Optimización +- Librerías + +Otros lenguajes soportados por la máquina virtual de Java son: +***Ruby, Scala, Python, Groovy, Clojure*** + +Principales características de Java: + +- Orientado a objetos +- Parecido a C++ +- Muchas librerías y una gran comunidad +- Para ejecutar el Bytecode necesitamos tener la máquina virtual de Java +- El Bytecode es independiente del sistema operativo + +Principales componentes de la plataforma Java: + +- Java Virtual Machine (JVM) +- Lenguaje Java +- Librerias Java (API) + +#### Youtube alura [JVM](https://youtu.be/GrEO8nZzyZM) + +Archivo [`HolaMundo.java`](./yt_alura_jvm/HolaMundo.java) + +```java +public class HolaMundo { + public static void main(String[] args) { + System.out.println("Hola Mundo!"); + } +} +``` + +- Compilar: `javac HolaMundo.java` +- Correr: `java HolaMundo` +- Salida: `Hola Mundo!` + +Archivo [`HolaMundo.class`](./yt_alura_jvm/HolaMundo.class) en formato hexadecimal +con `:%!xxd` en **vim** + +```hex +00000000: cafe babe 0000 0040 001d 0a00 0200 0307 .......@........ +00000010: 0004 0c00 0500 0601 0010 6a61 7661 2f6c ..........java/l +00000020: 616e 672f 4f62 6a65 6374 0100 063c 696e ang/Object......()V....... +00000040: 0a0c 000b 000c 0100 106a 6176 612f 6c61 .........java/la +00000050: 6e67 2f53 7973 7465 6d01 0003 6f75 7401 ng/System...out. +00000060: 0015 4c6a 6176 612f 696f 2f50 7269 6e74 ..Ljava/io/Print +00000070: 5374 7265 616d 3b08 000e 0100 0b48 6f6c Stream;......Hol +00000080: 6120 4d75 6e64 6f21 0a00 1000 1107 0012 a Mundo!........ +00000090: 0c00 1300 1401 0013 6a61 7661 2f69 6f2f ........java/io/ +000000a0: 5072 696e 7453 7472 6561 6d01 0007 7072 PrintStream...pr +000000b0: 696e 746c 6e01 0015 284c 6a61 7661 2f6c intln...(Ljava/l +000000c0: 616e 672f 5374 7269 6e67 3b29 5607 0016 ang/String;)V... +000000d0: 0100 0948 6f6c 614d 756e 646f 0100 0443 ...HolaMundo...C +000000e0: 6f64 6501 000f 4c69 6e65 4e75 6d62 6572 ode...LineNumber +000000f0: 5461 626c 6501 0004 6d61 696e 0100 1628 Table...main...( +00000100: 5b4c 6a61 7661 2f6c 616e 672f 5374 7269 [Ljava/lang/Stri +00000110: 6e67 3b29 5601 000a 536f 7572 6365 4669 ng;)V...SourceFi +00000120: 6c65 0100 0e48 6f6c 614d 756e 646f 2e6a le...HolaMundo.j +00000130: 6176 6100 2100 1500 0200 0000 0000 0200 ava.!........... +00000140: 0100 0500 0600 0100 1700 0000 1d00 0100 ................ +00000150: 0100 0000 052a b700 01b1 0000 0001 0018 .....*.......... +00000160: 0000 0006 0001 0000 0001 0009 0019 001a ................ +00000170: 0001 0017 0000 0025 0002 0001 0000 0009 .......%........ +00000180: b200 0712 0db6 000f b100 0000 0100 1800 ................ +00000190: 0000 0a00 0200 0000 0300 0800 0400 0100 ................ +000001a0: 1b00 0000 0200 1c0a ........ +``` + +Oracle Docs [Opcode Mnemonics](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-7.html) + +`javap -c HolaMundo` + +```java +Compiled from "HolaMundo.java" +public class HolaMundo { + public HolaMundo(); + Code: + 0: aload_0 + 1: invokespecial #1 // Method java/lang/Object."":()V + 4: return + + public static void main(java.lang.String[]); + Code: + 0: getstatic #7 // Field java/lang/System.out:Ljava/io/PrintStream; + 3: ldc #13 // String Hola Mundo! + 5: invokevirtual #15 // Method java/io/PrintStream.println:(Ljava/lang/String;)V + 8: return +``` + +### Primeros Pasos + +```mermaid +flowchart LR +subgraph JDK +subgraph JRE + c(JVM) + style c fill:#f9f,stroke:#333,stroke-width:2px + d(Librerías) + style d fill:#f9f,stroke:#333,stroke-width:2px +end + a(Tools) +end +``` + +#### Instalación + +##### Archlinux + +```sh +# última versión +sudo pacman -S jdk-openjdk + +# Versiones LTS +# jdk8-openjdk +# jdk11-openjdk +# jdk17-openjdk +``` + +Cambiar la versión de Java a utlizar + +``` +# listar verisones instaladas +sudo archlinux-java status + +# establecer versión a utilizar +sudo archlinux-java set java-20-openjdk +``` + +##### Ubuntu + +```sh +sudo apt install openjdk-17-jdk + +# headless +# sudo apt install openjdk-17-jdk-headless +``` + +Exportar variable `JAVA_HOME` + +```sh +# Buscar ruta de instalación +sudo update-alternatives --config java + +# o +whereis java + +# agregar en .bashrc +export JAVA_HOME= +``` + +##### Comprobar instalación + +```sh +javac --version +javac 20.0.1 +``` + +```sh +java --version +openjdk 20.0.1 2023-04-18 +OpenJDK Runtime Environment (build 20.0.1+9) +OpenJDK 64-Bit Server VM (build 20.0.1+9, mixed mode, sharing) +``` + +**Java** es un lenguaje de programación que se actualiza periódicamente por **Oracle**, +la empresa responsable de su desarrollo. Cada nueva versión de Java trae consigo +nuevas características, mejoras de rendimiento, correcciones de errores y +actualizaciones de seguridad. Estas versiones se numeran, siguiendo un patrón +específico. + +Cuando se lanza una nueva versión, puede incluir nuevas bibliotecas, clases, +métodos y otros recursos que los desarrolladores pueden utilizar para crear +aplicaciones Java más eficientes y con menos errores. + +Aquí hay algunos ejemplos de algunas de las principales versiones de Java y sus +características: + +- [Java **8**](https://www.java.com/es/download/help/java8_es.html#:~:text=Una%20de%20las%20funciones%20destacables,el%20lenguaje%20de%20programaci%C3%B3n%20Java.&text=Esta%20nueva%20API%20permitir%C3%A1%20a,natural%20y%20f%C3%A1cil%20de%20comprender) + Introdujo la programación funcional, incluyendo la **interfaz** `java.util.function`, + que permite el uso de expresiones lambda. Además, se agregó una nueva API de + fecha y hora que proporciona una forma más simple y segura de manejar fechas y horas. + +- Java **11** + Introdujo el sistema de módulos de Java, que ayuda a simplificar la creación y + mantenimiento de aplicaciones complejas. Además, se agregó la **clase** `HttpClient`, + que admite comunicaciones HTTP/2. + +- Java **15** + Agregó características como la palabra clave `sealed`, que permite que las + clases restrinjan qué otras clases pueden extenderlas o implementarlas, + y también agregó mejoras a la API Records, que ayuda a simplificar la creación + de clases de datos inmutables. + +- [Java **17**](https://www.oracle.com/cl/news/announcement/oracle-releases-java-17-2021-09-14/) + Introduce nuevas características y mejoras, como patrones de coincidencia que + mejoran la sintaxis al trabajar con estructuras de datos complejas. Además, + se mejoran el rendimiento del recolector de basura para reducir la latencia en + las aplicaciones Java. + También se agregan funcionalidades a los registros, que + son clases inmutables y compactas utilizadas para representar datos, incluyendo + la capacidad de definir registros locales dentro de métodos. + Otra adición importante son las nuevas clases y métodos en el paquete + `java.util` para trabajar con estructuras de datos persistentes, lo que permite + realizar cambios en los datos sin modificar las estructuras originales. + Por último, se agrega soporte para **CGroups** en la API de Java, lo que permite + una mejor administración de recursos en entornos de contenedores. + +Al actualizar a una nueva versión de Java, es importante tener en cuenta la +compatibilidad con versiones anteriores. A veces, se eliminan o modifican +características o funcionalidades en una nueva versión, lo que puede afectar el +código existente. Por esta razón, es importante probar su código al actualizar +a una nueva versión de Java. + +Además, es posible que coexistan diferentes versiones de Java en un sistema, +lo que permite que las aplicaciones se ejecuten en versiones específicas de la JVM +(Java Virtual Machine) para garantizar la compatibilidad con el código existente. + +Otras características de las +[diferentes versiones de Java](https://www.aluracursos.com/blog/caracteristica-destacables-java8-delante). + +### IDE + +#### Eclipse + +Instalación desde AUR, o descarga desde +[eclipse.org](https://www.eclipse.org/downloads/packages/) + +#### IntelliJ IDEA + +```sh +sudo pacman -S intellij-idea-community-edition +``` + +Al crear projectos con IDEs estos crean la estrucutura principal del proyecto y al +compilar guardan los bytecodes en un directorio distinto de donde esta el codigo +fuente. + +Para correr un archivo bytecode en otra ruta se puede usar el flag `--clas-path`. + +ej. [proyecto](./intellij_idea/java_primeros_pasos/) creado con IntelliJ IDEA + +```sh +java --class-path ./intellij_idea/java_primeros_pasos/out/production/java_primeros_pasos/ Ejemplo +``` + +### Tipos y Variables + +#### Tipo entero + diff --git a/008_java_oo/devstats.png b/008_java_oo/devstats.png new file mode 100644 index 0000000000000000000000000000000000000000..afed001edda11263aeabd88f1aeded5f8dc02fd1 GIT binary patch literal 26596 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