Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger...

30
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003

Transcript of Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger...

Page 1: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

Institut für Kartographie und GeoinformationProf. Dr. Lutz Plümer, Dr. Gerhard Gröger

Einführung in die Programmierung mit Java

9. Vorlesung WS 2002/2003

Page 2: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

2 2

Übersicht

• Besprechung der Hausaufgabe

• Generalisierung/ Spezialisierung

– Polymorphismus/Dynamisches Binden

• Pakete

• vordefinierte Listen

Page 3: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

3 3

Hausaufgabe

• Ergänzt die vorgestellten Klassen „Person“, „Student“ und "Mitarbeiter" um die Klasse „Dozent“ (Unterklassen von Person). Die Unterklasse „Dozent“ soll dabei noch weiter in „Professor“ und „Assistent“ unterschieden werden.

• Erzeugt ein Objekt jeder Klasse und initialisiert dieses mit Beispieldaten.

• Erzeugt ein Array, das Professoren und Assistenten speichert. Füllt dieses mit einigen Objekten.

Page 4: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

4 4

Hausaufgabe: Lösungclass Person{String nachname;

Person(String nach){nachname = nach;}}class Dozent extends Person{String fach;

Dozent(String nach, String f) {super(nach), fach = f;}}class Assistent extends Dozent{int vertragsdauer;

Assistent(String nach, String f, int d){super(nach, f), vertragsdauer = d;}}

class Professor extends Dozent{String besoldungsGr;Professor(String nach, String f, String bg)

{super(nach, f), besoldungsGr = bg;}}

//von Außen (z.B. in main):Dozent [] dArray = new Dozent[3];dArray[0] = new Assistent("Kolbe","GIS",3);dArray[1] = new Professor("Plümer","GIS","C4");dArray[2] = new Professor("Förstner","Photo","C4");

Page 5: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

5 5

Wdh: Vererbung von Methoden

class Person{String nachname;void ausgabe(){System.out.println(nachname);}

}class Dozent extends Person{String fach;}class Professor extends Dozent{String besoldungsGr;}

...Person p = new Person();Dozent d = new Dozent();Professor pr = new Professor();p.ausgabe(); //Methode von Persond.ausgabe(); //geerbt von Personpr.ausgabe(); //geerbt von Person

Page 6: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

6 6

Überlagerung von Methoden• Beispiel:

class Person{String nachname;void ausgabe(){System.out.println(nachname);}}

class Dozent extends Person{String fach;void ausgabe(){System.out.println(nachname

+ " " + fach);}}class Professor extends Dozent{String besoldungsGr;

void ausgabe(){System.out.println(nachname + " " + fach + " " + besoldungsGr);}}

• Eine Methode einer Unterklasse kann denselben Namen (z. B. ausgabe) und dieselbe Anzahl (z. B. 0) / denselben Typ der Parameter wie eine Methode einer Oberklassen haben

• Die Methode der Unterklasse überlagert die gleichnamige Methode der Oberklasse

• Es findet keine Vererbung statt

Page 7: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

7 7

Überlagerung von Methoden

• Bei Überlagerung von Methoden spricht man von Polymorphismus• Überlagerte Methoden sind beim Aufruf nicht unterscheidbar• Frage: Welche Methode wird verwendet?• Antwort: die der Klasse des Objekts, nicht die der Klasse der Referenzvariablen• Beispiel: (wie eben mit überlagerter Methode ausgabe())

Professor pr = new Professor();Person p = pr;p.ausgabe();//ausgabe() von Professor, nicht von Person

• Dies wird als Dynamisches Binden bezeichnet

Page 8: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

8 8

Dynamisches Binden: Beispiel

class Person{...void ausgabe(){...}}class Dozent extends Person{...void ausgabe(){...}}class Professor extends Dozent{...void ausgabe(){...}}//von Außen (z.B. in main):Person [] pArray = new Person[1000];pArray[0] = new Assistent("Kolbe","GIS",3);pArray[1] = new Person("Schmitz");....................pArray[999] = new Professor("Förstner","Photo","C4");for(int i = 0 ; i < 1000 ; i = i + 1)

pArray[i].ausgabe();//Welche der drei Methoden "ausgabe" aufgerufen wird,//wird zur Laufzeit ("dynamisch") abhängig von der//Klasse (Person, Dozent oder Prof) des Objekts an//pArray[i] entschieden

Page 9: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

9 9

Dynamisches Binden: Vorteil

• Die nachträgliche Ergänzung der Klassenhierarchie erfordert nicht, dass die Routine zur Ausgabe:

for(int i = 0 ; i < 1000 ; i = i + 1) pArray[i].ausgabe();

