DEV Community

Ortiz de Arcanjo António David
Ortiz de Arcanjo António David

Posted on

Reflection (Programação Reflexiva)

Definições

Reflection é a habilidade de um programa reconhecer a sua estrutura através dos tipos de dados.

Reflection permite que um objecto obtenha informações sobre sua estrutura e sobre os motivos de sua computação.

Usando reflection, os dados sobre a estrutura do programa são inseridos e produzidos automaticamente pelo compilador na forma de meta-dados.

O paradigma de programação por trás dessa capacidade é chamado programação reflexiva.

Usos da Reflection

  • Informações de um objecto;
  • Criação e modificação de classes, métodos e atributos dinamicamente (em tempo de execução);
  • Adaptação do sistema dinamicamente às diferentes situações: carregar novas classes em tempo de execução.
  • Auto-otimização ou auto-modificação de um programa: pode ser feito modificando a própria área de memória do programa;
  • Criação de ORMs poderosos, combinando com as anotations (anotações)
  • Criação frameworks que baseados em injecção de Dependência (Ex: ASP NET Core, Spring e Quarkus);
  • Programação genética;

Vantagens

  • Ganho de produtividade;
  • Extensibilidade da linguagem;
  • Substituição um trabalho repetitivo por automação;

Desvantagens

  • Complexidade do código;
  • Facilidade na introdução de erros e falhas de segurança na aplicação
  • Quando usada por excesso, pode reduzir o desempenho da aplicação;
  • Sobrecarga da aplicação em tempo de execução.

Observação
As linguagens interpretadas são mais adptadas a trabalhar com reflections. Ex: PHP, Javascript e Python. A estrutura dessas linguagens permite trabalhar dinamicamente com os atributos e métodos de um objecto.

Linguagens compiladas usam o seu ambiente de execução para fornecer informação sobre o código fonte. Em algumas linguagens compiladas, o compilador grava o nome de elementos numa tabela que faz a correspondência desses nomes com os métodos e classes.

Exemplo: Usando a linguagem Go, vamos representar os seguintes problemas:

  • Inspecionar um objecto (métodos, atributos, tipos e valores);
  • Chamar métodos dinamicamente;
  • Verificar se métodos e atributos existem;
  • Contar quantos tipos primitivos são chamados por uma função.

*Artigo disponível em: *
https://www.dev.to/ortizdavid
https://www.medium.com/@ortizaad1994

*Código Fonte: *
https://github.com/ortizdavid/reflection-golang

Image description

Image description

Image description

Image description

Image description

Image description

Top comments (0)