14
Lincoln S. Rocha ([email protected]) POO e suas Limitações Introdução POA AspectJ: Conceitos Básicos Exemplo: Tracing Exemplo: Tracing Objetivo da Programação? Introdução à OO Introdução à POO Limitações da POO Limitações da POO Requisitos Transversais: Exemplos Rastreamento Usando POO Problemas com a Abordagem A Causa dos Problemas da POO

Lincoln S. Rocha ([email protected])disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

Lincoln S. Rocha ([email protected])

� POO e suas Limitações� Introdução POA� AspectJ: Conceitos Básicos

Exemplo: Tracing� Exemplo: Tracing

� Objetivo da Programação?� Introdução à OO� Introdução à POO

Limitações da POO� Limitações da POO� Requisitos Transversais: Exemplos� Rastreamento Usando POO� Problemas com a Abordagem� A Causa dos Problemas da POO

Page 2: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

record Pessoanome : string;idade : integer;nascimento : string;

end

procedure aniversario

Mapeamento

procedure aniversariobegin

(.....)end

Nome Idade Nascimento

Alan Turing 96 23/06/1912

5

� A Orientação a Objetos surgiu no início dos anos 80

� Grande evolução desde os Métodos EstruturadosEstruturados

� É uma abordagem para modelagem de sistemas e um paradigma maduro que continua sendo amplamente utilizado

6

� O paradigma da Orientação a Objetos compreende várias disciplinas� Análise Orientada a Objetos

� Projeto Orientado a Objetos

� Programação Orientada a Objetos

� (...)

7

� O princípio da OO é mapear um modelo da realidade, visto como interação entre objetos, num modelo computacional de dados e programasdados e programas

8

Page 3: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

� Foco nos dados (objetos) do sistema, não nas funções

� Estruturação do programa é baseada nos dados, não nas funçõesdados, não nas funções

� As funções mudam mais do que os dados!

9

� Princípios Fundamentais

�Objetos � Herança

�Classes � Polimorfismo

10

�Classes � Polimorfismo

�Abstração � Modularidade

� Encapsulamento � Hierarquia

� Objetos� Entidades que formalizam o modo pelo qual

compreendemos algo no domínio de um problemaproblema

� Em um objeto estão encapsulados os dados (atributos) e os procedimentos (métodos) exclusivos dele▪ Os procedimentos são aplicáveis aos dados residentes

no objeto

11

� Objetos (cont.)� Um objeto possui estado, comportamento e

identidade▪ Estado: valores dos atributos▪ Estado: valores dos atributos

▪ Comportamento: definido pelos métodos (como o objeto age e reage)

▪ Identidade: aquilo que diferencia um objeto de outro

12

Page 4: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

� Classes� Descrevem um conjunto de objetos semelhantes

� São templates utilizados para criar objetos

� Classes de objetos podem herdar atributos e métodos de outras classes de objetos

13

� Objetos versus Classes� Objeto é uma entidade concreta e a Classe é uma

abstração

� Do ponto de vista de programação � Do ponto de vista de programação ▪ Definir uma classe significa formalizar um tipo de dados

e todas as operações associadas a este tipo

▪ Declarar objetos significa criar variáveis do tipo definido

14

� A POO falha em modularizar requisitos periféricos que atravessam múltiplos módulos (ex., segurança, rastreamento e distribuição) distribuição)

� Esses requisitos ou interesses são chamados de transversais (crosscutting concerns)

15

� A implementação de requisitos transversais se dá através da adição de código em diversos objetos ao longo do sistema

Gera espalhamento� Gera espalhamento

� Em geral o código relacionado ao requisito transversal não está diretamente ligado à funcionalidade definida para estes objetos� Gera entrelaçamento

16

Page 5: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

� Segurança

� Persistência

� Auditoria e depuraçãoAplicação

Auditoria e depuração

� Tratamento de exceções

� Otimização e desempenho

