ProgramaçãoOrientada aAspectos em PHPPalestrante: 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 d...
Programação Orientada a Aspectos em PHPPHP no SerproUtilizado em sistemas corporativos da empresa, comoavaliação de func...
Programação Orientada a Aspectos em PHPAgendaO que são aspectosPra que servemComo aplicá-los no PHPQuais as novida...
Programação Orientada a Aspectos em PHPO quesãoaspectos   Programação Orientada a Aspectos em PHP
Umaquestãosemelhantefoi feitano passado
Programação Orientada a Aspectos em PHPO quesãoobjetos   Programação Orientada a Aspectos em PHP
E outrasimilarfoi feitaainda antes
Programação Orientada a Aspectos em PHPO quesãofunções   Programação Orientada a Aspectos em PHP
As respostas  Programação Orientada a Aspectos em PHPclássicas nãoparecem ter relaçãoentre si....    Programação Orientada...
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 PHPo argumento conhecidocomo entrada com ovalor da função conheci...
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 Orienta...
“Um objeto é qualquer coisa”   Programação Orientada a Aspectos em PHP                          Scott Ambler       Program...
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 As...
“UmProgramação Orientada a Aspectos em PHP     aspecto é uma característicaligada a muitas partes de umprograma“       Pro...
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 umcorvo e uma escrivaninha?”        Programação Orient...
Funções    Programação Orientada a Aspectos em PHP     Objetos                       Aspectos Programação Orientada a Aspe...
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 é feitointernamente por todas as linguagens deprogramação que permitamestruturas de decisão e ...
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 entrefunção, o objeto e o aspecto?”       Programação ...
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.    ...
É 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çãoMais modularidade,Mais reusabilidade,Mais evolutibilidade                                          ...
Programação Orientada a Objetos●   Tenta aproximar a modelagem do sistema com o negócio do cliente●   Facilita a criação d...
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ã...
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 ...
A Tirania da Decomposição Dominante●   O programa pode ser modularizado de uma forma    somente a cada vez, e muitos tipos...
Será que meu programa tem isso?●   Se for PHP, você pode verificar um dos sintomas com    a ferramenta PHP Copy & Paste De...
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 asp...
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    injetad...
Quais são as estruturas da AOP?●   Advices●   São os comandos da AOP que introduzem código nos    pointcuts●   Há três tip...
Quais são as estruturas da AOP?●   Weaver●   É uma espécie de pré-compilador (ou compilador mesmo, no    caso do PHP) que ...
AOP é controle●   O emaranhado não desaparece. Ele é deslocado para o código    final. Mas na fase de desenvolvimento, a e...
Como Programação Orientada a Aspectos em PHPaplicaraspectosno 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ív...
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<?phpclass Catalog{private static $priceList = array(Largo Winch => 9.31,Asterix =>...
Programação Orientada a Aspectos em PHP <?php require(Catalog.php); class Order{     private $items = array();     private...
Programação Orientada a Aspectos em PHP<?phprequire(Order.php);$myOrder = new Order;$myOrder->addItem(Largo Winch, 1);$myO...
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<?phprequire_once PHPAspect/Model/Aspect.php;class Log extends Aspect{}?>        Pr...
<?php    require_once PHPAspect/Model/Aspect.php;Programação Orientada a Aspectos em PHP    class Log extends Aspect    { ...
Quais as  Programação Orientada a Aspectos em PHPnovidadessobre issona versão5.4 do PHP    Programação Orientada a Aspecto...
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...
Programação Orientada a Aspectos em PHPtrait [nome] {[bloco de código]}class [nome] extends [nome] {    use [nome];}      ...
Programação Orientada a Aspectos em PHP     Obrigado!●   @fgsl●    www.fgsl.eti.br            Programação Orientada a Aspe...
Orientação a Aspectos em PHP
Próximos SlideShares
Carregando em…5
×

Orientação a Aspectos em PHP

2.149 visualizações

Publicada em

Palestra proferida na VIII Latinoware, em 2011.

Publicada em: Tecnologia
  • Gostaria de te perguntar se tem algum livro para me indicar, estou fazendo o meu tcc em POA já tenho um programa funcionando em java gostaria de montar um em php também utilizando o POA e fazer um quadro comparativo entre ambos. Se puder me indicar livros ficarei muito agradecido
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui

Orientação a Aspectos em PHP

  1. 1. ProgramaçãoOrientada aAspectos em PHPPalestrante: Flávio Gomes da Silva Lisboa
  2. 2. Flávio Gomes da Silva Lisboa● www.fgsl.eti.br● @fgsl● www.facebook.com/flaviogomeslisboa
  3. 3. Flávio Gomes da Silva Lisboa● www.fgsl.eti.br● @fgsl● www.facebook.com/flaviogomeslisboa
  4. 4. 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.
  5. 5. Programação Orientada a Aspectos em PHPPHP no SerproUtilizado em sistemas corporativos da empresa, comoavaliação de funcionários, agendamento nacional derecursos e controle do ciclo de vida de tecnologia.Utilizado em sistemas para clientes, como Presidênciada República e Incra.Padrão de desenvolvimento de aplicações dasuperintendê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 denovasUtilizado no ensino a distância (Moodle)
  6. 6. Programação Orientada a Aspectos em PHPAgenda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
  7. 7. Programação Orientada a Aspectos em PHPO quesãoaspectos Programação Orientada a Aspectos em PHP
  8. 8. Umaquestãosemelhantefoi feitano passado
  9. 9. Programação Orientada a Aspectos em PHPO quesãoobjetos Programação Orientada a Aspectos em PHP
  10. 10. E outrasimilarfoi feitaainda antes
  11. 11. Programação Orientada a Aspectos em PHPO quesãofunções Programação Orientada a Aspectos em PHP
  12. 12. As respostas Programação Orientada a Aspectos em PHPclássicas nãoparecem ter relaçãoentre si.... Programação Orientada a Aspectos em PHP
  13. 13. Funções Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  14. 14. Uma função associa Programação Orientada a Aspectos em PHPo argumento conhecidocomo entrada com ovalor da função conhecidocomo saída Programação Orientada a Aspectos em PHP
  15. 15. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  16. 16. Objetos Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  17. 17. “Um objeto é uma coisa” Programação Orientada a Aspectos em PHP Scott Ambler Programação Orientada a Aspectos em PHP
  18. 18. “Um objeto é qualquer coisa” Programação Orientada a Aspectos em PHP Scott Ambler Programação Orientada a Aspectos em PHP
  19. 19. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  20. 20. Aspectos Programação Orientada a Aspectos em PHP Arte de Alex Rezende Programação Orientada a Aspectos em PHP
  21. 21. “UmProgramação Orientada a Aspectos em PHP aspecto é uma característicaligada a muitas partes de umprograma“ Programação Orientada a Aspectos em PHP
  22. 22. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  23. 23. “Qual a semelhança entre PHP Programação Orientada a Aspectos em umcorvo e uma escrivaninha?” Programação Orientada a Aspectos em PHP
  24. 24. Funções Programação Orientada a Aspectos em PHP Objetos Aspectos Programação Orientada a Aspectos em PHP
  25. 25. Programação Orientada a Aspectos em PHP
  26. 26. Todo código é de execução sequencial Programação Orientada a Aspectos em PHP
  27. 27. Para alterar a sequência, é preciso dar um salto Programação Orientada a Aspectos em PHP
  28. 28. Ou um goto... Programação Orientada a Aspectos em PHP
  29. 29. Que alguns gostam... Programação Orientada a Aspectos em PHP
  30. 30. E outros demonizam... Programação Orientada a Aspectos em PHP
  31. 31. Mas independente disso, ele é feitointernamente por todas as linguagens deprogramação que permitamestruturas de decisão e laços de repetição Programação Orientada a Aspectos em PHP
  32. 32. E isso inclui a versão atual do PHP Programação Orientada a Aspectos em PHP
  33. 33. “Mas qual a Orientada a Aspectos em PHP a Programação semelhança entrefunção, o objeto e o aspecto?” Programação Orientada a Aspectos em PHP
  34. 34. Reuso... Programação Orientada a Aspectos em PHP
  35. 35. 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
  36. 36. É tudo a mesma coisa, então? Programação Orientada a Aspectos em PHP
  37. 37. Na verdade, é uma evolução de reuso
  38. 38. Eu disse uma evolução de reuso, entendeu?
  39. 39. Evolução da ProgramaçãoMais 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
  40. 40. 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çãoA função não some na programação orientada aobjetos, ela evolui para o método de classe ou deobjeto.O método, diferente da função, tem um dono.Existe um agente para a ação.
  41. 41. Exemplo de reuso com classes
  42. 42. 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.
  43. 43. Mas a Orientação a Objetos tem limites● Ela não trata interesses transversais
  44. 44. 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!
  45. 45. 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
  46. 46. Será que meu programa tem isso?● Se for PHP, você pode verificar um dos sintomas com a ferramenta PHP Copy & Paste Detector (phpcpd).
  47. 47. A Orientação a Aspectos vem para resolver esses problemas
  48. 48. 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
  49. 49. Orientação a Aspectos éinjeção de dependência
  50. 50. 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
  51. 51. 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.
  52. 52. 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.
  53. 53. 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.
  54. 54. Como Programação Orientada a Aspectos em PHPaplicaraspectosno PHP? Programação Orientada a Aspectos em PHP
  55. 55. 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
  56. 56. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  57. 57. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  58. 58. Programação Orientada a Aspectos em PHP<?phpclass 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
  59. 59. 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
  60. 60. Programação Orientada a Aspectos em PHP<?phprequire(Order.php);$myOrder = new Order;$myOrder->addItem(Largo Winch, 1);$myOrder->addItem(Asterix, 2); Programação Orientada a Aspectos em PHP
  61. 61. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  62. 62. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  63. 63. Programação Orientada a Aspectos em PHP<?phprequire_once PHPAspect/Model/Aspect.php;class Log extends Aspect{}?> Programação Orientada a Aspectos em PHP
  64. 64. <?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
  65. 65. Quais as Programação Orientada a Aspectos em PHPnovidadessobre issona versão5.4 do PHP Programação Orientada a Aspectos em PHP
  66. 66. 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
  67. 67. Programação Orientada a Aspectos em PHPtrait [nome] {[bloco de código]}class [nome] extends [nome] { use [nome];} Programação Orientada a Aspectos em PHP
  68. 68. Programação Orientada a Aspectos em PHP Obrigado!● @fgsl● www.fgsl.eti.br Programação Orientada a Aspectos em PHP

×