JGU Logo JGU Logo JGU Logo JGU Logo

Institut für Informatik

Michael Wand
Christian Ali Mehmeti-Göpel
Wintersemester 2020/21DIGITAL

Projektaufgabe

Übung 7
Einführung in die Softwareentwicklung




Projekt Übersicht

Letzte Änderung: 16. December 2020, 14:14 Uhr


Sobald man mit einer Programmiersprache über for-Loops zu der Definition von Klassen gekommen ist, ist es durchaus eine gute Übung, ein kleines Spiel zu implementieren. Natürlich wäre das Ganze mit GUIs und der Möglichkeit zu zeichnen sehr viel interessanter, aber leider sind wir noch nicht so weit. Aus dem Grund schreiben wir eine kleine Simulation, die uns direkt auf der Konsole ausgegeben werden soll. Ein Vorteil einer Simulation gegenüber einem interessanten Spiel ist, dass dynamische Tastenabfrage in der Konsole leider auch schwierig zu bewerkstelligen ist.
Der Hauptgrund für eine Simulation als Aufgabe ist, dass hierbei verschiedene Akteure selbstständig aufeinander reagieren. Diese Eigenschaft macht eine solche Simulation zu einem ausgezeichneten Kandidaten für eine OOP-Aufgabe.


Es gibt zwei Projekte zur Auswahl. Wählen Sie als Gruppe eines der beiden Projekte aus und bearbeiten Sie dann die Aufgaben.


Bewegungssimulation

(etwas leichter, dafür etwas mehr Teilaufgaben)



Hier gehts zur Projektbeschreibung und einigen Tipps.

Verkehrssimulation

(etwas schwieriger, daher wenige Teilaufgaben)



Hier gehts zur Projektbeschreibung und einigen Tipps.



Aufgabe Planung

Letzte Änderung: 16. December 2020, 14:14 Uhr
keine Punkteim Detail

Wählen Sie als erstes gemeinsam im Team eines der beiden Projekte aus und besprechen Sie neben dem internen Interesse auch eventuelle Pro- und Kontra-Argumente der jeweiligen dahinterliegenden Aufgaben. Überlegen Sie sich schon einmal, wie das Projekt gemeinsam gelöst werden kann. Es geht hier um Softwareengineering. Aufgabenverteilung, Planung und eine Verständigung innerhalb der Gruppe kann wichtig werden.


Lesen Sie vor der internen Besprechung die Anlage für Klassendiagramme und schauen Sie sich noch einmal intensiv die UML-Beispiele der Vorlesung an.


Überlegen Sie sich gemeinsam, welche Klassen Sie innerhalb Ihres Programmes verwenden werden müssten und welche Methode diese jeweils bereitstellen sollten. In der OOP gibt es zwei Ansätze, die dabei gefahren werden können:


Beide Herangehensweisen bringen so ihre Vor- und Nachteile mit sich. Meiner persönlichen Erfahrung nach muss je nach Projekt abgewogen werden; Während das erstere zwar oft schneller zu einer schönen API führt, kann es schnell passieren, dass die gewünschten Pläne nicht so leicht umzusetzen sind und große Teile umgeschrieben werden müssen. Andererseits ist letzteres vielleicht näher am üblichen „direkt darauf los programmieren“, kann jedoch auch schnell zu Code, der nicht so leicht erweiterbar ist, führen und daher ebenfalls große Teile neu geschrieben werden müssen.


Dies einfach auszuprobieren und nach dem Bauchgefühl zu entscheiden ist Teil der Übung. ;)


Aufgabe Klassendiagramm

Letzte Änderung: 16. December 2020, 14:14 Uhr
15 Punkteim Detail
Geben Sie ein UML-Diagramm ab, dass zu ihrer Implementierung passt. Ziel dieser Aufgabe ist es, die UML-Syntax zu üben.


Punkte gibt es für


Geben Sie das fertige Diagramm in ihrem Repository ab.
(Wie vorher auch ist es natürlich nicht zwingend erforderlich tikz-uml zu verwenden.)


Aufgabe Implementierung

Letzte Änderung: 16. December 2020, 14:14 Uhr
25 Punkteim Detail




Implementieren Sie die von Ihnen ausgewählte Problemstellung.


Achten Sie bei der Abgabe darauf


Dies könnte für eine (langsamere) Visualisierung auch nützlich sein.
Programm anhalten: Quelle

#include <iostream>
#include <chrono>
#include <thread>

int main() {
    using namespace std::chrono_literals;
    std::cout << "Hello waiter\n" << std::flush;
    std::this_thread::sleep_for(2s);
    std::cout << "Waited\n";
}