Dienstag, 12. Juli 2016

Kompatibilitätsprobleme Windows 10

Offiziell ist der Simulator nur für die Windows Versionen 2000, XP, VISTA und Windows 7 verfügbar. Letztes Jahr lief das ganze auch für Windows 8. Anhand des Feedbacks mussten wir feststellen, dass der Simulator unter Windows 10 nicht zum Laufen gebracht werden kann (bzw. die mit dem Simulator kommunizierenden Software).

Wir empfehlen als einfachste Lösung einen Rechner mit Windows 7 Version als Entwicklungsplattform zu nutzen. Falls dies nicht möglich ist besteht die Möglichkeit das ganze in einer virtuellen Maschine zu entwickeln. Wenn es schnell gehen soll, dann stellen Sie sich diese selber zusammen. Ansonsten arbeiten wir gerade daran eine virtuelle Maschine zusammenzustellen, die Sie unter Oracle Virtual Box laufen lassen können.Dies wird aber noch bis morgen Zeit in anspruch nehmen.

Freitag, 8. Juli 2016

Anpassung der Klasse mod.robot.Robot

Die Klasse mod.robot.Robot enthielt bis jetzt noch einen Fehler, sodass z.B. mit dem Bumper nicht wie in der Projektbeschreibung dargestellt umgegangen werden konnte.

Dies sollte jetzt behoben worden sein. Dazu können die Projekte einfach nochmal neu importiert werden oder im vorhandenen Projekt die Bibliothek modii2016robot.jar im Ordner Mod2Studen/lib durch die in der .zip-Datei vorhandene Bibliothek ersetzt werden.

Donnerstag, 7. Juli 2016

Umgang mit dem TaxiAppContainer

 Aufgrund einer Anfrage wollte ich noch einmal die TaxiApp Komponente näher erläutern:

Die TaxiApp soll nicht von Ihnen modelliert bzw. realisiert werden, sie wird von uns gestellt. Unsere Komponente stellt eine AppContainer Instanz zur Verfügung (die dem IAppContainer-Interface genügt), von der sie wiederum eine Liste von TaxiApp Instanzen bekommen, die dem ITaxiApp-Interface genügen. Dort können Sie jeweils eine Output Instanz bekommen, an der Ausgaben an die App gemacht werden und einen Handler registrieren, der die Eingaben der Apps verwaltet (also für jede App einen Handler). Instanziierungen durch Ihre Modellierung von von uns gegebenen Interfaces sind nur für die verschiedenen Handler nötig. Alle anderen Instanzen sollten Sie durch entsprechende Methodenaufrufe bekommen.

Mittwoch, 6. Juli 2016

Montag, 4. Juli 2016

Implementierungsframework steht bereit

Ab sofort liegt im Materialienordner alles Notwendige für den Implementierungsteil bereit. Ein Word-Dokument erklärt die notwendigen Schritte zur Installation und Details der zu erstellenden Implementierung

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.

Montag, 30. Mai 2016

Robotino Virtual Machine

Als wir die Robotino-VM ausprobieren wollten, ließ sich die Zip-Datei weder auf Linux noch auf Windows entpacken. Wir vermuten, sie ist beschädigt. Könnte das bitte überprüft werden?

Eine Robotino-VM wurde von uns dieses Semester noch nicht zur Verfügung gestellt.

Kommunikation

Sollen wie in der Vorstufe Interfaces zwischen Server und Robot verwenden werden, die dann durch eine Netzwerkbibliothek serialisiert und gemappt werden? Oder wird erwartet, dass wir dieses Mapping selbst (z. B. mit IWlanAdpater) durchführen? Wie weit sollen wir hier abstrahieren? Ist z. B. eine Remote-Call-Bibliothek erlaubt, die die Netzwerkschicht automatisch übernimmt? Wozu benötigen wir dann Message etc.?

Sie sollen die Verwendung des IWlanAdapters und des MessageHandlers modellieren und verdeutlichen wie kommuniziert wird. Haben Sie das modelliert dann können Sie in den anderen Teilen darauf bezug nehmen.

