Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Einstieg - Verwaltung von Bankkonten

Konto überziehen

Ein Konto soll höchstens um 1000 Euro überzogen werden dürfen. Die Datei konto.py enthalte folgende Implementierung der Klasse Konto.

class Konto(object):
    def __init__(self, nummer):
        self.nr = nummer
        self.stand = 0
        self.inhaber = None
        self.minimum = -1000.0

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

    def auszahlen(self, betrag):
        if self.stand - betrag >= self.minimum:
            self.stand = self.stand - betrag
        else:
            print("Auszahlung nicht möglich!")

Ein Benutzer der Klasse Konto führt jetzt folgenden Python-Dialog:

>>> k = Konto(9)
>>> k.stand = 600.0
>>> k.stand
600.0
>>> auszahlungsbetrag = 2750.0
>>> k.stand = k.stand - auszahlungsbetrag
>>> k.stand
-2150.0

Aufgabe 1

(a) Warum ist dieser Dialog nicht im Sinne des Bankkontenverwaltungssystems?

(b) Kann die gezeigte Situation auch erreicht werden, wenn der Benutzer nur die Methoden des Objekts verwendet?

Benutzerschnittstelle mit verborgenen Attributen

Wir betrachten weiterhin die Situation, dass ein Konto um höchstens 1000 Euro überzogen werden darf. Die Entwickler der Klasse Konto veröffentlichen folgende Schnittstelle dieser Klasse:

Klassendiagramm

Ein Benutzer der Klasse Konto soll die in einer Datei konto.py abgespeicherte Implementierung dieser Klasse als Baustein benutzen und dabei nur die in der Schnittstelle veröffentlichten Methoden verwenden.

from konto import Konto
k = Konto(9)
# Testlauf
k.einzahlen(600.0)
print(k.getStand())
auszahlungsbetrag = 2750.0
k.auszahlen(auszahlungsbetrag)
print(k.getStand())

Aufgabe 2

Warum macht es hier Sinn, die Attribute der Klasse Konto nicht zu veröffentlichen und eine Veränderung von Attributwerten nur über veröffentlichte Methoden zu erlauben?

Aufgabe 3

Im Testprogramm wird die Methode getStand benutzt, die in der Schnittstelle vorgesehen ist. Was soll diese Methode leisten? Ergänze die oben gezeigte Implementierung der Klasse Konto um die noch fehlenden Methoden und führe das Testprogramm aus.

X

Fehler melden

X

Suche