Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern



Ähnliche Dokumente
C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Programmieren in Java

Objektorientierte Programmierung OOP

Java: Vererbung. Teil 3: super()

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

Objektorientierte Programmierung mit Python Objekt und Klassen

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Objektorientierte Programmierung. Kapitel 12: Interfaces

Grundlagen von Python

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

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

5. Abstrakte Klassen

Kompetent objektorientiert programmieren

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Objektorientierte Programmierung

Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Einleitende Bemerkungen

Prinzipien Objektorientierter Programmierung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Kapitel 6. Vererbung

Kapitel 6. Vererbung

GetName(), GetName(), GetGeschlecht() und AelterWerden().

3. Konzepte der objektorientierten Programmierung

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Informatik für Schüler, Foliensatz 23 Konstruktor, String-Methode und Heldenklassse

Einführung in die Programmierung

Angewandte Mathematik und Programmierung

Java Kurs für Anfänger Einheit 5 Methoden

Zeichen bei Zahlen entschlüsseln

3 Objektorientierte Konzepte in Java

Programmierkurs Python I

Kapitel 6. Vererbung

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Objektorientierte Programmierung

5.6 Vererbung. Vererbung

Einführung in die Java- Programmierung

Excel Funktionen durch eigene Funktionen erweitern.

Programmierkurs Java

Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

OO Softwareentwicklung

Vorkurs C++ Programmierung

11 Objektorientierte Programmierung, Teil 2

Diana Lange. Generative Gestaltung Operatoren

BEISPIELKLAUSUR Softwareentwicklung:

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009

Vererbung & Schnittstellen in C#

Einführung in die Programmierung mit Java. Hörsaalübung

10 Objektorientierte Programmierung, Teil 1

Java Einführung Abstrakte Klassen und Interfaces

Objektorientierte Programmierung

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

4 Vererbung, Polymorphie

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

Einführung in die Programmierung für Wirtschaftsinformatik

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektbasierte Entwicklung

Klassenbeziehungen & Vererbung

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

368 4 Algorithmen und Datenstrukturen

C++ - Objektorientierte Programmierung Polymorphie

Objektorientierte Programmierung

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Objektorientiertes JavaScript

Programmieren Tutorium

SEQUENZDIAGRAMM. Christoph Süsens

Einführung in die Programmierung für NF

Computeranwendung und Programmierung (CuP)

3 Objektorientierte Konzepte in Java

Objektorientierung: Klassen und Objekte

PHP Aufbaukurs. Tag 3. PHP5 & Klassen

Bedienung von BlueJ. Klassenanzeige

Übung 9 - Lösungsvorschlag

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

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

Wurzeln als Potenzen mit gebrochenen Exponenten. Vorkurs, Mathematik

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Programmiersprachen und Übersetzer

Klassendiagramm. (class diagram)

1 Mathematische Grundlagen

SEP 114. Design by Contract

C++ - Einführung in die Programmiersprache Objektorientierte Programmierung

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Client-Server-Beziehungen

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Word 2010 Schnellbausteine

Aufgabensammlung Bruchrechnen

Folge 18 - Vererbung

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

Dokumentation für das Spiel Pong

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Transkript:

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung Eltern Kind Kind Kind Kind

Prinzipien der objektorientierten Programmierung Vererbung Strukturierung von Klassen. Oberbegriffe beschreiben allgemeine Eigenschaften und Methoden eines Objekts. Spezielle Objekte erben die allgemeinen Eigenschaften und Methoden. Eltern-Kind-Beziehung. Polymorphie (Vielgestaltig): Geerbte Methoden werden an die speziellen Eigenschaften eines Objektes angepasst. Methoden sind in Abhängigkeit des Datentyps unterschiedlich implementiert. Objektorientierte Programmierung, 13.09.10 Seite 2

Vererbung Definition von Klassen auf Basis von bestehenden Klassen. Implementierung von ist ein. bildet ein hierarchisches Modell ab. Das Modell sollte maximal drei Ebenen besitzen. Objektorientierte Programmierung, 13.09.10 Seite 3

Beispiel Konto GiroKonto - dispo : float - kontonummer : string - pinnummer : string +abheben(float betrag) +einzahlen(float betrag) +eroeffnen +schliessen FestgeldKonto - laufzeit : int - zins : float Objektorientierte Programmierung, 13.09.10 Seite 4

