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