Your SlideShare is downloading. ×
Orientação a Aspectos em PHP
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Orientação a Aspectos em PHP

1,723
views

Published on

Palestra proferida na VIII Latinoware, em 2011.

Palestra proferida na VIII Latinoware, em 2011.

Published in: Technology

1 Comment
4 Likes
Statistics
Notes
  • 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
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
1,723
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
34
Comments
1
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ProgramaçãoOrientada aAspectos em PHPPalestrante: Flávio Gomes da Silva Lisboa
  • 2. Flávio Gomes da Silva Lisboa● www.fgsl.eti.br● @fgsl● www.facebook.com/flaviogomeslisboa
  • 3. Flávio Gomes da Silva Lisboa● www.fgsl.eti.br● @fgsl● www.facebook.com/flaviogomeslisboa
  • 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. 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. 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. Programação Orientada a Aspectos em PHPO quesãoaspectos Programação Orientada a Aspectos em PHP
  • 8. Umaquestãosemelhantefoi feitano passado
  • 9. Programação Orientada a Aspectos em PHPO quesãoobjetos Programação Orientada a Aspectos em PHP
  • 10. E outrasimilarfoi feitaainda antes
  • 11. Programação Orientada a Aspectos em PHPO quesãofunções Programação Orientada a Aspectos em PHP
  • 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. Funções Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 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. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 16. Objetos Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 17. “Um objeto é uma coisa” Programação Orientada a Aspectos em PHP Scott Ambler Programação Orientada a Aspectos em PHP
  • 18. “Um objeto é qualquer coisa” Programação Orientada a Aspectos em PHP Scott Ambler Programação Orientada a Aspectos em PHP
  • 19. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 20. Aspectos Programação Orientada a Aspectos em PHP Arte de Alex Rezende Programação Orientada a Aspectos em PHP
  • 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. Programação Orientada a Aspectos em PHP Programação Orientada a Aspectos em PHP
  • 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. Funções Programação Orientada a Aspectos em PHP Objetos Aspectos Programação Orientada a Aspectos em PHP
  • 25. Programação Orientada a Aspectos em PHP
  • 26. Todo código é de execução sequencial Programação Orientada a Aspectos em PHP
  • 27. Para alterar a sequência, é preciso dar um salto Programação Orientada a Aspectos em PHP
  • 28. Ou um goto... Programação Orientada a Aspectos em PHP
  • 29. Que alguns gostam... Programação Orientada a Aspectos em PHP
  • 30. E outros demonizam... Programação Orientada a Aspectos em PHP
  • 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. E isso inclui a versão atual do PHP Programação Orientada a Aspectos em PHP
  • 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. Reuso... Programação Orientada a Aspectos em PHP
  • 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. É tudo a mesma coisa, então? Programação Orientada a Aspectos em PHP
  • 37. Na verdade, é uma evolução de reuso
  • 38. Eu disse uma evolução de reuso, entendeu?
  • 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. 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. Exemplo de reuso com classes
  • 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. Mas a Orientação a Objetos tem limites● Ela não trata interesses transversais
  • 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. 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. Será que meu programa tem isso?● Se for PHP, você pode verificar um dos sintomas com a ferramenta PHP Copy & Paste Detector (phpcpd).
  • 47. A Orientação a Aspectos vem para resolver esses problemas
  • 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. Orientação a Aspectos éinjeção de dependência
  • 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. 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. 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. 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. Como Programação Orientada a Aspectos em PHPaplicaraspectosno PHP? Programação Orientada a Aspectos em PHP
  • 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. Programação Orientada a Aspectos em PHP 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<?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. 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. 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. Programação Orientada a Aspectos em PHP 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<?phprequire_once PHPAspect/Model/Aspect.php;class Log extends Aspect{}?> Programação Orientada a Aspectos em PHP
  • 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. Quais as Programação Orientada a Aspectos em PHPnovidadessobre issona versão5.4 do PHP Programação Orientada a Aspectos em PHP
  • 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. 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. Programação Orientada a Aspectos em PHP Obrigado!● @fgsl● www.fgsl.eti.br Programação Orientada a Aspectos em PHP