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
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
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
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
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.
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
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
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
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