Perl Orientado a Objeto usando o Moose
Nos próximos artigos nós vamos aprender como programar em Perl com Orientação a Objetos. Vamos começar com alguns exemplos simples e vamos extende-los passo a passo. Começamos usando o Moose mas vamos também aprender como criar classes por outros meios.
Um construtor com o Moose
Comecemos por escrever um script simples que usa a classe Person. Não fazemos nada especial ainda, apenas carregamos o módulo e chamamos o construtor para criar uma instância.
use strict; use warnings; use v5.10; use Person; my $teacher = Person->new;
Salve isto em somedir/bin/app.pl
Isto não deve ser novo para você, pois estou certo de que você já usou outros módulos de maneira similar. Nosso foco é em como a classe Person foi implementada:
package Person; use Moose; 1;
É isto.
Esse código é gravado em somedir/lib/Person.pm.
Tudo o que você precisa fazer para criar uma classe é criar um pacote com o nome da classe, adicionar use Moose; a ele, terminar o arquivo com um valor verdadeiro, e salvar em um arquivo com o mesmo nome (sensível ao caso!) do pacote, e com a extensão .pm.
Carregar o Moose define automaticamente use strict e use warnings. Isto é legal, mas cuidado para não se acostumar com essa conveniência e esquecer de usá-los quando não estiver usando o Moose.
Carregar o Moose também adiciona automaticamente o construtor padrão chamado new.
Uma observação, em Perl não é um requisito que o construtor seja chamado new, mas na maioria dos casos é o que o autor acaba escolhendo.
Atributos e acessores
Ter uma classe vazia não é muito divertido. Vamos avançar um pouco em nosso uso:
use strict; use warnings; use v5.10; use Person; my $teacher = Person->new; $teacher->name('Joe'); say $teacher->name;
Neste código, depois de criar o objeto, chamamos o método "name" com uma string como parâmetro; isso define o atributo "name" da classe como 'Joe'. Uma vez que este método define seu respectivo atributo, ele é também chamado de setter.
Então chamamos o mesmo método novamente, desta vez sem parâmetro algum. Isto vai buscar o valor previamente armazenado. Uma vez que obtém um valor, este método também é chamado getter.
Em nosso caso o getter e o setter possuem o mesmo nome mas isso também não é requisito.
Em geral getters e setters são chamados acessores.
O código que implementa a nova classe é este:
A parte nova, has 'name' => (is => 'rw'); diz que
"A classe Person tem um atributo chamado 'name' que tem as
permissões de leitura(r) e escrita(w)"
Isso cria automaticamente um método chamado "name" que se torna ao mesmo tempo
um setter (para escrita) e um getter (para leitura).
Com o intuito de executar este exemplo crie um diretório chamado "somedir",
com um subdiretório chamado "lib" dentro dele, e salve o arquivo Person.pm
dentro do subdiretório "lib". Crie também um subdiretório chamado "bin" e
salve lá o script chamado person.pl.
Você deve ter
Abra um terminal (ou a janela do cmd no Windows), acesse o diretório "somedir"
e digite perl -Ilib bin/person.pl
(No MS Windows você pode precisar usar contra-barras: \ )
No próximo script nós passamos um par chave-valor para o construtor,
correspondentes ao nome do atributo e seu valor.
Isso também funciona com o mesmo módulo da mesma forma como tínhamos:
Usando o construtor dessa maneira para definir o valor inicial de um atributo
funciona sem fazer qualquer mudança no módulo Person.
O Moose aceita automaticamente todo membro (outro nome para os
atributos) a ser passado durante a construção.
package Person;
use Moose;
has 'name' => (is => 'rw');
1;
Execute o código
somedir/lib/Person.pm
somedir/bin/person.pl
Parâmetros do construtor
use strict;
use warnings;
use v5.10;
use Person;
my $teacher = Person->new( name => 'Joe' );
say $teacher->name;
Published on 2013-04-29