als PDF

Werbung
SWE-42
Ausdrucksbäume in verschiedenen Darstellungen
Infix mit notwendigen Klammern:
(a + b) / (c - d)
Infix vollständig geklammert:
(((a) + (b)) / ((c) - (d)))
Postfix
a b + c d - /
Präfix
/ + a b - c d
Objekte der Klasse BinTree:
/
© 1999 bei Prof. Dr. Uwe Kastens
+
a
~
-
c
b
~
~
~
d
~
Vorlesung Software-Entwicklung / Folie 42
Ziele:
Darstellungen von Ausdrucksbäumen erlernen
in der Vorlesung:
• Baumdurchlauf links-abwärts
• Postfix- und Präfix-Darstellung erzeugen
Übungsaufgaben:
Verständnisfragen:
• Warum benötigt man Klammern nur in der Infix-Darstellung?
~
~
SWE-43
Einfache Eingabefunktionen
Zeichenfolgen von der Standardeingabe (Tastatur) lesen:
Ein Objekt der Klasse BufferedReader aus der Bibliothek java.io wird mit dem Objekt
System.in initialisiert und dessen Funktionen werden benutzt:
import java.io.*;
class Greetings
{ public static void main (String [] args) throws IOException
{ BufferedReader in =
new BufferedReader (new InputStreamReader (System.in));
System.out.println ("What is your name?");
String name = in.readLine ();
System.out.println ("Hello " + name);
}
}
© 1999 bei Prof. Dr. Uwe Kastens
in.readLine() liest bis zum nächsten Zeilenwechselzeichen oder bis zum Eingabeende und
liefert die Zeichen davor als String-Objekt.
throws IOException gibt an, daß ein Aufruf dieser Funktion E/A-Ausnahmen auslösen
könnte (siehe SWE-48).
Vorlesung Software-Entwicklung / Folie 43
Ziele:
Direkte Verwendung von Bibliotheksklassen mit Eingabefunktionen
in der Vorlesung:
Erläuterungen dazu
nachlesen:
Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.1, 4.2
Übungsaufgaben:
Tabellen drucken und Grenzen dafür einlesen
Verständnisfragen:
SWE-44
Java Gently‘s Text Class
Vereinfacht interaktive Eingabedialoge mit Fehlerbehandlung.
Benutzt E/A-Ströme wie in SWE-22 und SWE-43gezeigt.
Einige Funktionen aus der Klasse Text:
public
public
public
public
public
static
static
static
static
static
void
int
double
String
char
prompt (String s);
readInt (BufferedReader in);
readDouble (BufferedReader in);
readString (BufferedReader in);
readChar (BufferedReader in);
Beispiel von SWE-43:
© 1999 bei Prof. Dr. Uwe Kastens
import java.io.*;
import javagently.*;
class Greetings
{ public static void main (String [] args) throws IOException
{ BufferedReader in = Text.open (System.in);
Text.prompt ("What is your name?");
String name = Text.readString (in);
System.out.println ("Hello " + name);
}
}
Vorlesung Software-Entwicklung / Folie 44
Ziele:
E/A-Unterstützung speziell für Anfänger
in der Vorlesung:
Am Beispiel erläutern
nachlesen:
Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.1, 4.2
Übungsaufgaben:
• Weitere E/A-Dialoge programmieren
• Verhalten bei Eingabefehlern erproben
Verständnisfragen:
• Warum ist Eingabe technisch komplizierter als Ausgabe?
SWE-45
Eingabe von Zahlenfolgen
Es sollen Zahlenfolgen unterschiedlicher Länge gelesen werden. Die Länge wird erst bei der
Ausführung des Programms bestimmt.
4 Techniken dazu:
1. Länge interaktiv erfragen; dann entsprechend viele Elemente lesen (SWE-46).
2. Auf der Eingabedatei die Angabe der Länge den Elementen voranstellen,
dann entsprechend viele Elemente lesen (SWE-47).
3. Leseschleife am Eingabeende durch eine Ausnahmebehandlung beenden (SWE-48).
4. Einen speziellen Wert, der nicht in der Folge vorkommen kann, als Endezeichen (Sentinel)
anfügen.
© 1999 bei Prof. Dr. Uwe Kastens
Beispiel siehe SWE-46.
Vorlesung Software-Entwicklung / Folie 45
Ziele:
Nützliche Eingabetechniken parat haben
in der Vorlesung:
(1) und (4) erläutern, siehe SWE-46
nachlesen:
Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.1, 4.2
Übungsaufgaben:
Technik (1) implementieren und zu (4) verändern
Verständnisfragen:
Welche Fehlersituationen können bei (1) und (4) auftreten?
SWE-46
Eingabe von Zahlenfolgen, Beispiel 1
Technik 1: Länge interaktiv erfragen; dann entsprechend viele Elemente lesen.
import java.io.*;
import javagently.*;
public class Summation1
{ public static void main(String[] args) throws IOException
{ BufferedReader in = Text.open (System.in);
© 1999 bei Prof. Dr. Uwe Kastens
Text.prompt ("How many numbers?");
int count = Text.readInt (in);
// Länge interaktiv erfragen
double total = 0;
for (int i = 1; i <= count; i++)
// Leseschleife
{ Text.prompt (i + ">");
double number = Text.readDouble(in);
total += number;
}
System.out.println ("That's enough, thanks.");
System.out.println ("The total is " + total);
}
}
Vorlesung Software-Entwicklung / Folie 46
Ziele:
Implementierung zu SWE-45(1)
in der Vorlesung:
Erläuterungen zusammen mit SWE-45
nachlesen:
Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.1, 4.2
Übungsaufgaben:
Verständnisfragen:
SWE-47
Ein- und Ausgabe mit Dateien
Statt der vordefinierten Dateiobjekte System.in, System.out werden
neue Dateiobjekte für Dateien unter deren Dateinamen (Unix-Pfad)
von den Funktionen Text.open und Text.create erzeugt:
statt Standardeingabe:
BufferedReader in = Text.open (System.in);
Eingabedatei:
BufferedReader in = Text.open ("numbers.in");
Ausgabedatei:
PrintWriter out = Text.create ("totals.out");
Im Beispiel SWE-46 nur die Erzeugung des Dateiobjektes und das Lesen der Länge ändern:
© 1999 bei Prof. Dr. Uwe Kastens
BufferedReader in = Text.open ("numbers.in");
int count = Text.readInt (in);
// Länge von der Datei lesen
// Lesen der Werte wie in SWE-46
Vorlesung Software-Entwicklung / Folie 47
Ziele:
Nur kleine Änderungen beim Übergang zu Dateien
in der Vorlesung:
Erläuterungen dazu
nachlesen:
Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.2, 4.5
Übungsaufgaben:
Ändern Sie das Programm so, daß der Dateiname interaktiv erfragt wird
Verständnisfragen:
SWE-48
Ausnahmebehandlung
Ausnahmen signalisieren Fehler oder ungewöhnliche Situationen bei der Programmausführung. In robusten Programmen sollen sie abgefangen und behandelt werden.
Ein try-Block wird mit einer oder mehreren Ausnahmebehandlungen (catch-Block)
versehen. Wird im try-Block eine Ausnahme ausgelöst, so wird sofort der catch-Block dazu
ausgeführt. Dies geschieht wie ein spontaner Aufruf eines passenden catch-Blockes als
Funktion mit dem Ausnahmeobjekt als Parameter.
Beispiel: Einlesen einer Zahlenfolge Technik (3):
© 1999 bei Prof. Dr. Uwe Kastens
try
{
for (int i = 1; /* keine Bedingung */; i++)
// Leseschleife
{ Text.prompt (i + ">");
double number = Text.readDouble(in);
total += number;
}
} catch (EOFException e)
// der Parametertyp wählt die Ausnahme aus
{ System.out.println ("That's enough, thanks.");
System.out.println ("The total is " + total);
}
Vorlesung Software-Entwicklung / Folie 48
Ziele:
Elementare Ausnahmebehandlung verstehen
in der Vorlesung:
Erläuterungen dazu
nachlesen:
Judy Bishop: Java lernen, 3.Aufl., Abschnitt 4.6
Übungsaufgaben:
Programm zum sicheren Benutzen von Dateien entwickeln
Verständnisfragen:
Nennen Sie Beispiele aus früher geschriebenen Programmen, die durch sinnvollen Einsatz von Ausnahmebehandlung
robuster gemacht werden können.
Herunterladen