SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
JDK 8: Lambda, Jigsaw e novidades
                       Eder Magalhães
                         @edermag
                       www.yaw.com.br

                                        Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Agenda
        Plano B: a evolução do Java;
        As novidades do JDK 8;
        Projeto Lambda;
        Projeto Jigsaw;
        Type Annotations;
        Planejamento e datas;
        Links;




                                       Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Evolução do Java pós Oracle
        Passados 6 anos;
        Várias funcionalidades solicitadas;
        Qual planejamento para entrega?




                                              Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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;


                                                                Globalcode	
  –	
  Open4education
Saturday, July 7, 12
A escolha foi o Plano B!




                                 Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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;




                                               Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Projeto Lambda:
                      Java funcional




                                 Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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.




                                            Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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;




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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;




                                              Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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);
            }
          }
       );




                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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);
            }
          }
       );




                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Tarefa básica: ordernar array em Java


       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};


       Arrays.sort(nomes,
          (String s1, String s2) -> s1.compareToIgnoreCase(s2));




                        Lambda Expression



                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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



                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Ordenando strings com Lambda III


       String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};


       Arrays.sort(nomes, String::compareToIgnoreCase);




                         Method reference



                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Functional interfaces
            Interfaces com um método, utilizadas em
            callback;
            Conhecidas anteriormente como SAM Types.
            Exemplos:
               Comparator
               Runnable
               ActionListener
               FileFilter
               PathMatcher
               ...
                                           Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Detalhes sobre lambdas expressions
            Sintaxe também pode ser usada em return;
            Variáveis não precisam ser final;
            É possível utilizar target typing para definir
            atributos;




                                                  Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Method references
            Funcionam 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;



                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
As coleções com Lambda
            Definem uma forma mais inteligente para
            navegar sobre elementos;
            Modelo parecido com SQL!




                                              Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Navegação nos elementos

       List<Aluno> alunos = buildAlunos();

       //navegar em todos os alunos
       for (Aluno a: alunos) {
           System.out.println("t"+a);
       }




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Navegação nos elementos

       List<Aluno> alunos = buildAlunos();

       //navegar em todos os alunos
       for (Aluno a: alunos) {
           System.out.println("t"+a);
       }

       //navegar somente nos aprovados
       for (Aluno a: alunos) {
           if (a.getNota() > 5) {
               System.out.println("t"+a);
           }
       }




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Navegação nos elementos com Lambda

       List<Aluno> alunos = buildAlunos();

       //navegar em todos os alunos
       alunos.forEach(a -> { System.out.println("t" + a); });


       //navegar somente nos aprovados
       alunos.filter(a -> a.getNota() > 5)
           .forEach(a -> { System.out.println("t" + a); });




                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Interfaces: método com corpo!
            A partir de lambda será possível definir um
            comportamento default para métodos declarados
            em interfaces!




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Projeto Jigsaw:
                       Java modular




                                 Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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);




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Projeto Jigsaw
            Suporte a modularização da linguagem Java;
            Tornar o modelo de distribuição e execução do
            Java mais eficaz;




                                              Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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;



                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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
       }




                                                         Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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>




                                                Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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;




                                             Globalcode	
  –	
  Open4education
Saturday, July 7, 12
O que mais
          Os módulos são carregados estaticamente;
          Interoperabilidade com OSGI e Maven;
          Integração com os IDEs Java;




                                           Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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;




                                               Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Type Annotations Demo
       public 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!


                                                     Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Planejamento de entregas
          M1: abril de 2012;
          M2: junho de 2012;
          ...
          M6: janeiro de 2013;

           GA: setembro de 2013;




                                   Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Experimente:
              http://jdk8.java.net
              http://jdk8.java.net/lambda
              http://download.java.net/jigsaw/b38/




                                        Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Código disponível em:

    https://github.com/edermag/yaw-jdk8-lambda
    https://github.com/edermag/yaw-jdk8-jigsaw




                                    Globalcode	
  –	
  Open4education
Saturday, July 7, 12
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;




                                              Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Links
        http://openjdk.java.net/
        http://openjdk.java.net/projects/jdk8/
        http://openjdk.java.net/projects/jigsaw/doc/
        quickstart.html
        http://openjdk.java.net/projects/lambda/
        http://www.infoq.com/br/news/2012/04/jdk-8-
        milestone-release-dates
        http://openjdk.java.net/jeps/104
        http://slideshare.net/edermag




                                            Globalcode	
  –	
  Open4education
Saturday, July 7, 12
Obrigado !

                       eder@yaw.com.br
                          @edermag




                                         Globalcode	
  –	
  Open4education
Saturday, July 7, 12

Mais conteúdo relacionado

Mais procurados

POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
Ludimila Monjardim Casagrande
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
Anderson Ledo
 

Mais procurados (20)

Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
Java VS Kotlin
Java VS KotlinJava VS Kotlin
Java VS Kotlin
 
