Teil VIII. Objektorientierte Programmierung

Ähnliche Dokumente
UML (Unified Modelling Language) von Christian Bartl

Vorlesung Programmieren

Unified Modeling Language 2

Klassendiagramm. (class diagram)

Analyse und Modellierung von Informationssystemen

Vorlesung Programmieren. Unified Modeling Language (UML) Unified Modeling Language (UML) Unified Modeling Language (UML)

Vorlesung Programmieren

UML -Klassendiagramme

NACHRICHTENTECHNISCHER SYSTEME

Objektorientierte Programmierung OOP

7. Übung Informatik II - Objektorientierte Programmierung

INSPIRE - Modellierung

11 Objektorientierte Programmierung, Teil 2

pue08 December 9, 2016

Algorithmen und Datenstrukturen 06

Objektorientierte Programmierung OOP

Einführung in die Programmierung

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

Christoph Kecher, Alexander Salvanos UML 2.5. Das umfassende Handbuch. Rheinwerk. Computing

Objektorientierte Softwareentwicklung

TEIL I Strukturdiagramme 1 Einführung Klassendiagramm Objektdiagramm Kompositionsstrukturdiagramm...

Einführung in die objektorientierte Programmierung

Die Unified Modeling Language (UML)

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Algorithmen und Datenstrukturen 07

Vererbung und Polymorphie

Die Unified Modeling Language UML

Objektorientierte Programmierung Studiengang Medieninformatik

Programmiertechnik Objektorientierung

8. Objektorientierte Programmierung. Informatik II für Verkehrsingenieure

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung

UML Crashkurs v0.1. UML für Fachinformatiker. von Hanjo Müller

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Vererbung und Polymorphie

Überblick. Überblick zum weiteren Inhalt

Unified Modeling Language (UML )

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Analyse und Modellierung von Informationssystemen

Programmieren in C/C++ und MATLAB

Teil II: OOP und JAVA (Vorlesung 9)

Fragen zur OOP in Java

Einstieg in die Informatik mit Java

Von der UML nach C++

Beziehungen zwischen Objekten

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Rückblick: Entity-Relationship-Modell

EINFÜHRUNG IN DIE WIRTSCHAFTSINFORMATIK -ÜBUNGEN- Marina Tropmann-Frick

01. Grundprinzipien der Vererbung

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

Java für Bauingenieure

Übungen Softwaretechnik I

Theorie zu Übung 8 Implementierung in Java

Vererbung, Polymorphie

Einstieg in die Informatik mit Java

Unified Modeling Language

10. Programmierungs-Phase: Objektorientierung Software Engineering

Objektorientiertes Design

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

6. Globalübung (zu Übungsblatt 8)

UML 2.0 Das umfassende Handbuch

Java Einführung Objektorientierte Grundkonzepte

Modellierung und Programmierung 1

Unified Modelling Language

3. Konzepte der objektorientierten Programmierung

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

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

Algorithmen und Datenstrukturen

Analyse und Design mit U ML 2.3

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

Analyse und Modellierung von Informationssystemen

Das umfassende Handbuch

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode:

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Formale Modellierung Vorlesung vom : Beyond JML

Inhaltsverzeichnis. Kurseinheit 1. Kurseinheit 2

Christoph Kecher UML2. Das umfassende Handbuch. Galileo Press

15 Unified Modeling Language (UML) 7 UML und Java Informatik 2 (SS 07) 595

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Informatik Klasse 13, Foliensatz 2 Vererbung und Operatorfunktionen

Geoinformation I Datenmodellierung

Visuelle Kryptographie. Anwendung von Zufallszahlen

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Modellierung von Verhalten OOPM, Ralf Lämmel

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

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

Einführung in die Programmierung mit Java

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

Jason T. Roff UML. IT Tutorial. Übersetzung aus dem Amerikanischen von Reinhard Engel

Repetitorium Informatik (Java)

Objektorientierte Modellierung (1)

Requirements Engineering I

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Informationsverarbeitung im Bauwesen

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Objektorientierte Programmierung (OOP) mit Matlab - Ein Crashkurs

Transkript:

Teil VIII Objektorientierte Programmierung IN8008, Wintersemester 2010/2011 128

Was ist ein Objekt? Ein Auto Eine Katze Ein Stuhl... Ein Molekül Ein Stern Eine Galaxie... Alles, das ein reales Objekt repräsentiert Alles, das ein abstraktes Objekt repräsentiert Alles, das irgendwelche Eigenschaften besitzt IN8008, Wintersemester 2010/2011 129

Beispiel: Liste umdrehen Als Funktion def reverse ( liste ): kopie = list ( liste ) for i in range ( len ( liste )): liste [i] = kopie [ len ( liste )-i -1] l = [1, 2, 3] reverse (l) Als Methode Class list () def reverse ( self ):... l = [1, 2, 3] l. reverse () IN8008, Wintersemester 2010/2011 130

