Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten)...

Preview:

Citation preview

Events und Streams

Ein „Virtueller Verstärker“

Stream

(fast

immer D

aten)

Event(fast nie Daten)

Stream

(fast imm

er Daten)

Main Loop, go home

main{RepeatMyEvent=CheckNextEvent()If(MyEvent=null)

{Abarbeiten}Else

{HandleEvent(myEvent)}Until(quit)

Klassische Abfragen

EventSource

GetStatus

HauptprogrammDas Hauptprogramm fragt zu bestimmten Zeiten den Status aller möglichen EventSources ab.

Events und Listeners

EventSource

Event

ListenerDie EventSource muss den Listener kennen !

Beispiel

Button

ActionEvent

ActionListeneraddActionlistener(ActionListener)MyListener=ActionListener

Falls was passiert:MyListener.actionPerformed()

actionPerformed(ActionEvent)

In unserem Fall

• FloatEvents

• BooleanEvents =? ActionEvents

• StringEvents =? SocketEvents

• IntegerEvents =? AdjustmentEvents

FloatControl

• FloatControl?

• FloatListener

FloatControl?

• ansprechendes Design

• intuitive Kontrollelemente

Aufrufende Klasse

FloatKreis

FloatListener

EventListener

FloatPanel

FloatControl

erst

ellt

erst

ellt

setValue

FloatLED

Event

Event

Event

Event

extends

Events

EventFloatListener

FloatPanel

Aufrufende Klasse

EventE

vent

Event

Event

package nano.awt;import java.util.*;

public interface FloatListener extends EventListener{public void FloatEventPerformed(double zahl);

}

FloatListener

Klasse FloatDesign

• Definiert Farben der Kontrollelemente wie z.B. Zeiger-und Kreisfarbe, sowie -grösse

• Über Konstruktoren verschiedene Varianten vordefiniert

• Über Methoden auf einzelne Einstellungen zugreifbar

• weiteres Vorgehen und Zukunft der Klasse noch nicht klar, u.a. auch wegen Designern

Vorteile

• Möglichkeit der individuellen Gestaltung der Kontrollelemente (Farben)

• nur eine einmalige Definition nötig

• wenn gewünscht für alle Elemente gültig

Technische Spezifikationenvon TCP / IP

Was ist ein „Socket“ ?

• Engl. „Stecker“, ist aber eher ein Kabel.Kommt von den Inet-Ports.

• Vollständige Adressierung besteht ausIP-Nummer und Port-Nummer

• Eine bidirektionale Verbindung zwischen zwei Internet-Ports.

Verbindungsaufbau

• Einer ist Server (Derjenige der auf die Verbindung gewartet hat)

• Einer ist Client (Derjenige der die Verbindung Initiiert hat)

• Handshaking

• Pakete werden ausgetauscht (vgl. UDP)

Virtuelle Kabel

Socket als Kabel

• LabView als schlechtes Vorbild

Wir nehmen Streams anstelle von Zahlen

Jede Steckdose erhält den Befehl plug(DataLine)

Sie hat eine Instanzvariable MyDestination

Abstrakte Klasse „DataLine“ ?

• Zwei Implementierungen:– TCP / IP Socket (InetAddr, Port, R/W)– Pipe (Pointer auf Pufferbereich)– (+) Schnellere Performance

• Eine einzige Implementierung:– TCP / IP Socket (InetAddr, Port, R/W)– (+) Universeller, „The Net is the Computer“

Stecker-Metapher

• Signal kommt immer aus einer Dose (weiblich)

• Anzeigegeräte (Oszi, Fluke, etc.) haben nur männliche Stecker

• Damit ist jeder Port männlich oder weiblich

Signale in „Sockets“

• Elektronisches Signal ist eine FunktionR R t U(t)

• Das Signal soll sich selbst beschreiben.

• Beschreibung im Ortsraum

– Langsame Signale, (Tiefpass)

• Beschreibung im Fourier-Raum

– Schnelle Signale, (Hochpass)

II

Doppelstecker

Selbstbeschreibendes Signal

• TCP/IP Päckchen von konstanter Grösse(Derzeit 256Byte)

• In JAVA: Werte von –128 bis +127 !!• Erstes Byte=-128 bedeutet

Achtung: Beschreibung• Zweites Byte gibt an, wieviele Pakete

Beschreibung sind.

Wie beschreibt sich das Signal

• XML-Text oder was????

• Beschreibung soll beliebig offen sein.

Dokumentation undKooperation miteinem Classpath

JAVADOC

• Auf Nanoworld2 unterD:\development\jdk1.3\docs\tooldocs\win32\javadoc.html (Muss noch veröffentlicht werden)

• Pakete müssen einzeln angegeben werden

• Bilder und gewisse Tags sind möglich.

Struktur unseres Classpath

• nano.paketname.*

• Paketname sollte dem von java.lang entsprechen.– Bsp. nano.awt.*;

Wer darf in den Classpath ?

• Fertige Klassen (Das bedeutet: Jede Änderung muss mit einer Versionsänderung und dem zugehörigen Datum verbunden sein)

• Vollständig dokumentiert in Javadoc.

• Alle modifiers sind durchdacht.

• Alle Setter und Getter sind vorhanden.

Datenbanken

Client Client

ServerController

Experiment

Was für Klassen gibt es schon?

Beachte die strikte Trennung vonFunktionalität und GUI

Steuerung erfolgt über Kommandos

GUI generiert Kommandos(vgl. TCL/TK unter UNIX)

Vorhandene Pakete

• Package nano.awt(Alles was mit GUI zu tun hat)

• Package nano.net(Alles was mit Netzwerk und Streams zu tun hat)

• Package nano.compute(Alles was………..weiss auch noch nicht)

Das Paket nano.compute

Parser-Problem

• Wir brauchen eine Zuordnung String-Methode

• Realisiert analog awt.event(Event-Methode)

Simulator API

– AddCommand(String, CommandExecutor)– AddInt– AddDouble– AddString– AddBoolean– SetBoolean(String, boolean), sb(), etc.

Sprachdefinition Basiswortschatz

• Definiert in der Klasse nano.compute.Simulator:– Set

• Parameter: name, valueBeispiel: command=set, name=speed, value=131.5

– Get• Parameter: name

– Stop• Parameter: keine

– Start• Parameter: keine

Nano.net

EventClientLocal Port

Remote IP,Port

StreamClientLocal Port

Remote IP,Port

EventServerLocal Port

StreamServerLocal Port

EventSocketListener

EventSocketListener

put

put

plug

EventClient

Pool (De- & Multiplexer)

EventClient

StreamClient

EventClient

StreamClient

EventClient

StreamClient

EventSocket-Listener

EventClient

StreamServer

MySQL

www

www

www

www

www

www

www

www

Pool_UI

• Pool_UI?

• Eigenarten der Tabellen in Java

Klasse Pool

• Verwaltung und Bereitstellung von Benutzerdaten, wie:– Anzahl der User im Pool– Name, IP-Adresse und Portnummer– User connected?– addUser()

Pool_UI

• Graphische Benutzeroberfläche der Klasse Pool

Pool_UI Pool

TableModel

JTable

setUser

Tabelle

erst

ellt

Frägt ab

Tabellen

•Model - Viewer Konzept

Früher

DefaultTableModelDaten JTable

Heute

TableModel

Model Viewer

Daten

Zuständigkeit

• TableModel:

Datenerstellung, -aufbereitung, -berechnung

• JTable:

Darstellung der Daten

Vorteile des Model-Viewer Konzeptes

• skalierbar

• Einfachere Handhabung von dynamischen und editierbaren Tabellen

• Möglichkeit von verschiedenen Viewern

• Geschwindigkeit

How To

AbstractTableModel

public abstract class AbstractTableModel extends Objects implements TableModel

• stellt default Implementierungen für die meisten Methoden des TableModel zur Verfügung

• kümmert sich um die Listener und Events

Erstellen einer Tabelle mithilfe des AbstractTableModels

Implementation von folgenden Methoden notwendig:

• public int getRowCount();

• public int getColumnCount();

• public Object getValueAt(int row, int column);

Weitere nützliche Methoden

• public String getColumnName(int col)

• public String getColumnCount() / getRowCount

• public Class getColumnClass(int col)

• public boolean isCellEditable(int row, int col)

Erstellen einer 10*10 - Tabelle

TableModel beispielModel = new AbstractTableModel(){

public int getRowCount() {return 10;}

public int getColumnCount() {return 10;}

public Object getValueAt(int row, int column) {return new Integer(row*col);}

}

JTable table = new JTable(beispielModel);

JScrollPane scrollpane = new JScrollPane(table);

TableCellRenderer

• Renderer: Zuständig für die Darstellung der Zellen

• JTable besitzt Standard-Renderer

• Möglichkeit der Individuellen Darstellung von Zellen

• Nachteil: recht grosser Aufwand für Effizienz nötig

Verschieben der Kolonnen

• Jede Kolonne eigene ID (default: Name der Kolonne)

• Vorteile: Verschieben der Kolonnen ohne sich um die Änderung der Reihenfolge kümmern zu müssen

-> JTable rechnet intern mit ID und stellt es richtig dar

Zusammenarbeit mit demSmartSPM Projekt

Hardware-Programmierung

Stand der Dinge

HW.DLL

GUI.DLL

MIDDLE.DLLCOMM.DLL

Mainframe

TCP/IP

Measuring with Super-DAQTM (PCI or USB)

N-Channel Ultrafast AD4096 bit, 1024 GHz

M-Channel Ultrafast DA4096 bit, 1024 GHz

n-Channel Ultraslow Human Input m-Channel Ultraslow Human Output

TerraMemory

Schichtmodell SuperDAQ

HW.DLL

BF1.DLL BF2.DLL BF3.DLL BF4.DLL BF5.DLL

ADA

Funktionalitäts-Layer

Hardware-Layer

Hardware(1 Layer)

Verarbeitungs-Layer

UI-Layer JAVA - TCL/TK – TCP/IP - HTTP

JAVA C Fortran

Virtueller SuperDAQ

DSP Code

ADA ADAADA

DSP Code DSP Code

HW.DLL

BF1.DLL

HW.DLL HW.DLL

BF2.DLL BF3.DLL BF4.DLL BF5.DLL

Virtual SuperDAQ

JAVA - TCL/TK – TCP/IP - HTTP

JAVA C Fortran

Funktionalitäts-Layer

Hardware-Layer

Hardware(2 Layers)

Verarbeitungs-Layer

UI-Layer

Recommended