Files
EP2/angabe/Aufgabenblatt6.md

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 in HierarchicalSystem: 1.5 Punkte

  • Implementierung von Simulation6: 0.5 Punkte

  • Gesamt: 5 Punkte