DPI-UF INF640: Seminário Aspects e Generics

Uploaded from authorPOINTLite
Views:
 
     
 

Presentation Description

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

Comments

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