Wie programmiert man objektorientiert? Ändert eure Denkweise Ändert euren Blickpunkt Es ist keine rein technische Frage Besonderheiten in python? Ihr verwendet schon die ganze Zeit objekorientierte Konzepte Ihr merkt es nur nicht In Python ist alles ein Objekt (sogar int) Woher weiß z.b. print, wie ein int als Text aussieht? >>> a=4 >>> a. str () 4 IN8008, Wintersemester 2010/2011 131

Theorie: Klassen und Objekte Klassen Eine Klasse ist so etwas ähnliches wie die Definition eines Typs Enthält spezifische Eigenschaften der zu erzeugenden Objekte Daten, die einmalig für die Gesamtheit an Objekten gespeichert werden (Klassenvariable / statische Variable) Daten, die für jedes (in jedem) Objekt gespeichert werden (Objektvariable) Operationen, die auf Objekten ausgeführt werden (Methoden) Repräsentiert eine Klasse von Dingen/Objekten Instanzen / Objekte Eine Instanz is ein konkretes Objekt, das zu einer Klasse gehört Eine Klasse spezifiziert Eigenschaften, ein Objekt hat konkrete Werte für diese Eigenschaften Zu einer Klasse können beliebig viele Objekte gehören Jedes Objekt gehört genau zu einer Klasse (Ausnahme: Polymorphismus) IN8008, Wintersemester 2010/2011 132

Theorie: Konstruktor, Destruktor Beim erzeugen einer Instanz wird... Speicher allokiert Eine Variable zum referenzieren des Objekts erzeugt Vielleicht manches initialisiert Die Initialisierung mit einem Konstruktor ( init (self,...)) durchgeführt Wenn ein Objekt nicht mehr gebraucht wird,... Wird Speicher freigegeben Müssen einige Dinge aufgeräumt werden Wird der Destruktor ( del (self,...)) aufgerufen ABER: Es ist nicht garantiert, wann er aufgerufen wird class Example : def init (self,...): do_ something def del (self,...): do_ something IN8008, Wintersemester 2010/2011 133

Theorie: self Verwenden eines Objekts Zugriff auf Methoden: objekt.methode(...) Beispiel: liste.append( x ) Zugriff auf Variablen: objekt.variable Beispiel: complex.real Zugriff innerhalb der Objektmethoden Konkretes Objekt wird außerhalb der Klassendefinition erzeugt Den Klassenmethoden ist der Name nicht bekannt Alle Methoden bekommen zusätzlichen Formalparameter self self ist immer der erste Formalparameter, dieser wird beim Aufruf (Aktualparameter) weggelassen Innerhalb der Methoden Zugriff auf andere Methoden und Variablen mit self.variable bzw. self.methode() IN8008, Wintersemester 2010/2011 134

Erstes Klassenbeispiel #!/ usr / bin / python class Student ( object ): anzahl = 0 def init (self, name ): # Konstruktor self. name = name # Objektvariable Student. anzahl += 1 # Klassenvariable def getname ( self ): # Methode return self. name @ staticmethod def getanzahl (): return Student. anzahl person1 = Student (" Alex ") person2 = Student (" Michael ") print person1. getname () # " Alex " print Student. getanzahl () # 2 IN8008, Wintersemester 2010/2011 135

Proceduraler Ansatz: Ofen #!/ usr / bin / python def backe ( temperature, mode ): Anweisungsblock ofentemperatur = 180 ofenmodus = 2 backe ( ofentemperatur, ofenmodus ) Bei einer ganzen Bäckerei? ofentemperaturen = [] ofenmodi = [] ofentemperaturen. append (190) ofenmodi. append (2)... for i in range ( len ( ofentemperaturen )): backe ( ofentemperaturen [i], ofenmodi [i]) IN8008, Wintersemester 2010/2011 136

Objektorientierter Ansatz: Ofen #!/ usr / bin / python class Ofen ( object ): def init (self, temperatur, modus ): self. temperatur = temperatur self. modus = modus def backe (): Anweisungsblock meinofen = Ofen (180,2) meinofen. backe () Und wieder die ganze Bäckerei ofenliste = [] ofenliste. append ( Ofen (190,2))... for ofen in ofenliste : ofen. backe () IN8008, Wintersemester 2010/2011 137

Was sind die Unterschiede? Prozeduraler Ansatz Prozeduren/Funktionen legen fest, wie etwas produziert wird Bei der Implementierung denkt man an durchzuführende Aktionen Um die Speicherung der Daten muss man sich selbst kümmern Objektorientierter Ansatz Objekte spezifizieren Dinge (real oder abstrakt) Bei der Implementierung muss man sich das Ding und seine Eigenschaften vorhalten Sämtliche Daten sind im Objekt selbst gespeichert Wenn viele Daten/Variablen mit einer Aktion verbunden sind, lohnt sich der objektorientierte Ansatz besonders IN8008, Wintersemester 2010/2011 138

