SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
Engenharia de Software

 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens                             Engenharia de Software
Motivação


Programação Orientada                                      Orientada a Aspectos
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados
                                        Dyego Ítallo Silva Ferreira Marcos José Ferreira
AspectJ
Instalação do AspectJ
                                                    Weverson Fraques França
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de                                               03 de Janeiro de 2013
Aspectos em UML




                                                                    1/36


                                  Engenharia de Software                               Avançar
Engenharia de Software
                                  Roteiro
 Dyego Ítallo, Marcos
José, Weverson França
                                  1    Introdução
Introdução                               História
História
POA em outras linguagens
                                         POA em outras linguagens
Motivação
                                         Motivação
Programação Orientada
a Aspectos                        2    Programação Orientada a Aspectos
Gerenciamento de interesses com
POA                                      Gerenciamento de interesses com POA
Desenvolvimento com POA
Benefícios esperados                     Desenvolvimento com POA
AspectJ                                  Benefícios esperados
Instalação do AspectJ
Joinpoints                        3    AspectJ
Pointcuts
Adivices                                 Instalação do AspectJ
Aspectos versus Classes

Modelagem de
                                         Joinpoints
Aspectos em UML                          Pointcuts
                                         Adivices
                                         Aspectos versus Classes
                                  4    Modelagem de Aspectos em UML
                                                             2/36


                                  Engenharia de Software                   Voltar   Avançar
Engenharia de Software
                                  História
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
Motivação
                                          A Programação Orientada a Aspectos (POA) foi
Programação Orientada
a Aspectos                                criada por Gregor Kiczales (1997) quando era o
Gerenciamento de interesses com
POA                                       cientista da Xerox PARC (1996 – 2002)
Desenvolvimento com POA
Benefícios esperados                      Os desenvolvedores da Xerox PARC criaram a
AspectJ
Instalação do AspectJ
                                          linguagem AspectJ
Joinpoints
Pointcuts
                                          A linguagem AspectJ é usada até hoje e é a mais
Adivices
Aspectos versus Classes
                                          popular linguaguem de POA
Modelagem de                              A linguagem AspectJ é usada com Java
Aspectos em UML




                                                               3/36


                                  Engenharia de Software                     Voltar    Avançar
Engenharia de Software
                                  POA em outras linguagens
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
                                                    Linguagem          Aspecto
Motivação
                                                        Java           AspectJ
Programação Orientada
a Aspectos                                             C++           AspectC++
Gerenciamento de interesses com
POA                                                      C             AspectC
Desenvolvimento com POA
Benefícios esperados                                  Python         Aspyct AOP
AspectJ                                                 NET          AspectNET
Instalação do AspectJ
Joinpoints                                           JavaScript        Ajaxpect
Pointcuts
Adivices
                                                       PHP            PHPaspect
Aspectos versus Classes
                                                       Ruby            AspectR
Modelagem de
Aspectos em UML                                         Lua           AspectLua
                                                        Perl      The Aspect Module



                                                                   4/36


                                  Engenharia de Software                        Voltar   Avançar
Engenharia de Software
                                  Motivação
 Dyego Ítallo, Marcos
José, Weverson França


Introdução                        Sistema de banco: Imagine que um banco, pediu para
História
POA em outras linguagens
                                              que fosse feito software que gerencie todas
Motivação                                     as transações bancárias.
Programação Orientada                           1 Quais os principais interesses?
a Aspectos
Gerenciamento de interesses com
POA                                                                Deposito
Desenvolvimento com POA
Benefícios esperados
                                                                   Transferência
AspectJ
                                                                   Saque
Instalação do AspectJ                                              TED
Joinpoints
Pointcuts
                                                                   DOC
Adivices                                                           ...
Aspectos versus Classes

Modelagem de
                                                           2   Quais os interesses secundários?
Aspectos em UML
                                                                   Auditoria;
                                                                   Autorização;
                                                                   Persistência;
                                                                   ...
                                                                        5/36


                                  Engenharia de Software                               Voltar     Avançar
Engenharia de Software
                                  Motivação
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
                                  Classificamos os interesses do software em:
POA
Desenvolvimento com POA
Benefícios esperados
                                          Concerns – Interesses primários (Núcleo do sistema)
AspectJ                                   Crosscutting Concerns – Interesses transversais,
Instalação do AspectJ
Joinpoints
                                          que abrangem vários módulos do sistema.
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                6/36


                                  Engenharia de Software                       Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
                                          Implementações OO acoplam Concerns com os
POA em outras linguagens
Motivação
                                          Crosscutting Concerns
Programação Orientada                     Quando são adicionadas ou removidas
a Aspectos
Gerenciamento de interesses com           funcionalidades, na maior parte dos casos, é
POA
Desenvolvimento com POA                   modificado o núcleo do sistema
Benefícios esperados

AspectJ                                   Muitas propriedades importantes espalham-se por
Instalação do AspectJ
Joinpoints
                                          vários módulos e misturam-se com outras
Pointcuts
Adivices
                                          propriedades de maneira intrusiva
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                 7/36


                                  Engenharia de Software                        Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
                                          Implementações OO acoplam Concerns com os
POA em outras linguagens
Motivação
                                          Crosscutting Concerns
Programação Orientada                     Quando são adicionadas ou removidas
a Aspectos
Gerenciamento de interesses com           funcionalidades, na maior parte dos casos, é
POA
Desenvolvimento com POA                   modificado o núcleo do sistema
Benefícios esperados

AspectJ                                   Muitas propriedades importantes espalham-se por
Instalação do AspectJ
Joinpoints
                                          vários módulos e misturam-se com outras
Pointcuts
Adivices
                                          propriedades de maneira intrusiva
Aspectos versus Classes

Modelagem de
Aspectos em UML
                                  Limitação
                                  Esses problemas dificultam a reutilização e a manutenção
                                  dos componentes do sistema.


                                                                 7/36


                                  Engenharia de Software                        Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos                         Sistema bancário: Implementar o método
Gerenciamento de interesses com
POA                                           TranferenciaContas usando POO.
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                           8/36


                                  Engenharia de Software              Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos                         Sistema bancário: Implementar o método
Gerenciamento de interesses com
POA                                           TranferenciaContas usando POO.
Desenvolvimento com POA
Benefícios esperados

                                   Implementação do método Trasferência de Contas
AspectJ
Instalação do AspectJ
Joinpoints                         public void transferir(Conta origem, Conta destino, int valor) {
Pointcuts                            origem.debitar(valor);
Adivices                             destino.creditar(valor);
Aspectos versus Classes              }

Modelagem de
Aspectos em UML




                                                                             8/36


                                  Engenharia de Software                                       Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos                                Verificar se o usuário possui saldo suficiente.
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                 9/36


                                  Engenharia de Software                        Voltar    Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos                                Verificar se o usuário possui saldo suficiente.
Gerenciamento de interesses com
POA
Desenvolvimento com POA            Implementação do método Trasferência de Contas
Benefícios esperados

AspectJ                            public void transferir(Conta origem, Conta destino, int valor) {
Instalação do AspectJ                if (origem.getSaldo() < valor) {
Joinpoints                             throw new SaldoInsuficienteException();
Pointcuts                            }
Adivices                             origem.debitar(valor);
Aspectos versus Classes              destino.creditar(valor);
                                     }
Modelagem de
Aspectos em UML




                                                                             9/36


                                  Engenharia de Software                                       Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
POA em outras linguagens
Motivação
                                          Verificar se o usuário possui permissão para realizar
Programação Orientada
a Aspectos
                                          a transação
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                 10/36


                                  Engenharia de Software                        Voltar    Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
POA em outras linguagens
Motivação
                                          Verificar se o usuário possui permissão para realizar
Programação Orientada
a Aspectos
                                          a transação
Gerenciamento de interesses com
POA
Desenvolvimento com POA            Implementação do método Trasferência de Contas
Benefícios esperados

AspectJ                             public void transferir(Conta origem, Conta destino, int valor){
Instalação do AspectJ                if (!getUsuario().hasPermissao(OP_TRANSF)){
Joinpoints                             throw new PermissaoException();
Pointcuts                            }
Adivices                             if (origem.getSaldo() < valor) {
Aspectos versus Classes
                                       throw new SaldoInsuficienteException();
                                     }
Modelagem de                         origem.debitar(valor);
Aspectos em UML                      destino.creditar(valor);
                                     }




                                                                            10/36


                                  Engenharia de Software                                        Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
POA em outras linguagens
Motivação                                 Verificar se o valor do dinheiro é negativo
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                 11/36


                                  Engenharia de Software                        Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
