OOP mit Java Oder: Java in 5 Tagen
1. Tag Klassen und Methoden Hello World in Variationen Von Menschen und Geschlechtern Horden (Schlange stehen)
Klassen und Methoden In Java ist alles eine Klasse Klassen und Filename müssen identisch sein Klassen können zu Paketen zusammengefasst werden public class meineKlasse { // hier kommt mehr... }
Klassen und Methoden Klassen können Daten und Methoden beinhalten public class meineKlasse { publicint a=0; public void tuWas() { } public void tuNix() { }
Klassen und Methoden Schreiben Sie die Klasse (mit dem ASCII-Editor Ihrer Wahl), kompilieren Sie sie und starten Sie sie. public class meineKlasse { publicint a=0; public void tuWas() { } public void tuNix() { }
Klassen und Methoden Es gibt eine spezielle Methode ‚main‘, die als Startpunkt dient. public class test { public static void main(String args[]) { // unser Programm... System.out.println("Hello World!"); }
Klassen und Methoden Die meisten Typen sind Klassen. public class helloWorld { public static void main (String args[]) { String hw = new String("Hello World."); System.out.println(hw); }
Klassen und Methoden Eine Schleife kommt hinzu... public class helloWorld { public static void main (String args[]) { String hw = new String("Hello World."); System.out.println(hw); int i; for (i=1; i<hw.length(); i++) { System.out.println(hw.charAt(i)); }
Klassen und Methoden Übung... Hello World. ee l o W o r l d.
mann.java menschen.java Von Menschen und Geschlechtern Eigene Klassen... public class mann { } public class menschen { public static void main (String args[]) { mannhans = new mann(); }
mann.java menschen.java Von Menschen und Geschlechtern public class mann { public void tuwas() { System.out.println("Fussball sehen..."); } public class menschen { public static void main (String args[]) { mannhans = new mann(); hans.tuwas(); }
menschen.java Von Menschen und Geschlechtern Schreiben Sie die Klasse ‚frau‘. public class menschen { public static void main (String args[]) { mannhans = new mann(); frauemma = new frau(); hans.tuwas(); emma.tuwas(); }
menschen.java Von Menschen und Geschlechtern Führen Sie eine ‚Warteschlange‘ ein. public class menschen { public static void main (String args[]) { mann[] schlange = new mann[10]; for (int i=0; i<10; i++) { schlange[i] = new mann(); schlange[i].tuwas(); }
menschen.java Von Menschen und Geschlechtern Jetzt kommt der Trick, wir möchten Männer und Frauen in der Schlange stehen haben... public class menschen { public static void main (String args[]) { ???[] schlange = new ???[10]; for (int i=0; i<10; i++) { schlange[i] = waehleGeschlechtZufaellig(); schlange[i].tuwas(); }
mann.java mensch.java Von Menschen und Geschlechtern Vererbung & co. public class mann extends mensch { public void tuwas() { System.out.println("Fussball sehen..."); } public class mensch { public void tuwas() { System.out.println("Ich bin nur einm Mensch..."); }
menschen.java Von Menschen und Geschlechtern (Warte-) Schlange... public class menschen { public static void main (String args[]) { mensch[] schlange = new mensch[10]; for (int i=0; i<10; i++) { if (i % 2 == 0) schlange[i] = new mann(); else schlange[i] = new frau(); schlange[i].tuwas(); }
2. Tag Parameter lesen ‚echo‘ I/O Exceptions Gehaltsschecks ‚cat‘, ‚wc‘, ‚mailto‘,... Optional: Quiz
Parameter lesen In args[] werden die Parameter gespeichert, die Sie ihrem Programm übergeben. Die Anzahl der Elemente eines Arrays erhalten Sie mit array.length Schreiben Sie ein Programm analog zum ‚echo‘-Programm
echo.java Parameter lesen Unser ‚echo‘-Programm... public class echo { public static void main (String args[]) { System.out.print("Anzahl der Parameter: “); System.out.println(args.length); for (int i=0; i<args.length; i++) { System.out.println(args[i]); }
I/O - Eigentlich ganz einfach ? Ein-/Ausgabe durch package java.io Ausgabe (auf Konsole) mit System.out.println() Eingabe (von Konsole) mit System.in.readln()? –System.in ist vom Typ java.io.InputStream –Methoden wie read(byte[]) ? –keine Strings,... Streams lesen und schreiben einzelne Bytes –normalerweise (?) ASCII/Unicode Zeichen Reader/Writer –ggf. gepuffert BufferedReader/Writer
I/O - Streams Folge von Bytes können zum Lesen und Schreiben von Bytes verwendet werden woher/wohin ? z.B. FileInputStream Streams als Schnittstelle zwischen Anwendung und Daten Für Text EA –InputStreamReader/OutputStreamWriter Pufferung –BufferedReader/BufferedWriter
I/O - Beispiele // Einlesen von Tastatur InputStreamReader isr = new InputStreamReader(System.in); BufferedReader in = new BufferedReader(isr); String s = in.readLine(); while (s != null) { System.out.println(s); s = in.readLine(); } AnwendungBufferedReaderInputStreamReaderInputStream
I/O - Einschub Exceptions Fehlerbehandlung im 'normalen' Code InputStreamReader isr = new InputStreamReader(System.in); if (isr == null) { System.out.println("Fehler beim Oeffnen!"); System.exit(0); } else { BufferedReader in = new BufferedReader(isr); if (in == null) { System.out.println("Fehler beim Lesen!"); System.exit(0); } else {... } }
I/O - Einschub Exceptions vom Code getrennt InputStreamReader isr = new InputStreamReader(System.in); if (isr == null) { iStatus = ERR_OPEN; goto Error; } BufferedReader in = new BufferedReader(isr); if (in == null) { iStatus = ERR_READER; goto Error; }... Error: switch (iStatus)...
I/O - Einschub Exceptions ähnlich goto, aber 'sauberer' try { InputStreamReader isr = new InputStreamReader(System.in); if (isr == null) throw new IOException("Error opening"); BufferedReader in = new BufferedReader(isr); if (in == null) throw new IOException("Error in Reader");... } catch (IOException e) { }
I/O - Einschub Exceptions oder gleich 'eingebaut‘ (Vordefiniert) try { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader in = new BufferedReader(isr);... } catch (IOException e) { }
I/O - Einschub Exceptions try { // some code } catch (SomeException e1) { // do something } catch (SomeOtherException e2) { // do something else } finally { // always executed } Syntax
// Einlesen aus Datei FileReader f = new FileReader("x.dat"); BufferedReader in = new BufferedReader(f); String s = in.readLine(); // readLine() liefert am Dateiende null while (s != null) { System.out.println(s); s = in.readLine(); } I/O - Lesen aus Datei AnwendungBufferedReaderFileReaderFile
// Einlesen aus String StrigReader s = new StringReader("Hallo\nWelt\n"); BufferedReader in = new BufferedReader(s); String s = in.readLine(); while (s != null) { System.out.println(s); s = in.readLine(); } I/O - Lesen aus einem String AnwendungBufferedReaderStringReaderString
// Einlesen von URL URL U = new URL(" BufferedReader in = new BufferedReader( new InputStreamReader(U.openStream())); String s = in.readLine(); while (s != null) { System.out.println(s); s = in.readLine(); } AnwendungBufferedReaderInputStreamReaderURL I/O - Lesen aus dem Netz
// Ausgabe in Datei try { FileWriter fw = new FileWriter("y.dat")); PrintWriter pw = new PrintWriter(fw); pw.println("Hallo Welt!");... pw.close(); } catch (Exception e) { } AnwendungPrintWriterFileWriterFile I/O - Ausgabe in Datei
try { FileOutputStream os = new FileOutputStream("y.gz"); GZIPOutputStream zos = new GZIPOutputStream(os); PrintWriter pw = new PrintWriter(zos); pw.println("Hallo Welt!"); pw.close(); } catch (Exception e) { } AnwendungPrintWriterGZIPOutputStreamFileOutputStream I/O - Ausgabe mal anders File
I/O - Zusammenfassung I/O in Java ist, verglichen mit anderen Sprachen –im Sprachumfang enthalten (vgl. C) –erheblich komplexer –erheblich flexibler –genauso effizient –nicht nur für 'normale' Dateien, sondern auch etwa für Netzwerk Archive Datenbanken
I/O - Übungen Programm “cat" –gibt Datei auf Konsole aus –Erweiterung: seitenweise Programm "wc" –Zählt die Zeilen in einer Datei –Erweiterung: auch die Wörter und Buchstaben Programm "metric" –Bestimmt die maximale/mittlere Schachtelungstiefe in einem Java Programm Programm "copy" –kopiert Dateien (binär!) Programm "grep" –durchsucht Dateien nach Muster (Zeichenfolge)
I/O - Ein BSP zusammen... import java.io.*; public class cat { public static void main (String args[]) { try { FileReader f = new FileReader(args[0]); BufferedReader in = new BufferedReader(f); String s = in.readLine(); while (s != null) { System.out.println(s); s = in.readLine(); } catch (Exception e) { System.out.println("Fehler!"); }
3. Tag Algorithmen Liste Baum ‚grep‘ (Zustandsautomat) Tic/Tak/Toe
4.+5. Tag Simulation –WaTor (Fischteich) (Christian) –Waldpfad –Soziale Distanzen (Till) –PacMan RoboWars