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:
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.