SlideShare uma empresa Scribd logo
1 de 40
Reflections
  Java e C#
  Abril 2012
Agenda


 Introdução
 Metadata
 Usando Java Annotations
 Acessando C# Assemblies
 Proxies
 InvocationHandler
 DynamicProxy
Reflections

   O que é Reflection ?

               É o processo na qual um programa de computador pode observar e modificar sua própria
                estrutura e comportamento em tempo de execução. [1]



   Principais usos:

               Introspecção de tipo;



               Visualização de metadata;



               Invocação dinâmica;



1- http://en.wikipedia.org/wiki/Reflection_(computer_programming)
Reflections


 É usado em:


   □   Gerenciadores de plug-ins;

   □   Geração de arquivos: TXT, XML, SQL;

   □   Validação de atributos;

   □   Frameworks de Injeção de Dependências;

   □   Bibliotecas de aspectos;

   □   Ferramentas de teste.
Reflections

 Introspecção de tipo:


            Capacidade de determinar o tipo de objeto em tempo de execução:




       Java:                                                        C#:




1- http://en.wikipedia.org/wiki/Reflection_(computer_programming)
Metadata


 Metadata
   □   Meta é uma abstração de um outro conceito.

   □   Metadata são informações de informações, ou seja, em Reflection,
       dados sobre tipos:

         Classes;

         Tipos parametrizados de classes;

         Atributos;

         Métodos e seus parâmetros.
Visualização de Metadata

    Java Packages
Visualização de Metadata - Java Packages


 package java.lang.reflect:
   □   Metadatas:

         para uma classe: java.lang.Class

         para um método: java.lang.reflect.Method

         para um construtor: java.lang.reflect.Constructor

         para um atributo: java.lang.reflect.Field
Visualização de Metadata - Java Packages


 package java.lang.reflect:
      class Class {
               Constructor[] getConstructors();
               Field getDeclaredField(String name);
               Field[] getDeclaredFields();
               Method[] getDeclaredMethods();
               ...
      }

      class Field {
               Class getType();
               ...
      }

      class Method {
               Class[] getParameterTypes();
               Class getReturnType();
               Object invoke(Object obj, Object... args);
               ...
      }
Visualização de Metadata

    C# Namespaces
Visualização de Metadata - C# Namespaces


 namespace System.Reflection:
   □   Metadatas:

         para uma classe: System.Type

         para uma propriedade: System.Reflection.PropertyInfo

         para um método: System.Reflection.MethodInfo

         para um construtor: System.Reflection.ConstructorInfo

         para um atributo: System.Reflection.FieldInfo
Visualização de Metadata - C# Namespaces

 namespace System.Reflection:

class Type {
         ConstructorInfo[] GetConstructors();
         PropertyInfo GetProperty(name);
         FieldInfo[] GetFields(name);
         MethodInfo GetMethod(name);
         MemberInfo[] GetMember(name);
         MemberInfo[] GetMember(name, MemberTypes, BindingFlags);
         ...
}

class MemberInfo {                              MemberTypes.Constructor
         MemberType MemberType;                 MemberTypes.Field
         ...                                    MemberTypes.Method
}
                                                BindingFlags.Public
class MethodInfo {                              BindingFlags.NonPublic
         Class[] getParameterTypes();           BindingFlags.Static
         Class getReturnType();
         ...
}
Invocação dinâmica

    Exemplos
Invocação Dinâmica - Exemplo em Java
 Usando as classes de metadata:
Invocação Dinâmica - Exemplo em C#
 Usando as classes de metadata:
Exemplos Práticos

Java Annotations
Usando Java Annotations
 Uma classe de teste:
Usando Java Annotations

 Mostrando os métodos de uma classe de teste:
Usando Java Annotations
 Uma classe de teste com rastreabilidade com os casos de uso:
Usando Java Annotations
 Obtendo informações da Annotation atlantico.Requisito:
Exemplos Práticos

 C# Assemblies
Acessando um Assembly C#
 Criando uma carregador de plug-ins:
Acessando um Assembly C#
 Implementando a interface:
Acessando um Assembly C#
 Carregando o plug-in dentro do Assembly:
