[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