Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.

Ähnliche Präsentationen


Präsentation zum Thema: "Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen."—  Präsentation transkript:

1 Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen

2 Anmerkungen zu Teil 7 perl -I fügt an das Feld @INC an, um @INC am Anfang zu erweitern, wird {BEGIN..} benutzt n Ein Modul wird mit h2xs -X -n name erzeugt u statt test.pl Subdirectory t mit Testscripten benutzen u Scripte müssen *.t genannt werden u MANIFEST anpassen und perl Makefile.pl ausführen

3 Wiederholung zu Teil 7 n Klasse: Mit package definierter Namensraum n Objekt: Speicherbereich, auf den ein Pointer zeigt u Pointer nicht vom Typ ref sondern vom Typ Class mit bless erreicht ( $obj={};bless $obj,Class; ) n Methode: Subroutine, die über Objekt gerufen wird u $obj->method($arg); damit wird Class als erstes Argument übergeben Subroutine wird in package Class gesucht

4 4. Vererbung n Vererbung in Perl ist Vererbung von Methoden Vererbung wird duch das Feld @ISA geregelt @ISA enthält Klassennamen, von denen geerbt wird package Printer;#aktuelles Package Printer @ISA=(Net::Node);#Printer is a Net::Node Mehrfachvererbung: mehrere Elemente in @ISA @ISA=(Net::Node,Device); n Vererbung ist rekursiv, d.h. kann mehrstufig sein

5 Vererbungshierarchie n Vererbung dient zum Auffinden von Methoden u Wenn Methode nicht in aktueller Klasse dann Suche nach Methoden zuerst in $ISA[0] dann Suche in Eltern von $ISA[0] dann erst Suche in weiteren Elementen von @ISA dann Suche in Klasse UNIVERSAL dann Suche nach Methode AUTOLOAD in Klasse dann Suche nach Methode AUTOLOAD in Eltern u sonst Fehler

6 Vererbungshierarchie (2) Vererbung ist Suche nach Methode in @I SA u Suche zuerst nach oben im Vererbungbaum Danach Suche von links nach rechts in @ISA Alle Methoden erben von UNIVER SA L Wird Methode nicht gefunden, wird nach gleichen Regeln nach Methode AUTOLOAD gesucht

7 Die Klasse SUPER n SUPER ist ein Pseudo-Package n Idee: Methode in übergeordneter Klasse erledigt Teilaufgabe (Delegation), Rest in aktueller Methode n SUPER::test sucht in Eltern der aktuellen Klasse u gesamte Vererbungshierarchie wird durchsucht u erste gefundene Methode test wird verwendet

8 Die Methode AUTOLOAD AUTOLOAD wird gerufen, falls Methode nicht existiert In $AUTOLOAD steht Name der fehlenden Methode $AUTOLOAD ist Variable des aktuellen Packages AUTOLOAD erhält wie üblich Klasse übergeben n Damit vor allem viele get/set Methoden realisierbar n Nachteil: es wird jedesmal nach Methode gesucht n AUTOLOAD für jede undefinierte Methode gerufen

9 Optimiertes AUTOLOAD AUTOLOAD generiert Methode bei Bedarf u siehe Beispiel in Object Oriented Perl S.94/95 n Zuweisung einer Subroutinendefinition zur Funktion, deren Name in $AUTOLOAD steht n Lösung mit Typeglob Operator *{$AUTOLOAD} = sub {return $_[0]->{$attr}}; n Nur erster Aufruf nutzt AUTOLOAD

10 Automatische Methodenerzeugung n Klassen bestehen in einfachen Fällen aus Konstruktor und set/get Methoden für Attribute n Aussehen der Methoden gleicht sich n Erzeugung der Methoden nach Muster ist möglich n Mehrere Module in Standard Perl und CPAN n Class::Struct in Standard Perl n Class::MethodMaker auf CPAN (hier nicht installiert)

11 Class::Struct n Generiert Perl Code für new und Accessoren Stellt Subroutine struct bereit n Einfachste Benutzung mit use Class::Struct; struct Test => { name => $, feld => @ }; n Nachteil: nicht für komplexe Aufgaben geeignet

12 Hausaufgaben n Benutze die Klasse Super zur Erweiterung des Konstruktors new (Initialisierung von Variablen in übergeordnetem new) n Erweitere das AUTOLOAD Beispiel um eigene Routinen Warum wird im Beispie Test::DESTROY gerufen n Definiere eine eigene Methode per Typeglob n Mache Dich mit dem Modul Class::Struct vertraut


Herunterladen ppt "Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen."

Ähnliche Präsentationen


Google-Anzeigen