[Playlisten] [Impressum und Datenschutzerklärung]

08.4 Das State-Pattern


CC-BY-NC-SA 3.0

Tempo:

Anklickbares Transkript:

dieArchitekten haben sich irgendwann überlegtman Stadtplanungin groben Zügen macht die Straßen laufen sollte an sich überlegt in Haus im Prinzip aussieht wenn Torbogen im Prinzip gebaut werden mussEntwurfsmustergleiches als Entwurfsmustergleiche Gedanke Entwurfsmuster nicht gleich Adler Gedanken eines Busmusternin der Informatikinsbesondere bei der objektorientierten Programmierung ich hatte ihn vorgeführtSingelterndie Idee wie ich eine Klasse bauen kann von der es nur ein einziger eine einzige Instanz gibtganz sichersowie die gebaut war sogar maximal ein Instanz vielleicht sogar gar keine Instanz wenn nämlich niemandnach der Instanz fragtsogar gar keine Instanz das es so das billigste Pattern kommt jetzt nicht so häufig vor es kommt mit einer einzigen Klasse aushabe ich inKomposit vorgeführtoder Kompositerhaltenein zusammengesetztesDing soll sich verhaltenwie ein einzelteilüblichesBeispiel war in derGrafikprogrammierungein Rechteck eine Ellipse Text eine Freihandlinieall das sind die Einzelteileein zusammengesetztesDing für eine Gruppierung davon auch die Gruppierung soll ich verschieben können soll die Farbe einstellen können sonst drehen könnenan das wird gelöst in dem man eine gemeinsame Mutterklasse hatund davon dann sowohl die Einzelteilewie auch diesen Gruppierungendiese Zusammensetzungableitetdanndiese Wochen Praktikum eine andere Anwendung davon drang ich meines Leerzeichen Programmen zum Beispiel benutzen kann sondern wie man das benutzen kann um Dateien und Ordnerabzuspeichernabzubildenin Objektenwas ich Ihnen heute zeigen will sie noch zwei weitere einmal derStagedas Pattern des Entwurfsmusternamens Statefür endliche Automatenundwas ziemlich abgedrehtes Model-View-Controllerdas aber ziemlich vielen Stellen vorkommt erstmals Datezur Erinnerung noch mal um Lückentextder endliche Automatich habeein Maschinchendasverschiedene Zustände haben kannKringe zu jetzt gemalt in der theoretischen Informatik immer man es mit klingelnund zwischen diesen Zuständen gibt es Übergängeich kann von einemzum anderen kommenan sowas seine Maschine ist aus die Maschine läuft auf vollen Touren die Maschine läuftauf halben Touren die Maschine ist kaputtund so weiteroder eine Ampeldas Wasser gleich vorführen werdedie Ampel ist rot die Ampel istrot gelb gelb-rot wir um auch immer die Ampel istgrün die Ampel ist gelb und dann geht'sim Kreis rum das ist natürlich ein total billigerZustandsautomatenfür ?? ?? Komma vorinObjektenwenn sie das mit Objekten verstanden haben könnte sowas dann auch locker mit Objekten bilden es gibt also Zuständeund zwischen den Zuständen gibt es ÜbergängezwischenZustände werden gestelltÜbergänge sind inzwischen zu diese Übergänge werden genommen wenn bestimmte Ereignisse eintretenjemand schaltet was anein Bauteil fällt ausjemand rückt auf diesen oder jenen Knopfwären solche eigne sicher bei der Ampel ist auch billiges vergeht einfachsoundsoviel Vergehens und so viel Sekundenzunächstdas mal sofortjetztin einem Text geschrieben?? eine neue Klasseauf jeden Fall brauche ich eine Klasse für den Zustand dass wir dann gleich die Nummer vier werdeneine Klasse dichter sinnvollerweise stand Mennestets Ordnerstand soll eine Oberklassefür alle diese Zustände seinhoffe das das einleuchtend ist das schreit einfach danach wenn ich so ein Diagramm auf Maledass diese Kringel auch tatsächlich nach ?? ObjekteInstanzen von irgendeiner Klasse werdenan alle diese Objekte verhalten sich jaZustände soll ich sagen alle diese Zustände verhalten sich ähnlichhaben ähnliche Eigenschaften die sollten von einer gemeinsamen Klasse abgeleitet werdenstandnämlich die sinnvollerweiseinetwa ?? sofort Kommawelche zuständig nach ?? haben wir für die Ampel für die Ampel möchte ich nachhereinenZustand rot abgeleitet von standich möchte mich möchtemanverteilengenauso natürlich diedrei anderenRealitätgenanntsondernder nächste wärees schön auf Englisch bleiben ?? Septembergelb-rot rotgelbEnde der Woche noch grüngrünbraun Komma und wir brauchen nochGeldwas Englisch lustigerweise Michelora ist an der Stelle Beistrich warumdas wäre mein vier Zustände mein Gedanke ist es gibteineneinen eine Ideevom Zustand was ist zu ein Kringel in diesem Diagrammund von dem Erbe ich einfach die speziellendiese vierdie die Ampel ausmachenam wenn Sie das so sehenwürden sich hierbeistehtsofort was ergänzenState sollte in der Tat abstrakt sein die vier Zuständesollten konkret sein?? steht als solchersollte er steckt erstrecktKomma betont seines gibt nicht wirklich eins der ?? den ich bauen kanndie echten Kringel ich nachher baue sindrotrot gelb grünund gelb das sind die Kringel die ich bauen kann die gibt es wirklich aber es gibt daher nicht ein Kringe der abstraktein Zustand ist so wie's eben keinSäugetier gibt oder kein allgemeines Auto gibt sondern immer nur was konkretesdeshalb mache ich das hier sinnvollerweiseApps wirddamit dieser nicht ganz zu Ende das ist das was man direkt aus dem Schaubild ablesen würde auch einen ein Zustand als Mutterklasse und von dem Erben alleechten Zustände ?? ich brauch noch irgend ein Ding was sich merkt was denn der aktuelle Zustand ist irgendwasanderes daneben parallel dazuder heißt in dem Spiel gernestellt Kontextder Kontexteines Tabsnur debattieren ob das so gute Idee war den zu so die Klasse so zu benennen ??die übliche Bezeichnung ist diese hier der Stetkontextist quasidie Bedienenseinheitvon demZustandsautomatenanden kann ich sagen welche Ereignisseaufgetretensind und der schaltet dann weiter und merkt sich in welchem Zustand wir gerade sindalsodas ist ja ?? die Bedienoberflächedass es sogar mehr als die Bedienoberflächedas wird nachher der echteAutomatder endliche Automatdiese Klassen hier für die Zustände sind einfach dann nur noch Hilfsklassendie innen drin verwendet werdenum zu beschreiben wie dieserendliche Automat funktioniertinsofern hätte man den eigentlichAutomatenkönnen stattstellt Kontext aber der Kontext ist die üblicheBezeichnungdann das erste was er sich merken muss ist in welchem Zustand für den Grade sindähmimmer der einfache Stage den aktuellen ZustandUnternehmer einfach einen von den stetsein neuer Zustandbedroht ansowasalso derzu der der Automatdas Billardautomatenbetrachte diese Klasse stellt Kontextder automatischenweißin welchem Zustand er gerade ist der Verbrauch eine Extravariablehiermit sagen okay wir starten mit rotund dann muss ich dem Automatennoch sagen könnendas es jetzt weitergehen soll des Ereignisseeingetretensindmöchte hier sowas haben wie eineöffentliche Methode zum Beispiel für die Ampelum sagen zu können?? ablegt um sagen zu können es ist Zeit vergangenreagiere daraufzu viel Sekunden vergangenetwas umgeschaltet werden?? bei der Ampel durch das White einfach alsTick bezeichnenwie das Ticken der Uhrandas ich den aufrufeum zu sagenPunkt jetzt muss weiter geschaltet werden das sag ich demAutomatensag ich nicht in einzelnen Zuständen Summe sagt dem Automaten jetzt bitte weiter zu stellen ?? aus dem aktuellen Zustandwenn sie mehr Ereignisse haben wieähmdie Maschine ist überhitztoder die Maschinejedoch Ereignisse die Maschinist überhitzt??irgendein Regler wurde auf soundsoviel gestellten?? sprechen mir Methoden haben für jedes Ereignis eine eigene Methodeundwas diese Methode jetzt machen solldas sieht ganz komisch aus diese Methode soll das delegierendie sollden aktuellen Zustandnehmenund jetzt dem aktuellen Zustand sagener möge doch bitte dafür sorgen dass umgeschaltet wird das sieht auf einigen bisschen heftig ausdem Zusammenhang erklären ich hätte gerne das alle diese Zustände auchdas Ereignis verstehendass ich den den aktuellen Zustand bitten kann reagiere mal bitte draufund ich sage ihm was denn der Automat ist bis ist ja ein Verweis auf die aktuelle Instanzdamit erfährt der was der Automat istder Job istder Zustandsoll jetzt den Automatenumstellenist nicht ganz leicht ich gestehe es ist nicht ganz leichtanwas muss ich es bei zumindest in dieserWebster Class stehtergänzenals der Automatsoll quasi ein Schalter ein Verfahren mit dem ich sagen kannweiter das wäre das Ereignis tickte weiterund der Automat dirigiertwieder so schön heißtwie der Manager delegierteAutomat delegiert es an den Zustandan den aktuellen Zustandund sag dem aktuellen Zustandähmweiter schalten Sie mal zu das bin ichund du schaltest bitte mal weiterdas heißt jeder Zustand muss das Können jeder Zustand muss einedicke Methode habenähm die Baum einfach dann hier in die Zustände ein ich hätte gerne natürlich eine öffentlicheMethodeerscheint in der auch die nichts zurückliefertFreudund Tieck heißtund sie erwartet einen Automatenoder ihr Stetkontext?? Kontextsowasdie billigste Reaktionauf das Ereignis wäre gar nichts zu tun das will ich einfach einbauenin diese Klasse standwenn das Ereignis kommtmache gar nichts warum nicht kann ja sein das im jeweiligen Zustand dieses Ereignis einfach ignoriert wird?? dann würde man dann Beistrich so Hoffmannin dem Zustand kommt ein bestimmtes Ereignis ich bleibe einfach in den Zustandeines TageskommtPunkt sollte das nicht in dieDienste direkt einbauen so ist das dannder normal ja der Normalfall sozusagen dieses Ereignis dickkommt und ich bleibe einfachwie hierim selben Zustandwenn ich dann so schon eingebaut ich könnte auch sagen das sie sollabstrakte Methode sein Semikolon dahinter unseralle Kind Kassen müssen das implementierenKomma dass sie sieht so aus für mich als ob dasich für die Ampel aber in anderen Fällen sinnvoll wäre einfach gar nichts zu tun dessen Gewichte sie sofort von der Mutterklasse mit ?? müssen dicke Klassen gar nichts mehr machenwenn sie denn auch gar nichts tun wollen die Erben einfach danndieses Verhaltennicht besonders Tumorandas Verhalten hier soll aber eigentlich etwas anders sein in den KindklassenGänsefüßchen aufwassoll ich da noch vergessendass die Kind lassen sich anders verhalten könnenallmählich hat das mit Vokabelnindeutscher muss sie natürlich stehen damit die Kindklassenanders reagieren können??zum Beispielmöchte ich das rot sagen kannPunkt weitsoll anders reagierenPunktWowereitsoll natürlich nicht da stehen bleiben das heißt der Ruf für dieselbe Methode der Basisklasse auf der Mutterklasse aufalso nichts tundas sei nicht er soll von Rotumschaltennachäh rotgelbder Trick ist jetzt hierzuähmzu benutzen dass der?? dass die Maschine sicher mit übergeben hat hier das hört sich gut ??wurde zu viel getrunken hat ?? eines die Maschineihr über an ein eine Referenz auf sich selbst übergeben hat das Dis übergeben Punkt ich weißwas der Automat istund dann am Automaten umstellenwenn der Automat mir das denngestatten würde?? singen rein vergessen offensichtlich nicht dabei stehen?? ich muss jede Chance habendass der Automateingestellt werden kann zum Beispielganz dumm eine Methodeper Blickdeutsch set Stagesetzte den Zustand einer wartete ein Statement wenn esder Sitz Leertasteistesals ich dann dem Automaten namens Date Kontext kann ich sagenschalte mal weiterund ich kann ihn sogar sagen die auf einen bestimmten Zustanddiese Methode hier sollte eigentlich nicht sofür jedermann sichtbar sein es lässt sich leider nicht wirklicheinfach anders machen so ist diese Methode hier für jedermann sichtbar jeder kann jetzt die Ampel auf Grün schalten oder auf Gelb schalten das ist nicht wirklichentwickelthabenaber in die Musik eine Chance haben hier einzustellenwas denn der Zustand sein soll und das macht dann rotwenn rotrote Zustandes die geeignete Pflicht machte folgendeserwuchs von dem KontextPunkt Textdas Sextett aufund sagt Timo geb auf welchem Zustand soll gesetzt werdenauf rotgelbsieht das dann ausbei den anderen geht es genauso weiternicht das es in den Index reinschreibenPunkt jetzt habe das weitergehthabenwennrot gelbdas dicke Ereignis sieht schadet es auf Grünnicht mitschreiben und wenndas dicke Ereignis sieht schaltet es aufGelbauch schön und wennarchäologischeAmber natürlichgenauKomma Englisch und wenn Amberdas die Geigen sieht?? auf Rotprobiert habe ich allediedie weiteren Zustände sind ja billig spannend ist der Zustand rot in den Verstand haben die anderen funktionieren genausowenn ich andereweitere Ereignissehättemüsste ich hier welche Schuld müsste ich hier noch weitere Methoden insin dem Automaten haben nicht nur dick sondernstelle auf halbe Kraft oder gehe in den Wartungsmodusund die würden dann alle entsprechendMethoden aus den Zuständen aufrufenwie auf halbe kraftstellendenWartungsmodusund in den Zuständen wäre dann aus buchstabiert okay wenn ich in rot bin und sollen auf halbe Kraft stellenwas soll dann passierenwenn jemand in den Zuständen ausgestrahlt wird immer Ampel ist wirklich billigweiter geschaltetBeistrich das einmal in Aktion ?? lassen bisschengestört ist Komma dannsind wir auchKnöpfchenpräsentationsetzen kannokayich will einen Stage Kontextskontextdas ist mein endlicher Automatundden kann ich jetzt sagenesist so so viel Zeit vergangenschalte mal weiterdas kann ich dennochbeliebigweiter machenverstreut das ?? durch nackten Service weiter übers gesamte Programm verstreutdass sie diesemmit diesem Automatenereignisschickezwischenzeitigschickeähm halbe Kraft oderden Wartungsmodus gehenund er wird jetzt hierhoffentlich schon weiter schaltenmuss es ja anguckener fängt an mit Rot derAutomatsteht Kontexthaste ja unsäglicher Weisefängt an mit dem Zustandrot wo waren wir wann isthierbei der Kontexte fängt anmit rotsoLeertaste PunktundMitarbeiter funkt mir das auch fängt an mit Rotjegliches Malvielleicht erst in den Gruppen durch den erst mit einem Schritt drüber dass man sie das wirklich was passiert ?? hier sage ich dem zu den dem Automatsanken Automateneinen Schritt weiter das eigene Stickum einen Schritt weiter ihren Programmen sound dann steht der Automat hoffentlich aufrotgelbso weiteres Mal funktioniertdannwie ein Wahnsinnsaufwandfür diesen kleinen Effektich geh noch males im nächsten Schritt wirklich da reinsetzesehen können was passiert in diesen Befehl hier ich sage dem Automatentickich gehe da mal rein mit dendass es im Automatensteht Kontext ich bin jetzt im Automatensei dem Stetkontextrufe mir vom Zustanddas ist derzeit rot gelb rufe mir vom ZustandaufTickund übergebe eine Referenz auf dich selbstDackel Mitarbeiter rein gucken der hierdick aufrufen und eine Referenzauf den Automaten übergebenwir sind im Zustanddick ist aufgerufenJamba eine Referenz auf den Automatennun sage ich dem Automatenokay dann schalte auf Grünals dieder rot Gelbzustandsagt BalticEreignisdem Automatenscharte dich auf Gründas was manüblicherweise haben will und dann ist der automatische?? in der ?? ist der Automaten ebengründas wäre das Patternfürdas Versagen mit der Streichung das Pattern fürAutomatenstecken stetsam es gibt den Automaten als solchenstellt Kontextder hat fürjedes Ereigniseine entsprechende Methodeder merkt sich den aktuellen Zustandund der Brauch irgend eine Möglichkeit um den Zustandzu setzenvon außenund die einzelnenZuständesind abgeleitet von einer abstrakten Mutterklasseähm und haben Methoden an die derAutomat dirigieren kann für jede Sorte Ereignissegibt es hier einen Servicefallmethodenauf die der Automat initiiertnennt und jetzt eben direkt ablesen hier okay wenn ich in rot binund es kommt das dicke Ereignis dann geht's mit rotgelb weiterwenn ich in ?? und gelb bindest und dass die geeignetstenKids mit Grünwaldkönnen noch jeweils noch mit reagieren seine Holz sich aberjemand anderes schief gelaufen ist oder die andere charmant schalte ich auf Rot dann soweit sicher drin sind können sie ?? noch weitere Sachenmachen statt dass sie nur den als das nur denZustand umschalten Sekunde richtig reagieren darauf Punktso würde manAutomatenabbilden muss ist das Wetter