Zusammengestossene Roboter

Sollen wir bei einem Zusammenstoß davon ausgehen, dass der Roboter kaputt ist und manuelle Wartung braucht (und somit aus allen folgenden Workflows ausscheidet)? Oder sollen wir (z. B. nach einem Rücksetzen) einfach weiterfahren?

Der Roboter braucht dann manuelle Wartung. Alternativ erreicht das System einen Fehlerzustand (Absturz). Einfach weitermachen wäre zu einfach.

Anzahl Roboter

Ist die Anzahl der Roboter konstant?

Ja

Krankenhausaufträge sequentiell

Gibt es das Interface IHospitalOutput und IHospitalInputHandler für jeden Roboter einmal? Sonst gäbe es das Problem, dass man nicht weiß, welcher Patient aus welchem Roboter bei Aufruf von IHospitalInputHandler.patientArrived() angekommen ist und somit nicht weiß, welches Vehikel wieder vom Krankenhaus losfahren kann. Das gleiche Problem gibt es mit IHospitalInputHandler.patientOnBoard().

Es gibt immer nur einen Krankentransport auf einmal. Das heisst es wird kein Transport angefragt, bevor der zuletzt ausgelöste nicht schon beendet wurde.

Position

Ist die Klasse Position, die in ITaxiAppUserInputHandler.orderTaxi(source: Position, destination: Position) verwendet wird, die selbe wie die, die im Roboterpaket definiert ist? 

Ja.

Verhalten Appcontainer

Liefert IAppContainer.getApps() immer die selben Apps (-> gleiche Anzahl)?

Ja. Wir halten es erstmal einfach.

Ist die Batterie voll?

Für die Abfrage, ob die Batterie beim Wiederaufladen schon voll ist, gibt es folgende Optionen: (1) Blockierende Warteschliefe (dann kann allerdings nicht auf Server reagiert werden), (2) Nichtblockierende Schleife in (a) einem zweiten Thread oder (b) per Timer
(3) Wir bekommen ein verbessertes Batterie-Interface mit, was sich über eine Schnittstelle von selbst zurückmeldet. sobald es voll ist.
 


Das Batterieinterface bleibt so wie es ist. Sie müssen sich dann für eine der Optionen entscheiden. Blockierend ist allerdings keine gute Idee.

Messages

Wie soll mit einer Message etwas versendet werden, wenn nur IDs enhalten sind?

Für das Versenden werden konkrete Objekte benötigt. Die Klassen dazu dürfen Sie selber modellieren und die dürfen auch eine Payload haben (ja es sind auch verschiedene Implementierungen der Klasse denkbar oder sogar eine Typhierarchie).

Namensschemainkonsistenzen

ArrivalHandler, Message: Warum beginnen diese im Gegensatz zu allen anderen Interfaces nicht mit I?

Dafür gibt es keinen spezifischen Grund.

Krankenhausposition

Woher bekommen wir die Position des Krankenhauses?

Die fehlende Konstante im Dokument wurde nachgetragen, es steht eine aktuallisiert Version im Materialienverzeichnis

Was passiert beim Taxifahren bei Zieleinfahrt

Bei Ankunft des Taxis am Ziel: Teilt der Kunde dem System mit, dass er ausgestiegen ist? Oder können wir einfach abfahren, sobald wir am Zielort sind?

Einfach abfahren.

Ladungsverluste

Verliert die Roboterbatterie im Falle der Inaktivität ebenfalls an Ladung?

Nein, es kann davon ausgeganngen werden, dass der Ladungsverlusst zu vernachlässigen ist.

Samstag, 28. Mai 2016

Reichweite Batterie

Dürfen wir davon ausgehen, dass der zu betreuende Raum so begrenzt ist, dass jeder Roboter ab einem gewissen Mindestbatteriestand alle Aufträge innerhalb der Stadt erfolgreich ausführen kann?



