10. Pakete Vorteile von Paketen Nutzung von Klassen aus Paketen

Werbung
10. Pakete
Grundlagen zu Paketen
10. Pakete
10. Pakete
Benutzung von Paketen
Nutzung von Klassen aus Paketen (1)
Ein Paket (package) bündelt thematisch zusammengehörige Klassen und Schnittstellen zu einer Klassenbibliothek.
Für die Nutzung von Klassen aus Paketen gibt es zwei Möglichkeiten:
• volle Qualifikation: Paket und Klassenname werden angegeben:
Beispiele:
java.awt.Point p = new java.awt.Point();
•
•
•
•
java.lang: Standardklassen zur Sprache Java
• Deklaration mit Hilfe von import: Es wird einmal angegeben, aus welchen Paketen Klassen importiert werden:
java.net: Klassen zur Netzwerkprogrammierung
java.io: Klassen für die Ein- und Ausgabe von Daten
import java.awt.Point;
java.awt: Klassen für graphische Oberflächen (Abstract Window Toolkit)
Point p = new Point();
Pakete haben einen Namen, den Paketnamen.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
10. Pakete
236
Grundlagen zu Paketen
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
10. Pakete
Vorteile von Paketen
238
Benutzung von Paketen
Nutzung von Klassen aus Paketen (2)
• Pakete bilden eigene Bereiche für die Sichtbarkeit. Dadurch kann mit Paketen eine
Datenkapselung erreicht werden.
• Jedes Paket bildet einen eigenen Namensraum. Damit können Namenskonflikte
vermieden werden und identische Namen für Klassen in verschiedenen Paketen
vergeben werden.
• Pakete sind gröbere Einheiten für die Strukturierung von objektorientierten Systemen als Klassen.
Um nicht alle Klassen eines Paketes einzeln angeben zu müssen, besteht die Möglichkeit, mit Hilfe des * alle Klassen zu importieren.
Die Anweisung
import java.awt.*;
importiert alle Klassen aus dem Paket java.awt.
☞ import steht zwischen einer optionalen package-Deklaration und dem Rest des
Quelltextes.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
237
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
239
10. Pakete
Benutzung von Paketen
10. Pakete
Nutzung von Klassen aus Paketen (3)
Pakete selber bauen
Die package-Deklaration
• Das Paket java.lang wird immer automatisch importiert.
• Mit Hilfe einer package-Deklaration können wir Quelltextteile Paketen zuordnen.
package Paketbezeichner;
• Sollten Klassen mit gleichem Namen aus verschiedenen Paketen importiert werden, muss eine volle Qualifikation erfolgen.
• Auch Pakete können hierarchisch strukturiert werden (Unterpakete).
• import bezieht die Unterpakete nicht automatisch mit ein!
• Die package-Deklaration muss vor allen anderen Anweisungen im Quelltext stehen.
• Hinter package wird ein hierarchisch aufgebauter Paketbezeichner als Paketname
angegeben.
package de.fhbrs.inf.meinPaket;
import java.awt.*;
import java.awt.geom.*;
• Wirkung: Alle Klassen und Schnittstellendefinitionen der Übersetzungseinheit
(.java-Datei), werden dem Paket de.fhbrs.inf.meinPaket zugeordnet.
• Natürlich können auch andere .java-Dateien diesem Paket zugeordnet werden.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
10. Pakete
240
Benutzung von Paketen
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
10. Pakete
242
Pakete selber bauen
Paketnamen
Statischer Import
Klassenmethoden bzw. Konstanten werden über den Methodennamen (bzw. Konstantennamen) in Verbindung mit dem Klassennamen angesprochen.
double x = Math.sin( Math.PI/4 );
Seit Java 5 können Klassenmethoden und Konstanten statisch importiert werden:
•
•
•
•
Für die weltweite Eindeutigkeit: häufig umgedrehte Domainnamen
Für die hierarchische Strukturierung ist der Punkt erlaubt.
Dagegen ist leider kein “–” in Paketnamen erlaubt.
Die Paketnamen java, javax und sun sind reserviert.
import static java.lang.Math.sin;
import static java.lang.Math.PI;
double x = sin( PI/4 );
Auch beim statischen Import ist der Einsatz von * möglich.
Ein statischer Import ist auch für überladene Klassenmethoden möglich.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
241
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
243
10. Pakete
Pakete selber bauen
10. Pakete
Default-Package
Pakete selber bauen
C LASSPATH
Was passiert, wenn wir keine package-Deklaration angeben?
• Die Quelltextteile werden einem sogenannten Default-Package zugeordnet.
• Zu diesem Default-Package gehören alle Übersetzungseinheiten des lokalen Verzeichnisses, die nicht einem Paket zugeordnet sind.
• Daher müssen wir uns bei kleinen Anwendungen nicht um die Paketorganisation
kümmern.
• Wenn sich nicht alle class-Dateien im lokalen Verzeichnis befinden, muss die
virtuelle Maschine wissen, wo sie nach class-Dateien suchen soll.
• Hierzu dient die Umgebungsvariable CLASSPATH.
• Genauer: Im C LASSPATH werden die Verzeichnisse aufgelistet, in denen nach Paketen gesucht wird.
• Mit
CLASSPATH=/projekte/projekt1/classes
werden die Klassen paket1.klasse1, paket1.klasse2 und auch paket1.sub1.klasse3
gefunden.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
244
10. Pakete
Pakete selber bauen
Verzeichnisstruktur für Pakete
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
10. Pakete
246
Pakete selber bauen
jar-Dateien
projekte
• In der Regel setzen wir für
die Entwicklung die Paketstruktur eins zu eins auf eine Dateistruktur um.
• Verzeichnisse tragen den
Paketnamen.
• Die zum Paket gehörigen
Klassen werden in den
entsprechenden Verzeichnissen abgelegt.
lib
paket1
sub1
Klasse1
projekt1
projekt2
classes
doc
• Für die Auslieferung einer Klassenbiblothek ist es einfacher, wenn sich die gesamte Bibliothek in einer Datei befindet, statt in einer losen Sammlung von classDateien.
• Dies ist mit jar-Dateien möglich.
• Eine jar-Datei ist eine Zusammenstellung von Dateien in einer einzigen Datei.
• Erzeugung von jar-Dateien: siehe Hinweise auf der Homepage.
• jar-Dateien können im C LASSPATH verwendet werden.
• $ cd /projekte/projekt1/classes
$ jar cf ../lib/projekt1.jar paket1 paket2
$ CLASSPATH=/projekte/projekt1/lib/projekt1.jar
Damit werden die Klassen aus den Paketen paket1, paket2 und paket1.sub1
gefunden.
paket2
Klasse2
sub2
Klasse3
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
245
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
247
10. Pakete
Zugriffsmodifikatoren und Zugriffsrechte
Verwendung von Zugriffsmodifikatoren
• Zur Regelung der Zugriffsrechte gibt es in Java die Modifikatoren public,
protected und private.
• Ohne Zugriffsmodifikator besteht das Zugriffsrecht default.
• Beachten Sie: default ist kein Schlüsselwort.
• Für Klassen sind die Zugriffsrechte public und default möglich.
• Für Klassen- bzw. Instanzvariablen und -methoden sind möglich: default,
public, protected und private.
• Variablen und Methoden innerhalb von Schnittstellen sind implizit public.
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
10. Pakete
248
Zugriffsmodifikatoren und Zugriffsrechte
Zugriffsrechte für Variablen und Methoden
Klasse A
Klasse B
gleiches Paket
Subklasse C
gleiches Paket
Klasse D
anderes Paket
Subklasse E
anderes Paket
private
default
protected
public
ja
ja
ja
ja
nein
ja
ja
ja
nein
ja
ja
ja
nein
nein
nein
ja
nein
nein
ja/nein
ja
Peter Becker, Programiersprache Java — FH Bonn-Rhein-Sieg, SS 08
249
Herunterladen