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

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay