Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Die Skriptsprache Perl (7) Wolfgang Friebel DESY Zeuthen.

Ähnliche Präsentationen


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

1 Die Skriptsprache Perl (7) Wolfgang Friebel DESY Zeuthen

2 Anmerkungen zu Teil 6 n Pseudohashes haben Elemente 1,2,... (0 ist Hash) n Definition/Benutzung sonst wie normales Feld n Aufrufargument muß nicht in Klammern stehen u Ausnahme: Aufruf mit Referenz und Pfeilnotation n Argument [...] ist Referenz auf anonymes Feld n Argument {...} ist Referenz auf anonymen Hash n Argument (...) ist Liste n Komma vor schließender Klammer } oder ] erlaubt

3 2. Grundlagen der Objektorientierung n Wesentliche Elemente der Objektorientierung u Objekt:erschließt Zugang zu Daten u Klasse:definiert Eigenschaften eines Typs von Objekt en u Methode: Mittel, um auf Objektdaten zuzugreifen u Vererbung: Bereitstellung zusätzlicher Methoden und Daten aus übergeordneten Klassen u Polymorphie:gleiche Methoden ergeben je nach Objekttyp unterschiedliche Resultate

4 Objekte n Enthalten die konkreten Daten n Daten werden Atribute (Eigenschaften) genannt n Zugriff auf die Daten nur über Objekt(adresse) n Zugriff auf die Daten nur mittels Methoden

5 Klassen n beschreiben einen Typ von Objekten u welche Attribute gehören zum Objekt u wie erzeugt man ein solches Objekt (Konstruktor) u wie benutzt man ein solches Objekt (Methoden) n (Objekt)Methoden definieren das Klasseninterface n Klasse selbst kann Daten definieren u Zugriff mit Klassenmethoden n Objekt ist nach Klassendefinition gebaut (Instanz)

6 Vererbung (Inheritance) n Klassen übernehmen Methoden anderer Klassen u abgeleitete Klasse erbt von Basisklasse u Vererbung kann mehrfach geschachtelt werden u Mehrfachvererbung erlaubt (multiple inheritance) n Vererbungshierarchie entspricht Abstraktionsgrad n Abstrakte Klassen sinnvoll, aber abstrakte Objekte? n Abstrakte Methoden als Platzhalter für Methoden in abgeleiteten Klassen (kein funktionierender Code)

7 Polymorphie n Methode gleichen Namens in mehreren Klassen n 1) Klassen haben gemeinsame Basisklasse u Methode in Basisklasse definiert u bei Bedarf alternative Methode in abgeleiteter Klasse -> Inheritance polymorphism n 2) Klassen haben nur Methode gleichen Namens u Mechanismus nötig, falls Methode nicht existiert -> Interface polymorphism

8 Weitere Konzepte n Zusammenfassung (Aggregation) u Sammlung von Objekten als neuer Objekttyp u neue zugehörige Klasse mit Methoden n Langlebigkeit von Objekten (Persistenz) u Objekt überlebt Programmende u Realisierung mit speziellen Methoden u meist Speicherung in Datenbank, Filesystem etc.

9 Literatur zu OO und Perl n OO: The OO Soapbox mit sehr vielen weiterführenden Referenzen n Perl: Linksammlung zu OOP in Perl n Buch: Object Oriented Perl, Damian Conway, Manning Publications, 2000

10 3. Objektorientierung in Perl Klassen n Klasse in Perl realisiert als separater Namensraum Namensraum wird umgeschaltet mit package Befehl u Standardmäßig befindet man sich im package main u Alle Datentypen eines Packages sind global Adressierung immer mit Präfix Paketname:: möglich package myclass; $a=1;# Variable $myclass::a sub inc {$a++;}# Subroutine &myclass::inc

11 Package (De)Initialisierung n Code zur frühest/spätmöglichsten Abarbeitung n Definition mit BEGIN { statements; } bzw. END { statements; } n Auch in Hauptprogramm möglich n Analogie zu awk

12 Modules n Module werden als Container für Packages genutzt n Module enthält meist package gleichen Namens Modules haben Endung.pm Werden mit use Direktive geladen Modules werden in gesucht n Namen können :: enthalten (separiert Directories) use Node::Host::Test;#File Node/Host/Test.pm n Modules sollten bestimmte Konventionen einhalten

13 Erzeugung von Modulen n Kochrezept (für Module/Test.pm): h2xs -X -n Module::Test u erzeugt Skelettdateien, die man modifizieren muß Module mit Returnwert wahr: letzte Zeile: 1; u Dokumentation im perlpod Format erstellen u Installation des Modules im Standard Perl mit perl Makefile.PL; make; make test; make install n Weiterführende Literatur: z.B.

14 Paket- und lexikalische Variablen Paketvariablen immer global, Variablen aus Hauptprogramm mit z.B. $main::a referenzierbar n Lexikalische Variablen gehören zu keinem Paket n Sind nur innerhalb eines Blockes zugreifbar n Werden bei Austritt aus Block gelöscht (Refcount 0) n Lexikalische Variablen unterstützen Enscapsulation

15 Objekte in Perl n Objekt ist gesegnete Referenz auf Datenstruktur u Segnung mit Klassennamen (=Packagename) package myclass; # Klasse myclass $record = {num=>1, str=>a}; print ref($record); # HASH bless $record, myclass; # Objekt $record print ref($record); # myclass n Objekterzeugung meist in Subroutine new n Wird Konstruktor genannt

16 Methoden n Objektmethode ist normale Subroutine in Perl n Aufruf über Objekt (Objektmethode) n Aufruf über Klasse (Klassenmethode) oder n Erstes Argument jeder Methode ist Klassenname

17 Einführendes Beispiel package Simple::Test; use strict; sub new { my ($self, $hashref) $hashref = {} unless $hashref; bless $hashref, $self; }

18 Einführendes Beispiel(2) sub get_num { my $self=shift; $self->{num} } sub set_num { my $self=shift; $self->{num}=shift; } sub str { my $self->{str}=$arg return $self->{num} }

19 Einführendes Beispiel(3) package main; my $obj1=new Simple::Test {str=>'Obj1',num=>7}; my $obj2=Simple::Test->new({str=>'Obj2', num=>3}); my $num = $obj1->get_num; $obj1->set_num($num*$num); my $str = $obj2->str(); $obj2->str("New String"); use Dumpvalue; my $dumper = new Dumpvalue; print$dumper->dumpValue($obj1), $dumper->dumpValue($obj2), "\n";

20 Hausaufgaben Zeige das mit einem print Statement an mit perl -I... und mit BEGIN {...} Was enthält der Hash %main:: (auch %:: geschrieben) Erzeuge ein Module mit h2xs und betrachte den Inhalt Schreibe ein Programm mit einem package Statement. Wie weit geht dort die Gültigkeit von lexikalischen Variablen? Erzeuge ein Objekt und schreibe eine Methode print, die den Klassennamen des Objektes ausgibt Modifiziere new so, daß $obj2=$obj1->new(); klappt


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

Ähnliche Präsentationen


Google-Anzeigen