Das Zustandsmuster Eine Einführung

Ähnliche Dokumente
Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Software-Entwurfsmuster (weitere) A01 OOP. Software-Entwurfsmuster (weitere)

Verteidigung Großer Beleg

Modellierung zustandsorientierter Systeme in Java: Das Zustandsmuster, Varianten und Alternativen

Software-Entwurfsmuster

Design Patterns. (Software-Architektur) Prof. Dr. Oliver Braun. Letzte Änderung: :12. Design Patterns 1/26

Software-Architektur. Design Patterns. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen

Design Patterns I. Observer, Listener & MVC

Funktionales Programmieren mit objektorientierten Sprachen

Entwurfsmuster Zustand

Software Design Patterns Zusammensetzung. Daniel Gerber

Überblick FBC SNW Zusammenfassung. Entwurfsmuster. Eine Einführung. Botond Draskoczy. Marcus Vitruvius Pollio

Theorie zu Übung 8 Implementierung in Java

Software Engineering II (IB) Design Patterns

Specifying Patterns for Dynamic Pattern Instance Recognition with UML 2.0 Sequence Diagrams. Lothar Wendehals. Universität Paderborn

Schnittstellen und. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen

Analyse und Modellierung von Informationssystemen

Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software (Programmer's Choice) Click here if your download doesn"t start automatically

Inhalt. Design patterns Kernbereiche Creational patterns Factory method Abstract Factory Builder Structural patterns Adapter Facade Decorator

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Analyse und Modellierung von Informationssystemen

Software-Architektur Design Patterns

Einstieg in die Informatik mit Java

Softwaretechnik. Überblick I. Prof. Dr. Rainer Koschke. Sommersemester 2009

Programmierkurs C++ Abstrakte Klassen und Methoden

Softwaretechnik. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen

Software Engineering II (IB) Design Patterns

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Decorator Pattern. Analyse- und Design-Pattern CAS SWE FS14. Roland Müller Samuel Schärer

Programmieren in Java -Eingangstest-

Analyse und Modellierung von Informationssystemen

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

Programmiertechnik II WS 2017/18

Programmiertechnik II SS Fakultät Informatik Bachelor Angewandte Informatik

MVVM (Model View ViewModel) in JavaFX

Teachlet zum Entwurfsmuster Zustand: Sessel-o-matic 1.0.0

Entwurfsmuster - Iterator & Composite

14. Java Objektorientierung

Programmierkurs Java

Ein Entwurfsmuster der GoF. vorgestellt von. Sigrid Weil 16. Januar 2008

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Software-Entwicklung in der Praxis

Ersetzbarkeit und Verhalten

Vorkurs Informatik WiSe 15/16

Client-Server-Beziehungen

DESIGN'PATTERN'2011. November. Abstract Factory & Factory Method BEARBEITET VON INHALT [1] Christoph Süsens

EINFÜHRUNG IN DIE PROGRAMMIERUNG

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

Kapitel 5: Interfaces

Entwurfsmuster (Design Patterns)

Dr. Heinz Kabutz und Sven Ruppert. Dynamic Proxies. Effizient programmieren. schnell+kompakt

Objektorientierte Programmierung

Refaktorisierung des Eclipse- Plugins Saros für die Portierung auf andere IDEs. Verteidigung der Bachelorarbeit von Arndt Tigges

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Objektorientierte Programmierung

Analyse und Modellierung von Informationssystemen

14. Java Objektorientierung

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Wahlpflichtfach Design Pattern

Vererbung Advanced. Ziele. Überschreiben von Methoden der Eltern Einführung Interface & Abstrakte Klasse Sichtbarkeit von Methoden bei Vererbung

Grundlagen der Programmierung in C Klassen

Labor Datenverarbeitung SS 2006

Strategie. (Strategy. / Policy) Ein objektbasiertes Verhaltensmuster. Stephan Munkelt, Stefan Salzmann - 03IN

Seminar Software Design Pattern

11. Komponenten Grundlagen der Programmierung 1 (Java)

Automaten und das State Pattern

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

Analyse und Modellierung von Informationssystemen

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Entwurfsmuster. Die Entwurfsmuster Observer, State und Singleton am Beispiel einer Digital-Uhr

II.4.5 Generische Datentypen - 1 -

Abstrakte Klassen, Interface. DVG Abstrakte Klassen, Interface

Java für Bauingenieure

Structural Patterns. B. Sc. Andreas Meißner

Java Einführung Abstrakte Klassen und Interfaces

Factory Patterns und deren Auswirkung auf die Softwarearchitektur in der Praxis

Praktikum. SEP: Java-Programmierung WS 2018/19. Modularisierung. Thomas Lemberger und Martin Spießl

Programmierung Nachklausurtutorium

Klassen und Konstruktoren in Java

Abstrakte Basisklassen

Zustände umsetzen Enumerations (Aufzählungen) Zustandsobjekte

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

6. Übung zu Software Engineering

Objektorientierte Programmierung

Ein Vortrag im Rahmen des Wahlpflichtmoduls Fortgeschrittene Programmierung mit JAVA

Factory Method Pattern

Programmieren in Java

Kapitel 4: Klassen und Unterklassen

Einstieg in die Informatik mit Java

Transkript:

Das Zustandsmuster Eine Einführung Universität Hamburg 25. August 2010

Organisatorisches 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_zustandsmuster 2 / 14

Inhaltsverzeichnis Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 3 / 14

Was sind Entwurfsmuster? Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 3 / 14

Was sind Entwurfsmuster? 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 Programmierer, das Muster auf das konkrete Problem zu übertragen. 4 / 14

Was sind Entwurfsmuster? Standardliteratur Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides) 5 / 14

