OOP mit Java

Werbung
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 {
public int a=0;
public void tuWas() {
}
public void tuNix() {
}
}
Klassen und Methoden
• Schreiben Sie die Klasse
,
kompilieren Sie sie und starten Sie sie.
(mit dem ASCII-Editor Ihrer Wahl)
public class meineKlasse {
public int 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 l
l l
o
o
W
o
r
l
d
.
W
o
r
l
d
.
Von Menschen und Geschlechtern
• Eigene Klassen...
menschen.java
public class menschen {
public static void main (String args[]) {
mann hans = new mann();
}
}
mann.java
public class mann {
}
Von Menschen und Geschlechtern
menschen.java
public class menschen {
public static void main (String args[]) {
mann hans = new mann();
hans.tuwas();
}
}
mann.java
public class mann {
public void tuwas() {
System.out.println("Fussball sehen...");
}
}
Von Menschen und Geschlechtern
• Schreiben Sie die Klasse ‚frau‘.
menschen.java
public class menschen {
public static void main (String args[]) {
mann hans = new mann();
frau emma = new frau();
hans.tuwas();
emma.tuwas();
}
}
Von Menschen und Geschlechtern
• Führen Sie eine ‚Warteschlange‘ ein.
menschen.java
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();
}
}
}
Von Menschen und Geschlechtern
• Jetzt kommt der Trick, wir möchten Männer
und Frauen in der Schlange stehen haben...
menschen.java
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();
}
}
}
Von Menschen und Geschlechtern
• Vererbung & co.
mensch.java
public class mensch {
public void tuwas() {
System.out.println("Ich bin nur einm Mensch...");
}
}
mann.java
public class mann extends mensch {
public void tuwas() {
System.out.println("Fussball sehen...");
}
}
Von Menschen und Geschlechtern
• (Warte-) Schlange...
menschen.java
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
Parameter lesen
• Unser ‚echo‘-Programm...
echo.java
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();
}
Anwendung
BufferedReader
InputStreamReader
InputStream
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
• Syntax
try {
// some code
}
catch (SomeException e1) {
// do something
}
catch (SomeOtherException e2) {
// do something else
}
finally {
// always executed
}
I/O - Lesen aus Datei
// 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();
}
Anwendung
BufferedReader
FileReader
File
I/O - Lesen aus einem String
// 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();
}
Anwendung
BufferedReader
StringReader
String
I/O - Lesen aus dem Netz
// Einlesen von URL
URL U = new URL("http://www.heise.de");
BufferedReader in = new BufferedReader(
new InputStreamReader(U.openStream()));
String s = in.readLine();
while (s != null) {
System.out.println(s);
s = in.readLine();
}
Anwendung
BufferedReader
InputStreamReader
URL
I/O - Ausgabe in Datei
// Ausgabe in Datei
try {
FileWriter fw = new FileWriter("y.dat"));
PrintWriter pw = new PrintWriter(fw);
pw.println("Hallo Welt!");
...
pw.close();
}
catch (Exception e) {
}
Anwendung
PrintWriter
FileWriter
File
I/O - Ausgabe mal anders
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) {
}
Anwendung
PrintWriter
GZIPOutputStream
FileOutputStream
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
Herunterladen