Dies ist eine alte Version des Dokuments!
LU08a - Einseitige Beziehungen
Damit ein Objekt A ein anderes Objekt B ansprechen kann, muss es dessen Referenz kennen. Dazu muss die Referenz über den Konstruktor oder eine Methode übergeben werden.
Vom grundsätzlich Verhalten her unterscheiden wir in
- einseitge Beziehungen
- zweiseitige Beziehungen
Einseitige Beziehung
Bei einer einseitigen Beziehung kennt ein Objekt „A“ ein anderes Objekt „B“ aber nicht umgekehrt.
Beispiel: Geldbeutel und Besitzer
Abb: Klassen in einer einseitigen Beziehung
Eine Person kann auch keinen Geldbeutel besitzen. Daher wird hier die Referenz über eine Methode gesetzt. So sind die Erzeugung des Personen-Objekts und die Zuweisung der Referenz zeitlich unabhängig.
Dies zeigt das zugehörige Sequenz-Diagramm eindeutig auf.
Abb: Sequenz-Diagramm der Zuweisung einer einseitigen Beziehung über eine Methode
Beispiel: Stromschalter und Wippe (Aktuator)
Abb: Klassen in einer einseitigen Beziehung
Ein Stromschalter braucht immer eine Wippe, sonst kann er ja nicht benutzt werden. Daher muss sichergestellt sein, dass mit der Erzeugung des Stromschalter-Objektes auch die Referenz zu einer Wippe gesetzt wird. Es ist also wichtig, dass die Referenz mit dem Konstruktor geliefert wird. In diesem Fall ist es zwingend, dass die Wippe zeitlich zuerst erzeugt wird, so dass ihre Referenz verfügbar ist.
Abb: Sequenz-Diagramm der Zuweisung einer einseitigen Beziehung über den Konstruktor
Programmcode
Zu den beiden Beispielen finden Sie hier die Umsetzung in Python.
Geldbeutel und Besitzer
class Person: def __init__(self, name): self._name = name self._wallet = None # die Referenz wird erst später zugewiesen @property def name(self): return self._name @property def wallet(self): return self._wallet @wallet.setter def wallet(self, wallet): self._wallet = wallet class Wallet: def __init__(self): pass def deposit_money(self, amount): pass def withdraw_money(self, amount): pass if __name__ == '__main__': person = Person('Max') wallet = Wallet() person.wallet = wallet