Darstellung der Vererbung Die Vererbung von Klassen kann mit Hilfe einer Baumstruktur abgebildet werden. Die Wurzel ist die Mutter aller Klassen. In Python wird die Klasse «object» genutzt. Darunter verzweigen sich die Klassen. Um so tiefer man eindringt, um so spezieller werden die Klassen. Um so näher man an der Wurzel ist, um so allgemeiner sind die Klassen. In der Vererbung werden gerichtete Beziehungen beschrieben. Ein Girokonto ist ein Konto. Ein Ballon ist ein Luftfahrzeug. Objektorientierte Programmierung, 13.09.10 Seite 5

Regeln Es werden alle Attribute und Methoden von der Basisklasse geerbt. Neue Attribute und Methoden können hinzufügt werden. Methoden aus der Basisklasse können überschrieben werden. Die Methoden aus der Basisklasse werden mit einer neuen Funktionalität versehen. Objektorientierte Programmierung, 13.09.10 Seite 6

Basis- und Subklassen Basisklasse Fahrzeuge Subklasse Land Wasser Luft Schiene Motorisiert Unmotorisiert Unmoterisiert Motorisiert Flugzeug Zeppelin Heißluftballon Objektorientierte Programmierung, 13.09.10 Seite 7

Subklasse (Unterklasse, abgeleitete Klasse)... erbt von der Basisklasse alle Attribute und Methoden. beschreibt die speziellen Elemente einer Klasse. ist von einer anderen Klasse abgeleitet. befindet sich in der Hierarchie unterhalb einer anderen Klasse. Objektorientierte Programmierung, 13.09.10 Seite 8

Basisklasse (Oberklasse, parent class)... ist der Ausgangspunkt für die Bildung von weiteren Klassen. implementiert Kategorien für Klassen. fasst Gemeinsamkeiten von verschiedenen Klassen zusammen. sortiert verschiedene Klassen in Schubladen ein. kann selber Subklasse einer anderen Basisklasse sein. Objektorientierte Programmierung, 13.09.10 Seite 9

Generalisierung und Spezialisierung Spezialisierung Fahrzeuge Generalisierung Land Wasser Luft Schiene Motorisiert Unmotorisiert Unmoterisiert Motorisiert Flugzeug Zeppelin Heißluftballon Objektorientierte Programmierung, 13.09.10 Seite 10

Generalisierung... sucht Gemeinsamkeiten aller Klassen in einer Projektbeschreibung. kategorisiert Klassen. nutzt die Bottom-Up-Methode. Die Klassen werden zuerst allgemein beschrieben und anschließend in Abhängigkeit der Aufgabe spezialisiert. Objektorientierte Programmierung, 13.09.10 Seite 11

Spezialisierung... beschreibt die Aktion erbt von. stellt eine ist eine -Beziehung dar. beschreibt exakt ein Objekt in einer Schublade. nutzt die Top-Down-Methode. Es werden zuerst alle benötigten Klassen in der Projektbeschreibung gesucht und implementiert. Anschließend werden Gemeinsamkeiten gesucht und diese in übergeordneten Klassen implementiert. Objektorientierte Programmierung, 13.09.10 Seite 12

Basisklasse in Python «class Grafik(object): ANZAHL = 0 def init (self, x = 0, y = 0): pass def set_pos(self, xpos, ypos): pass» def get_pos(self): pass Objektorientierte Programmierung, 13.09.10 Seite 13

Klassenkopf einer Basisklasse... «class Klassenname(object)». beginnt mit dem Schlüsselwort «class». Dem Schlüsselwort folgt der Klassenname. Der Klassenname... ist frei wählbar. identifiziert eindeutig eine Klasse. Am Ende des Kopfes folgt die Parameterliste, begrenzt durch die runden Klammern. Objektorientierte Programmierung, 13.09.10 Seite 14

Parameterliste «class Klassenname(object)». beginnt und endet mit den runden Klammern. enthält Namen von definierten Klassen. Die Elemente in der Liste werden durch Kommata getrennt. der Basisklasse ist leer oder sollte von «object» erben. Objektorientierte Programmierung, 13.09.10 Seite 15

