Perl Orientado a Objeto Part III

Moose: Um jeito mais elegante de usar a Orientação a Objeto no Perl



O Moose fornece um conjunto de funções exportadas que torna o Perl Orientado a Objeto com uma sintaxe que funciona de maneira muito mais simples e bonita. Permitindo que voltemos nossa atenção para a abstração de dados, no lugar de focar nos detalhes de implementação.

⚠️ Este post tem como objetivo implementar orientação a objeto com Perl utilizando o Moose, por tanto ele leva em thinkação que você, leitor, tenha conhecimento de lógica e linguagem e programação, saiba algumas definições de orientação a objeto e conheça a sintaxe básica do Perl .

Moose의 생성자와 저작권자



Seguindo a linha de raciocínio dos exemplos dos artigos passados, agora vamos implementar a classe Performances utilizando o Moose a seguir:

package Performances;

use Moose;

# Declare the attributes
has 'name' => (is  => 'rw', # Declare read and write at runtime
    required => 1, # make the required attribute, value = 0 optional
    default =>'No name', # Attribute default value
);

has 'audience' => (isa =>'Int', # Declare as integer
  is => 'rw',
    required => 1, 
    default => sub { 
        my $self = shift; 
        my $qtd = shift;
        return $qtd if defined $qtd and $qtd > 0;
        return 'No audience or invalid value';
    } # Attribute default value
); # Declare read and write at runtime




package Calculation

use lib ".";
use Performances;

# Calling the constructor and assigning value to attributes
my $performace = Performances->new(audience=>55, name=>"hamlet");

# Introducing the attributes
printf "The play presented was %s  and its audience was %d people\n ",
$performace->name, $performace->audience;


Como podemos observar, ao usarmos o Moose e definirmos os atributos 청중 e name, o Moose faz a criação internamente, tanto do seu construtor, quanto métodos para atribuir valor aos seus atributos e métodos de leitura.

Para implementar relacionamentos no Perl vamos refatorar nossa classe de Tragedy. Abaixo, podemos observar a partir do código que Tragedy tem uma Performance do tipo específico de Tragedy.

package model::Performances::Tragedy; # Child Class
use Moose;
use lib (".");
use Performances; # Parent Class

use constant # Creating constants for play types
    TYPE_PLAY => {
        "tragedy" => 40,
        "comedy" => 60
    };

has 'performance' => {
    isa => "Performances", # Using @ISA with Moose
    is => "rw",
    default=> sub {
        return Performances->new(type_play => TYPE_PLAY->{tragedy});
    },
    required => 1
};


O Moose é uma ferramenta muito potente e além do básico que aprendemos aqui nohttps://metacpan.org/ você pode encontrar toda a sua documentação.
Como nem tudo são flores o Moose também tem seus defeitos. Por ser tão potente ele por sí só já é enorme, e por isso pode deixar aplicações simples lentas. Ele gera muito código por trás da sua implementação para facilitar sua programação, então você pode pagar com processamento quando os módulos são carregados pela primeira vez.

Moo: Um subconjunto do Moose



o Moo chegou para pesar menos no seu processamento. Ele implementa um subconjunto de funcionalidades do Moose em um pacote mais simples. Moose는 Moose와 상호 운용성을 위해 Moose를 자체 사양으로 API를 구현합니다.

Caso você use o pacote de introspecção enquanto está usando o o, ele infla de maneira transparente o API do Moose dentro da suba class ou função. Isso torna mais fácil incorporar Moo usando código em uma Moose base de código e 그 반대도 마찬가지입니다.

👋🏻 Então pessoal, essa foi a implementação básica do Moose, recomendo que olhem as demais aplicações na sua documentação. Seguir falaremos sobre o MOO. Até a proxima.

좋은 웹페이지 즐겨찾기