O MOOSE é, em essência, uma extensão ao sistema de Programação Orientada a Objetos do Perl5. Com uma sintaxe mais elegante - baseada nas linguagens Java, Perl6 e Ruby - o MOOSE permite que o programador Perl pense mais na abstração dos dados e da classe do que em como os detalhes da classe deve ser implementada. Para utilizar o Moose no seu sistema, primeiro você deve instalar o Moose. A instalação pode ser via CPAN (Windows e Linux) ou via instalador de pacotes do seu Linux.
Para começar nossos estudos com Moose vamos utilizar o exemplo mais clássico da programação OOP. Vamos criar uma classe Ponto. Para isso cri um arquivo Ponto.pm:
e adicione o seguinte código:
Código PHP:
#!/usr/bin/perl
package Ponto;
use Moose;
use common::sense;
#Declara os atributos x e y
#como inteiros para leitura e escrita
#ou seja, os valores podem ser modificados
#durante a execução do programa.
has 'x' => (isa =>'Int',
is => 'rw');
has 'y' => (isa => 'Int',
is => 'rw');
1;
salve o arquivo e crie outro arquivo, usa_ponto.pl
Código PHP:
$vi usa_ponto.pl
Código PHP:
#!/usr/bin/perl
use strict;
use warnings;
use lib ".";
use Ponto;
my $ponto = Ponto->new;
$ponto->x(3);
$ponto->y(4);
printf "O objeto $ponto tem as coordenadas: %d e %d\n ",
$ponto->x, $ponto->y;
Salve o arquivo e execute o Script:
Código PHP:
$ perl usa_ponto.pl
Código PHP:
O objeto Ponto=HASH(0x153b28) tem as coordenadas: 3 e 4
Veja que, gratuitamente, o Moose criou os métodos new, x e y. Ao definirmos os atributos x e y o Moose já criou métodos para estes métodos para atribuir e ler o valor.
Conceitos de OOP com Moose:
Como o Moose tenta obter o que há de melhor no mundo OOP, ele possuí conceitos um pouco diferenciados, principalmente para programadores acostumados com a programação estruturada. Estes conceitos são classes, atributos, métodos, regras, modificadores de métodos, tipos, delegação, construção, destruição, instância, privacidade e herança.
Classe:
A classe é a própria abstração do objeto. É como um manual de montagem que diz ao Perl como construir o objeto. Quando criamos um pacote no Perl e declaramos use Moose neste pacote ele automaticamente se torna uma classe com alguns métodos e facilidades já criados pelo Moose:
Exemplo:
1 – crie o arquivo line.pl: $ vi line.pl
2- Adicione o código:
Código PHP:
#!/usr/bin/perl
package Line;{
use Moose;
}
package Main;{
my $linha = Line->new();
print "O objeto linha: $linha\n"
}
Execute o script:
$ perl Line.pm
O objeto linha: Line=HASH(0x611728)
$
Além do método new( ), o Moose e o Perl criam diversas facilidades para a nossa classe. Para ver os detalhes, vamos ver o Objeto criado pelo Moose no debuger do perl. Digite perl -d line.pl na sua linha de comandos:
Código PHP:
$perl -d line.pl
Código PHP:
Loading DB routines from perl5db.pl version 1.33
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
Line::(line.pl3): use Moose;
DB<1>
No prompt do debugger envie o comando n duas vezes. Este comando executa a linha atual:
Código PHP:
DB<1> n
DB<1> n
Isto te colocará na linha 6 do script. Onde iremos criar o objeto. O comando v mostra a região do código onde estamos:
Código PHP:
DB<1> v
use Moose;
}
package Main;{
==> my $linha = Line->new();
: print "O objeto linha: $linha\n"
}
Execute n novamente para criar o objeto. Depois envie o comando m $linha, que irá mostrar os métodos da classe:
Código PHP:
DB<1> n
Main::(Line.pm:7): print "O objeto linha: $linha\n"
DB<2> m $linha
after
around
augment
before
blessed
confess
extends
has
inner
meta
override
super
with
via Moose::Object: BUILDALL
via Moose::Object: BUILDARGS
via Moose::Object: DEMOLISHALL
via Moose::Object: DESTROY
via Moose::Object: DOES
via Moose::Object: does
via Moose::Object: dump
via Moose::Object: new
via UNIVERSAL: VERSION
via UNIVERSAL: can
via UNIVERSAL: isa
DB<3>
VERSION, isa e can são herdados da Classe Universal, a classe pai de todas as classes no Perl. Os outros métodos são facilidades criadas pela classe Moose::Object e pelo Moose. Toda classe criada com Moose será uma classe descendente de Universal e Moose::Object.
Fonte: DevMedia
Autor: Thiago Glauco