Orientação a Objetos - Criando e usando uma classe em Perl

Publicado por Daniel Vinciguerra (última atualização em 18/03/2016)

[ Hits: 4.675 ]

Homepage: http://bivee.com.br

Download 6389.class.pl




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

  



Esconder código-fonte

#!/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
}

Scripts recomendados

Conexão com Banco de Dados Postgres

GenHASH - Gerador de hashes SHA1, MD5 e Base64 em Perl

Busca Binária

Ordenação por Seleção

Gerador de CPF válido em Perl


  

Comentários
[1] Comentário enviado por fabio em 18/03/2016 - 13:23h

Esse cara é fera no Perl!

[2] Comentário enviado por dvinciguerra em 18/03/2016 - 19:02h

Obrigado Fabio,
É sempre um prazer contribuir para uma comunidade que ajuda tantos profissionais!

Grande abraço

[3] Comentário enviado por vmmello em 20/03/2016 - 21:14h

legal que ainda tem gente ensinando perl. Parabéns Daniel!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts