Aspectos + Generics :Aspectos + Generics Generic Aspect Language Ciência da Computação Universidade Federal de Viçosa Tiago de Oliveira JanuárioMarcelo Santos Daibert Brian Luppi PimentelRonoel Matos A. Botelho Júnior
Agenda :Agenda Introdução
Contextualização
Aspectos + Generics
Generic Aspect Language
Estudo de Caso:
MockAspect
Padrão Decorator
Conclusão Aspectos + Generics 2
Introdução :Introdução Padrões de Projeto:
São catálogos de soluções utilizadas em aplicações de sucesso, a utilização de padrões adiciona qualidade ao seu software, como legibilidade e manutenibilidade
Os padrões necessitam de alterações em pontos específicos do seu código para se adequar a um sistema Aspectos + Generics 3
Introdução :Introdução Como tornar padrões mais genéricos?
Uma solução promissora são as linguagens orientadas à aspectos
A orientação à aspectos prega a implementação modular de padrões de projeto típicos
No entanto, as linguagens orientadas à aspectos não implementam os padrões de projeto de maneira a reusar o código fonte
Há a necessidade de um maior grau de generalização nas linguagens orientadas à aspectos Aspectos + Generics 4
Contextualização :Contextualização Padrões de Projeto:
Descrevem soluções para problemas recorrentes no desenvolvimento de sistemas de software orientados a objetos. Um padrão de projeto estabelece um nome e define o problema, a solução, quando aplicar esta solução e suas conseqüências Aspectos + Generics 5
Contextualização :Contextualização Orientação à Aspectos:
Paradigma de programação de computadores que permite aos desenvolvedores de software separar e organizar o código de acordo com a sua importância para a aplicação (separation of concerns).
Todo programa escrito no paradigma orientado a objetos possui código que é alheio a implementação do comportamento do objeto. Este código é todo aquele utilizado para implementar funcionalidades secundárias e que encontra-se espalhado por toda a aplicação (crosscutting concern).
A orientação à aspectos permite que esse código seja encapsulado e modularizado Aspectos + Generics 6
Contextualização :Contextualização Aspectos + Generics 7
Contextualização :Contextualização Generics – Programação Genérica:
É um paradigma de programação no qual os algoritmos são escritos em uma gramática estendida de forma a adaptar-se através da especificação das partes variáveis que se são definidas na instância do algoritmo Aspectos + Generics 8
Aspectos + Generics :Aspectos + Generics Extensão de aspectos com a noção de generics de Java
Objetivos:
Aumentar o poder da Linguagem e permitir uma melhor especificação de padrões de projeto
Reutilização da implementação de Padrões de Projeto
Minimizar as mudanças no código já implementado Aspectos + Generics 9
Generic Aspect Language :Generic Aspect Language Permite aos aspectos, a utilização de variáveis lógicas que podem representar um conjunto de entidades
Podem prover diferentes graus genéricos de abstração
A linguagem AspectJ não permite genericidade Aspectos + Generics 10
Generic Aspect Language :Generic Aspect Language LogicAJ se apresenta como uma extensão do AspectJ, permitindo assim a implementação de generecidade nesta linguagem orientada à aspectos Aspectos + Generics 11 http://roots.iai.uni-bonn.de/research/logicaj/
Estudo de Caso :Estudo de Caso MockAspect Aspectos + Generics 12 usrMng = new UserManagerMock(...);
...
dbMng = new DBManagerMock(...); usrMng = new UserManager(...);
...
dbMng = new DBManager(...); MockAspect
Estudo de Caso :Estudo de Caso MockAspect Aspectos + Generics 13 aspect MockAspect {
Object around(?mock, ?args, ?class) :
// Intercept constructor invocations.
// Bind ?class to the name of the instantiated class
// and ?args to the argument list of the invocation
call(?class.new(..)) && args(?args) &&
// Check if a class with name ?class+"Mock" exists
concat(?class, "Mock", ?mock) && class(?mock)
{ // return instance of mock class
// (includes weave time check for constructor existence)
return new ?mock(?args);
}
}
Estudo de Caso :Estudo de Caso Padrão Decorator: Aspectos + Generics 14 abstract aspect AbstractDecorator {
abstract pointcut component(?component);
pointcut decorator(?decorator) :
component(?component) &&
concat(?component, Decorator, ?decorator);
introduce(?component, ?decorator) : ...
introduce(?decorator, ?rettype, ?params, ?name) : ...
}
Estudo de Caso :Estudo de Caso Padrão Decorator: Aspectos + Generics 15 introduce(?component, ?decorator) :
component(?component) && decorator(?decorator)
{
abstract class ?decorator implements ?component {
protected ?component parent;
}
}
Estudo de Caso :Estudo de Caso Padrão Decorator: Aspectos + Generics 16 introduce(?decorator, ?rettype, ?methodName, ?params) :
component(?component) &&
decorator(?decorator) &&
method(public ?rettype ?compnent.?methodName(?params))
{
?rettype ?decorator.?methodName(?params) {
parent.?methodName(?params);
}
}
Estudo de Caso :Estudo de Caso Padrão Decorator: Aspectos + Generics 17
Estudo de Caso :Estudo de Caso Padrão Decorator: Aspectos + Generics 18
Estudo de Caso :Estudo de Caso Padrão Decorator: Aspectos + Generics 19 aspect MyComponentDecorator extends AbstractDecorator {
pointcut component(?component) : equals(?component, MyComponent);
introduce(?decorator) : decorator(?decorator)
{
public class ConcreteDecorator1 extends ?decorator {
public void m () { /*possibilita chamar super.m() */ }
public void m3() {/*possibilita chamar super.m3()*/}
}
// ... more ConcreteDecorator classes ...
}
}
Estudo de Caso :Estudo de Caso Padrão Decorator: Aspectos + Generics 20 introduce (?comp, ?sub, ?rettype, ?name, ?params, ?body) :
component(?component) &&
subtype(?component, ?sub) &&
method(?rettype ?sub.?name(?params) ?body )
{
method(?rettype ?sub.?name(?component self, ?params))
?body
}
Conclusão :Conclusão As linguagens Orientadas à Aspectos da primeira geração não apresentam grandes ganhos na reutilização de código
A utilização da abordagem de generics + aspectos busca então aumentar o grau de abstração dos aspectos
A utilização das Aspect Generic Languages, como o caso da LogicAJ, busca suprir as necessidades e limitações das linguagens Orientadas à Aspectos Atuais Aspectos + Generics 21
Bibliografia :Bibliografia KNIESEL, G; RHO, T. Generic Aspect Language – Needs, Options and Challenges.
KNIESEL, G; RHO, T; HANENBERG, S. Evolvable Pattern Implementations need Generic Aspects.
KNIESEL, G; RHO, T. A Definition, Overview and Taxonomy of Generic Aspect Languages.
HANNEMANN, J; KICZALES, G. Design Pattern Implementation on Java and AspectJ.
RHO, T; KNIESEL, G; APPELTAUER, M. Fine-Grained Generic Aspects.
KNIESEL, G; RHO, T. Uniform Genericity for Aspect Languages.
KNIESEL, G; RHO, T. Independent Evolution of Design Patterns and Application Logic with Generic Aspects – A Case Study. Aspectos + Generics 22
Aspectos + Generics :Aspectos + Generics Generic Aspect Language Mestrado em Ciência da Computação Universidade Federal de Viçosa Tiago de Oliveira JanuárioMarcelo Santos Daibert Brian Luppi PimentelRonoel Matos A. Botelho Júnior