Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 14. Vorlesung WS 2001/2002 Übersicht • Pakete: Organisation von Projekten / Klassenbibliotheken – Definition und Verwendung von Paketen – Zugriffsrechte und –beschränkungen • Das Schlüsselwort final • Listen und Mengen (Collections) – Iteratoren T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 2 Pakete (engl. Packages) • Ein Paket stellt eine Klassenbibliothek mit einem Namen dar. • 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 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 3 Struktur von Paketen • Paket entspricht Verzeichnis (analog: Klasse Datei) • Gleicher Name für Paket und Verzeichnis • Unterverzeichnisse werden 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; T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 4 Beispiel für 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 Der vorangestellte Verzeichnispfad wird über die Umgebungsvariable CLASSPATH festgelegt. • befindet sich im Verzeichnis ...\java\util • Erster Befehl in allen Quelltextdateien des Pakets: package java.util; T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 5 Verwendung von Paketen • Zugriff auf Klassen im selben Paket: problemlos ohne besondere Kennzeichnung • Zugriff auf Klassen in anderem Paket: • Paketname vor Klassenname: java.util.LinkedList oder • import java.util.LinkedList bzw. import java.util.* und Zugriff über Klassennamen LinkedList T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 6 Das Default-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 – In einer Klasse des Default-Pakets kann ohne besondere Kennzeichnung auf alle anderen Klassen des Default-Pakets zugegriffen werden (z.B. bei der Erzeugen von Objekten mittels new) T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 7 Vordefinierte Pakete • Alle zum Java Developer Kit (JDK) gehörenden 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 JDK-Dokumentation c:/Programme/jdk1.3.1/docs/api/index.html T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 8 Das Standard-Paket • Import des sogenannten Standard-Pakets java.lang nicht erforderlich • dieses Paket enthält z.B. die Klassen • String • Math • System • Object T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 9 Zugriffsspezifikationen I • Zugriffsspezifikation regeln welche Klassen, Attribute und Methoden wo verwendet werden können. • Schlüsselwörter public, protected, private • wird keine Zugriffsspezifikation angegeben, gilt der default-Modus friendly • Differenziert für Klassen, Methoden, und Attribute • Wichtiges Konzept der Objektorientierung: Geheimnisprinzip: Verbergen von Details der Implementierung, Zugriff nur über klar definierte Schnittstellen T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 10 Zugriffsspezifikationen II • public: Zugriff von allen Klassen • friendly: Zugriff von Klassen im selben Paket, Zugriff nicht von Unterklassen in anderen Paketen geheimer • protected: Zugriff von Klassen im selben Paket, auch Zugriff von Unterklassen in anderen Paketen • private: Zugriff nur innerhalb derselben Klasse T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 11 Das Schlüsselwort final • Variablen mit vorangestelltem final sind Konstanten, d.h. sie dürfen nicht verändert werden Beispiel: final double PI = 3.141529; • Methoden mit vorangestelltem final dürfen nicht überlagert werden (kein Polymorphismus, effizienter) • Klassen mit vorangestelltem final dürfen keine Unterklassen haben (kein Polymorphismus, effizienter) Beispiel: public final class String ..... T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 12 Listen und Mengen: vordefinierte Containerklassen Einfache Container-Datenstrukturen Assoziative Datenstrukturen AbstractCollection AbstractMap keine Duplikate Set LinkedList ArrayList TreeSet sortiert Map HashSet TreeMap HashMap sortiert T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 13 Laufzeiten / Komplexität Klasse Einfügen/ Löschen Suchen Suchen mit Key LinkedList/ ArrayList const. O(n) TreeSet O(log n) O(log n) HashSet const. const. (mittel) TreeMap O(log n) O(log n) HashMap const. const.(mittel) T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 14 Listen/Mengen: gemeinsame Methoden • Hinzufügen: boolean add(Object o) • Suchen: boolean contains(Object o) • Holen: Object get(int index) • Größe: int size() • Löschen: boolean remove (Object o) • Löschen der ganzen Liste/Menge: boolean clear() T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 15 Listen/Mengen: Iteratoren • dienen zum sequentiellen Durchlaufen • Aufruf der Methode iterator() liefert ein Iterator-Objekt • Methoden von Iterator: • boolean hasNext() • Object next() • Beispiel: LinkedList ll = new LinkedList(); // ... Liste mit Werten füllen Iterator it = ll.iterator(); while(it.hasNext()) { Object o = it.next(); System.out.println(o); } T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 16 Ende der Vorlesung • Vorlesung ist zu Ende, aber Java nicht abschließend besprochen. Unbehandelte Konzepte: – Schnittstellen (engl. Interfaces) u.a. für Mehrfachvererbung – Geschachtelte Klassen, anonyme Klassen – Nebenläufigkeit (quasi-Parallelverarbeitung) mittels Threads – Grafikfähigkeiten von Java, Realisierung grafischer Benutzeroberflächen – Java innerhalb von WWW-Seiten: Applets • Vorschlag: Betrachtung bestimmter Bereiche im Rahmen einer Java-AG im Sommersemester 2002 – Termin wird am Schwarzen Brett ausgehängt T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 17