Zustände umsetzen Enumerations (Aufzählungen) Zustandsobjekte

Ähnliche Dokumente
Delegatesund Ereignisse

Die Programmiersprache C Eine Einführung

Einfache Rechenstrukturen und Kontrollfluss II

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Theorie zu Übung 8 Implementierung in Java

Hans Scheitter GmbH & Co.KG

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Blöcke. Beispiel: Variablen in Blöcken

5. Tutorium zu Programmieren

Java Einführung Klassendefinitionen

Datum Wochen Band DVD Band eingelegt Protokoll kontr. Recovery kontr. Tag Nr. RW Sign. Sign. Sign.

4 Codierung nach Viginere (Lösung)

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Informatik GK 12 Klassen Klassen programmieren in Delphi am Beispiel der konkreten Klasse Auto

Master of Advanced Studies in Software Engineering Java - Advanced Concepts. Musteraufgaben

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Objektorientierte Programmierung OOP Programmieren mit Java

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Vergleich verschiedener OO-Programmiersprachen

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Repetitorium Informatik (Java)

Tutorium Rechnerorganisation

Test-Driven Design: Ein einfaches Beispiel

JAVA - Methoden

Enum Aufzählungstypen in Java

Java-Schulung Grundlagen

Primitive Datentypen

Aktivitäten in C# /.NET umsetzen

Algorithmen und Datenstrukturen

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Vgl. Oestereich Kap 2.6 Seiten

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Welche Informatik-Kenntnisse bringen Sie mit?

Programmieren I + II Regeln der Code-Formatierung

2. Methoden. n Generelles zum Aufruf von Methoden. n Parameterübergabemechanismen (call by value, call by reference)

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Programmieren in Java

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Montag, 14.3 Dienstag, 15.3 Mittwoch, 16.3 Donnerstag, 17.3 Freitag, 18.3 Samstag, 19.3 Sonntag, Programmiertes Entwerfen 1 KG1 Götte

C# im Vergleich zu Java

Einstieg in die Informatik mit Java

3 Objektorientierte Konzepte in Java

Abschnitt 9: Schnittstellen: Interfaces

5.5.8 Öffentliche und private Eigenschaften

Vererbung & Schnittstellen in C#

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

RO-Tutorien 3 / 6 / 12

Dokumentation des Projektes Tic Tac Toe

Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem

Java Kurzreferenz Für Fortgeschrittene

3 Objektorientierte Konzepte in Java

Java Einführung Methoden. Kapitel 6

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Abonnieren Sie die kostenlose epaper-zeitung unter

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Java Einführung Abstrakte Klassen und Interfaces

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

Die Programmiersprache C99: Zusammenfassung

II.3.1 Rekursive Algorithmen - 1 -

Einführung in die Programmierung Vorlesungsprüfung

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Arrays Fortgeschrittene Verwendung

Javakurs 2013 Objektorientierung

Distributed Computing Group

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Übung Programmierung WS 2007/08 - Blatt 5

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Vorkurs C++ Programmierung

3. Anweisungen und Kontrollstrukturen

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

PROGRAMMIERUNG IN JAVA

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Enumerations und innere Klassen

Informatik I WS 07/08 Tutorium 24

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einführung in die Programmierung für Wirtschaftsinformatik

Propädeutikum zur Programmierung

Objektorientierte Programmierung

Moderne C-Programmierung

Java Einführung Methoden in Klassen

1 Polymorphie (Vielgestaltigkeit)

Probeklausur: Programmierung WS04/05

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Übungen Programmieren 1 Felix Rohrer. Übungen

Software-Engineering Software-Management

Vorlesung Programmieren

Objektorientierte Programmierung OOP Programmieren mit Java

Themen. Web Service - Clients. Kommunikation zw. Web Services

Java: Vererbung. Teil 3: super()

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Übungen zu Vererbung & Polymorphismus

Transkript:

Zustände umsetzen Enumerations (Aufzählungen) Zustandsobjekte Dr. Beatrice Amrhein

Kursinhalt Aufzählungen erzeugen Aufzählungen verwenden Zustandsobjekte erzeugen Zustandsobjekte verwenden Nach dem Handbuch der.net 4.0-Programmierung, Rolf Wenger, 2012 2

Enumerations Aufzählungen 3

Definition: Aufzählungen (Enumerations) Eine Aufzählung (Enumeration) bietet eine effiziente Möglichkeit, einen Satz benannter Konstanten (vom Typ int) zu definieren. Das Schlüsselwort zum definieren einer Aufzählung heisst enum. Beispiel: Sie sollen eine Variable Wochentag definieren. Es gibt nur sieben sinnvolle Werte, die diese Variable speichern kann. Um diese Werte zu definieren, verwenden Sie darum statt eines int-typs eine Aufzählung. enum Wochentag Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag}; 4

Der Vorteil von Aufzählungen Es ist eindeutig, welche Werte für diese Variable gültig sind. Es kann keine Fehlbelegungen geben (es können nur gültige Wochentage ausgewählt werden) In Visual Studio führt IntelliSense die gültigen Werte automatisch auf. 5

