Donnerstag, 23. Juni 2016

Roboterunfälle

Kann angenommen werden, dass sowas wie ein ADAC-Service-Vertrag abgeschlossen wurde, der versichert, dass Roboter innerhalb einer festen Zeit nach einem Unfall repariert werden? Können wir einfach nach einer festen Zeit weiterfahren?

Dies ist eine weitere Möglichkeit, die Sie aber mit einer entsprechend dokumentierten Annahme beschreiben müssen. Zum Thema Bumper wurde ja schon in http://hpimod2016.blogspot.de/2016/05/zusammengestossene-roboter.html diskutiert.

Verhältnis der Komponenten NetworkAccess und Robot

Ist die Komponente NetworkAccess Teil der Komponente Robot? Oder sind die komplett getrennt?

Dies sind tatsächlich komplett getrennt.

Freitag, 17. Juni 2016

Batterieladung

Kann davon ausgegangen werden, dass alle Roboter beim initialen Start des Systems mit einer vollen Batterieladung ausgestattet sind?

Ja. Sollte aber vermerkt werden als Annahme.

Vorlesungstermine

Für die verbliebene Vorlesungszeit gelten folgende Termine:


22.6: Keine Vorlesung
24.6: Vorlesung
29.6: Keine Vorlesung
01.7: Keine Vorlesung
06.7: Keine Vorlesung
08.7: Keine Vorlesung
13.7: Vorlesung (Vorträge)
15.7: Vorlesung (Vorträge)
20.7: Keine Vorlesung
22.7: Vorlesung (Turnier)

Donnerstag, 16. Juni 2016

Semantik taxiArrived(pos : Position)

​Wofür ist die Methode taxiArrived(..) gedacht? Wird so dem Kunden mitgeteilt, dass das Taxi bei ihm angekommen ist oder dass die Taxifahrt beendet ist oder beides?


Ein Aufruf dieser Methode soll über die Ankunft beim Kunden unterrichten.

Für das Ende der Fahrt können Sie davon ausgehen, dass sobald das Vehikel am Ziel angekommen ist, der Kunde das Taxi verlassen hat.

Mittwoch, 15. Juni 2016

Kleines Update Review-Template

Im Review-Template ist eine Erklärung zum Verhältnis von Walkthrough und Identifizierten Punkten hinzugekommen.

Dienstag, 14. Juni 2016

Fehler in der Projektbeschreibung: IDrive

In der IDrive Komponente sind die Konstanten für die Geschwindigkeiten private. Ist das falsch vermerkt oder können wir davon ausgehen, dass wir getter und setter Methoden haben?

Tatsächlich sind die Konstanten als öffentlich anzunehmen. Dies wird bald möglichst korrigiert.

Synchrone Kommunikation

Ist die Latenz klein genug, sodass es akzeptabel ist, Request-Response-Muster übers Netzwerk synchron zu implementieren?

Wenn ich die Frage richtig verstanden habe, dann ist die Antwort: Nein.

Zuverlässigkeit der Kommunikation

Dürfen wir messages als zuverlässig annehmen? (Verbindung immer herstellbar, Reihenfolge bleibt erhalten, Latenz ist klein)

Hier dürfen Sie Annahmen treffen (müssen dokumentiert sein) und es entsprechend modellieren.

Kommunikation und Anzahl an Robotern

Ist dem Server in einer Variable bekannt, wie viele Roboter es gibt, oder soll er einfach eine bestimmte Zeit warten, damit sich alle Roboter registrieren können, und dann starten?

Es kann davon ausgegangen werden, dass alle Netzteilnehmer registriert sind bevor etwas von Ihnen modelliertes ausgeführt wird.

Kommunikation: MessageIDs

Sollen wir die messageIds für die Roboter und den Server selbst vergeben? Ist es ok, wenn die Roboter ihre IDs anhand der Startposition generieren und sich damit dann beim Server registrieren? Können wir davon ausgehen, dass erst der Server und dann (innerhalb von z. B. einer Minute) alle Robots angeschaltet werden?

Die MessageIDs werden automatisch vergeben. Entsprechend ist das Interface IWlanAdapter mit passenden Methoden ausgestattet.

IRSensorDistance

Was ist die genaue Bedeutung von IRSensorDistance.position() : int und positionDegree() : float?

Bei position() handelt es sich um einen von neun Werten, der für die Position des Sensors am Roboter steht. positionDegree() liefert die Position des entsprechenden Sensors in Grad zur Vorne Position des Roboters