Fragestellungen rund um die Reichweite erfordern Annahmen, die gemacht werden müssen, da im Beschreibungsdokument dazu keine Angaben vorhanden sind. Sinnvoll ist z.B. davon auszugehen, dass zurückgelegte Strecke und Batterieverbrauch in einem konstanten Verhältnis stehen (obwohl es realistischer wäre z.B. die Beschleunigung mit einzubeziehen). Zusätzlich kann davon ausgegangen werden, dass "die Stadt der Zukunft" immer noch ein physikalische Ausdehnung hat und dass alle Fahrten innerhalb der Stadt getätigt werden. Außerdem wird die Batterie eine bestimmte Kapazität haben. Wenn jeweils Konstanten definiert werden (müssen erstmal nicht belegt sein), dann ergibt sich die Antwort auf die Frage.

Mittwoch, 25. Mai 2016

Template Reflektion und Nochmalige Terminverschiebung

Am 1.6 kann die Vorlesung wegen eines Konfliktes mit der Belegung der Hörsäle nicht stattfinden. Deswegen ist er jetzt auf den 3.6 verlegt worden.

Der Abgabetermin des Reflektionsdokumentes bleibt erhalten.

Die Vorlage ist immer noch im Materialienordner, es handelt sich allerdings um ein Powerpoint-Template (ModellierungIIReflexionEntwurfTemplate.pptx). Bitte reichen Sie die Abgabe auch als Powerpointfolien basierend auf diesem Foliensatz ein (nicht als pdf).

Donnerstag, 19. Mai 2016

Leistungserfassung in neuem Gewand

Es steht eine aktualisiert Version der Leistungserfassung auf der Lehrveranstaltungsseite bereit. Sie entspricht inhaltlich den in der Einführungsvorlesung vom 15.4 bereits erläuterten Sachverhalten.

VisualParadigm und kollaboratives Arbeiten

Unter der gewohnten Stelle steht eine neue Version von Visual Paradigm zum Download bereit. Dort kann jetzt auch mit VPository kollaborativ gearbeitet werden.

ArrivalHandler vs. IBumperHandler

Wenn der ArrivalHandler nicht an der Komponente zu sehen ist, warum hat dann aber der IBumperHandler, der ebenfalls einem anderen Interface (IBumper) übergeben wird und damit ja auch unterschiedlich implementiert werden kann, trotzdem an der Komponente Robot eine Schnittstelle? 

Hier ist vorgesehen, dass eigentlich immer dieselbe Instanz eines IBumperHandler genutzt wird. Das Ganze ist auch so zu verstehen, dass die Komponente, um zu funktionieren, auf ihre als benötigt modellierten Schnittstellen angewiesen ist. Die Modellierung erzwingt zwar nicht diese Semantik, legt diese aber nahe.

Kommunikation in Iteration0

Aus der Aufgabenstellung für die 0. Iteration wurde nicht ganz klar, inwiefern wir die Kommunikation als gegeben benutzen dürfen oder sie eben noch weiter spezifizieren müssen.
"In der Vorstufe kann der Server direkt Aufrufe an den Roboter absetzen, ohne Nachrichten über das WLan versenden zu müssen.” Heißt das, dass wir nur das WLAN ignorieren sollen oder gar keine Kommunikation modellieren müssen und zwischen dem Komponenten quasi Remote Procedure Calls einsetzen können?

In der Tat kann der Server in der Vorstufe direkt Aufrufe an den Roboter tätigen und benötigt dafür auch keine Remote Procedure Calls (die übrigens unter Umständen synchron wären). Die Modellierung der Kommunikation soll erst in den späteren Ausbaustufen erfolgen und dann auch über das WLan Interface gehen.

ArrivalHandler kein gefordertes Interface der Komponente Robot?

Im Projektdokument wird das Interface ArrivalHandler im vorgegebenen Komponentendiagramm an der Komponente Robot nicht angeboten. Wir würden das gerne als angebotene Schnittstelle in unserem Entwurf anfügen. Ist das in Ordnung?