� Concorrência e sincronização

� Regras e restrições do negócio

17

Aplicação POA

public class Tracing {

public static void entry(String text) {

System.out.println("entry: " + text);

}

public static void exit(String text) {

System.out.println("exit: " + text);

}

18

}}

public class Person {private String name = "";

public void setName(String name) {

Tracing.entry("setName("+name+")");

this.name = name;

Tracing.exit("setName()");

}...

}

� Redundância � Fraca coesão� Forte acoplamento

Dificuldade de compreensão� Dificuldade de compreensão� Dificuldade de manutenção� Dificuldade de reutilização

19

A decomposição primáriana POO é feita no plano

O requisito transversal ficaespalhado pelas classes porque é

20

espalhado pelas classes porque étratado na dimensão errada!

TracingO requisito transversal é ortogonalà decomposição primária!

Page 6: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

� Introdução� Princípios Básicos� Etapas do Desenvolvimento

Ingredientes Essenciais� Ingredientes Essenciais� Benefício Esperado

� A POA foi concebida por Gregor Kiczales(1997) quando era o cientista chefe cientista chefe (software design) da Xerox PARC (1996 –2002)

23

� O principal objetivo da POA é facilitar a modularização de interesses transversais (crosscutting concerns)

� A POA não veio substituir POO, mas sim

para complementá-la!

24

Page 7: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

� A POA, assim como a POO, é baseada no principio da separação de interesses (separation of concerns) o qual preconiza a identificação e o tratamento individualizado identificação e o tratamento individualizado dos diferentes interesses envolvidos no desenvolvimento de um software

� 1974 - Edsger W. Dijkstra em "On the role of scientific thought“

25

� A separação de interesses é um princípio que deve guiar todas as etapas de um processo de desenvolvimento de softwaredesenvolvimento de software

� A modularização de interesses transversais deve ser feita através de uma nova unidade de encapsulamento, denominada aspecto

26

� Visão geral do processo de desenvolvimento na POA

27

� Classes: encapsulam requisitos funcionais� Aspectos: encapsulam requisitos transversais� Weaver: entrelaça classes e aspectos num programa

28

Aspectos

ClassesPrograma

Weaver

Page 8: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

� Boa modularidade, mesmo quando temos requisitos transversais

� Facilidade de desenvolvimento� Facilidade de desenvolvimento� Código fonte menos espalho e entrelaçado, mais

compacto e mais natural

29

� Facilidade de manutenção� Mais fácil para entender, depurar e modificar

Facilidade de reutilização� Facilidade de reutilização� Hierarquia de aspectos, biblioteca de aspectos e

aspectos “plug and play”

30

� O que é AspectJ ?� Aspectos versus Classes� Joinpoints e Pointcuts

Advices e Introductions� Advices e Introductions� Reflexão e Reusabilidade

Page 9: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

� É uma extensão de Java, orientada a aspectos� É um weaver que implementa POA em Java� É um pré-processador

“Fácil” de aprender e utilizar� “Fácil” de aprender e utilizar� Disponível gratuitamente

� http://eclipse.org/aspectj

33

� Aspectos são similares a classes

� Têm um tipo

� Podem ser estendidos� Podem ser estendidos

� Podem ser abstratos ou concretos

� Podem conter atributos, métodos e tipos como

membros

34

� Aspectos são diferentes de classes

� Não têm construtor, nem destrutor

� Não podem ser criados com o operador new� Não podem ser criados com o operador new

� Podem conter pointcuts e advices como

membros

� Podem acessar membros de outros tipos

35

� São pontos, bem definidos, na execução de um programa, onde aspectos podem interceptar classes

36

Objeto

Método

Execução de método

Chamada de método

getset

Acesso a atributo

Atributo

Page 10: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

� São identificados por designadores� call(Signature)

� execution(Signature)

� initialization(Signature)� initialization(Signature)

� preinitialization(ConstructorPat)

