6.3 Ereignisbasierte Systeme Ereignis (event) : eine Ereignis-Quelle (event source, publisher) generiert Benachrichtigung (event notification), an der.

Slides:



Advertisements
Ähnliche Präsentationen
programmiert April-Juni 2003 von Knut Riechmann
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
DES-Simulator in JAVA, objektorientiert
Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
10.2 Wechselseitiger Ausschluss in Hardware
Ein Beispiel in Java.
Einführung in die Programmierung Zusammenfassung
Hauptseminar Modellüberprüfung Kathrin Ott
4 Verteilte Algorithmen
4.2 Gruppenkommunikation (group communication) Bedeutet:Sendeoperation bezieht sich auf mehrere Adressaten - die Mitglieder einer Prozeßgruppe (process.
Praktikum Systementwicklung
Kapitel 6.1 Nebenläufigkeit und wechselseitiger Ausschluss
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
Nebenläufige Programmierung
MVC.
AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe.
Wie überwacht man Objekte im "Alltag" ?. Indem man "Wanzen" an diese anbringt.
Ein Beispiel in Java.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
AWT – Detailbetrachtung Java 3D – Seminar im Wintersemester 2002/2003 Christian Schneider.
Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. Dirk Dörschlag Einführung in die Programmierung mit.
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
1DVG3 - Eventbehandlung Eventbehandlung. DVG3 - Eventbehandlung 2 Events Events sind externe Ereignisse, die parallel zum normalen Programmablauf auftreten.
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
© 2004 Pohlig - Taulien Swing Ereignissteuerung. © 2004 Pohlig - Taulien GK Informatik mit Java 2 Auf Button-Klick reagieren.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
Objektorientierte Modellierung
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Entwicklung verteilter eingebetteter Systeme - Einführung
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Punkt-zu-Punkt-Kommunikation Oswald Haan
Programmierung paralleler Algorithmen mit MPI
Implementierung Umsetzung OO Konzepte in JAVA
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
6.5 Lindas Tupelraum Interaktion von Prozessen über zentralen Umschlagplatz für alle zwischen Prozessen ausgetauschten Daten: Tupelraum (tuple space) (Carriero/Gelernter,
Objektorientiertes Konstruieren
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Thread Synchronisation in JAVA
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Letzte Chance!!! Exceptions Thread, Runnable Synchronized Wait, notify, notifyAll Thread States Semaphoren JCSP Swing JOMP Linearizability History Amdahl‘s.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Prof. Dr. Alois Schütte Advanced System Programming 1 Das concurrent Paket 1 Überblick 2 Lock 3 Condition 4 Queue 5 Executors.
7.2.4 Klassifikation mobilen Codes Nicht vergessen:  Sowohl das Fernkopieren als auch die Migration von Objekten setzt voraus, daß der Code entweder am.
4.4 Sperrsynchronisation
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
OO Analyse und Entwurf für Anwender XII. Entwurfsmuster Dr. Michael Löwe.
2 Datenabstraktion Geheimnisprinzip:
Vs Gruppenkommunikation (group communication) Bedeutet:Sendeoperation bezieht sich auf mehrere Adressaten - die Mitglieder einer Prozessgruppe.
5.1.2 Sequentielle Konsistenz
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Vs41 4 Verteilte Algorithmen. vs42 Prozesse als Systemkomponenten:  Spezifikation eines Prozesses ? (Vgl. Spezifikation eines ADT) syntaktisch:z.B. Ports.
GAME PROGRAMMING PATTERNS – FLYWEIGHT & OBSERVER Robert Nystrom Softwaretechnologie II Teil 2 Anike Schulz.
Neukonzeptionierung des SVNCheckers > Malte Legenhausen > DLR > Folie 1 Observer - Pattern Malte Legenhausen, Robert Werschnitzke Asea Brown.
GUI Programmierung in Java Branimir Djordjevic. GUI - Wichtige Begriffe -  Die Swing-Bibliothek in Java stellt zum Beispiel die folgenden Windows zur.
Java Programme nur ein bisschen objektorientiert.
Informatik Softwareentwicklung – 4.3 Entwurfsmuster
 Präsentation transkript:

6.3 Ereignisbasierte Systeme Ereignis (event) : eine Ereignis-Quelle (event source, publisher) generiert Benachrichtigung (event notification), an der i.a. mehrere Ereignis-Senken (event sinks, subscribers) interessiert sind. Z.B. Pixelpark-Aktie fällt unter 1,2! Druck steigt über 4,5! Für die Quelle ist es irrelevant, wer auf ein Ereignis wie reagiert. Die Senken sind an ganz bestimmten Ereignissen interessiert.

Verschiedenartige Ereignisse werden durch verschiedene Ereigniskanäle (event channels) repräsentiert, die auch gemäß den Ereignisnachrichten getypt sein können

Verschiedenartige Ereignisse werden durch verschiedene Ereigniskanäle (event channels) repräsentiert, die auch gemäß den Ereignisnachrichten getypt sein können QuelleSenken nachrichtenbasierter Ereigniskanal (hier im Beispiel mit 3 Senken) Aufrufbasierte Variante: asynchroner Prozeduraufruf!

Senke für Ereignis(se) kann gleichzeitig Quelle anderer Ereignis(se) sein. Ereignisbasiertes System (event-based system) = Prozeßnetz aus Ereignisquellen und -senken Prozeß erklärt sich dynamisch zur Senke für einen Ereigniskanal – abonniert das Ereignis (subscription) und kann das Abonnement später wieder kündigen (cancellation).

6.3.1 Ereignisorientierte Programmierung Typischer aufrufbasierter Ereigniskanal: interface Event { void signal(Notification n); // forks all subscribers, passing n void subscribe(Handler h); // subscribes event handler h void cancel(Handler h); // cancels subscription } interface Handler { void handle(Notification n); // handles n }

Ereignisquelle für ein Ereignis lowPressure :... lowPressure.signal(pressure);... Behandlung des Ereignisses:... Handler h = new Handler (){ void handle(Float press){..hier.. }};... lowPressure.subscribe(h);... lowPressure.cancel(h);...

6.3.2 Das Beobachter-Muster (observer pattern) ist ein objektorientiertes Entwurfsmuster (design pattern), das als sequentielle Variante der ereignisbasierten Interaktion betrachtet werden kann: Subject attach(Observer) detach(Observer) notify() Observer update() ConcreteSubject ConcreteObserver update() *

s:ConcreteSubject x:ConcreteObserver y:ConcreteObserver s.attach(this);

s:ConcreteSubject x:ConcreteObserver y:ConcreteObserver s.attach(this);

s:ConcreteSubject x:ConcreteObserver y:ConcreteObserver s.attach(this); notify(); o[1].update(); o[2].update();

s:ConcreteSubject x:ConcreteObserver y:ConcreteObserver s.attach(this); notify(); o[1].update(); o[2].update(); notify(); o[1].update(); o[2].update(); Analogie:Ereigniskanal: event.subscribe(handler) Beobachter-Muster: subject.attach(observer)

Unterstützung durch java.util : interface Observer { void update(Observable o, Object notification); } class Observable { public synchronized void addObserver(Observer o); public synchronized void delObserver(Observer o); public void notifyObservers(Object notification);..... }

6.3.3 Das Ereignis-Modell von Java orientiert sich am Beobachter-Muster: event listener = Beobachter (= Ereignissenke) event source = Beobachteter (= Ereignisquelle) event type + event source (= Ereigniskanal/typ) (event type in AWT per Namenskonvention) event object = Benachrichtigung (für GUI-Ereignisse: Paket java.awt.event u.a.)

Abonnieren eines Ereignisses: event type X + event source Ereigniskanal: event.subscribe(handler); Beobachter-Muster: subject.attach(observer); Java AWT: source.addXListener(anXListener); z.B. button.addActionListener( new ActionListener(){ public void actionPerformed (ActionEvent e){ Button b = e.getSource();...} } ); Ereignisquelle ist hier ein Button -Objekt: das Ereignis wird durch Klicken auf die entsprechende Taste der GUI ausgelöst.

6.4 Verteilte Algorithmen bewerkstelligen Problemlösung durch Kooperation kommunizierender Prozesse: alle Beteiligten kennen ihre Partner (peers) und deren Funktionsweise; Partner sind häufig gleichberechtigt, haben auch oft identischen Code, verwenden meist direkte Interprozeßkommunikation (ohne explizite Kanäle).

Problem: Sichere Nachrichtenübertragung von A nach B unter Verwendung zweier unsicherer Kanäle, Sender A Empfänger B auf denen sporadisch Nachrichten verlorengehen Das Alternating-Bit-Protokoll Lösungsidee: Nachrichten quittieren – neue Nachricht erst dann schicken, wenn Quittung eingetroffen; evtl. letzte Nachricht wiederholen.

SenderEmpfänger Nachricht Quittung

SenderEmpfänger Nachricht Quittung Nachricht Quittung (timeout) ? Ist letzte Nachricht angekommen, oder muß sie wiederholt werden ?

Nachrichten und Quittungen durchnumerieren – aber modulo 2 genügt ! Unsichere Kanäle mit folgender Spezifikation: interface Channel { void send(Data d, boolean b); // ersetzt (data,bit) durch (d,b) // - aber manchmal auch nicht Data data; boolean bit; // anfangs false } Kanal für Nachrichten: msg Kanal für Quittungen: ack

SenderEmpfängerboolean bit = false; do{do{ if(ack.bit == bit){ if(msg.bit != bit){ data = produce(); consume(msg.data); bit = !bit;} bit = !bit;} msg.send(data,bit); ack.send(null,bit); }while(true);}while(true);

6.4.2 Verteilter wechselseitiger Ausschluß Zentralisierte Lösungen: Semaphor durch Kanal simulieren (6.1.1)6.1.1 Boolesches Semaphor durch Prozeß simulieren, mit synchroner Kommunikation über 2 Kanäle p,v : while(true){ p.recv(); v.recv(); } Benutzung: p.send();... kritischer Abschnitt v.send();

Verteilte Lösung:unter den beteiligten Prozessen eine Marke kreisen lassen – wer sie besitzt, darf kritischen Abschnitt ausführen = Steuerungs-Prozeß, läßt die Marke kreisen, recv();... peer[i].send(); und interagiert lokal mit seinem Anwendungs- Prozeß (hier 0,1,2)

Jedes System aus Steuerungs- und Anwendungsprozeß hat lokale Sperre mit Operationen lock/unlock Initialisierung bei jedem System: lock(); Nummer eines jeden Systems: me Jeder Steuerungs-Prozeß verhält sich so: do{recv(); unlock(); lock(); peer[me 1].send(); }while(true);

6.4.3 Replizierte Datenhaltung = Datenobjekt wird in mehreren Kopien bei mehreren Prozessen geführt Motivation: schnelle und sichere Verfügbarkeit im Netz Problem:Konsistenzerhaltung bei Datenänderung Problemlösung: mit Rundsendung (broadcast) an alle Beteiligten (replicated data)

Postulierte Operationen: interface Broadcasting { void bsend(Msg msg); // sende msg an alle Beteiligten einschließlich // Absender (jeder erhält Kopie in privatem Puffer) Msg recv(); // entnimm Nachricht aus Puffer } Atomares Senden wird gefordert, d.h. unterschiedliche Empfangsreihenfolgen bei nebenläufigem Senden sind ausgeschlossen! Rechtfertigung:häufig entsprechende Hardware- Unterstützung, z.B. in Lokalnetzen

Voraussetzung: Nur ein Datenobjekt Data mit einer Operation op class Data extends Broadcast { public static void op(Arg arg){ bsend(arg); }... // Daten static void realop(Arg arg) {.....} // Steuerungs-Prozeß:... do{Arg arg = recv(); realop(arg);} while(true);... }