POA em outras linguagens
Motivação                                 Verificar se o valor do dinheiro é negativo
Programação Orientada
a Aspectos
                                   Implementação do método Trasferência de Contas
Gerenciamento de interesses com
POA
Desenvolvimento com POA
                                    public void transferir(Conta origem, Conta destino, int valor){
Benefícios esperados
                                     if (valor < 0) {
AspectJ                                throw new TransferenciaNegativaException();
                                     }
Instalação do AspectJ
                                     if (!getUsuario().hasPermissao(OP_TRANSF)){
Joinpoints
                                       throw new PermissaoException();
Pointcuts
                                     }
Adivices
                                     if (origem.getSaldo() < valor) {
Aspectos versus Classes
                                       throw new SaldoInsuficienteException();
Modelagem de                         }
Aspectos em UML                      origem.debitar(valor);
                                     destino.creditar(valor);
                                     }




                                                                            11/36


                                  Engenharia de Software                                        Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
                                          Previnir perda de dados
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                12/36


                                  Engenharia de Software                Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
                                          Previnir perda de dados
POA em outras linguagens
Motivação                          Implementação do método Trasferência de Contas

Programação Orientada
a Aspectos                          public void transferir(Conta origem, Conta destino, int valor){
Gerenciamento de interesses com
                                     if (valor < 0) {
POA                                    throw new TransferenciaNegativaException();
Desenvolvimento com POA              }
Benefícios esperados                 if (!getUsuario().hasPermissao(OP_TRANSF)){
                                       throw new PermissaoException();
AspectJ                              }
Instalação do AspectJ                if (origem.getSaldo() < valor) {
Joinpoints                             throw new SaldoInsuficienteException();
Pointcuts                            }
Adivices
Aspectos versus Classes              DatabaseTransacao dt = new DatabaseTransacao();

Modelagem de                         try {
Aspectos em UML                        origem.debitar(valor);
                                       destino.creditar(valor);
                                       dt.enviar(origem, destino);
                                     }catch(Exception e) {
                                       dt.reverter();
                                     }
                                    }

                                                                            12/36


                                  Engenharia de Software                                        Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
                                          Adicionando ao log de dados da aplicação
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                               13/36


                                  Engenharia de Software                      Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo prático

Introdução
História
                                          Adicionando ao log de dados da aplicação
POA em outras linguagens
Motivação                          Implementação do método Trasferência de Contas

Programação Orientada
a Aspectos                          public void transferir(Conta origem, Conta destino, int valor){
Gerenciamento de interesses com
                                     if (valor < 0) {
POA                                    throw new TransferenciaNegativaException();
Desenvolvimento com POA              }
Benefícios esperados                 if (!getUsuario().hasPermissao(OP_TRANSF)){
                                       throw new PermissaoException();
AspectJ                              }
Instalação do AspectJ                if (origem.getSaldo() < valor) {
Joinpoints                             throw new SaldoInsuficienteException();
Pointcuts                            }
Adivices
Aspectos versus Classes              DatabaseTransacao dt = new DatabaseTransacao();

Modelagem de                         try {
Aspectos em UML                        origem.debitar(valor);
                                       destino.creditar(valor);
                                       dt.enviar(origem, destino);
                                       logger.logOperacao(OP_TRANSF, origem, destino, valor);
                                     }catch(Exception e) {
                                       dt.reverter();
                                       logger.logErro(OP_TRANSF, e.getMenssage);
                                     }
                                     }                                    13/36


                                  Engenharia de Software                                        Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             O que podemos extrair desse exemplo?

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                               14/36


                                  Engenharia de Software                 Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             O que podemos extrair desse exemplo?

Introdução
História
POA em outras linguagens
                                          O código perdeu elegância
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                               14/36


                                  Engenharia de Software                 Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             O que podemos extrair desse exemplo?

Introdução
História
POA em outras linguagens
                                          O código perdeu elegância
Motivação
                                          O código perdeu simplicidade
Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                               14/36


                                  Engenharia de Software                 Voltar   Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             O que podemos extrair desse exemplo?

Introdução
História
POA em outras linguagens
                                          O código perdeu elegância
Motivação
                                          O código perdeu simplicidade
Programação Orientada
a Aspectos                                O código da regra do negócio foi voltado para
Gerenciamento de interesses com
POA                                       outros objetivos (misturado)
Desenvolvimento com POA
Benefícios esperados                             Verificações
AspectJ                                          Segurança
Instalação do AspectJ
Joinpoints
                                                 Log de dados
Pointcuts                                        Persistência de dados
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                    14/36


                                  Engenharia de Software                       Voltar     Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             O que podemos extrair desse exemplo?

Introdução
História
POA em outras linguagens
                                          O código perdeu elegância
Motivação
                                          O código perdeu simplicidade
Programação Orientada
a Aspectos                                O código da regra do negócio foi voltado para
Gerenciamento de interesses com
POA                                       outros objetivos (misturado)
Desenvolvimento com POA
Benefícios esperados                             Verificações
AspectJ                                          Segurança
Instalação do AspectJ
Joinpoints
                                                 Log de dados
Pointcuts                                        Persistência de dados
Adivices
Aspectos versus Classes
                                          Código redundante
Modelagem de
Aspectos em UML




                                                                    14/36


                                  Engenharia de Software                       Voltar     Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             O que podemos extrair desse exemplo?

Introdução
História
POA em outras linguagens
                                          O código perdeu elegância
Motivação
                                          O código perdeu simplicidade
Programação Orientada
a Aspectos                                O código da regra do negócio foi voltado para
Gerenciamento de interesses com
POA                                       outros objetivos (misturado)
Desenvolvimento com POA
Benefícios esperados                             Verificações
AspectJ                                          Segurança
Instalação do AspectJ
Joinpoints
                                                 Log de dados
Pointcuts                                        Persistência de dados
Adivices
Aspectos versus Classes
                                          Código redundante
Modelagem de
Aspectos em UML                           Código de difícil manutenção




                                                                    14/36


                                  Engenharia de Software                       Voltar     Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             O que podemos extrair desse exemplo?

Introdução
História
POA em outras linguagens
                                          O código perdeu elegância
Motivação
                                          O código perdeu simplicidade
Programação Orientada
a Aspectos                                O código da regra do negócio foi voltado para
Gerenciamento de interesses com
POA                                       outros objetivos (misturado)
Desenvolvimento com POA
Benefícios esperados                             Verificações
AspectJ                                          Segurança
Instalação do AspectJ
Joinpoints
                                                 Log de dados
Pointcuts                                        Persistência de dados
Adivices
Aspectos versus Classes
                                          Código redundante
Modelagem de
Aspectos em UML                           Código de difícil manutenção
                                          Código de difícil compreensão


                                                                    14/36


                                  Engenharia de Software                       Voltar     Avançar
Engenharia de Software
                                  Problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França             O que podemos extrair desse exemplo?

Introdução
História
POA em outras linguagens
                                          O código perdeu elegância
Motivação
                                          O código perdeu simplicidade
Programação Orientada
a Aspectos                                O código da regra do negócio foi voltado para
Gerenciamento de interesses com
POA                                       outros objetivos (misturado)
Desenvolvimento com POA
Benefícios esperados                             Verificações
AspectJ                                          Segurança
Instalação do AspectJ
Joinpoints
                                                 Log de dados
Pointcuts                                        Persistência de dados
Adivices
Aspectos versus Classes
                                          Código redundante
Modelagem de
Aspectos em UML                           Código de difícil manutenção
                                          Código de difícil compreensão
                                          Código de difícil reutilização

                                                                    14/36


                                  Engenharia de Software                       Voltar     Avançar
Engenharia de Software
                                  Causa dos problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
                                  Figura: [Lincoln, 2009] Projeto antes dos requisitos
Aspectos em UML                   transversais




                                                                15/36


                                  Engenharia de Software                         Voltar   Avançar
Engenharia de Software
                                  Causa dos problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML
                                  Figura: [Lincoln, 2009] Projeto depois dos requisitos
                                  transversais



                                                                16/36


                                  Engenharia de Software                         Voltar   Avançar
Engenharia de Software
                                  Causa dos problemas da POO
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML
                                           Figura: [Lincoln, 2009] Problema multidimensinal




                                                                 17/36


                                  Engenharia de Software                         Voltar       Avançar
Engenharia de Software
                                  Programação Orientada a Aspectos
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História                          A programação Orientada a Aspectos (POA) é uma
POA em outras linguagens
Motivação                         nova metodologia que:
Programação Orientada
a Aspectos
                                          Separa os interesses, responsábilidades e requisistos
Gerenciamento de interesses com
POA
                                          (Concerns) de um sistema