Subklasse in Python «class Rechteck(Grafik): def init (self, breite = 10, hoehe = 20): Grafik. init (self, 0, 0) self. height = hoehe self. width = breite def set_groesse(self, breite, hoehe): pass» def get_groesse(self): pass Objektorientierte Programmierung, 13.09.10 Seite 16

Klassenkopf einer Subklasse... «class Klassenname(basisklasse, basisklasse)». beginnt mit dem Schlüsselwort «class». Dem Schlüsselwort folgt der Klassenname. Der Klassenname... ist frei wählbar. identifiziert eindeutig eine Klasse. Am Ende des Kopfes folgt die Parameterliste, begrenzt durch die runden Klammern. Objektorientierte Programmierung, 13.09.10 Seite 17

Parameterliste «class Klassenname(basisklasse, basisklasse)». beginnt und endet mit den runden Klammern. enthält Namen von definierten Klassen. Die Elemente in der Liste werden durch Kommata getrennt. Eine Mehrfachvererbung ist durch die Nennung von mehreren Klassen für eine Subklasse realisierbar. Die Subklasse basiert auf mehr als eine Klasse. Objektorientierte Programmierung, 13.09.10 Seite 18

Methoden aufrufen Methoden in der Subklasse: «[subklasse].[methode](arg01, arg02)» Methoden aus der Basisklasse: «[subklasse].[methode](arg01, arg02)» Die Methode wird der Klasse durch ein Punkt verbunden. Jeder Methode können mit Hilfe der Parameterliste verschiedenen Werte übergeben werden. Die Elemente in der Liste werden durch Kommata getrennt. Die angegebene Methode wird zuerst in der Subklasse gesucht. Falls sie dort nicht vorhanden ist, werden die Basisklassen in der, in der in der Parameterliste angegebenen Reihenfolge durchsucht. Objektorientierte Programmierung, 13.09.10 Seite 19

Beispiel «# Basisklasse class Grafik(object): def set_pos(self, xpos, ypos): pass def get_xpos(self): return self. xpos def write_pos(self): pass «# Subklasse class Grafik(object): def set_groesse(self, breite, hoehe): pass def get_groesse(self): pass def write_groesse(self): pass» mygrafik = modul.grafik(20,20) mygrafik.write_pos()()» myrechteckstandard = modul.rechteck() myrechteckstandard.write_pos() myrechteckstandard.write_groesse() Objektorientierte Programmierung, 13.09.10 Seite 20

Benutzerdefinierte Fehlerklasse «class clsmyerror(exception): fehlermeldung = {5000 : "Negative Zahl", 6000 : "Wert = 0"} def init (self, fehlernr): self.fehlernr = fehlernr» def getmeldung(self): return clsmyerror.fehlermeldung[self.fehlernr] Objektorientierte Programmierung, 13.09.10 Seite 21

Hinweise Benutzerdefinierte Fehlerklassen sollten immer von der vordefinierten Klasse «exception» erben. Der Programmierer kann die Fehlerklassen aber selber gestalten. Fehlerklassen sollten möglichst einfach sein. Objektorientierte Programmierung, 13.09.10 Seite 22

Nutzung von benutzerdefinierten Fehlerklasse «import fehler_class try: divident = float(strdivident) if (divident < 0): raise fehler_class.clsmyerror(5000) except fehler_class.clsmyerror as e: print(e.getmeldung())» Objektorientierte Programmierung, 13.09.10 Seite 23

Polymorphie (Vielgestaltigkeit, Ähnlichkeit) innerhalb einer Klasse: Nachbildung von mathematischen Operationen, Vergleichsoperationen etc, um die Funktionalität der Klasse an vordefinierte Klassen anzupassen. Überladung von Klassen. bei der Vererbung von Klassen: Die Subklasse überschreibt eine Methode der Basisklasse. Die Subklasse nutzt virtuelle Methoden. Objekte einer Subklasse, die alle die gleiche Basisklasse nutzen, reagieren auf ein und dieselbe Nachricht unterschiedlich. Objektorientierte Programmierung, 13.09.10 Seite 24

Methoden überschreiben Methoden aus der Basisklasse werden überdeckt. Geerbte Methoden werden mit einer neuen Funktionalität versehen. Die Methode aus der Basisklasse wird in der Subklasse neu definiert. Konstruktoren der Basisklassen werden häufig überschrieben. Objektorientierte Programmierung, 13.09.10 Seite 25

