Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

02.01.2006, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/2006 1 Aufzählungstypen.

Ähnliche Präsentationen


Präsentation zum Thema: "02.01.2006, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/2006 1 Aufzählungstypen."—  Präsentation transkript:

1 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Aufzählungstypen

2 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Aufzählungstypen (Enumerations) Definition von Aufzählungstypen enum Color { Red, Green, Blue, Yellow } Color c = Color.Red; Aufzählungstypen stehen intern für von der Spezialklasse Enum abgeleitete Klassen, für die gilt: keine Unterklassen können abgeleitet werden Elemente des Aufzählungstyps werden durch konstante, statische Objektdefinitionen beschrieben, die zusätzlich durch eine Ordnungszahl benannt werden keine neuen Objekte können von einer solchen Klasse erzeugt werden Aufzählungstypen können Variablendeklarationen, sowie Konstruktor- und Methodendefinitionen enthalten

3 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Beispiel: Interne Klassenbeschreibung class Color extends Enum { public static final Red = new Color(´´Red´´,0); public static final Green = new Color(´´Green´´,1); public static final Blue = new Color(´´Blue´´,2); public static final Yellow = new Color(´´Yellow´´,3); Color (String s, int i){ super(s,i); }. }

4 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Vordefinierte Methoden auf Enum-Objekten int ordinal() Abfrage der Ordnungszahl, die durch die Reihenfolge der Definition gegeben ist String name() liefert den Namen der Konstanten, toString() ruft lediglich name() auf int compareTo(E o)Vergleich von Enum-Objekten des gleichen Typs anhand der Ordnungszahlen boolean equals(Objekt e) von Objekt geerbte Vergleichsmethode static E valueOf(String s) liefert Enum-Objekt zu einem Namen s für eine Aufzählung E static E[] values() liefert eine Reihung mit allen Aufzählungselementen