Spezielle Variablen und Methoden Variablen und Methoden beginnend mit, aber nicht endend mit ( privatevar, privatemet()) sind privat Achtung: private Variablen und Methoden sind indirekt zugreifbar (. Klasse privatevar) get (value): Erlaubt Lesezugriff mit [] set (i, value): Erlaubt Schreibzugriff mit [] add (value): Erlaubt addition mit + str (): Wird von print verwendet call (): Erlaubt Aufruf mit objekt() class Test : def init (self, val ): self. value = val def add (self, b): return self. value +b. value +1 def mul (self,b): return self. value *b. value *2 IN8008, Wintersemester 2010/2011 139

Vererbung in der Realität Objekt IN8008, Wintersemester 2010/2011 140

Vererbung in der Realität Möbel Maschine Pflanze Objekt Comput. Tier IN8008, Wintersemester 2010/2011 140

Vererbung in der Realität Tisch Stuhl Auto Möbel Maschine Objekt Comput. Pflanze Tier Baum Säuget. Reptilien Blume Laptop Desktop Vectorc. Cluster IN8008, Wintersemester 2010/2011 140

Vererbung in der Realität Tisch Liegestuhl Stuhl Audi Auto VW BMW Möbel Maschine Ahorn Objekt Comput. Eiche Pflanze Tier Buche Baum Säuget. Reptilien Lilie Tulpe Blume Pferd Esel Rose Katze Laptop Desktop Vectorc. Cluster Krokodil Schlange IN8008, Wintersemester 2010/2011 140

Vererbung in der Realität Tisch Liegestuhl Stuhl Audi Auto VW BMW Möbel Maschine Ahorn Objekt Comput. Eiche Buche Lilie Tulpe Rose Pflanze Tier Baum Säuget. Reptilien Blume Pferd Esel Katze Golf Polo Phaeton Laptop Desktop Vectorc. Cluster Krokodil Schlange Maulesel IN8008, Wintersemester 2010/2011 140

Vererbung Klassen können von einer Basisklasse / Oberklasse erben Dadurch sind sie abgeleitete Klasse / Unterklasse der Basisklasse Alle Klassen können spezialisiert werden Alle Klassen zusammen bilden eine Klassenhierarchie Methoden der Oberklasse können übernommen oder neu definiert (überschrieben) werden class Werkstudent ( Student ): def init (self, name, thema ): self. thema = thema Student. init (self, name ) def printinfo ( self ): print "%s arbeitet an: %s" % ( self.name, self. thema ) person3 = Werkstudent (" Stefan ", " Kaffee kochen ") person3. printinfo () IN8008, Wintersemester 2010/2011 141

Modellierung mit UML Flussdiagramme Nur geeignet für kleine Algorithmen Keine Darstellung von Klassenhierarchien Keine Darstellung von Datenabhängigkeiten... UML: Unified Modeling Language visuelle Modellierungssprache Sprache unterstützt unterschiedliche Diagrammtypen Software wird über diese Diagramme/Modelle spezifiziert Kann als Basis für die Dokumentation dienen Automatische Code-Generierung möglich Auch für sonstige betriebliche Abläufe geeignet IN8008, Wintersemester 2010/2011 142

Strukturdiagramme Klassendiagramm Objektdiagramm Kompositionsstrukturdiagramm Komponentendiagramm Verteilungsdiagramm Paketdiagramm Profildiagramm Verhaltensdiagramme Aktivitätsdiagramm Anwendungsfalldiagramm (Use-Cases) Interaktionsübersichtsdiagramm Kommunikationsdiagramm Sequenzdiagramm Zeitverlaufsdiagramm Zustandsdiagramm IN8008, Wintersemester 2010/2011 143

Klassendiagramm Einzelne Klasse Klasse dargestellt durch Rechteck Horizontale Unterteilung in drei Bereiche Oberster Bereich: Klassenname Mittlerer Bereich: Attribute/Variablen Unterer Bereich: Methoden Klassenname + public_vars private_vars + public_methods private_methods IN8008, Wintersemester 2010/2011 144

Syntax der Klassenbeschreibung Name von Klasse/Variablen/Methoden frei wählbar +: public Variable/Methode (optional) -: private Variable/Methode (optional) Für Variablen kann der Typ angegeben werden (nach :) Für Methoden kann der Rückgabewert angegeben werden (nach :) IN8008, Wintersemester 2010/2011 145

Vererbung Darstellung durch Pfeil mit geschlossener Spitze ist ein - Beziehung Pfeil von spezialisierter Klasse zur Vaterklasse Fahrzeug Auto Motorrad IN8008, Wintersemester 2010/2011 146

Assoziation Semantischer Zusammenhang zwischen Klassen Beschreibung der Assoziation neben dem Pfeil Vorlesung liest hört Dozent Student IN8008, Wintersemester 2010/2011 147

Aggregation und Komposition Aggregation (leere Raute): hat ein Komposition (volle Raute): enthält ein Angabe der Anzahl möglich Fahrzeug 1 5 Besitzer Türen IN8008, Wintersemester 2010/2011 148