1 Seminar zum Programmierprojekt SS 2008 Uni Tübingen, Arbeitsbereich Technische Informatik Anleitung C4 Einführung in die SW-Architektur des Host Einführung Abbildung 1 zeigt ein vereinfachtes Bild der SW-Architektur im Host. Die Anwendungen, die in unserem Bild auf den Java-APIs und dem BT-Stack liegen, stellen bereits die Funktionen unseres kleinen Informationssystems dar. Allerdings sind keine Klassen dargestellt. In der Aufgabe 4 sollen Sie selbst Klassen entwerfen. Eigene ServerAnwendungs -Klassen Native Klassen Java und BT-APIs Bluetooth-Stack und Betriebssystem Geräte-Treiber BT-HW: Sende/Empfangsteil (Radio): BT-Dongle Abbildung 1: Vereinfachte SW-Architektur im Host-PC In unserem Praktikum werden wir den standardisierten Suchassistenten wegen Kompatibilitätsproblemen nicht verwenden, sondern stattdessen einen eigenen Suchassistenten auf der Basis des „Serial Port Profile (SPP)“ entwickeln. Java APIs für Bluetooth Java bietet durch die JSR-82 (Java Specification Request 82) ein optionales Paket für J2ME an, welches eine Schnittstelle für Javaprogrammierer zur Nutzung von Bluetooth bietet. Die JSR-82 API bietet bietet den Zugriff auf: 1. reine Datenübertragungen (Sprache und Daten) 2. Die folgenden Protokolle: o L2CAP(nur verbindungsorientiert) o RFCOMM 2 o SDP o OBject Exchange protocol (OBEX) 3. Die folgenden Profile: o Generic Access Profile (GAP) o Service Discovery Application Profile (SDAP) o Serial Port Profile (SPP) o Generic Object Exchange Profile (GOEP) Die JSR-82 Spezifikation stellt keine APIs fÜr: 1. Audio (Sprach) Übertragungen 2. Telephony Control Protocol - Binary (TCS Binary oder TCS-BIN) Die API soll dem Programmierer die Möglichkeit bieten 1. Services zu registrieren 2. Services und Geräte zu finden 3. RFCOMM, L2CAP und OBEX Verbindungen aufzubauen 4. Diese Tätigkeiten auf eine sichere Art durchzuführen All diese Funktionen sind in den beiden Paketen javax.bluetooth und javax.obex enthalten. Sequenzdiagramme Auf der Basis der Spezifikation werden die Funktionen in UML-Sequenzdiagrammen (sog. "Use-Cases") erstellt. Ein Sequenzdiagramm zeigt verschiedene Module oder Prozesse eines Systems bzw. verschiedene Systeme, die gleichzeitig existieren, als parallele vertikale Linien. Die Zeitachse verläuft vertikal, von oben nach unten. Nachrichten, die zwischen den Modulen oder Systemen ausgetauscht werden, werden als horizontale Pfeile in der Reihenfolge in der sie auftreten, dargestellt. Dies erlaubt die graphische Darstellung der Spezifikation einfacher Laufzeitszenarios und Kommunikationsabläufe. Beispiele, die der oben gegebenen Beschreibung entsprechen, sind in Abbildung 2 und 3 gezeigt. In den Abbildungen ist links der Host als Server dargestellt, rechts das Mobile Telefon als Client. In Abbildung 3 ist eine Verzweigung bei der Auswahl der Dienste gezeigt. Die Aktionen: „Gerätesuche“ (Inquiry) und „Geräteauswahl“, sowohl als auch die erste Verbindung zum Gerät sind weggelassen. Erstellen Sie (zusätzlich) ein Sequenzdiagramm speziell für das Quiz und sprechen es mit Gruppe B ab. 3 Gerätesuche: (Inquiry) Antworten der Geräte Zeige GeräteListe an Selektiere Gerät Verbindungsrequest zum selektierten Gerät Gerät akzeptiert und öffnet die Verbindung Dienste-Anfrage Dienste-Angebot Abbildung 2: Einfaches Sequenzdiagramm für die Kommunikation zwischen Host und MT: Gerätesuche, Verbindung (ohne Authentifizierung), Dienstanfrage und Dienstangebot Mobiles Telefon: Client Host (PC): Server Dienste-Angebot Zeige Dienste Akzeptiere und öffne die Verbindung Hole Gebäudeplan Aus dem Speicher Sende Gebäudeplan Zeige Gebäudeplan Abbildung 3: Dienstselektion, Verbindung zum selektierten Dienst Quiz Telefondienst Verbindungsrequest mit dem selektierten Dienst (z.B. sende Gebäudeplan) Gebäudeplan Quiz Telefondienst Gebäudeplan Selektiere Dienst: Gebäudeplan 4 Festlegung der Klassen In Aufgabe 3 haben Sie bereits (mindestens) eine Client-Klasse geschrieben (Inquiry ist eine Client-Funktion). Entwerfen Sie die Server-Klassen für die in der Spezifikation angegebenen Funktionen bzw. Dienste. Beziehen Sie in Ihre Klassen die GUI mit ein. Überlegen Sie, ob Sie Threads benötigen (nebenläufig arbeitende Klassen). Zeichnen Sie ein umfassendes Klassendiagramm für den Host.