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

eden edencardim em gmail.com
Sexta Novembro 2 16:30:21 PDT 2007


On 11/2/07, Lucas F. Rosada <lucasrosada em gmail.com> wrote:
> 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.

Sim, você precisa chamar classe->new, e filha->new, invés de
classe::new e filha::new, respectivamente. Use my $class = shift
sempre, assim você pode se aproveitar do polimorfismo.

-- 
edenc.vox.com


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