it-praxisportal/11_polymorphie_und_interfaces
2026-08-29 14:26:27 +02:00
..
aufgabe.py Implementiere Kapitel 08 bis 14 (Operator Overloading, Unit Testing, Vererbung, Polymorphie, Exceptions, Persistenz, Tkinter GUI) 2026-08-29 14:26:27 +02:00
index.html Implementiere Kapitel 08 bis 14 (Operator Overloading, Unit Testing, Vererbung, Polymorphie, Exceptions, Persistenz, Tkinter GUI) 2026-08-29 14:26:27 +02:00
musterloesung.py Implementiere Kapitel 08 bis 14 (Operator Overloading, Unit Testing, Vererbung, Polymorphie, Exceptions, Persistenz, Tkinter GUI) 2026-08-29 14:26:27 +02:00
README.md Implementiere Kapitel 08 bis 14 (Operator Overloading, Unit Testing, Vererbung, Polymorphie, Exceptions, Persistenz, Tkinter GUI) 2026-08-29 14:26:27 +02:00
test_aufgabe.py Implementiere Kapitel 08 bis 14 (Operator Overloading, Unit Testing, Vererbung, Polymorphie, Exceptions, Persistenz, Tkinter GUI) 2026-08-29 14:26:27 +02:00

Kapitel 11: Polymorphie & Interfaces 🎭📐

Willkommen zu Kapitel 11! In diesem Kapitel lernst du das Konzept der Polymorphie (Vielgestaltigkeit) und Interfaces (abstrakte Basisklassen) in Python kennen.


🎯 Was du lernst

  1. Was bedeutet Polymorphie?
    • Aus dem Griechischen: poly = viel, morph = Gestalt → "Vielgestaltigkeit".
    • Verschiedene Klassen stellen Methoden mit demselben Namen und denselben Parametern bereit (flaeche(), umfang(), info()), berechnen ihr Ergebnis aber völlig unterschiedlich!
  2. Didaktische Analogie: Die Universalfernbedienung & Mediaplayer:
    • Wenn du auf der Fernbedienung auf "Power" drückst, schaltet sich der Fernseher, die Soundbar oder die Spielkonsole ein – jedes Gerät auf seine Art.
    • Ein Mediaplayer drückt einfach auf medium.abspielen() – egal ob MP3, MP4, FLAC oder Stream.
  3. Abstrakte Basisklassen & Interfaces (abc.ABC):
    • Mit from abc import ABC, abstractmethod zwingst du abgeleitete Klassen dazu, bestimmte Methoden zu implementieren.
    • Wird eine abstrakte Methode nicht implementiert, verhindert Python das Erstellen von Objekten mit einem TypeError.
  4. Duck Typing in Python:
    • "If it walks like a duck and quacks like a duck, it is a duck."
    • In Python zählt das Verhalten eines Objekts: Solange ein Objekt eine Methode flaeche() besitzt, kann es in polymorphen Berechnungen verwendet werden.
  5. Polymorphe Sammlungen (Manager-Klassen):
    • Eine Liste mit vielen unterschiedlichen Objekten ([Rechteck, Kreis, Dreieck]) durchlaufen und einheitlich form.flaeche() aufrufen – ohne eine einzige if isinstance(...) Abfrage!

📊 UML-Klassendiagramm

              ┌───────────────────────────────────────────────┐
              │             «abstract» Form                   │
              ├───────────────────────────────────────────────┤
              │ - farbe: str                                  │
              ├───────────────────────────────────────────────┤
              │ + __init__(farbe: str = "schwarz")            │
              │ + {abstract} flaeche() -> float               │
              │ + {abstract} umfang() -> float                │
              │ + info() -> str                               │
              └───────────────────────▲───────────────────────┘
                                      │
              ┌───────────────────────┼───────────────────────┐
              │                       │                       │
  ┌───────────┴───────────┐ ┌─────────┴─────────┐ ┌───────────┴───────────┐
  │       Rechteck        │ │       Kreis       │ │        Dreieck        │
  ├───────────────────────┤ ├───────────────────┤ ├───────────────────────┤
  │ - breite: float       │ │ - radius: float   │ │ - seite_a: float      │
  │ - hoehe: float        │ ├───────────────────┤ │ - seite_b: float      │
  ├───────────────────────┤ │ + flaeche()       │ ├───────────────────────┤
  │ + flaeche()           │ │ + umfang()        │ │ + hypotenuse()        │
  │ + umfang()            │ │ + info()          │ │ + flaeche()           │
  │ + info()              │ └───────────────────┘ │ + umfang()            │
  └───────────────────────┘                       │ + info()              │
                                                  └───────────────────────┘

  ┌───────────────────────────────────────────────────────────┐
  │                      Zeichenflaeche                       │
  ├───────────────────────────────────────────────────────────┤
  │ - name: str                                               │
  │ - formen: list[Form]                                      │
  ├───────────────────────────────────────────────────────────┤
  │ + hinzufuegen(form: Form) -> None                         │
  │ + anzahl_formen() -> int                                  │
  │ + gesamte_flaeche() -> float   <-- ruft form.flaeche() auf│
  │ + gesamter_umfang() -> float   <-- ruft form.umfang() auf │
  │ + formen_nach_farbe(farbe) -> list[Form]                  │
  │ + groesste_form() -> Form | None                          │
  │ + report() -> list[str]                                   │
  └───────────────────────────────────────────────────────────┘

📁 Die Dateien in diesem Ordner

  • index.html: Die interaktive Lernseite mit visuellen Erklärungen, Analogien, UML-Diagrammen und Lösungstipps.
  • aufgabe.py: Dein Arbeitsblatt mit den Klassen Form, Rechteck, Kreis, Dreieck und Zeichenflaeche.
  • test_aufgabe.py: Automatische Tests (python3 test_aufgabe.py).
  • musterloesung.py: Vollständig ausprogrammierte Beispiellösung.

🚀 Schnellstart

# 1. Bearbeite aufgabe.py
# 2. Teste deine Lösung:
python3 test_aufgabe.py