Perl-Programmierung: Objektorientiert Programmieren in Perl


Deklaration einer Klasse in Perl Bearbeiten

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;

Kapselung Bearbeiten

Eigenschaft Bearbeiten

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

Erstellung und Aufruf einer Methode in Perl Bearbeiten

package MeineKlasse;

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

# Methode aufrufen
MeineKlasse::meineklassenmethode();

Konstruktor-Methoden in Perl Bearbeiten

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 Perl Bearbeiten

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 Instanz Bearbeiten

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

Wertebelegung von Instanzeigenschaften Bearbeiten

privat und öffentlich Bearbeiten

Vererbung 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!!"; 
  }
}