java.util

Werbung
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).
Herunterladen