Metainformationen zur Seite
Dies ist eine alte Version des Dokuments!
Perl Klassen und Objekte
Klassendefinition
Eine Klasse in Perl ist ein Package. Der Dateiname des Moduls sollte gleich sein.
Der name des Konstrucktors ist egal, es bietet sich aber new an.
- MyClass.pm
package MyClass; sub new { # erstes Argument ist der Klassenname my $Klasse = shift; my $Referenz = {}; # anonymer Hash # setze object eigenschaft $Referenz->{"myEigenschaft"} = "Wert meiner Eigenschaft"; # Objekt-Referenz wird erzeugt bless( $Referenz, $Klasse ); return($Referenz); } ... 1;
my $myObj = new MyClass( ... ); # oder: my $myObj = MyClass->new( ... );
Eigenschaften
Objekteigenschaften werden in der Objektreferenz gespeichert. Siehe auch oben im Konstruktor (sub new).
package MyClass; my $statischeEigenschaft; ... 1;
Methoden
Methoden Deklaration:
# private Methode my $privateMethode = sub { ... }; sub methode { ... # private Funktion aufrufen $obj->$privateMethode ( $param ); # oder: $privateMethode->($obj, $param); # oder: MyClass->$privateMethode ( $param ); }
Je nach Aufruf verhalten sich die Methoden - genauer gesagt die Parameterübergabe - anders:
$obj->methode( $param );
- Hier werden der Function zwei Parameter übergeben:
- $obj
- $param
MyClass->methode( $param );
- Auch hier werden der Function zwei Parameter übergeben:
- „MyClass“
- $param
MyClass::methode( $param );
- Hier wird der Function nur ein Parameter übergeben:
- $param
Ableiten
package MyClass; # von MySuperClass ableiten: use parent [-norequire,] 'MySuperClass' [, ... ]; # entspricht den früher benutzten Ausdruck: require|use MySuperClass; push @ISA, qw( MySuperClass [, ...] ); ... 1;
In überladender Methode die Elternmethode aufrufen
sub methode { my $self = shift; $self->SUPER::methode(); # oder: $self->MySuperClass::methode(); }
Diskussion