Ein Beispiel für zustandsbasiertes Verhalten Ü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 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 Das Zustandsdiagramm drücke rechts drücke rechts drücke links Volle Helligkeit Licht aus Halbe Helligkeit drücke rechts drücke links drücke links 7 / 14

Ein Beispiel für zustandsbasiertes Verhalten 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 8 / 14 Lampe.java

Das Zustandsmuster Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 8 / 14

Das Zustandsmuster Abstrakte Darstellung des Zustandsmusters Context State : mystate request() <<abstract>> State handle()... mystate.handle();... ConcreteStateA handle() ConcreteStateB handle() Der Kontext hält ein Zustandsobjekt Zustandsabhängiges Verhalten wird dorthin delegiert Wie funktionieren Übergänge? 9 / 14

Implementation des Beispiels Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 9 / 14

Implementation des Beispiels Eine Variante: dezentrale Übergänge Lampe LampeZustand : zustand drueckelinks() drueckerechts() gibhelligkeit() : double <<interface>> LampeZustand drueckelinks() : LampeZustand drueckerechts() : LampeZustand gibhelligkeit() : double public void drueckelinks() { zustand = zustand.drueckelinks(); LampeZustandVolleHelligkeit drueckelinks() : LampeZustand drueckerechts() : LampeZustand gibhelligkeit() : double LampeZustandHalbeHelligkeit drueckelinks() : LampeZustand drueckerechts() : LampeZustand gibhelligkeit() : double LampeZustandLichtAus drueckelinks() : LampeZustand drueckerechts() : LampeZustand gibhelligkeit() : double 10 / 14

Implementation des Beispiels 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 20 public double gibhelligkeit() { return zustand.gibhelligkeit(); Lampe.java 11 / 14

Implementation des Beispiels 1 public interface LampeZustand { public LampeZustand drueckelinks(); 5 public LampeZustand drueckerechts(); public double gibhelligkeit(); LampeZustand.java 1 public class LampeZustandHalbeHelligkeit implements LampeZustand { public LampeZustand drueckelinks() { return new LampeZustandLichtAus(); 5 10 public LampeZustand drueckerechts() { return this; public double gibhelligkeit() { return 0.5; LampeZustandHalbeHelligkeit.java 12 / 14

Implementation des Beispiels 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 Übersicht Was sind Entwurfsmuster? Ein Beispiel für zustandsbasiertes Verhalten Das Zustandsmuster Implementation des Beispiels Weiteres Wissenswertes 13 / 14

Weiteres Wissenswertes 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 (, Janina Nemec) http://www.julian-fietkau.de/ modellierung_zustandsorientierter_systeme_in_java 14 / 14

Ende Danke für die Aufmerksamkeit! 15 / 14