Java-Kurs - 11. Übung • Besprechung der Hausaufgabe • Strukturierung von Programmen: Pakete • Zugriffsspezifikationen (public, private, ...) • Statische Methoden und Attribute • Beispiel für vordefinierte Klassen: LinkedList Hausaufgabe 9 • Implementieren Sie die drei Klassen Polygon, Dreieck und Rechteck aus dem UML-Diagramm. Polygon soll eine Abstrakte Klasse sein. Polygon Dreieck Rechteck • Erweitern Sie jede der drei Klassen um die Methode umfang(). Diese ist bei Polygon abstrakt. • Erzeugen Sie ein Array, das Dreiecke und Rechtecke enthält. • Berechnen Sie die Summe der Umfänge aller Dreiecke und Rechtecke im Array. Pakete (Packages) • dienen zur Strukturierung von Programmen (oberhalb von Klassen) • weiterer Zweck: Eindeutigkeit von Klassen mit demselben Namen • Paket entspricht Verzeichnis (analog: Klasse - Datei) • Gleicher Name für Paket und Verzeichnis • Bei Unterverzeichnissen mit Punkt "." verbunden • Zugehörigkeit zu Paket: explizit durch Befehl package • Beispiel Beispiel für Paket: java.util • In Java vordefiniertes Paket • in Verzeichnis java/util • Paketname: java.util • Erster Befehl in allen Dateien des Pakets: package java.util; Verwendung von Paketen • Zugriff auf Klassen im selben Paket: problemlos • Zugriff auf Klassen in anderem Paket: a) Paketname vor Klassenname: java.util.LinkedList oder b)import java.util.LinkedList bzw. import java.util.* und Zugriff über Klassennamen LinkedList Default-Paket • alle Klassen in Verzeichnissen, die im Forte Explorer unmittelbar verbunden sind, gehören zum Default Paket • hier weder package- noch import-Befehl nötig Vordefinierte Pakete • In Java sind sehr viele nützliche Pakete vordefiniert (Bibliotheken), z.B. für Listen, Suchstrukturen, Benutzeroberflächen, Graphik, ... • Übersicht: Öffnen der Datei c:/Programme/jdk1.3/docs/api/index.html Standard-Paket • Import des Pakets java.lang nicht erforderlich • dieses Paket enthält z.B. die Klassen • String • Math • System • Object Zugriffsspezifikationen I • Welche Klassen, Attribute und Methoden können wo verwendet werden? • Schlüsselwörter public, protected, private • Differenziert für Klassen, Methoden, und Attribute • Wichtiges Konzept der Objektorientierung: Geheimnisprinzip: Verbergen von Details der Implementierung, Zugriff nur über klar definierte Schnittstellen Zugriffsspezifikationen II public: Zugriff von allen Klassen • protected: Zugriff von Klassen im selben Paket, auch Zugriff von Unterklassen in anderen Paketen • package (oder keine Angabe): Zugriff von Klassen im selben Paket, Zugriff nicht von Unterklassen in anderen Paketen • private: Zugriff nur innerhalb derselben Klasse geheimer • Statische Methoden • Bisher: Aufruf von Methoden nur für Objekte • Oft Methode ohne Bezug zu Objekt erforderlich • Beispiel: Berechnung der Quadratwurzel, Methode sqrt der Klasse Math: double d = Math.sqrt(23); • Methode sqrt ist statisch, Deklaration: public static double sqrt(double a){...} • Aufruf einer statischen Methode: Klassenname.Methodenname Statische Attribute • Bisher: Attribute gehören zu Objekten; jedes erzeugte Objekt hat eigenen Attributwert • Oft Attributwert erforderlich, der Eigenschaft der Klasse ist (nicht des Objekts) • Beispiel: Mitführen der Anzahl der bisher erzeugten Objekte der Klasse Dreieck • statisches Attribut anzahl der Klasse Dreieck: class dreieck{ static double anzahl; ...} • Alle Instanzen von Dreieck greifen auf denselben Wert Anzahl zu Schlüsselwort final • Attribute mit vorangestelltem final sind Konstanten, d.h. sie dürfen nicht verändert werden • Methoden mit vorangestelltem final dürfen nicht überlagert werden (kein Polymorphismus, effizienter) • Klassen mit vorangestelltem final dürfen keine Unterklassen haben (kein Polymorphismus, effizienter) Bsp: public final class String ..... Beispiel für vordefinierte Klassen: LinkedList • Abstrakter Datentyp für Liste (vgl. Vorlesung "Diskrete Mathe") • Elementtyp: Object • Paket: java.util • Schnittstelle: • boolean add(Object o) • void add(int index, Object element) • Object get(int index) • void clear() • int size() Typkonvertierung • Erforderlich, wenn Variable vom Typ einer Oberklasse ist, aber auf Eigenschaften der Unterklasse zugegriffen werden soll (und tatsächlich Unterklasse vorliegt) • Beispiel: Object o = ......; Dreieck d = (Dreieck) o; double u = d.Umfang(); • Vorsicht: Laufzeitfehler, wenn Konvertierung nicht gelingt Hausaufgabe 10 • Erzeugen Sie mindestens zehn verschiedene Dreiecke (vgl. Hausaufgabe 9) und fügen Sie diese in eine LinkedList ein. Durchlaufen Sie die LinkedList und fügen Sie die Dreiecke, deren Umfang kleiner als ein Wert x ist, in eine neue LinkedList ein. Drucken Sie diese LinkedList aus (Der Wert x sollte so gewählt werden, dass diese Liste nicht leer ist).