SlideShare une entreprise Scribd logo
1  sur  69
Télécharger pour lire hors ligne
Programação
Orientada a
Aspectos em PHP



Palestrante: Flávio Gomes da Silva Lisboa
Flávio Gomes da Silva Lisboa
●   www.fgsl.eti.br
●   @fgsl
●   www.facebook.com/flaviogomeslisboa
Flávio Gomes da Silva Lisboa
●   www.fgsl.eti.br
●   @fgsl
●   www.facebook.com/flaviogomeslisboa
O Serpro
●   O Serviço Federal de Processamento de Dados -
    SERPRO é uma empresa de 45 anos, vinculada ao
    Ministério da Fazenda, considerada uma das maiores
    Organizações do setor de prestação de serviços em
    Tecnologia da Informação e Comunicações para o
    setor público, na América Latina.
●   O Serpro faz parte do Comitê Técnico para
    Implementação do Software Livre no Governo.
●   O Serpro já possui dois projetos de software livre
    disponíveis no Portal do Software Público e planeja
    incluir outros.
Programação Orientada a Aspectos em PHP


PHP no Serpro
Utilizado em sistemas corporativos da empresa, como
avaliação de funcionários, agendamento nacional de
recursos e controle do ciclo de vida de tecnologia.
Utilizado em sistemas para clientes, como Presidência
da República e Incra.
Padrão de desenvolvimento de aplicações da
superintendência de operações
Utilizado no monitoramento de recursos de TI (Zabbix)
Utilizado na suíte de comunicação
Utilizado nos sistemas de colaboração
Utilizado no rastreamento de bugs e requisição de
novas
Utilizado no ensino a distância (Moodle)
Programação Orientada a Aspectos em PHP


Agenda



O que são aspectos
Pra que servem
Como aplicá-los no PHP
Quais as novidades sobre isso na versão 5.4 do PHP




       Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP




O que
são
aspectos
   Programação Orientada a Aspectos em PHP
Uma
questão
semelhante
foi feita
no passado
Programação Orientada a Aspectos em PHP




O que
são
objetos
   Programação Orientada a Aspectos em PHP
E outra
similar
foi feita
ainda antes
Programação Orientada a Aspectos em PHP




O que
são
funções
   Programação Orientada a Aspectos em PHP
As respostas
  Programação Orientada a Aspectos em PHP




clássicas não
parecem ter relação
entre si....

    Programação Orientada a Aspectos em PHP
Funções
 Programação Orientada a Aspectos em PHP




   Programação Orientada a Aspectos em PHP
Uma função associa
   Programação Orientada a Aspectos em PHP


o argumento conhecido
como entrada com o
valor da função conhecido
como saída



     Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP




  Programação Orientada a Aspectos em PHP
Objetos
  Programação Orientada a Aspectos em PHP




    Programação Orientada a Aspectos em PHP
“Um objeto é uma coisa”
  Programação Orientada a Aspectos em PHP




                       Scott Ambler
    Programação Orientada a Aspectos em PHP
“Um objeto é qualquer coisa”
   Programação Orientada a Aspectos em PHP




                          Scott Ambler
       Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP




  Programação Orientada a Aspectos em PHP
Aspectos
  Programação Orientada a Aspectos em PHP




                       Arte de Alex Rezende




    Programação Orientada a Aspectos em PHP
“UmProgramação Orientada a Aspectos em PHP
     aspecto é uma característica
ligada a muitas partes de um
programa“




       Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP




  Programação Orientada a Aspectos em PHP
“Qual a semelhança entre PHP
    Programação Orientada a Aspectos em um

corvo e uma escrivaninha?”




        Programação Orientada a Aspectos em PHP
Funções
    Programação Orientada a Aspectos em PHP




     Objetos
                       Aspectos
 Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP
Todo código é de execução sequencial




    Programação Orientada a Aspectos em PHP
Para alterar a sequência, é preciso dar um salto




        Programação Orientada a Aspectos em PHP
Ou um goto...




        Programação Orientada a Aspectos em PHP
Que alguns gostam...




       Programação Orientada a Aspectos em PHP
E outros demonizam...




       Programação Orientada a Aspectos em PHP
Mas independente disso, ele é feito
internamente por todas as linguagens de
programação que permitam
estruturas de decisão e laços de repetição




        Programação Orientada a Aspectos em PHP
