SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
– Open4education
Trilha – JAVA
Tirando o máximo da Metaprogramação com a API Reflection
Cristiano Agosti
Java Developer
– Open4education
Apresentação
• Mestre em Ciência da Computação
• Sócio proprietário da Camtwo Sistemas
(camtwo.com.br)
• Professor na Universidade do Oeste de Santa
Catarina - Unoesc (unoesc.edu.br)
• A mais de 10 anos trabalhando
com Java e web
– Open4education
Agenda
• Metaprogramação
• Reflexão, Vantagens e Desvantagens
• API Reflection
• Exemplos
• Conclusões
– Open4education
Metaprogramação
• Consiste na criação de programação com a
capacidade de manipular a estrutura ou dados de
outros programas ou a sim mesmo
– Open4education
Algumas Perguntas
• Como invocar um método apenas usando seu
nome em uma String?
• Como faço para listar os atributos de uma Classe
dinamicamente?
• Como saber via programação quais são os
Construtores e Métodos da classe?
– Open4education
Reflexão
– Open4education
Vantagens
• Descoberta de informações de uma classe em
tempo de execução
• Facilidade na manutenção
• Minimização de Erros
• Ganho de Produtividade
• Padronização
• Extensibilidade
– Open4education
Desvantagens
• Redução de desempenho se requerido com frequência
• Problemas por restrição de segurança caso executado em
um ambiente com regras específicas
• Exposição de estrutura interna dos objetos
– Open4education
Quando Usar
• DSL (Linguagem de Domínio Específico)
• Compilador
• Descobrir detalhes de classes
– Open4education
– Open4education
Ponto de Partida
Class<T>
• java.lang.Class<T>
• Classes definem o comportamento de objetos
• Metaclasse definem o comportamento de classes
– Open4education
Classe Pessoa
– Open4education
Referência da Class
• Pela Classe
– Class<?> c1 = Pessoa.classe;
• Pelo Nome da Classe
– Class<?> c2 = Class.forName(“br.tdc.Pessoa”);
• Pela Instância
– Pessoa p = new Pessoa();
– Class c3 = p.getClass();
– Open4education
O que é metadata
• são dados sobre outros dados
• Um item de um metadado pode dizer do que se
trata aquele dado
• Facilitam o entendimento dos relacionamentos e a
utilidade das informações dos dados
http://pt.wikipedia.org/wiki/Metadados
– Open4education
Principais Métodos
– Open4education
Principais Métodos
– Open4education
Metadata para primitivos
– Open4education
Metadata para Arrays
– Open4education
Metadata para Arrays
B para byte
C para char
D para double
F para float
I para int
J para long
Lpacote+classe para classe[]
S para short
Z para boolean
[ para a dimensão do array
– Open4education
Constructor
Classe responsável por recuperar as informações
dos Construtores da Classe
– Open4education
Constructor
– Open4education
Fields
• Representa os atributos de classe
• Através dessa classe podemos obter as
informações que queremos sobre os atributos
– Open4education
Fields
– Open4education
Exemplo para Fields
– Open4education
Method
Classe responsável pela recuperação de dados
sobre métodos de uma classe
– Open4education
Invocação (invoke)
• Forma dinâmica de chamar métodos
• Método da Classe Method
Object invoke(Object obj, Object... args)
– Open4education
invoke()
• Métodos da Classe Pessoa
– Open4education
invoke()
• Métodos da Classe String
– Open4education
Anotações
• A interface AnnotatedElement oferece
funcionalidades para obtermos informações de
anotações existentes em classes
• Devem ser herança de ActiveObject como Field e
Method
– Open4education
Anotações
• Devem ser herança de ActiveObject como Field e
Method
• Exemplo: criar uma anotação para Validar um
atributo(field) obrigatório
– Open4education
Mãos a Obra
– Open4education
Roteiro de Exemplos
• Pessoa
• Listar Construtores (construtor)
• Criar instancia a partir do construtor vazio
• Criar instancia a partir do construtor de atributos
• Listar Atributos (fields)
• Listar Métodos (method)
• Invocar método mensagem
• Anotações (atributo obrigatório)
• Validar instancia com atributo preenchido
• Validar instancia com atributo nulo
– Open4education
Exemplo Constructor
– Open4education
Exemplo Fields
– Open4education
Exemplo Method
– Open4education
Exemplo Anotações
– Open4education
Exemplo Anotações
– Open4education
Exemplo Anotações
– Open4education
Lombok
– Open4education
Proxy
• Criar implementação de Interfaces em tempo de
execução
• Forma de interceptar métodos de interfaces
– Open4education
Proxy
– Open4education
Proxy
– Open4education
Proxy
– Open4education
Conclusões
Descoberta de informações sobre classes
Usar com cautela
Extensibilidade
Usado por muitos frameworks
Intuitivo
– Open4education
Perguntas
– Open4education
Referências
http://wwwusers.di.uniroma1.it/~parisi/Risorse/java-
reflection-explained-simply-manual-8up.pdf
http://tutorials.jenkov.com/java-reflection/dynamic-
proxies.html
http://rodrigosasaki.com/
https://projectlombok.org
– Open4education
Contato
• skype: cristiano.agosti
• twitter: @agosti
• cristiano.agosti@camtwo.com.br
• facebook.com/cristiano.agosti
• agosti.blog.br

Mais conteúdo relacionado

Semelhante a Apresentação Tdc2015 - Trilha Java

Learning Analytics: utilizando Data Science para melhorar a educação
Learning Analytics: utilizando Data Science para melhorar a educaçãoLearning Analytics: utilizando Data Science para melhorar a educação
Learning Analytics: utilizando Data Science para melhorar a educaçãoMatheus Braun Magrin
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem IIIJuliano Weber
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Thyago Maia
 
Java Básico :: Orientação a objetos
Java Básico :: Orientação a objetosJava Básico :: Orientação a objetos
Java Básico :: Orientação a objetosWesley R. Bezerra
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – IIGabriel Faustino
 
Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Web com PHP - Aula 1Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Web com PHP - Aula 1Thyago Maia
 
Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Thyago Maia
 
POO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdfPOO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdfJadna Almeida
 
Tdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdfTdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdfMinistry of Data
 
Google AppEngine and JEE
Google AppEngine and JEEGoogle AppEngine and JEE
Google AppEngine and JEERafael Nunes
 
TDC2016SP - Dicas para as provas de certificação Java Programmer
TDC2016SP - Dicas para as provas de certificação Java ProgrammerTDC2016SP - Dicas para as provas de certificação Java Programmer
TDC2016SP - Dicas para as provas de certificação Java Programmertdc-globalcode
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosGeorge Mendonça
 
TDC2013 - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
TDC2013  - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...TDC2013  - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
TDC2013 - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...José Correia
 
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014 Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014 Marcos Vinicius Fidelis
 
RECOMENDAÇÃO DE DOCUMENTOS PARA OS USUÁRIOS DO AVA MOODLE A PARTIR DAS HASHTA...
RECOMENDAÇÃO DE DOCUMENTOS PARA OS USUÁRIOS DO AVA MOODLE A PARTIR DAS HASHTA...RECOMENDAÇÃO DE DOCUMENTOS PARA OS USUÁRIOS DO AVA MOODLE A PARTIR DAS HASHTA...
RECOMENDAÇÃO DE DOCUMENTOS PARA OS USUÁRIOS DO AVA MOODLE A PARTIR DAS HASHTA...Adelton Ribeiro
 

Semelhante a Apresentação Tdc2015 - Trilha Java (20)

Learning Analytics: utilizando Data Science para melhorar a educação
Learning Analytics: utilizando Data Science para melhorar a educaçãoLearning Analytics: utilizando Data Science para melhorar a educação
Learning Analytics: utilizando Data Science para melhorar a educação
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3
 
Java Básico :: Orientação a objetos
Java Básico :: Orientação a objetosJava Básico :: Orientação a objetos
Java Básico :: Orientação a objetos
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – II
 
Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Web com PHP - Aula 1Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Web com PHP - Aula 1
 
Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1
 
POO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdfPOO2 - Orientacao a Objetos (1).pdf
POO2 - Orientacao a Objetos (1).pdf
 
Esquemas de metadados utilizados por repositórios digitais científicos latino...
Esquemas de metadados utilizados por repositórios digitais científicos latino...Esquemas de metadados utilizados por repositórios digitais científicos latino...
Esquemas de metadados utilizados por repositórios digitais científicos latino...
 
Tdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdfTdc2015 bigdata-mpias-final-pdf
Tdc2015 bigdata-mpias-final-pdf
 
Google AppEngine and JEE
Google AppEngine and JEEGoogle AppEngine and JEE
Google AppEngine and JEE
 
TDC2016SP - Dicas para as provas de certificação Java Programmer
TDC2016SP - Dicas para as provas de certificação Java ProgrammerTDC2016SP - Dicas para as provas de certificação Java Programmer
TDC2016SP - Dicas para as provas de certificação Java Programmer
 
03 fundamentos java
03 fundamentos java03 fundamentos java
03 fundamentos java
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 
TDC2013 - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
TDC2013  - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...TDC2013  - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
TDC2013 - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014 Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014
 
Code Smells
Code SmellsCode Smells
Code Smells
 
RECOMENDAÇÃO DE DOCUMENTOS PARA OS USUÁRIOS DO AVA MOODLE A PARTIR DAS HASHTA...
RECOMENDAÇÃO DE DOCUMENTOS PARA OS USUÁRIOS DO AVA MOODLE A PARTIR DAS HASHTA...RECOMENDAÇÃO DE DOCUMENTOS PARA OS USUÁRIOS DO AVA MOODLE A PARTIR DAS HASHTA...
RECOMENDAÇÃO DE DOCUMENTOS PARA OS USUÁRIOS DO AVA MOODLE A PARTIR DAS HASHTA...
 

Apresentação Tdc2015 - Trilha Java