Das Zustandsmuster
Upcoming SlideShare
Loading in...5
×
 

Das Zustandsmuster

on

  • 1,046 views

Diesen Vortrag habe ich als Gast im Softwareentwicklungspraktikum 2010 gehalten....

Diesen Vortrag habe ich als Gast im Softwareentwicklungspraktikum 2010 gehalten.

Ich habe versucht, einerseits den Grundgedanken von objektorientierten Entwurfsmustern zu wiederholen und andererseits den Teilnehmern das Zustandsmuster anhand eines Beispiels näher zu bringen.

Statistics

Views

Total Views
1,046
Views on SlideShare
1,043
Embed Views
3

Actions

Likes
0
Downloads
3
Comments
0

2 Embeds 3

http://de.julian-fietkau.de 2
http://www.docseek.net 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Das Zustandsmuster Das Zustandsmuster Presentation Transcript

  • Das Zustandsmuster – Eine Einführung Julian Fietkau Universität Hamburg 25. August 2010
  • Julian FietkauOrganisatorisches vorweg Diese Folien sind unter CC-BY-SA 3.0 freigegeben. Alle Illustrationen, soweit sie nicht von mir erstellt wurden, stammen aus dem OpenClipArt-Projekt. Folien-Download und Feedback-Möglichkeit: http://www.julian-fietkau.de/das_zustandsmuster2 / 14
  • Inhaltsverzeichnis Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 3 / 14
  • Was sind Entwurfsmuster? Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 3 / 14
  • Was sind Entwurfsmuster? Julian Fietkau Die Grundidee (objektorientierter) Entwurfsmuster Beim objektorientierten Entwurf wird ein abstraktes Modell in Klassen bzw. Code „gegossen“. Wie genau das geschieht ist eine Frage von Design. Hierbei tauchen bestimmte abstrakte Fragen immer wieder auf (Meta-Probleme). → Objektorientierte Entwurfsmuster bieten schablonenartige Lösungen für solche Meta-Probleme. Es liegt am Programmie- rer, das Muster auf das konkrete Problem zu übertragen. 4 / 14
  • Was sind Entwurfsmuster? Julian Fietkau Standardliteratur Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides) 5 / 14
  • Ein Beispiel für zustandsbasiertes Verhalten Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 5 / 14
  • Ein Beispiel für zustandsbasiertes Verhalten Julian Fietkau Der Kippschalter einer Lampe Mögliche Zustände: Licht aus, halbe Helligkeit, volle Helligkeit Mögliche Aktionen: drücke links, drücke rechts Zustandsabhängiges Verhalten: Wie hell ist die Lampe? 6 / 14
  • Ein Beispiel für zustandsbasiertes Verhalten Julian Fietkau Das Zustandsdiagramm drücke rechts drücke rechts drücke rechts drücke links Volle Halbe Helligkeit Licht aus Helligkeit drücke links drücke links 7 / 14
  • Ein Beispiel für zustandsbasiertes Verhalten Julian Fietkau § ¤ 1 public class Lampe { private enum LampeZustand { LICHT_AUS, HALBE_HELLIGKEIT, VOLLE_HELLIGKEIT; 5 } private LampeZustand zustand = LampeZustand.LICHT_AUS; public void drueckeLinks() { 10 if(zustand == LampeZustand.LICHT_AUS) { zustand = LampeZustand.VOLLE_HELLIGKEIT; } else if(zustand == LampeZustand.HALBE_HELLIGKEIT) { zustand = LampeZustand.LICHT_AUS; } 15 } public void drueckeRechts() {...} public double gibHelligkeit() { 20 double helligkeit = 0.0; if(zustand == LampeZustand.LICHT_AUS) { helligkeit = 0.0; } else if(zustand == LampeZustand.HALBE_HELLIGKEIT) { helligkeit = 0.5; 25 } else if(zustand == LampeZustand.VOLLE_HELLIGKEIT) { helligkeit = 1.0; } return helligkeit; } 30 } ¦ ¥ Lampe.java 8 / 14
  • Das Zustandsmuster Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 8 / 14
  • Das Zustandsmuster Julian Fietkau Abstrakte Darstellung des Zustandsmusters <<abstract>> Context State : myState State request() handle() ... ConcreteStateA ConcreteStateB myState.handle(); handle() handle() ... Der Kontext hält ein Zustandsobjekt Zustandsabhängiges Verhalten wird dorthin delegiert Wie funktionieren Übergänge? 9 / 14
  • Implementation des Beispiels Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 9 / 14
  • Implementation des Beispiels Julian Fietkau Eine Variante: dezentrale Übergänge <<interface>> Lampe LampeZustand : zustand LampeZustand drueckeLinks() drueckeRechts() drueckeLinks() : LampeZustand gibHelligkeit() : double drueckeRechts() : LampeZustand gibHelligkeit() : double public void drueckeLinks() { LampeZustandVolleHelligkeit LampeZustandHalbeHelligkeit zustand = zustand.drueckeLinks(); drueckeLinks() : LampeZustand drueckeLinks() : LampeZustand } drueckeRechts() : LampeZustand drueckeRechts() : LampeZustand gibHelligkeit() : double gibHelligkeit() : double LampeZustandLichtAus drueckeLinks() : LampeZustand drueckeRechts() : LampeZustand gibHelligkeit() : double 10 / 14
  • Implementation des Beispiels Julian Fietkau § ¤ 1 public class Lampe { private LampeZustand zustand; 5 public Lampe() { zustand = new LampeZustandLichtAus(); } public void drueckeLinks() { 10 zustand = zustand.drueckeLinks(); } public void drueckeRechts() { zustand = zustand.drueckeRechts(); 15 } public double gibHelligkeit() { return zustand.gibHelligkeit(); } 20 } ¦ ¥ Lampe.java 11 / 14
  • Implementation des Beispiels Julian Fietkau § ¤ 1 public interface LampeZustand { public LampeZustand drueckeLinks(); public LampeZustand drueckeRechts(); 5 public double gibHelligkeit(); } ¦ ¥ LampeZustand.java § ¤ 1 public class LampeZustandHalbeHelligkeit implements LampeZustand { public LampeZustand drueckeLinks() { return new LampeZustandLichtAus(); 5 } public LampeZustand drueckeRechts() { return this; } 10 public double gibHelligkeit() { return 0.5; } } ¦ ¥ LampeZustandHalbeHelligkeit.java 12 / 14
  • Implementation des Beispiels Julian Fietkau Beobachtungen Das zustandsabhängige Verhalten ist besser gekapselt und vom Kontext getrennt Weniger Sprünge im Code, bessere Übersicht Aber: struktureller Overhead 13 / 14
  • Weiteres Wissenswertes Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 13 / 14
  • Weiteres Wissenswertes Julian Fietkau Hinweise Es gibt viele Varianten der Implementierung, die unter verschiedenen Umständen sinnvoll sind. In aktuellen Java-Versionen erleichtern Enums die Umsetzung. Nicht jedes zustandsabhängige Verhalten muss mit dem Zustandsmuster beantwortet werden - keep it simple. Modellierung zustandsorientierter Systeme in Java: Das Zustandsmuster, Varianten und Alternativen (Julian Fietkau, Janina Nemec) http://www.julian-fietkau.de/ modellierung_zustandsorientierter_systeme_in_java 14 / 14
  • Ende Julian Fietkau Danke für die Aufmerksamkeit! 15 / 14