E isso inclui a versão atual do PHP




        Programação Orientada a Aspectos em PHP
“Mas qual a Orientada a Aspectos em PHP a
    Programação semelhança entre

função, o objeto e o aspecto?”




       Programação Orientada a Aspectos em PHP
Reuso...




           Programação Orientada a Aspectos em PHP
Funções são blocos de código reusáveis.

Classes são blocos de código reusáveis.

Aspectos são blocos de código reusáveis.




        Programação Orientada a Aspectos em PHP
É tudo a mesma coisa, então?




       Programação Orientada a Aspectos em PHP
Na verdade, é uma evolução de reuso
Eu disse uma evolução de reuso, entendeu?
Evolução da Programação

Mais modularidade,
Mais reusabilidade,
Mais evolutibilidade


                                                 Programação
                                                 Orientada a Notificações
                                        Programação
                                        Orientada a Aspectos
                                 Programação
                                 Orientada a Objetos
                          Programação
                          Modular
                   Programação
                   Procedural
          Programação
          Estruturada
   Linguagem
   de Máquina
Programação Orientada a Objetos


●   Tenta aproximar a modelagem do sistema com o negócio do cliente
●   Facilita a criação de abstrações
●   Sua estrutura induz ao encapsulamento dos dados
●   Facilita o reuso de componentes (ao criar componentes reusáveis)
●   Permite a aplicação de vários padrões de projeto
●   Facilita a manutenção


A função não some na programação orientada a
objetos, ela evolui para o método de classe ou de
objeto.

O método, diferente da função, tem um dono.
Existe um agente para a ação.
Exemplo de reuso com classes
Características de um software
                   bem construído
●   Os módulos (blocos de código) tem um alto grau de coesão, o que
    significa que cada elemento em uma unidade do programa é
    essencial para aquela unidade atingir seu objetivo.
●   As interações ou outros relacionamentos entre dois módulos no
    mesmo nível de abstração são tão fracas quanto possíveis.
●   Os interesses no software ficam separados.
    ●   Módulos coesos tornam as mudanças mais localizadas. Não é preciso alterar
        vários pontos do software, apenas um.
    ●   O fraco acoplamento torna os módulos mais independentes e facilita o reuso,
        ao tratá-los como componentes.
Mas a Orientação a Objetos tem limites

●   Ela não trata interesses transversais
Reuso limitado em OOP
●   A arma de reuso da orientação de objetos é a herança de classes.
●   Algumas linguagens limitam a herança (caso de PHP) de modo que uma
    classe filha tem apenas uma classe mãe.
●   A herança é total. Tudo o que for público e protegido é herdado.
●   Mas existem trechos de código que se repetem, dentro de métodos
    diferentes.
●   Esses trechos de código ficam espalhados em vários métodos de várias
    classes.
●   Se não existe herança de método, quanto menos de trecho!
A Tirania da Decomposição Dominante
●   O programa pode ser modularizado de uma forma
    somente a cada vez, e muitos tipos de interesses que
    não se alinham com essa modularização terminam
    espalhados por muitos módulos e emaranhados uns
    com os outros.
    ●   Sebastian Bergmann
Será que meu programa tem isso?
●   Se for PHP, você pode verificar um dos sintomas com
    a ferramenta PHP Copy & Paste Detector (phpcpd).
A Orientação a Aspectos vem para
    resolver esses problemas
Para que serve a Orientação a Aspectos

●   Para modularizar interesses transversais do software em unidades
    chamadas aspectos.
●   Interesses transversais geralmente são os trechos de código
    espalhados pela aplicação, como persistência, auditoria, controle de
    exceções, e quaisquer sequências que façam parte de métodos mas
    que não consigam ser transformados em métodos, ou que não
    possam ser herdados por todos que precisam deles.
●   A Orientação a Aspectos não substitui a Orientação a Objetos. Ela é
    uma extensão que lida apenas com os interesses transversais.

        Classe A        Classe B         Classe C        Classe D
Orientação a Aspectos é
injeção de dependência
Quais são as estruturas da AOP?

●   Joinpoints
●   São as instruções no fluxo do programa onde aspectos podem ser
    injetados
●   Podem ser execuções de métodos, acesso a atributos, construções
    de objetos, controle de exceções e destruições de objetos.
