1 Euro

Vererbung - Eigenschaften und Fähigkeiten anderen Klassen als Erbe mitgeben



Quellen:
M. Brenner, J. Schnaiter, "Softwareentwicklung mit Python", ZSL Freiburg, 2024
E. Fuchs, "Java 9 Grundlagen Programmierung", Herdt Verlag, 2017


Vererbung ist ein weiteres wichtiges Konzept objektorientierter Programmiersprachen. Dabei gibt es übergeordnete Klassen, auch Superklasse oder Elternklasse, die ihre Eigenschaften (Attribute) und Fähigkeiten (Methoden) an untergeordnete Klassen, auch Basisklasse oder Kindklasse, mitgeben. Man spricht vom vererben.

In diesem Artikel lernst Du das Konzept der Vererbung mit Super- und Basisklassen kennen und wendest sie beim Programmieren in Python an.

Konzept der Vererbung Eigenschaften und Fähigkeiten mitgeben

Elternklasse Tier
Übergeordnete Eigenschaft Gewicht

Zeichnung Tiere

Jedes Tier hat als Eigenschaft ein Gewicht.

Man erstellt eine Elternklasse, deren Eigenschaften und Fähigkeiten für alle Kindklassen auch gültig sind.

Kindklasse Schaf
mit Gewicht plus Name und Region 🌍

Zeichnung Schafe

Ein Schaf zur Aufzucht hat zusätzlich zum Gewicht bspw. die einzigartige Eigenschaft Region 🌍 und Namen.

Die Eigenschaft Gewicht wird von der Elternklasse Tier geerbt.

Kindklasse Vogel
mit Gewicht plus Spann­weite ↔ und Gelege­größe 🥚

Zeichnung Vögel

Ein Vogel hat zusätzlich zum Gewicht bspw. die einzigartige Eigenschaft einer Flügelspann­weite ↔ und der ­größe 🥚.

Die Eigenschaft Gewicht wird von der Elternklasse Tier geerbt.

Aufgabe 1 Eltern- und Kindklassen trainieren

  1. Finde ein weitere Elternklasse mit mindestens zwei Kindklassen, wie Tier und Nutztiere sowie Waldtiere.
  2. Bestimme übergeordnete Fähigkeiten und Eigenschaften der Elternklasse. Diese müssen für alle Kindklassen gültig sein.
  3. Bestimme einzigartige Fähigkeiten und Eigenschaften der Kindklassen.
  4. Ergänze Deine Aufzeichnungen um ein weiteres Klassenpaar von Eltern und Kindern.
Beziehung zwischen einer Elternklasse und Kindklassen

Python programmieren Eltern- und Kindklassen

class Tier:
  def __init__(self, gewicht = 2.5):
    self.gewicht = gewicht

  def __str__(self):
    return self.__class__.__name__ 
    + f" ⚖ {self.gewicht} kg"

class Vogel(Tier):
  def __init__(self, gewicht, spannweite = 25, gelegegroesse = 3):
	super().__init__(gewicht)
	#alternativ: Tier.__init__(self, gewicht)
	self.spannweite = spannweite
	self.gelegegroesse = gelegegroesse

Die Elternklasse

Die Elternklasse enthält übergeordnete Eigenschaften.

Die Kindklasse

Vererbung wird in Python verwirklicht, in dem die Elternklasse(n) dem Kindklassennamen in Klammern hinten angestellt wird.

Konstruktoren in der Kindklasse werden verwendet, um zusätzliche Attribute zu initialisieren. Um dabei den Konstruktor der Elternklasse aufzurufen, verwendet man das Schlüsselwort super().

Aufgabe 2 Vererbung programmieren

Eine dreistufige Vererbung mit der Großelternklasse Tier, den Elternklassen Nutztiere und Wildtiere, sowie den Kindklassen Säugetier und Vogel.

  1. Erstelle die Großelternklasse Tier mit den Attributen alter und gewicht. Programmiere den Konstruktuor und die to-String-Methode.
  2. Erstelle die Klasse Nutztiere als Kindklasse der Klasse Tier. Wähle als Attribute haltungsart und region.
  3. Erstelle die Klasse Wildtiere als Kindklasse der Klasse Tier. Wähle als Attribute nahrung und feinde.
  4. Erzeuge jeweils ein Kindobjekt und rufe dieses auf. Falls notwendig programmiere noch die to-String-Methode.
  5. Erstelle die Klasse Schaf als Kindklasse der Klasse Nutztier. Wähle als Attribute: name und gewicht.
  6. Erstelle die Klasse Vogel als Kindklasse der Klasse Nutztier. Wähle als Attribute: name spannweite und gelegegroesse.
  7. Teste die Klassen in dem du eine Liste mit Objekten von Schafen und Vögeln erzeugst.
  8. Liste mit einer for-each-Schleife alle Schafe.
  9. Liste mit einer for-each-Schleife alle Vögel mit einer Spannweite von mehr als 50 cm.