Nein, denn die Komponente stellt den ArrivalHandler nicht zur Verfügung. Ebenso benötigt die Komponente auch nicht den ArrivalHandler (wenn schon, der naheliegendere Fall). Vielmehr kann bei jedem Aufruf von driveToPosition(...) ein anderer ArrivalHandler angegeben werden, insofern wäre die Modellierung mit einem geforderten Interface nicht richtig.

ArrivalHandler und Nachrichten

Es hat sich die Frage ergeben, ob auch der im Grunde vorgegebene ArrivalHandler zu den den in Aufgabe 3 u.a. zu modellierenden "Nachrichten" gehört, auch wenn ArrivalHandler in keiner der Operationen genutzt wird, die für eigenen Schnittstellen definiert wurden?

Mit den Nachrichten sollten Instanzen eines ArrivalHandler eigentlich nicht unbedingt zu tun haben. Dies gilt insbesondere für Iteration 0.

Mittwoch, 18. Mai 2016

Verhalten der Methode drive[Cautiously]ToPosition(...)

Wie verhält sich die Methode driveToPosition bzw. driveCautiouslyToPosition?

Ein Aufruf der Methode sorgt dafür, dass sich der Roboter direkt auf die angegebene Zielposition zubewegt. Nach dem Aufruf kehrt die Methode sofort zurück und der Roboter kann andere Dinge erledigen.

Ist der Roboter am Zielpunkt angekommen, dann wird die Methode arrived() des Objektes aufgerufen, welches ArrivalHandler implementiert und welches der driveToPosition Methode übergeben wurde.

Wird nach dem Aufruf von driveToPosition (oder driveCautiouslyToPosition) und vor der Ausführung von arrived() die drive(..), driveCatiously(..), driveToPosition(..) oder driveCautiouslyToPosition(..) Methode aufgerufen, dann wird die ursprüngliche Fahrt abgebrochen und die Methode arrived() wird nicht mehr bezüglich des urprünglichen Ziels aufgerufen.

Klassen in Komponentendiagrammen einfügen mit Visual Paradigm

Im Zuge der Entwurfsphase des Modellierungsprojekts wollte unsere Gruppe in einem Komponentendiagramm eine Klasse einfügen. Leider bietet uns VisualParadigm keine Möglichkeit dafür. Wir wissen allerdings aus der Vorlesung, dass dies syntaktisch korrekt sein müsste. Was ist zu tun?
 
Wenn links die Baumansicht mit den Verschiedenen Diagrammen angezeigt wird, dann kann einfach aus einem Klassendiagramm eine bereits definierte Klasse rüber in ein Komponentendiagramm gezogen werden. Diese Klassen werden dann auch automatisch von dem Werkzeug konsistent gehalten (wenn etwas an der Originalklasse geändert wird, dann ändert sich die Klasse auch in allen Diagrammen in denen sie auftaucht). Das ist auch für die Interfaces zu empfehlen: Ein Interface kann in ein Komponentendiagramm geschoben werden und dann können die Interfaces von Ports referenziert werden.

Samstag, 14. Mai 2016

Interface Implementierungen

Bei der Bearbeitung der aktuellen Entwurfsphase kam die Frage auf, ob wir für alle Interfaces noch implementierende Klassen modellieren müssen, um diese ansprechen zu können? Dieses Vorgehen würde dem Konzept der Interfaces in Java entsprechen.

 
Die kurze Antwort lautet: nein.
 
Die Projektbeschreibung gibt Komponenten vor, die bestimmte Schnittstellen (Interfaces) anbieten, über die die Funktionalität der Komponente angesprochen werden kann. Dabei handelt es sich um UML und nicht um Java-Schnittstellen. Die Komponente, die diese Schnittstelle umsetzt ist als Black-Box modelliert, die diese Funktionalität bereitstellt. Als Nutzer der Komponente muss man sich keine weiteren Gedanken über die Realisierung machen. 
 
Aber: Die Komponenten bieten nicht nur Schnittstellen an, manche benötigen auch eine Instanz, die eine Schnittstelle realisiert. Hier muss eine andere Komponente diese Schnittstelle bereitstellen und dann ist tatsächlich in der internen Repräsentation der anderen Komponente eine Klasse erforderlich, die diese Realisierung vornimmt (z.B. eine Realisierung für IHospitalInputHandler für die Hospital-Komponente).