●   Pointcuts
●   São as expressões que utilizam os joinpoints para identificar os
    pontos do programa onde será injetado determinado código
    (aspecto)
●   Os pointcuts usam wildcards (curingas) para criar expressões
    genéricas.
    ●   * Todos os existentes
    ●   + Todos com subclasses
    ●   || “ou” para combinar
Quais são as estruturas da AOP?

●   Advices
●   São os comandos da AOP que introduzem código nos
    pointcuts
●   Há três tipos:
    ●   Before
    ●   Around
    ●   After
●   Inter-Type Declaration
●   É um tipo de declaração que introduz atributos, constantes e
    métodos em classes, ou aspectos, existentes.
Quais são as estruturas da AOP?

●   Weaver
●   É uma espécie de pré-compilador (ou compilador mesmo, no
    caso do PHP) que junta os aspectos com o código-fonte para
    gerar arquivos únicos, que formarão o programa final.
AOP é controle

●   O emaranhado não desaparece. Ele é deslocado para o código
    final. Mas na fase de desenvolvimento, a estrutura fica muito
    mais organizada.
Como
 Programação Orientada a Aspectos em PHP




aplicar
aspectos
no PHP?
   Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP

●   Você pode usar o projeto phpAspect (code.google.com/p/apdt)
●   Com ele é possível desenvolver com orientação a aspectos usando o
    Eclipse.
●   O projeto fornece um plugin (apdt) com um weaver. Você pode baixar
    pela URL
    http://apdt.googlecode.com/svn/trunk/org.phpaspect.apdt.updatesite/




             Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP




        Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP




        Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP

<?php
class Catalog{
private static $priceList = array(
'Largo Winch' => 9.31,
'Asterix' => 8.46,
'XIII' => 8.70);

public static function getPrice($reference)
{
return self::$priceList[$reference];
}
}


        Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP

 <?php
 require('Catalog.php');
 class Order{
     private $items = array();
     private $amount = 0;

     public function addItem($reference, $quantity){
       $this->items[] = array($reference, $quantity);
       $this->amount +=
 $quantity*Catalog::getPrice($reference);
     }

     public function getAmount(){
       return $this->amount;
     }
 }




        Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP
<?php
require('Order.php');
$myOrder = new Order;
$myOrder->addItem('Largo Winch', 1);
$myOrder->addItem('Asterix', 2);




        Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP




        Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP




        Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP
<?php
require_once 'PHPAspect/Model/Aspect.php';

class Log extends Aspect
{
}
?>




        Programação Orientada a Aspectos em PHP
<?php
    require_once 'PHPAspect/Model/Aspect.php';
Programação Orientada a Aspectos em PHP
    class Log extends Aspect
    {
    /**
    * @After(new(Order))
    */
    public function logNewOrder()
    {
    echo "New Ordern";
    }

    /**
     * @After(call(Order->addItem))
     */
    public function logTotalAmount(Joinpoint $thisJoinpoint)
    {
    printf("Total amount of the cart : %.2f eurosn",
    $thisJoinpoint->getSource()->getAmount());
    }

    /**
     * @After(exec(Order::addItem))
     */
    public function logAddItem(Joinpoint $thisJoinpoint){
    list($reference, $quantity) = $thisJoinpoint->getArgs();
    printf("%d %s added to the cartn", $quantity, $reference);
    }
    }
    ?>    Programação Orientada a Aspectos em PHP
Quais as
  Programação Orientada a Aspectos em PHP



novidades
sobre isso
na versão
5.4 do PHP

    Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP

●   A versão 5.4 do PHP tem um novo aspecto interessante de
    programação. Mas não é o aspecto da orientação a
    aspectos.
●   No entanto, é uma construção que também tem como
    objetivo melhorar o reuso.
●   PHP 5.4 tem uma estrutura chamada trait (traço), que
    consiste em um bloco de código que contém métodos.
●   Esse bloco pode ser usado por várias classes, que podem
    herdar de superclasses diferentes.
●   Essa construção abre maiores possibilidades de reuso. E
    abre uma possibilidade de tratar os interesses
    transversais com uma construção nativa do PHP.


            Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP

trait [nome] {
[bloco de código]
}


class [nome] extends [nome] {
    use [nome];
}



        Programação Orientada a Aspectos em PHP
Programação Orientada a Aspectos em PHP




     Obrigado!
●   @fgsl
●    www.fgsl.eti.br




            Programação Orientada a Aspectos em PHP

Contenu connexe

Tendances

Paradigmas de Linguagens de Programação
Paradigmas de Linguagens de ProgramaçãoParadigmas de Linguagens de Programação
Paradigmas de Linguagens de ProgramaçãoFabio Spanhol
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Valmon Gaudencio
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativoTony Alexander Hild
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcionalPéricles Miranda
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de ProgramaçãoNatanael Simões
 
Linguágens de programação
Linguágens de programaçãoLinguágens de programação
Linguágens de programaçãoAlbertoVach
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a AspectosRicardo Terra
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Adriano Teixeira de Souza
 
Linguagem de programação
Linguagem de programação Linguagem de programação
Linguagem de programação Marcos Gregorio
 
Aula01 estrutura de dados - (começando as brincadeiras)
Aula01   estrutura de dados - (começando as brincadeiras)Aula01   estrutura de dados - (começando as brincadeiras)
Aula01 estrutura de dados - (começando as brincadeiras)Cleyton Fábio
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programaçãoessa
 
Treinamentos Avançados em Informática
Treinamentos Avançados em InformáticaTreinamentos Avançados em Informática
Treinamentos Avançados em InformáticaEder Carneiro
 

Tendances (18)

Paradigmas de Linguagens de Programação
Paradigmas de Linguagens de ProgramaçãoParadigmas de Linguagens de Programação
Paradigmas de Linguagens de Programação
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de Programação
 
Linguágens de programação
Linguágens de programaçãoLinguágens de programação
Linguágens de programação
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
 
Principios e paradigmas_de_computacao2
Principios e paradigmas_de_computacao2Principios e paradigmas_de_computacao2
Principios e paradigmas_de_computacao2
 
Linguagem da programação
Linguagem da programaçãoLinguagem da programação
Linguagem da programação
 
Linguagem de programação
Linguagem de programação Linguagem de programação
Linguagem de programação
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Aula01 estrutura de dados - (começando as brincadeiras)
Aula01   estrutura de dados - (começando as brincadeiras)Aula01   estrutura de dados - (começando as brincadeiras)
Aula01 estrutura de dados - (começando as brincadeiras)
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Treinamentos Avançados em Informática
Treinamentos Avançados em InformáticaTreinamentos Avançados em Informática
Treinamentos Avançados em Informática
 

Similaire à Orientação a Aspectos em PHP

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
 
Net uma revisão sobre a programação orientada a objetos
Net   uma revisão sobre a programação orientada a objetosNet   uma revisão sobre a programação orientada a objetos
Net uma revisão sobre a programação orientada a objetosLP Maquinas
 
A importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaA importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaGabriel Schade Cardoso
 
Aprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPAprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPLeonardo Bastos
 
Tech Thursday -Spring Roo
Tech Thursday -Spring RooTech Thursday -Spring Roo
Tech Thursday -Spring Roomarcosbeirigo
 
Ferramentas Livres Para Desenvolvimento com PHP
Ferramentas Livres Para Desenvolvimento com PHPFerramentas Livres Para Desenvolvimento com PHP
Ferramentas Livres Para Desenvolvimento com PHPAdler Medrado
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012Luís Cobucci
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Luís Cobucci
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Caderno de Orientação a Objetos - Secretaria de Educação
Caderno de Orientação a Objetos - Secretaria de EducaçãoCaderno de Orientação a Objetos - Secretaria de Educação
Caderno de Orientação a Objetos - Secretaria de Educaçãogeysasz
 
3 oo-concepts
3 oo-concepts3 oo-concepts
3 oo-conceptsjorge600
 