Zustände In einem Zustandsdiagramm gibt es eine endliche Anzahl von Zuständen. Diese werden oft als Enumeration implementiert. 6

Zustände als Enumeration enum Bancomat }; AmAufstarten, AmFehlerAnzeigen, Bereit, AmKartePrüfen, AmPincodePrüfen, AmKarteAusgeben, AmGeldAusgeben 7

Zwei Beispiele von Aufzählungen Aufzählungen für Wochentag und Monat enum Wochentag Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag }; enum Monat Januar, Februar, März, April, Mai, Juni, Juli, August, September, November, Dezember }; 8

Werte von Aufzählungen Den Zuständen können auch Nummern vergeben werden: enum Wochentag Sonntag = 0, Montag = 1, Dienstag = 2, Mittwoch = 3, Donnerstag = 4, Freitag = 5, Samstag = 6 }; enum Monat Januar = 1, Februar = 2, März = 3, April = 4, Mai = 5, Juni = 6, Juli = 7, August = 8, September = 9, Oktober = 10, November = 11, Dezember = 12 }; enum Farbe Rot = 15, Blau = 22, Grün = 32, Gelb = 64, Schwarz = 0, Weiss = 100 }; Nach dem Handbuch der.net 4.0-Programmierung, Rolf Wenger, 2012 9

Werte von Aufzählungen Damit können Werte von Aufzählungen auch verglichen werden: enum Wochentag Sonntag = 0, Montag = 1, Mittwoch = 3, Donnerstag = 4, Freitag = 5, Samstag = 6 }; static void Main(string[] args) if (Wochentag.Sonntag < Wochentag.Mittwoch) Console.WriteLine("Sonntag ist vor Mittwoch"); } else Console.WriteLine("Sonntag ist nach dem Mittwoch"); } } if (Wochentag.Donnerstag < Wochentag.Mittwoch) Console.WriteLine("Donnerstag ist vor Mittwoch"); } else Console.WriteLine("Donnerstag ist nach dem Mittwoch"); } Console.ReadLine(); Nach dem Handbuch der.net 4.0-Programmierung, Rolf Wenger, 2012 10

Werte von Aufzählungen static void Main(string[] args) if (Farbe.Rot < Farbe.Blau) Console.WriteLine("Rot ist heller als Blau"); } else Console.WriteLine("Rot ist dunkler als Blau"); } if (Farbe.Gelb < Farbe.Rot) Console.WriteLine("Gelb ist heller als Rot"); } else Console.WriteLine("Gelb ist dunkler als Rot"); } } Console.ReadLine(); enum Farbe Rot = 15, Blau = 22, Grün = 32, Gelb = 4, Schwarz = 100, Weiss = 0 }; Nach dem Handbuch der.net 4.0-Programmierung, Rolf Wenger, 2012 11

Aufzählungen verwenden 12

Noten A bis F Gültige Noten sind Buchstaben A bis F plus die Note FX. Das gibt die folgende Aufzählung public enum Note A, B, C, D, E, FX, F } Diese kann in einer Klasse Bewertung verwendet werden: public class Bewertung public enum Note A, B, C, D, E, FX, F } } public static Note getleistung(int prozent)... } public static String Ausgabe(Note n)... } 13

Berechnung der Note Aus der Prozent-Zahl lässt sich die Note wie folgt berechnen: public static Note getleistung(int prozent) Note resultat; if (prozent >= 90) resultat = Note.A; } else if (prozent >= 80) resultat = Note.B; } else if (prozent >= 70) resultat = Note.C; } else if (prozent >= 60) resultat = Note.D; } else if (prozent >= 50) resultat = Note.E; } else if (prozent >= 35) resultat = Note.FX; } else resultat = Note.F; } } return resultat; 14

Entscheidungen mit Hilfe von Aufzählungen Eine Aufzählung kann in einem switch-case Statement für die Auswahl verwendet werden: public enum Note A, B, C, D, E, FX, F } public static String getleistung(note ects) String resultat; switch (ects) case Note.A: restultat = "Hervorragend"; break; case Note.B: restultat = "Sehr gut"; break; case Note.C: restultat = "Gut"; break; case Note.D: restultat = "Passabel"; break; case Note.E: restultat = "Passabel"; break; case Note.F: restultat = "Ungenügend"; break; } return resultat; } 15

Zustandsdiagramm mit Hilfe von Enumerations implementieren 16

Zustandsdiagramm Implementieren Dieses Zustands- Diagramm hat 8 Zustände. Dies können wir mit einer Enumeration auflisten: enum BilletAutomat AmAufstarten, FehlerAnzeige, Bereit, AmBearbeiten, StartOrtEinlesen, ZielortEinlesen, BilletTypEinlesen, BarBezahlen, AmDrucken, Ausgabe }; 17

Zustandsdiagramm Implementieren Das Zustandsdiagramm hat nur die zwei Übergangs-Ereignisse Weiter( ) und Fehler( ). Ausserdem haben alle Zustände ein entry- Ereignis. 18