Freitag, 13. Mai 2016

Verschiebung der Vorlesung für das Feedback der Reflektion und Vorlesungstermine

Es gibt eine Änderung im Vorlesungsplan:
Die Ursprünglich für den 27.5 vorgesehene Vorlesung, in der Ihre Reflexion für den Entwurf besprochen wird, ist auf den 1.6 verschoben worden. Bitte beachten: es bleibt bei dem Abgabetermin für die Reflexion.

Im Materialienordner befindet sich jetzt auch das Template für die Reflexion.

Vorlesungstermine finden NICHT am 18.5, 20.5, 25.5, 27.5 statt.
Am 1.6 findet die Vorlesung zur Reflexion des Entwurfs statt.
Am 3.6 gibt es KEINE Vorlesung.

Donnerstag, 12. Mai 2016

Funktionsweise von drive(...) aus IDrive

Wenn drive() aufgerufen wird, wird dann unendlich in die an drive() durch die Parameter übergebene Richtung gefahren oder fährt der Roboter nur z.B. 10 Meter weit oder 1 Minute?

Der Aufruf von drive(..) sorgt dafür, das sich der Roboter ab sofort mit den angegebenen Parametern bewegt. Um den Roboter wieder zum Stehen zu bringen ist ein expliziter Aufruf von drive(...) mit auf 0 gesetzten Parametern erforderlich.

Handler für Distanzsensoren?

Darf davon ausgegangen werden, dass es zur Komponente IDistanceSensor einen Handler gibt, der anzeigt, wenn eine kritische Distanz zu einem Objekt erreicht wurde, sodass man nicht periodisch IDistanceSensor nach neuen Distanzdaten abfragen muss?

Die periodische Abfrage ist notwendig, es gibt keinen Handler.

Mittwoch, 11. Mai 2016

Kommunikation in der Vorstufe und den Ausbaustufen

In der Aufgabenstellung steht, dass man in der Vorstufe davon ausgehen kann, dass Robot und Server direkt kommunizieren koennen. Muessen dann fuer die Ausbaustufen die Dinge aus der Beispielanalyse/Beispielentwurf uebernommen werden oder kann wieder von der direkten Kommunikation ausgegangen werden?

In den weiteren Ausbaustufen kann nicht mehr von der direkten Kommunikation ausgegangen werden. Server und Roboter müssen dann Nachrichten über die entsprechenden Interfaces austauschen (siehe auch Vorlesung).

driveToPosition modellieren (wie funktioniert die Methode eigentlich)?

In IDrive ist die Methode driveToPosition vorhanden.Soll die Funktionalität dieser Methode modelliert werden?

Nein, die Methode ist gegeben und ihre Funktionalität steht auch fest. Als Ergänzung zur Beschreibung gilt folgende Erläuterung: Durch den Aufruf von driveToPositon wird der Roboter dazu veranlasst, zu  der angegebenen Position zu fahren. Die Methode ist nicht blockierend, das bedeutet, dass der Roboter z.B. weiter auf Dinge reagieren kann. Das Fahren wird nebenläufig ausgeführt. Die Ankunft des Roboters kann durch den ArrivalHandler, der beim Methodenaufruf übergeben wird, festgestellt werden (callback Methode arrived()). 

Die Nutzung des Methodenaufrufs und des Handlers ist hingegen zu modellieren.

Gegebene Interfaces Modellieren?

Frage bzgl. des Entwurfsdokumentes zu den Komponentenschnittstellen (Abschnitt 3): Sollen bereits im IST-Zustand der Aufgabenstellung beschriebene Interfaces noch einmal dort modelliert werden (z.B. IDrive etc.)?

Nein, dies sind lediglich Interfaces auf die im Rahmen der eigenen Modellierung zugegriffen wird. Sie sind ja schon modelliert und könnten lediglich wiedergegeben werden (auch nicht notwendig).

Montag, 9. Mai 2016

