Início > Perl > Poo no Perl!

Poo no Perl!

Boas pessoal. Tô de volta. :)

Depois de um bom tempo sem postar nada, vou aproveitar minha semaninha de folga pra tirar as teias do porão e vamos falar um pouquinho sobre orientação a objetos no Perl.

Mas o Perl é um cara sem classe, não?

No Perl realmente não existe uma palavra mágica class ou algo do tipo, mas a gente pode criar classes sim!

As classes no Perl são criadas o mecanismo de package que também é usado mais usualmente para criar módulos tradicionais. E os objetos… bom, os objetos são referências abençoadas ! :P

Referência abençoada? Que diabo é isso?

Calma… nada de misticismos. Uma referência abençoada é só uma referência que foi passada como argumento para a função bless. É essa função a responsável por dizer: ‘essa referência pertence a este package (classe)’. Depois de abençoada, você será capaz de chamar funções através dessa referência, ou, em outras palavras, você terá métodos!

Entendi, mas já cansei de papo…

Beleza, já falei bastente, e agora é hora do código.

Pra este exemplo vou criar uma classe (package) Pessoa (como um módulo normal do Perl, isso será gravado em um arquivo chamado Pessoa.pm), e nessa classe criarei o contrutor da classe e os seus outros métodos. Agora sim, o código:

1package Pessoa; # Arquivo Pessoa.pm 2 3use strict; 4use warnings; 5 6# Aqui é o contrutor da classe. 7# O nome 'new' não é uma obrigação, só 8# uma convenção de uso. 9sub new{ 10 # classe onde o a referência será abençoada. 11 # Isso aqui não precisa ser passado como parâmetro 12 # na hora de instanciar o objeto, é passado implicitamente 13 my $class = shift; 14 15 # Nossa referência que será abençoada. 16 # Pode ser uma referência qualquer, não necessáriamente 17 # uma referência a um hash; 18 my $self = {}; 19 $self->{NOME} = undef; 20 $self->{IDADE} = undef; 21 22 # Agora a mágica acontece 23 bless($self, $class); 24 25 return $self; 26} 27 28 29# Métodos pra proteger o acesso aos nossos atributos 30sub nome{ 31 # Como $class no contrutor, $self aqui também é parâmetro implícito 32 my $self = shift; 33 $self->{NOME} = shift if @_; 34 return $self->{NOME}; 35} 36 37sub idade{ 38 my $self = shift; 39 $self->{IDADE} = shift if @_; 40 return $self->{IDADE}; 41} 42 43# Outro metodozinho só de exemplo 44sub fale{ 45 my $self = shift; 46 my $fala = shift || "Qualquer coisa"; 47 return $fala 48} 49 50# Precisa retornar um valor verdadeiro 511;

 

Agora, vamos criar uma subclasse de Pessoa

1package PessoaMuda; # Arquivo PessoaMuda.pm 2 3# Importando a super classe 4use Pessoa; 5 6# Aqui estamos dizendo que PessoaMuda é uma Pessoa 7@ISA = (Pessoa); 8 9# Sobrescrevendo o método fale pra que retorne nada... 10sub fale{ 11 my $self = shift; 12 return 13} 14 151;

 

E, por fim, vamos usar nossos objetos

1#!/usr/bin/env perl 2 3use strict; 4use warnings; 5 6# Importando nossas classes 7use Pessoa; 8use PessoaMuda; 9 10# Nova instância de Pessoa; 11my $p = Pessoa->new(); 12$p->nome('Alguém'); 13print $p->nome(); 14 15$p->idade(10000); 16print $p->idade(); 17 18print $p->fale('Eu nasci a 10000 anos atrás...') . "\n"; 19 20# Uma pessoa muda 21my $pm = PessoaMuda->new(); 22$pm->nome('Ninguém'); 23print $pm->nome(); 24 25$pm->idade(10000); 26print $pm->idade(); 27 28# Mudos não falam, lembra? Sobrescrevemos o método... 29print $pm->fale('Alguma coisa');

 

Bom, é isso! Pra mais sobre orientação a objetos no Perl, leiam o perltoot.

Valeu, e até a próxima!

  1. Nenhum comentário ainda.
  1. Nenhum trackbacks ainda.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.