geändert werden muss• Wird z.B. die Juniorprofessur eingeführt (neue

Unterklasse von Dozent), so muss der Aufruf der Ausgabe nicht angepasst werden (wohl jedoch die Ausgabeprozedur für Juniorprofessoren selber)

Page 10: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

10 10

Pakete (engl. Packages)

• Pakete dienen zur Strukturierung von Programmen oberhalb von Klassen.

• Jedes Paket bildet einen eigenen Namensraum– Innerhalb eines Namensraumes dürfen keine gleichnamigen

Klassen existieren– ergo: in unterschiedlichen Paketen dürfen identische Namen für

Klassen vergeben werden.

• Pakete bilden eigene Bereiche für den Zugriffsschutz (...später)

Page 11: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

11 11

Struktur von Paketen

• Paket entspricht Verzeichnis (analog: Klasse Datei)

• Gleicher Name für Paket und Verzeichnis

– Verzeichnis: durch Backslash "\"verbunden

– Paket: durch Punkt "." verbunden

– Beispiel: Paket java.io entspricht Verzeichnis java\io

• Ein Paket wird definiert, indem alle Dateien des Pakets am Dateianfang mit der Deklaration des Paketnamens versehen werden

– Syntax: package <Paketname>;

– Beispiel: package mein_eigenes_Paket;

Page 12: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

12 12

Beispiel für vordefinierte Pakete: java.util

• im Java Developer Kit (JDK) vordefiniertes Paket; beinhaltet u.a. Klassen für

– Container-Klassen wie Vector, List, Mengen etc.

– Arrays

– Datums- und Zeitberechnungen

• Paketname: java.util

• befindet sich im Verzeichnis ...\java\util

• Erster Befehl in allen Quelltextdateien des Pakets: package java.util;

Der vorangestellte Verzeichnispfad wird über die Umgebungsvariable CLASSPATH festgelegt.

Der vorangestellte Verzeichnispfad wird über die Umgebungsvariable CLASSPATH festgelegt.

Page 13: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

13 13

Pakete: Zugriff auf Klassen• Zugriff auf Klassen im selben Paket:

• mit Klassenname (wie bisher)

• In Forte unmittelbar verbundene Dateien sind im selben Paket

• Zugriff auf Klasse X in einem anderem Paket P:

1. mit P.X (z.B. java.util.LinkedList)

2. mit X, (z.B. LinkedList), wenn Klasse P.X importiert wird: import P.X;z.B. import java.util.LinkedList;

3. mit X, (z.B. LinkedList), wenn ganzes Paket importiert wird: import P.*;z.B. import java.util.*;

Page 14: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

14 14

import-Anweisung

• muss erste Anweisung in einer Datei sein• Befehl: import Paketname.*;

– importiert alle Klassen im Paket "Paketname"– auf diese kann in dieser Datei nur mit Klassennamen

zugegriffen werden

• Befehl: import Paketname.Klassenname;– importiert nur die Klasse "Klassenname" aus dem Paket

"Paketname".– auf dies kann in dieser Datei nur mit Klassennamen

zugegriffen werden

Page 15: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

15 15

import: Beispiel

import java.util.*;import java.io.File;..............//Klassen LinkedList und Date sind aus Paket java.utilLinkedList l = new LinkedList();Date d = new Date();

//Klasse File ist aus Paket java.ioFile f = new File();

//Klasse Applet ist aus Paket java.appletjava.applet.Applet a = new java.applet.Applet ();

Page 16: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

16 16

Das Default- und das Standard-Paket

• Alle Klassen in Verzeichnissen, die im Forté Explorer unmittelbar verbunden sind, gehören zum sog. Default-Paket

• hier sind weder package- noch import-Anweisungen nötig (wie bisher)

– es kann auf alle anderen Klassen des Default-Pakets zugegriffen werden (z.B. bei der Erzeugen von Objekten mittels new)

• Import des sogenannten Standard-Pakets java.lang (vordefiniert) nicht erforderlich

• dieses Paket enthält z.B. die Klassen

• String, Math, System, Object

Page 17: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

17 17

Pakete: Beispiel

Fehler, da Volumen in anderem Paket ist und nichtim Default-Paket

Page 18: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

18 18

Pakete: Beispiel

Page 19: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

19 19

Pakete: Beispiel

Page 20: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

20 20

Pakete: Beispiel

Fehler, da Dreieck.java nicht zum Paket mitKlasse Flaeche (Geometrie.Zweidimensional) gehört

Page 21: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

21 21

Erzeugen von Paketen in Forte

Erzeugt Pakete und die entsprechenden package-Befehle in Dateien automatisch

Page 22: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

22 22