Kleine Änderung in der Projektbeschreibung (Hospital)

Es gibt eine kleine Anpassung der Projektbeschreibung. Bisher war es nicht möglich den Handler für Eingaben vom Krankenhaus irgendwo anzumelden, sodass dort ein Aufruf stattfinden kann. Die Hospital-Komponente hat jetzt ein zusätzliches Interface wo dies stattfinden kann.

Diese Änderung betrifft erst Phase 1.

Reflexion/Protokoll Abgabe

In welcher Form und wo soll das Protokolldokument abgegeben werden?

Das Protokoll soll auch im GIT-Repository abgelegt werden unter den Namen:
mod2016-gruppe[n]-protokoll-analyse.pdf
und
mod2016-gruppe[n]-protokoll-entwurf.pdf

Sonntag, 8. Mai 2016

Sourcecode?

Sollen für die Implementierung nur jar-Dateien abgegeben werden oder auch die Quelldateien?


Die Frage kommt noch ein bisschen früh aber lässt sich jetzt schon beantworten. Erwartet wird eine Abgabe mit Quelldateien, die sich fehlerfrei übersetzen lassen.

Freitag, 6. Mai 2016

Englisch?

Können wir die Abgabe auch komplett in Englisch machen?

Abgaben in Englisch können gerne gemacht werden. ABER: es sollte keinen Mehraufwandt bedeuten. Wenn es gegen Ende des Projektes enger mit der Zeit wird ist es wichtiger, dass der Inhalt stimmt.

Donnerstag, 5. Mai 2016

Systemgrenze der Vorstufe (Analyse)

Laut Aufgabenstellung gibt es explizit ein System Roboter, dass zu modellieren ist - bedeutet das, dass der Server definitiv nicht Teil des Systems ist (also außerhalb der Systemgrenzen)?

Für die Vorstufe ist nur das System Roboter zu modellieren, für die folgenden Stufen erweitert sich die Systemgrenze.

Erklärung zum Analyse-Template

Punkt 4.1 "Systemumgebung" - was genau verteht man darunter? Oder bedeutet Systemumgebung Hardware- und Softwarumgebung gemeinsam?

Es handelt sich hier um den übergeordneten Abschnitt der folgenden drei Unterabschnitte: Hardwareumgebung, Softwareumgebung und Ressourcenübersicht. Zwischen 4.1 und 4.1.1 wird also lediglich einleitender Text erwartet.

Wiederverwendung von Grafiken

Dürfen wir für die Vorstufe Grafiken aus dem Projektdokument wiederverwenden?

Gerne dürfen Sie Grafiken aus dem Projektdokument wiederverwenden. Wichtig ist, dass Sie für Ihr Dokument einen Mehrwert bedeuten.

Latex Template Analyse

Gibt es ein Latex-Template?

Ist im Materialienordner verfügbar. Solange Sie die inhaltlichen Vorgaben des Templates einhalten (egal ob Word oder Latex), können Sie immer auch mit ihrem eigenen Latex-Template arbeiten.

Teamwork-Server und Visual Paradigm

Die Version, die uns von Visual Paradigm zu Verfügung steht erlaubt es uns nicht den Teamwork-Server zu benutzen. Gäbe es die Möglichkeit eine Lizenz für eine Version, die uns das ermöglicht zu beschaffen?


Wir sind mit dem Hersteller im Gespräch. Bis jetzt wissen wir nur, dass SVN nicht mehr unterstützt wird und GIT nicht unterstützt werden wird.

Eigene Ladestationen?

Hat jeder Roboter eine eigene Ladestation oder kann jeder Roboter zu jeder Station fahren, sofern sie frei ist?

Jeder Roboter hat seine eigene Ladestation. Die Position bekommt man über das IBattery-Interface.

Mittwoch, 4. Mai 2016

Aktivierung der Ladestation

Muss die Ladestation explizit aktiviert werden, um einen Roboter zu laden, oder passiert dies implizit?

Antwort: Die Roboter werden an der Position der Ladestation automatisch geladen.