Rotationsparameter der drive-Methoden

Passiert Rotation um beliebige Winkel augenblicklich? (Falls nicht, wann ist sie fertig / wie können wir das feststellen?)

Genauso wie bei den Parametern der drive-Methoden für das Fahren, handelt es sich bei der Angabe für das Drehen um eine Geschwindigkeitsvorgabe. Im Falle der Drehung allerdings um eine Winkelgeschwindigkeit.

Eigenschaften der Methoden drive, driveCautiously

Ist es erlaubt, dass bei IDrive.drive(Cautiously), zwei bzw. drei Argumente gleichzeitig ungleich 0 sind? Ist insbesondere schräges Fahren erlaubt oder Drehung während der Fahrt?

Ja und ja.

Organisation Review

Hier nochmal der Plan für wer wen reviewt, an welchem Tag und in welchem Raum (Achtung Gruppe 6 und 2, es gibt jetzt einen Raum und eine Zeit), für alle zu denen es noch nicht durchgedrungen ist.


Reviewer Gereviewte Datum Tag Zeit Raum Abgabe Gereviewte
5 1 20.06.2016 Mo 09:15 A-2.1 15.06.2016
6 2 20.06.2016 Mo 13:30 A-2.1 15.06.2016
7 3 20.06.2016 Mo 15:15 A-1.1 15.06.2016
9 4 21.06.2016 Di 13:30 A-1.1 16.06.2016
1 5 22.06.2016 Mi 09:15 A-2.1 17.06.2016
2 6 22.06.2016 Mi 13:30 A-2.1 17.06.2016
3 7 22.06.2016 Mi 17:00 A-2.2 17.06.2016
4 8 23.06.2016 Do 09:15 A-2.2 20.06.2016
8 9 24.06.2016 Fr 11:00 A-1.2 21.06.2016
 Das entsprechende Template wird bis morgen bereit stehen und ich werde es am Anfang der Vorlesung kurz vorstellen (<15min).


Donnerstag, 9. Juni 2016

Warteschlange für Taxis

Für den Taxi-Betrieb ist von einer Liste von Kunden, die auf ein Taxi warten, die Rede. Es ist aber nur davon die Rede, dass man "enttäuschten" Kunden die Anzahl der Wartenden mitteilen soll. Es wird nicht explizit gesagt, dass wir so eine Liste anlegen, führen und entsprechend der Listenpositionen die nächsten Taxifahrten vergeben sollen. Ist dies hier implizit gefordert?


Der Sollzustand beschreibt lediglich, wie sich das System von außen beobachtbar, unter Verwendung der vorhandenen Infrastruktur, verhalten sollte. Wenn Sie das beschriebene Verhalten auch ohne Listen realisieren können, dann können Sie das gerne so umsetzen.

Aus der Beschreibung kann aber schon herausgelesen werden (Interpretation), dass Kunden "gerecht" behandelt werden. Die Anzahl der Wartenden generiert ja schon die Erwartungshaltung, dass ein Kunde sich an einer Position in einer Wartereihenfolge befindet.

Mehrfachverwendung des gleichen Interfaces

Ist es in UML möglich, dass mehrere Komponenten ein und das gleiche Interface, das von einer anderen Komponente angeboten wird, benutzen?

Ja (ist auch in der einschlägigen Literatur nachzulesen).

Umgang mit Handlern

Wir sind uns immer noch nicht sicher, wie wir mit dem ArrivalHandler richtig umzugehen haben: Wir dürfen kein zusätzliches von der Robot-Komponente benötigtes Interface hinzufügen. Ist es denn dann möglich, aus arrived() heraus über das vom Robot benötigte Interface IMessageHandler eine Kommunikation mit dem Server anzustoßen?

Ich bin mir nicht ganz sicher, wie das "..dürfen kein zusätzliches ... benötigtes Interface hinzufügen" gemeint ist. Es ist zumindest so, dass Sie von uns eine fertige Komponente bekommen, die die genannten Interfaces auf die genannte Art und Weise anbietet. Wenn Sie zusätzliche Interfaces an unsere Komponente anbinden wollten, dann würden diese schlicht ignoriert werden.

