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