Packages in Java

Werbung
Packages in Java
Vortrag:
Melanie Reichel und Anja Weiß
10.1.2002
Was sind packages?
Wozu sind packages notwendig?
Verwendung von packages
Vordefinierte packages in Java
Klassen- und Paketnamen
Einbinden zusätzlicher Pakete
Das public- Attribut
Erstellen eigener Pakete
Beispiel
Was sind packages?
packages sind eine Möglichkeit, verwandte Klassen und
Schnittstellen zu gruppieren.
Sie ermöglichen es, dass Gruppen von Klassen nur bei Bedarf
verfügbar sind.
Sie beseitigen mögliche Namenskonflikte zwischen Klassen in
unterschiedlichen Gruppen von Klassen.
Ein Paket enthält eine beliebige Anzahl von Klassen, die nach Sinn,
Verwendung oder auf der Grundlage der Vererbung
zusammengefasst sind.
packages können auch andere Pakete enthalten und bilden damit
eine Hierarchieform, die ähnlich der Vererbungshierarchie ist.
Jede Ebene stellt eine kleinere und spezifischere Gruppe von
Klassen dar
Oberste Ebene heißt java.
Nächste Ebene kann z.B. io, net, util oder awt heißen.
Letzte Ebene kann dann z.B. das package image enthalten.
Um sich auf eine Klasse in einem Paket zu beziehen, muß man
alle Pakete angeben, in denen sich die Klasse befindet.
z.B.: Die Klasse Color befindet sich in dem package awt.
Dieses befindet sich im package java.
Um Color zu verwenden, muß man folgende Notation
verwenden:
java.awt.Color.
Die Klassenbibliotheken von JAVA befinden sich in dem Paket
java.
° Die Klassen in diesem Paket stehen in jeder Implementierung
von JAVA zur Verfügung.
° Dieses Paket enthält kleinere packages, die spezielle Teile
der Funktionalität von JAVA beinhalten, z.B. Dateiein- und
Ausgaben.
Wozu sind packages
notwendig?
Zur Organisation und Verwaltung von Klassen in Einheiten , um nur
die Elemente zu verwenden, die für ein Programm benötigt werden.
Sie reduzieren Namenskonflikte.
Pakete dienen dazu, Klassen, Variablen und Methoden in
größerem Umfang zu schützen, als dies auf der Basis von Klassen
möglich ist.
Sie lassen sich auch zu Identifikation verwenden.
Verwendung von packages
• Damit eine Klasse verwendet werden kann, muß angegeben werden,
in welchem package sie liegt.
• Dazu gibt es zwei unterschiedliche Möglichkeiten
1. - Die Klasse wird über ihren vollen Namen angesprochen.
- Die Klasse oder Pakete müssen nicht importiert werden, um sie
auf diese Art zu verwenden.
- In den Programmtext wird z.B. folgende Zeile eingefügt:
java.awt.Font f = new java.awt.Font()
- Diese Variante sollte nur dann verwendet werden, wenn eine
Klasse in einem Programm nur ein- oder zweimal auftritt.
2. - Eine Klasse wird über den Befehl import importiert.
- Man kann dabei genau eine Klasse oder ein komplettes
Klassenpaket importieren.
a) mit der folgenden Syntax wird genau eine Klasse
importiert.
import java.util.Vector ;
b) Wenn man ein komplettes Klassenpaket importiert,
werden alle Klassen, die als public erklärt wurden
importiert.
Es wird also folgender Befehl verwendet:
import java.awt.* ;
• Das package java.lang wird bei jedem Compileraufruf
automatisch importiert. Ein expliziter import davon ist niemals
nötig.
• Eigene Klassen in Programmen, die nicht zu irgendeinem
Paket gehören, werden in einem Standardpaket- das
Default-Paket -platziert.
• die Quelldateien werden im aktuellen Verzeichnis abgelegt, dort
kompiliert und automatisch eingebunden (ohne import
Anweisung)
Compiler braucht nur ein Default- Paket zur Verfügung zu
stellen, aber typischerweise hat jedes Verzeichnis die Rolle
eines Default- Paketes
Es können also beliebig viele Default- Pakete angelegt
werden, indem man einfach neues Unterverzeichnis anlegt
und Quelldatei dort ablegt
Vordefinierte Pakete in JDK
Der Umfang der Laufzeitbibliothek hat sich mit jeder neuen Version
erhöht
JDK 1.0 8 Standardpakete
JDK 1.1 22 Standardpakete
JDK 1.2 über 50 Standardpakete
JDK 1.3 über 70 Standardpakete
Paket
Bedeutung
java.applet
-
-
Applet kann als Teil des
Browsers arbeiten
kann Eingaben des
Benutzers
entgegennehmen etc
java.awt
- Grafikverarbeitung und
Aufbau grafischer Schnittstellen
java.awt.color
- unterschiedliche Systeme zur
Beschreibung von Farben
java.awt.datatransfer
- dient zur Kommunikation mit
der Zwischenablage
java.awt.dnd
- Drag&Drop Aktionen
java.awt.event
-
enthält Ereignismodell
java.awt.font
-
Schriften und einzelne Fonts
java.awt.geom
- unterstützt 2D- Geometrie
java.awt.im
- zur Eingabe von TastenSequenzen, die sich aus
mehreren Tastenschlägen
zusammensetzen
java.awt.image
- Verwaltung von BitmapBildern
java.awt.print
- dient zum Drucken
java.beans
- ermöglicht JavaBeansTechnologie
java.io
- Ein- und Ausgabeklassen für
Streams und Dateien
java.lang
Standard- Features von Java
- Sonderklassen, die je einem
primitiven Datentyp
entsprechen
-
java.math
- Klassen für Zahlen extremer
Größe
java.net
- zur Durchführung von
Netzoperationen z.B. URL‘s
java.rmi
- dient zur Erstellung verteilter
Java-zu-Java –Applikationen
java.security
- ermöglicht Implementierung
von Zertifikaten und digitalen
Unterschriften in JavaKomponenten
java.sql
- Verbindung von JavaApplikationen mit Datenbanken
java.text
- Formatierung von Objekten
wie z.B.: Zahlen↔ String
java.util
- unterstützt z.B. mit
Zufallszahlen,
Systemeigenschaften
Neben den Standardpaketen gibt es eine Reihe von
Standarderweiterungen, deren Paketname mit javax beginnt.
Sie sind nicht unbedingt Bestandteil eines jeden JavaEntwicklungssystems.
Sie stellen häufig gebrauchte Erweiterungen zur Verfügung,
deren Umfang die reinen Kernbibliotheken um ein Vielfaches
übertrifft.
javax.accessibility
- erweitert die Funktionalität
der Benutzerschnittstellen
eines Programms, dass diese
von Technologien u. a.
Spracherkennung verwendet
werden kann
javax.swing
-Grafische
Benutzerschnittstellen
- Swing- Komponenten könne
automatisch Look and Feel
einer Plattform annehmen
javax.swing.event
- Ereignisse von SwingKomponenten ausgelöst
javax.swing.undo
- Unterstützung von
Rückgängig- Kommandos
Klassen -und Paketnamen
Paketnamen bestehen aus mehreren Komponenten, die jeweils
durch einen Punkt voneinander getrennt sind.
Jeder Teil des mehrstufigen Paketnamens bezeichnet ein
Unterverzeichnis.
Nachdem man eine Klasse oder ein Paket importiert hat, kann man
sich auf eine Klasse einfach dadurch beziehen, indem man den
Namen ohne Paketidentifikation angibt.
AUSSER: Wenn mehrere Klassen desselben Namens in
unterschiedlichen packages vorhanden sind.
In diesem Fall muss man einen Bezug zur betreffenden Klasse
anhand des vollständigen Paketnamens einfügen.
Bsp.: importiert werden folgende beiden Pakete von
unterschiedlichen Autoren
import joeclasses.*;
import eleanorsclasses.*;
Innerhalb beider Pakete gibt es die Klasse Name mit einer
jeweilig anderen Bedeutung.
Wenn man folgendes eingibt, ist unklar, auf welche Klasse
Name sich bezogen werden soll:
Name myName = new Name(„Susan“);
Deshalb wird der vollständige Paketname eingefügt:
joeclasses.Name myName = new joeclasses.Name
(„Susan“);
um Dopelungen bei Paketnamen zu vermeiden, ist das
Domain- Namen- System zu empfehlen, da Domain-Namen
weltweit eindeutig sind
beim Paketnamen wird Domainname in umgekehrter
Reihenfolge benutzt z.B. de.tfh-berlin
Unterhalb des Basispaketes können Unterpakete beliebig
geschachtelt werden z.B. de.tfh-berlin.math3.dvg3
Einbinden zusätzlicher
packages
in der Praxis Verwendung von Paketen von Drittanbietern
um die Klassenpfade so kurz wie möglich zu halten, ist es günstig
Pakete in ein gemeinsames Unterverzeichnis zu legen
Vorgehensweise 1. anlegen eines Verzeichnisses z.B. H:\classes
oder Verzeichnis de, ein Verzeichnis tfh-berlin
in de etc.
2. abspeichern aller Pakete
dies funktioniert nur wenn Anbieter ihre
Klassendateien in Pakete ablegen
wenn dies nicht geschehen ist, empfiehlt es
sich die Klassen durch package- Anweisung
Paketen zuzuordnen
3. Classpath setzen
set CLASSPATH ==H:\classes
man muss diesen setzen damit Java
Klassen findet, denn ansonsten gibt
der Compiler eine Fehlermeldung aus
( die meisten Fehlermeldungen für nicht
ladbare Klassendateien werden durch
nicht vorhandene classpath- Variablen
erzeugt)
Das public- Attribut
Klassen verfügen über Paketschutz, d.h eine Klasse steht auch
allen anderen Klassen im Paket zur Verfügung, aber außerhalb
nicht zu sehen oder verfügbar
wenn Klassen auch außerhalb des betreffenden Paketes zur
Verfügung stehen sollen, muss man sie mit öffentlichen Schutz
versehen--- das Attribut public
wenn Klassen aus externen Paketen nicht public, bricht der
Compiler die Übersetzung mit einer Fehlermeldung ab
bei import- Anweisung mit * werden lediglich öffentliche Klassen
importiert
Warum soll Klasse verborgen bleiben?
damit Hilfsklassen und Verhalten zur Verfügung stehen, die
ausschließlich für die Implementierung notwendig sind
Erstellen eigener Pakete
Um eine Klasse einem ganz bestimmten Paket zuzuordnen, muss
am Anfang des Quelltextes die package- Anweisung stehen.
package paketname;
Da der Compiler eingebundene Quelldateien, die noch nicht
übersetzt sind, während der Übersetzung einer anderen Klasse
automatisch mitübersetzt, ist die Erstellung sehr einfach.
Bei Editplus folgt nach dem …javac.exe zunächst das
Zielverzeichnis, dann der classpath und zum Schluß der sourcepath
z.B. …javac.exe –d H:/classes –classpath H:/classes –sourcepath
H:/emma301
und hinter java.exe folgt nur der classpath
zur Dokumentation der Pakete mit javadoc fügt man
Ende hinzu
javadoc - . . . -classpath .\classes Namen der Pakete
javadoc
-d docs
-link "file://c:/jdk1.3.1/docs/api"
-sourcepath .\src
// Quellenpfad
-classpath .\classes
//Klassenpfad
src\ApplicationEMMA301Paint.java
// ausführende Datei (Quelle)
emma301
emma301.comp
//Pakete mit Klassen
emma301.rect
emma301.point
emma301.mpoint
emma301.utils
emma301
- AbstractGraphicalObject
- BasicStrokeChooser
- FontChooser
- GraphicalObject
- PaintChooser
- PointChooser
- EMMA301Paint
- EMMA301PaintFRame
rect
- Line
- Oval
- Rectangle
- RectangularGraphicalObject
comp
- Layer
- Picture
- CompsedGraphicalObject
mpoint
- Polygon
- Polyline
- PunktWolke
- MultiPointGraphicalObject
point
EMMA301Dot
- EMMA301Point
- EMMA301PointCircle
- EMMA301PointCross
- EMMÁ301PointGeneral
- EMMA301PointSquare
- OnePoint
utils
-
- EMMA301Utils
emma301
utils
rect
comp
mpoint
point
Herunterladen