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?
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.
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:
Im Ablaufprotokoll werden auch schon spezielle Schreibweisen für das Ausführen von Operationen benutzt:
-
konto.einzahlen(...)
: Das Softwareobjektkonto
erhöht den Kontostand um den übergebenen Betrag. -
konto.auszahlen(...)
: Das Softwareobjektkonto
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.