Orientação a Objetos - Criando e usando uma classe em Perl
Publicado por Daniel Vinciguerra (última atualização em 18/03/2016)
[ Hits: 4.933 ]
Homepage: http://bivee.com.br
Perl possui um sistema de Orientação a Objetos que é bem explicito, onde você "constrói as classes com suas próprias mãos" utilizando nada mais do que a sintaxe do próprio Perl e apesar de isso parecer um pouco trabalhoso, na verdade é uma ótima forma para conhecer como os sistemas de objetos funcionam.
EM RESUMO:
1. Objetos em Perl são estruturas de dados.
Sim! Objetos em Perl são estruturas de dados que são associadas a uma classe.
2. As classes são definidas com o package
Sabe o package pelo qual você define os Módulos no Perl? É a mesma coisas com as classes!
3. Construtores abençoam as variáveis
Os construtores são apenas sub's que retornam uma variável que foi abençoada (blessed)
4. Os métodos são subs
Os métodos dos objetos são apenas sub's no escopo do seu package e que recebem a referência do seu objeto instanciado (blessed)
Através deste script, pretendo mostrar de forma simples como trabalhar com orientação a objetos em Perl.
PRÉ-REQUISITOS
- perl 5.10 ou superior
REFERÊNCIAS
http://perldoc.perl.org/perlobj.html
http://perldoc.perl.org/perlootut.html
EXECUTANDO
$ perl class.pl
#!/usr/bin/env perl
# 2016 (c) Daniel Vinciguerra
# pragmas
use 5.10.0;
use strict;
use warnings;
# classe base
package Base {
# construtor
sub new {
my ($class, %args) = @_;
return bless \%args || {}, $class;
}
}
# classe produto
package Produto {
#use parent 'Base'; # herança em caso de arquivos separados
@Produto::ISA = qw/Base/; # herança para funcionar em mesmo arquivo
# accessors
sub id {
my ($self, $id) = @_;
$self->{id} = $id if $id;
return $self->{id}
}
sub nome {
my ($self, $nome) = @_;
$self->{nome} = $nome if $nome;
return $self->{nome}
}
sub valor {
my ($self, $valor) = @_;
$self->{valor} = $valor if $valor;
return $self->{valor}
}
# métodos
sub to_string {
my $self = shift;
sprintf("%-2s %-10s %-8.2f", $self->id, $self->nome, $self->valor/100)
}
}
# OBSERVAÇÃO:
# Devido ao fato de as classes estarem no mesmo arquivo, não é necessário
# importar as mesmas com o 'use'.
# lista de produtos
my $produto_list = [];
# populando a lista
for my $id (1 .. 10){
# instanciando novo produto (valores gerados randomicamente)
my $p = Produto->new(
id => $id, nome => "Produto-${id}", valor => int(rand()*100000)
);
# adicionando na lista
push $produto_list, $p;
}
# exibindo os produtos
say "LISTA DE PRODUTOS:";
say sprintf("%-2s %-10s %-10s", qw/ID NOME VALOR/);
say '-' x 60;
# iterando a lista de produtos
for my $item (@$produto_list){
say $item->to_string
}
GenHASH - Gerador de hashes SHA1, MD5 e Base64 em Perl
Conexão com Banco de Dados Postgres
Streaming Kiss FM (SP 102,1) Player em perl com interface grafica (Tk)
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