Desenvolvimento com POA
Benefícios esperados                      A modularização dos Aspectos produz uma
AspectJ                                   arquitetura fácil de projetar, implementar e manter
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                 18/36


                                  Engenharia de Software                         Voltar    Avançar
Engenharia de Software
                                  Programação Orientada a Aspectos
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História                          A programação Orientada a Aspectos (POA) é uma
POA em outras linguagens
Motivação                         nova metodologia que:
Programação Orientada
a Aspectos
                                          Separa os interesses, responsábilidades e requisistos
Gerenciamento de interesses com
POA
                                          (Concerns) de um sistema
Desenvolvimento com POA
Benefícios esperados                      A modularização dos Aspectos produz uma
AspectJ                                   arquitetura fácil de projetar, implementar e manter
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
                                  POO X POA
Aspectos versus Classes
                                  A POA não veio para substituir a POO, e sim para
Modelagem de
Aspectos em UML                   complementá-la, pois a POA usada sozinha não traz
                                  benefícios para o projeto de software.



                                                                 18/36


                                  Engenharia de Software                         Voltar    Avançar
Engenharia de Software
                                  Gerenciamento de interesses (Concerns)
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
                                  Um Concern é um requisito específico de um sistema.
POA em outras linguagens          Existem dois tipos de Concern, são eles:
Motivação


Programação Orientada                 1   Core Concerns – são os requisitos das
a Aspectos
Gerenciamento de interesses com
                                          funcionalidades centrais de um módulo (núcleo)
POA
Desenvolvimento com POA
Benefícios esperados
                                      2   Crosscutting Concerns – são os requistos das
AspectJ
                                          funcionalidades periférias do sistemas, onde, são
Instalação do AspectJ
Joinpoints
                                          usados em diversos módulos do sistema
Pointcuts
Adivices
                                  Em um projeto desenvolvido com POA, o engenheiro
Aspectos versus Classes
                                  deve se preocupar durante todo o projeto com a
Modelagem de
Aspectos em UML                   separação de interesses (separation of concerns).
                                  Os interesses transversais são encapsulados pelos
                                  aspectos.


                                                                 19/36


                                  Engenharia de Software                        Voltar        Avançar
Engenharia de Software
                                  Programação Orientada a Aspectos
 Dyego Ítallo, Marcos
José, Weverson França             Desenvolvimento com POA

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
                                          Identificar concerns
Gerenciamento de interesses com
POA                                       Implementar
Desenvolvimento com POA
Benefícios esperados
                                                 Classes para o negócio
AspectJ                                          Aspectos para crosscutting concerns
Instalação do AspectJ                            Classes de negócio não ficam cientes da existência
Joinpoints
Pointcuts                                        dos Aspectos
Adivices
Aspectos versus Classes                   Combinar concerns (weaver)
Modelagem de                                     Identificar crosscutting e core concerns
Aspectos em UML




                                                                    20/36


                                  Engenharia de Software                             Voltar    Avançar
Engenharia de Software
                                  Desenvolvimento com POA
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
                                          Classes – encapsulam os requisitos do sistema
História
POA em outras linguagens                  Aspectos – encapsulam os requisitos transversais
Motivação


Programação Orientada
                                          Weaver – acoplam os apectos e classes em um
a Aspectos                                programa
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML



                                             Figura: [Lincoln, 2009] Funcionamento da POA


                                                                 21/36


                                  Engenharia de Software                         Voltar     Avançar
Engenharia de Software
                                  Benefícios esperados
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos                                Boa modularidade
Gerenciamento de interesses com
POA
Desenvolvimento com POA                   Fácil desenvolvimento
Benefícios esperados

AspectJ
                                          Fácil manutenção
Instalação do AspectJ
Joinpoints
                                          Fácil reutilização
Pointcuts
                                                 Software “plug and play”;
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                   22/36


                                  Engenharia de Software                     Voltar   Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
                                          É uma extensão java para programar orientado a
POA
Desenvolvimento com POA
                                          aspectos
Benefícios esperados
                                          É um weaver para java
AspectJ
Instalação do AspectJ                            Pré-processador
Joinpoints
Pointcuts                                 Fácil de aprender e implementar
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                   23/36


                                  Engenharia de Software                     Voltar    Avançar
Engenharia de Software
                                  Instalação do AspectJ
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
Motivação
                                  Para instalar o AspectJ é necessário ter a máquina
Programação Orientada             virtual Java (JDK), o ambiente de desenvolvimento
a Aspectos
Gerenciamento de interesses com
                                  (Eclipse) e o plugin para o Eclipse (AJDT);
POA
Desenvolvimento com POA                   JDK – http://www.oracle.com/technetwork/
Benefícios esperados

AspectJ
                                          java/javase/downloads/index.html
Instalação do AspectJ
Joinpoints
                                          AJDT – http://download.eclipse.org/
Pointcuts
Adivices
                                          technology/ajdt/30/update
Aspectos versus Classes
                                          Eclipse – http://download.eclipse.org/
Modelagem de
Aspectos em UML                           downloald/index.html




                                                             24/36


                                  Engenharia de Software                   Voltar      Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
                                      1   Crosscutting estático – Modifica classes, interface
Gerenciamento de interesses com
POA                                       e aspectos sem modificar o comportamento do
Desenvolvimento com POA
Benefícios esperados
                                          programa.
AspectJ
Instalação do AspectJ
                                      2   Crosscutting dinâmico – Adiciona comportamento
Joinpoints                                dinamicamente ao programa através de uma regra
Pointcuts
Adivices                                  que determina a execução de uma ação.
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                               25/36


                                  Engenharia de Software                      Voltar    Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             Wildcards

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA                   * – sequência de caracteres sem pontos
Benefícios esperados

AspectJ                                   .. – sequência de caracteres
Instalação do AspectJ
Joinpoints                                + – subclasse da classe em questão
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                 26/36


                                  Engenharia de Software                       Voltar   Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             Exemplo de Wildcards

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
POA                                       pointcut finds(): call (* find*(..))
Desenvolvimento com POA
Benefícios esperados                             findCliente();
AspectJ                                          findClienteByName();
Instalação do AspectJ
Joinpoints
                                                 findClienteByCpf();
Pointcuts                                        findClienteByTelefone().
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                   27/36


                                  Engenharia de Software                       Voltar   Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             Joinpoints

Introdução                         São pontos em que os apectos interceptam as classes
História
POA em outras linguagens               call
Motivação


Programação Orientada
                                       execution
a Aspectos
Gerenciamento de interesses com
                                       initialization
POA
Desenvolvimento com POA                preinitialization
Benefícios esperados

AspectJ
                                       staticinitialization
Instalação do AspectJ
Joinpoints
                                       handler
Pointcuts
Adivices
                                       get
Aspectos versus Classes
                                       set
Modelagem de
Aspectos em UML                        args
                                       adviceexecution
                                       this
                                       target
                                                             28/36


                                  Engenharia de Software                   Voltar    Avançar
Engenharia de Software
                                  Aspectj
 Dyego Ítallo, Marcos
José, Weverson França             Pointcuts

Introdução
História
POA em outras linguagens
Motivação
                                          São um conjunto de joinpoints
Programação Orientada                     Detectam quais joinpoints devem ser interceptados
a Aspectos
Gerenciamento de interesses com
POA
                                          Podem ter ações booleanas (!, e ||) e argumentos
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                               29/36


                                  Engenharia de Software                      Voltar   Avançar
Engenharia de Software
                                  Aspectj
 Dyego Ítallo, Marcos
José, Weverson França             Pointcuts

Introdução
História
POA em outras linguagens
Motivação
                                          São um conjunto de joinpoints
Programação Orientada                     Detectam quais joinpoints devem ser interceptados
a Aspectos
Gerenciamento de interesses com
POA
                                          Podem ter ações booleanas (!, e ||) e argumentos
Desenvolvimento com POA
Benefícios esperados                      Estrutura
AspectJ
Instalação do AspectJ
                                                 pointcut nomePointcut(ListaParametros):
Joinpoints                                       «expressao»;
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                   29/36


                                  Engenharia de Software                           Voltar   Avançar
Engenharia de Software
                                  Aspectj
 Dyego Ítallo, Marcos
José, Weverson França             Pointcuts

Introdução
História
POA em outras linguagens
Motivação
                                          São um conjunto de joinpoints
Programação Orientada                     Detectam quais joinpoints devem ser interceptados
a Aspectos
Gerenciamento de interesses com
POA
                                          Podem ter ações booleanas (!, e ||) e argumentos
Desenvolvimento com POA
Benefícios esperados                      Estrutura
AspectJ
Instalação do AspectJ
                                                 pointcut nomePointcut(ListaParametros):
