0% found this document useful (0 votes)
27 views35 pages

Java in Education For JUGs 2.0 - ES

sfvsdvsdvsd

Uploaded by

christrock4
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views35 pages

Java in Education For JUGs 2.0 - ES

sfvsdvsdvsd

Uploaded by

christrock4
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 35

Java en la Educación

<Inserta tu nombre aquí, si estás presentando>


JUG Presentation
Para programadores junior y estudiantes

Preparado por Ken Fogel y el JCP Executive


Committee (EC) Java in Education Working
Group
• Java puede tener una pronunciada curva
de aprendizaje para un principiante.
• Sólo si el instructor en su etapa de aprendizaje
también la tuvo.
Mitos y
• Java no es adecuado para tareas rápidas y ligeras.
Beneficios de • Es más adecuado para aplicaciones grandes y
aprender complejas.
• ¿Has visto el Single-File Source-Code y en Linux
Java has probado la ejecución de shebang?
• Recién incluidos! Unnamed Classes and Instance
Main Methods
• Oracle Java Development Kit (JDK), no es código
abierto
• OpenJDK es una implementación del JDK
completamente de código abierto.
• El desarrollo continuo de Java se realiza en el
proyecto OpenJDK por parte de los
desarrolladores Java de Oracle.
• Java es un lenguaje viejo (Java 1996 y
Python 1991)
Mitos y • También, significa que está
Beneficios de establecido, ampliamente utilizado y
bien documentado.
aprender • Más programadores Java que cualquier
Java otro tipo de programador en el mundo.
• Es fácil encontrar personas que puedan
ayudarte y orientarte.
• Java deriva su sintáxis de C
• Aprende Java, te hará aprender
lenguajes como Javascript, C#, C++ e
incluso Python más fácil.
• Java (y su variante en el JVM Kotlin) son
la base del desarrollo Android.
Estas mejoras ayudan
Esta presentación
a disipar algunos de
analiza varias mejoras
los mitos que rodean a
al lenguaje Java.
Mejoras del Java.

Lenguaje Java Se trata de por qué Java Incluso hay una


debería ser el lenguaje a
comparación de un
enseñar en todos los
niveles educativos al día programa en Java y
de hoy. Python.
Una herramienta para simplificar las
instrucciones.
Ejecución a medida que ingresa el
JShell - código y presiona Intro.
Read-Evaluate- Respuesta inmediata, línea a línea.
Print Loop
(REPL) JDK 9 También puedes escribir tus métodos
y luego ejecutarlos.
Ideal para enseñar o aprender Java
una línea a la vez.
• Aborda la sobrecarga de ejecutar código.
• Estilo tradicional:
• Dos pasos para la ejecución:
• javac
• java -jar
• Estilo usando → Single-File Source-Code
• Un solo paso para la ejecución
JEP 330 - Launch • java
Single-File • Si el archivo tiene una clase pública con un
método main, se compila y ejecuta.
Source-Code • Funciona también con preview-features
además de funciones ya establecidas.
Programs JDK 11 • Un solo archivo puede contener múltiples
clases.
• Esta puede ser la segunda* nueva capacidad más importante
para escribir Java para aquellos que deseen aprender el
lenguaje.
• No necesitas ser un master en un IDE, para aprender Java.

* La primera se mostrará en el Slide 18


• La queja más común sobre Java es que no es
adecuado para principiantes en comparación
Java 21 - (usualmente) con Python.
Unnamed • JEP 330 - Launch Single-File Source-Code

Classes and fue un primer paso hacia la simplificación.


• JEP 445 - Unnamed Classes and Instance
Instance Main Methods son los siguientes pasos
Main • No necesita declarar ninguna clase.
• Declarar imports está permitido.
Methods • Declarar packages NO está permitido.
Preview • Constructores NO están permitidos.
Java 21 - • Aquí, tenemos un programa en Java completo,
Unnamed que puede ser compilado y ejecutado.
Classes and
void main() {
Instance
System.out.println(“Hello World”);
Main
}
Methods
Preview • Se espera que en JDK22 se elimine el System.out
1. static void main(String[]args)
2. static void main()
3. void main(String[] args)
El nuevo y Y nuestro favorito:
mejorado 4. void main()
main! • Ejecución de un solo archivo:
• java --enable-preview --source 21 file.java
• Compilar y Ejecutar:
Utilizable • javac --enable-preview --source 21 file.java
en cualquier • java --enable-preview file

lugar! • Puede utilizar cualquiera o todos los nuevos formatos del


método main.
• Se ejecutarán en el orden que se muestra aquí, 1, luego 2,
luego 3, luego 4
var – Reducción de redundancia JDK 10

No más: • MyClass m = new MyClass();

Ahora se convierte en: • var m = new MyClass();

Fomenta solo la
creación de objetos con
• Will reduce the occurrence of the
su inicialización dreaded NullPointerException
Finalmente, lo que ingresas en tu código
fuente es lo que
obtienes.

Text Blocks Especialmente útil para cadenas que


