Aufgabe: Währung und Konten
Ziel der Aufgabe ist der Umgang mit Objekten, Klassen und Beziehungen zwischen Objekten.
Es geht vornehmlich darum, die Anforderungen in eine geeignete Objekt-Struktur zu überführen
und durch Tests sicherstellen, daß alles jederzeit so funktioniert wie gefordert.
Einführung
Bis zur Umstellung auf das Dezimal-System im Jahre 1971 kannten die Briten drei verschiedene Währungseinheiten
- Den Penny (Mehrzahl Pence)
- Den Shilling (1 Shilling = 12 Pence)
- Das Pfund Sterling (1 Pfund = 20 Shilling = 240 Pence)
Beträge wurden also mit drei Zahlen angegeben, zum Beispiel:
- Ein Pfund, sieben Shilling und sechs Pence oder kürzer 1₤ 7s 6p entsprechen 330 Pence.
Das macht das Rechnen mit Beträgen recht umständlich:
- 5 Stück zum Preis von 7s 3p kosten zusammen 35s 15p oder 1₤ 16s 3p
- 1₤ 7s 6p und 10s 8p macht zusammen 1₤ 18s 2p
Ziel ist es mit Java geeignete Hilfsmittel – in Form von Klassen und Methoden – bereitzustellen, die den Umgang mit Beträgen erleichtern. Zunächst nur mit englischer, später auch mit anderen Währungen.
Es kommt dabei auf den Umgang mit dem Java-Code an, Ein- und Ausgabe spielen dabei zunächst keine Rolle und die Ausführung des Codes soll über Unit-Tests erfolgen. Es ist wichtig, jede Aufgabe mit der richtigen Menge an Unit-Tests abzusichern.
In der Regel gibt es verschiedene Möglichkeiten, eine Klasse zu entwerfen oder eine Funktionalität hinzuzufügen. Wenn Du mehrere Möglichkeiten siehst, entscheide Dich für eine und versuche Deine Entscheidung zu begründen.
Versuche die einzelnen Aufgaben der Reihenfolge nach zu bearbeiten und nicht vorauszugreifen. Es ist aber gut, wenn Du Dir Gedanken machst, was sich ändern könnte und was nicht.
Es geht auch darum, dass im Lauf der Zeit weitere Funktionalitäten dazukommen, die es erforderlich machen den bestehenden Code anzupassen und zu verallgemeinern. In realen Projekten kann man oft nicht voraussehen, in welche Richtung sich die Software verändern wird, deshalb muss man lernen mit Veränderungen so umzugehen, dass der Code seine Qualität nicht verliert.
Aufgaben
Rechnen, Formatieren
Ziel ist es, beliebige Beträge in Pfund, Shilling und Pence durch eine Daten-Struktur in Java abzubilden. Schaffe dafür eine Klasse, die einen Betrag kapselt und mit der man
- Beträge addieren und subtrahieren kann
- Beträge mit einer ganzen Zahl multiplizieren kann (2 * 1₤ 7s 6p)
- Beträge als String formatieren kann
- entweder wie in den Beispielen oben (1₤ 7s 6p oder auch 1 Pfund, 7 Shilling, 6 Pence).
Eine Ein-/Ausgabe-Möglichkeit ist nicht erforderlich, es sollen aber ausreichend Unit-Tests vorhanden sein.
weitere Währungen
Zusätzlich zur britischen Währung sollen noch (mindestens) zwei weitere Währungen abgebildet werden
- Der US-Dollar (ein Dollar zu 100 Cent)
- Eine Währung Deiner Wahl
Definiere dafür zwei neue Klassen und verbinde sie mit der Klasse aus der vorangegangenen Übung so, dass eine Vererbungs-Hierarchie entsteht. Schreibe Unit-Tests und denke daran, Deine Design-Entscheidungen zu begründen.
Umrechnung
Erstelle einen Währungs-Rechner, der den Betrag einer beliebigen Währung in eine andere Währung umrechnen kann. Die Wechsel-Kurse können im ersten Schritt im Code fest verdrahtet sein. Die Kurse müssen nicht realistisch sein, für den Test ist es anfangs besser einfache, leicht nachzuprüfende Werte zu verwenden.
Wechselnde Wechselkurse
Die Wechsel-Kurse sollen nun dynamisch verändert werden können. Es genügt dazu eine Möglichkeit einen einzelnen Wechelkurs per Methoden-Aufruf ändern zu können.
viele Währungen
Es sollen nun beliebige weitere Währungen hinzugefügt werden. Schaffe zunächst eine Möglichkeit, dass der Währungs-Rechner mit einer beliebigen Zahl von Währungen arbeiten kann und füge dann – sozusagen als Test – eine weitere Währung hinzu.
Konten
Ein Kunde (die Kunden werden nicht modelliert) soll ein Portfolio haben, das für mehrere Währungen Konten enthalten kann, je Währung maximal ein Konto. Jedes Konto besteht aus einem Saldo der entsprechenden Währung. Der Kunde soll positive und negative Beträge hinzufügen können (Gut- und Lastschriften), es soll aber keine Historie der Zahlungs-Anweisungen geben. Der Gesamtwert des Portfolios muss in einer vom Kunden gewählten Währung abgerufen werden können.
Zusatz-Aufgabe
Früher gab es unterhalb des Penny noch die Unterteilung in
- 1 Half-Penny = 1/2 Penny
- 1 Farthing = 1/2 Half-Penny = 1/4 Penny
Erweitere die Anwendung, damit sie auch mit Penny-Bruchteilen umgehen kann.