Joinpoints                                       «expressao»;
Pointcuts
Adivices
Aspectos versus Classes
                                   Exemplo de pointcut
Modelagem de
Aspectos em UML                    pointcut traced(Person p) : target(p) &&
                                                                call(public * set*(..)) ||
                                                                call(public * get*(..));




                                                                          29/36


                                  Engenharia de Software                                     Voltar   Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             Adivices

Introdução
História
POA em outras linguagens
Motivação
                                   São partes de códigos associados a pointcuts
Programação Orientada                  Tipos
a Aspectos
Gerenciamento de interesses com                  before
POA
Desenvolvimento com POA                          after
Benefícios esperados
                                                 around
AspectJ
Instalação do AspectJ                     Forma
Joinpoints
Pointcuts
                                                 tipoAdvice(ListaParametros) :
Adivices
Aspectos versus Classes
                                                 ListaPointCut()corpo
Modelagem de
                                                 Exemplos
Aspectos em UML




                                                                  30/36


                                  Engenharia de Software                         Voltar   Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             Adivices

Introdução
História
POA em outras linguagens
Motivação
                                   São partes de códigos associados a pointcuts
Programação Orientada                  Tipos
a Aspectos
Gerenciamento de interesses com                  before
POA
Desenvolvimento com POA                          after
Benefícios esperados
                                                 around
AspectJ
Instalação do AspectJ                     Forma
Joinpoints
Pointcuts
                                                 tipoAdvice(ListaParametros) :
Adivices
Aspectos versus Classes
                                                 ListaPointCut()corpo
Modelagem de
                                                 Exemplos
Aspectos em UML
                                                           before(param) : pointcut(param) ...
                                                           after(param) : pointcut(param) ...



                                                                         30/36


                                  Engenharia de Software                                   Voltar   Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             thisJoinPoint

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
                                          É similar ao this do Java.
POA
Desenvolvimento com POA                   Disponibiliza informações do joinpoint que está
Benefícios esperados

AspectJ
                                          sendo usado.
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                31/36


                                  Engenharia de Software                       Voltar       Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             thisJoinPoint

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
a Aspectos
Gerenciamento de interesses com
                                          É similar ao this do Java.
POA
Desenvolvimento com POA                   Disponibiliza informações do joinpoint que está
Benefícios esperados

AspectJ
                                          sendo usado.
Instalação do AspectJ
Joinpoints
                                          Exemplo:
Pointcuts
Adivices
                                                 thisJoinPoint.toString()
Aspectos versus Classes                          thisJoinPoint.getArgs()
Modelagem de
Aspectos em UML




                                                                   31/36


                                  Engenharia de Software                       Voltar       Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             Reuso

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
                                   Da mesma forma como nas classes
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                           32/36


                                  Engenharia de Software             Voltar   Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             Reuso

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
                                   Da mesma forma como nas classes
a Aspectos
                                   Reúso
Gerenciamento de interesses com
POA
Desenvolvimento com POA
                                   public abstract aspect AspectoMae {
Benefícios esperados
                                     protected abstract pointcut PointCut_um();
AspectJ
                                       // advice
Instalação do AspectJ
                                   }
Joinpoints
Pointcuts
                                   public aspect AspectoFilho extends AspectoMae{
Adivices
                                     protected pointcut PointCut_um(): call(* set*(..));
Aspectos versus Classes

Modelagem de                       }
Aspectos em UML




                                                                          32/36


                                  Engenharia de Software                                   Voltar   Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             Aspectos versus Classes

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
                                      1   Apectos e classes são similares:
a Aspectos
Gerenciamento de interesses com
                                                 Tem um tipo
POA
Desenvolvimento com POA
                                                 Trabalha com herança
Benefícios esperados
                                                 São abstrados ou concretos
AspectJ                                          Podem conter atributos e métodos
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                                   33/36


                                  Engenharia de Software                            Voltar   Avançar
Engenharia de Software
                                  AspectJ
 Dyego Ítallo, Marcos
José, Weverson França             Aspectos versus Classes

Introdução
História
POA em outras linguagens
Motivação


Programação Orientada
                                      1   Apectos e classes são similares:
a Aspectos
Gerenciamento de interesses com
                                                 Tem um tipo
POA
Desenvolvimento com POA
                                                 Trabalha com herança
Benefícios esperados
                                                 São abstrados ou concretos
AspectJ                                          Podem conter atributos e métodos
Instalação do AspectJ
Joinpoints
Pointcuts
                                      2   Aspectos são diferentes das classes:
Adivices                                         Não tem construtor nem destrutor
Aspectos versus Classes
                                                 Não são criados com new
Modelagem de
Aspectos em UML                                  Podem conter pointcuts e advices




                                                                   33/36


                                  Engenharia de Software                            Voltar   Avançar
Engenharia de Software
                                  Modelagem de Aspectos em UML
 Dyego Ítallo, Marcos
José, Weverson França             Diagrama de classes

Introdução
História
                                          pointcut
POA em outras linguagens
Motivação
                                          advice
Programação Orientada                     introduction
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                                           34/36


                                  Engenharia de Software           Voltar   Avançar
Engenharia de Software
                                  Modelagem de Aspectos em UML
 Dyego Ítallo, Marcos
José, Weverson França             Diagrama de classes

Introdução
História
                                          pointcut
POA em outras linguagens
Motivação
                                          advice
Programação Orientada                     introduction
a Aspectos
Gerenciamento de interesses com
POA
Desenvolvimento com POA
Benefícios esperados

AspectJ
Instalação do AspectJ
Joinpoints
Pointcuts
Adivices
Aspectos versus Classes

Modelagem de
Aspectos em UML




                                             Figura: Representação de um Aspecto em UML

                                                                34/36


                                  Engenharia de Software                       Voltar     Avançar
Engenharia de Software
                                  Modelagem de Aspectos em UML
 Dyego Ítallo, Marcos
José, Weverson França             Diagrama de sequência

Introdução
História
POA em outras linguagens
Motivação                                 pointcuts – devem ser representados como atores
Programação Orientada
a Aspectos
                                          do sistema. No caso de um pointcut se chamar
Gerenciamento de interesses com
POA
                                          teste. O ator é determinado como pointcut(teste)
Desenvolvimento com POA
Benefícios esperados                      advices – de acordo com sua forma de execução
AspectJ                                   antes (before) ou depois (after) de um pointcut,
Instalação do AspectJ
Joinpoints                                devem estabelecer uma ligação com o mesmo, e
Pointcuts
Adivices                                  deste ponto a diante definir a sequências das
Aspectos versus Classes
                                          operações a serem executadas
Modelagem de
Aspectos em UML                           introductions – podem ser executados normalmente
                                          a partir da inclusão de uma classe estática.


                                                                35/36


                                  Engenharia de Software                       Voltar    Avançar
Engenharia de Software
                                  Referências
 Dyego Ítallo, Marcos
José, Weverson França


Introdução
História
POA em outras linguagens
Motivação


Programação Orientada                     S.ROCHA, Lincloln. Introdução a poa e aspectj.
a Aspectos
Gerenciamento de interesses com
                                          Fortaleza: Ufc, 2009.
POA
Desenvolvimento com POA                   GOMES, Edeyson Andrade. Programação orientada
Benefícios esperados

AspectJ
                                          a aspectos. Campinas: Edeyson, 2007.
Instalação do AspectJ
Joinpoints
                                          RESENDE, Antônio Maria Pereira de; SILVA,
Pointcuts
Adivices
                                          Claudiney Calixto da. Programação orientada a
Aspectos versus Classes
                                          aspectos em java. Rio de Janeiro: Brasport, 2005.
Modelagem de
Aspectos em UML




                                                                36/36


                                  Engenharia de Software                                   Voltar

Mais conteúdo relacionado

Mais procurados

Apresentação final
Apresentação finalApresentação final
Apresentação finalvalmon
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
Programação Oritentada a Aspecto
Programação Oritentada a AspectoProgramação Oritentada a Aspecto
Programação Oritentada a AspectoBenicio Ávila
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareÁlvaro Farias Pinheiro
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto AdapterMatheus Andrade
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVAMoises Omena
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Adriano Tavares
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLRildo (@rildosan) Santos
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: AdapterMessias Batista
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoElaine Cecília Gatto
 
Programação Orientada a Aspectos - PHPDay SERPRO Curitiba
Programação Orientada a Aspectos - PHPDay SERPRO CuritibaProgramação Orientada a Aspectos - PHPDay SERPRO Curitiba
Programação Orientada a Aspectos - PHPDay SERPRO Curitibawesleyklewerton
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 