5 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Definition von Methoden enum Day { Mon, Tue, Wed, Thu, Fri, Sat, Sun; boolean isWeekend() { return this == Sat || this == Sun; } Day d = …. ; if( d.isWeekend() )....

6 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Definition von Datenelementen und Konstruktoren enum Day { Mon(false), Tue(false), Wed(false), Thu(false), Fri(false), Sat(true), Sun(true); Day( boolean w){ weekend = w; } private boolean weekend; boolean isWeekend() { return weekend; }

7 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Enum-Konstanten in switch-Anweisungen Color farbe = Color.Red; switch ( farbe ){ case Color.Red: case Color.Green: System.out.println(´´Die Farbe ist rot oder grün´´); break; default: System.out.println(´´Die Farbe ist blau oder gelb´´); }

8 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Ausnahmebehandlung und Zusicherungen in der Programmiersprache Java

9 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Konzept der Exceptionbehandlung Auftreten einer Exception signalisiert eine bestimmte Ausnahme- oder Fehlersituation Exceptions versus Errors Exceptions sind vergleichsweise ´´leichte´´ Fehler Errors sind schwerwiegende ´´nicht behebbare´´ Fehler Exceptions und Errors sind Unterklassen der Klasse Throwable Konstruktion eigener Exceptions durch Erweiterung vorhandener IndexOutOfBoundsException ArrayIndexOutOfBoundsException Exception-Klassen enthalten zwei Arten von Konstruktoren Erzeugung einer Exception ohne Fehlermeldung Erzeugung einer Exception mit Fehlermeldung

10 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Typen von Ausnahmen Error enthält System- und Übersetzungszeit-Fehler IO-Exception enthält Fehler, die abgefangen werden müssen RuntimeException enthält Fehler, die zur Laufzeit innerhalb der JVM auftreten. Sie müssen nicht abgefangen werden. Throwable Exception Error RuntimeException IOException OutOfMemoryError LinkageError SecurityException FileNotFoundException NullPointerException.....

11 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Abfangen einer Exception Genereller Ablauf beim Abfangen einer Exception try{ // Anweisungsblock der eine Exception auslösen kann } catch( FirstException e){ // Anweisungen, die bei einem FirstException ausgeführt werden } catch( SecondException e){ // Anweisungen, die bei einem SecondException ausgeführt werden } finally{ // Abschlußaktionen, die grundsätzlich ausgeführt werden } Exceptions wandern die Aufrufhierarchie hinauf, bis sie abgefangen werden

12 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Beispiel einer catch-Anweisung int a, b, c; // Eingabe von b und c... try{ a = b / c; } catch (ArithmeticException e){ System.out.println(´´Bitte anderen Divisor eingeben!´´); System.out.println(´´Meldung: ´´ + e.getMessage()); } // Ausgabe:Bitte anderen Divisor eingeben! Meldung: / by zero

13 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Abfangen mehrerer Exceptions beim Abfangen mehrerer Exceptions ist die Reihenfolge zu beachten int [] intArray = {1, 2, 3, 4}; int arrayIndex = -1; try{ intArray[arrayIndex] = 0; } catch (IndexOutOfBoundException e){ System.out.println(´´Ungültiger Index´´); } catch (ArrayIndexOutOfBoundException e){ // Diese Stelle wird nie erreicht ==> Fehler zur Übersetzungszeit System.out.println(´´Warten auf Godot´´); }

14 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ finally-Anweisung finally-Anweisung enthält Aufräumarbeiten, die auch nach Auslösung einer Exception ausgeführt werden müssen public void convertStr(String[] src, int[] dst){ int [] temp = new int[src.length]; try{ for(int i = 0; i < src.length; i++) temp[i] = Integer.parseInt(src[i]); System.arraycopy(temp, 0, dst, 0, temp.length); } finally{ // temporären Puffer freigeben temp = null; }

15 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Auslösung einer Exception Unter dem Auslösen einer Exception versteht man die Erkennung und anschließende Fehlersignalisierung die throw-Anweisung erwartet als Argument ein Objekt der Klasse Throwable oder einer ihrer Unterklassen Integer value;... public void setValue(Integer value){ if(value == null) throw new IllegalArgumentException(´´null value´´); this.value = value; }

16 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Die throws-Klausel alle Exceptions, die nicht von der Klasse RuntimeException abgeleitet werden, erwarten eine Fehlerbehandlung die throws-Klausel signalisiert, daß eine Methode Exceptions nicht explizit abfängt, sondern dem Aufrufer überläßt Angabe mehrerer Exceptions in der throws-Klausel möglich FileInputStream stream; public void openFile(String name) throws FileNotFoundException{ stream = new FileInputStream(name); } beim Überschreiben einer Methode dürfen der throws-Klausel keine neuen Exceptions hinzugefügt werden, hingegen ist das Weglassen von Exceptions zulässig

17 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Zusicherungen (Assertions) Zusicherungen stehen für boolesche Aussagen, die zur Garantie einer fehlerfreien Programmausführung immer eintreten müssen Zusicherungen in Java sind Anweisungen der Form assert boolean-expression[:message-string] Zusicherungen werden von der JVM während der Programmausführung ausgewertet liefert die Auswertung true wird mit der Programmausführung normal fortgefahren scheitert die Auswertung der Zusicherung, dann stoppt das Programm mit einem AssertionError Zusicherungen zielen ausschließlich auf die Fehlerfindung während der Entwicklungs- und Testphase eines Programms

18 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Beispiel: Zusicherungen class Game {... int throwDie(){ int result;... assert (result >= 1) && (result <= 6) : ´´I am cheating´´; return result; }... }

19 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Aktivieren und Stilllegen von Zusicherungen Zusicherungen können beim Aufruf der JVM mit Schaltern aktiviert und deaktiviert werden -eaalle Zusicherungen sind aktiviert und werden von der JVM überwacht -daalle Zusicherungen sind ausgeblendet und werden von der JVM ignoriert (Default-Einstellung) Auswertung von Zusicherung lässt sich auf Klassen – und Package-Ebene einschränken - ea:classname nur Zusicherungen in der Klasse classname werden von der JVM überwacht - ea:package… nur Zusicherungen in Klassen des Package package werden von der JVM überwacht

20 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Was zusichern (und was nicht)? Zusicherungen sollten Bedingungen an Zustandsvariablen (sogenannte Klasseninvarianten) überprüfen bei konsequenter Datenkapselung reicht es aus, zur Überprüfung von Klasseninvarianten entsprechende Zusicherungen vor den Rücksprung aus schreibenden Methode einzufügen Klasseninvarianten sind oftmals sehr groß, so dass sich eine Verwendung von privaten Invarianten-Test-Methoden anbietet Zusicherungen sollten zur Überprüfung von Schleifeninvarianten und Nachbedingungen eines Methodenaufrufs verwendet werden Vorbedingungen an Methodenaufruf können im eigentlichen Sinne nicht zugesichert werden und sollten deshalb Ausnahmen überprüft werden

21 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Threads in der Programmiersprache Java

22 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Threads ein Thread ist ein eigenständiges Programmfragment, das parallel zu anderen Teilen eines Programmes ablaufen kann alle Threads eines Programmes teilen sich einen gemeinsamen Adressraum (leichtgewichtiger Prozeß) in einem Multithreading-System verwaltet die Rechnerkern- vergabe (Scheduler) die zur Ausführung anstehenden Threads man unterscheidet zwei Arten der Parallelität: –pseudoparallele Abarbeitung auf Einprozessorsystemen –echte parallele Abarbeitung auf Mehrprozessorsystemen

23 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Threads in Java Threads werden in der virtuellen Maschine durch Objekte der Klasse java.lang.Thread repräsentiert virtuelle Maschine verwendet Thread-Objekte zum Starten, Starten oder Suspendieren von Threads ein Thread beginnt die Ausführung mit dem Aufruf der run()- Methode des Thread-Objektes Deklaration eines Threads Konstruktion einer Unterklasse der Klasse Thread Implementierung des Interfaces Runnable Erzeugen eines Threads Erzeugen eines Objektes einer Unterklasse der Klasse der Thread Erzeugen eines Thread-Objektes unter Angabe eines Objektes einer Klasse, welches das Interface Runnable implementiert

24 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Deklaration und Erzeugen eines Threads class TextThread extends Thread { String text; public TextThread(String text){ this.text = text; } public void run() { for(int i = 0; i< 10; i++) System.out.println(text); }... TextThread java = new TextThread(´´Java´´); java.start(); TextThread expresso = new TextThread(´´Expresso´´); expresso.start();

25 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Deklaration und Erzeugen eines Threads class TextThread implements Runnable { String text; public TextThread(String text){ this.text = text; } public void run() { while( true ) System.out.println(text); }... TextThread java = new TextThread(´´Java´´); Thread thread = new Thread(java); thread.start();

26 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Zustände eines Threads run() zu Ende start() new Scheduler yield() CPU-Zeit beendet blockiert erzeugt rechenwillig beendet rechnend notify notifyAll join beendet sleep beendet I/O beendet wait() join() sleep() I/O-Zugriff

27 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Methoden zur Thread-Steuerung public void start() überführt einen Thread vom Zustand ´´erzeugt´´ in den Zustand ´´rechenwillig´´ public static void yield() aufrufender Thread gibt die CPU freiwillig ab public final void join() public final void join(long millis) public final void join(long millis, int nanos) ausführender Thread wartet auf das Ende des Threads für den die Methode aufgerufen wurde public final void sleep(long millis) public final void sleep(long millis, int nanos) aufrufender Thread wird für eine bestimmte Zeit in den blockierten Zustand überführt

28 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Scheduling von Threads Prioritätengesteuerte Rechnerkernvergabe MIN_PRIORITY = 0; MAX_PRIORITY = 10; NORM_PRIORITY = 5, public final void setPriority(int newPriority) public final int getPriority() Java Spezifikation: Threads mit höherer Priorität sollen im Schnitt mehr Rechenzeit erhalten als Threads mit niedriger Priorität es existieren JVM´s bei denen Threads mit gleicher Priorität nicht im Round- Robin-Verfahren abgearbeitet werden deshalb sollten bei Verwendung von Threads: bei rechenintensiven Threads gezielt die yield() und sleep()-Methoden aufgerufen werden rechenintensive Threads mit einer niedrigeren Priorität als I/O-intensive Threads ausgestattet werden

29 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Daemon-Threads keine User-Threads mehr im System => Programmende public LogThread(String fileName) throws IOException { buffer = new Vector(); logStream = new PrintWriter(new fileWriter( fileName )); setPriority( Thread.MIN_PRIORITY ); setDaemon( true ); } public void run(){ while( true ){ try{ sleep( INTERVAL ); // Meldungen in die Datei schreiben } catch ( InterruptedException e ){ }; }


Herunterladen ppt "02.01.2006, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/2006 1 Aufzählungstypen."

Ähnliche Präsentationen


Google-Anzeigen