Similaire à Orientação a Aspectos em PHP (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
 
Net uma revisão sobre a programação orientada a objetos
Net   uma revisão sobre a programação orientada a objetosNet   uma revisão sobre a programação orientada a objetos
Net uma revisão sobre a programação orientada a objetos
 
A importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaA importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-dia
 
Aprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPAprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOP
 
Tech Thursday -Spring Roo
Tech Thursday -Spring RooTech Thursday -Spring Roo
Tech Thursday -Spring Roo
 
Cursos Season
Cursos SeasonCursos Season
Cursos Season
 
Cursos Season
Cursos Season Cursos Season
Cursos Season
 
Ferramentas Livres Para Desenvolvimento com PHP
Ferramentas Livres Para Desenvolvimento com PHPFerramentas Livres Para Desenvolvimento com PHP
Ferramentas Livres Para Desenvolvimento com PHP
 
DDD e PHP - TDC 2012
DDD e PHP - TDC 2012DDD e PHP - TDC 2012
DDD e PHP - TDC 2012
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Aula01 - Analise e Programação
Aula01 - Analise e ProgramaçãoAula01 - Analise e Programação
Aula01 - Analise e Programação
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
Medição de software
Medição de softwareMedição de software
Medição de software
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Caderno de Orientação a Objetos - Secretaria de Educação
Caderno de Orientação a Objetos - Secretaria de EducaçãoCaderno de Orientação a Objetos - Secretaria de Educação
Caderno de Orientação a Objetos - Secretaria de Educação
 
Programação orientada a aspectos
Programação orientada a aspectosProgramação orientada a aspectos
Programação orientada a aspectos
 
Linguagem da programação
Linguagem da programaçãoLinguagem da programação
Linguagem da programação
 
3 oo-concepts
3 oo-concepts3 oo-concepts
3 oo-concepts
 

Plus de Flávio Lisboa

Criando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPCriando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPFlávio Lisboa
 
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaCooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaFlávio Lisboa
 
Aprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasAprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasFlávio Lisboa
 
Ciência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoCiência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoFlávio Lisboa
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHPFlávio Lisboa
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework LaminasFlávio Lisboa
 
PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?Flávio Lisboa
 
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Flávio Lisboa
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
Como se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoComo se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoFlávio Lisboa
 
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPFlávio Lisboa
 
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamComunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamFlávio Lisboa
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosFlávio Lisboa
 
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosEstudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosFlávio Lisboa
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosFlávio Lisboa
 
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasSemeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasFlávio Lisboa
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadoresFlávio Lisboa
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)Flávio Lisboa
 
Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Flávio Lisboa
 

Plus de Flávio Lisboa (20)

Criando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHPCriando testes integrados de APIs com PHP
Criando testes integrados de APIs com PHP
 
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e ArgentinaCooperativas de Software Livre: Uma comparação entre Brasil e Argentina
Cooperativas de Software Livre: Uma comparação entre Brasil e Argentina
 
Aprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com LaminasAprenda a afiar suas garras com Laminas
Aprenda a afiar suas garras com Laminas
 
Ciência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com métodoCiência e software livre: desenvolvendo com método
Ciência e software livre: desenvolvendo com método
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHP
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework Laminas
 
PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?PHP Conference Brazil - What can we expect about framework Laminas?
PHP Conference Brazil - What can we expect about framework Laminas?
 
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
Algoritmos Genéticos em PHP - PHP Conference Brasil 2019
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
Como se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundoComo se tornar o pior programador PHP do mundo
Como se tornar o pior programador PHP do mundo
 
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHPA demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
A demanda da santa entrega Batman: bugs e gargalos em aplicações PHP
 
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperamComunicação e padrões em código aberto: quando convergente e divergente cooperam
Comunicação e padrões em código aberto: quando convergente e divergente cooperam
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dados
 
Amanhecer esmeralda
Amanhecer esmeraldaAmanhecer esmeralda
Amanhecer esmeralda
 
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de DadosEstudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
Estudo de Caso: Utilização de PHP no Serviço Federal de Processamento de Dados
 
Arquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviçosArquitetura PHP para um mundo orientado a microsserviços
Arquitetura PHP para um mundo orientado a microsserviços
 
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoasSemeando Liberdade: Como (e onde) o software livre inclui as pessoas
Semeando Liberdade: Como (e onde) o software livre inclui as pessoas
 
O que é programação de computadores
O que é programação de computadoresO que é programação de computadores
O que é programação de computadores
 
Economia em rede (comunidade)
Economia em rede (comunidade)Economia em rede (comunidade)
Economia em rede (comunidade)
 
Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)Aplicações Corporativas em PHP (CRM e ERP)
Aplicações Corporativas em PHP (CRM e ERP)
 