Mais procurados (20)

Educação e certificação na Plataforma .NET
Educação e certificação na Plataforma .NETEducação e certificação na Plataforma .NET
Educação e certificação na Plataforma .NET
 
Linguagem de programação C# 4 e 5
Linguagem de programação C# 4 e 5Linguagem de programação C# 4 e 5
Linguagem de programação C# 4 e 5
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Apresentação final
Apresentação finalApresentação final
Apresentação final
 
Artigo Transp Sw
Artigo Transp SwArtigo Transp Sw
Artigo Transp Sw
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Programação Oritentada a Aspecto
Programação Oritentada a AspectoProgramação Oritentada a Aspecto
Programação Oritentada a Aspecto
 
AOP - ESJUG - 2005
AOP - ESJUG - 2005AOP - ESJUG - 2005
AOP - ESJUG - 2005
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de Software
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1Modelagem Arquitetural e Visão 4+1
Modelagem Arquitetural e Visão 4+1
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UML
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: Adapter
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de Programação
 
Programação Orientada a Aspectos - PHPDay SERPRO Curitiba
Programação Orientada a Aspectos - PHPDay SERPRO CuritibaProgramação Orientada a Aspectos - PHPDay SERPRO Curitiba
Programação Orientada a Aspectos - PHPDay SERPRO Curitiba
 
Apresentação - POA
Apresentação - POAApresentação - POA
Apresentação - POA
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 

Semelhante a Egenharia de Software Orientado a Aspectos

Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHPProgramação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHPPHP Day Curitiba
 
Tech Thursday -Spring Roo
Tech Thursday -Spring RooTech Thursday -Spring Roo
Tech Thursday -Spring Roomarcosbeirigo
 
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisSimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisCaio Ribeiro Pereira
 
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Fernando Geraldo Mantoan
 
Uma experiência acadêmica com Python
Uma experiência acadêmica com PythonUma experiência acadêmica com Python
Uma experiência acadêmica com PythonHenrique Bastos
 
Engenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoEngenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoFábio Nogueira de Lucena
 
Static Code Analyzer - Part II
Static Code Analyzer - Part IIStatic Code Analyzer - Part II
Static Code Analyzer - Part IIUlisses Costa
 
Engenharia de-software-1217199594686494-9
Engenharia de-software-1217199594686494-9Engenharia de-software-1217199594686494-9
Engenharia de-software-1217199594686494-9wilsonguns
 
Qualificação MACC- Entities
Qualificação MACC- EntitiesQualificação MACC- Entities
Qualificação MACC- EntitiesMarcius Brandão
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioRalph Rassweiler
 
Monografia eng soft1_halan
Monografia eng soft1_halanMonografia eng soft1_halan
Monografia eng soft1_halanHalan Ridolphi
 
Curso Completo em APF - Analise de Ponto de Funcao
Curso Completo em APF - Analise de Ponto de FuncaoCurso Completo em APF - Analise de Ponto de Funcao
Curso Completo em APF - Analise de Ponto de FuncaoGrupo Treinar
 
Infoschema - Company Overview
Infoschema - Company OverviewInfoschema - Company Overview
Infoschema - Company OverviewRenilton Oliveira
 

Semelhante a Egenharia de Software Orientado a Aspectos (20)

Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHPProgramação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP
 
Academia do programador
Academia do programadorAcademia do programador
Academia do programador
 
Tech Thursday -Spring Roo
Tech Thursday -Spring RooTech Thursday -Spring Roo
Tech Thursday -Spring Roo
 
Reúso
ReúsoReúso
Reúso
 
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisSimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
 
AOP
AOPAOP
AOP
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao Python
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao Python
 
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
 
Uma experiência acadêmica com Python
Uma experiência acadêmica com PythonUma experiência acadêmica com Python
Uma experiência acadêmica com Python
 
Engenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoEngenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógico
 
Static Code Analyzer - Part II
Static Code Analyzer - Part IIStatic Code Analyzer - Part II
Static Code Analyzer - Part II
 
Engenharia de-software-1217199594686494-9
Engenharia de-software-1217199594686494-9Engenharia de-software-1217199594686494-9
Engenharia de-software-1217199594686494-9
 
Qualificação MACC- Entities
Qualificação MACC- EntitiesQualificação MACC- Entities
Qualificação MACC- Entities
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
Monografia eng soft1_halan
Monografia eng soft1_halanMonografia eng soft1_halan
Monografia eng soft1_halan
 
Curso Completo em APF - Analise de Ponto de Funcao
Curso Completo em APF - Analise de Ponto de FuncaoCurso Completo em APF - Analise de Ponto de Funcao
Curso Completo em APF - Analise de Ponto de Funcao
 
Infoschema - Company Overview
Infoschema - Company OverviewInfoschema - Company Overview
Infoschema - Company Overview
 
Python b1tch
Python b1tchPython b1tch
Python b1tch
 
KM Inovação - Mauro Conceição
KM Inovação - Mauro ConceiçãoKM Inovação - Mauro Conceição
KM Inovação - Mauro Conceição
 

