Uma Breve Introdução a Reflexão Computacional em Java (a.k.a

Propaganda
Uma Breve Introdução a
Reflexão Computacional em Java
(a.k.a Computational Reflection)
Prof. Rossano Pablo Pinto
março/2013 - v0.2
(Em construção)
Prof. Rossano Pablo Pinto - Reflexão computacional
Agenda
Prof. Rossano Pablo Pinto - Reflexão computacional
Definições
●
Reflexão computacional
●
●
Habilidade de um pedaço de software (geralmente
um objeto) de inspecionar suas estruturas internas,
eventualmente modificar-se e efetuar qualquer
chamada de suas próprios operações (métodos).
É realizado por meio de suporte necessário a
metadados e operações para manipular um objeto.
Prof. Rossano Pablo Pinto - Reflexão computacional
Definições
●
Reflexão computacional
●
●
Habilidade de um pedaço de software (geralmente
um objeto) de inspecionar suas estruturas
internas, eventualmente modificar-se e efetuar
qualquer chamada de suas próprios operações
(métodos).
É realizado por meio de suporte necessário a
metadados e operações para manipular um
objeto.
Prof. Rossano Pablo Pinto - Reflexão computacional
Definições
●
Metadados (no contexto de reflexão
computacional em Java)
●
Informação à respeito de um objeto
–
–
–
–
Classes
Atributos
Construtores
Métodos
Prof. Rossano Pablo Pinto - Reflexão computacional
Exemplos de uso
●
Geradores de código (runtime...)
●
Arquiteturas de plugin
●
Proxy
●
Auto completion em IDEs (Eclipse e NetBeans)
●
Shell interativo (lembram do shell do JESS?) p/
instanciar classes individuais.
●
Integração com linguagens de script
●
...
Prof. Rossano Pablo Pinto - Reflexão computacional
Reflexão computacional em Java
●
Os metadados de um objeto Java são
armazenados em
●
●
●
●
java.lang.Class - informações da classe
java.lang.reflect.Field - informações dos
atributos
java.lang.reflect.Constructor - informação dos
construtores
java.lang.reflect.Method - informações dos
métodos
Prof. Rossano Pablo Pinto - Reflexão computacional
Reflexão computacional em Java
●
Uma instância de java.lang.Class pode ser
obtida de duas maneiras:
●
Exemplo com java.lang.String
Class<?> teste1 = Class.forName(“ java.lang.String” );
OU
Object obj = new String();
Class teste2 = obj.getClass();
Prof. Rossano Pablo Pinto - Reflexão computacional
Hands-on
●
aula-instrospeccao.odt
●
Test.java - interface
–
●
ProbeClass.java - class
–
●
Interface de testes
Inspeciona classe
Invoca.java - class
–
Invoca método de qualquer classe
Prof. Rossano Pablo Pinto - Reflexão computacional
Download