Übungsaufgabe

• Erzeugt zwei Pakete "Feature" und "Geometrie". Das Paket "Feature" soll Unterpakete "Gebaeude" und "Strasse" haben, wobei "Gebaeude" die Klassen "Kirche" und "Einfamilienhaus" und "Strasse" die Klassen "Autobahn" und "Landesstrasse" enthalten soll. Das Paket Geometrie soll die Klassen "Punkt", "Linie" und "Flaeche" enthalten.

• Erzeugt im Konstruktor der Klasse Autobahn ein Objekt der Klasse Linie.

Page 23: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

23 23

Vordefinierte Pakete

• Alle zum Java Developer Kit (JDK) gehörenden vordefinierten Klassen sind in Paketen untergebracht.

• In Java sind sehr viele nützliche Pakete im Sinne von Standardbibliotheken vordefiniert z.B. für Listen, Suchstrukturen, Benutzeroberflächen, Graphik, Ein- und Ausgabe etc.

• Übersicht: Öffnen der Startdatei der JavaDoc (JDK-Dokumentation) c:/Programme/jdk1.3.1/docs/api/index.html

Page 24: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

24 24

Vordefinierte Listen: Klasse LinkedList

• Datentyp für Liste (vgl. Vorlesung "Diskrete Mathe")• Anzahl der Elemente beliebig erweiterbar (im Ggs. zu

Arrays)• Elementtyp: Object• Paket: java.util, muss importiert werden• Methoden:

• boolean add(Object o)• void add(int index, Object element)• Object get(int index) //Index beginnt bei 0• void clear()• int size()• weitere Methoden in JavaDoc

Page 25: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

25 25

LinkedList: Beispiel

import java.util.LinkedList;.....LinkedList l = new LinkedList(); //Listenobj. erzeugenPerson p = new Person();Professor pr = new Professor();Assistent a = new Assistent();l.add(p);l.add(pr);l.add(a);Objekt o = l.get(1); //o referenziert den Prof.Professor pp = (Professor) o; //TypkonvertierungSystem.out.println(l.size()); //gibt 3 ausl.clear();System.out.println(l.size()); //gibt 0 aus

Page 26: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

26 26

Listen: Iteratoren• dienen zum sequentiellen Durchlaufen durch eine Liste• Iteratoren sind eigene Objekte, die mit der Liste eng

verbunden sind• Iterator-Objekt wird durch Aufruf der Methode iterator() für

Liste geliefert• Methoden der Klasse Iterator:

• boolean hasNext(): wahr, wenn Durchlauf noch nicht fertig• Object next(): liefert nächstes Listenelement, setzt Zeiger ein

Element weiter• Iteratoren führen intern einen Zeiger auf Listenelemente

mit• Iterator ist verbraucht, wenn Ende der Liste erreicht• Eine Liste kann beliebig viele Iteratoren haben

Page 27: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

27 27

Iteratoren: Beispiel

import java.util.LinkedList;

LinkedList ll = new LinkedList();// Liste mit Werten füllen:ll.add(new Person());ll.add(new Professor());//Liste Durchlaufen:Iterator it = ll.iterator();while(it.hasNext()) {

Object o = it.next();System.out.println(o);

}

Page 28: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

28 28

Wh.: Typkonvertierung• Erforderlich, wenn Variable vom Typ einer Oberklasse ist, aber auf

Eigenschaften der Unterklasse zugegriffen werden soll (und tatsächlich Unterklasse vorliegt)

• Bei LinkedList erforderlich, da Elemente vom allgemeinsten Typ Object

• Beispiel:Object o = iterator.next();if( o instanceof Professor ){

Professor d = (Professor) o;String s = d.Besoldungsgruppe;

}

• instanceof dient zur Sicherstellung, dass Konvertierung gelingen wird

Page 29: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

29 29

Übungsaufgabe• Schreibt ein Programm, dass in einer LinkedList it Personen

nach einem Professor mit Namen "Plümer" sucht und diesen ausgibt. Testet das Programm mit geeigneten Elementen.

• Beispiel für Syntax:

LinkedList ll = new LinkedList();Person p1 = new Person();Professor p2 = new Professor();ll.add(p1); ll.add(p2);Iterator it = ll.iterator();while(it.hasNext()) {

Object o = it.next();if(o instanceof Person)

Person p = (Person) o;}

Page 30: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 9. Vorlesung WS 2002/2003.

G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/03

30 30

Hausaufgabe

• Schreibt ein Programm, das die Reihenfolge der Elemente in einer beliebigen LinkedList umdreht und das Ergebnis in einer neuen LinkedList speichert. Testet das Programm mit geeigneten Elementen.