Objektorientiertes Programmieren

Ähnliche Dokumente
Objektorientiertes Programmieren

Einführung in Perl. Packages, OO-Programmierung

Einstieg in die Informatik mit Java

7. Übung Informatik II - Objektorientierte Programmierung

Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Objektorientierte Programmierung Studiengang Medieninformatik

Einstieg in die Informatik mit Java

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

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

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

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

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

Tag 8 Repetitorium Informatik (Java)

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Objektorientierte Programmierung und Klassen

3 Objektorientierte Konzepte in Java

Prof. W. Henrich Seite 1

Einstieg in die Informatik mit Java

Programmieren in C++ Überladen von Methoden und Operatoren

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

Philipp Güttler Objektorientierung und komplexe Datentypen

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

12 Abstrakte Klassen, finale Klassen und Interfaces

Algorithmen und Datenstrukturen

Java I Vorlesung Generics und Packages

3 Klassen, Attribute, Methoden

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

3 Klassen, Attribute, Methoden

Einstieg in die Informatik mit Java

Objektorientierte Programmierung III

Javakurs 2013 Objektorientierung

Objektorientierung: Klassen und Objekte

Perl-Praxis. CGI-Skripte. Jörn Clausen

Einstieg in die Programmierung mit Visual Basic.NET

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

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

Implementieren von Klassen

Tag 7 Repetitorium Informatik (Java)

Gliederung der Folien

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Grundlagen von Python

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

Programmieren in Java

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

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

Objektorientierung (OO)

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

Informationsverarbeitung im Bauwesen

XML-Frameworks in verschiedenen Programmiersprachen Proseminar Textkodierung und Auszeichnung

Objektorientierte Programmierung Studiengang Medieninformatik

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

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

Skriptum Bauinformatik SS 2013 (Vorlesung IV)

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

Klassen als Datenstrukturen

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

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

Programmieren I. Kapitel 8. Vererbung

1 Klassen und Objekte

Vererbung, Polymorphie

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Die Unified Modeling Language (UML)

3 Objektorientierte Konzepte in Java

Einführung in die Programmierung für NF MI. Übung 07

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Einstieg in die Informatik mit Java

Vererbung und Polymorphie

Java Einführung Vererbung und Polymorphie. Kapitel 13

Javakurs für Anfänger

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

XML-Praxis. Mit XSLT arbeiten. Jörn Clausen

11. Komponenten Grundlagen der Programmierung 1 (Java)

Vokabeln. 4.1 Benutzer definierte Datentypen. Kapitel 4. Prof. Dr. Gerhard Berendt C++ oop? SS 2002 Arbeitsblatt 4

Objektorientierte Programmierung

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Algorithmen und Programmierung II

Prinzipien der objektorientierten Programmierung (OOP)

Polymorphie. 15. Java Objektorientierung II

Einstieg in die Informatik mit Java

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

UNIVERSITÄT SIEGEN Fachbereich 12, Elektrotechnik und Informatik Fachgruppe Betriebssysteme / verteilte Systeme

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 Perl-Praxis Objektorientiertes Programmieren 3/20

Warum OO? Datenkapselung / information hiding name clashes Perl-Praxis Objektorientiertes Programmieren 3/20

Warum OO? Datenkapselung / information hiding name clashes exportierte Namen: use Matrix; use Music; @flipped = transpose(@matrix); @higher = transpose(8, @song); Perl-Praxis Objektorientiertes Programmieren 3/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); Perl-Praxis Objektorientiertes Programmieren 3/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 Perl-Praxis Objektorientiertes Programmieren 14/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