Advertisement
Guest User

Untitled

a guest
Apr 19th, 2018
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.98 KB | None | 0 0
  1. Vorlesung: Dr.-Ing. Matthias Becker - xmb@sim.uni-hannover.de
  2. Übung: Philipp Schiffmann - schiffmann@sim.uni-hannover.de
  3. Florian Chudigiewitsch - fch@thi.uni-hannover.de
  4. Assignment 2
  5. Objektorientierung, Dokumentation
  6. Abgabe: 24.04.2018, 23:59 Uhr
  7. The best programs are written so that computing machines can perform them quickly
  8. and so that human beings can understand them clearly. A programmer is ideally an
  9. essayist who works with traditional aesthetic and literary forms as well as
  10. mathematical concepts, to communicate the way that an algorithm works and to
  11. convince a reader that the results will be correct.
  12. — Donald Ervin Knuth, Selected Papers on Computer Science
  13. I. Motivation
  14. War das Lernziel in Programmieren I noch, Studierenden die Grundlagen einer Programmiersprache
  15. und von algorithmischem Denken zu vermitteln, sollt ihr in Programmieren II auch lernen, die
  16. Modellierung des Problems und die Strukturierung selbst zu übernehmen. Es besteht ein Unterschied
  17. dazwischen, einen Lückentext auszufüllen und eine komplette Programmarchitektur von Grund
  18. auf zu erstellen. Letzteres soll in den Einzelübungen von Programmieren II trainiert werden. Deine
  19. Aufgabe wird demzufolge darin bestehen, aus einer natürlichsprachlichen Beschreibung der Aufgabe
  20. ein Projekt aufzubauen, das langfristig les- und wartbar bleibt. Dadurch hast du mehr Freiheiten
  21. beim Programmieren, es gibt kein absolutes „richtig“ oder „falsch“ mehr. Stattdessen wird sich die
  22. Bewertung mehr auf „guter Stil“ oder „schlechter Stil“ fokussieren.
  23. II. Verkehrssimulation
  24. Im Laufe der nächsten vier Assignments sollst du eine einfache Verkehrssimuation erstellen. Wenn
  25. sie fertig ist, soll diese Simulation die Frage beantworten, wie hoch die durchschnittliche Zeitersparnis
  26. für einen Autofahrer ist, wenn wir in unserem (fiktiven) Straßennetz alle zeitgesteuerten
  27. Ampeln durch bedarfsgesteuerte ersetzen. In diesem Assignment wird erst einmal eine sehr einfache
  28. Modellierung vorgenommen, die du in den folgenden Assignments sukzessive zu einer komplexeren
  29. Simulation erweiterst.
  30. Diese Woche beginnen wir mit einem sehr kleinen Straßennetz, bestehend aus lediglich fünf Knotenpunkten
  31. und vier Straßen. Das Straßennetz modellieren wir mit zwei Klassen: Kreuzung und
  32. Fahrbahn. Letztere stellt tatsächlich nur eine einzelne Fahrbahn dar. Auf einer einzigen Fahrbahn
  33. können nicht mehrere Autos nebeneinander fahren, und sie kann nur in eine Richtung benutzt
  34. werden. Aktuell können Autos also zum Beispiel nur von A nach C fahren, aber nicht von C nach A.
  35. Institut für Systems Engineering . Fachgebiet Simulation und Modellierung . Programmieren II
  36. Vorlesung: Dr.-Ing. Matthias Becker - xmb@sim.uni-hannover.de
  37. Übung: Philipp Schiffmann - schiffmann@sim.uni-hannover.de
  38. Florian Chudigiewitsch - fch@thi.uni-hannover.de
  39. A
  40. B
  41. E
  42. C D
  43. 7
  44. 3
  45. 4 5
  46. Abbildung 1: Die Zahlen an den Kanten geben die Länge der jeweiligen Straße an, und die Pfeile die
  47. Fahrtrichtungen.
  48. Als nächstes definieren wir, wie sich Autos in unserem System verhalten sollen. Grundsätzlich sollen
  49. regelmäßig neue Autos zur Simulation hinzugefügt werden, die dann eine zufällig gewählte Route
  50. abfahren und anschließend wieder aus dem System entfernt werden. Diese Route soll aus einer Reihe
  51. von benachbarten Kreuzungen bestehen, die in dieser Reihenfolge abgefahren werden sollen. Wird
  52. also ein Auto an A erzeugt und soll nach D fahren, erhält es die Route A, C, D.
  53. Als nächstes betrachten wir, wie wir das „Fahren“ umsetzen. Dafür setzen wir die Schrittgröße
  54. der Simulationszeit einfach auf die Zeit, die ein Auto benötigt, um sich genau eine Autolänge
  55. vorwärts zu bewegen. (Alle unsere Autos sind gleich lang) Dadurch lässt sich die Simulation durch
  56. folgenden Pseudocode ausführen:
  57. until simulation terminates :
  58. increase total elapsed time counter by 1.
  59. for each car in the system :
  60. update car state .
  61. Alle Straßenlängen geben wir ebenfalls in Autolängen an. Jetzt können wir uns eine Fahrbahn als
  62. eine Reihe von Feldern vorstellen, und update car state bedeutet schlicht, dass sich das Auto ein Feld
  63. nach vorne bewegt – natürlich nur, solange das nächste Feld frei ist.
  64. Zuletzt vereinfachen wir uns unser Modell noch ein bisschen weiter, indem wir die Implementierung
  65. der Ampelanlagen erst nächste Woche betrachten. Wenn ein Auto also an eine Kreuzung gelangt,
  66. darf es direkt auf die nächste Fahrbahn weiterfahren, sobald diese frei ist, und muss sich nicht um
  67. weitere Verkehrsregeln wie Rechts-vor-Links kümmern. Außerdem bestimmen wir, dass Kreuzungen
  68. keine eigenen Felder besitzen. Zwei Autos können also dieselbe Kreuzung im selben Zeitschritt
  69. überqueren, solange sie nicht auf die selbe Zielstraße auffahren wollen.
  70. III. Lösungshinweise
  71. Modelliere Kreuzung, Fahrbahn und Auto jeweils in einer eigenen Klasse. Um verschiedene Objekte
  72. derselben Klasse beim Debuggen leichter auseinanderhalten zu können, kann es sinnvoll sein, jeder
  73. Institut für Systems Engineering . Fachgebiet Simulation und Modellierung . Programmieren II
  74. Vorlesung: Dr.-Ing. Matthias Becker - xmb@sim.uni-hannover.de
  75. Übung: Philipp Schiffmann - schiffmann@sim.uni-hannover.de
  76. Florian Chudigiewitsch - fch@thi.uni-hannover.de
  77. Klasse ein Attribut name zu geben und diese Namen bei der Objekterzeugung von Hand auf eindeutige
  78. Werte zu setzen.
  79. Eine Kreuzung hat genau vier ankommende und vier ausgehende Fahrbahnen entsprechend den vier
  80. Himmelsrichtungen. Ist die Kreuzung in dieser Himmelsrichtung nicht mit einer anderen Kreuzung
  81. verbunden, enthält die entsprechende Variable den Wert null.
  82. Eine Fahrbahn hält Referenzen auf die Kreuzungen, an denen sie beginnt und endet, und verwaltet
  83. intern die Information, welche ihrer Felder aktuell frei oder durch ein Auto belegt sind. So können
  84. andere Autos effizient abfragen, ob sie noch ein Feld vorrücken dürfen.
  85. Ein Auto enthält die Straße und das Feld, auf dem es sich gerade befindet; einen Zähler, der die
  86. Lebenszeit des Objektes zählt und in jedem Simulationsschritt erhöht wird; sowie die abzufahrende
  87. Route. Diese Route kann als verkettete Liste von Kreuzungen implementiert werden, wobei jeder
  88. RoutenAbschnitt eine Kreuzung und den nächsten RoutenAbschnitt enthält. Aus der Gesamtlänge
  89. der Route und der Lebenszeit des Autos können wir dann in der nächsten Woche die an Ampeln
  90. gewartete Zeit berechnen.
  91. Schreibe eine Klasse Simulation, die die Simulation ausführt. Im Konstruktor kannst du das Straßennetz
  92. initalisieren. Außerdem soll die Klasse eine Methode run enthalten, die die Simulation
  93. entsprechend dem oben aufgeführten Pseudocode durchführt, aber zusätzlich in jedem Zeitschritt
  94. den aktuellen Zustand (Position, Lebenszeit) aller aktiven Autos ausgibt.
  95. Verwalte die Liste der aktiven Autos innerhalb der Simulation-Klasse. Du kannst ein array dafür
  96. benutzen und davon ausgehen, dass nie mehr als 10 Autos gleichzeitig im System sein werden.
  97. IV. Aufgaben
  98. 1. Gliedere deinen Code in packages, die der offiziellen Namenskonvention folgen:
  99. de.uni_hannover.sim.<dein Name>.simulation für die Klasse Simulation,
  100. de.uni_hannover.sim.<dein Name>.model für Kreuzung, Fahrbahn und Auto.
  101. 2. Erstelle alle Klassen mitsamt ihren Funktionen und Membervariablen.
  102. 3. Die Simulation soll nach 15 Zeitschritten terminieren. Erzeuge zum Zeitpunkt 0 ein Auto mit
  103. der Route A, C, E, zum Zeitpunkt 1 ein Auto mit der Route A, C, D und zum Zeitpunkt 3 ein
  104. Auto mit der Route B, C, E. Autos, die ihr Ziel erreicht haben, sollen von der Fahrbahn entfernt
  105. und und nicht weiter aktualisiert werden.
  106. 4. Schreibe eine main-Methode, die eine Simulation instanziert und darauf run aufruft.
  107. V. Bewertungskriterien
  108. Um dieses Aufgabenblatt zu bestehen,
  109. 1. muss dein Code ohne Fehler compilieren.
  110. 2. musst du das beschriebene Datenmodell mit Hilfe von Klassen modelliert haben.
  111. 3. muss du dir Gedanken darüber gemacht hast, welche Methoden und Attribute du in welche
  112. Klasse schreibst.
  113. 4. sollte die Simulation grundsätzlich laufen.
  114. Institut für Systems Engineering . Fachgebiet Simulation und Modellierung . Programmieren II
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement