Das Zustandsmuster – Eine Einführung                           Julian Fietkau                          Universität Hamburg...
Julian FietkauOrganisatorisches vorweg         Diese Folien sind unter CC-BY-SA 3.0 freigegeben.                   Alle Il...
Inhaltsverzeichnis                                    Julian Fietkau       Übersicht       Was sind Entwurfsmuster?       ...
Was sind Entwurfsmuster?                             Julian Fietkau      Übersicht      Was sind Entwurfsmuster?      Ein ...
Was sind Entwurfsmuster?                                           Julian Fietkau      Die Grundidee (objektorientierter) ...
Was sind Entwurfsmuster?                                              Julian Fietkau      Standardliteratur      Entwurfsm...
Ein Beispiel für zustandsbasiertes Verhalten         Julian Fietkau      Übersicht      Was sind Entwurfsmuster?      Ein ...
Ein Beispiel für zustandsbasiertes Verhalten                           Julian Fietkau      Der Kippschalter einer Lampe   ...
Ein Beispiel für zustandsbasiertes Verhalten                                                      Julian Fietkau      Das ...
Ein Beispiel für zustandsbasiertes Verhalten                                   Julian Fietkau          §                  ...
Das Zustandsmuster                                  Julian Fietkau     Übersicht     Was sind Entwurfsmuster?     Ein Beis...
Das Zustandsmuster                                                                        Julian Fietkau     Abstrakte Dar...
Implementation des Beispiels                         Julian Fietkau      Übersicht      Was sind Entwurfsmuster?      Ein ...
Implementation des Beispiels                                                                                              ...
Implementation des Beispiels                                     Julian Fietkau           §                               ...
Implementation des Beispiels                                                     Julian Fietkau           §               ...
Implementation des Beispiels                                        Julian Fietkau      Beobachtungen           Das zustan...
Weiteres Wissenswertes                               Julian Fietkau      Übersicht      Was sind Entwurfsmuster?      Ein ...
Weiteres Wissenswertes                                             Julian Fietkau      Hinweise          Es gibt viele Var...
Ende                              Julian Fietkau        Danke für die Aufmerksamkeit!       15 / 14
Upcoming SlideShare
Loading in …5
×

Das Zustandsmuster

1,066 views
959 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,066
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Das Zustandsmuster

  1. 1. Das Zustandsmuster – Eine Einführung Julian Fietkau Universität Hamburg 25. August 2010
  2. 2. 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
  3. 3. Inhaltsverzeichnis Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 3 / 14
  4. 4. Was sind Entwurfsmuster? Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 3 / 14
  5. 5. 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
  6. 6. Was sind Entwurfsmuster? Julian Fietkau Standardliteratur Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides) 5 / 14
  7. 7. 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
  8. 8. 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
  9. 9. 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
  10. 10. 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
  11. 11. Das Zustandsmuster Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 8 / 14
  12. 12. 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
  13. 13. Implementation des Beispiels Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 9 / 14
  14. 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
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. Weiteres Wissenswertes Julian Fietkau Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 13 / 14
  19. 19. 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
  20. 20. Ende Julian Fietkau Danke für die Aufmerksamkeit! 15 / 14

×