Title: Assoziation und Komposition

### Assoziation und Komposition

Eine **Assoziation** bedeutet, dass ein Objekt ein anderes Objekt kennt. Bei
einer **Komposition** besteht ein Objekt aus anderen Objekten und verwaltet
deren Lebenszyklus. Meist ist Komposition flexibler als Vererbung: Ein Auto
*hat einen* Motor, es *ist kein* Motor.

class Motor:
def __init__(self, leistung):
self.leistung = leistung

class Auto:
def __init__(self, marke, leistung):
self.marke = marke
self.motor = Motor(leistung)

def beschreibung(self):
return f"{self.marke}: {self.motor.leistung} PS"

auto = Auto("Nova", 120)
print(auto.beschreibung())

Hier erzeugt und besitzt das `Auto` seinen `Motor`. Dagegen bekommt die
folgende `Team`-Klasse bereits vorhandene Personen übergeben. Das ist eine
Assoziation:

class Person:
def __init__(self, name):
self.name = name

class Team:
def __init__(self):
self.mitglieder = []

def aufnehmen(self, person):
self.mitglieder.append(person)

Ergänze `Playlist.add(song)` und `Playlist.duration()`. Eine Playlist kennt
mehrere bereits vorhandene Song-Objekte. `duration()` gibt die Gesamtdauer
zurück.

class Song:
def __init__(self, title, seconds):
self.title = title
self.seconds = seconds

class Playlist:
def __init__(self):
self.songs = []

def add(self, song):
pass

def duration(self):
pass