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:

$vi Ponto.pm

            e adicione o seguinte código:

     1  package Ponto;

     2  use Moose;

     3

     4  #Declara os atributos x e y

     5  #como inteiros para leitura e escrita

     6  #ou seja, os valores podem ser modificados

     7  #durante a execução do programa.

     8

     9  has 'x' => (isa =>'Int',

    10                   is => 'rw');

    11

    12  has 'y' => (isa => 'Int',

    13                    is  => 'rw');

    14  1;

            salve o arquivo e crie outro arquivo, usa_ponto.pl

$vi usa_ponto.pl

     1  use lib ".";

     2  use Ponto;

     3

     4  my $ponto = Ponto->new;

     5  $ponto->x(3);

     6  $ponto->y(4);

     7

     8  printf "O objeto $ponto tem as coordenadas: %d e %d\n ",

     9          $ponto->x, $ponto->y;

 

            Salve o arquivo e execute o Script:

$ perl usa_ponto.pl

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:

 

      1 package Line;{

      2

      3 use Moose;

      4 }

      5 package Main;{

      6 my $linha = Line->new();

      7 print "O objeto linha: $linha\n"

      8 }

 

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:

 

$perl -d line.pl

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:

 

  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:

 

  DB<1> v

3:      use Moose;

4       }

5       package Main;{

6==>    my $linha = Line->new();

7:      print "O objeto linha: $linha\n"

8

9       }

 

            Execute n novamente para criar o objeto. Depois envie o comando m $linha, que irá mostrar os métodos da classe:

 

  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.

            No próximo artigo iremos ver os conceitos: herança, atributos, métodos, tipos e regras.

 

            Para praticar:

            1 – Execute o script usa_ponto.pl dentro do Perl Debugger. Veja os métodos criados pelo Moose e compare com a saída do debugger de linha.pl.

            2 – Crie uma classe Ponto3D, que tenha também a coordenada z, além de x e y.