Upload
eder-magalhaes
View
1.670
Download
2
Tags:
Embed Size (px)
DESCRIPTION
Slides utilizados na apresentação da palestra: JDK 8: Lambda, Jigsaw e novidades
Citation preview
Globalcode – Open4education
JDK 8: Lambda, Jigsaw e novidades
Eder Magalhães@edermag
www.yaw.com.br
Saturday, July 7, 12
Globalcode – Open4education
Agenda
Plano B: a evolução do Java;As novidades do JDK 8;Projeto Lambda;Projeto Jigsaw;Type Annotations;Planejamento e datas;Links;
Saturday, July 7, 12
Globalcode – Open4education
Evolução do Java pós Oracle
Passados 6 anos;Várias funcionalidades solicitadas;Qual planejamento para entrega?
Saturday, July 7, 12
Globalcode – Open4education
Evolução do Java pós Oracle
Passados 6 anos;Várias funcionalidades solicitadas;Qual planejamento para entrega?
A decisão foi compartilhada com a comunidade:Plano A:
JDK 7 completo com previsão para 2012;Plano B:
JDK 7 com algumas features com previsão para 2011;JDK 8 com funcionalidades complementares com previsão para o final de 2012;
Saturday, July 7, 12
Globalcode – Open4education
A escolha foi o Plano B!
Saturday, July 7, 12
Globalcode – Open4education
As novidades do JDK 8 (JSR 338)
Projeto Lambda: uma linguagem mais eficiente; Projeto Jigsaw: suporte a definição de módulos;Type Annotations;
Conclusão do Projeto Coin;Nova API para datas no Java;
Saturday, July 7, 12
Globalcode – Open4education
Projeto Lambda:Java funcional
Saturday, July 7, 12
Globalcode – Open4education
Mas afinal...
O que é um Lambda Expression (closure)?
Lambda expression é um bloco de código (função) anônimo, com declarações e expressões, que pode ser assinalada a uma variável.
Saturday, July 7, 12
Globalcode – Open4education
Motivação
Tornar o Java mais eficiente em ambientes multicore;Emprega ao Java um modelo de programação funcional;Sintaxe mais simples e clara se comparada a classes anônimas;
Saturday, July 7, 12
Globalcode – Open4education
Projeto Lambda (JSR 335)Definição de funções anônimas;Permite criar referência a métodos;Interfaces com default methods;Estipula interfaces funcionais (SAMs);Mudanças nas bibliotecas do Java (Collection) para se adequar ao Lambda;Torna o código mais expressivo;
Saturday, July 7, 12
Globalcode – Open4education
Tarefa básica: ordernar array em Java
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
Arrays.sort(nomes, new Comparator<String>() { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } });
Saturday, July 7, 12
Globalcode – Open4education
Tarefa básica: ordernar array em Java
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
Arrays.sort(nomes, new Comparator<String>() { public int compare(String s1, String s2) { return s1.compareToIgnoreCase(s2); } });
Saturday, July 7, 12
Globalcode – Open4education
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2));
Lambda Expression
Tarefa básica: ordernar array em Java
Saturday, July 7, 12
Globalcode – Open4education
Ordenando strings com Lambda II
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);
Arrays.sort(nomes, c);
Target typing
Saturday, July 7, 12
Globalcode – Open4education
Ordenando strings com Lambda III
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
Arrays.sort(nomes, String::compareToIgnoreCase);
Method reference
Saturday, July 7, 12
Globalcode – Open4education
Functional interfacesInterfaces com um método, utilizadas em callback;Conhecidas anteriormente como SAM Types.Exemplos:
ComparatorRunnableActionListenerFileFilterPathMatcher...
Saturday, July 7, 12
Globalcode – Open4education
Detalhes sobre lambdas expressionsSintaxe também pode ser usada em return; Variáveis não precisam ser final;É possível utilizar target typing para definir atributos;
Saturday, July 7, 12
Globalcode – Open4education
Method referencesFuncionam como expressions, a diferença é que não definem o corpo e sim a chamada a um método qualquer;
Tipos de métodos:Métodos static;Um método específico de um determinado objeto;
Saturday, July 7, 12
Globalcode – Open4education
As coleções com LambdaDefinem uma forma mais inteligente para navegar sobre elementos;Modelo parecido com SQL!
Saturday, July 7, 12
Globalcode – Open4education
Navegação nos elementos
List<Aluno> alunos = buildAlunos();
//navegar em todos os alunosfor (Aluno a: alunos) { System.out.println("\t"+a);}
Saturday, July 7, 12
Globalcode – Open4education
Navegação nos elementos
List<Aluno> alunos = buildAlunos();
//navegar em todos os alunosfor (Aluno a: alunos) { System.out.println("\t"+a);}
//navegar somente nos aprovadosfor (Aluno a: alunos) { if (a.getNota() > 5) { System.out.println("\t"+a); }}
Saturday, July 7, 12
Globalcode – Open4education
Navegação nos elementos com Lambda
List<Aluno> alunos = buildAlunos();
//navegar em todos os alunosalunos.forEach(a -> { System.out.println("\t" + a); });
//navegar somente nos aprovadosalunos.filter(a -> a.getNota() > 5) .forEach(a -> { System.out.println("\t" + a); });
Saturday, July 7, 12
Globalcode – Open4education
Interfaces: método com corpo!
A partir de lambda será possível definir um comportamento default para métodos declarados em interfaces!
Saturday, July 7, 12
Globalcode – Open4education
Projeto Jigsaw: Java modular
Saturday, July 7, 12
Globalcode – Open4education
Motivação
Java é distribuído monoliticamente;O rt.jar é grande!Com Java 7, são quase 20k classes;Complexidade em lidar com legado (16 anos);
Saturday, July 7, 12
Globalcode – Open4education
Projeto Jigsaw
Suporte a modularização da linguagem Java;Tornar o modelo de distribuição e execução do Java mais eficaz;
Saturday, July 7, 12
Globalcode – Open4education
Módulo
É formado por um conjunto de classes e interfaces;Pode determinar uma versão;Pode definir um entry-point;Indica a dependência a outros módulos, se necessário;Restringe o acesso;O módulo é definido em modules-info.java;
Saturday, July 7, 12
Globalcode – Open4education
Exemplo de módulo
//Arquivo modules-info.java
module yaw.projetos @ 1.0 { class yaw.projetos.Main; //entry-point
requires yaw.core @ 0.5; //dependência
exports yaw.projetos; //expõe o pacote}
Saturday, July 7, 12
Globalcode – Open4education
O build
Compilação: javac -modulepath ...Novos programas:
jmod > definir biblioteca e realizar instalação do módulo;jpkg > distribuição do módulo;
Executar: java -m <modulo>
Saturday, July 7, 12
Globalcode – Open4education
Vamos experimentar
Demo I:compilar e executar um módulo simples;
Demo II:definir relacionamento entre dois módulos;
Demo III:exemplo de módulo que expõe um service;
Saturday, July 7, 12
Globalcode – Open4education
O que maisOs módulos são carregados estaticamente;Interoperabilidade com OSGI e Maven;Integração com os IDEs Java;
Saturday, July 7, 12
Globalcode – Open4education
Type Annotations (JSR 308)
Utilizar anotações em outros trechos do código;
Criar um mecanismo eficiente com regras e validação de tipos do Java baseado em anotações. A evolução da idéia implementada com @Override;
Saturday, July 7, 12
Globalcode – Open4education
Type Annotations Demopublic void execute(@NonNull Object ref) { //algum processamento}
...
execute(new Object()); //ok!execute(null); //ñ compila!
@NonNull Object ref = getObject();
List<@NonNull String> nomes = ...nomes.add(null); //ñ compila!
class ValorNumerico<T extends @Nullable Number> { ...}
ValorNumerico<@Nullable Integer> v1; //ok!ValorNumerico<@NonNull Integer> v2; //ñ compila!
Saturday, July 7, 12
Globalcode – Open4education
Planejamento de entregasM1: abril de 2012;M2: junho de 2012;...M6: janeiro de 2013;
GA: setembro de 2013;
Saturday, July 7, 12
Globalcode – Open4education
Experimente:http://jdk8.java.nethttp://jdk8.java.net/lambdahttp://download.java.net/jigsaw/b38/
Saturday, July 7, 12
Globalcode – Open4education
Código disponível em:
https://github.com/edermag/yaw-jdk8-lambdahttps://github.com/edermag/yaw-jdk8-jigsaw
Saturday, July 7, 12
Globalcode – Open4education
Rumores sobre o Java 9
VM auto ajustável (self tuning);Suporte a Big Data;Reificação dos tipos genéricos;Criar um protocolo de meta-objetos para comunicação com outras linguagens;Suporte a continuations;
Saturday, July 7, 12
Globalcode – Open4education
Linkshttp://openjdk.java.net/http://openjdk.java.net/projects/jdk8/
http://openjdk.java.net/projects/jigsaw/doc/quickstart.htmlhttp://openjdk.java.net/projects/lambda/
http://www.infoq.com/br/news/2012/04/jdk-8-milestone-release-dateshttp://openjdk.java.net/jeps/104http://slideshare.net/edermag
Saturday, July 7, 12