Eine unidirektionale Beziehung, wie hier zwischen den Klassen Kunde und Konto, setzt man um, indem man
der Klasse Kunde ein „Attribute“ mit dem Rollennamen vom Typ der Klasse Konto gibt.
Das Konto-Objekt mit dem Namen Girokonto kann von dem Kundenobjekt nun verwendet werden.
Somit kann der Kunde von dem Konto-Objekt Methoden aufrufen und ggf. auf dessen Attribute zugreifen.
class Kunde:
def __init__(self):
# ...
self.Girokonto = Konto()
Multiplizitäten größer 1
Wenn die Relation eine kleine Anzahl von Objekten der Beziehungsklasse hat, kann man mehrere Attribute für diese anlegen.
Ist es jedoch eine große oder variable Anzahl, so nimmt man ein Array bzw. eine Liste.
class Kunde:
def __init__(self):
# ...
self.Konten = [] # neue Liste
def addKonto(self, k):
self.Konten.append(k)
Bidirektionale Assoziationen
Bei bidirektionalen Relationen kann muss man einer der Klassen bei erzeugen das Beziehungsobjekt mitgeben.
Hier im Beispiel erzeugt der Kunde das Konto und gibt dem Konstruktor (__init__) sich selbst als Inhaber mit.
Als Alternative kann man den Inhaber setzen, indem man nach der Erzeugung des Konto-Objekts den Inhaber des Konto-Objekts
zuweist. Dies ist allerdings fehleranfälliger.
Was gar nicht geht ist, dass der Kunde ein Konto anlegt und das Konto einen neuen Kunden.
Denn hier würde der Kunde ein Konto1 anlegen, das Konto1 legt einen Kunden2 an, dieser wieder ein Konto2, welches einen Kunden3 anlegt
u.s.w.
class Kunde:
def __init__(self):
# ...
self.Giro = Konto(self)
def nachricht(self, txt):
print(txt)
class Konto:
def __init__(self, kunde):
self.Inhaber = kunde
self.saldo = 0
def abheben(self, betrag):
self.saldo =self.saldo-betrag
if self.saldo<0:
self.Inhaber.nachricht("überzogen")