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.124 visualizações

Publicada em

Palestra proferida na VIII Latinoware, em 2011.

Publicada em: Tecnologia
1 comentário
4 gostaram
Estatísticas
Notas
  • 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
Sem downloads
Visualizações
Visualizações totais
2.124
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
37
Comentários
1
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

×