Java aula 04
Java aula 04Java aula 04
Java aula 04
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Java aula 03
Java aula 03Java aula 03
Java aula 03
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Java aula 06
Java aula 06Java aula 06
Java aula 06
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
 
Hibernate avançado-hql-criteria
Hibernate avançado-hql-criteriaHibernate avançado-hql-criteria
Hibernate avançado-hql-criteria
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
Implementando enterprise patterns com PHP
Implementando enterprise patterns com PHPImplementando enterprise patterns com PHP
Implementando enterprise patterns com PHP
 
Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)Livro - código limpo caps (3,4) (clean code)
Livro - código limpo caps (3,4) (clean code)
 
Intro à Graphql
Intro à GraphqlIntro à Graphql
Intro à Graphql
 
Linguagem Java
Linguagem JavaLinguagem Java
Linguagem Java
 

Semelhante a JDK8: Lambda, Jigsaw e novidades

Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012
Frederico Maia Arantes
 

Semelhante a JDK8: Lambda, Jigsaw e novidades (20)

As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EE
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring Roo
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka?
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
 
Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2Introdução ao desenvolvimento de apps para Android - Dia 1/2
Introdução ao desenvolvimento de apps para Android - Dia 1/2
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Compweek
CompweekCompweek
Compweek
 
Usando Java 8 no Android
Usando Java 8 no AndroidUsando Java 8 no Android
Usando Java 8 no Android
 
Rails API com GraphQL
Rails API com GraphQLRails API com GraphQL
Rails API com GraphQL
 
TDC2018SP | Trilha Ruby - Uma Aplicação Ruby On Rails Integrada com GraphQL, ...
TDC2018SP | Trilha Ruby - Uma Aplicação Ruby On Rails Integrada com GraphQL, ...TDC2018SP | Trilha Ruby - Uma Aplicação Ruby On Rails Integrada com GraphQL, ...
TDC2018SP | Trilha Ruby - Uma Aplicação Ruby On Rails Integrada com GraphQL, ...
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
 
Functional programming for Old Object Oriented Developers
Functional programming for Old Object Oriented Developers Functional programming for Old Object Oriented Developers
Functional programming for Old Object Oriented Developers
 
Google AppEngine and JEE
Google AppEngine and JEEGoogle AppEngine and JEE
Google AppEngine and JEE
 

Mais de Eder Magalhães

Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais rico
Eder Magalhães
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010
Eder Magalhães
 

Mais de Eder Magalhães (20)

Cvc programacao reativa
Cvc programacao reativaCvc programacao reativa
Cvc programacao reativa
 
Concorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeConcorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidade
 
Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8
 
Desenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeDesenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o Forge
 
MongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaMongoDB outras alternativas de persistência
MongoDB outras alternativas de persistência
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaS
 
Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
 
Java7 tdc2011
Java7 tdc2011Java7 tdc2011
Java7 tdc2011
 
Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais rico
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011
 
Introducao Spring ROO
Introducao Spring ROOIntroducao Spring ROO
Introducao Spring ROO
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem Prática
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
 
Profissao java gwt e javafx
Profissao java gwt e javafxProfissao java gwt e javafx
Profissao java gwt e javafx
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010
 
Android SestInfo 2010
Android SestInfo 2010Android SestInfo 2010
Android SestInfo 2010
 

Último

Último (8)

ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docxATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
 
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASCOI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
 
Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo Pagliusi
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
 
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docxATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
 

