Anúncio

Reflections

Arquiteto de Software na Naskar Tecnologia em naskar
28 de Dec de 2012
Anúncio

Mais conteúdo relacionado

Anúncio

Último(20)

Reflections

  1. Reflections Java e C# Abril 2012
  2. Agenda  Introdução  Metadata  Usando Java Annotations  Acessando C# Assemblies  Proxies  InvocationHandler  DynamicProxy
  3. 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)
  4. 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.
  5. 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)
  6. 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.
  7. Visualização de Metadata Java Packages
  8. 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
  9. 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); ... }
  10. Visualização de Metadata C# Namespaces
  11. 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
  12. 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(); ... }
  13. Invocação dinâmica Exemplos
  14. Invocação Dinâmica - Exemplo em Java  Usando as classes de metadata:
  15. Invocação Dinâmica - Exemplo em C#  Usando as classes de metadata:
  16. Exemplos Práticos Java Annotations
  17. Usando Java Annotations  Uma classe de teste:
  18. Usando Java Annotations  Mostrando os métodos de uma classe de teste:
  19. Usando Java Annotations  Uma classe de teste com rastreabilidade com os casos de uso:
  20. Usando Java Annotations  Obtendo informações da Annotation atlantico.Requisito:
  21. Exemplos Práticos C# Assemblies
  22. Acessando um Assembly C#  Criando uma carregador de plug-ins:
  23. Acessando um Assembly C#  Implementando a interface:
  24. Acessando um Assembly C#  Carregando o plug-in dentro do Assembly:
  25. Acessando um Assembly C#  Carregando o plug-in dentro do Assembly:
  26. Proxies
  27. Proxy Design Pattern  Proxy Diagram:
  28. InvocationHandler - Java  Modelo InvocationHandler:
  29. Exemplo usando Java
  30. Exemplo InvocationHandler  DocumentService:
  31. Exemplo InvocationHandler  Criando um Proxy:
  32. Exemplo InvocationHandler  Implementando a interface InvocationHandler:
  33. Exemplo usando C#
  34. C# Reflect Emit  C#: System.Reflect.Emit □ Biblioteca para criar tipos em runtime.
  35. Castle DynamicProxy  DynamicProxy: □ Biblioteca pra criar Proxies dinamicamente usando Reflection Emit.
  36. Exemplo DynamicProxy  DocumentService:
  37. Exemplo DynamicProxy  Criando um Proxy:
  38. Exemplo DynamicProxy  Implementando IInterceptor:
  39. 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)
  40. Obrigado Thanks Grazie Dank 감사 Gracias Rafael Uchôa
Anúncio