PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA APLICADA DISCIPLINA DE SISTEMA ORIENTADOS A OBJETOS PROGRAMAÇÃO ORIENTADA A ASPECTOS COM MÉTODOS ADAPTATIVOS Rodrigo Janasievicz Gomes Pinheiro Walter Tonon Junior
Programação Orientada a Aspectos com Método Adaptativo OOP sempre envolvem classes colaboradoras; Sem a orientação a aspectos é implementado como: –Inserção de uma classe em outra. –Divisão das operações em métodos das classes envolvidas.
Método Adaptativo Desenvolvido pelo projeto DEMETER; Conhecido como padrões de propagação; Caracteristica –encapsula o comportamento de uma operação em um único lugar. Vantagens –menor dispersão dos dados; –abstrações mais simples sobre as estruturas das classes;
Composição do Método Adaptativo É composto por dois padrões (patterns) –Estratégia de fluxo (Traversal Strategy); –Visitante adaptativo (Adapter Visitor)
Estratégia de Fluxo É um padrão comportamental de objetos; A intenção é definir uma família de algoritmos, encapsular cada um deles e torna-los intercambiaveis; Estratégia: permite que o algoritmo varie independente do clientes que o utilizam; Define AONDE IR ou O QUE QUER.
Visitante Adaptativo É um padrão comportamental de objetos; Representa a operação a ser executada nos elementos de uma estrutura de objetos; Visitante: permite definir uma nova operação sem mudar as classes dos elementos sobre os quais opera; Define O QUE FAZER.
Conexões Para Aspectos Definições de aspectos –Crosscutings: são eventos chaves na execução de programas Java, ou mensagens para referenciar a combinação do método de uma classe, resultado e tipo.
Conexões Para AspectoJ Definições de AspectoJ –join pints: são pontos de execução do programa; –pointcuts: são meios para referenciar pontos agregados e certos valores a estes pontos; –advice: é um método que pode ser anexado aos poitcuts (funciona como um construtor da classe);
Exemplo inport edu.neu.ccs.demeter.dj.ClassGraph; inport edu.neu.ccs.demeter.dj.Visitor; class Company { static ClassGraph cg = new ClassGraph(); // estrutura de classe Double sumSalaries() { String s = from Company to Salary; // estratégia de fluxo Visitor v = new Visitor() // visitante adaptativo { private double sum; public void start () { sum = 0.0; }; public void before(Salary host) { sum += host.getValue(); }; public Object getReturnValue() { return new Double(sum); }; } return (Double) cg.traverse(this, s, v); } // Demais definições da Companhia }
Diagrama de Operação do Exemplo
Conclusão Os conceitos compartimentais podem ser executados de uma maneira modularizada Java puro. A classe é elegantemente encapsulada. A biblioteca DJ permite seguir as leis de DEMETER em um caminho otimizado e experimentar idéias orientadas a aspectos. Uma simples implementação incorre em visíveis degradações de performance.
Bibliografia Communications of the ACM, outubro de 2001, volume 44, número 10, pag A biblioteca DJ está disponível como fonte ou binário em: