4.0 KiB
Aufgabenblatt 6
Allgemeine Anmerkungen
Ihre Lösung für dieses Aufgabenblatt ist bis Montag, 23.5. 11h durch git commit
und git push
abzugeben. Mit der Angabe werden die Dateien MassiveIterable.java
, MassiveIterator.java
,
MassiveSet.java
, MassiveForceTreeMap.java
, Simulation6.java
und Aufgabe6Test.java
mitgeliefert.
Wenn Sie zusätzlich zu den gefragten Klassen weitere Klassen definieren, achten Sie darauf, dass
die Klassennamen mit My
beginnen, um Konflikte mit späteren Aufgabenblättern zu vermeiden.
Ziel
Ziel der Aufgabe ist die Anwendung der Konzepte: Iterator, Kopie vs. Sichtweise, Sortieren (siehe Skriptum Seite 91-109).
Beschreibung der gegebenen Dateien
- MassiveIterable ist ein Interface, das iterierbare Objekte mit
Elementen vom Typ
Massive
spezifiziert. Verändern Sie diese Datei bitte nicht. - MassiveIterator ist ein Interface, das einen Iterator über
Elemente vom Typ
Massive
spezifiziert. Verändern Sie diese Datei bitte nicht. - MassiveSet ist ein Interface, das iterierbare Mengen mit
Massive
-Elementen spezifiziert. Verändern Sie diese Datei bitte nicht. - MassiveForceTreeMap ist das Gerüst für eine Implementierung
einer assoziativen Datenstruktur, die ein
Massive
-Objekt mit der auf das Objekt wirkenden Kraft assoziiert. - Simulation6 ist ein Gerüst für eine ausführbare Klasse. Hier soll
die Simulation analog zur Klasse
Simulation
implementiert werden (damit Sie Ihre ursprüngliche Datei nicht überschreiben müssen). - Aufgabe6Test ist eine vorgegebene Klasse, die Sie zum Testen Ihrer Implementierung verwenden sollten. Bei einer fehlerfreien Implementierung sollten bei der Ausführung dieser Klasse keine Exceptions geworfen werden und alle Tests als erfolgreich ("successful") ausgegeben werden. Entfernen Sie die Kommentarzeichen, um diese Klasse verwenden zu können. Sie müssen diese Klasse nicht weiter verändern, können aber eigene Testfälle hinzufügen.
Aufgaben
Ihre Aufgaben sind folgende:
1. Implementieren Sie die Klasse MassiveForceTreeMap
.
Implementieren Sie die Klasse MassiveForceTreeMap
. MassiveForceTreeMap
ist wie
BodyForceTreeMap
aufgebaut, mit dem Unterschied, dass der Typ des Schlüssels statt Body
nun
der Typ Massive
ist. Weiters soll die Klasse Methode getKeys()
zur Verfügung stellen,
die eine MassiveSet
-Sichtweise auf die Menge der Schlüssel liefert. Änderungen an dem
zurückgelieferten MassiveSet
-Objekt wirken sich auf das zugrunde
liegende MassiveForceTreeMap
-Objekt aus. Die Methode toList()
liefert dagegen eine
unabhängige Liste (Kopie) mit allen Schlüsseln der Map. Für die Implementierung von
MassiveSet
können Sie einen eigenen Klassennamen beginnend mit My
wählen. Die Definition kann
in einer eigenen Datei oder in der Datei MassiveForceTreeMap.java
erfolgen.
2. Adaptieren Sie die Klasse HierarchicalSystem
:
Die Klasse HierarchicalSystem
soll so geändert werden, dass sie das gegebene
Interface MassiveIterable
implementiert. Die Reihenfolge der vom Iterator gelieferten
Elemente ist nicht festgelegt. Sie dürfen für die Implementierung bei Bedarf Ihren Klassen
NamedBodyForcePair
und HierarchicalSystem
neue, nicht angegebene Methoden hinzufügen.
Die Verwendung von Klassen des Java-Collection-Frameworks (z.B. java.util.Stack) ist erlaubt
(aber nicht notwendig).
3. Implementierung von Simulation6
:
Implementieren Sie die Simulationsschleife unter Verwendung eines Objekts vom Typ
MassiveForceTreeMap
. Die Methode getKeys()
hilft beim Iterieren der gespeicherten Schlüssel.
Kollisionen von Himmelskörpern müssen in dieser Simulation nicht berücksichtigt werden.
Punkteaufteilung
-
Implementierung von
MassiveForceTreeMap
: 3 Punkte -
Implementierung von
MassiveIterable
inHierarchicalSystem
: 1.5 Punkte -
Implementierung von
Simulation6
: 0.5 Punkte -
Gesamt: 5 Punkte