Packages

Werbung
Packages
Einführung in Java
Folie 1 von 18
12. Mai 2011
Ivo Kronenberg
Inhalt
•
Umgang mit Packages
•
Klassenpfad
•
Import und Package Klausel
•
Archive
Packages | Ivo Kronenberg
12. Mai 2011
Folie 2 von 18
Motivation
•
Pro übersetzter Bytecode-Datei (Extension
.class): Bytecode einer Klasse
•
Grosses Programm: Viele Bytecode-Dateien
•
Organisatorische Probleme:
–
–
–
–
•
Orientierung im Code
Bezüge zwischen Klassen
Namenskonflikte zwischen gleich benannten Klassen
Abgrenzung von Programmteilen
Vergleichbar mit Dateien auf einer Festplatte
Packages | Ivo Kronenberg
12. Mai 2011
Folie 3 von 18
Packagepfad
•
Package ist Sammlung von logisch
zusammengehörenden Klassen.
•
Für Pakage-Namen (Bezeichner) gelten die
gleichen Regeln wie für Klassen.
•
Packages sind hierarchisch aufgebaut, sie
können verschachtelt werden.
•
Jedes Package definiert seinen eigenen
Namensraum.
•
Innerhalb eines Packages müssen die Namen
von Klassen, Interfaces und Sub-Packages
eindeutig sein.
Packages | Ivo Kronenberg
12. Mai 2011
Folie 4 von 18
Beispiel eines Packages
package ch.sws.projectx;
Packagename
Trennzeichen von Subpackages
ch
sw s
proj ectx
Class1
Packages | Ivo Kronenberg
Class2
12. Mai 2011
Folie 5 von 18
Dynamisches Laden von Bytecode
•
JVM lädt Klassen bei Bedarf , nicht beim
Programmstart
•
Vorteil: Schneller Start, nicht benutzte Klassen
werden überhaupt nicht geladen
•
Bedingung: Bytecode effizient lokalisierbar
•
Maßnahme: Packagepfad einer Klasse gibt
Lage des Bytecodes im Filesystem vor
Packages | Ivo Kronenberg
12. Mai 2011
Folie 6 von 18
Abbildung ins Filesystem
•
Direkte Zuordnung Packagepfad zu
Directorypfad im Filesystem
•
Problem:
– Packagenamen sind Java-Identifier
– Directorynamen sind Namen des Betriebssystems
•
Betriebssysteme schränken Directorynamen ein
⇒ Beispiel:
Klasse Rational im Package project51.datastore
suchen im Directory project51,
→ Subdirectory datastore,
→ Datei Rational.class
Packages | Ivo Kronenberg
12. Mai 2011
Folie 7 von 18
Klassenpfad
•
Umgebungsvariable CLASSPATH legt Startdirectory
fest, unter dem alle Bytecodedateien gesucht
werden
•
Kompletter Pfadname für eine Bytecodedatei:
CLASSPATH + Packagepfad + Klassenname +
.class
•
Beispiel (mit CLASSPATH=/home/developer):
/home/developer/project51/datastore/Rational.class
Klassenpfad
Packages | Ivo Kronenberg
Package
Klasse
12. Mai 2011
Folie 8 von 18
Alternative Startpunkte
•
CLASSPATH definiert eine Liste alternativer
Startpunkte
•
Trennzeichen zwischen Listeneinträgen
betriebssystemabhängig (Klassenvariable
java.io.File.pathSeparatorChar) ; Windows :
MacOSX, Linux
•
Beispiel (Windows):
CLASSPATH=.;C:\Userdata\Developers;E:\temp
;C:\My Files
•
Erster Treffer beendet die Suche, nachfolgende
Kandidaten werden ignoriert
•
Startpunkte werden nacheinander abgesucht ⇒
Reihenfolge der Einträge ist signifikant
Packages | Ivo Kronenberg
12. Mai 2011
Folie 9 von 18
Klassenpfad in Eclipse
•
In den Projekteinstellungen (Tastenkombination
Alt+Enter) wird der Klassenpfad für ein Projekt
gesetzt.
Packages | Ivo Kronenberg
12. Mai 2011
Folie 10 von 18
Organisationsschema
•
Packagepfad aus Internet-Domainnamen
ableiten
•
Toplevel-Domain liefert oberstes Package,
Subdomains untergeordnete Packages
•
Beispiel: Domainname dieser Fakultät ch.sws
•
Klassen aus dieser Domain unter dem
Packagepfad ch.sws
•
Weitere Packageorganisation Sache der
Projekte
Packages | Ivo Kronenberg
12. Mai 2011
Folie 11 von 18
Qualifizierte Namen
•
Qualifizierter Name = Packagepfad + Package-Element
Beispiel: project51.datastore.Rational
•
Qualifizierte Namen im gesamten Quelltext als Identifier
zulässig
project51.datastore.Rational r =
new project51.datastore.Rational(2, 3);
•
Syntax qualifizierter Namen ähnelt Elementzugriff,
Compiler erkennt zutreffende Bedeutung
•
Beispiel: java.io.File.pathSeparatorChar
zerfällt in
– Package java.io
– Klasse File
– Klassenvariable pathSeparatorChar
Packages | Ivo Kronenberg
12. Mai 2011
Folie 12 von 18
Import Klauseln
•
Klassen sind mit qualifizierten Namen über
Packagegrenzen hinweg ansprechbar
•
Einfacher mit import-Klausel
import packagepath.name;
Beispiel:
import project51.datastore.Rational;
Rational p = new Rational(2, 3);
•
Import aller Klassen eines Packages mit
Jokerzeichen import packagepath.*;
Beispiel:
import project51.datastore.*;
Rational p = new Rational(2, 3);
Packages | Ivo Kronenberg
12. Mai 2011
Folie 13 von 18
Package Klausel
•
import-Klauseln regeln Zugriff auf andere
Packages
•
Gegenstück: package-Klausel definiert
Packagezugehörigkeit einer Klassendefinition
•
Syntax package packagepath;
•
Beispiel:
package project51.datastore;
class Rational {...}
•
package-Klausel als Erstes im Quelltext vor
import-Klauseln und Definitionen
•
package-Klausel und Pfad im Filesystem
müssen übereinstimmen
Packages | Ivo Kronenberg
12. Mai 2011
Folie 14 von 18
Packages – Beispiel package und
import Klausel
package math.util;
import math.number.Complex;
import math.number.*; // alle Klassen
public class Calculator {
public static Complex square(Complex z) {
Complex v = new Complex();
v.re = z.re * z.re - z.im * z.im;
v.im = z.re * z.im + z.im * z.re;
return v;
}
...
}
Packages | Ivo Kronenberg
12. Mai 2011
Folie 15 von 18
Archive
•
Bytecode in einer gepackten Archivdatei =
alternative Organisationsform für Packages
•
Archivformat Jar (java archive), Dateien = „JarFiles“, Extension .jar
•
Technisch: Zip-Files mit Erweiterungen
•
Vorteile gegenüber Directories:
– Leicht zusammen zu halten
– Kompression für effiziente Übertragung
– Metainformation bzgl. Inhalt
•
Nachteile:
– Kein direkter Zugriff auf Bestandteile
– Kompression und Expansion kostet Rechenzeit
Packages | Ivo Kronenberg
12. Mai 2011
Folie 16 von 18
Archive Anwendung
•
Packagehierarchie in Jar-Files unverändert
•
JVM findet Bytecode in Jar-Files
•
Jar-Files im CLASSPATH: Gleichrangige
Eintrittspunkte für Packagepfade
CLASSPATH=/somewhere/project51.jar
Packages | Ivo Kronenberg
12. Mai 2011
Folie 17 von 18
Archive Metainformationen
•
Metainformation (= Verwaltungsdaten,
Information über das Jarfile) in der Datei
META-INF/MANIFEST.MF
•
Textdatei mit Zeilen der Form name:value
•
Wird automatisch angelegt mit StandardEinträgen der Art
Manifest-Version: 1.0
Created-By: 1.5.0_04 (Sun Microsystems Inc.)
•
Startklasse im MANIFEST.MF angeben:
Main-Class: ch.sws.projectx.Start
•
Klassenpfad erweitern:
Class-Path: name1.jar directory/name2.jar
Packages | Ivo Kronenberg
12. Mai 2011
Folie 18 von 18
Herunterladen