� staticinitialization(TypePat)

� handler(TypePattern)

� get(Signature)

� set(Signature)

37

� args(TypePattern, ...)

� within(TypePattern)

� cflow(PointCut)

� cflowbelow(Pointcut)� cflowbelow(Pointcut)

� if(Expression)

� adviceexecution()

� this(TypePattern)

� target(TypePattern)

38

� Designadores podem ser genéricos

� call(* set*())

� call(public Person.*(..))

� call(void foo(..))

� call(* *(..))

� call(*.new(int, int))

39

� Predicados que definem conjuntos de joinpoints

40

pointcut traced() : call(public * set*(..));

Page 11: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

� Podem ser definidos como expressões booleanas, empregando-se !, && e ||

41

pointcut traced() : call(public * set*(..)) ||

call(public * get*(..));

� Pointcuts também podem ter argumentos

42

pointcut traced(Person p) : target(p) &&

call(public * set*(..)) ||

call(public * get*(..));

� São trechos de código associados a pointcuts, que injetam um novo comportamento em todos os joinpointsrepresentados pelo pointcutrepresentados pelo pointcut

� Tipos� before

� after

� around

43

chamadochamador

After

advice

Before

advice

� Formas básicas� before(param) : pointcut(param) {...}

� after(param) : pointcut(param) {...}

� after(param) returning [formal] : � after(param) returning [formal] :

pointcut(param) {...}

� after(param) throwing [formal] : pointcut(param)

{...}

� type around(param) [throws typelist] :

pointcut(param) {...}

44

Page 12: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

pointcut get(int index) :

args(index) && call(* get*(..));

designador

pointcut

45

before(int index) : get(index) {

System.out.println(index);

}

pointcut

advice

código

� É uma variável especial predefinida� É similar à variável this em Java� Disponibiliza várias informações a respeito do

joinpoint que disparou o advicejoinpoint que disparou o advice

� Exemplos:� thisJoinPoint.toString()

� thisJoinPoint.getArgs()

46

� Um forma de introduzir novos membros a classes e interfaces já existentes

private int Person.id = 0;

47

public void Person.setId(int id){

this.id = id;

}

public int Person.getId(){

return this.id;

}

declare parents: Person extends Animal;

public abstract aspect Tracing {

protected abstract pointcut trace();

// advice code

}

48

}

public aspect MyTracing extends Tracing {

// just define which calls to trace

protected pointcut trace(): call(* set*(..));

}

Page 13: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

public class Person {

private String name = "";

public void setName(String name) {

this.name = name;}...

}

50

}

class Tracing {

public static void entry(String text) {

System.out.println("entry: " + text);

}

public static void exit(String text) {

System.out.println("exit: " + text);

}}

aspect Tracing {

pointcut trace () : call(public * Person.set*(..));

51

before() : trace() {

Tracing.entry(thisJoinPoint.toString());

}

after() : trace() {

Tracing.exit(thisJoinPoint.toString());}

}

public class Application {

public static void main(String[] args) {

Person person = new Person();

person.setName("Lincoln Souza Rocha");

52

person.setName("Lincoln Souza Rocha");

}

}

entry: call(void Person.setName(String))

exit: call(void Person.setName(String))

Page 14: Lincoln S. Rocha (lincoln@great.ufc.br)disciplinas.lia.ufc.br/engsof081/arquivos/POA&AspectJ-(Lincoln).pdf · Alan Turing 96 23/06/1912 5 A Orientação a Objetos surgiu no início

� Kendall, E. A. Aspect-Oriented Programming in AspectJ, 2001.

� Kiczales, G. et all. Aspect-Oriented Programming, 1997.1997.

� Kiczales, G. et all. An Overview of AspectJ, 2002.

� Voelter, M. Aspect-Oriented Programming in Java, 2000.

� The AspectJ Programming Guide, Xerox Corporation, 2002.

53

Lincoln S. Rocha ([email protected])