Perl-Programmierung: Objektorientiert Programmieren in Perl


Deklaration einer Klasse in PerlBearbeiten

Klassen 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;

KapselungBearbeiten

EigenschaftBearbeiten

Eigenschaften gehören zu einer Instanz, und nicht zu einer Klasse.

Erstellung und Aufruf einer Methode in PerlBearbeiten

package MeineKlasse;

# Methode definieren
sub meineklassenmethode { 
  print "Die Ausführung meiner Klassenmethode ist gelungen!!"; 
}

# Methode aufrufen
MeineKlasse::meineklassenmethode();

Konstruktor-Methoden in PerlBearbeiten

Ein 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 PerlBearbeiten

Fü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 InstanzBearbeiten

Mit Hilfe des Konstruktors ist es möglich, eine Instanz einer Klasse zu erzeugen:

Wertebelegung von InstanzeigenschaftenBearbeiten

privat und öffentlichBearbeiten

Vererbung in PerlBearbeiten

{ 
  package meineunterklasse;
  @ISA=("meineklasse");
}

@ISA ist kein Skalar, sondern ein Array. Damit ist sichergestellt, dass Kindklassen in Perl mehrere Elternklassen haben können.

PolymorphieBearbeiten

Überlagerung einer Klassenmethode in PerlBearbeiten

{ 
  package meineunterklasse;
  @ISA=("meineklasse");
  sub meineklassenmethode { 
    print "Die Ausführung meiner überlagerten Klassenmethode ist gelungen!!"; 
  }
}