Eine Implementierung des Modells nach dem Ansatz „Bottomup“ beginnt beim letzten Teil der von einander abhängigen Klassen bzw. Objekte, der Klasse GELD, und geht dann weiter zur Klasse FACH. Nachbesserungen sind denkbar.
a) Daten
Die grundlegenden Daten der Kassensimulation bestehen aus Geldmengen, also aus einer Zusammensetzung von verschiedenartigen Münzen und Scheinen. Die Eigenschaften von GELD sind ein Name (das Nominal), z.B. „1ct“, und ein entsprechender Wert wie 0.01. Der Wert drückt einen Bruchteil der angenommenen Einheit 1 € aus. Das bietet sich an, denn damit ist ein Umrechnungsfaktor unter den einzelnen Geldstücken gegeben. Je nach Programmiersprache benötigt die Klasse GELD keine besonderen Methode; im Beispiel wurden zur Demonstration zwei so genannte „Getter“ eingefügt.
b) Datenstruktur und grundlegende Methoden
Das Fach strukturiert die Geldmengen. Wenn also Geldmengen in der Situation die Daten sind, dann ist das Fach eine Datenstruktur. Jedes Fach der Kasse enthält eine gewisse Menge gleichartigen Geldes, also z.B. 35 der 1ct Münzen. Die Klasse FACH benötigt vier Methoden. Die Methode einlegen( anzahl int ) erhöht die Menge an Geld im Fach; die Methode herausgeben( anzahl int ) reduziert die Menge. Die Methode summe() -> float gibt den aktuellen Betrag aller im Fach enthaltenen Münzen zurück. Die Methode test( menge int ) -> boolean überprüft, ob die Anzahl der enthaltenen Geldstücke oder Geldscheine ausreicht, um eine bestimmte Menge zurückzugeben.
c) Komposition
![](https://www.bachkiesl.de/wordpress/wp-content/uploads/2021/03/fach_hat_geld_1.png)
Die Methoden der Klasse Fach lassen sich mit den Methoden einer Liste vergleichen. Die Enthält-Beziehung kann man durch zwei Attribute – Menge und Geld – oder über eine Liste der Geldeinheiten implementieren. Die Liste bietet sich an, wenn man den Geldeinheiten eine ID geben möchte, ansonsten reicht auch ein Objekt der Klasse GELD und die Angabe der Menge, wie viele Objekte davon im Fach liegen. Diese Eigenschaft rückt GELD in die Nähe von Bitcoin und ähnlichen virtuellen Währungssystemen.
Aufgabe
- Die Methoden einlegen() und summe() der Klasse FACH sind bereits fertig implementiert, programmiere in ähnlicher Weise die Methoden herausgeben() und test(). Beachte, dass test() im Unterscheid zu herausgeben() einen Rückgabewert besitzt.
- Schreibe ein geeignetes Testprogramm, das überprüft, ob die Klasse FACH funktioniert.
- Überlege: Welche Möglichkeiten gäbe es, eine eindeutige ID für jede Geldeinheit zu erzeugen?
Veranschaulichung von FACH.summe()
![](https://www.bachkiesl.de/wordpress/wp-content/uploads/2021/03/sequenz.png)
Die grauen breiten Linien im Hintergrund stellen Teile des Skripts dar. So verweist die Linie FACH.summe() auf den Ort im Skript, wo diese Methode definiert ist und die nötigen Anweisungen stehen, also auf die Zeilen 35 bis 38. Die roten und gelben Pfeile geben die Abfolge der Ausführung wieder. Der Sprung geld.get_wert() geschieht zur Laufzeit in Zeile 37. Sobald der erforderliche Wert da ist, also zurückgegeben wurde, kann die Summe berechnet und dieser Betrag seinerseits zurückgegeben werden. Vgl. dazu Zeile 38.