kramann.info
© Guido Kramann

Login: Passwort:










9.2 Lösungen zu Übung 10 - Prozedurales Programm in objektorientierte Form bringen

Hinweise zu dieser Lehrveranstaltung
  • Nicht alle Lehrinhalte werden im Internet veröffentlicht.
  • Bitte besorgen Sie sich die Mitschrieb von Ihren Mitstudierenden, wenn Sie eine Vorlesung verpaßt haben und holen den Stoff nach.
  • Es ist günstig, einen Ordner mit dem Ausdruck dieser Vorlesung anzulegen und mit schriftlichen Ergänzungen zu vervollständigen.

Erste Lösungsidee zur objektorientierten Umsetzung des Simulationsprogramms:

Entwurf eines ersten Simulationsprogrammes mittels UML-Klassendiagramm.

Bild 9.2-1: Entwurf eines ersten Simulationsprogrammes mittels UML-Klassendiagramm.

  • Die Klasse "Modell" repräsentiert das Simulationsmodell.
  • Die hier verwendeten Modelle werden durch Differentialgleichungssysteme erster Ordnung beschrieben.
  • Die Funktion "rechteSeite()" liefert die Steigung an der mit y übergebenen Stelle.
  • y enthält bei ist bei unserem ersten Modell ein Array mit zwei Werten, in dem der aktuelle Wert für die Auslenkung x und die Geschwindigkeit v des Schwingers gespeichert ist.
  • Die Funktion "rechteSeite()" liefert also als erste Komponente die Steigung von x und als zweite die Steigung von v.
  • Da andere Modelle aus mehr Gleichungen, oder nur einer bestehen könnten, wird in der Variable "anzahl" die Anzahl der Modellgleichungen für das aktuelle Modell gespeichert.
  • Die Integrator-KLasse enthält die Funktion "...zeitschritt(...)", die aus einem übergebenen Zustand zum Zeitpunkt t den Nachfolgezustand zum Zeitpunkt t+Δt berechnet.
  • Bei der Eulerintegration geschieht dies durch Hinzuzählen der mit Δt multiplizierten aktuellen Steigung zum aktuellen Zustand.
  • Da es mehrere Zustandsgrößen (hier zwei: x und v) gibt, für die diese Prozedur ausgeführt werden muß, benötigt der Integrator eine Information darüber, wieviele Zustände pro Zeitschritt integriert werden müssen.
  • Diese Information liefert das Modell durch die Funktion "..holeAnzahlGleichungen()", welche den Wert des Objektattributs "anzahl" zurückgibt.
  • Damit der Integrator "weiß", welches Modell er integrieren muß und auch Zugriff darauf hat, gibt es in der Integrator-Klasse ein Objektattribut vom Typ Modell*.
  • In dieser Variable wird ein Zeiger auf das zu integrierende Modell abgelegt.
  • Der Zeiger wird mit Hilfe des Konstruktors der Integrator-Klasse mit demjenigen Modell belegt, dessen Zeiger dem Konstruktor als Übergabeparameter übergeben wird.
  • Auf diese Weise sind nun das Integrationsverfahren und die Modellgleichungen voneinander getrennt worden und es wurden zwei KLassen entwickelt, die diese Elemente in Form von Funktionen beinhalten.
  • Die UML-Diagramme sind eher C++ orientiert.
  • Umsetzung und Weiterentwicklung in Java: s. Vorlesung.
sim.zip - in Vorlesung zu entwickelnde Programme.
Übung 10
  • Grundlage bildet das in der Vorlesung entwickelte objektorientierte Simulationsprogramm, das Sie weiter oben unter sim.zip herunterladen können.
  • Schreiben Sie ergänzend zu diesem Programm eine Klasse RuKuIntegrator, der den vorher dargestellten Runge-Kutta-Integrations-Algorithmus implementiert.
  • Gehen Sie dabei genauso vor, wie bei der in der Vorlesung entwickelten Klasse EulerIntegrator.
  • Verwenden Sie insbesondere auch für Ihre Klasse die Oberklasse Integrator.
  • Tauschen Sie die Euler-Integrationsklasse durch Ihre Integrator-Klasse aus.
  • Nutzen Sie diese Aufgabe, um noch einmal das bisher entwickelte Simulationsprogramm zu analysieren.