Conheça AOP
A Programação Orientada a Aspectos (AOP) é um novo conceito de programação que foi desenvolvido devido a algumas deficiências da programação orientada a objetos (OOP). Como OOP, AOP define métodos para programação e ferramentas; no entanto, eles parecem bem diferentes. O foco principal do paradigma é um aspecto ou recurso que pode ser encontrado em métodos e classes. Onde OOP lida com objetos, AOP se preocupa com aspectos.
Aspects
Em vez de um objeto concreto, como Engine, Aspect-Oriented Programming (AOP) se preocupa com os aspectos. Isso pode ser um pouco difícil de definir, uma vez que podem cruzar classes e métodos. Ao discutir AOP, você ouvirá os programadores referirem-se a crosscutting – uma ação ou comportamento que atravessa várias áreas de seu programa. Pense em uma grande cidade com ruas dispostas em grade. Em algumas cidades, no entanto, uma rua corta diagonalmente o centro da cidade.
Um exemplo de aspecto é um registro ou monitor. Podemos precisar saber quem atualizou o quê e quando. Identificar um monitor para cada classe em seu código é uma grande sobrecarga. Não é algo que uma classe Engine deveria fazer. Ele deve se preocupar em iniciar, parar, correr. Na verdade, você pode ter um modelo de objeto inteiro de um carro, com Motor, Escape e outras classes. O monitoramento / logs irá cruzar todos os objetos e métodos.
Seria muito ineficiente se você tivesse que adicionar o registro a todas as classes em seu programa, especialmente um programa que faz transações bancárias ou financeiras. O aspecto abrange dezenas de classes! E se você cometeu um erro de digitação ou erro, pode ser um pesadelo encontrá-lo.
A figura a seguir mostra o ponto crucial de nosso problema.
![]() |
Para comparar com uma rua diagonal: Teríamos que instalar semáforos e sinais em cada cruzamento. Deve haver uma maneira melhor! A abordagem Orientada a Aspectos nos permite remover essa rua diagonal e envolver o comportamento em torno de nosso código. Teríamos então o seguinte exemplo:
![]() |
AOP nos permite envolver o comportamento em torno do código e evitar a rua diagonal.
Conceitos AOP em ação
Não vamos entrar nos detalhes essenciais de uma solução AOP. No entanto, você provavelmente está se perguntando como isso realmente funciona.
AOP permite que você crie seu método como sua própria classe. Em AOP, chamaríamos essa classe de interceptor . Esta classe fará o registro real. O benefício desta classe autônoma é que você pode adicionar / remover a funcionalidade de registro em qualquer ponto. Você não precisa substituir todas as placas de Proibido Estacionar por uma placa de Estacionamento Gratuito na rua diagonal! Você simplesmente atualiza o código do interceptor.
Ter o interceptor é ótimo, mas para realmente usá-lo, precisamos especificar WHEN para executar o código do aspecto. Os locais onde você chama o código são chamados de pontos de atalho . Pense em um ponto de entrada ou sinalizador que aciona a execução do interceptor. Isso pode ser uma chamada para um método ou construtor, mesmo em um ponto quando uma exceção é criada.
Adicionamos pontos de corte ao nosso gráfico anterior:
![]() |
O programa agora foi atualizado para remover o comportamento de corte transversal e pudemos decidir quando executar o código do interceptor. AOP ajuda a reduzir linhas de código extras e desnecessárias.
Separação de deveres
O AOP também tem um grande benefício: podemos separar o registro / métricas do código subjacente. Isso nos permite separar o código subjacente do comportamento real de corte transversal. O comportamento pode ser adicionado abaixo ou acima do código principal; isso pode permitir que um desenvolvedor (ou mesmo um administrador) adicione / remova nosso registro a qualquer momento. Não precisamos reeditar ou recompilar o código!
Resumo da lição
A Programação Orientada a Aspectos (AOP) lida com aspectos versus conceitos. Esses aspectos se cruzam em vários objetos / classes de um programa. Pense em monitores ou logs: você não deveria ter que recriá-los em cada objeto ou classe. O principal objetivo do AOP é se livrar das ruas diagonais e envolver suas classes no comportamento. Isso é alcançado por meio do conceito de uma classe de interceptor , que é executada sempre que você deseja invocar o aspecto. Os locais onde você invoca o interceptor são chamados de pontos de corte . Finalmente, o AOP fornece uma maneira única de separar o código do comportamento de corte transversal – ele pode ser adicionado / removido conforme necessário.