Acessando um Assembly C#
 Carregando o plug-in dentro do Assembly:
Proxies
Proxy Design Pattern
 Proxy Diagram:
InvocationHandler - Java
 Modelo InvocationHandler:
Exemplo usando Java
Exemplo InvocationHandler
 DocumentService:
Exemplo InvocationHandler
 Criando um Proxy:
Exemplo InvocationHandler
 Implementando a interface InvocationHandler:
Exemplo usando C#
C# Reflect Emit
 C#: System.Reflect.Emit
   □   Biblioteca para criar tipos em runtime.
Castle DynamicProxy

 DynamicProxy:
   □   Biblioteca pra criar Proxies dinamicamente usando Reflection Emit.
Exemplo DynamicProxy
 DocumentService:
Exemplo DynamicProxy
 Criando um Proxy:
Exemplo DynamicProxy
 Implementando IInterceptor:
Libraries

 Bibliotecas que auxiliam o uso de reflection:
 □   Java

       CGLIB (http://cglib.sourceforge.net/)

       Javassist (http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/)

       ASM (http://asm.ow2.org/)



 □   C#

       Castle DynamicProxy
        (http://www.castleproject.org/dynamicproxy/index.html)

       PostSharp (http://www.sharpcrafters.com/postsharp/documentation)

       C# Emit (http://msdn.microsoft.com/en-us/library/exczf7b9.aspx)
Obrigado
        Thanks
                 Grazie
                          Dank

                                  감사

                                    Gracias


                                 Rafael Uchôa

Mais conteúdo relacionado

Mais procurados

Poo slides01
Poo slides01Poo slides01
Poo slides01jmtofoli
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaRegis Magalhães
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1Filipo Mór
 
Curso de Java (Parte 1)
Curso de Java (Parte 1)Curso de Java (Parte 1)
Curso de Java (Parte 1)Mario Sergio
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Natanael Fonseca
 
Aula 02 implementação objeto
Aula 02   implementação objetoAula 02   implementação objeto
Aula 02 implementação objetoDanilo Alves
 
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)George Mendonça
 
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
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – IIGabriel Faustino
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 

Mais procurados (20)

Poo slides01
Poo slides01Poo slides01
Poo slides01
 
03 fundamentos java
03 fundamentos java03 fundamentos java
03 fundamentos java
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Java: Introduction
Java: IntroductionJava: Introduction
Java: Introduction
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso Java
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Curso de Java (Parte 1)
Curso de Java (Parte 1)Curso de Java (Parte 1)
Curso de Java (Parte 1)
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
Aula 02 implementação objeto
Aula 02   implementação objetoAula 02   implementação objeto
Aula 02 implementação objeto
 
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – II
 
Java: Introdução
Java: IntroduçãoJava: Introdução
Java: Introdução
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
04 api javadoc
04   api javadoc04   api javadoc
04 api javadoc
 
Java 01
Java 01Java 01
Java 01
 
Objective-C
Objective-CObjective-C
Objective-C
 
Aula05
Aula05Aula05
Aula05
 

Semelhante a Reflections

Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
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) v1Marcelo Zeferino
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015Renato Groff
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetosxbacon
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015Renato Groff
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01John Godoi
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novoGiovanni Bassi
 
Linguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY NetworksLinguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY Networks3Way Networks
 
001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma javaJunior Souza
 

Semelhante a Reflections (20)

Mini aula-java
Mini aula-javaMini aula-java
Mini aula-java
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
JADE+JENA
JADE+JENAJADE+JENA
JADE+JENA
 
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
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetos
 
C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015C# 6.0 - DotNetBaixada - Novembro/2015
C# 6.0 - DotNetBaixada - Novembro/2015
 
Introdução ao java
Introdução ao javaIntrodução ao java
Introdução ao java
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novo
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01
 
Linguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY NetworksLinguagem Java OO | Curso 3WAY Networks
Linguagem Java OO | Curso 3WAY Networks
 
001 cesep - turma java
001   cesep - turma java001   cesep - turma java
001 cesep - turma java
 

Reflections