[Playlisten] [Impressum und Datenschutzerklärung]

08.6 Observer-Pattern, Publish and Subscribe, Events


CC-BY-NC-SA 3.0

Tempo:

Anklickbares Transkript:

einletztes Entwurfsmuster was ich aber gar nicht wirklich als EntwurfsmusterRahmen präsentieren will sondern als Feature von dott Net und anderen modernen Sprachenan das Entwurfsmusternennt sich Observerandere Leute nennen esdich mit weh Mann und Frau Ob Serverandere Leute nennen es Publisher zum Swypeund noch andere Leute sagen eigentlich ist das nicht ganz dasselbe aberda wir gerade sind ist das dasselbeObserver dasselbe Beistrich undsoschreibeigentlich ein Pattern aber sie sehen gleich das ist eingebautan je wichtiger solche Pendants werden desto eher sind sie dann in Sprachenund entlassene benötigen eingebaut hier dasModel-View-Controllerist üblicherweise in die Klassen benötigen eingebaute Südzucker Spezial Klassenbibliothekendie nur das machenRahmender hier dieses Pattern Observer oder bayerischen Substrat istin die meisten aktuellen Programmierspracheneingebautmuss also gar nicht anfangen mit Klassen selbst was zu strickenund richte sofortfertig aus der Doseahnenwenn man es selber bauen würde bräuchte man folgendesman bräuchte zwei Klassen glücklicherweise meine zwei Klassen nichtachtundneunzigeinen Observerder Beobachterund ein Observer Wirbelwilldas beobachtbaresich sehr philosophisch anderswoBenutzervon City eine beobachtbare Größe in der ?? zum Beispielwennes geht darum Ereignisse mit zufrieden geben bei demendlichen Automaten Leerzeichen Ereignis in dieser Konstellation geht's um Ereignisse mit zu Kriegen der Beobachtermöchte was mit kriegen was mit dembeobachtbarenpassiert das beobachtbaresoll Bescheid sagen wenn irgendwas passiert Wasser läuft Überstromesausjemand hat irgendwohin geklicktdass wenn alles Ereignisse des Observersoll Ereignisse mitteilen an den Observerdazu braucht manmindestenszweiAktionendie erste Aktion ist das der Observersich anmeldet oder ihr angemeldet wird typischerweisewird er von jemand anderem angemeldetdas ist nicht zu mich so wie beimZeitschriftenabowas sie selbst anmelden typischerweisewird der Observer von jemand anderem beim Serverangemeldetanmelden schreibt man draufmeldenamanmeldenist nichts anderes als Abonnierenbei dernur dass sie wie gesagt im allgemeinen nicht selbst abonnieren Observer nicht selbst abonniert sonderndas Abo von jemand anderemgeschenkt bekommt wenn sie wollenHahnund der englische Begriff wäre ebenso beschreibtdas Abonnement und die Subskription des sub Sectiondreidas ist Leerschrittderder was erfahren will von den Ereignissen muss angemeldetsein an der Stelle die die Ereignisse produziertangemeldet sein wann Observer wird damit es unser Wirbel weiß bin ich bis heute zurSühne Adressenlistezum Surfen keiner nachgucken auch den Leuten sie Bescheid sagen was passiert ??Telefonliste für den Notfallbin muss ich alle anrufenwenn irgendwaskaputt gegangen istandieses anmelden sorgt dafürdass man auf der Liste stehtmüssenund so auchdannaber jetzt muss natürlich auch das Bescheid sagen ?? stattfindenalle die auf der Liste stehen werden angerufenwenn denn was passiertdas hier wäre das Bescheid sagennur Bescheid ?? das wären englischen dann habe ichpubliziereneigentlichdie Analogie zur Zeitungan der Observer ist der Zeitungsleserserverist die Zeitungder Zeitungsleserabonniertoder kriecht ihr ein Abo geschenkt von der Zeitung das ist das obereund die Zeitungsollte dann der Verlagder Verlag schickt dann Zeitungen raus das ist ein super beschleichesagen deshalb Publisher zu zweit eigentlich andersrum mich selbst war dem Publisher irgendwiesagen alle Leute per Wischeinsatz bei Dasrisiko mit siches wird erst veröffentlicht und dann wird abonniert das Haut eines Jugendlichen ist ein Kassen selbst bleiben Beistrichdas kann man sobauen mit zwei Klassenmit den richtigen Methoden?? die Klasse rechts jedes Observer gebrauchen Methode die dazu dient und sich anzumeldendass links die Klasse unserer Wochen Methodedie vom Webserver aufgerufenwerden kannum die Zeitung auszulieferndas kann man so bauen muss man aber gar nicht mehr so bauenin den moderneren Sprachen insbesondere in Java sie Schaden ist das Teilder Sprache selbst und nennt sich dannEreigniseventswas hier stattfindet ist das Eventhandlingdes HandBeistrich das handhaben von Quartieren das hantieren mit Ereignissendas es eingebaut in die Sprache das müssen Sie nicht zu Fuß bauen das kriegen sie gratisinfürLückentextsieben schreibe ich mal die beiden Arten aufin den dasSharp vorkommtindie eine Art Hammer schon relativ früh gesehendieser Buttonsoll bittedie Methode Button Klickaufrufenwenn er geklickt wird das ist das Ereignis Klickder?? inder BarObserverist alsowenn Sie wollen die Fensterklasseunter Sozialwirbelnist der Batzenund diese eineLeine zu dieser eine kleine Anmerkung hier Klick ist gleich Button Klick das ist die Anmeldung das ist das Abonnementdas Fenster sagtdie Fensterklassesagtdem BatzenFensterklasse sagt diesem Buttonich abonniere das Ereignisbitte benachrichtigenmich bei den Klick eigens das istdieser Teil hiernicht wieder zu erkennen ?? ich weiß aber dass es trotzdem dieser Teil ein ein Ereignis zu abonnieren?? sich zu registrieren ein bestimmtes Icon mit zu kriegendass es eine Art ?? gesehendann das Abo kannso aussehendass es in diesem Examen habenKlickist gleichcircaKlick ist gleich Anführungszeichenhier der Name eine Methode und so weiter das ist ein Aboaber gut verstecktdas geht natürlich auchzu Fußstatt dass da reinzuschreibendas hier reinzuschreibenmankann es da auch rausnehmen sollte das so machen ja ich kann es hier auch rausnehmenund gehen meineKlasse hier rein und sage den Constraktorwenn du mit deinem ganzenKrempel gefertigt bist mache bitte folgendesnehme den Button Nummer einsund von dem das Klickereignisunddannabonniere das ?? Ereignisfür?? abonniere mir mir selbst gerne eigenes und zwar hier mit der Button einsMethode das ist der selbe Effekthier sagen Sie dem Batzenfür das click Ereignisbitte ein Abound das liefere bitte aus indem du diese Methode aufdas er dieselbe Bedeutungwiediese Geschichte hierist dann zu Fuß in den Programmcode reingeschriebenAusrufezeichen das ist wirklich ?? Gesetz ihren Weg Punktwenn ich jetzt klicke muss trotzdemdas Programm S jenem Zeitpunkt landenobwohl hier nicht mehrund ?? Trennstrichgleichsam zu viel drin stehtmehr defektes ?? ausführlich erzählt im Endeffekt passiert folgendesder Compiler nimmtdiese Dateiund baut echten Programmcoderausder dann wirklich so aussiehtdas jetzt machePanzer klanglich tatsächlich da ?? es wird weiterhindieses Ereignisabgefangenwird habe ich das andere Wege zu Fuß eingetragenvon den Button das Klickereignisbitte abonnierendie Funktiondas ist hinter den Kulissen tatsächlichder Aufruf einer Funktion zum registrierendieser Teil hiersagt eigentlich wirklichich möchte dieseMethode hier registrierendie Klasse eigentlich registrieren und von der diese Methode registrieren für dieses Ereignisbeim Buttonsie dann in den Programmiersprachenwie Sie sehen deutlich anders aus als meine Klingel auf Maltaist aber dasselbe Konzeptmüsse sich nicht mehr um irgendwelche Klassen Observanzgekümmertsie parodieren Ereignisse und den sie scharfist das Abonnieren von Ereignissen ebendiesesPlus gleich das sollte nach denmassiven rein sie können überhauptdas vorführenineiner Zeitung die nur ein Abonnenten hat ein bisschenblödsinnigwarensie können auch sagen naja wird vom Verkäufer andere Methodennicht ?? Lückentexthat das andere weiter runterdanneine weitere Methodeund die Nachtzum Beispielbei Gänsefüßchen aufMessageboxSport Punkt Schauzeigtzusowasund jetzt sage ich Punkt das möchte ich aber dafür abonnierendas es erlaubt ?? dürfenmehrere Abonnenten haben dieses Ticket setztenähm sie dürfen mehrere Abonnenten haben Punkt alle die Methoden die dahinter stehen werden aufgerufenwenn dieses Ereigniseintritthier mal den Weg Punktwoich landePunkt also Button eins Klick ist aufgerufen wordenMissbräuche weiteroder ist der Dialog der Dialog steht da auch beide sind aufgerufenwordenund sie können mehrereAbonnenten habenregistrierendass diese Methodeaufgerufen werden soll Beistrich und diese Methode aufgerufen werden soll Beistrich wie kann das Abo auch wieder kündigenwas es mit dieser Plus gleich Schreibweise ganz niedlich wird es aber wieder kündigen wolleneins Punkt?? andersverstehen wird einfach minus gleich das ist die Abo Kündigungan das heißt wenn ich das jetzt ausführesollte keine Dialogbox mehr kommen?? abonniertuns das aber wieder abgestelltes sollte keine ??eine Dialogboxsoweit okaydannso weit ist das eingebaut??in Java sieht's nicht ganz hübsch aus in der was ist mit den Plus gleich sammeln kann so was von wegen Erdeventhändlerist bisschen länger mit einer echtenBesitz ?? Berechnungsmethodenauf Busse mit ein Methodenaufrufder der Methodenaufrufaussieht und nicht hier wie so ein komischesWissen komische RechenoperationMicrosoft oder sogar telefonierenplus gleich zu haben stattVersicherers schreiben muss von wegen Punktat click EventhändlerKlammer aufsoweit das wissen handlicheramdas insofern eingebaut ich muss mich nicht mehrich muss mich nicht mehr einzelne Klassen hier kümmerndann Chris geschenkt??spannend ist nun wie man das selbsthinkriegtwie krieg ich denn mal was eigenesBau ein Maschinchenund dieses MaschinchensollBescheid sagen könnender Button ist der vorgefertigteder kann ein Schein bescheid sagen wenn er geklickt wird und wie kann meine eigene Klasse einer erneuten Schweizerhabenüberlegt ich baue eine Klasse die nämlichMaschineund dieser Bescheid sagen können wenn's derzu warm wird das passt zur JahreszeitNummer achtKlasse schiendir sonst was eingebaut sein ich konzentriere mich auf dem Teil der jetzt für diese Ereignisseimmenswichtig istnurder wesentliche Teilistjetzt wirklich zu sagen Punkt diese Klassekann mit einer so bestimmten Sorte wären auch kommenden bestimmten Sorte Ereignisse umgehenjemand anderes kann die abonnierenund diese Klasse kann die Ereignisse aussendendas heißt diese Klasse ist dann in diesem Spielein Ob Server willetwas das Abos entgegennimmtund Ereignisse an andere Leute aussenden kanndass wir dann Ob Server willmandas schreibt man in sie sharp dann sozusagenokay es gibt ein öffentlichesEreignisdesschwachsinnig einen öffentliches Ereigniswarenundzweitensich den Baueninbei den ihr Eventmir die Entwicklersoll die üblichen EventachsenmanLeertastewas das bedeuten sollund er soll heißenObertitelsüberhitztsomit der Zeile sage ich in Fischartdiese Klasse kannAbos annehmenfür ein Ereignis das heißt Ober ?? bietet überhitztund dann die ?? und die Leute dies abonniert haben informieröffentlich sie könne Sana Protect machen das nurKindklassenwerdendas empfangen können das Verzeichniskomischöffentlich wäre sinnvollneues Schlüsselwort hier eventuellbesessen von der neuen Art das ganze hierallen im Hintergrundbaut der Compilerdas hier zusammenaber das Ganze wird nett verpackt und das ist nicht mehr so deutlich Seewasser passierthabenokay das Ereignis das verarbeitet wird heiße Ober bietet und nicht Klickdick oderUnsectionChallengeKomma alles hatten an Ereignissen das eigens hier bei mir heißt jetzt Ober ?? bietetund hier sage ichvon welcher Formdie Methoden sein sollen die aufgerufen werden Event hinter die Behandlungsfunktionenfür die EreignisseFunktionen die nachherdafür zuständig sind die eines ZifferÄrztendie soll nämlich von der üblichen Form seinihrsie kriegen ein allgemeinesEventtalksein Argument in dem ich noch mitteilen kann was denn gleich besonderes passiert ist wie ist denn überhitztauf drei hundert Grad oderhundert fünfzig Grad warum zu welcher Uhrzeitdas sagtvon welcher Art die Methoden sind die dann aufgerufenwerdenKomma dass hier oben die Methode aufgerufen wirddass sie zum Beispielder erwartetwer das eigens ausgelöst hatund noch einige Detailswenn Tags mit Argumentsüber dieses Ereignisnunhier sage ich meine Methode mindestenssoll wo bin ich hier meine Methodedie aufgerufen werden sollen ?? mit und auf Gruppen zu erwarten sein Pentaxokayund jetztsehensie brauchenich bau jetzt eine Methode ein mit der ich wirklich auch die Maschine überhitzen kann??ablegt ?? DeutschSeptember RogerTurner der gemischte double-Zahlmit der Temperaturder Formhabenund nun guck ich tatsächlichokay ist die Temperatur zu hoch natürlichen Wahrnehmung des tausend mal komplizierteran der Sachen eingebaut ?? jetzt auf den Kern reduziert ?? ist denn die Temperatur zu hochPunkt so ZwischenkochenCelsius werdenin der ?? kochen und wenn wir schon am Kochen sinddannpublizierenwir das dann schreiben Sie hier daspublizierengesehen aberwas viele habenverlangt jetzt aber schon sofort das wer ist schuldwir selbst istund hier muss ich ihm jetzt einige Details geben ich bin jetzt ?? schreibt hier nur Weinbau ein neuesObjekt von der Sorte?? müsste man vielleicht wissen Sie das ?? sage das es Literatur?? aus folgendem Grundund so weiterdas ist im Ding das beobachtetwirdoder sich im Knopf der geklickt wird irgendwo muss daher stehen jetzt bin ich geklickt worden jetzt ein Bescheid sieht das ausam es gibt eine Tücke dabeiwenn sich keiner registriert hatsich keiner registriert hatich das Seminarrezeptenrauswarenalso aus formalen Gründen sollte man die noch dazu schreibensie das dann auskeiner wenn sich einer registrierter zu sagen wenn sich der tatsächlich analysierthat dannfür das außen dass wir dann auch tatsächlich für alle ausgeführtdie sich registriert habenProblem ist nur wenn sich keiner registriert hattensteigt eine Stelle ausdas wäre das publizierendie Klasse sagtnach außen hin wo man kann was von mir abonnieren das Ober bietet Ereignisund hier innen drinan die Klasse sagen dass dasEreignis ausgesendetwerden soll wenn denn wirklich einer abonniert istdas dann ausder Schüssel natürlich irgendwo dieses ?? noch verwendet hat er bisher keinen Abomüsste jetzt auch noch in Aboeinrichtenum dazu zu kriegen dass da was passiertsich um den Anfang wieder reinin das was sie beim Klick aufgerufen wirdkeinRahmenichbaue eine neue Maschineundmelde mich jetzt an?? anmeldenhat eben schon gezeigtplus gleichder Name der Installer Referenz auf die Instanzder Name des Ereignisses plus gleichdas ist man ihrein Abo machteine Referenzauf dieauf das Objekt Punkt jetzt der Name des Ereignisses Orange bietetdas abonniere ich Sie das dann alssag mir Bescheid wenn das Oberhirten EreignisauftrittBeistrich sag mir Bescheid sondern sagdem Bescheid was ich in der Schreibe ruft die Methode auf der hinter geschrieben wird ?? muss jetzt Methode stehendie aufgerufen werden soll wenn das passiert Nummer zurück zu dem der obengesinnte Button eins Klickist diese Methodedahinter stehtwas aufgerufen werden soll das ist eigentlich dieses publizierenan das Ereignis sorgt dafür das diverse Methoden aufgerufenwerden?? hier so in Anführungszeichen addiert worden Semikolon erstmals ?? Methodeeine Kunst dieweiterhin Nummerachtund eine Methode hierauch weiterhin Nummer achtdie aufgerufen werden sollen nennen wir sieDeutschKommaWorthörenund dann?? die haben wer war schuldSenderPunkt sie will wissenwas die Details warenund dannsage ich jetzt einfachsichtbares hat in der Methodefür dasdie Klingel so muss ich noch eintragenhier sage ich einfach MessageboxPunkt soBescheid sagen zualsdas Wetterdas tragische oben eindieMaschine hat dieses Oberwidders Ereigniskann Abos entgegennehmendas macht sich hiergerichtlich das Abo einen schicklichen Brief irgendwohin oder klicke im Internet auf irgend eine Bestellseitesondern sageReferenz auf die auf dieses ObjektnamePunkt Name des Ereignissesplus gleichdas hier ist es Abonnierenund man abonniertnicht in dem man seineAdresse bekannt gibt und seine Bankverbindung bekannt gibt und man sagt welche Methode denn aufgerufen werden sollwenn das Ereignis eintrittund hier sage ich jetzt okay diese Methode soll aufgerufen werdendanndie einfach nur an Dialogbox bringt unser zuwerdenKomma dass es ?? Aktion sagen sehen ich könnte mal sagen okay stelle mal die TemperaturaufneunundfünfzigGradpassierenund ich stelle malauffünfzig Graddann sollte was passierenambeim ersten Mal hoffentlich nichtsund beim zweiten Mal sollten ?? Dialogs inEinzelschrittensojetztdie Zeile ausführennichts passiert?? die Zeile ausführendass der Dialogder ?? die Maschine hat mir Bescheid gesagtdass es hierzu waramnormalen Kleinteilenerzählen von vorn angefangenals ich und noch mal die Maschine ein was macht die Maschineund exaktdas macht die Maschine der Maschine sag ich du hast eine Eventdass es öffentlichdiese Wenzel heißen oberbietetLeute können es abonnierenund wenn dies abonniert habenbis du die Maschine in der Lage den Bescheid zu sagen wenn das eigenes eintrittbei demganzen Fenster kam ich gehe Nummerzeichenhinunter sehenSie den Button haben und Ereignisseseiner??zu ein Button kann zum Beispiel feststellen ob jemand was rein zieht draus zieht und was drauf losgelassenklickenals mögliche meldenähmtoll aber initialisiert es keiner meldentausend andere Sachenanalles Ereignis in den wirklichirgendwo bei Microsoftim Sourcecode aufgelistetsein müssen in dieser FormX tausend Ereignisse die alle dann soin dieser Form und einander aufgelistet sein müssen für den Anfang Knopfhierbei ein einziges Ereignisdiese Klasse Maschine kann sagen ob sie über letztes oder nichthiermit sagen Siewie die Funktionenaussehensollendie die Ereignisse behandeln den beim Auslösen des Ereignisses werden ihr FunktionenMethodenaufgerufensollen von dieser Form seinEventtagserwartenteilweise warten was anders ist ?? oben schon gesehenspezielleresBild zum Beispiel erwartet lautet die Pentax Wasser Komma das sein magDetail anguckenamdassagt welche Art von Funktion aufgerufen wird durch das Ereignisum das Ereignis auszulösenrufen Sie einfachdas ja auf als Robson Methode wärehinter den Kulissen wird an dieser Stelle dannalles aufgerufen was abonniert ist mit Biss und Möwentagsdieser Aufruf wird für alles ausgeführt was ab abonniert worden ist ich nur für ein Dingder leider diese blödeGeschichte im ?? überhaupt einerabonniert hat?? geschickter lösen können aber so ist es nun??Nummer zurück zu den Menschen der mir dazu dem Ding das abonnierte ich den Menschendarumokayich baue eine Maschine und hier abonnieren ?? Zoo bildet Ereignis abonniere ich ich sage okay wenn das eintritt bitte dieMethode Report aufrufendie danngesagt zu heiß