JDK8: Lambda, Jigsaw e novidades

  • 1. JDK 8: Lambda, Jigsaw e novidades Eder Magalhães @edermag www.yaw.com.br Globalcode  –  Open4education Saturday, July 7, 12
  • 2. Agenda Plano B: a evolução do Java; As novidades do JDK 8; Projeto Lambda; Projeto Jigsaw; Type Annotations; Planejamento e datas; Links; Globalcode  –  Open4education Saturday, July 7, 12
  • 3. Evolução do Java pós Oracle Passados 6 anos; Várias funcionalidades solicitadas; Qual planejamento para entrega? Globalcode  –  Open4education Saturday, July 7, 12
  • 4. 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; Globalcode  –  Open4education Saturday, July 7, 12
  • 5. A escolha foi o Plano B! Globalcode  –  Open4education Saturday, July 7, 12
  • 6. 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; Globalcode  –  Open4education Saturday, July 7, 12
  • 7. Projeto Lambda: Java funcional Globalcode  –  Open4education Saturday, July 7, 12
  • 8. 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. Globalcode  –  Open4education Saturday, July 7, 12
  • 9. 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; Globalcode  –  Open4education Saturday, July 7, 12
  • 10. 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; Globalcode  –  Open4education Saturday, July 7, 12
  • 11. 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); } } ); Globalcode  –  Open4education Saturday, July 7, 12
  • 12. 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); } } ); Globalcode  –  Open4education Saturday, July 7, 12
  • 13. Tarefa básica: ordernar array em Java String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2)); Lambda Expression Globalcode  –  Open4education Saturday, July 7, 12
  • 14. 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 Globalcode  –  Open4education Saturday, July 7, 12
  • 15. Ordenando strings com Lambda III String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; Arrays.sort(nomes, String::compareToIgnoreCase); Method reference Globalcode  –  Open4education Saturday, July 7, 12
  • 16. Functional interfaces Interfaces com um método, utilizadas em callback; Conhecidas anteriormente como SAM Types. Exemplos: Comparator Runnable ActionListener FileFilter PathMatcher ... Globalcode  –  Open4education Saturday, July 7, 12
  • 17. Detalhes sobre lambdas expressions Sintaxe também pode ser usada em return; Variáveis não precisam ser final; É possível utilizar target typing para definir atributos; Globalcode  –  Open4education Saturday, July 7, 12
  • 18. Method references Funcionam 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; Globalcode  –  Open4education Saturday, July 7, 12
  • 19. As coleções com Lambda Definem uma forma mais inteligente para navegar sobre elementos; Modelo parecido com SQL! Globalcode  –  Open4education Saturday, July 7, 12
  • 20. Navegação nos elementos List<Aluno> alunos = buildAlunos(); //navegar em todos os alunos for (Aluno a: alunos) { System.out.println("t"+a); } Globalcode  –  Open4education Saturday, July 7, 12
  • 21. Navegação nos elementos List<Aluno> alunos = buildAlunos(); //navegar em todos os alunos for (Aluno a: alunos) { System.out.println("t"+a); } //navegar somente nos aprovados for (Aluno a: alunos) { if (a.getNota() > 5) { System.out.println("t"+a); } } Globalcode  –  Open4education Saturday, July 7, 12
  • 22. Navegação nos elementos com Lambda List<Aluno> alunos = buildAlunos(); //navegar em todos os alunos alunos.forEach(a -> { System.out.println("t" + a); }); //navegar somente nos aprovados alunos.filter(a -> a.getNota() > 5) .forEach(a -> { System.out.println("t" + a); }); Globalcode  –  Open4education Saturday, July 7, 12
  • 23. Interfaces: método com corpo! A partir de lambda será possível definir um comportamento default para métodos declarados em interfaces! Globalcode  –  Open4education Saturday, July 7, 12
  • 24. Projeto Jigsaw: Java modular Globalcode  –  Open4education Saturday, July 7, 12
  • 25. 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); Globalcode  –  Open4education Saturday, July 7, 12
  • 26. Projeto Jigsaw Suporte a modularização da linguagem Java; Tornar o modelo de distribuição e execução do Java mais eficaz; Globalcode  –  Open4education Saturday, July 7, 12
  • 27. 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; Globalcode  –  Open4education Saturday, July 7, 12
  • 28. 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 } Globalcode  –  Open4education Saturday, July 7, 12
  • 29. 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> Globalcode  –  Open4education Saturday, July 7, 12
  • 30. 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; Globalcode  –  Open4education Saturday, July 7, 12
  • 31. O que mais Os módulos são carregados estaticamente; Interoperabilidade com OSGI e Maven; Integração com os IDEs Java; Globalcode  –  Open4education Saturday, July 7, 12
  • 32. 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; Globalcode  –  Open4education Saturday, July 7, 12
  • 33. Type Annotations Demo public 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! Globalcode  –  Open4education Saturday, July 7, 12
  • 34. Planejamento de entregas M1: abril de 2012; M2: junho de 2012; ... M6: janeiro de 2013; GA: setembro de 2013; Globalcode  –  Open4education Saturday, July 7, 12
  • 35. Experimente: http://jdk8.java.net http://jdk8.java.net/lambda http://download.java.net/jigsaw/b38/ Globalcode  –  Open4education Saturday, July 7, 12
  • 36. Código disponível em: https://github.com/edermag/yaw-jdk8-lambda https://github.com/edermag/yaw-jdk8-jigsaw Globalcode  –  Open4education Saturday, July 7, 12
  • 37. 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; Globalcode  –  Open4education Saturday, July 7, 12
  • 38. Links http://openjdk.java.net/ http://openjdk.java.net/projects/jdk8/ http://openjdk.java.net/projects/jigsaw/doc/ quickstart.html http://openjdk.java.net/projects/lambda/ http://www.infoq.com/br/news/2012/04/jdk-8- milestone-release-dates http://openjdk.java.net/jeps/104 http://slideshare.net/edermag Globalcode  –  Open4education Saturday, July 7, 12
  • 39. Obrigado ! eder@yaw.com.br @edermag Globalcode  –  Open4education Saturday, July 7, 12