[Rio-pm] Objetos Moose vs NonMoose

breno breno em rio.pm.org
Quarta Setembro 12 09:34:09 PDT 2012


2012/9/12 Junior Moraes <juniiior182 em gmail.com>:
> Hi.
>
> Em 12 de setembro de 2012 11:32, Blabos de Blebe <blabos em gmail.com>
> escreveu:
>
>> > Módulos criados com bless possuem um modelo diferente dos módulos que
>> > utilizam o Moose, certo?
>>
>> Hein? Defina modelo.
>
>
> A "arquitetura" do módulo internamente.
> Não sei bem a definição disso. Mas estou falando das diferenças e
> particularidades deles como Moose::Meta, BUILD e BEGIN, DESTROY e DEMOLISH,
> etc...
>

Perl oferece apenas o esqueleto para criação de objetos, como se
fossem peças de Lego pra vc montar. Ao usar bless( $variável,
'Algum::Pacote' ) o "package Algum::Pacote" é tratado como uma classe,
instanciada dentro de $variável (que é apenas uma referência,
normalmente de hash - e.g. my $variável = {} ). As funções definidas
lá viram métodos para o seu objeto, podendo ser acessadas como
$variável->meu_metodo( @params ). Quando não há mais referências para
um determinado objeto no seu programa, o objeto é destruido e o perl
vai chamar a sub DESTROY da classe associada, caso exista uma.

Só isso.

Não existem outras palavras reservadas ou funções mágicas.
Tecnicamente, nem mesmo a DESTROY é específica de objetos, já que é
chamada em qualquer "package" durante a destruição do seu programa.
Até o construtor new() é apenas uma "sub new" que você mesmo define
dentro da sua classe e pode chamar do que quiser - usar "new" é apenas
convenção.

Blocos BEGIN não são específicos de objetos. Você pode saber mais
sobre eles (e outras etapas do ciclo de vida do seu programa) em
http://perldoc.perl.org/perlmod.html#BEGIN%2c-UNITCHECK%2c-CHECK%2c-INIT-and-END

Essa estrutura é minimalista e extremamente flexível, mas por ser tão
"crua" não é recomendado em Perl Moderno. Existem sistemas de objetos
completos em Perl 5 construídos em cima desse esqueleto, sistemas como
o Moose, que oferecem uma sintaxe mais limpa e direta ao ponto para
classes, meta-classes e objetos em Perl. Existem vários outros
sistemas de objetos (como Badger e Mouse, que vc citou, entre muitos
outros), mas o Moose rapidamente se tornou o padrão de-facto do Perl
Moderno. Todas as outras funções que vc citou, como BUILD e DEMOLISH,
são dele.

Leitura recomendada para saber mais sobre objetos em Perl 5 Moderno,
incluindo uma explicação básica sobre OO e Moose:

http://perldoc.perl.org/perlootut.html

E para aprender mais sobre o Moose e suas vantagens:

https://metacpan.org/module/Moose::Manual::Concepts

Boa leitura! Qualquer coisa, tamos aí :)

[]s

-b


Mais detalhes sobre a lista de discussão Rio-pm