Orientação a Objetos - Criando e usando uma classe em Perl
Publicado por Daniel Vinciguerra (última atualização em 18/03/2016)
[ Hits: 4.483 ]
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 }
Validador de cartão de débido e crédito em Perl
GenHASH - Gerador de hashes SHA1, MD5 e Base64 em Perl
Conexão com Banco de Dados Postgres
Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha
Como preparar o Vim/Neovim para corrigir ortografia em português
Dark Web e Malwares na internet, quanto custa?
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Como verificar o hash de um arquivo baixado da Internet e como criar um hash
Debian 12 - IPTABLES - removendo NFTABLES
OverWatch 2 - Abrindo portas do jogo no Iptables.
Como instalar o adaptador wifi USB Intelbras ACtion A1200 no Linux Mint
Como normalizar seus arquivos MP3 para que fiquem no mesmo volume
Tela branca. Como faço para aparecer a imagem novamente? (1)
O que você está ouvindo agora? [2] (129)
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba
[Shell Script] Tire screenshots com Scrot facilmente com Zscrot
[Shell Script] DioPSI - Script multidistro para instalar programas
[Shell Script] ARS Vídeos - Cortador de vídeos e webcam shooter