[SP-pm] Dúvida com OO e classes filhas

André Garcia Carneiro andre.garcia.carneir em terra.com.br
Terça Novembro 6 03:45:54 PST 2007


Olá!


Exemplo bem medíocre abaixo. Sugiro você fazer RTFM em perlobj. No entanto, acho meramente didático, o Champs
outro dia mesmo me recomendou um livro "Learning Object Oriented Perl", Randal Schwartz.



<code_pai>


package pai;

sub new{
     my $self = {};
     bless $self;
     return $self;

}

#mais métodos aqui...


#Encapsulando atributos

sub atributo {
my ($self,$at) = @_;
$self->{atributo} = $at if $at;
return $self->{atributo};

}


1;

</code_pai>

<code_filho>

package filho;
use base 'pai'; #HERANÇA AQUI.

sub new {
    my $self = {};
     bless $self;
     return $self;
}

#Mais métodos aqui...

1;

<code_filho>




Cheers!





---------- Cabeçalho original -----------

De: saopaulo-pm-bounces+andre.garcia.carneir=terra.com.br em pm.org
Para: "Lista Perl Sao Paulo" saopaulo-pm em mail.pm.org
Cópia: 
Data: Fri, 2 Nov 2007 19:40:45 -0300
Assunto: [SP-pm] Dúvida com OO e classes filhas

> Boa noite, pessoas!
> 
> Primeiramente, tenho 2 classes: classe.pm e filha.pm. A classe filha.pm é
> filha de classe.pm. Seguem os códigos:
> 
> =========
> package filha;
> 
> use classe;
> our @ISA = qw(classe);
> 
> use vars qw(@ISA);
> sub new {
>    my $class = "filha";
> 
>    $class->SUPER::new;
> }
> 1;
> ==========
> 
> ==========
> #!/usr/bin/perl
> 
> package classe;
> 
> use strict;
> 
> sub new {
>    my $class = "classe";
>    my $self = {"a" => "b"};
>    bless ($self, $class);
> }
> 
> sub func {
>    my $self = shift;
> 
>    print $self->{"a"};
> }
> 
> 1;
> ========
> 
> Esse código, pelo que testei, funciona perfeitamente, por exemplo, quando eu
> instancia uma filha e chamo o método func, presente na classe pai.
> No entanto, pelo que me resta de lembranças de quando fucei OO em perl, ao
> invés de fazer
> sub new {
>    my $class = "classe"
> 
> eu deveria fazer
> sub new {
>    my $class = shift;
> 
> O problema é que usando o shift não funciona, ele me retorna um mensagem de
> erro quando tento instanciar a filha (pois ele não conhece um SUPER).
> Os arquivos problemáticos estão anexados.
> 
> Gostaria que alguém me ajudasse dizendo o que estou fazendo de errado ou se
> algo mudou e eu não percebi.
> 
> Abraços a todos! Agradeço desde já!
> 
> Bolha.
> 
> -- 
> "Café clareia as idéias, apesar de amarelar os dentes"
> -- Bolha
> 
> E-mail classificado pelo Identificador de Spam Inteligente Terra.
> Para alterar a categoria classificada, visite
>
http://mail.terra.com.br/cgi-bin/imail.cgi?+_u=andre.garcia.carneir&_l=1,1194043277.665580.6175.capalaba.hst.terra.com.br,8720,Des15,Des15
> 
> Esta mensagem foi verificada pelo E-mail Protegido Terra.
> Scan engine: McAfee VirusScan / Atualizado em 02/11/2007 / Versão: 5.1.00/5155
> Proteja o seu e-mail Terra: http://mail.terra.com.br/
> 
> 

--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org



Mais detalhes sobre a lista de discussão SaoPaulo-pm