Orientação a Aspectos em PHP

  • 1.
  • 2. Programação Orientada a Aspectos em PHP Palestrante: Flávio Gomes da Silva Lisboa
  • 3. Flávio Gomes da Silva Lisboa ● www.fgsl.eti.br ● @fgsl ● www.facebook.com/flaviogomeslisboa
  • 4. Flávio Gomes da Silva Lisboa ● www.fgsl.eti.br ● @fgsl ● www.facebook.com/flaviogomeslisboa
  • 5. O Serpro ● O Serviço Federal de Processamento de Dados - SERPRO é uma empresa de 45 anos, vinculada ao Ministério da Fazenda, considerada uma das maiores Organizações do setor de prestação de serviços em Tecnologia da Informação e Comunicações para o setor público, na América Latina. ● O Serpro faz parte do Comitê Técnico para Implementação do Software Livre no Governo. ● O Serpro já possui dois projetos de software livre disponíveis no Portal do Software Público e planeja incluir outros.
  • 6. Programação Orientada a Aspectos em PHP PHP no Serpro Utilizado em sistemas corporativos da empresa, como avaliação de funcionários, agendamento nacional de recursos e controle do ciclo de vida de tecnologia. Utilizado em sistemas para clientes, como Presidência da República e Incra. Padrão de desenvolvimento de aplicações da superintendência de operações Utilizado no monitoramento de recursos de TI (Zabbix) Utilizado na suíte de comunicação Utilizado nos sistemas de colaboração Utilizado no rastreamento de bugs e requisição de novas Utilizado no ensino a distância (Moodle)
  • 7. Programação Orientada a Aspectos em PHP Agenda O que são aspectos Pra que servem Como aplicá-los no PHP Quais as novidades sobre isso na versão 5.4 do PHP Programação Orientada a Aspectos em PHP
  • 8. Programação Orientada a Aspectos em PHP O que são aspectos Programação Orientada a Aspectos em PHP
  • 10. Programação Orientada a Aspectos em PHP O que são objetos Programação Orientada a Aspectos em PHP
  • 12. Programação Orientada a Aspectos em PHP O que são funções Programação Orientada a Aspectos em PHP
  • 13. As respostas Programação Orientada a Aspectos em PHP clássicas não parecem ter relação entre si.... Programação Orientada a Aspectos em PHP
  • 14. Funções Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 15. Uma função associa Programação Orientada a Aspectos em PHP o argumento conhecido como entrada com o valor da função conhecido como saída Programação Orientada a Aspectos em PHP
  • 16. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 17. Objetos Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 18. “Um objeto é uma coisa” Programação Orientada a Aspectos em PHP Scott Ambler Programação Orientada a Aspectos em PHP
  • 19. “Um objeto é qualquer coisa” Programação Orientada a Aspectos em PHP Scott Ambler Programação Orientada a Aspectos em PHP
  • 20. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 21. Aspectos Programação Orientada a Aspectos em PHP Arte de Alex Rezende Programação Orientada a Aspectos em PHP
  • 22. “UmProgramação Orientada a Aspectos em PHP aspecto é uma característica ligada a muitas partes de um programa“ Programação Orientada a Aspectos em PHP
  • 23. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 24. “Qual a semelhança entre PHP Programação Orientada a Aspectos em um corvo e uma escrivaninha?” Programação Orientada a Aspectos em PHP
  • 25. Funções Programação Orientada a Aspectos em PHP Objetos Aspectos Programação Orientada a Aspectos em PHP
  • 26. Programação Orientada a Aspectos em PHP
  • 27. Todo código é de execução sequencial Programação Orientada a Aspectos em PHP
  • 28. Para alterar a sequência, é preciso dar um salto Programação Orientada a Aspectos em PHP
  • 29. Ou um goto... Programação Orientada a Aspectos em PHP
  • 30. Que alguns gostam... Programação Orientada a Aspectos em PHP
  • 31. E outros demonizam... Programação Orientada a Aspectos em PHP
  • 32. Mas independente disso, ele é feito internamente por todas as linguagens de programação que permitam estruturas de decisão e laços de repetição Programação Orientada a Aspectos em PHP
  • 33. E isso inclui a versão atual do PHP Programação Orientada a Aspectos em PHP
  • 34. “Mas qual a Orientada a Aspectos em PHP a Programação semelhança entre função, o objeto e o aspecto?” Programação Orientada a Aspectos em PHP
  • 35. Reuso... Programação Orientada a Aspectos em PHP
  • 36. Funções são blocos de código reusáveis. Classes são blocos de código reusáveis. Aspectos são blocos de código reusáveis. Programação Orientada a Aspectos em PHP
  • 37. É tudo a mesma coisa, então? Programação Orientada a Aspectos em PHP
  • 38. Na verdade, é uma evolução de reuso
  • 39. Eu disse uma evolução de reuso, entendeu?
  • 40. Evolução da Programação Mais modularidade, Mais reusabilidade, Mais evolutibilidade Programação Orientada a Notificações Programação Orientada a Aspectos Programação Orientada a Objetos Programação Modular Programação Procedural Programação Estruturada Linguagem de Máquina
  • 41. Programação Orientada a Objetos ● Tenta aproximar a modelagem do sistema com o negócio do cliente ● Facilita a criação de abstrações ● Sua estrutura induz ao encapsulamento dos dados ● Facilita o reuso de componentes (ao criar componentes reusáveis) ● Permite a aplicação de vários padrões de projeto ● Facilita a manutenção A função não some na programação orientada a objetos, ela evolui para o método de classe ou de objeto. O método, diferente da função, tem um dono. Existe um agente para a ação.
  • 42. Exemplo de reuso com classes
  • 43. Características de um software bem construído ● Os módulos (blocos de código) tem um alto grau de coesão, o que significa que cada elemento em uma unidade do programa é essencial para aquela unidade atingir seu objetivo. ● As interações ou outros relacionamentos entre dois módulos no mesmo nível de abstração são tão fracas quanto possíveis. ● Os interesses no software ficam separados. ● Módulos coesos tornam as mudanças mais localizadas. Não é preciso alterar vários pontos do software, apenas um. ● O fraco acoplamento torna os módulos mais independentes e facilita o reuso, ao tratá-los como componentes.
  • 44. Mas a Orientação a Objetos tem limites ● Ela não trata interesses transversais
  • 45. Reuso limitado em OOP ● A arma de reuso da orientação de objetos é a herança de classes. ● Algumas linguagens limitam a herança (caso de PHP) de modo que uma classe filha tem apenas uma classe mãe. ● A herança é total. Tudo o que for público e protegido é herdado. ● Mas existem trechos de código que se repetem, dentro de métodos diferentes. ● Esses trechos de código ficam espalhados em vários métodos de várias classes. ● Se não existe herança de método, quanto menos de trecho!
  • 46. A Tirania da Decomposição Dominante ● O programa pode ser modularizado de uma forma somente a cada vez, e muitos tipos de interesses que não se alinham com essa modularização terminam espalhados por muitos módulos e emaranhados uns com os outros. ● Sebastian Bergmann
  • 47. Será que meu programa tem isso? ● Se for PHP, você pode verificar um dos sintomas com a ferramenta PHP Copy & Paste Detector (phpcpd).
  • 48. A Orientação a Aspectos vem para resolver esses problemas
  • 49. Para que serve a Orientação a Aspectos ● Para modularizar interesses transversais do software em unidades chamadas aspectos. ● Interesses transversais geralmente são os trechos de código espalhados pela aplicação, como persistência, auditoria, controle de exceções, e quaisquer sequências que façam parte de métodos mas que não consigam ser transformados em métodos, ou que não possam ser herdados por todos que precisam deles. ● A Orientação a Aspectos não substitui a Orientação a Objetos. Ela é uma extensão que lida apenas com os interesses transversais. Classe A Classe B Classe C Classe D
  • 50. Orientação a Aspectos é injeção de dependência
  • 51. Quais são as estruturas da AOP? ● Joinpoints ● São as instruções no fluxo do programa onde aspectos podem ser injetados ● Podem ser execuções de métodos, acesso a atributos, construções de objetos, controle de exceções e destruições de objetos. ● Pointcuts ● São as expressões que utilizam os joinpoints para identificar os pontos do programa onde será injetado determinado código (aspecto) ● Os pointcuts usam wildcards (curingas) para criar expressões genéricas. ● * Todos os existentes ● + Todos com subclasses ● || “ou” para combinar
  • 52. Quais são as estruturas da AOP? ● Advices ● São os comandos da AOP que introduzem código nos pointcuts ● Há três tipos: ● Before ● Around ● After ● Inter-Type Declaration ● É um tipo de declaração que introduz atributos, constantes e métodos em classes, ou aspectos, existentes.
  • 53. Quais são as estruturas da AOP? ● Weaver ● É uma espécie de pré-compilador (ou compilador mesmo, no caso do PHP) que junta os aspectos com o código-fonte para gerar arquivos únicos, que formarão o programa final.
  • 54. AOP é controle ● O emaranhado não desaparece. Ele é deslocado para o código final. Mas na fase de desenvolvimento, a estrutura fica muito mais organizada.
  • 55. Como Programação Orientada a Aspectos em PHP aplicar aspectos no PHP? Programação Orientada a Aspectos em PHP
  • 56. Programação Orientada a Aspectos em PHP ● Você pode usar o projeto phpAspect (code.google.com/p/apdt) ● Com ele é possível desenvolver com orientação a aspectos usando o Eclipse. ● O projeto fornece um plugin (apdt) com um weaver. Você pode baixar pela URL http://apdt.googlecode.com/svn/trunk/org.phpaspect.apdt.updatesite/ Programação Orientada a Aspectos em PHP
  • 57. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 58. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 59. Programação Orientada a Aspectos em PHP <?php class Catalog{ private static $priceList = array( 'Largo Winch' => 9.31, 'Asterix' => 8.46, 'XIII' => 8.70); public static function getPrice($reference) { return self::$priceList[$reference]; } } Programação Orientada a Aspectos em PHP
  • 60. Programação Orientada a Aspectos em PHP <?php require('Catalog.php'); class Order{ private $items = array(); private $amount = 0; public function addItem($reference, $quantity){ $this->items[] = array($reference, $quantity); $this->amount += $quantity*Catalog::getPrice($reference); } public function getAmount(){ return $this->amount; } } Programação Orientada a Aspectos em PHP
  • 61. Programação Orientada a Aspectos em PHP <?php require('Order.php'); $myOrder = new Order; $myOrder->addItem('Largo Winch', 1); $myOrder->addItem('Asterix', 2); Programação Orientada a Aspectos em PHP
  • 62. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 63. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 64. Programação Orientada a Aspectos em PHP <?php require_once 'PHPAspect/Model/Aspect.php'; class Log extends Aspect { } ?> Programação Orientada a Aspectos em PHP
  • 65. <?php require_once 'PHPAspect/Model/Aspect.php'; Programação Orientada a Aspectos em PHP class Log extends Aspect { /** * @After(new(Order)) */ public function logNewOrder() { echo "New Ordern"; } /** * @After(call(Order->addItem)) */ public function logTotalAmount(Joinpoint $thisJoinpoint) { printf("Total amount of the cart : %.2f eurosn", $thisJoinpoint->getSource()->getAmount()); } /** * @After(exec(Order::addItem)) */ public function logAddItem(Joinpoint $thisJoinpoint){ list($reference, $quantity) = $thisJoinpoint->getArgs(); printf("%d %s added to the cartn", $quantity, $reference); } } ?> Programação Orientada a Aspectos em PHP
  • 66. Quais as Programação Orientada a Aspectos em PHP novidades sobre isso na versão 5.4 do PHP Programação Orientada a Aspectos em PHP
  • 67. Programação Orientada a Aspectos em PHP ● A versão 5.4 do PHP tem um novo aspecto interessante de programação. Mas não é o aspecto da orientação a aspectos. ● No entanto, é uma construção que também tem como objetivo melhorar o reuso. ● PHP 5.4 tem uma estrutura chamada trait (traço), que consiste em um bloco de código que contém métodos. ● Esse bloco pode ser usado por várias classes, que podem herdar de superclasses diferentes. ● Essa construção abre maiores possibilidades de reuso. E abre uma possibilidade de tratar os interesses transversais com uma construção nativa do PHP. Programação Orientada a Aspectos em PHP
  • 68. Programação Orientada a Aspectos em PHP trait [nome] { [bloco de código] } class [nome] extends [nome] { use [nome]; } Programação Orientada a Aspectos em PHP
  • 69. Programação Orientada a Aspectos em PHP Obrigado! ● @fgsl ● www.fgsl.eti.br Programação Orientada a Aspectos em PHP