Zeichnung zweier Schafe

Aufgabe 3 Speisekarte

Für ein Restaurant soll eine Speisekarte programmiert werden.

Menu
  1. Erstelle die Elternklasse Menüartikel mit den Attributen name, preis und kategorie.
  2. Erstelle die Kindklassen Speisen mit den Attributen vegetarisch, vegan und zutatenliste sowie Getränke mit den Attributen volumen und alkoholisch.
  3. Erstelle die Klasse Zutaten mit den Attributen name und menge.
  4. Erstelle die Klasse Speisekarte mit dem Attribut material und der Methode addItem(item) sowie einer ArrayList zutatenListe vom Typ Zutat. Kennzeichne den Beziehungstyp zwischen der Klasse Zutat und Pizza als Kommentar in deinem Programm.
  5. Erstelle automatisch einen Konstruktor mit allen Attributen und alle set- und get-Methoden. Lösche den Parameter zutatenListe und ersetze das Attribut zutatenListe durch den Methodenaufruf createZutatenListe(name).
  6. Schreibe die Methode createZutatenListe(String name). Erzeuge mit Hilfe der switch-case-Struktur die einzelnen Zutaten mit Mengen als Objekte.
  7. In der Testklasse Test wird eine Liste mit fünf verschiedenen Pizzen erzeugt. Gib alle Pizzen mit Preis und Zutaten als Menü aus.
  8. Zusatzaufgabe: Die Klasse Menue wird für verschiedene Menüs erstellt.
  1. Erstelle die Klasse Zutat in dem package packagePizza mit den Attributen name und menge.
  2. Erstelle automatisch einen Konstruktor mit allen Attributen und alle set- und get-Methoden.
  3. Erstelle die Klasse Pizza mit folgenden Attributen: name und preis sowie einer ArrayList zutatenListe vom Typ Zutat. Kennzeichne den Beziehungstyp zwischen der Klasse Zutat und Pizza als Kommentar in deinem Programm.
  4. Erstelle automatisch einen Konstruktor mit allen Attributen und alle set- und get-Methoden. Lösche den Parameter zutatenListe und ersetze das Attribut zutatenListe durch den Methodenaufruf createZutatenListe(name).
  5. Schreibe die Methode createZutatenListe(String name). Erzeuge mit Hilfe der switch-case-Struktur die einzelnen Zutaten mit Mengen als Objekte.
  6. In der Testklasse Test wird eine Liste mit fünf verschiedenen Pizzen erzeugt. Gib alle Pizzen mit Preis und Zutaten als Menü aus.
  7. Zusatzaufgabe: Die Klasse Menue wird für verschiedene Menüs erstellt.
UML Speisekarte

Wortliste und Satzbausteine



das Objekt, -e Objekte haben Eigenschaften (engl. states) und Fähigkeiten (engl. behaviors). Diese werden in einer zugehörigen Klasse festgelegt.
die Klasse, -n Eine Klasse beschreibt, welche Eigenschaften und Fähigkeiten ein Objekt haben darf und stellt somit den Bauplan von Objekten bereit.
die Methode, -en Fähigkeiten von Objekten werden in Methoden beschrieben.
das Attribut, -en Eigenschaften von Objekten werden in Attributen (Variablen) festgelegt.
der Modifier, ~ legt die Sichtbarkeit von Eigenschaften und Fähigkeiten fest, also ob diese bspw. privat oder öffentlich zugänglich sind
die set-, get-Me­thoden, - Methoden die die abgeschirmten Attribute setzen oder auslesen.
der Konstruk­tor, -en Methode welche die Initialisierung der Parameter bei Objekterzeugung ermöglicht
die Assozi­ation, -en Sie beschreibt eine einfache Bindung. Objekte verschiedener Klassen stehen in Beziehung, existieren aber unabhängig voneinander.
die Aggre­gation, -en Sie beschreibt eine stärkere Bindung. Objekte bestehen aus anderen Objekten.
die Kompo­sition, -en Sie beschreibt die stärkste Bin­dung. Objekte bestehen aus anderen Objek­ten, welche alleine nicht existieren können.