Zustandsdiagramm implementieren Die Zustandsübergänge des Zustandsdiagramms können mit Hilfe der Enumerations implementiert werden. Die Zustands-Maschine implementiert für jedes Übergangs-Ereignis die entsprechende Methode. Für jeden Zustand wird der Nachfolgezustand für das Übergangs-Ereignis (hier Weiter) definiert und die entry-methode des Nachfolgezustands ausgeführt. public void Weiter() Das Ereignis Weiter() führt zum Nachfolgezustand Bereit. switch (automat.zustand) Die Entry-Methode von Bereit erzeugt ein neues Fenster. Dann kann der Übergang case Zustand.AmAufstarten: (nächsterschritt) ausgeführt werden. automat.zustand = Zustand.Bereit; automat.newwindow = new BereitView(automat); automat.nächsterschritt(); break;... 19

Zustandsdiagramm implementieren Übergangs-Ereignis Weiter() für alle Zustände implementieren: public void Weiter() switch (automat.zustand) Für jeden Zustand wird der Nachfolgezustand für das Ereignis Weiter() case Zustand.AmAufstarten: definiert und die entry-methode des automat.zustand = Zustand.Bereit; Nachfolgezustands ausgeführt. automat.newwindow = new BereitView(automat); automat.nächsterschritt(); break; case Zustand.Bereit: automat.zustand = Zustand.AmKartePrüfen; automat.newwindow = new KartePrüfenView(automat); automat.nächsterschritt(); break; case Zustand.AmKartePrüfen: automat.zustand = Zustand.AmPincodeEinlesen; automat.newwindow = new PincodeView(automat); automat.nächsterschritt(); break;... 20

Zustandsdiagramm implementieren Analog wird die zweite Methode für das zweite Übergangs-Ereignis Fehler() implementiert. public void Fehler(string meldung) automat.fehlermeldung = meldung; switch (automat.zustand) case Zustand.AmAufstarten: automat.zustand = Zustand.AmFehlerAnzeigen; automat.newwindow = new FehlerView(automat); automat.nächsterschritt(); break; case Zustand.AmGeldbetragEinlesen: automat.zustand = Zustand.AmFehlerAnzeigen; automat.newwindow = new FehlerView(automat); automat.nächsterschritt(); break; case Zustand.AmKartePrüfen: automat.zustand = Zustand.AmFehlerAnzeigen; automat.newwindow = new FehlerView(automat); automat.nächsterschritt();... Für jeden Zustand wird der Nachfolgezustand für das Ereignis Fehler(meldung) definiert und die entry-methode des Nachfolgezustands ausgeführt. 21

Beispiel Bancomat Den vollständigen Zustandsautomaten des Bancomat Beispiels finden Sie im Verzeichnis BancomatEnumeration.zip der Übung12. 22

Zustands-Objekte 23

Nachteile von Zustands-Maschinen mit Enumerations Die Implementation mit Enumerations ist für kleine Zustandsdiagramme gut machbar. Für grössere Zustandsdiagramme hat diese Variante aber Nachteile: Die Methoden für die Übergangsereignisse (switch-case) werden sehr kompliziert. Die Implementation ist unflexibel. Beim Einführen eines neuen Zustandes müssen alle Methoden korrigiert werden. Die Fehlersuche in so komplexen Methoden ist schwierig. Die Zustände werden nicht eins-zu-eins abgebildet, sie verschwinden in der Zustands-Maschine. Komplexe Zustände und Unterzustände können nur schwierig umgesetzt werden. 24

Implementation mit Zustands-Objekten Ein Zustandsobjekt o kennt selber seine Übergangsereignisse o Implementiert selber seine entry-, do- und exit-ereignisse o Kennt seine Nachfolgezustände Da jedes Zustandsobjekt nur seine eigene Umgebung kennen muss, ist die Implementation recht einfach. 25

Zustands-Objekt Zustand AmAufstarten o Der Zustand AmAufstarten hat zwei Nachfolgezustände: Bereit bei Weiter() und AmFehlerAnzeigen bei Fehler(). o Ausserdem hat es ein entry-ereignis. public void Weiter() Bereit zustand = new Bereit(automat); automat.zustand = zustand; } public void Fehler(String meldung) automat.fehlermeldung = meldung; AmFehlerAnzeigen fehler = new AmFehlerAnzeigen(automat); automat.zustand = fehler; } 26

Zustands-Objekt Zustand AmAufstarten o Beim Eintritt in den Zustand AmAufstarten muss das entsprechende Fenster angezeigt werden. private Automat automat; // der Bancomat, zu dem diese Zustände gehören public AmAufstarten(Automat a) this.automat = a; AufstartenView view = new AufstartenView(automat); automat.nextwindow(view); } 27

Vollständige Implementation Statt der Aufzählung (Enumeration) braucht es für die Implementation des Zustandsdiagramms je ein Zustandsobjekt für jeden Zustand. Dieses ist nur für seine eigene, lokale Umgebung (Nachfolge-Zustände und Übergangsereignisse) zuständig. IZustand ist die Schablone, welche vorgibt, was für Methoden implementiert werden müssen. 28