Das bedeutet aber noch lange nicht, dass Sie nicht flexibel beim Umgang mit dem ArrivalHandler sind. Es handelt sich um ein Interface welches Sie implementieren können wie Sie mögen. Fix ist lediglich, dass der Kontrollfluss beim Aufruf von arrived() startet. Innerhalb von der von Ihnen implementierten arrived()-Methode können Sie dann unterschiedliche Strategien verfolgen. Entweder Sie erledigen alles innerhalb des Kontrollflussess der Methode (synchron) oder Sie führen z.B. eine Zustandsänderung herbei, die aus dem Hauptkontrollfluss des Roboters behandelt wird (asynchrone Verarbeitung). Überlegen Sie welche Vor- und Nachteile sich daraus ergeben könnten.

Das Anstoßen der Kommunikation erfolgt übrigens nicht über den IMessageHandler sondern über den IWlanAdapter (send(..)).

Für den IMessageHandler, der ebenfalls von Ihnen realisiert werden muss, gilt das gleiche wie für den ArrivalHandler.

Donnerstag, 2. Juni 2016

Vorlesung nochmals verschoben.

Die Vorlesung zur Reflexion des Entwurfs musste leider noch einmal verschoben werden. Sie findet jetzt am Mittwoch den 8.6 um 13:30 im Hörsaal 2 statt (Raumänderung beachten).

Mittwoch, 1. Juni 2016

Von Kunden blockierte Taxis

Kunden können per ITaxiAppUserOutput.reportTaxiAvailable() darüber informiert werden, dass ein Taxi bereit steht. Was passiert, wenn der Kunde sich sehr viel Zeit lässt bis er über confirmOrder() das bereitgestellte Taxi bestätigt?

Es steht Ihnen offen hier verschiedene Wege zu gehen. Sie könnten zum Beispiel davon ausgehen, dass der Kunde sich schnell genug meldet oder sie warten eine bestimmte Zeit und wenn sich der Kunde immer noch nicht gemeldet hat, dann vergeben sie das Taxi anderweitig. Was machen Sie dann aber wenn der Kunde das Taxi bestätigt?

Die Entscheidung, die sie hier treffen ist keine Entscheidung über richtig oder falsch, es gibt einfach verschiedene Möglichkeiten die den skizzierten Soll-Zustand realisieren. Wichtig ist, dass Sie getroffen Annahmen dokumentieren. Sie können sich im Grunde genommen regelrecht "austoben". Wie wäre es mit Schwellwerten für die Wartezeit die nicht festliegen sondern über die Betriebszeit gelernt werden? Achten Sie darauf, dass Sie das ganze noch übersichtlich darstellen können. Fangen Sie am besten mit einer einfachen Lösung an. Wenn noch Zeit ist, dann können Sie immer noch Features dazu bauen (eigene Iterationsstufen ausarbeiten).

Kann es mehrere Krankenhäuser geben

Nein

Warum mehr als zwei Roboter?

Warum existieren mehr als zwei Roboter in unserem System, wenn immer nur einer einen Auftrag abarbeiten kann und die anderen dann eventuell nur rumstehen oder aufladen?

Im Krankenhausszenario wird tatsächlich nur ein Roboter zur Zeit für den Transport eingesetzt. Das bedeutet aber noch lange nicht, dass der soeben für einen Transport eingesetzte Roboter der geeignetste ist einen neuen Transport zu tätigen (eher im Gegenteil, denn wo steht der Roboter bei Auftragsende?). Roboter können ja immer noch fahren und laden während ein Roboter einen Auftrag ausführt. Außerdem werden im Taxiszenario tatsächlich mehrere Aufträge gleichzeitig vergeben.

Geschäftsprozesse in Geschäftsprozessen

Ist es möglich in Geschäftsprozessen andere Geschäftsprozesse “aufzurufen” bzw. zu verwenden? Oder widerspricht das einer eventuellen Forderung, dass alle Geschäftsprozesse auf einer Abstraktionsebene sein sollen?

Wenn Aktivitätsdiagramme verwendet werden, dann können ganze Geschäftsprozesse einer Aktivität in einem anderen Geschäftsprozess entsprechen. Dies ist eine Modellierungsentscheidung, die Sie treffen können. Hierarchien haben nicht notwendigerweise etwas mit Abstraktionsebenen zu tun.

Keine Helfende Person beim Patienten

Was passiert wenn es keine Helfenden beim Patienten gibt?

Es kann davon ausgegangen werden, dass es immer Helfende beim Patienten gibt. Sie können das  auch als Annahme vermerken.