contienen HTML, XML y
JDK 15 JSON.

¿A quién no le gusta escribir tres comillas


seguidas?

""" """
Concatenación de la vieja forma
String htmlStr = "<html><head><link rel='stylesheet' "
+ "href='styles/main.css' "
+ "type='text/css'/><title>The Learning Servlet</title></head>"
+ "<body><h1>GET method</h1>"
+ "<form id='form:index' action='index.html'>"
+ "<br/><input type='submit' value='Return to Home page'/></form>"
+ "</body></html>";
Bloque de Texto - Nueva forma JDK 15
String htmlStr = """
<html>
<head>
<link rel='stylesheet'href='styles/main.css' type='text/css’/>
<title>The Learning Servlet</title>
</head>
<body>
<h1>GET method</h1>
<form id='form:index' action = 'index.html'>
<br/>
<input type= 'submit' value='Return to Home page' />
</form>
</body>
</html>""";
Pero espera, hay más . . . String formateado JDK 15
out.println("""
<html>
<head>
<title>Just Servlet Output</title>
<link rel='stylesheet' href='styles/main.css' type= 'text/css'/>
</head>
<body>
<h1>Thanks for joining our email list</h1>
<p>Here is the information that you entered:</p>
<label>Email:</label>
<span>%s</span>
</body>
</html>""".formatted(user.getEmailAddress()));
Y aún más . . . String template JDK 21 preview
String email = "[email protected]";
String page = STR."""
<html>
<head>
<title>Just Servlet Output</title>
<link rel='stylesheet' href='styles/main.css' type= 'text/css’/>
</head>
<body>
<h1>Thanks for joining our email list</h1>
<p>Here is the information that you entered:</p>
<label>Email:</label>
<span>\{email}</span>
</body>
</html>""";
System.out.println(page);
switch – una expresión y sin break JDK 14

Un switch que se puede explicar con sensatez


Reducción de la duplicación de código cuando se utiliza
para establecer un valor
El switch ya no necesita ser el original switch de C.

El break llegó a su fin, todos los casos terminan!


¿Cuál prefieres aprender o enseñar?
double value = 0; double value = switch (point)
switch (point) { {
case NORTH: case NORTH -> 12.12;
value = 12.12; case SOUTH -> 14.14;
break; case EAST -> 16.16;
case SOUTH:
case WEST -> 18.18;
value = 14.14;
default -> 0.0;
break;
};
case EAST:
value = 16.16;
break;
case WEST:
value = 18.18;
break;
}
Pattern Matching Switch.
JDK 21
Object x = "4";
String designation = switch (x) {
// case Integer i when i > 4 && i < 12 -> "child";
case Integer i when i < 12 -> "child";
case Integer i when i < 18 -> "teenager";
case Integer i when i < 25 -> "young adult";
case Integer i when i < 65 -> "adult";
case Integer i when i >= 65 -> "senior";
default -> "Not an Integer";
};
System.out.printf("Designation is %s%n", designation);
records – Los objetos de datos son conocidos por su código
repetitivo:
Reducción del • Inicializar constructores, setters, getters, equals,
hashCode, and toString
boilerplate
Al rescate, llegan los records inmutables
requerido con
inmutabilidad Más que una simple simplificación de un bean

agregada al Es el camino hacia objetos inmutables por defecto


manejo de la Y luego está el constructor compacto.
data. Validando los valores iniciales sin un constructor por
JDK 16 separado.
No setters, solo simple getters.
Implíctos equals, hashCode and toString.
Y, un compacto constructor para validación
public record Person(String firstName,
String lastName,
int age,
String postion,
LocalDate birthday) {
public Person{
if (age < 18) {
throw new IllegalArgumentException("Too young");
}
}
}
public class VirtualThreadClass extends Thread { . . }

