kramann.info
© Guido Kramann

Login: Passwort:










Informatik3
1 Vom_struct_zur_Klasse
..1.1 Vom_struct_zur_Klasse
..1.2 struct_Programm
..1.3 Klassen_Programm
..1.4 Offene_Fragen
..1.5 Historie
..1.6 Objektabstraktion
..1.7 OO_Kundenverwaltung
..1.8 Objektfaehigkeiten
..1.9 Formatierung
..1.10 Motivation
..1.11 Uebung1
..1.12 Uebung2
2 UML
..2.1 Volumenberechnung
..2.2 UML_Klassendiagramm
..2.3 Konstruktor
..2.4 Statische_Variable
3 Strings
..3.1 Klassenbibliotheken
..3.2 stringUML
..3.3 Uebung3
4 Initialisierungen
4 bluej
5 Zeiger_und_Arrays
..5.1 Zeiger
..5.2 Zeiger_und_Funktion
..5.3 Uebung4
6 Vererbung
..6.1 MesswerteUML
..6.2 MesswerteProgramm
..6.3 VererbungsProgramm
..6.4 Vector
..6.5 Uebung
7 Modifikatoren
..7.1 public_Vererbung
..7.2 protected_Vererbung
8 Listen_und_Templates
..8.1 Containertypen
....8.1.1 ListeUML
....8.1.2 ListeProgramm
..8.2 Templates
....8.2.1 Listentemplate
....8.2.2 STLvectorTemplate
..8.3 Uebung5
..8.4 Uebung6
..8.5 Uebung7
9 Java
..9.1 Uebung
..9.2 GettingStarted
..9.3 Animation
..9.4 Hybrid
..9.5 Threads
10 Delegation
11 LayoutProjekt
12 Fenster
13 Uebung
14 Zwischenprojekt
..14.1 Befehle
..14.2 Planung
..14.3 JNI
..14.4 JNIumsetzen
..14.5 Anwendungsklasse
..14.6 GUI01
..14.7 GUI02
15 Rasterlayout
..15.1 Bilder_Packages
..15.2 interfaces
..15.3 ArrayList
..15.4 clone
..15.5 Uebung
16 Nuetzliches
..16.1 Threads
..16.2 Animation
..16.3 RungeKutta
..16.4 Loesungsansatz
..16.5 Internetprogrammierung
....16.5.1 Codegenerierung
....16.5.2 PHP_Programmierung
....16.5.3 PHP_OOP
....16.5.4 Java
17 Algorithmen
..17.1 RungeKutta
..17.2 Loesungsansatz
..17.3 Evoopt
..17.4 Uebung12
..17.5 Uebung8_2014
..17.6 Ausdruecke
18 Uebung10
19 UML_ALT
..19.1 Flaechenberechnung
..19.2 UML_Flaechenberechnung
..19.3 Implementierung
..19.4 ListeUML
..19.5 ListenImplementierung
..19.6 Anwendung
kramann.info
© Guido Kramann

Login: Passwort:




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 0-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. D.h. als Rückgabe- und Übergabetypen werden Zeiger verwendet. Wie sehen die UML-Diagramme in Java aus, bzw. welche Übergabe- und Rückgabetypen können hier verwendet werden?
  • Umsetzung und Weiterentwicklung in Java: s. Vorlesung.
Übung
  • 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.