PKJ 2005/1Stefan Dissmann
Zusammenfassung
Bisher im Kurs erarbeitete Konzepte(1):
• Umgang mit einfachen Datentypen• Umgang mit Feldern • Umgang mit Referenzen
• strukturierte Programmierung mit Schleifen und bedingten Anweisungen
• Methoden (auch als Funktionen)• rekursive Methoden
PKJ 2005/2Stefan Dissmann
Zusammenfassung
Bisher im Kurs erarbeitete Konzepte(2):
• Klassen• Attribute und Methoden für Instanzen • Zugriffsrechte• Vererbung und Kompatibilität• abstrakte Klassen• Interfaces und Implementierung• (statische) Klassenattribute und -methoden
PKJ 2005/3Stefan Dissmann
Große Strukturierungseinheiten
Die ansprechbare Strukturierungseinheit in JAVA ist die
Klasse
PKJ 2005/4Stefan Dissmann
Große Strukturierungseinheiten
Die ansprechbare Strukturierungseinheit in JAVA ist die
Klasse
Bezug zum Betriebssystem:genau 1 public class je Datei
PKJ 2005/5Stefan Dissmann
Große Strukturierungseinheiten
Die ansprechbare Strukturierungseinheit in JAVA-Programmen ist die
Klasse
Bezug zum Betriebssystem:genau 1 public class je Datei
Liste.java
public class Liste
{ … }
PKJ 2005/6Stefan Dissmann
Große Strukturierungseinheiten
Die ansprechbare Strukturierungseinheit in JAVA-Programmen ist die
Klasse
Bezug zum Betriebssystem:genau 1 public class je Datei,
da der JAVA-Compiler Klassen überDateinamen findet
Liste.java
public class Liste
{ … }
PKJ 2005/7Stefan Dissmann
Große Strukturierungseinheiten
Bis jetzt besteht also ein großes Projekt aussehr vielen einzelnen Dateien mit JAVA-Klassen.
Probleme:• Finden von solchen Dateien• Verbergen von solchen Dateien• Zusammengehörigkeit von solchen Dateien• Namenskonflikte
PKJ 2005/8Stefan Dissmann
Große Strukturierungseinheiten
Bis jetzt besteht also ein großes Projekt aussehr vielen einzelnen Dateien mit JAVA-Klassen.
Probleme:• Finden von solchen Dateien• Verbergen von solchen Dateien• Zusammengehörigkeit von solchen Dateien• Namenskonflikte
Lösung:
Paket (als übergeordnete Struktur)
PKJ 2005/9Stefan Dissmann
Pakete
Paket in JAVA entspricht
Verzeichnis im Betriebssystem
PKJ 2005/10Stefan Dissmann
Pakete
Paket in JAVA entspricht
Verzeichnis im Betriebssystem
alle Dateien (Klassen) eines Pakets werden in einem Verzeichnis
abgelegt!
Paket bildet eigenen Namensraum
Paket dient nur der statischen Strukturierung
PKJ 2005/11Stefan Dissmann
Pakete
Pakete werden implizit geschaffen:• Verzeichnis anlegen• JAVA-Dateien im Verzeichnis ablegen• JAVA-Dateien dem Paket zuordnen
PKJ 2005/12Stefan Dissmann
Pakete
Pakete werden implizit geschaffen:• Verzeichnis anlegen• JAVA-Dateien im Verzeichnis ablegen• JAVA-Dateien dem Paket zuordnen
Zuordnung einer JAVA-Datei zu einem Paket:package-Angabe in der ersten Zeile
package paketname ;
PKJ 2005/13Stefan Dissmann
Pakete - Anlegen
Beispiel:Liste.java
public class Liste
{ … }
PKJ 2005/14Stefan Dissmann
Pakete - Anlegen
Beispiel:Liste.java
public class Liste
{ … }
speicher
PKJ 2005/15Stefan Dissmann
Pakete - Anlegen
Beispiel:Liste.java
package speicher;
public class Liste
{ … }
speicher
PKJ 2005/16Stefan Dissmann
Pakete - Anlegen
Liste.java
package speicher;
public class Liste
{ … }
Menge.java
package speicher;
public class Menge
{ … }
Map.java
package speicher;
public class Map
{ … }
speicher
PKJ 2005/17Stefan Dissmann
Pakete - Anlegen
Liste.java
package speicher;
public class Liste
{ … }
Menge.java
package speicher;
public class Menge
{ … }
Map.java
package speicher;
public class Map
{ … }
speicher
Zugriff möglich
PKJ 2005/18Stefan Dissmann
Klassen aus fremden Paketen nutzen
Zwei Möglichkeiten:
• Paket-Pfad vor Namen angeben:speicher.Liste
• Namensraum erweitern:import
speicher.Liste;
PKJ 2005/19Stefan Dissmann
Klassen aus fremden Paketen nutzen
Zwei Möglichkeiten:
• Paket-Pfad vor Namen angeben:speicher.Liste
• Namensraum erweitern:import
speicher.Liste;
auch möglich: import speicher.*;
PKJ 2005/20Stefan Dissmann
Klassen aus fremden Paketen nutzen
Zwei Möglichkeiten:
• Paket-Pfad vor Namen angeben:speicher.Liste
• Namensraum erweitern:import
speicher.Liste;
auch möglich: import speicher.*;
oder auch: Kombination beider Möglichkeiten
PKJ 2005/21Stefan Dissmann
Pakete - Nutzen
Liste.javapackage speicher;
public class Liste
{ … }
Menge.javapackage speicher;
public class Menge
{ … }
Map.javapackage speicher;
public class Map
{ … }
speicher
Verwaltung.java
package projekt;
public class Verwaltung
{
…
speicher.Liste l = new …
…
}
projekt
PKJ 2005/22Stefan Dissmann
Pakete - Nutzen
Liste.javapackage speicher;
public class Liste
{ … }
Menge.javapackage speicher;
public class Menge
{ … }
Map.javapackage speicher;
public class Map
{ … }
speicher
Verwaltung.java
package projekt;
public class Verwaltung
{
…
speicher.Liste l = new …
…
}
projekt
+
PKJ 2005/23Stefan Dissmann
Pakete - Nutzen
Liste.javapackage speicher;
public class Liste
{ … }
Menge.javapackage speicher;
public class Menge
{ … }
Map.javapackage speicher;
public class Map
{ … }
speicher
Verwaltung.java
package projekt;
import speicher.Liste;
public class Verwaltung
{
…
Liste l = new …
…
}
projekt
PKJ 2005/24Stefan Dissmann
Pakete - Nutzen
Liste.javapackage speicher;
public class Liste
{ … }
Menge.javapackage speicher;
public class Menge
{ … }
Map.javapackage speicher;
public class Map
{ … }
speicher
Verwaltung.java
package projekt;
import speicher.Liste;
public class Verwaltung
{
…
Liste l = new …
…
}
projekt
+
PKJ 2005/25Stefan Dissmann
Pakete - Nutzen
Liste.javapackage speicher;
public class Liste
{ … }
Menge.javapackage speicher;
public class Menge
{ … }
Map.javapackage speicher;
public class Map
{ … }
speicher
Verwaltung.java
package projekt;
import speicher.*;
public class Verwaltung
{
…
Liste l = new …
Menge m = new …
…
}
projekt
PKJ 2005/26Stefan Dissmann
Pakete - Nutzen
Liste.javapackage speicher;
public class Liste
{ … }
Menge.javapackage speicher;
public class Menge
{ … }
Map.javapackage speicher;
public class Map
{ … }
speicher
Verwaltung.java
package projekt;
import speicher.*;
public class Verwaltung
{
…
Liste l = new …
Menge m = new …
…
}
projekt
+
+
PKJ 2005/27Stefan Dissmann
Unterpakete
Anmerkung:
Analog zu geschachtelten Verzeichnissen sind auch geschachtelte Pakete möglich:
speicher
PKJ 2005/28Stefan Dissmann
Unterpakete
Anmerkung:
Analog zu geschachtelten Verzeichnissen sind auch geschachtelte Pakete möglich:
speicher.neu
speicher.alt
aber: keine besondere Beziehung
speicher
neu
alt
PKJ 2005/29Stefan Dissmann
Pakete als Sichtbarkeitsgrenzen
Paket fasst Klassen zusammen
Paket bildet Struktur im JAVA-Programm Paket erhält eigenen Sichtbarkeitsbereich
neben: private, public und protected also auch: package
aber: kein Schlüsselwort sondern: Standardeinstellung
PKJ 2005/30Stefan Dissmann
Sichtbarkeit package
Liste.java
package speicher;
public class
Liste
{ …
int groesse;
…
}
Menge.java
package speicher;
public class Menge
{ … }
Map.java
package speicher;
public class Map
{ … }
speicher
PKJ 2005/31Stefan Dissmann
Sichtbarkeit package
Liste.java
package speicher;
public class
Liste
{ …
int groesse;
…
}
Menge.java
package speicher;
public class Menge
{ … }
Map.java
package speicher;
public class Map
{ … }
speicher
bedeutet: package
PKJ 2005/32Stefan Dissmann
Sichtbarkeit package
Liste.java
package speicher;
public class
Liste
{ …
int groesse;
…
}
Menge.java
package speicher;
public class Menge
{ … }
Map.java
package speicher;
public class Map
{ … }
speicher
bedeutet: package
PKJ 2005/33Stefan Dissmann
Sichtbarkeitshierarchie
Bezeichnung Bereich
private nur die Klasse selbst
package alle Klassen im eigenen Paket
protected alle Klassen im eigenen Paket undalle erbenden Klassen (in anderen
Paketen)
public alle Klassen
PKJ 2005/34Stefan Dissmann
Sichtbarkeitshierarchie
ba
x
y
PKJ 2005/35Stefan Dissmann
Sichtbarkeitshierarchie
ba
x
y
private
PKJ 2005/36Stefan Dissmann
Sichtbarkeitshierarchie
ba
x
y
package
PKJ 2005/37Stefan Dissmann
Sichtbarkeitshierarchie
ba
x
y
protected
PKJ 2005/38Stefan Dissmann
Sichtbarkeitshierarchie
ba
x
y
public
PKJ 2005/39Stefan Dissmann
Beispiel (DAP 1, 11.2.05)
package a;
public class A { protected void m(A a) {} }
class B extends A {}
package b;
import a.*;
public class C extends A {
public static void main (String[] args) {
}
}
PKJ 2005/40Stefan Dissmann
Beispiel (DAP 1, 11.2.05)
package a;
public class A { protected void m(A a) {} }
class B extends A {}
package b;
import a.*;
public class C extends A {
public static void main (String[] args) {
new A().m(new A());
}
}
PKJ 2005/41Stefan Dissmann
Beispiel (DAP 1, 11.2.05)
package a;
public class A { protected void m(A a) {} }
class B extends A {}
package b;
import a.*;
public class C extends A {
public static void main (String[] args) {
new A().m(new A());
}
}
m ist protected m für A in C nicht aufrufbar!
PKJ 2005/42Stefan Dissmann
Beispiel (DAP 1, 11.2.05)
package a;
public class A { protected void m(A a) {} }
class B extends A {}
package b;
import a.*;
public class C extends A {
public static void main (String[] args) {
new C().m(new A());
}
}
PKJ 2005/43Stefan Dissmann
Beispiel (DAP 1, 11.2.05)
package a;
public class A { protected void m(A a) {} }
class B extends A {}
package b;
import a.*;
public class C extends A {
public static void main (String[] args) {
new C().m(new A());
}
}
m ist protected geerbt in C m für C in C aufrufbar!
PKJ 2005/44Stefan Dissmann
Beispiel (DAP 1, 11.2.05)
package a;
public class A { protected void m(A a) {} }
class B extends A {}
package b;
import a.*;
public class C extends A {
public static void main (String[] args) {
new C().m(new C());
}
}
C erbt von A C-Objekte können A-Objekte ersetzen!
PKJ 2005/45Stefan Dissmann
Beispiel (DAP 1, 11.2.05)
package a;
public class A { protected void m(A a) {} }
class B extends A {}
package b;
import a.*;
public class C extends A {
public static void main (String[] args) {
new C().m(new B());
}
}
PKJ 2005/46Stefan Dissmann
Beispiel (DAP 1, 11.2.05)
package a;
public class A { protected void m(A a) {} }
class B extends A {}
package b;
import a.*;
public class C extends A {
public static void main (String[] args) {
new C().m(new B());
}
}
B ist nicht public B hat die Sichtbarkeit package!
PKJ 2005/47Stefan Dissmann
nicht-öffentliche Klassen
In einer Datei sind mehr als eine Klasse möglich,aber nur als nicht-öffentliche Klassen:
Die Sichtbarkeit bleibt auf dasPaket beschränkt!
Liste.java
public class Liste
{ … }
class Element
{ … }
PKJ 2005/48Stefan Dissmann
Was noch fehlt:
• innere Klassen• lokale Klassen•anonyme Klassen•generische Klassen•Exceptions•Streams•Threads•Streams•graphische Oberflächen (AWT, Swing, SWT)•Persitance•Flag-Interfaces•objektorientiertes Programmieren
PKJ 2005/49Stefan Dissmann
Was noch fehlt:
• innere Klassen• lokale Klassen•anonyme Klassen•generische Klassen•Exceptions•Streams•Threads•Streams•graphische Oberflächen (AWT, Swing, SWT)•Persitance•Flag-Interfaces•objektorientiertes Programmieren
vielleicht im Sommersemester
PKJ 2005/50Stefan Dissmann
Ende!