Objektorientiertes Programmieren

Ähnliche Dokumente
Objektorientiertes Programmieren

Einführung in Perl. Packages, OO-Programmierung

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Vorkurs Informatik WiSe 15/16

7. Übung Informatik II - Objektorientierte Programmierung

Einstieg in die Informatik mit Java

Repetitorium Informatik (Java)

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Objektorientierte Programmierung Studiengang Medieninformatik

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

7. Objektorientierung. Informatik II für Verkehrsingenieure

Einführung: Verteilte Systeme - Remote Method Invocation -

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Philipp Güttler Objektorientierung und komplexe Datentypen

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Teil VI. Objektorientierte Programmierung. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2016/

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Tag 7 Repetitorium Informatik (Java)

Objektorientierte Programmierung und Klassen

Prof. W. Henrich Seite 1

Einführung in C# Teil 1. Matthias Nübling

Programmieren in C++ Überladen von Methoden und Operatoren

Algorithmen und Datenstrukturen

Objektorientierung (OO)

Objektorientierte Programmierung II

12 Abstrakte Klassen, finale Klassen und Interfaces

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen

4. Objektorientierte Programmierung mit C++

Java I Vorlesung Generics und Packages

Informationsverarbeitung im Bauwesen

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Java Grundlagen 2 - OOP

Objektorientierte Programmierung III

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen 07

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Objektorientiertes Programmieren II

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern

Implementieren von Klassen

Einstieg in die Programmierung mit Visual Basic.NET

Objektorientierte Programmierung OOP

Programmieren in Java

Gliederung der Folien

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse

9. Vererbung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

C++ - Objektorientierte Programmierung Polymorphie

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele

Tag 8 Repetitorium Informatik (Java)

Klassen als Datenstrukturen

Manfred Schüttengruber. Objektorientierte Programmierung mit Visual Basic 2005

Threads. Netzwerk - Programmierung. Alexander Sczyrba Jan Krüger

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Skriptum Bauinformatik SS 2013 (Vorlesung IV)

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

3 Objektorientierte Konzepte in Java

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Objektorientierte Programmierung Studiengang Medieninformatik

Objektorientierte Programmierung (OOP) mit Matlab - Ein Crashkurs

Transkript:

Perl-Praxis Objektorientiertes Programmieren Jörn Clausen joern@techfak.uni-bielefeld.de

Übersicht Objektorientierung in Perl Klassen, Objekte, Methoden Attribute Perl-Praxis Objektorientiertes Programmieren 2/20

Warum OO? Datenkapselung / information hiding name clashes exportierte Namen: use Matrix; use Music; @flipped = transpose(@matrix); @higher = transpose(8, @song); explizite Modul-Namen: @flipped = Matrix::transpose(@matrix); @higher = Music::transpose(8, @song); objekt-orientiert: $flipped = $matrix->transpose; $higher = $song->transpose(8); Perl-Praxis Objektorientiertes Programmieren 3/20

OO in Perl nachträgliche Erweiterung (ähnlich C/C++) Erweiterung vorhandener Konstrukte: Klasse Methode Objekt Modul Subroutine Referenz auf Variable Objekt weiß, zu welchem Modul es gehört OO in Perl weniger strikt als anderen Sprachen (C++, Java) Perl-Praxis Objektorientiertes Programmieren 4/20

