LU10.A04 - Vererbung mit vielen Facetten

Setzen Sie verschiedene Facetten der Vererbung in einer Applikation ein.

Hinweise

Diese Aufgabe umfasst viel Wissen und Können, das Sie bisher angewendet haben. Schauen Sie sich die entsprechenden Ausführungen der Theorie und Übungen an!

Auftrag

Die Ausgaben in den Beschreibungen sind als Beispiele zu verstehen.

Ausgangslage

In LU10d - Anpassen und Erweitern wird gezeigt, was Überschreiben (overwriting) bewirken soll. Die Aufgabenstellung basiert auf dem Beispiel "BankAccount".

Gegeben ist dazu das folgende Klassendiagramm.

Vorgehen Teil 1

Schritt 1

Akzeptieren Sie das Assignment im GitHub Classroom.

Testen Sie die Klasse Person mit der Testklasse TestPerson in test_person.py. Dieser Test muss fehlerfrei ablaufen, da die Klasse Person ja bereits besteht.

Schritt 2

Erstellen Sie die Exception-Klasse AccountIndexException.

Die Exception erwartet zwei Parameter:

Die Fehlermeldung soll wie folgt aussehen:

Ungültiger Indexwert: {max} Einträge vorhanden, Nummer {index} gefordert

Um die Exception zu testen, können Sie ein einfaches Skript am Ende der Datei einfügen, z.B.:

...
if __name__ == '__main__'':
    raise AccountIndexException(5, 9)

Schritt 3

Erstellen Sie nun die Klasse Customer und implementieren die Methoden gemäss der Beschreibung. Debei setzen wir nun voll auf die OO-Technik. Wir verwenden nämlich die Klasse Person aus einer früheren Aufgabe als Basis und leiten Sie ab. Daher muss die Klasse Customer nur noch die Methoden zur Verwaltung der Referenzen zu den Konto-Objekten realisieren.

Kunde    : Pia
Kontotyp : Standard bank account
	Saldo: 1000.0
	Zins : 1.5

Hinweise

Schritt 4

Erstellen Sie nun die Klasse BankAccount und implementieren die Methoden gemäss der Beschreibung.

Testen Sie die Klasse BankAccount, bevor Sie diese für die weitere Arbeit nutzen. Dazu verwenden Sie die Tests in test_bank_account.py.

Schritt 5

Erstellen Sie nun die Klasse SalaryAccount und implementieren die Methoden gemäss der Beschreibung.

Kunde    : Pia
Kontotyp : Salary bank account
	Saldo: 5000.0
	Zins : 2.25
	Überzug: 2500.0

Testen Sie die Klasse SalaryAccount mit den Tests in test_salary_account.py.

Vorgehen Teil 2

Implementieren Sie die main-Methode in main.py gemäss dem Sequenzdiagramm.

Hier liefert Ihnen die Methode withdraw_money() den Wert True, wenn ein Bezug von Geld möglich ist. Wenn nicht - weil Saldo zu klein - liefert sie False. Dem entsprechend soll die Ausgabe am Bildschirm sein. Vergleichen Sie dazu unten den Printscreen.

Erwartetes Ergebnis

Wenn Sie die Klassen gemäss Klassendiagramm und den Ablauf gemäss Sequenzdiagramm implementiert haben, sollten Sie - unter Berücksichtigung einiger erklärender print()-Befehle in main - ein vergleichbares Ergebis erhalten.

Angaben zu Kunde
	Name: Pia
	Alter: 23
	Adresse: Hochdorf
Angaben zum den Konti
	 Standard bank account
	 Salary bank account

von jedem Konto 750.0 beziehen
	Bezug von Standard bank account
	Saldo = 250.0
	Bezug von Salary bank account
	Saldo = " 250.0
Aktuelles Vermögen: 500.0

von jedem Konto noch einmal 400.0 beziehen
	Bezug von Standard bank account
	Fehler: Bezug ist zu hoch für Saldo von 250.0
	Bezug von Salary bank account
	Saldo = -150.0
Aktuelles Vermögen: 100.0

Ende Monat: 3000.- Lohn wird eingezahlt
Aktuelles Vermögen: 3100.0

Dauer

3-5 Stunden

Abgabe

Als Push im GitHub Classroom


René Probst, bearbeitet durch Marcel Suter