{pseudo}->[1],$self->{pseudo}->{a},"\n"; } what Class; what {num=>1, str=>'str', feld=>[qw(null eins zwei)], hash=>{hydra=>'irix',castor=>'hp'}, pseudo=>[{a=>2,b=>1}, qw(sieben sechs)], };">

Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Die Skriptsprache Perl (7)

Ähnliche Präsentationen


Präsentation zum Thema: "Die Skriptsprache Perl (7)"—  Präsentation transkript:

1 Die Skriptsprache Perl (7)
3/27/2017 Die Skriptsprache Perl (7) Wolfgang Friebel DESY Zeuthen

2 3/27/2017 Anmerkungen zu Teil 6 Pseudohashes haben Elemente 1,2, ... (0 ist Hash) Definition/Benutzung sonst wie normales Feld Aufrufargument muß nicht in Klammern stehen Ausnahme: Aufruf mit Referenz und Pfeilnotation Argument [...] ist Referenz auf anonymes Feld Argument {...} ist Referenz auf anonymen Hash Argument (...) ist Liste Komma vor schließender Klammer } oder ] erlaubt sub what{ my $self=shift; print "String: $self\n"; return unless ref $self; print "Typ:",ref($self),"\n" if ref $self; {local $,=" "; print $self->{pseudo}->[1],$self->{pseudo}->{a},"\n"; } what Class; what {num=>1, str=>'str', feld=>[qw(null eins zwei)], hash=>{hydra=>'irix',castor=>'hp'}, pseudo=>[{a=>2,b=>1}, qw(sieben sechs)], };

3 2. Grundlagen der Objektorientierung
3/27/2017 2. Grundlagen der Objektorientierung Wesentliche Elemente der Objektorientierung Objekt:erschließt Zugang zu Daten Klasse:definiert Eigenschaften eines Typs von Objekten Methode: Mittel, um auf Objektdaten zuzugreifen Vererbung: Bereitstellung zusätzlicher Methoden und Daten aus übergeordneten Klassen Polymorphie:gleiche Methoden ergeben je nach Objekttyp unterschiedliche Resultate Beispiel: Objekt:e: hydra, castor, paris,… (konkreteSachen mit Eigenschaften) Klasse: Hosts (beschreibt Hosts: Eigenschaften, Methoden) Methode: get_hostname, is_alive, start_daemon, … Vererbung: UnixHost und NTHost haben Gemeinsamkeiten, Unterschiede Polymorphie: get_hostname kann in UnixHost und NTHost verschieden realisiert sein

4 Objekte Enthalten die konkreten Daten
3/27/2017 Objekte Enthalten die konkreten Daten Daten werden Atribute (Eigenschaften) genannt Zugriff auf die Daten nur über Objekt(adresse) Zugriff auf die Daten nur mittels Methoden direkter Zugriff auf Daten widerspricht OO-Philosophie

5 Klassen beschreiben einen Typ von Objekten
3/27/2017 Klassen beschreiben einen Typ von Objekten welche Attribute gehören zum Objekt wie erzeugt man ein solches Objekt (Konstruktor) wie benutzt man ein solches Objekt (Methoden) (Objekt)Methoden definieren das Klasseninterface Klasse selbst kann Daten definieren Zugriff mit Klassenmethoden Objekt ist nach Klassendefinition gebaut (Instanz) Klasse stellt den Bauplan eines Objektes dar

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

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

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

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

10 3. Objektorientierung in Perl
3/27/2017 3. Objektorientierung in Perl Klassen Klasse in Perl realisiert als separater Namensraum Namensraum wird umgeschaltet mit package Befehl Standardmäßig befindet man sich im package main 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 $a=2; package myclass; $a=1; # Variable $myclass::a sub inc {$a++;} print "aus Paket: $a, aus myclass: $myclass::a, aus main: $::a\n"; package main;

11 Package (De)Initialisierung
3/27/2017 Package (De)Initialisierung Code zur frühest/spätmöglichsten Abarbeitung Definition mit BEGIN { statements; } bzw. END { statements; } Auch in Hauptprogramm möglich Analogie zu awk print "Dieser Scalar ist nicht leer: $init"; BEGIN { $init = "schon da\n"; }

12 Modules Module werden als Container für Packages genutzt
3/27/2017 Modules Module werden als Container für Packages genutzt Module enthält meist package gleichen Namens Modules haben Endung .pm Werden mit use Direktive geladen Modules werden in gesucht Namen können :: enthalten (separiert Directories) use Node::Host::Test;#File Node/Host/Test.pm Modules sollten bestimmte Konventionen einhalten Modules werden auch in Directories gesucht, die mit dem Flag -I angegeben worden sind. Das Feld INC wird bereits vor Programmausführung benötigt, daher ist Änderung zur Laufzeit sinnlos Stattdessen kann man BEGIN Blocks zur Modifikation von INC nutzen Programme, die require “filename.pl” benutzen, sind typischerweise im perl4 Stil geschrieben. Zu den meisten .pl Files von perl4 gibt es eine .pm Entsprechung in perl5. Packages und Modules sind nicht identisch. Ein Module kann mehrere Packages enthalten, ein Package kann über mehrere Module verteilt sein.

13 Erzeugung von Modulen Kochrezept (für Module/Test.pm):
3/27/2017 Erzeugung von Modulen Kochrezept (für Module/Test.pm): h2xs -X -n Module::Test erzeugt Skelettdateien, die man modifizieren muß Module mit Returnwert “wahr”: letzte Zeile: 1; Dokumentation im perlpod Format erstellen Installation des Modules im Standard Perl mit perl Makefile.PL; make; make test; make install Weiterführende Literatur: z.B. h2xs -X -n Module::Test liefert Writing Module/Test/Test.pm Writing Module/Test/Makefile.PL Writing Module/Test/test.pl Writing Module/Test/Changes Writing Module/Test/MANIFEST ls -lR drwxr-xr-x 3 friebel sysprog Feb 22 11:25 Module/ Module: drwxr-xr-x 2 friebel sysprog Feb 22 11:25 Test/ Module/Test: -rw-r--r friebel sysprog Feb 22 11:25 Changes -rw-r--r friebel sysprog Feb 22 11:25 MANIFEST -rw-r--r friebel sysprog Feb 22 11:25 Makefile.PL ...

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

15 Objekte in Perl Objekt ist “gesegnete” Referenz auf Datenstruktur
3/27/2017 Objekte in Perl Objekt ist “gesegnete” Referenz auf Datenstruktur “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 Objekterzeugung meist in Subroutine new Wird Konstruktor genannt package myclass; # Klasse myclass $record = {num=>1, str=>"a"}; print "record ist vom Typ ", ref($record), "\n"; # HASH bless $record, "myclass"; # Objekt $record print "record ist vom Typ ", ref($record), "\n"; # myclass

16 Methoden Objektmethode ist normale Subroutine in Perl
3/27/2017 Methoden Objektmethode ist normale Subroutine in Perl Aufruf über Objekt (Objektmethode) Aufruf über Klasse (Klassenmethode) oder Erstes Argument jeder Methode ist Klassenname sub Hallo { my $self = shift; my $class = ref $self; print "Ein Hallo aus der Klasse $class\n"; } $record->Hallo;

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

18 Einführendes Beispiel(2)
3/27/2017 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)
3/27/2017 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 Feld @INC mit einem print Statement an
3/27/2017 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)"

Ähnliche Präsentationen


Google-Anzeigen