Daten_Schnittstelle(1): - setSensordaten(double[] Sensoren) // alle Werte auch auf die Platte schreiben - getSonsordaten(): double[] - getTrainingsplan(): Trainingsplan - setTrainingsplan(Trainingsplan t): void - setKonstitution(int Konstitution): void - getKonstitution(): int - setProfil(Profil): void - getProfil(): Profil - getMasterInReichweite
Gui_Schnittstelle(3): - setNachricht(String msg): void - setStatusindoor(int HF_i, int HF_s, int TF_i, int TF_s, int v, Zeittyp Zeit) - setStatusoutdoor(int HF_i, int HF_s, int TF_i, int TF_s, v, int L_i, int L_s, Zeittyp Zeit) - getTrainingsplan(): Trainingsplan - getTraining(): int - getProfil(Profile P): Profil
Trainingsplan: Trainingsplan Trainingseintrag [ ] Trainingseintrag: int Leistung int HF // optional int TF int Zeit // in Minuten
Profil: Profil: String Name int Gewicht int Alter (optional) int[] Leistungsprofil Trainingsplan[] Trainingspläne double[] Trainingsdaten int Toleranzbereich // jeder Fahrer hat einen anderen //Toleranzbereich bei der Herzfrequenz: standardmäßig +-5 //Schläge Training String Fahrername Trainingsplan Trainingsplan double[] Trainingsdaten// also die Sensor- und Eingabedaten //die alle 10 sec. erhoben werden: Trennung nach Einzel- und //Gruppentrainingsdaten)
es besteht noch immer jede Menge Diskussionsbedarf bezüglich der Kommunikation zwischen den Fahrrädern. Hier einmal die Vor und Nachteile der Realisierung über Nachrichten:
+ weniger Asynchronitätsprobleme, da die Kommunikation im SWP Segment gekapselt und sich das Segment KF nicht bei jedem RemoteMethodenaufruf um die um Kommunikationsprobleme kümmern muss. + Prof. Rausch meint es sei ein durchaus übliches Konzept zur Realisierung von Problemen unserer Art.
- statische Typsicherheit wird verletzt - Markus steht dieser Realisierung sehr Skeptisch gegenüber
Daten_Schnittstelle(1): - setSensordaten(double[] Sensoren) // alle Werte auch auf die Platte schreiben - getSonsordaten(): double[] - getTrainingsplan(): Trainingsplan - setTrainingsplan(Trainingsplan t): void - setKonstitution(int Konstitution): void - getKonstitution(): int - setProfil(Profil): void - getProfil(): Profil - getMasterInReichweite
Gui_Schnittstelle(3): - setNachricht(String msg): void - setStatusindoor(int HF_i, int HF_s, int TF_i, int TF_s, int v, Zeittyp Zeit) - setStatusoutdoor(int HF_i, int HF_s, int TF_i, int TF_s, v, int L_i, int L_s, Zeittyp Zeit) - getTrainingsplan(): Trainingsplan - getTraining(): int - getProfil(Profile P): Profil
Trainingsplan: Trainingsplan Trainingseintrag [ ] Trainingseintrag: int Leistung int HF // optional int TF int Zeit // in Minuten
Profil: Profil: String Name int Gewicht int Alter (optional) int[] Leistungsprofil Trainingsplan[] Trainingspläne double[] Trainingsdaten int Toleranzbereich // jeder Fahrer hat einen anderen //Toleranzbereich bei der Herzfrequenz: standardmäßig +-5 //Schläge Training String Fahrername Trainingsplan Trainingsplan double[] Trainingsdaten// also die Sensor- und Eingabedaten //die alle 10 sec. erhoben werden: Trennung nach Einzel- und //Gruppentrainingsdaten)
Daten_Schnittstelle(1): - setSensordaten(double[] Sensoren) // alle Werte auch auf die Platte schreiben - getSonsordaten(): double[] - getTrainingsplan(): Trainingsplan - setTrainingsplan(Trainingsplan t): void - setKonstitution(int Konstitution): void - getKonstitution(): int - setProfil(Profil): void - getProfil(): Profil - getMasterInReichweite - getLeistungsProfile():int[][] //alle vorhandenen Leistungsprofile von Platte laden - getProfile(): Profil[] - setTrainingsArt(int) //GT <-> ET
Gui_Schnittstelle(3): - setNachricht(String msg): void - setStatusindoor(int HF_i, int HF_s, int TF_i, int TF_s, int v, Zeittyp Zeit) - setStatusoutdoor(int HF_i, int HF_s, int TF_i, int TF_s, v, int L_i, int L_s, Zeittyp Zeit) - getTrainingsplan(): Trainingsplan - getTrainingsArt(): int - getProfil(Profil[]): Profil - getAnfangskonstituion(): int - getNeuesProfil(int[][]) //der gui werden alle vorhandenen Leistungsprofile übergeben
Trainingsplan: Trainingsplan Trainingseintrag [ ] Trainingseintrag: int Leistung int HF // optional int TF int Zeit // in Minuten
Profil: Profil: String Name int Gewicht int Alter (optional) int[] Leistungsprofil Trainingsplan[] Trainingspläne double[] Trainingsdaten int Toleranzbereich // jeder Fahrer hat einen anderen //Toleranzbereich bei der Herzfrequenz: standardmäßig +-5 //Schläge Training String Fahrername Trainingsplan Trainingsplan double[] Trainingsdaten// also die Sensor- und Eingabedaten //die alle 10 sec. erhoben werden: Trennung nach Einzel- und //Gruppentrainingsdaten)
also ich hatte mit dem Christoph am Dienstag ne Idee für sendMessage wo die Typsicherheit gewährleistet bleibt:
sendeNachricht(Message msg, FahrerNr): void
und von der Klasse Message werden dann die konkreten Messagetypen abgeleitet, so dass durch instanceof die Messagetypen unterschieden werden können. Da muss dann kein String geparst werden.
z.B. AnfrageGruppeTrennenMessage extends Message
Ich finde diese Schnittstelle für die SWP auch angebracht. Man könnte aber eine Schicht höher in den Unterkomponenten der KF (z.B. Komponente Gruppentraining) eine Schnittstelle definieren mit einer Methode anfrageGruppeTrennen, die dann die sendeNachricht-Schnittstelle von der SWP benutzt und über sie die AnfrageGruppeTrennenMesssage verschickt.
Wäre schön wenn sich ein paar mehr Leute an dieser Diskussion beteiligen würden, da diese Entscheidung sicherlich weitreichende Auswirkungen auf unser System haben wird.
so es wurden heute Jede Menge MessageTypen identifiziert und auf dem Klassendieagramm-Flip-Chart im Computerraum dargestellt.
Außerdem hat Ulf wunderschöne Sequenzdiagramme an die Tafel gezeichnet (Quasi als DesignAbsicherung). Alle dafür benötigten Schnittstellen finden sich hier wieder: ------------------ KF_Schnittstelle (2): ------------------ // folgende Schnittstellen werden von dem GUI benutzt - starteTraininng(): void - stoppeTraining(): void // folgende Schnittstellen werden von der SWP benutzt - receiveMessage(Message, Sender): void - gruppeEntdeckt(Master): void
-------------------- Daten_Schnittstelle(1): -------------------- - setSensordaten(double[] Sensoren) // alle Werte auch auf die Platte schreiben - getSonsordaten(): double[] - getTrainingsplan(): Trainingsplan - setTrainingsplan(Trainingsplan t): void - setSSE(int SSE): void - getSSE(): int - setSSE(int SSE,int RagtAsID): void //im MASTER werden auch die SSE der anderen Fahrer abgelegt - getSSE(int RagtAsID): int //im MASTER werden auch die SSE der anderen Fahrer abgelegt - setProfil(Profil): void - getProfil(): Profil - getLeistungsProfile():int[][] //alle vorhandenen Leistungsprofile von Platte laden - getProfile(): Profil[] - setTrainingsArt(int) //GT <-> ET - getTrainingsArt(): int
-------------------- Gui_Schnittstelle(3): -------------------- - setStatusindoor(int HF_i, int HF_s, int TF_i, int TF_s, int v, Zeittyp Zeit) - setStatusoutdoor(int HF_i, int HF_s, int TF_i, int TF_s, v, int L_i, int L_s, Zeittyp Zeit) - getTrainingsplan(): Trainingsplan - getTrainingsArt(): int - getProfil(Profil[]): Profil - getAnfangskonstituion(): int - getNeuesProfil(int[][]) //der gui werden alle vorhandenen Leistungsprofile übergeben - getMaster(Masters[]):Master // GruppeAuswaehlen - getGruppeZusammenfueren(String[] GruppenMitgliederNamen): boolean - getGruppeTrennen(String[] GruppenMitgliederNamen1, String[] GruppenMitgliederNamen2): boolean
#####################################DATENSTRUKTUREN############################# --------------- Trainingsplan: --------------- Trainingsplan Trainingseintrag [ ] Trainingseintrag: int Leistung int HF // optional int TF int Zeit // in Minuten
--------- Profil: --------- Profil: String Name int Gewicht int Alter (optional) int[] Leistungsprofil Trainingsplan[] Trainingspläne double[] Trainingsdaten int Toleranzbereich // jeder Fahrer hat einen anderen //Toleranzbereich bei der Herzfrequenz: standardmäßig +-5 //Schläge Training String Fahrername Trainingsplan Trainingsplan double[] Trainingsdaten// also die Sensor- und Eingabedaten //die alle 10 sec. erhoben werden: Trennung nach Einzel- und //Gruppentrainingsdaten)
Schnittstellen gefallen mir gut. Ein Punkt hätte ich aber noch, sollen wir nicht entweder alle Methoden kompeltt in Englisch oder kompeltt in Deutsch bennenen? So ein mischmasch finde ich nicht so gut,