Aufgaben-Python/lehrpfad_2_oop_einstieg/05_objekte_kombinieren
Alex Mueller 2571cb8847 feat(ux): responsive kurs-sidebar und kapitel-drawer für alle 13 kurse & web-ide
- Dynamic Sidebar mit window.COURSES_MANIFEST für 13 Kurse (216 Kapitel)
- Kurswechsler Dropdown mit Direktnavigation
- Fortschrittsanzeige mit Solved-Checkmarks (✓) aus localStorage
- Responsive Off-Canvas Drawer mit Floating Action Button (☰ Kapitel) & Backdrop auf Mobile/Tablets
- Web-IDE Topbar Drawer-Button (☰ Kapitel) für unterbrechungsfreien Vollbild-Editor
- Saubere Bereinigung redundanter statischer Legacy-Sidebars
2026-09-12 13:49:46 +02:00
..
aufgabe.py Vollständige Implementierung aller 5 Phasen: Subgoal Labeling, Parsons Puzzles, In-Browser Runner, Notional Machine & Zertifikate 2026-08-29 15:41:30 +02:00
index.html feat(ux): responsive kurs-sidebar und kapitel-drawer für alle 13 kurse & web-ide 2026-09-12 13:49:46 +02:00
musterloesung.py Restrukturiere Verzeichnisstruktur in 3 saubere Lehrpfad-Ordner (lehrpfad_1_grundlagen, lehrpfad_2_oop_einstieg, lehrpfad_3_fortgeschrittenes_oop) 2026-08-29 15:07:16 +02:00
README.md Restrukturiere Verzeichnisstruktur in 3 saubere Lehrpfad-Ordner (lehrpfad_1_grundlagen, lehrpfad_2_oop_einstieg, lehrpfad_3_fortgeschrittenes_oop) 2026-08-29 15:07:16 +02:00
test_aufgabe.py Restrukturiere Verzeichnisstruktur in 3 saubere Lehrpfad-Ordner (lehrpfad_1_grundlagen, lehrpfad_2_oop_einstieg, lehrpfad_3_fortgeschrittenes_oop) 2026-08-29 15:07:16 +02:00

Kapitel 05: Komposition – Objekte kombinieren & filtern 🎵

In der echten Softwareentwicklung (wie bei Spotify, Instagram oder Netflix) besteht ein System fast immer aus vielen verschiedenen Klassen, die zusammenarbeiten.

Wenn eine Klasse andere Objekte besitzt oder verwaltet, nennt man das Komposition (oder "hat-ein"-Beziehung):

  • Eine Playlist hat viele Songs.
  • Eine Schulklasse hat viele Schüler.
  • Ein Kino hat viele Säle und Filme.

🎒 Vollständiges Praxisbeispiel: Der Schüler- & Notenmanager

# 1. Klasse Schueler
class Schueler:
    def __init__(self, name, note):
        self.name = name
        self.note = float(note)

    def __str__(self):
        return f"{self.name} (Note: {self.note:.1f})"

# 2. Klasse Schulklasse verwaltet viele Schüler-Objekte:
class Schulklasse:
    def __init__(self, klassen_name):
        self.klassen_name = klassen_name
        self.schueler_liste = []

    def hinzufuegen(self, schueler):
        self.schueler_liste.append(schueler)

    def notendurchschnitt(self):
        if not self.schueler_liste:
            return 0.0
        summe = sum(s.note for s in self.schueler_liste)
        return summe / len(self.schueler_liste)

# Testen:
klasse_9a = Schulklasse("Klasse 9a")
klasse_9a.hinzufuegen(Schueler("Emma", 1.0))
klasse_9a.hinzufuegen(Schueler("Lukas", 2.3))
klasse_9a.hinzufuegen(Schueler("Mia", 1.3))

print("Durchschnitt:", klasse_9a.notendurchschnitt())

⏱️ Zeit-Formatierung: Aus Sekunden werden Minuten & Sekunden

minuten = self.dauer_sekunden // 60
sekunden = self.dauer_sekunden % 60
return f"{minuten:02d}:{sekunden:02d}"  # "03:35"

🎯 Deine Aufgabe: Der Spotify-Playlist-Manager

In aufgabe.py baust du deine eigene Musikverwaltung mit Song und Playlist.

Testen:

python3 test_aufgabe.py