Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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.

Ähnliche Präsentationen


Präsentation zum Thema: "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."—  Präsentation transkript:

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

2 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/032 Übersicht Besprechung der Hausaufgabe Generalisierung/ Spezialisierung –Polymorphismus/Dynamisches Binden Pakete vordefinierte Listen

3 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/033 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.

4 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/034 Hausaufgabe: Lösung class 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");

5 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/035 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 Person d.ausgabe();//geerbt von Person pr.ausgabe();//geerbt von Person

6 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/036 Ü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

7 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/037 Ü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

8 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/038 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

9 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/039 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)

10 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0310 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)

11 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0311 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 ; –Beispiel: package mein_eigenes_Paket;

12 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0312 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.

13 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0313 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.*;

14 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0314 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

15 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0315 import: Beispiel import java.util.*; import java.io.File; //Klassen LinkedList und Date sind aus Paket java.util LinkedList l = new LinkedList(); Date d = new Date(); //Klasse File ist aus Paket java.io File f = new File(); //Klasse Applet ist aus Paket java.applet java.applet.Applet a = new java.applet.Applet ();

16 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0316 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

17 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0317 Pakete: Beispiel Fehler, da Volumen in anderem Paket ist und nicht im Default-Paket

18 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0318 Pakete: Beispiel

19 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0319 Pakete: Beispiel

20 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0320 Pakete: Beispiel Fehler, da Dreieck.java nicht zum Paket mit Klasse Flaeche (Geometrie.Zweidimensional) gehört

21 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0321 Erzeugen von Paketen in Forte Erzeugt Pakete und die entsprechenden package-Befehle in Dateien automatisch

22 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0322 Ü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.

23 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0323 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 c:/Programme/jdk1.3.1/docs/api/index.html

24 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0324 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

25 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0325 LinkedList: Beispiel import java.util.LinkedList;..... LinkedList l = new LinkedList(); //Listenobj. erzeugen Person 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; //Typkonvertierung System.out.println(l.size()); //gibt 3 aus l.clear(); System.out.println(l.size()); //gibt 0 aus

26 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0326 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

27 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0327 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); }

28 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0328 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

29 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0329 Ü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;}

30 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0330 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.


Herunterladen ppt "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."

Ähnliche Präsentationen


Google-Anzeigen