Thread Cookie Informationen gehen verloren
(8 answers)
Opened by Onkel_Tuka at 2012-04-24 18:34 Quote Stichworte: Vererbung, Delegation Letztere ist eine feine Sache ;) Delegation: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 package BasisModul; use CGI; sub new{ my $class = shift; my $self = bless{ CGI => CGI->new, }, $class; return $self; } Jetzt hat die Instanz vom BasisModul ein Attribut {CGI}. Damit nun diese Instanz die CGI::param()-Funktion aufrufen kann, wird diese delegiert: Code (perl): (dl
)
1 2 3 4 5 6 7 # in package BasisModul sub param{ my $self = shift; # Instanz return $self->{CGI}->param(@_); } # später dann einfach # $self->param(); Wenn weitere Klassen von BasisModul erben, wird dann auch die param()-Methode geerbt. Von 'Modul zu Modul hangeln' ist kein guter Weg, die Erfahrung habe ich gemacht. Und i.d.R. ist eine Vererbung über mehr als 2 Instanzen im Nachhinein schwer durchschaubar. Vielmehr gibt es immer die Möglichkeit, weitere/fremde Klassen bei Bedarf anzubinden oder auch Instanzen anderer Klassen als Attribute der eigenen Klasse zu erzeugen ohne von den fremden Klassen alle Methoden erben zu müssen. Anbindung: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 package Foo; our @ISA = qw(BasisModul); # Erbschaft von der Basis use IO::File; # gebraucht wird ein FileHandler in foo() sub foo{ my $self = shift; my $fh = IO::File->new; # oder $self->{FH} = IO::File->new; # Vorsicht! Denke an bestehende Attrs! $fh->open(...); } --Rosti |