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

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.

Klassendiagramm

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.

Klassendiagramm

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
>>> 
X

Fehler melden

X

Suche