SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Java Evolution
Junio 2015
Java Evolution - Timeline
01 Quick overview of JDK 7 Features
Autoclosing - Try-with-resources
Java Evolution - Java 7
Desde Java 7
Antes de Java 7 Desde Java 7
BufferedReader br = null;
try {
br =
new BufferedReader(new FileReader(“text.txt”));
// Read file
} catch (IOException e) { // Handle error}
finally {
if(br!=null) {
try {
br.close();
} catch(IOException e) {}
}
}
// AutoCloseable resource is closed automatically!
try (BufferedReader br =
new BufferedReader(new File(“text.txt”)))
{
// Read file
}
catch (IOException e) { // mandatory catch block
// Handle error
}
// Veamos la clase BufferedReader en la JDK...
</> Source code: com/globallogic/training/j7/exceptions/TryWithResourcesDemo.java
Fork/Join framework
Java Evolution - Java 7
</> Source code: com/globallogic/training/j7/forkjoin/FolderSearchTask.java
● ForkJoinPool permite ejecutar instancias de clases que extienden de ForkJoinTask
● Los objetos ForkJoinTask permiten crear subtareas y esperar a que terminen.
● ForkJoinTask tiene dos métodos principales:
● fork(): permite a un ForkJoinTask lanzar la ejecución asíncrona. Esto permite lanzar una
nueva ForkJoinTask desde una existente.
● join(): permite a un ForkJoinTask esperar por la finalización de otra tarea.
● RecursiveTask extiende ForkJoinTask y su método compute() retorna un valor calculado.
● RecursiveAction extiende ForkJoinTask y su método compute() no retorna un valor.
El Fork-Join framework se agrega como parte de Java 7 utilizando la interface ExecutorService
para distribuir procesos en el pool de threads. Permite optimizar el rendimiento “robando” subtareas encoladas
por otras tareas y ejecutarlas.
En pseudocódigo para el uso del framework sería:
if (El trabajo es simple) then { Hacerlo directamente }
else {
dividir el trabajo en partes (fork)
invocar las partes y esperar por los resultados (join)
}
Exception Multi-catch
Java Evolution - Java 7
Desde Java 7
Antes de Java 7 Desde Java 7
try {
doSomething();
}
catch(Ex1 ex) {
handleException();
}
catch(Ex2 ex) {
handleException();
}
catch(Ex3 ex) {
handleException();
}
try {
doSomething();
}
catch(Ex1 | Ex2 ex) {
handleException();
}
catch(Ex3 | Ex4 ex) {
handleException();
}
</> Source code: com/globallogic/training/j7/exceptions/MultiCatchDemo.java
Type inference for generics
Java Evolution - Java 7
Java 5 y 6 Desde Java 7
Map<String, List<String>> retVal =
new HashMap<String, List<String>>();
public static Map<String, List<String>>
parseQueryString(String queryString){
if(queryString == null) {
return new HashMap<String, List<String>>();
}
}
// Left to right type inference
Map<String, List<String>> retVal = new HashMap<>();
// Return type inference
public static Map<String, List<String>>
parseQueryString(String queryString){
if(queryString == null) {
return new HashMap<>();
}
}
Antes de Java 7
Strings for switchs
Java Evolution - Java 7
Desde Java 7
if("Java".equals(language)) {
// static
} else if("Scala".equals(language)) {
// dynamic
} else {
// Other
}
switch(language)) {
case "Java":
// static
break;
case "Scala":
// dynamic
break;
default:
// Other
}
02 New features introduced in JDK 8
● Es un sistema formal diseñado para investigar la definición de función, la noción de aplicación de funciones y la
recursión.
● Consiste en un sistema simple de definición de funciones y sustitución de variables.
● Cualquier función computable puede ser expresada y evaluada.
● Por ejemplo, Id(x) = x ó su equivalente λx.x , puede ser escrita como: a -> a
● La función Suma(x,y) = x + y , puede ser escrita como: (a,b) -> a + b
● Se observa que las funciones no necesitan ser nombradas (anónimas).
● El nombre de los argumentos es irrelevante.
● Toda función que requiere 2 argumentos puede ser currificada.
● Currificar significa transformar una función que utiliza múltiples argumentos en una función que utiliza un único
argumento.
● La función suma no currificada sería: (x,y) -> x + y
● La función suma currificada sería: x -> ( y -> x + y )
Lambda Expressions
Java Evolution - Java 8
Es la principal novedad de Java 8...pero que es el cálculo lambda ?
● Elemento fundamental en lenguajes funcionales como Haskell y también presente en lenguajes
basados en la JVM como Clojure y Scala.
● Ejemplo en Haskell:
map :: (a -> b) -> [a] -> [b]
map ((a,b) -> a + b) [(1,2),(2,3),(3,4)] → Resultado?
● Ejemplo en Clojure:
map + [1 2 3] [2 3 4] → Resultado?
Es la principal novedad de Java 8. Se incluye este elemento fundamental del paradigma funcional.
Lambda Expressions
Java Evolution - Java 8
● Ejemplo en Scala:
val l = List(1,2,3,4,5)
l.map( x => x*2 ) → Resultado?
● Ejemplo en C#:
static void Main(string[] args)
{
del myDelegate = x => x * x;
int j = myDelegate(5); //j = ?
}
● Sintaxis Lambda en Java 8:
● (parameters) -> expression
● (parameters) -> statement
● (parameters) -> { statements }
Lambda Expressions
Java Evolution - Java 8
</> Source code: com/globallogic/training/j8/lambdas/*.java
● Alternativa a las clases abstractas (en algunos casos)
● No poseen estado y no pueden definir un constructor.
● El uso de un método default o implementar una clase abstracta dependerá del problema a resolver.
● Los métodos estáticos son similares a los métodos default, excepto que no podemos hacer override
en las clases de implementación.
Permiten incorporar comportamiento a una interface sin afectar a las clases que la implementan.
Interfaces: Default and Static Methods
Java Evolution - Java 8
</> Source code: com/globallogic/training/j8/defaults/interfaces/DefaultInterfaceDemo.java
● Sólo un método abstracto.
● Puede convertirse en una expresión lambda.
● Uno o más métodos “default”.
● Uno o más métodos estáticos.
● Predicate es un ejemplo de una Functional Interface incorporada en la JDK 1.8.
En algún momento trabajamos con alguna interface de tipo SAM (Single Abstract Method) como Runnable
Callable o ActionListener. @FunctionalInterface permite declarar interfaces de este tipo.
Functional Interfaces
Java Evolution - Java 8
</> Source code: com/globallogic/training/j8/functional/interfaces/PredicateDemo.java
Hay cuatro tipos de métodos que pueden ser referenciados:
● Métodos estáticos (Class::staticMethodName)
● Constructores
● Métodos de instancia de una clase específica
● Métodos de instancia de un objeto específco
Nos permite referenciar constructores y métodos sin ejecutarlos. Está fuertemente ligado con las lambda
expressions.
Method References
Java Evolution - Java 8
</> Source code: com/globallogic/training/j8/method/references/MethodReferencesDemo.java
● Es un contenedor para evitar chequeos por nulls y fomentar la legibilidad del código
● Está basado en el Optional de Google Guava
● Usa generics para inferir el tipo
● Métodos màs comunes isPresent(), orElseGet() o map().orElse()
Características:
Optional
Java Evolution - Java 8
</> Source code: com/globallogic/training/j8/optionals/OptionalDemo.java
● Simplifica el procesamiento de colecciones
● Complementa el soporte de Lambdas
● Permite paralelizar (en procesamiento), filtrar, mapear y convertir los elementos de la colección.
● No solo es útil para colecciones sino para el streaming de datos en archivos
● Define nuevos conceptos como ser: funciones de agregación y pipelines
● Métodos màs comunes son: mapTo*(), filter(), getAs*()
Características:
Stream API
Java Evolution - Java 8
</> Source code: com/globallogic/training/j8/collections/streams/StreamBasicDemo.java
Stream API: Reducción
Java Evolution - Java 8
Características:
</> Source code: com/globallogic/training/j8/collections/streams/StreamReduceDemo.java
● Las operaciones de reducción generalmente retornan un único valor (average, min, max, count)
● También existen aquellas que retornan colecciones (collect, reduce)
● La diferencia principal entre reduce() y collect() es que collect modifica o muta un valor existente,
reduce en cambio crea una nuevo.
New Date/Time API
Java Evolution - Java 8
Características:
● Para obtener la fecha o la hora actual ahora podemos usar la clase Clock, a través de sus métodos instant() o
millis()
● Nuevas clases solo para Date ó Time ó ambas (LocalDate, LocalTime o LocalDateTime)
● En el caso de requerir Time zone (ZonedDateTime)
● Posibilidad de “truncar” dates usando truncatedTo() y pasando como parametro la unidad ChronoUnit.*
● Diferencia entre dates en términos de duración a través de la clase Duration
● Los períodos representan una duración en tiempo. Por ejemplo: 3 meses, 2 días, 10 horas, 20 minutos y 10 seg.
● Nuevo modelo de Time zones cada una con set de reglas. Hay más facilidad para calcular diferencias horarias.
</> Source code: com/globallogic/training/j8/datetime/DateTimeDurationDemo.java
Nashorn: Javascript Engine
Java Evolution - Java 8
Características:
● Nuevo engine de Javascript (en la JDK7 existe uno basado en Mozilla Rhino): Mejor performance y
adaptación a ECMA JS
● Permite desarrollar aplicaciones de javascript usando como runtime la JVM
● También existe una tool (jjs) que permite ejecutar dichos scripts por consola
</> Source code: com/globallogic/training/j8/jsengine/NashornDemo.java
Parallel Arrays
Java Evolution - Java 8
Características:
● Provee mejor performance en las operaciones gracias a la utilización de los cores.
● Metodos agregados: parallelSort(), parallelSetAll(), parallelPrefix()
● Nueva interfaz Spliterator para recorrer y particionar arrays.
</> Source code: com/globallogic/training/j8/parallelArrays/ParallelSort.java
Nuevas Herramientas
Java Evolution - Java 8
Características:
● jdeps: analiza paquetes y dependencias a nivel de clase.
jdeps -v ClassName.class
Deps.class -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar
Deps (Deps.class)
-> java.io.PrintStream
-> java.lang.Math
-> java.lang.Object
-> java.lang.String
-> java.lang.System
-> java.util.HashSet
● jjs: nashorn engine
jjs greet.js
03 Promises for the JDK 9
● Modularización de la JDK.
● Facilita incorporar la JDK en dispositivos pequeños.
● Facilita y mejora la implementación de seguridad.
● Mejoras en la performance de las aplicaciones.
● Simplificación en el desarrollo de las aplicaciones.
● Al día de hoy se están incluyendo los siguientes
enhancements en la JDK 9
● JEP 201: Modular Source Code
● JEP 220: Modular Run-Time Images
● Se busca poder definir módulos como en el ejemplo.
Objetivo: modularización y optimización de la plataforma Java. Incluye JEPs 200, 201, 220 y JSR 376.
Proyecto Jigsaw
Java Evolution - Java 9
module M @ 1.0 {
requires A @ >= 2.0 ; // Version constraints
requires service S1;
provides MI @ 4.0;
provides service MS with C;
exports ME;
permits MF;
class MMain;
view N {
provides service NS with D;
class NMain;
}
}
● Alternativa nativa y optimizada a librerias existentes como Jackson o Gson.
● JSON es el formato más utilizado para intercambiar información en la web.
● Se intenta proveer una API para las funcionalidades más comunes.
● Formará parte del package java.util
● Se dividirá en cuatro módulos: events, streams, trees y generators.
Objetivo: Proveer una API simple para consumir y generar JSON y streams.
Lightweight JSON API
Java Evolution - Java 9
● Actualmente suele ser necesario utilizar código nativo para realizar ciertas operaciones.
● Obtener/asignar el nombre de un proceso.
● Obtener información de los procesos (similar al comando ps)
● Manejo de árboles de procesos y subprocesos.
● Obtener el PID de un proceso (sin manipular streams)
Objetivo: Mejorar la API para controlar e interactuar con procesos del sistema operativo.
Process API updates
Java Evolution - Java 9
</> Source code: com/globallogic/training/j9/process/ProcessDemo.java
● La clase java.util.Currency sólo representa monedas (sin
soporte para cálculos ni conversiones).
● Los montos de dinero se representan con BigDecimal o
Double.
● Nuevas clases para representar valores de dinero y
moneda.
● Nuevas clases y operaciones para cálculos,
conversiones y formatos.
● Fuentes dispnibles en https://github.
com/JavaMoney/jsr354-ri
Objetivo: Proveer una API para representar y realizar operaciones vinculadas a manejo de dinero y moneda
de una forma clara y simple.
Money and Currency API
Java Evolution - Java 9
Gradle:
compile group: 'org.javamoney', name: 'moneta', version:
'0.9'
Maven:
<dependency>
<groupId>org.javamoney</groupId>
<artifactId>moneta</artifactId>
<version>0.9</version>
</dependency>
</> Source code: com/globallogic/training/j9/money/MoneyDemo.java
● HTTP 2 Client: Define a new HTTP client API that implements HTTP/2 and WebSocket.
● REPL in Java: Provide a console to evaluate declarations, statements, and expressions.
● Segmented Code Cache: Divide the code cache into distinct segments in order to improve performance.
● Unified JVM Logging: Introduce a common logging system for all components of the JVM.
More expected features
Java Evolution - Java 9+
CONFIDENTIAL©2013 GlobalLogic Inc.
Gracias!

Más contenido relacionado

La actualidad más candente

Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
GaloGabriel
 

La actualidad más candente (20)

Semana 6 Módulos Clases y Objetos
Semana 6   Módulos Clases y ObjetosSemana 6   Módulos Clases y Objetos
Semana 6 Módulos Clases y Objetos
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala
 
Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.Fundamentos POO en JS. Mixins y Traits.
Fundamentos POO en JS. Mixins y Traits.
 
TUTORIAL JAVA
TUTORIAL JAVATUTORIAL JAVA
TUTORIAL JAVA
 
Introducción a la programación orientada a objetos con JavaScript
Introducción a la programación orientada a objetos con JavaScriptIntroducción a la programación orientada a objetos con JavaScript
Introducción a la programación orientada a objetos con JavaScript
 
Unidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIASUnidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIAS
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
 
Glosario de términos
Glosario de términosGlosario de términos
Glosario de términos
 
Introducción a scala
Introducción a scalaIntroducción a scala
Introducción a scala
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
 
Introduccion java
Introduccion javaIntroduccion java
Introduccion java
 
Destructores
Destructores Destructores
Destructores
 
Documento Margarita
Documento MargaritaDocumento Margarita
Documento Margarita
 
Serializacion
SerializacionSerializacion
Serializacion
 
Metodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a ObjetosMetodologia para resolver problemas con Programacion orientada a Objetos
Metodologia para resolver problemas con Programacion orientada a Objetos
 
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
Java fundamentos   15 consejos prácticos - ITLA Tech Day 2018Java fundamentos   15 consejos prácticos - ITLA Tech Day 2018
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
 
Comandos Java
Comandos JavaComandos Java
Comandos Java
 
Programar java
Programar javaProgramar java
Programar java
 
Programar java
Programar javaProgramar java
Programar java
 

Destacado

Java Collections
Java CollectionsJava Collections
Java Collections
parag
 

Destacado (11)

Curso Java Avanzado 3 Js Ps
Curso Java Avanzado   3 Js PsCurso Java Avanzado   3 Js Ps
Curso Java Avanzado 3 Js Ps
 
Java collection
Java collectionJava collection
Java collection
 
07 java collection
07 java collection07 java collection
07 java collection
 
Collection Framework in java
Collection Framework in javaCollection Framework in java
Collection Framework in java
 
Java Collection framework
Java Collection frameworkJava Collection framework
Java Collection framework
 
Java Collections
Java CollectionsJava Collections
Java Collections
 
Java Collections API
Java Collections APIJava Collections API
Java Collections API
 
Java programming course for beginners
Java programming course for beginnersJava programming course for beginners
Java programming course for beginners
 
Java Tutorial
Java TutorialJava Tutorial
Java Tutorial
 
Java basic
Java basicJava basic
Java basic
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
 

Similar a Presentación Java Evolution - GlobalLogic Club

2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02
Krizztiina Pacheko
 
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
Oscar V
 

Similar a Presentación Java Evolution - GlobalLogic Club (20)

estructura de un programa en java
estructura de un programa en javaestructura de un programa en java
estructura de un programa en java
 
Resumen java
Resumen javaResumen java
Resumen java
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the future
 
2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02
 
INTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVAINTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVA
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
 
Metodos,variables, pasodeparametros
Metodos,variables, pasodeparametrosMetodos,variables, pasodeparametros
Metodos,variables, pasodeparametros
 
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
OCP, JSE 6 Programmer (1z0-851) - Guia practica 3 de 7(ap-is)
 
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...
Fundamentos de Java /   15 consejos prácticos sobre Java que cambiarán la for...Fundamentos de Java /   15 consejos prácticos sobre Java que cambiarán la for...
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
 
Grupo1
Grupo1Grupo1
Grupo1
 
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Java
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
 
Realizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaRealizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y Eficacia
 
Comandos de Java
Comandos de JavaComandos de Java
Comandos de Java
 
Sintaxisenjava
Sintaxisenjava Sintaxisenjava
Sintaxisenjava
 
Java argumentos variables
Java argumentos variablesJava argumentos variables
Java argumentos variables
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 java
 

Más de GlobalLogic Latinoamérica

Más de GlobalLogic Latinoamérica (14)

5º MeetUP ARQconf 2016 - IoT: What is it really and how does it work?
5º MeetUP ARQconf 2016 - IoT: What is it really and how does it work?5º MeetUP ARQconf 2016 - IoT: What is it really and how does it work?
5º MeetUP ARQconf 2016 - IoT: What is it really and how does it work?
 
Chuck norris navigates offline - meetup ui lp 2015
Chuck norris navigates offline - meetup ui lp 2015Chuck norris navigates offline - meetup ui lp 2015
Chuck norris navigates offline - meetup ui lp 2015
 
[Bpm practice] focos práctica bpm
[Bpm practice] focos práctica bpm[Bpm practice] focos práctica bpm
[Bpm practice] focos práctica bpm
 
[Bpm practice] breve introduccion a bpm
[Bpm practice] breve introduccion a bpm [Bpm practice] breve introduccion a bpm
[Bpm practice] breve introduccion a bpm
 
Gl club story mapping - impact mapping - 30-09-2015
Gl club   story mapping - impact mapping - 30-09-2015Gl club   story mapping - impact mapping - 30-09-2015
Gl club story mapping - impact mapping - 30-09-2015
 
[Bpm practice] breve introduccion a bpm(1)
[Bpm practice] breve introduccion a bpm(1)[Bpm practice] breve introduccion a bpm(1)
[Bpm practice] breve introduccion a bpm(1)
 
My first app Android
My first app AndroidMy first app Android
My first app Android
 
Architectural katas - La Plata - 23-07-2015
Architectural katas - La Plata - 23-07-2015Architectural katas - La Plata - 23-07-2015
Architectural katas - La Plata - 23-07-2015
 
Workshop Product in a Box
Workshop Product in a BoxWorkshop Product in a Box
Workshop Product in a Box
 
Charla REST API
Charla REST APICharla REST API
Charla REST API
 
Camino hacia la calidad superlativa - Marcelo Corpucci
Camino hacia la calidad superlativa - Marcelo CorpucciCamino hacia la calidad superlativa - Marcelo Corpucci
Camino hacia la calidad superlativa - Marcelo Corpucci
 
Seminario Android inicial 2014
Seminario Android inicial 2014Seminario Android inicial 2014
Seminario Android inicial 2014
 
Calidad en Agile - EducacionIT
Calidad en Agile - EducacionITCalidad en Agile - EducacionIT
Calidad en Agile - EducacionIT
 
La experiencia de usuario desde la mirada de Method
La experiencia de usuario desde la mirada de MethodLa experiencia de usuario desde la mirada de Method
La experiencia de usuario desde la mirada de Method
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (10)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 

Presentación Java Evolution - GlobalLogic Club

  • 2. Java Evolution - Timeline
  • 3. 01 Quick overview of JDK 7 Features
  • 4. Autoclosing - Try-with-resources Java Evolution - Java 7 Desde Java 7 Antes de Java 7 Desde Java 7 BufferedReader br = null; try { br = new BufferedReader(new FileReader(“text.txt”)); // Read file } catch (IOException e) { // Handle error} finally { if(br!=null) { try { br.close(); } catch(IOException e) {} } } // AutoCloseable resource is closed automatically! try (BufferedReader br = new BufferedReader(new File(“text.txt”))) { // Read file } catch (IOException e) { // mandatory catch block // Handle error } // Veamos la clase BufferedReader en la JDK... </> Source code: com/globallogic/training/j7/exceptions/TryWithResourcesDemo.java
  • 5. Fork/Join framework Java Evolution - Java 7 </> Source code: com/globallogic/training/j7/forkjoin/FolderSearchTask.java ● ForkJoinPool permite ejecutar instancias de clases que extienden de ForkJoinTask ● Los objetos ForkJoinTask permiten crear subtareas y esperar a que terminen. ● ForkJoinTask tiene dos métodos principales: ● fork(): permite a un ForkJoinTask lanzar la ejecución asíncrona. Esto permite lanzar una nueva ForkJoinTask desde una existente. ● join(): permite a un ForkJoinTask esperar por la finalización de otra tarea. ● RecursiveTask extiende ForkJoinTask y su método compute() retorna un valor calculado. ● RecursiveAction extiende ForkJoinTask y su método compute() no retorna un valor. El Fork-Join framework se agrega como parte de Java 7 utilizando la interface ExecutorService para distribuir procesos en el pool de threads. Permite optimizar el rendimiento “robando” subtareas encoladas por otras tareas y ejecutarlas. En pseudocódigo para el uso del framework sería: if (El trabajo es simple) then { Hacerlo directamente } else { dividir el trabajo en partes (fork) invocar las partes y esperar por los resultados (join) }
  • 6. Exception Multi-catch Java Evolution - Java 7 Desde Java 7 Antes de Java 7 Desde Java 7 try { doSomething(); } catch(Ex1 ex) { handleException(); } catch(Ex2 ex) { handleException(); } catch(Ex3 ex) { handleException(); } try { doSomething(); } catch(Ex1 | Ex2 ex) { handleException(); } catch(Ex3 | Ex4 ex) { handleException(); } </> Source code: com/globallogic/training/j7/exceptions/MultiCatchDemo.java
  • 7. Type inference for generics Java Evolution - Java 7 Java 5 y 6 Desde Java 7 Map<String, List<String>> retVal = new HashMap<String, List<String>>(); public static Map<String, List<String>> parseQueryString(String queryString){ if(queryString == null) { return new HashMap<String, List<String>>(); } } // Left to right type inference Map<String, List<String>> retVal = new HashMap<>(); // Return type inference public static Map<String, List<String>> parseQueryString(String queryString){ if(queryString == null) { return new HashMap<>(); } }
  • 8. Antes de Java 7 Strings for switchs Java Evolution - Java 7 Desde Java 7 if("Java".equals(language)) { // static } else if("Scala".equals(language)) { // dynamic } else { // Other } switch(language)) { case "Java": // static break; case "Scala": // dynamic break; default: // Other }
  • 9. 02 New features introduced in JDK 8
  • 10. ● Es un sistema formal diseñado para investigar la definición de función, la noción de aplicación de funciones y la recursión. ● Consiste en un sistema simple de definición de funciones y sustitución de variables. ● Cualquier función computable puede ser expresada y evaluada. ● Por ejemplo, Id(x) = x ó su equivalente λx.x , puede ser escrita como: a -> a ● La función Suma(x,y) = x + y , puede ser escrita como: (a,b) -> a + b ● Se observa que las funciones no necesitan ser nombradas (anónimas). ● El nombre de los argumentos es irrelevante. ● Toda función que requiere 2 argumentos puede ser currificada. ● Currificar significa transformar una función que utiliza múltiples argumentos en una función que utiliza un único argumento. ● La función suma no currificada sería: (x,y) -> x + y ● La función suma currificada sería: x -> ( y -> x + y ) Lambda Expressions Java Evolution - Java 8 Es la principal novedad de Java 8...pero que es el cálculo lambda ?
  • 11. ● Elemento fundamental en lenguajes funcionales como Haskell y también presente en lenguajes basados en la JVM como Clojure y Scala. ● Ejemplo en Haskell: map :: (a -> b) -> [a] -> [b] map ((a,b) -> a + b) [(1,2),(2,3),(3,4)] → Resultado? ● Ejemplo en Clojure: map + [1 2 3] [2 3 4] → Resultado? Es la principal novedad de Java 8. Se incluye este elemento fundamental del paradigma funcional. Lambda Expressions Java Evolution - Java 8
  • 12. ● Ejemplo en Scala: val l = List(1,2,3,4,5) l.map( x => x*2 ) → Resultado? ● Ejemplo en C#: static void Main(string[] args) { del myDelegate = x => x * x; int j = myDelegate(5); //j = ? } ● Sintaxis Lambda en Java 8: ● (parameters) -> expression ● (parameters) -> statement ● (parameters) -> { statements } Lambda Expressions Java Evolution - Java 8 </> Source code: com/globallogic/training/j8/lambdas/*.java
  • 13. ● Alternativa a las clases abstractas (en algunos casos) ● No poseen estado y no pueden definir un constructor. ● El uso de un método default o implementar una clase abstracta dependerá del problema a resolver. ● Los métodos estáticos son similares a los métodos default, excepto que no podemos hacer override en las clases de implementación. Permiten incorporar comportamiento a una interface sin afectar a las clases que la implementan. Interfaces: Default and Static Methods Java Evolution - Java 8 </> Source code: com/globallogic/training/j8/defaults/interfaces/DefaultInterfaceDemo.java
  • 14. ● Sólo un método abstracto. ● Puede convertirse en una expresión lambda. ● Uno o más métodos “default”. ● Uno o más métodos estáticos. ● Predicate es un ejemplo de una Functional Interface incorporada en la JDK 1.8. En algún momento trabajamos con alguna interface de tipo SAM (Single Abstract Method) como Runnable Callable o ActionListener. @FunctionalInterface permite declarar interfaces de este tipo. Functional Interfaces Java Evolution - Java 8 </> Source code: com/globallogic/training/j8/functional/interfaces/PredicateDemo.java
  • 15. Hay cuatro tipos de métodos que pueden ser referenciados: ● Métodos estáticos (Class::staticMethodName) ● Constructores ● Métodos de instancia de una clase específica ● Métodos de instancia de un objeto específco Nos permite referenciar constructores y métodos sin ejecutarlos. Está fuertemente ligado con las lambda expressions. Method References Java Evolution - Java 8 </> Source code: com/globallogic/training/j8/method/references/MethodReferencesDemo.java
  • 16. ● Es un contenedor para evitar chequeos por nulls y fomentar la legibilidad del código ● Está basado en el Optional de Google Guava ● Usa generics para inferir el tipo ● Métodos màs comunes isPresent(), orElseGet() o map().orElse() Características: Optional Java Evolution - Java 8 </> Source code: com/globallogic/training/j8/optionals/OptionalDemo.java
  • 17. ● Simplifica el procesamiento de colecciones ● Complementa el soporte de Lambdas ● Permite paralelizar (en procesamiento), filtrar, mapear y convertir los elementos de la colección. ● No solo es útil para colecciones sino para el streaming de datos en archivos ● Define nuevos conceptos como ser: funciones de agregación y pipelines ● Métodos màs comunes son: mapTo*(), filter(), getAs*() Características: Stream API Java Evolution - Java 8 </> Source code: com/globallogic/training/j8/collections/streams/StreamBasicDemo.java
  • 18. Stream API: Reducción Java Evolution - Java 8 Características: </> Source code: com/globallogic/training/j8/collections/streams/StreamReduceDemo.java ● Las operaciones de reducción generalmente retornan un único valor (average, min, max, count) ● También existen aquellas que retornan colecciones (collect, reduce) ● La diferencia principal entre reduce() y collect() es que collect modifica o muta un valor existente, reduce en cambio crea una nuevo.
  • 19. New Date/Time API Java Evolution - Java 8 Características: ● Para obtener la fecha o la hora actual ahora podemos usar la clase Clock, a través de sus métodos instant() o millis() ● Nuevas clases solo para Date ó Time ó ambas (LocalDate, LocalTime o LocalDateTime) ● En el caso de requerir Time zone (ZonedDateTime) ● Posibilidad de “truncar” dates usando truncatedTo() y pasando como parametro la unidad ChronoUnit.* ● Diferencia entre dates en términos de duración a través de la clase Duration ● Los períodos representan una duración en tiempo. Por ejemplo: 3 meses, 2 días, 10 horas, 20 minutos y 10 seg. ● Nuevo modelo de Time zones cada una con set de reglas. Hay más facilidad para calcular diferencias horarias. </> Source code: com/globallogic/training/j8/datetime/DateTimeDurationDemo.java
  • 20. Nashorn: Javascript Engine Java Evolution - Java 8 Características: ● Nuevo engine de Javascript (en la JDK7 existe uno basado en Mozilla Rhino): Mejor performance y adaptación a ECMA JS ● Permite desarrollar aplicaciones de javascript usando como runtime la JVM ● También existe una tool (jjs) que permite ejecutar dichos scripts por consola </> Source code: com/globallogic/training/j8/jsengine/NashornDemo.java
  • 21. Parallel Arrays Java Evolution - Java 8 Características: ● Provee mejor performance en las operaciones gracias a la utilización de los cores. ● Metodos agregados: parallelSort(), parallelSetAll(), parallelPrefix() ● Nueva interfaz Spliterator para recorrer y particionar arrays. </> Source code: com/globallogic/training/j8/parallelArrays/ParallelSort.java
  • 22. Nuevas Herramientas Java Evolution - Java 8 Características: ● jdeps: analiza paquetes y dependencias a nivel de clase. jdeps -v ClassName.class Deps.class -> /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar Deps (Deps.class) -> java.io.PrintStream -> java.lang.Math -> java.lang.Object -> java.lang.String -> java.lang.System -> java.util.HashSet ● jjs: nashorn engine jjs greet.js
  • 23. 03 Promises for the JDK 9
  • 24. ● Modularización de la JDK. ● Facilita incorporar la JDK en dispositivos pequeños. ● Facilita y mejora la implementación de seguridad. ● Mejoras en la performance de las aplicaciones. ● Simplificación en el desarrollo de las aplicaciones. ● Al día de hoy se están incluyendo los siguientes enhancements en la JDK 9 ● JEP 201: Modular Source Code ● JEP 220: Modular Run-Time Images ● Se busca poder definir módulos como en el ejemplo. Objetivo: modularización y optimización de la plataforma Java. Incluye JEPs 200, 201, 220 y JSR 376. Proyecto Jigsaw Java Evolution - Java 9 module M @ 1.0 { requires A @ >= 2.0 ; // Version constraints requires service S1; provides MI @ 4.0; provides service MS with C; exports ME; permits MF; class MMain; view N { provides service NS with D; class NMain; } }
  • 25. ● Alternativa nativa y optimizada a librerias existentes como Jackson o Gson. ● JSON es el formato más utilizado para intercambiar información en la web. ● Se intenta proveer una API para las funcionalidades más comunes. ● Formará parte del package java.util ● Se dividirá en cuatro módulos: events, streams, trees y generators. Objetivo: Proveer una API simple para consumir y generar JSON y streams. Lightweight JSON API Java Evolution - Java 9
  • 26. ● Actualmente suele ser necesario utilizar código nativo para realizar ciertas operaciones. ● Obtener/asignar el nombre de un proceso. ● Obtener información de los procesos (similar al comando ps) ● Manejo de árboles de procesos y subprocesos. ● Obtener el PID de un proceso (sin manipular streams) Objetivo: Mejorar la API para controlar e interactuar con procesos del sistema operativo. Process API updates Java Evolution - Java 9 </> Source code: com/globallogic/training/j9/process/ProcessDemo.java
  • 27. ● La clase java.util.Currency sólo representa monedas (sin soporte para cálculos ni conversiones). ● Los montos de dinero se representan con BigDecimal o Double. ● Nuevas clases para representar valores de dinero y moneda. ● Nuevas clases y operaciones para cálculos, conversiones y formatos. ● Fuentes dispnibles en https://github. com/JavaMoney/jsr354-ri Objetivo: Proveer una API para representar y realizar operaciones vinculadas a manejo de dinero y moneda de una forma clara y simple. Money and Currency API Java Evolution - Java 9 Gradle: compile group: 'org.javamoney', name: 'moneta', version: '0.9' Maven: <dependency> <groupId>org.javamoney</groupId> <artifactId>moneta</artifactId> <version>0.9</version> </dependency> </> Source code: com/globallogic/training/j9/money/MoneyDemo.java
  • 28. ● HTTP 2 Client: Define a new HTTP client API that implements HTTP/2 and WebSocket. ● REPL in Java: Provide a console to evaluate declarations, statements, and expressions. ● Segmented Code Cache: Divide the code cache into distinct segments in order to improve performance. ● Unified JVM Logging: Introduce a common logging system for all components of the JVM. More expected features Java Evolution - Java 9+