Permalänk
Medlem

Objekt orientering i Perl

Jag sitter och ska omstrukturera en lite större objektorienterat Perl projekt.
Som det ser ut nu så finns en huvudklass som i sin tur instansierar 3 underklasser.
Det ser generellt ut ungefär så här:

package Parent; sub new { childA->new(); childB->new(); childC->new(); }

grejen är den att nu så ska det hela ändras så att alla child klasser ska ärva av Parent klassen. Dessutom så vill jag ha det så att Parent klassen har en uppsättning data som ska vara genmensam för alla child klasser.
Men det kommer inte att fungera så som det är just nu eftersom att Parent instansierar nya Child objekt för varje child.

Vad jag vill ha är något liknande static i java som gör så att datan som är static deklarerad i Parent bara instansieras en gång i Parent och blir sedan gemensam för alla Child klasser.

Jag hoppas förstår vad jag menar.
Här är ett litet exemple på hur jag vill göra.

package Parent; sub new { my ($class) = @_; my $this = {common_var => 12345}; bless $this, $class; childA->new(); childB->new(); childC->new(); } sub set { $this->{common_var} = 98765; } package childA sub print { print $this->{common_var}; }

Jag vill nu att efter att först skapat Parent och sedan anropat set. Så ska childA objektet skriva ut 98765, men det gör den inte eftesom att den är ett eget objekt och kommer därmed skriva ut undef.

Visa signatur

Flest prylar när man dör vinner

Permalänk

Du kan göra något i stil med detta

package Parent; my $common_var = 12345; sub new { my ($class) = @_; my $this = {common_var_ref => \common_var}; bless $this, $class; childA->new(); childB->new(); childC->new(); } sub set { ${$this->{common_var_ref}} = 98765; } package childA sub print { print ${$this->{common_var_ref}}; }

eller

package Parent; sub new { my ($class) = @_; my $this = {common_var_ref => \12345}; bless $this, $class; childA->new(); childB->new(); childC->new(); } sub set { ${$this->{common_var_ref}} = 98765; } package childA sub print { print ${$this->{common_var_ref}}; }

I den första finns en $common_var som är gemensam för alla Parent- och Child-klasser. I den andra får varje Parent-klass sin egen $common_var.