Perl-Programmierung: Objektorientiert Programmieren in Perl
Deklaration einer Klasse in Perl
BearbeitenKlassen werden in Perl nicht deklariert, sondern es werden nur Methoden einer Klasse definiert. Wenn eine Methode definiert wird, ordnet der Compiler die Methode dem aktuellen Paket zu.
Ein Paket wird durch die Funktion package
eingeleitet.
package MeineKlasse;
Kapselung
BearbeitenEigenschaft
BearbeitenEigenschaften gehören zu einer Instanz, und nicht zu einer Klasse.
Erstellung und Aufruf einer Methode in Perl
Bearbeitenpackage MeineKlasse;
# Methode definieren
sub meineklassenmethode {
print "Die Ausführung meiner Klassenmethode ist gelungen!!";
}
# Methode aufrufen
MeineKlasse::meineklassenmethode();
Konstruktor-Methoden in Perl
BearbeitenEin Konstruktor ist eine Methode, die dabei mithilft, eine Instanz einer Klasse zu erzeugen. In Perl gibt es keine zwingenden Vorschriften, wie diese benannt wird. Gewöhnlich wird diese "new" genannt, und wir empfehlen, diesen Gebrauch beizubehalten.
package MeineKlasse;
# Konstruktor definieren
sub new {
my $invocant=shift;
# wurde Konstruktor von Instanz- oder
# von der Klasse aufgerufen?
my $class=ref($invocant) || $invocant;
# Instanz ist eine Hashreferenz
my $self={};
# Hashreferenz zur Instanz machen
bless $self, $class;
print "Die Instanz wurde erzeugt!!";
# Instanz zurückgeben
return $self
}
Die Destruktor-Methode in Perl
BearbeitenFür den Destruktor ist der Methodenname DESTROY
zwingend vorgegeben. Der Destruktor ist aber nur notwendig, wenn bei der Auflösung einer Instanz noch besondere Anweisungen ausgeführt werden sollen.
Der Destruktor wird aufgerufen, sobald der garbage collector eine nicht mehr referenzierte Instanz gefunden hat und ihren Speicher freigeben möchte. Möchte man vor der Freigabe noch Handlungen durchführen, wie zum Beispiel das Schließen von Dateien oder das Kappen von Datenbankverbindungen, so muss man dies im Destruktor tun.
Die Reihenfolge, in der Destruktoren aufgerufen werden, hat nichts mit der Reihenfolge zu tun, in der die Instanzen nicht mehr refenziert werden. Auf die Reihenfolge des Destruktoraufrufs kann und soll sich der Programmierer nicht verlassen.
Erzeugung einer Instanz
BearbeitenMit Hilfe des Konstruktors ist es möglich, eine Instanz einer Klasse zu erzeugen:
Wertebelegung von Instanzeigenschaften
Bearbeitenprivat und öffentlich
BearbeitenVererbung in Perl
Bearbeiten{
package meineunterklasse;
@ISA=("meineklasse");
}
@ISA
ist kein Skalar, sondern ein Array. Damit ist sichergestellt, dass Kindklassen in Perl mehrere Elternklassen haben können.
Polymorphie
BearbeitenÜberlagerung einer Klassenmethode in Perl
Bearbeiten{
package meineunterklasse;
@ISA=("meineklasse");
sub meineklassenmethode {
print "Die Ausführung meiner überlagerten Klassenmethode ist gelungen!!";
}
}