Einstieg - Verwaltung von Bankkonten
Sparkonto
Ein Sparkonto ist ein Konto, bei dem das eingezahlte Geld mit einem bestimmten,
mit der Bank vereinbarten Zinssatz verzinst wird. Das folgende Klassendiagramm zeigt ein Sparkonto
im Vergleich zu einem normalen
Konto.
Aufgabe 1
(a) Vergleiche die Klassendiagramme und kläre folgende Fragen: Unterscheiden sich die Klassen in den Attributen? Unterscheiden sich die Klassen in den Methoden?
(b) Überleg dir, ob sich bestimmte Methoden evtl. anders verhalten. Beachte, dass man das den Klassendiagrammen nicht entnehmen kann. Hinweis: Welche Regelungen gibt es bei Auszahlungen von einem Sparkonto?
Aufgabe 2
Implementiere die Klasse Sparkonto
. Welche Teile einer Implementierung der Klasse Konto
kann man übernehmen?
Hinweis zur Implementierung der Methode zinsenGutschreiben
:
Eine Implementierung, die den Vorgängen in der realen Bankwelt entspricht, ist nicht einfach, da man Zeiträume mit
bestimmten Kontoständen genau erfassen müsse. Wir vereinfachen unser Modell daher wie folgt: Eine Zinsberechnung
bezieht sich immer auf ein Jahr und wir gehen davon aus, dass der Kontostand sich während dieser Zeit nicht ändert.
Ein- und Auszahlungen auf das Sparkonto werden immer genau zu den Jahresanfängen gemacht.
Sparkonto als spezielles Konto
Die oben gezeigten Klassendiagramme weisen mehr Gemeinsamkeiten als Unterschiede auf.
Ein Sparkonto kann als spezielles Konto angesehen werden, das - im Vergleich zu einem
herkömmlichen
Konto - nur in einigen Bestandteilen abgeändert worden ist. Das folgende Klassendiagramm
soll diesen Zusammenhang verdeutlichen.
Ein Sparkonto verfügt über alle Attribute eines Kontos. Hinzu kommt noch ein Attribut
zinssatz
zur Verwaltung des vereinbarten Zinssatzes und ein Attribut
maxAuszahlung
zur Verwaltung des maximalen Auszahlungsbetrags.
Der Konstruktor __init__
der Klasse Sparkonto
unterscheidet sich
vom Konstruktor Klasse Konto
. Beim Sparkonto wird bei der Erzeugung z.B. der
maximale Auszahlungsbetrag festgelegt.
Die Methoden einzahlen
ist in der Beschreibung der Klasse Sparkonto
nicht aufgeführt, da sie von der Klasse Konto
übernommen wird und in der Beschreibung der
der Klasse Konto
bereits vorkommt.
Die Methoden auszahlen
ist dagegen in der Beschreibung der Klasse Sparkonto
aufgeführt, da diese Methode etwas anders implementiert werden muss als die entsprechende Methode
der Klasse Konto
.
Die Klasse Sparkonto
verfügt zusätzlich über die Methode zinsenGutschreiben
.
Bei der Implementierung dieser Klassen gehen wir von der Implementierung eines herkömmlichen
Kontos aus und ergänzen eine Deklaration der Klasse Sparkonto
.
class Konto(object):
def __init__(self, nummer):
self.nr = nummer
self.stand = 0
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
class Sparkonto(Konto):
def __init__(self, nummer):
Konto.__init__(self, nummer)
self.zinssatz = None
self.minimum = 0
self.maxAuszahlung = 2000.0
def setZinssatz(self, zinssatz):
self.zinssatz = zinssatz
def auszahlen(self, betrag):
if betrag <= self.maxAuszahlung:
if self.stand - betrag >= self.minimum:
self.stand = self.stand - betrag
def zinsenGutschreiben(self):
zinsen = self.stand * (self.zinssatz / 100)
self.einzahlen(zinsen)
Aufgabe 3
Analysiere zunächst die Implementierung der Klasse Sparkonto
. Kannst du alle Festlegungen
erklären?
Aufgabe 4
Speichere die Klassendeklarationen in einem neuen Modul sparkonto.py
ab und teste sie
mit Python-Dialogen der folgenden Art oder entsprechenden Testprogrammen.
>>> konto = Sparkonto(4)
>>> konto.einzahlen(1000)
>>> konto.stand
1000
>>> konto.setZinssatz(4.0)
>>> konto.zinsenGutschreiben()
>>> konto.stand
1040.0
>>> konto.auszahlen(2500.0)
>>> konto.stand
1040.0
>>>