DPI-UF INF640: Seminário Aspects E Generics

Uploaded from authorPOINT Lite
Download as
 PPT
Presentation Description 

DPI-UF INF640: Seminário Aspects e Generics. Autor: Marcelo Daibert

Happy Thanksgiving
What's up on authorSTREAM?
Views: 56
Like it  ( Likes) Dislike it  ( Dislikes)
Added: March 30, 2008 This Presentation is Public 
Presentation Category : Science & Technology All Rights Reserved
Presentation Transcript

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