Exkurs - Implementierung von Beziehungen in Python

Muster: Objekt der Klasse A kennt Objekt der Klasse B

Wir betrachten die Situation, dass ein Konto einen Inhaber hat.

Objektdiagramm

Implementierung:

class Konto(object):
    def __init__(self, nummer):
        self.nr = nummer
        self.stand = 0.0
        self.inhaber = None

    def einzahlen(self, betrag):
        self.stand = self.stand + betrag

    def auszahlen(self, betrag):
        self.stand = self.stand - betrag

class Kunde(object):
    def __init__(self, name, vorname):
        self.name = name
        self.vorname = vorname

Testprogramm:

from bank0 import *
# Erzeugung der Objekte
konto1 = Konto(5)
konto2 = Konto(11)
konto2.einzahlen(200.0)
kunde1 = Kunde("Müller", "Adriana")
kunde2 = Kunde("Meier", "Anatol")
konto1.inhaber = kunde2
konto2.inhaber = kunde1
# Ausgaben
print("Kontonummer: ", konto1.nr)
print("Inhaber(in): ", konto1.inhaber.vorname, konto1.inhaber.name)
print("Kontostand: ", konto1.stand)
print()
print("Kontonummer: ", konto2.nr)
print("Inhaber(in): ", konto2.inhaber.vorname, konto2.inhaber.name)
print("Kontostand: ", konto2.stand)

Muster: Objekt der Klasse A kennt Objekt der Klasse B und umgekehrt

Wir betrachten die Situation, dass ein Konto genau einen Inhaber hat und ein Kunde Zugriff auf genau ein Konto.

Objektdiagramm

Implementierung:

class Konto(object):
    def __init__(self, nummer):
        self.nr = nummer
        self.stand = 0.0
        self.inhaber = None

    def einzahlen(self, betrag):
        self.stand = self.stand + betrag

    def auszahlen(self, betrag):
        self.stand = self.stand - betrag

class Kunde(object):
    def __init__(self, name, vorname):
        self.name = name
        self.vorname = vorname
        self.konto = None

Testprogramm:

from bank1 import *
# Erzeugung der Objekte
konto1 = Konto(5)
konto2 = Konto(11)
konto2.einzahlen(200.0)
kunde1 = Kunde("Müller", "Adriana")
kunde2 = Kunde("Meier", "Anatol")
konto1.inhaber = kunde2
konto2.inhaber = kunde1
kunde1.konto = konto2
kunde2.konto = konto1
# Ausgaben
print("Kunde:", kunde1.vorname, kunde1.name)
print("Konto:", kunde1.konto.nr)
print()
print("Kunde:", kunde2.vorname, kunde2.name)
print("Konto:", kunde2.konto.nr)

Muster: Objekt der Klasse A kennt mehrere Objekte der Klasse B

Wir betrachten die Situation, dass ein Konto genau einen Inhaber hat und ein Kunde Zugriff auf mehrere Kontos.

Objektdiagramm

Implementierung:

class Konto(object):
    def __init__(self, nummer):
        self.nr = nummer
        self.stand = 0.0
        self.inhaber = None

    def einzahlen(self, betrag):
        self.stand = self.stand + betrag

    def auszahlen(self, betrag):
        self.stand = self.stand - betrag

class Kunde(object):
    def __init__(self, name, vorname):
        self.name = name
        self.vorname = vorname
        self.konten = []

    def kontoHinzufuegen(self, konto):
        self.konten = self.konten + [konto]

Testprogramm:

from bank2 import *
# Erzeugung der Objekte
konto1 = Konto(5)
konto2 = Konto(11)
konto2.einzahlen(200.0)
konto3 = Konto(19)
konto3.einzahlen(150.0)
konto4 = Konto(21)
konto4.auszahlen(50.0)
kunde1 = Kunde("Müller", "Adriana")
kunde2 = Kunde("Meier", "Anatol")
konto1.inhaber = kunde2
konto2.inhaber = kunde1
konto3.inhaber = kunde1
konto4.inhaber = kunde1
kunde1.kontoHinzufuegen(konto2)
kunde1.kontoHinzufuegen(konto3)
kunde1.kontoHinzufuegen(konto4)
kunde2.kontoHinzufuegen(konto1)
# Ausgaben
print("Kunde:", kunde1.vorname, kunde1.name)
print("Konten:")
for konto in kunde1.konten:
    print("Kontonummer: ", konto.nr)
    print("Kontostand: ", konto.stand)
print()
print("Kunde:", kunde2.vorname, kunde2.name)
print("Konten:")
for konto in kunde2.konten:
    print("Kontonummer: ", konto.nr)
    print("Kontostand: ", konto.stand)

Muster: Objekt der Klasse A erzeugt Objekte der Klasse B

Wir betrachten die Situation, dass eine Bank Kontos erzeugt.

Objektdiagramm

Implementierung:

class Konto(object):
    def __init__(self, nummer):
        self.nr = nummer
        self.stand = 0.0
        self.inhaber = None

    def einzahlen(self, betrag):
        self.stand = self.stand + betrag

    def auszahlen(self, betrag):
        self.stand = self.stand - betrag

class Bank(object):
    def __init__(self):
        self.konten = []
        self.naechsteKontoNr = 0

    def kontoErzeugen(self):
        konto = Konto(self.naechsteKontoNr)
        self.konten = self.konten + [konto]
        self.naechsteKontoNr = self.naechsteKontoNr + 1

Testprogramm:

from bank3 import *
from random import *
# Erzeugung der Objekte
bank = Bank()
for i in range(8):
    bank.kontoErzeugen()
for konto in bank.konten:
    konto.einzahlen(float(randint(0, 100)))
# Ausgaben
print("Konten:")
for konto in bank.konten:
    print("Kontonummer: ", konto.nr)
    print("Kontostand: ", konto.stand)
X

Fehler melden

X

Suche