Konstruktor kann beliebigen Namen haben Klasse kann mehrere Konstruktoren haben package Shouter; $VERSION= 1.0 ; Konstruktoren sub new { my $obj; bless(\$obj); return(\$obj); Instanziierung: use Shouter; $speaker = Shouter->new; Perl-Praxis Objektorientiertes Programmieren 5/20

Aufgaben Erhält der Konstruktor new irgendwelche Parameter? Wenn ja: Welche Daten werden übergeben? Perl-Praxis Objektorientiertes Programmieren 6/20

Konstruktoren, cont. typisches Idiom: sub new { my ($class) = @_; my $obj; bless(\$obj, $class); return(\$obj); für Vererbung wichtig alternative Syntax für Methodenaufruf: $speaker = new Shouter; Perl-Praxis Objektorientiertes Programmieren 7/20

parametrisierte Konstruktoren Parameter bei der Instanziierung übergeben: $lucy = Shouter->new( Lucy ); $sgt = Shouter->new( Sgt. Hartman ); normale Parameterübergabe (nach dem Klassennamen): sub new { my ($class, $name) = @_; my $obj = $name; return(bless(\$obj, $class)); referenzierte Variable $obj bisher unbenutzt jetzt Container für Attribut Name des Objekts Perl-Praxis Objektorientiertes Programmieren 8/20

Methoden Methoden verwenden: $lucy->hello; $sgt->hello; Methode definieren: sub hello { my ($self) = @_; print "$$self says hello\n"; $self ist das Objekt selbst -> übergibt Ding links von sich als erstes Argument Perl-Praxis Objektorientiertes Programmieren 9/20

parametrisierte Methoden Paramter an Methode übergeben: $lucy->say( you stupid beagle ); $sgt->say( move it, private pyle! ); Definition: sub say { my ($self, $text) = @_; print "$$self says: ",uc($text),"\n"; Perl-Praxis Objektorientiertes Programmieren 10/20

Destruktoren implizite Destruktion bei verlassen des Scopes automatische garbage collection Zerstörung erzwingen: undef($lucy); eigener Destruktor aber möglich: sub DESTROY { my ($self) = @_; print "$$self says good bye\n"; Datei schließen, Verbindung zu Datenbank abbauen,... Perl-Praxis Objektorientiertes Programmieren 11/20

Aufgaben Protokolliere in der Klasse Shouter, wieviele Objekte gerade instanziiert sind. Über die Klassenmethode count soll diese Zahl ermittelt werden können. Perl-Praxis Objektorientiertes Programmieren 12/20

Attribute einzelnes Attribut in Objekt-Variable ablegen mehrere Attribute: Hash-Referenz als Objekt $juser = Student->new( Joe User, juser, 12345, NWI ); Konstruktor: sub new { my ($class, $name, $account, $matnum, $subject) = @_; my $student = { name => $name, account => $account, matnum => $matnum, subject => $subject ; return(bless($student, $class)); beachte: $student ist bereits Referenz Perl-Praxis Objektorientiertes Programmieren 13/20

Zugriff auf Attribute unschön, häßlich, gefährlich,..., falsch: $juser = Student->new( Joe User, juser, 12345, NWI ); $subject = $juser->{subject; $juser->{subject = MGS ; -> kein Methodenaufruf sondern Hash-Zugriff Verletzung des Prinzips der Datenkapselung perlmodlib(1): Perl doesn t have an infatuation with enforced privacy. It would prefer that you stayed out of its living room because you weren t invited, not because it has a shotgun. Perl-Praxis Objektorientiertes Programmieren 14/20

korrekter Zugriff auf Attribute über Methoden: sub getsubject { my ($self) = @_; return($self->{subject); sub setsubject { my ($self, $newsubject) = @_; $self->{subject = $newsubject; Aufruf: $subject = $juser->getsubject; $juser->setsubject( MGS ); Perl-Praxis Objektorientiertes Programmieren 15/20

getter-setter-methoden Zusammenfassung von get... und set...: sub subject { my ($self, $newsubject) = @_; $self->{subject = $newsubject if defined($newsubject); return($self->{subject); Aufruf: $subject = $juser->subject; $juser->subject( MGS ); Rückgabe des gesetzten Attributs zur Kontrolle $newsubject = $juser->subject( MGS ); Perl-Praxis Objektorientiertes Programmieren 16/20

Aufgaben Eine komplexe Zahl z C läßt sich als Paar (α, β) von zwei reellen Zahlen α, β R darstellen. Die Länge einer komplexen Zahl ist definiert als z = α 2 + β 2 Implementiere eine Klasse CP, um komplexe Zahlen zu verarbeiten. Definieren die folgenden Methoden: $z = CP->new(3,4); # 3+4i $re = $z->re; # realer Anteil, 3 $im = $z->im; # imaginaerer Anteil, 4 $len = $z->length; # Laenge, 5 Perl-Praxis Objektorientiertes Programmieren 17/20

Aufgaben, cont. Addition und Multiplikation von komplexen Zahlen sind folgendermaßen definiert: (α 1, β 1 ) + (α 2, β 2 ) = (α 1 + α 2, β 1 + β 2 ) (α 1, β 1 ) (α 2, β 2 ) = (α 1 α 2 β 1 β 2, α 1 β 2 + α 2 β 1 ) Implementiere entsprechende Methoden: $s = $z->add($y); $p = $z->mul($y); $v = $s->add($p)->mul($z); Beachte, daß sowohl der übergebene Paramter $y als auch die Rückgabewerte $s bzw. $p Objekte vom Typ CP sind. Perl-Praxis Objektorientiertes Programmieren 18/20

Projekt Implementiere eine einfache Stundenplanverwaltung mit den beiden Klassen Student und Course. Die folgenden Attribute sollen verwaltet werden: Student name Joe User account juser matnum 12345 subject NWI grade GS Course title Perl-Praxis time 2 type Ü grade GS Perl-Praxis Objektorientiertes Programmieren 19/20

Projekt, cont. Die folgenden Methoden sollen implementiert werden: $juser = Student->new( Joe User, juser, 12345, NWI, GS ); $perl = Course->new( Perl-Praxis, 2, Ü, GS ); $juser->enroll($perl); $juser->totaltime; $juser->timetable; $perl->as_text; # Berechtigung pruefen # Gesamt-SWS # tabellarischer Stundenplan # Informationen zu Veranstaltung foreach $course ($juser->courses) { print $course->as_text; Perl-Praxis Objektorientiertes Programmieren 20/20