i

Einstieg - Verwaltung von Bankkonten

Objektorientiert modellieren

Hast du bereits ein eigenes Konto? Hast du schon einmal einen Kontoauszug gesehen? Wenn nicht, dann schau dir den folgenden Kontoauszug erst einmal genauer an. Welche Informationen werden dargestellt? Welche Daten müssen folglich von dem zu entwickelnden System verwaltet werden?

Kontoauszug

Wenn man ein Verwaltungssystem für einen bestimmten Weltausschnitt (wie eine Bank) entwickeln möchte, dann muss man den Weltausschnitt erst einmal analysieren: Welche Objekte sind im betrachteten Weltausschnitt wichtig? Welche Eigenschaften haben diese Objekte? Im Kontext Bank spielen Konten eine zentrale Rolle - mit ihrer Hilfe wird schließlich das Geld der Bankkunden verwaltet. Konten können also als wichtige Objekte des betrachteten Weltausschnitts angesehen werden. Ein Bankkonto hat eine bestimmte Kontonummer und einen Kontoinhaber. Ein Bankkonto hat zudem einen bestimmten Stand - das ist der Geldbetrag, der aktuell auf dem Konto verfügbar ist. Von einem Bankkonto kann man Geldbeträge auszahlen, auf ein Bankkonto kann man auch Geldbeträge einzahlen.

So, wie die zu beschreibende Welt aus Objekten besteht, soll auch das Verwaltungssystem aus Softwareobjekten aufgebaut werden. Ein Konto-Softwareobjekt soll die beiden vorerst relevaten Daten eines Kontos - Kontonummer und Kontostand - verwalten. Der Inhaber ist sicher auch wichtig, soll zunächst aber noch keine Rolle spielen. Das folgende Diagramm veranschaulicht den Aufbau eines Konto-Softwareobjekts.

Objektdiagramm

Das Softwareobjekt hat hier den Namen konto. Sein Zustand wird durch die Werte der benutzten Variablen nr und stand festgelegt.

Wir gehen zudem davon aus, dass ein Konto-Softwareobjekt folgende Operationen ausführen kann:

  • einen Betrag einzahlen
  • einen Betrag auszahlen

Das folgende Ablaufprotokoll zeigt exemplarisch, wie sich solche Operationen auf den aktuellen Zustand des Konto-Softwareobjekts auswirken:

Ablaufprotokoll

Im Ablaufprotokoll werden auch schon spezielle Schreibweisen für das Ausführen von Operationen benutzt:

  • konto.einzahlen(...): Das Softwareobjekt konto erhöht den Kontostand um den übergebenen Betrag.
  • konto.auszahlen(...): Das Softwareobjekt konto verringert den Kontostand um den übergebenen Betrag.

Aufgabe 1

Ergänze die fehlenden Zustandsbeschreibungen bzw. Operationen:

{konto: nr -> 234126, stand -> 2380.0, inhaber -> ...}
konto.auszahlen(450.0)
{konto: nr -> 234126, stand -> 1930.0, inhaber -> ...}
konto.einzahlen(1000.0)
?
?
{konto: nr -> 234126, stand -> 2130.0, inhaber -> ...}

Softwareobjekt in Aktion

Ein Konto-Softwareobjekt muss - wie in der realen Welt - erst einmal erzeugt werden, bevor es in Aktion treten kann. Hierzu wird ein Bauplan benötigt.

Die folgende Python-Klassendeklaration stellt einen solchen Bauplan für Konto-Softwareobjekte dar.

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

Du wirst vermutlich erst einmal nicht alle Details dieser Klassendeklaration verstehen. Das macht gar nichts. Wenn man diese Klassendeklaration in Python ausführt, dann lässt sich folgendermaßen ein Softwareobjekt konto erzeugen, das sich genauso verhält wie ein reales Konto:

>>> konto = Konto(234126)
>>> konto.nr
234126
>>> konto.stand
0.0
>>> konto.stand = 2380.0
>>> konto.stand
2380.0
>>> konto.auszahlen(450.0)
>>> konto.stand
1930.0
>>> konto.einzahlen(1000.0)
>>> konto.stand
2930.0
>>> konto.auszahlen(800.0)
>>> konto.stand
2130.0

Aufgabe 2

(a) Probiere selbst einen solchen Python-Dialog aus.

(b) Versuche auch einmal, mehrere Konto-Objekte zu erzeugen.

>>> k1 = Konto(5)
>>> k1.einzahlen(1000.0)
>>> k2 = Konto(8)
>>> ...

Überweise mit passenden Operationen 500.0 (Euro) vom Konto mit der Kontonummer 5 auf das Konto mit der Kontonummer 8.

Suche

v
7.2.3.1.1
dev.inf-schule.de/oop/python/bank/objekteklassen/einstieg_konto
dev.inf-schule.de/7.2.3.1.1
dev.inf-schule.de/@/page/a67E2myhrXHj8z7C

Rückmeldung geben