Virtuosos
Virtual public void perform() {

Threads for (int i = 0; i < 5; ++i) {


Thread.ofVirtual().name("Thread # " + i).
JDK 21. start(new VirtualThreadClass());
}
• Pequeño para descargar.
• Disponible en cada navegador de
JavaScript cada computador.
¿Que está • Numerosos entornos de
programación en línea
dejando a i

Java a un • Asociado a las dos grandes


tendencias:
lado? Python • Big Data
• AI/ML
• Jupyter notebook en línea es muy
popular
El patrón de diseño más temido:
¿Por qué
Python • Flujo de conciencia
está ganando El programa fluye a medida que las
popularidad en tareas vienen a mi.
la educación? Atrae a personas que necesitan
codificar pero que no necesariamente
quieren aprender a codificar
profesionalmente.
En las siguientes diapositivas está el
Comparemos mismo programa en Python y Java.
Python con
Java. Estos programas solicitan tres valores
decimales (float).

Discute las • Cantidad de dinero prestada llamada loan.


comparaciones • La tasa de porcentaje anual (APR) de interés sobre
el dinero prestado.
mientras las • La duración del préstamo expresada en meses se
llama plazo (term).
revisas.
A partir de estos valores el programa
calcula el pago mensual y lo muestra.
Python Básico
loan = 1000.0
interest 0.05
term = 5
tempInterest = float(interest) / 12
result = float(loan) * \
(tempInterest / (1.0 - ((1.0 + tempInterest) ** -float(term))))
print("Monthly Payment: %.2f" % result)
Java Clásico
public class JavaCalculator01 {

public static void main(String[] args) {

double loan = 1000.0;


double interest = 0.05;
double term = 5;

var tempInterest = interest / 12.0;


var result = loan * (tempInterest / (1.0 - Math.pow((1.0 + tempInterest), -term)));

System.out.printf("Monthly Payment: %.2f%n", result);


}
}

// Single Source File Code example


// runs with java JavaCalculator01.java
void main() {
Java - Clase sin
var loan = 1000.0;
var interest = 0.05;
var term = 5;

var tempInterest = interest / 12.0;


nombre

var result = loan * (tempInterest / (1.0 - Math.pow((1.0 + tempInterest), -term)));

System.out.printf("Monthly Payment: %.2f%n", result);


}

// Single Source File Code example


// runs with java --enable-preview --source 21 JavaCalculator01N.java
Python POO
class PythonCalculator03:

def func_input(self):
loan = float(input(" loan: "))
interest = float(input(" interest: "))
term = float(input(" term: "))
return loan, interest, term

def func_process(self, input_data):


(loan, interest, term) = input_data
temp_interest = float(interest) / 12.0;
return loan * (temp_interest / (1.0 - ((1.0 + temp_interest) ** -term)));

def func_output(self, result):


print('Monthly Payment: %.2f' % result)

def func_work(self):
input_data = self.func_input()
result = self.func_process(input_data)
self.func_output(result)

worker = PythonCalculator03()
worker.func_work()
public class JavaCalculator03 {

private LoanRecord inputData() {


var sc = new Scanner(System.in);
System.out.printf(" Loan: ");
var loan = sc.nextDouble();
Java POO
System.out.printf(" Interest: ");
var interest = sc.nextDouble();
System.out.printf(" Term: ");
var term = sc.nextDouble();
return new LoanRecord(loan, interest, term);
}

private double processData(LoanRecord loan) {


var tempInterest = loan.interest() / 12.0;
var result = loan.loan() * (tempInterest / (1.0 - Math.pow((1.0 + tempInterest), -loan.term())));
return result;
}

private void outputResult(double result) {


System.out.printf("Monthly Payment: %.2f%n", result);
}

public void perform() {


var loan = inputData();
var result = processData(loan);
outputResult(result);
}

public static void main(String[] args) {


new JavaCalculator03().perform();
}
}

record LoanRecord(double loan, double interest, double term) {}


Aprendizaje automático y Big Data
Reconocimiento visual JSR 381
• Java está haciendo
aprendizaje automático
ahora!
• La biblioteca Deep Java
(DJL) de Amazon es una de
varias implementaciones
de este nuevo JSR.
• La profundidad y amplitud
de las herramientas Java la
convierten en la mejor
plataforma para ML.
¿Por qué Python es ampliamente
usado para AI/ML?
• Python está escrito en C.
• La mayoría de librerías para
AI/ML están escritas en C.
• Esto simplifica el uso de
estas librerías en Python.
• Con Java 21 tenemos
Foreign Linker API & Foreign
Memory Access API que
simplifican el acceso a
librerías escritas en C.
La máquina
virtual Java
JVM:
• Kotlin, Scala, Groovy, Clojure y más.
hogar de más • Incluso existe un Python llamado Jython que
que Java se ejecuta en la JVM y admite
interoperabilidad entre Java y Python.
Muchas instituciones financieras dependen de Java
para ejecutar su core bancario.

¿Cuáles son
tus Twitter, LinkedIn, Amazon y otros usan Java.

expectativas
Tus expectativas son una función de qué tan bien
laborales si puedes escribir código

aprendes Aprender Java es el mejor idioma para aprender y


Java? prepararte para trabajar con cualquier idioma
durante tu carrera.

Es el mejor lenguaje para enseñar y brindarles a los


estudiantes una comprensión clara de lo que significa
programar.
Anime a los
Comuníquese con
Anime alos profesores de
las asociaciones de
estudiantes a unirse programas de
estudiantes de
a su JUG. informática a unirse
Conclusión – a su JUG.
informática

Promocionar Realice seminarios o


Comuníquese con Tener reuniones en
los campus.
recursos para los
docentes.
reuniones en su JUG
solo para docentes.
las escuelas y los
docentes/ Ejecute hackatones
Después de todo, los
estudiantes pronto
Involúcrate en la
profesores de educación.
de Java para
estudiantes
serán sus
compañeros de
trabajo.
todos los niveles.
*Descuentos para todos los miembros del grupo de usuarios de parte de Oracle
University aquí:
https://education.oracle.com/usergroupchampions
Currently 25% discount through 12/21/2020.
El código de ejemplo se puede
encontrar en:

https://github.com/omniprof/JCP_EC
_Education_WG_Presentation

You might also like