Programação orientada a aspectos: uma ratoeira melhor?
Não é apenas uma nova tecnologia, mas também temos uma nova sigla! AOP , ou Programação Orientada a Aspectos, foi construída como uma resposta às limitações da Programação Orientada a Objetos (OOP).
Programação Orientada a Objetos (OOP)
A Programação Orientada a Objetos (OOP) é um modelo de desenvolvimento de software focado em objetos e classes.
Uma classe é um projeto para algo, por exemplo, mecanismo, publicação, funcionário, etc … Um objeto é uma instância dessa classe. O motor é genérico; um Hemi é uma instância da classe Engine. Uma classe também pode herdar métodos e variáveis de outra classe. Isso é chamado de herança . Portanto, é possível construir um programa com uma hierarquia de classes bastante complexa.
Mesmo que você possa ter uma grande árvore genealógica de classes em seu programa, a beleza do OOP é que cada uma serve ao seu próprio propósito. Você pode proteger dados e variáveis dentro das classes – você não dá acesso de rádio ao mecanismo. Mas você pode dar ao motor acesso ao eixo de transmissão. O termo técnico para este tipo de ocultação / proteção de dados é encapsulamento .
No entanto, há uma desvantagem em tudo isso. E se você tiver um comportamento que atravessa várias classes? Por exemplo, arquivos de log ou uma rotina de monitoramento. Essa rotina precisaria ser executada em muitas classes. Digamos que precisássemos monitorar quase 90% do carro: sistemas do motor, resfriamento, escapamento, transmissão, etc. Teríamos que adicionar o monitor a quase todas as classes ou métodos! Esse tipo de comportamento atravessa uma ampla gama de classes, muito parecido com uma rua diagonal. OOP é insuficiente neste aspecto.
Programação Orientada a Aspectos (AOP)
A Programação Orientada a Aspectos (AOP) ajuda a fornecer uma solução para o problema anterior. Em vez de objetos, AOP lida com aspectos . Um aspecto é um comportamento que atravessa vários objetos.
Uma das desvantagens do OOP é que certas coisas irão cruzar objetos e métodos. Ou seja, um único comportamento se aplicará a várias classes. Um exemplo é o registro ou monitoramento; você gostaria de monitorar / registrar atualizações para várias classes em um programa financeiro. Em OOP, você deve adicionar o registro a cada classe ou método. O AOP evita isso tratando esse comportamento transversal como um aspecto, em oposição a um objeto.
Esses aspectos são definidos separadamente do código principal. Quando você deseja executar a rotina de log, você define um pointcut ou coloca no código onde você executa o código. Isso pode ser em uma classe ou método. Por ter um único bloco de código para lidar com o aspecto, você reduz bastante a redundância que vem com o comportamento transversal.
AOP vs. OOP
Embora OOP ainda mantenha uma grande pegada no cenário de programação, suas deficiências (a questão transversal) levaram ao desenvolvimento do AOP. Você ainda pode ter um programa OOP, com os comportamentos adicionados como wrappers ao seu código.
Lembre-se de que OOP nos permite criar classes que herdam de outras classes – uma classe Brake Pad poderia herdar da classe Brake mais genérica. Isso pode reduzir o problema de corte transversal, porque um método de monitoramento da classe de freio pode ser passado para a classe de pastilhas de freio. No entanto, você pode querer monitorar a classe Rotor de maneira um pouco diferente da classe das Pastilhas de freio. O monitor ainda corta ambos os objetos. AOP seria uma solução melhor neste caso.
OOP ainda domina; AOP é uma resposta às deficiências de OOP. Os dois modelos podem ser combinados em um único programa.
Resumo da lição
A Programação Orientada a Objetos (OOP) é um método que envolve classes e objetos. Um objeto é uma instância da classe; as classes podem herdar umas das outras. Assim, você pode criar hierarquias em seu programa e, ao mesmo tempo, proteger os dados (isso é chamado de encapsulamento ). Os comportamentos podem cruzar vários objetos, no entanto; esse comportamento de corte transversal exigiria muitos códigos duplicados em OOP. Na Programação Orientada a Aspectos (AOP) , elegância é adicionada à estrutura do programa – o código para o comportamento é adicionado fora do código principal e é executado a partir de pontos de corte em objetos ou métodos. Ambos os métodos têm valor para a criação de código sustentável. No entanto, OOP ainda tem uma pegada maior no cenário de programação.