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.
Reference
이 문제에 관하여(Perl Orientado a Objeto Part III), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/victoriabispo/perl-orientado-a-objeto-part-iii-4fe2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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;
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
};
Reference
이 문제에 관하여(Perl Orientado a Objeto Part III), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/victoriabispo/perl-orientado-a-objeto-part-iii-4fe2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)