PYTHON 06 Objektorientierung II
Wiederholung Was bisher geschah
Objektorientierung Objekte haben Eigenschaften Objekte haben Methoden Objekte werden nach einem bestimmten Bauplan erzeugt: die Klassen sind der Bauplan / das Kuchenrezept wenn man dann wirklich einen solchen Kuchen bäckt, ist dieser das Objekt
Klassen damit man mehrere Autos erstellen kann, braucht es eine Klasse (= Bauplan) diese Klasse definiert, welche Eigenschaften und Methoden ein Auto hat, ist aber selbst kein Auto! mit diesem Bauplan können beliebig viele Objekte erzeugt werden
Objekte um aus der Klasse / dem Bauplan ein Objekt zu machen, muss man dieses instanzieren Objekte werden deshalb auch Instanzen einer Klasse genannt mit dem Bauplan Auto kann ich also ein rotes, ein blaues, ein weißes Auto usw. erzeugen
Vererbung Klassen können von anderen Klassen erben erben dabei die Eigenschaften und Methoden der Eltern -Klasse die Kind -Klasse kann die Eigenschaften und Methoden der Elternklasse überschreiben und neue Eigenschaften und Methoden hinzufügen
Vererbung Elternklasse / Superklasse / Basisklasse vererbt an: Kindklasse / Subklasse / abgeleitete Klasse Subklassen sind Spezialisierungen von Superklassen z.b. Auto ist ein spezieller Fall von Fahrzeug
Übung zum Konzept von OOP
</> Aufgabe Denke an ein Adventure-Computerspiel, das dir möglichst gut bekannt ist welche Klassen braucht man, um das Computerspiel zu programmieren? Gibt es außer dem Player noch Figuren, z.b. Bösewichte, Gegenspieler,? Welche Eigenschaften und Methoden haben diese Figuren jeweils?
OOP in Python Aufbau und Syntax von Klassen
Klassen werden mit dem Schlüsselwort class und dem Klassennamen definiert wenn die Klasse von keiner anderen erbt, also keine Subklasse von einer anderen Klasse ist, steht in den runden Klammern das Schlüsselwort object class Mitarbeiter(object): Eigenschaften und Methoden
Methoden der Klasse Methoden sind im Grunde Funktionen innerhalb der Klasse allerdings wird als erster Parameter immer das eigene Objekt mit self übergeben self wird nur bei der Definition angegeben, nicht beim aufrufen einer Methode def sayhello(self):
Eigenschaften der Klasse Eigenschaften sind Variablen innerhalb der Klasse vor dem Variablennamen steht aber immer das Schlüsselwort self damit wird angezeigt, dass es sich um eine Klassenvariable handelt self.farbe = grün
Objekte in Python ein Objekt instanziert man, indem man den Klassennamen aufruft Roboter() üblicherweise speichert man das Objekt in eine Variable mein Roboter = Roboter()
Objekte in Python die Eigenschaften und Methoden des Objekts erreicht man mit Punkt und Name der Eigenschaft / der Methode: mein Roboter.name mein Roboter.sayhello()
</> Aufgabe class-roboter.py definiere eine Klasse Roboter, die als Methode sayhello enthält, welche Hallo, ich bin ein Roboter! ausgibt erzeuge ein Objekt davon und rufe die Methode auf
Konstruktor nun möchte man aber nicht jedes Objekt gleich erzeugen, z.b. jeder Mitarbeiter ist anders (anderer Name usw.) daher gibt es die Möglichkeit, zu Beginn, also beim Erzeugen eines Objekts, Parameter mitzugeben innerhalb der Klasse muss es dann einen so genannten Konstruktor geben: eine Funktion, die beim Erzeugen einmalig ausgeführt wird ein Konstruktor muss in Python init heißen def init (self)
Konstruktor dem Konstruktor kann man nun mehrere Parameter mitgeben, die man im Konstruktor den Klassenvariablen zuweist def init (self, name, farbe): self.name = name self.farbe = farbe robbie = Roboter("Robbie", "blau")
</> Aufgabe class-roboter.py erweitere die Klasse Roboter um einen Konstruktor, mit dem Name und Farbe übergeben werden ändere die Methode sayhello so, dass sie mit ausgibt, wie der Roboter heißt und welche Farbe er hat
Übungen mit Klassen und Objekten
</> Aufgabe class-roboter.py vervollständige die Klasse Roboter Eigenschaften: name, farbe, baujahr, Methoden: sayhello() lackieren(farbe)
</> Aufgabe class-roboter.py ändere den Konstruktor der Klasse Roboter so, dass die Parameter baujahr und farbe optional sind ändere nach dem Instanzieren eines Objekts die Eigenschaften
</> Aufgabe class-roboter.py erstelle eine Liste mit Namen namensliste = ["Robbie", Wall-e", "R2D2"] erzeuge mithilfe einer for-schleife für jeden Namen in dieser Liste ein Objekt der Klasse Roboter