Egenharia de Software Orientado a Aspectos

  • 1. Engenharia de Software Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Engenharia de Software Motivação Programação Orientada Orientada a Aspectos a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados Dyego Ítallo Silva Ferreira Marcos José Ferreira AspectJ Instalação do AspectJ Weverson Fraques França Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de 03 de Janeiro de 2013 Aspectos em UML 1/36 Engenharia de Software Avançar
  • 2. Engenharia de Software Roteiro Dyego Ítallo, Marcos José, Weverson França 1 Introdução Introdução História História POA em outras linguagens POA em outras linguagens Motivação Motivação Programação Orientada a Aspectos 2 Programação Orientada a Aspectos Gerenciamento de interesses com POA Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados Desenvolvimento com POA AspectJ Benefícios esperados Instalação do AspectJ Joinpoints 3 AspectJ Pointcuts Adivices Instalação do AspectJ Aspectos versus Classes Modelagem de Joinpoints Aspectos em UML Pointcuts Adivices Aspectos versus Classes 4 Modelagem de Aspectos em UML 2/36 Engenharia de Software Voltar Avançar
  • 3. Engenharia de Software História Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Motivação A Programação Orientada a Aspectos (POA) foi Programação Orientada a Aspectos criada por Gregor Kiczales (1997) quando era o Gerenciamento de interesses com POA cientista da Xerox PARC (1996 – 2002) Desenvolvimento com POA Benefícios esperados Os desenvolvedores da Xerox PARC criaram a AspectJ Instalação do AspectJ linguagem AspectJ Joinpoints Pointcuts A linguagem AspectJ é usada até hoje e é a mais Adivices Aspectos versus Classes popular linguaguem de POA Modelagem de A linguagem AspectJ é usada com Java Aspectos em UML 3/36 Engenharia de Software Voltar Avançar
  • 4. Engenharia de Software POA em outras linguagens Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Linguagem Aspecto Motivação Java AspectJ Programação Orientada a Aspectos C++ AspectC++ Gerenciamento de interesses com POA C AspectC Desenvolvimento com POA Benefícios esperados Python Aspyct AOP AspectJ NET AspectNET Instalação do AspectJ Joinpoints JavaScript Ajaxpect Pointcuts Adivices PHP PHPaspect Aspectos versus Classes Ruby AspectR Modelagem de Aspectos em UML Lua AspectLua Perl The Aspect Module 4/36 Engenharia de Software Voltar Avançar
  • 5. Engenharia de Software Motivação Dyego Ítallo, Marcos José, Weverson França Introdução Sistema de banco: Imagine que um banco, pediu para História POA em outras linguagens que fosse feito software que gerencie todas Motivação as transações bancárias. Programação Orientada 1 Quais os principais interesses? a Aspectos Gerenciamento de interesses com POA Deposito Desenvolvimento com POA Benefícios esperados Transferência AspectJ Saque Instalação do AspectJ TED Joinpoints Pointcuts DOC Adivices ... Aspectos versus Classes Modelagem de 2 Quais os interesses secundários? Aspectos em UML Auditoria; Autorização; Persistência; ... 5/36 Engenharia de Software Voltar Avançar
  • 6. Engenharia de Software Motivação Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com Classificamos os interesses do software em: POA Desenvolvimento com POA Benefícios esperados Concerns – Interesses primários (Núcleo do sistema) AspectJ Crosscutting Concerns – Interesses transversais, Instalação do AspectJ Joinpoints que abrangem vários módulos do sistema. Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 6/36 Engenharia de Software Voltar Avançar
  • 7. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Introdução História Implementações OO acoplam Concerns com os POA em outras linguagens Motivação Crosscutting Concerns Programação Orientada Quando são adicionadas ou removidas a Aspectos Gerenciamento de interesses com funcionalidades, na maior parte dos casos, é POA Desenvolvimento com POA modificado o núcleo do sistema Benefícios esperados AspectJ Muitas propriedades importantes espalham-se por Instalação do AspectJ Joinpoints vários módulos e misturam-se com outras Pointcuts Adivices propriedades de maneira intrusiva Aspectos versus Classes Modelagem de Aspectos em UML 7/36 Engenharia de Software Voltar Avançar
  • 8. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Introdução História Implementações OO acoplam Concerns com os POA em outras linguagens Motivação Crosscutting Concerns Programação Orientada Quando são adicionadas ou removidas a Aspectos Gerenciamento de interesses com funcionalidades, na maior parte dos casos, é POA Desenvolvimento com POA modificado o núcleo do sistema Benefícios esperados AspectJ Muitas propriedades importantes espalham-se por Instalação do AspectJ Joinpoints vários módulos e misturam-se com outras Pointcuts Adivices propriedades de maneira intrusiva Aspectos versus Classes Modelagem de Aspectos em UML Limitação Esses problemas dificultam a reutilização e a manutenção dos componentes do sistema. 7/36 Engenharia de Software Voltar Avançar
  • 9. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Sistema bancário: Implementar o método Gerenciamento de interesses com POA TranferenciaContas usando POO. Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 8/36 Engenharia de Software Voltar Avançar
  • 10. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Sistema bancário: Implementar o método Gerenciamento de interesses com POA TranferenciaContas usando POO. Desenvolvimento com POA Benefícios esperados Implementação do método Trasferência de Contas AspectJ Instalação do AspectJ Joinpoints public void transferir(Conta origem, Conta destino, int valor) { Pointcuts origem.debitar(valor); Adivices destino.creditar(valor); Aspectos versus Classes } Modelagem de Aspectos em UML 8/36 Engenharia de Software Voltar Avançar
  • 11. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Verificar se o usuário possui saldo suficiente. Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 9/36 Engenharia de Software Voltar Avançar
  • 12. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Verificar se o usuário possui saldo suficiente. Gerenciamento de interesses com POA Desenvolvimento com POA Implementação do método Trasferência de Contas Benefícios esperados AspectJ public void transferir(Conta origem, Conta destino, int valor) { Instalação do AspectJ if (origem.getSaldo() < valor) { Joinpoints throw new SaldoInsuficienteException(); Pointcuts } Adivices origem.debitar(valor); Aspectos versus Classes destino.creditar(valor); } Modelagem de Aspectos em UML 9/36 Engenharia de Software Voltar Avançar
  • 13. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História POA em outras linguagens Motivação Verificar se o usuário possui permissão para realizar Programação Orientada a Aspectos a transação Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 10/36 Engenharia de Software Voltar Avançar
  • 14. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História POA em outras linguagens Motivação Verificar se o usuário possui permissão para realizar Programação Orientada a Aspectos a transação Gerenciamento de interesses com POA Desenvolvimento com POA Implementação do método Trasferência de Contas Benefícios esperados AspectJ public void transferir(Conta origem, Conta destino, int valor){ Instalação do AspectJ if (!getUsuario().hasPermissao(OP_TRANSF)){ Joinpoints throw new PermissaoException(); Pointcuts } Adivices if (origem.getSaldo() < valor) { Aspectos versus Classes throw new SaldoInsuficienteException(); } Modelagem de origem.debitar(valor); Aspectos em UML destino.creditar(valor); } 10/36 Engenharia de Software Voltar Avançar
  • 15. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História POA em outras linguagens Motivação Verificar se o valor do dinheiro é negativo Programação Orientada a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 11/36 Engenharia de Software Voltar Avançar
  • 16. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História POA em outras linguagens Motivação Verificar se o valor do dinheiro é negativo Programação Orientada a Aspectos Implementação do método Trasferência de Contas Gerenciamento de interesses com POA Desenvolvimento com POA public void transferir(Conta origem, Conta destino, int valor){ Benefícios esperados if (valor < 0) { AspectJ throw new TransferenciaNegativaException(); } Instalação do AspectJ if (!getUsuario().hasPermissao(OP_TRANSF)){ Joinpoints throw new PermissaoException(); Pointcuts } Adivices if (origem.getSaldo() < valor) { Aspectos versus Classes throw new SaldoInsuficienteException(); Modelagem de } Aspectos em UML origem.debitar(valor); destino.creditar(valor); } 11/36 Engenharia de Software Voltar Avançar
  • 17. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História Previnir perda de dados POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 12/36 Engenharia de Software Voltar Avançar
  • 18. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História Previnir perda de dados POA em outras linguagens Motivação Implementação do método Trasferência de Contas Programação Orientada a Aspectos public void transferir(Conta origem, Conta destino, int valor){ Gerenciamento de interesses com if (valor < 0) { POA throw new TransferenciaNegativaException(); Desenvolvimento com POA } Benefícios esperados if (!getUsuario().hasPermissao(OP_TRANSF)){ throw new PermissaoException(); AspectJ } Instalação do AspectJ if (origem.getSaldo() < valor) { Joinpoints throw new SaldoInsuficienteException(); Pointcuts } Adivices Aspectos versus Classes DatabaseTransacao dt = new DatabaseTransacao(); Modelagem de try { Aspectos em UML origem.debitar(valor); destino.creditar(valor); dt.enviar(origem, destino); }catch(Exception e) { dt.reverter(); } } 12/36 Engenharia de Software Voltar Avançar
  • 19. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História Adicionando ao log de dados da aplicação POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 13/36 Engenharia de Software Voltar Avançar
  • 20. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França Exemplo prático Introdução História Adicionando ao log de dados da aplicação POA em outras linguagens Motivação Implementação do método Trasferência de Contas Programação Orientada a Aspectos public void transferir(Conta origem, Conta destino, int valor){ Gerenciamento de interesses com if (valor < 0) { POA throw new TransferenciaNegativaException(); Desenvolvimento com POA } Benefícios esperados if (!getUsuario().hasPermissao(OP_TRANSF)){ throw new PermissaoException(); AspectJ } Instalação do AspectJ if (origem.getSaldo() < valor) { Joinpoints throw new SaldoInsuficienteException(); Pointcuts } Adivices Aspectos versus Classes DatabaseTransacao dt = new DatabaseTransacao(); Modelagem de try { Aspectos em UML origem.debitar(valor); destino.creditar(valor); dt.enviar(origem, destino); logger.logOperacao(OP_TRANSF, origem, destino, valor); }catch(Exception e) { dt.reverter(); logger.logErro(OP_TRANSF, e.getMenssage); } } 13/36 Engenharia de Software Voltar Avançar
  • 21. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França O que podemos extrair desse exemplo? Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 14/36 Engenharia de Software Voltar Avançar
  • 22. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França O que podemos extrair desse exemplo? Introdução História POA em outras linguagens O código perdeu elegância Motivação Programação Orientada a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 14/36 Engenharia de Software Voltar Avançar
  • 23. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França O que podemos extrair desse exemplo? Introdução História POA em outras linguagens O código perdeu elegância Motivação O código perdeu simplicidade Programação Orientada a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 14/36 Engenharia de Software Voltar Avançar
  • 24. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França O que podemos extrair desse exemplo? Introdução História POA em outras linguagens O código perdeu elegância Motivação O código perdeu simplicidade Programação Orientada a Aspectos O código da regra do negócio foi voltado para Gerenciamento de interesses com POA outros objetivos (misturado) Desenvolvimento com POA Benefícios esperados Verificações AspectJ Segurança Instalação do AspectJ Joinpoints Log de dados Pointcuts Persistência de dados Adivices Aspectos versus Classes Modelagem de Aspectos em UML 14/36 Engenharia de Software Voltar Avançar
  • 25. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França O que podemos extrair desse exemplo? Introdução História POA em outras linguagens O código perdeu elegância Motivação O código perdeu simplicidade Programação Orientada a Aspectos O código da regra do negócio foi voltado para Gerenciamento de interesses com POA outros objetivos (misturado) Desenvolvimento com POA Benefícios esperados Verificações AspectJ Segurança Instalação do AspectJ Joinpoints Log de dados Pointcuts Persistência de dados Adivices Aspectos versus Classes Código redundante Modelagem de Aspectos em UML 14/36 Engenharia de Software Voltar Avançar
  • 26. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França O que podemos extrair desse exemplo? Introdução História POA em outras linguagens O código perdeu elegância Motivação O código perdeu simplicidade Programação Orientada a Aspectos O código da regra do negócio foi voltado para Gerenciamento de interesses com POA outros objetivos (misturado) Desenvolvimento com POA Benefícios esperados Verificações AspectJ Segurança Instalação do AspectJ Joinpoints Log de dados Pointcuts Persistência de dados Adivices Aspectos versus Classes Código redundante Modelagem de Aspectos em UML Código de difícil manutenção 14/36 Engenharia de Software Voltar Avançar
  • 27. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França O que podemos extrair desse exemplo? Introdução História POA em outras linguagens O código perdeu elegância Motivação O código perdeu simplicidade Programação Orientada a Aspectos O código da regra do negócio foi voltado para Gerenciamento de interesses com POA outros objetivos (misturado) Desenvolvimento com POA Benefícios esperados Verificações AspectJ Segurança Instalação do AspectJ Joinpoints Log de dados Pointcuts Persistência de dados Adivices Aspectos versus Classes Código redundante Modelagem de Aspectos em UML Código de difícil manutenção Código de difícil compreensão 14/36 Engenharia de Software Voltar Avançar
  • 28. Engenharia de Software Problemas da POO Dyego Ítallo, Marcos José, Weverson França O que podemos extrair desse exemplo? Introdução História POA em outras linguagens O código perdeu elegância Motivação O código perdeu simplicidade Programação Orientada a Aspectos O código da regra do negócio foi voltado para Gerenciamento de interesses com POA outros objetivos (misturado) Desenvolvimento com POA Benefícios esperados Verificações AspectJ Segurança Instalação do AspectJ Joinpoints Log de dados Pointcuts Persistência de dados Adivices Aspectos versus Classes Código redundante Modelagem de Aspectos em UML Código de difícil manutenção Código de difícil compreensão Código de difícil reutilização 14/36 Engenharia de Software Voltar Avançar
  • 29. Engenharia de Software Causa dos problemas da POO Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Figura: [Lincoln, 2009] Projeto antes dos requisitos Aspectos em UML transversais 15/36 Engenharia de Software Voltar Avançar
  • 30. Engenharia de Software Causa dos problemas da POO Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML Figura: [Lincoln, 2009] Projeto depois dos requisitos transversais 16/36 Engenharia de Software Voltar Avançar
  • 31. Engenharia de Software Causa dos problemas da POO Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML Figura: [Lincoln, 2009] Problema multidimensinal 17/36 Engenharia de Software Voltar Avançar
  • 32. Engenharia de Software Programação Orientada a Aspectos Dyego Ítallo, Marcos José, Weverson França Introdução História A programação Orientada a Aspectos (POA) é uma POA em outras linguagens Motivação nova metodologia que: Programação Orientada a Aspectos Separa os interesses, responsábilidades e requisistos Gerenciamento de interesses com POA (Concerns) de um sistema Desenvolvimento com POA Benefícios esperados A modularização dos Aspectos produz uma AspectJ arquitetura fácil de projetar, implementar e manter Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 18/36 Engenharia de Software Voltar Avançar
  • 33. Engenharia de Software Programação Orientada a Aspectos Dyego Ítallo, Marcos José, Weverson França Introdução História A programação Orientada a Aspectos (POA) é uma POA em outras linguagens Motivação nova metodologia que: Programação Orientada a Aspectos Separa os interesses, responsábilidades e requisistos Gerenciamento de interesses com POA (Concerns) de um sistema Desenvolvimento com POA Benefícios esperados A modularização dos Aspectos produz uma AspectJ arquitetura fácil de projetar, implementar e manter Instalação do AspectJ Joinpoints Pointcuts Adivices POO X POA Aspectos versus Classes A POA não veio para substituir a POO, e sim para Modelagem de Aspectos em UML complementá-la, pois a POA usada sozinha não traz benefícios para o projeto de software. 18/36 Engenharia de Software Voltar Avançar
  • 34. Engenharia de Software Gerenciamento de interesses (Concerns) Dyego Ítallo, Marcos José, Weverson França Introdução História Um Concern é um requisito específico de um sistema. POA em outras linguagens Existem dois tipos de Concern, são eles: Motivação Programação Orientada 1 Core Concerns – são os requisitos das a Aspectos Gerenciamento de interesses com funcionalidades centrais de um módulo (núcleo) POA Desenvolvimento com POA Benefícios esperados 2 Crosscutting Concerns – são os requistos das AspectJ funcionalidades periférias do sistemas, onde, são Instalação do AspectJ Joinpoints usados em diversos módulos do sistema Pointcuts Adivices Em um projeto desenvolvido com POA, o engenheiro Aspectos versus Classes deve se preocupar durante todo o projeto com a Modelagem de Aspectos em UML separação de interesses (separation of concerns). Os interesses transversais são encapsulados pelos aspectos. 19/36 Engenharia de Software Voltar Avançar
  • 35. Engenharia de Software Programação Orientada a Aspectos Dyego Ítallo, Marcos José, Weverson França Desenvolvimento com POA Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Identificar concerns Gerenciamento de interesses com POA Implementar Desenvolvimento com POA Benefícios esperados Classes para o negócio AspectJ Aspectos para crosscutting concerns Instalação do AspectJ Classes de negócio não ficam cientes da existência Joinpoints Pointcuts dos Aspectos Adivices Aspectos versus Classes Combinar concerns (weaver) Modelagem de Identificar crosscutting e core concerns Aspectos em UML 20/36 Engenharia de Software Voltar Avançar
  • 36. Engenharia de Software Desenvolvimento com POA Dyego Ítallo, Marcos José, Weverson França Introdução Classes – encapsulam os requisitos do sistema História POA em outras linguagens Aspectos – encapsulam os requisitos transversais Motivação Programação Orientada Weaver – acoplam os apectos e classes em um a Aspectos programa Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML Figura: [Lincoln, 2009] Funcionamento da POA 21/36 Engenharia de Software Voltar Avançar
  • 37. Engenharia de Software Benefícios esperados Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Boa modularidade Gerenciamento de interesses com POA Desenvolvimento com POA Fácil desenvolvimento Benefícios esperados AspectJ Fácil manutenção Instalação do AspectJ Joinpoints Fácil reutilização Pointcuts Software “plug and play”; Adivices Aspectos versus Classes Modelagem de Aspectos em UML 22/36 Engenharia de Software Voltar Avançar
  • 38. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com É uma extensão java para programar orientado a POA Desenvolvimento com POA aspectos Benefícios esperados É um weaver para java AspectJ Instalação do AspectJ Pré-processador Joinpoints Pointcuts Fácil de aprender e implementar Adivices Aspectos versus Classes Modelagem de Aspectos em UML 23/36 Engenharia de Software Voltar Avançar
  • 39. Engenharia de Software Instalação do AspectJ Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Motivação Para instalar o AspectJ é necessário ter a máquina Programação Orientada virtual Java (JDK), o ambiente de desenvolvimento a Aspectos Gerenciamento de interesses com (Eclipse) e o plugin para o Eclipse (AJDT); POA Desenvolvimento com POA JDK – http://www.oracle.com/technetwork/ Benefícios esperados AspectJ java/javase/downloads/index.html Instalação do AspectJ Joinpoints AJDT – http://download.eclipse.org/ Pointcuts Adivices technology/ajdt/30/update Aspectos versus Classes Eclipse – http://download.eclipse.org/ Modelagem de Aspectos em UML downloald/index.html 24/36 Engenharia de Software Voltar Avançar
  • 40. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos 1 Crosscutting estático – Modifica classes, interface Gerenciamento de interesses com POA e aspectos sem modificar o comportamento do Desenvolvimento com POA Benefícios esperados programa. AspectJ Instalação do AspectJ 2 Crosscutting dinâmico – Adiciona comportamento Joinpoints dinamicamente ao programa através de uma regra Pointcuts Adivices que determina a execução de uma ação. Aspectos versus Classes Modelagem de Aspectos em UML 25/36 Engenharia de Software Voltar Avançar
  • 41. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Wildcards Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA * – sequência de caracteres sem pontos Benefícios esperados AspectJ .. – sequência de caracteres Instalação do AspectJ Joinpoints + – subclasse da classe em questão Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 26/36 Engenharia de Software Voltar Avançar
  • 42. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Exemplo de Wildcards Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com POA pointcut finds(): call (* find*(..)) Desenvolvimento com POA Benefícios esperados findCliente(); AspectJ findClienteByName(); Instalação do AspectJ Joinpoints findClienteByCpf(); Pointcuts findClienteByTelefone(). Adivices Aspectos versus Classes Modelagem de Aspectos em UML 27/36 Engenharia de Software Voltar Avançar
  • 43. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Joinpoints Introdução São pontos em que os apectos interceptam as classes História POA em outras linguagens call Motivação Programação Orientada execution a Aspectos Gerenciamento de interesses com initialization POA Desenvolvimento com POA preinitialization Benefícios esperados AspectJ staticinitialization Instalação do AspectJ Joinpoints handler Pointcuts Adivices get Aspectos versus Classes set Modelagem de Aspectos em UML args adviceexecution this target 28/36 Engenharia de Software Voltar Avançar
  • 44. Engenharia de Software Aspectj Dyego Ítallo, Marcos José, Weverson França Pointcuts Introdução História POA em outras linguagens Motivação São um conjunto de joinpoints Programação Orientada Detectam quais joinpoints devem ser interceptados a Aspectos Gerenciamento de interesses com POA Podem ter ações booleanas (!, e ||) e argumentos Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 29/36 Engenharia de Software Voltar Avançar
  • 45. Engenharia de Software Aspectj Dyego Ítallo, Marcos José, Weverson França Pointcuts Introdução História POA em outras linguagens Motivação São um conjunto de joinpoints Programação Orientada Detectam quais joinpoints devem ser interceptados a Aspectos Gerenciamento de interesses com POA Podem ter ações booleanas (!, e ||) e argumentos Desenvolvimento com POA Benefícios esperados Estrutura AspectJ Instalação do AspectJ pointcut nomePointcut(ListaParametros): Joinpoints «expressao»; Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 29/36 Engenharia de Software Voltar Avançar
  • 46. Engenharia de Software Aspectj Dyego Ítallo, Marcos José, Weverson França Pointcuts Introdução História POA em outras linguagens Motivação São um conjunto de joinpoints Programação Orientada Detectam quais joinpoints devem ser interceptados a Aspectos Gerenciamento de interesses com POA Podem ter ações booleanas (!, e ||) e argumentos Desenvolvimento com POA Benefícios esperados Estrutura AspectJ Instalação do AspectJ pointcut nomePointcut(ListaParametros): Joinpoints «expressao»; Pointcuts Adivices Aspectos versus Classes Exemplo de pointcut Modelagem de Aspectos em UML pointcut traced(Person p) : target(p) && call(public * set*(..)) || call(public * get*(..)); 29/36 Engenharia de Software Voltar Avançar
  • 47. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Adivices Introdução História POA em outras linguagens Motivação São partes de códigos associados a pointcuts Programação Orientada Tipos a Aspectos Gerenciamento de interesses com before POA Desenvolvimento com POA after Benefícios esperados around AspectJ Instalação do AspectJ Forma Joinpoints Pointcuts tipoAdvice(ListaParametros) : Adivices Aspectos versus Classes ListaPointCut()corpo Modelagem de Exemplos Aspectos em UML 30/36 Engenharia de Software Voltar Avançar
  • 48. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Adivices Introdução História POA em outras linguagens Motivação São partes de códigos associados a pointcuts Programação Orientada Tipos a Aspectos Gerenciamento de interesses com before POA Desenvolvimento com POA after Benefícios esperados around AspectJ Instalação do AspectJ Forma Joinpoints Pointcuts tipoAdvice(ListaParametros) : Adivices Aspectos versus Classes ListaPointCut()corpo Modelagem de Exemplos Aspectos em UML before(param) : pointcut(param) ... after(param) : pointcut(param) ... 30/36 Engenharia de Software Voltar Avançar
  • 49. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França thisJoinPoint Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com É similar ao this do Java. POA Desenvolvimento com POA Disponibiliza informações do joinpoint que está Benefícios esperados AspectJ sendo usado. Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 31/36 Engenharia de Software Voltar Avançar
  • 50. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França thisJoinPoint Introdução História POA em outras linguagens Motivação Programação Orientada a Aspectos Gerenciamento de interesses com É similar ao this do Java. POA Desenvolvimento com POA Disponibiliza informações do joinpoint que está Benefícios esperados AspectJ sendo usado. Instalação do AspectJ Joinpoints Exemplo: Pointcuts Adivices thisJoinPoint.toString() Aspectos versus Classes thisJoinPoint.getArgs() Modelagem de Aspectos em UML 31/36 Engenharia de Software Voltar Avançar
  • 51. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Reuso Introdução História POA em outras linguagens Motivação Programação Orientada Da mesma forma como nas classes a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 32/36 Engenharia de Software Voltar Avançar
  • 52. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Reuso Introdução História POA em outras linguagens Motivação Programação Orientada Da mesma forma como nas classes a Aspectos Reúso Gerenciamento de interesses com POA Desenvolvimento com POA public abstract aspect AspectoMae { Benefícios esperados protected abstract pointcut PointCut_um(); AspectJ // advice Instalação do AspectJ } Joinpoints Pointcuts public aspect AspectoFilho extends AspectoMae{ Adivices protected pointcut PointCut_um(): call(* set*(..)); Aspectos versus Classes Modelagem de } Aspectos em UML 32/36 Engenharia de Software Voltar Avançar
  • 53. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Aspectos versus Classes Introdução História POA em outras linguagens Motivação Programação Orientada 1 Apectos e classes são similares: a Aspectos Gerenciamento de interesses com Tem um tipo POA Desenvolvimento com POA Trabalha com herança Benefícios esperados São abstrados ou concretos AspectJ Podem conter atributos e métodos Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 33/36 Engenharia de Software Voltar Avançar
  • 54. Engenharia de Software AspectJ Dyego Ítallo, Marcos José, Weverson França Aspectos versus Classes Introdução História POA em outras linguagens Motivação Programação Orientada 1 Apectos e classes são similares: a Aspectos Gerenciamento de interesses com Tem um tipo POA Desenvolvimento com POA Trabalha com herança Benefícios esperados São abstrados ou concretos AspectJ Podem conter atributos e métodos Instalação do AspectJ Joinpoints Pointcuts 2 Aspectos são diferentes das classes: Adivices Não tem construtor nem destrutor Aspectos versus Classes Não são criados com new Modelagem de Aspectos em UML Podem conter pointcuts e advices 33/36 Engenharia de Software Voltar Avançar
  • 55. Engenharia de Software Modelagem de Aspectos em UML Dyego Ítallo, Marcos José, Weverson França Diagrama de classes Introdução História pointcut POA em outras linguagens Motivação advice Programação Orientada introduction a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML 34/36 Engenharia de Software Voltar Avançar
  • 56. Engenharia de Software Modelagem de Aspectos em UML Dyego Ítallo, Marcos José, Weverson França Diagrama de classes Introdução História pointcut POA em outras linguagens Motivação advice Programação Orientada introduction a Aspectos Gerenciamento de interesses com POA Desenvolvimento com POA Benefícios esperados AspectJ Instalação do AspectJ Joinpoints Pointcuts Adivices Aspectos versus Classes Modelagem de Aspectos em UML Figura: Representação de um Aspecto em UML 34/36 Engenharia de Software Voltar Avançar
  • 57. Engenharia de Software Modelagem de Aspectos em UML Dyego Ítallo, Marcos José, Weverson França Diagrama de sequência Introdução História POA em outras linguagens Motivação pointcuts – devem ser representados como atores Programação Orientada a Aspectos do sistema. No caso de um pointcut se chamar Gerenciamento de interesses com POA teste. O ator é determinado como pointcut(teste) Desenvolvimento com POA Benefícios esperados advices – de acordo com sua forma de execução AspectJ antes (before) ou depois (after) de um pointcut, Instalação do AspectJ Joinpoints devem estabelecer uma ligação com o mesmo, e Pointcuts Adivices deste ponto a diante definir a sequências das Aspectos versus Classes operações a serem executadas Modelagem de Aspectos em UML introductions – podem ser executados normalmente a partir da inclusão de uma classe estática. 35/36 Engenharia de Software Voltar Avançar
  • 58. Engenharia de Software Referências Dyego Ítallo, Marcos José, Weverson França Introdução História POA em outras linguagens Motivação Programação Orientada S.ROCHA, Lincloln. Introdução a poa e aspectj. a Aspectos Gerenciamento de interesses com Fortaleza: Ufc, 2009. POA Desenvolvimento com POA GOMES, Edeyson Andrade. Programação orientada Benefícios esperados AspectJ a aspectos. Campinas: Edeyson, 2007. Instalação do AspectJ Joinpoints RESENDE, Antônio Maria Pereira de; SILVA, Pointcuts Adivices Claudiney Calixto da. Programação orientada a Aspectos versus Classes aspectos em java. Rio de Janeiro: Brasport, 2005. Modelagem de Aspectos em UML 36/36 Engenharia de Software Voltar