Konstruktor überschreiben «class Grafik(object): def init (self, x = 0, y = 0): self. xpos = x self. ypos = y» class Rechteck(Grafik): def init (self, breite = 10, hoehe = 20): Grafik. init (self, 0, 0) self. height = hoehe self. width = breite self. xposro = breite self. yposro = hoehe Objektorientierte Programmierung, 13.09.10 Seite 26

Konstruktor einer Subklasse «def init (self, breite = 10, hoehe = 20)». beginnt mit dem Schlüsselwort «def». hat immer den Namen «init» hat eine Parameterliste, die durch runde Klammern begrenzt wird. In dieser Parameterliste werden alle zu übergebenen Parameter aufgelistet. Die Listenelemente werden durch ein Kommata getrennt. ruft zuerst den Konstruktor der Basisklasse auf «Grafik. init (self, 0, 0)» und setzt anschließend die Objektattribute der Subklasse. Objektorientierte Programmierung, 13.09.10 Seite 27

Methode in der Basisklasse class Grafik(object): def set_pos(self, xpos, ypos): self. xpos = xpos self. ypos = ypos Objektorientierte Programmierung, 13.09.10 Seite 28

überschreiben «class Rechteck(Grafik): def set_pos(self, x_lo, y_lo, x_ro = 0, y_ro = 0): abstandx = self.get_xpos() - x_lo abstandy = self.get_ypos() - y_lo super().set_pos(x_lo, y_lo)» if (x_ro > 0): self. width = self. width + abstandx else: self. xposro = self.get_xpos() + self. width Objektorientierte Programmierung, 13.09.10 Seite 29

Zugriff auf Methoden der Basisklasse... mit Hilfe der Methode «super()»: Beispiel: «super().set_pos(x_lo, y_lo)». Arbeitet nur mit Basisklassen zusammen, die von «object» erben. Seit Python 2.2 ist die Methode implementiert. mit Hilfe des Namens: Beispiel: «Grafik. init (self, 0, 0)». Die Angabe des Objekts «self» wird immer benötigt. Objektorientierte Programmierung, 13.09.10 Seite 30

Operatoren überladen, um... Rechenoperatoren oder Vergleichsoperatoren für benutzerdefinierte Datentypen zu implementieren. Klassen mit einer Funktionalität ähnlich wie Standard- Datentypen auszustatten. Objektorientierte Programmierung, 13.09.10 Seite 31

Beispiel Das Pluszeichen kann eine Ganzzahl oder Dezimalzahl addieren. Das Pluszeichen wurde für Strings überladen. Das Pluszeichen verkettet zwei Strings. Objektorientierte Programmierung, 13.09.10 Seite 32

Operatoren in Python Umgangssprachliche Schreibweise: summe = a + b Der Operator definiert eine Verknüpfungsvorschrift. Formale Schreibweise: summe = add (a, b) Die Operatoren sind als Methoden implementiert. Der Methode «add» werden zwei Objekte übergeben. Das Ergebnis der Berechnung wird zurückgegeben. Objektorientierte Programmierung, 13.09.10 Seite 33

Addition neu definieren «class Rechteck(Grafik): def add (self, other): breite = self. width + other. width hoehe = self. height + other. height newrechteck = Rechteck(breite, hoehe)» return newrechteck Objektorientierte Programmierung, 13.09.10 Seite 34

Ist gleich neu definieren «class Rechteck(Grafik): def eq (self, other): proofx = self.get_xpos() == other.get_xpos() proofy = self.get_ypos() == other.get_ypos()» return (proofx and proofy) Objektorientierte Programmierung, 13.09.10 Seite 35

String definieren class Rechteck(Grafik): def str (self): ausgabe = "X-Position, oben links: " + str(self.get_xpos()) ausgabe = ausgabe + "\ny-position, oben links "+ str(self.get_ypos()) ausgabe = ausgabe + "\nx-position, unten rechts: "+ str(self. xposro) ausgabe = ausgabe + "\ny-position, unten rechts "+ str(self. yposro) return ausgabe Objektorientierte Programmierung, 13.09.10 Seite 36

Aufruf der überladenen Operatoren «RechteckGross = myrechteckstandard + Rechteck_Basisklasse.Rechteck(100, 100) print("position gleich? ", RechteckGross == RechteckPos)» print(rechteckgross) Objektorientierte Programmierung, 13.09.10 Seite 37