Die Skriptsprache Perl (7)

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Imperative Programmierung
der Universität Oldenburg
Imperative Programmierung
der Universität Oldenburg
Objektorientierte Programmierung
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Kapselung , toString , equals , Java API
Kapitel 4 Datenstrukturen
der Universität Oldenburg
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 4 Vererbung Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Objektorientierte Programmierung
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Einführung in die Programmierung mit Java
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Die Skriptsprache Perl (6) Wolfgang Friebel DESY Zeuthen.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
C++ Vererbung und Polymorphie
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Informatik 1 Letzte Übung.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
Objectives Verstehen was unterDelegate verstanden wird
EPROG Tutorium #4 Philipp Effenberger
Objektorientierung.
Benutzerdefinierte Datentypen (1)
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Inf K1/2 Sj 13/14 GZG FN W.Seyboldt 1 SFZ FN Sj. 13/14 Python Klassen und Objekte.
RelationentheorieObjektorientierte Datenbanken  AIFB SS C++-ODL (1/6) Erweiterung des deklarativen Teils einer C++-Klasse Datentypen d_String,
Einführung in die Programmierung mit Java
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003.
Objektorientierte Programmierung (OOP)
Die Programmiersprache Ruby Seminarvortrag von Lia Schulze Dephoff 1.
C++ FÜR cOMPUTERSPIELENTWICKLER
OOP II.
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
Implementieren von Klassen
 Präsentation transkript:

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

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)], };

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

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

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

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)

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

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.

Literatur zu OO und Perl 3/27/2017 Literatur zu OO und Perl OO: The OO Soapbox http://www.progsoc.uts.edu.au/~geldridg/cpp/ mit sehr vielen weiterführenden Referenzen Perl: Linksammlung zu OOP in Perl http://genome-www.stanford.edu/perlOOP/ Buch: Object Oriented Perl, Damian Conway, Manning Publications, 2000

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;

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

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 Directories @INC 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.

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. http://world.std.com/~swmcd/steven/perl/ 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 2048 Feb 22 11:25 Module/ Module: drwxr-xr-x 2 friebel sysprog 2048 Feb 22 11:25 Test/ Module/Test: -rw-r--r-- 1 friebel sysprog 125 Feb 22 11:25 Changes -rw-r--r-- 1 friebel sysprog 45 Feb 22 11:25 MANIFEST -rw-r--r-- 1 friebel sysprog 235 Feb 22 11:25 Makefile.PL ...

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

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

Methoden Objektmethode ist normale Subroutine in Perl 3/27/2017 Methoden Objektmethode ist normale Subroutine in Perl Aufruf über Objekt (Objektmethode) $object->method(@args); Aufruf über Klasse (Klassenmethode) Class->method(@args); oder Class::method(@args); 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;

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

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,$arg)=@_; $self->{str}=$arg if @_=1; return $self->{num}

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

Hausaufgaben Zeige das Feld @INC mit einem print Statement an 3/27/2017 Hausaufgaben Zeige das Feld @INC mit einem print Statement an Modifiziere @INC 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