PKJ 2005/1 Stefan 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/2 Stefan 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/3 Stefan Dissmann Große Strukturierungseinheiten Die ansprechbare Strukturierungseinheit in JAVA ist die Klasse
PKJ 2005/4 Stefan Dissmann Große Strukturierungseinheiten Die ansprechbare Strukturierungseinheit in JAVA ist die Klasse Bezug zum Betriebssystem: genau 1 public class je Datei
PKJ 2005/5 Stefan 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/6 Stefan 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 über Dateinamen findet Liste.java public class Liste { … }
PKJ 2005/7 Stefan Dissmann Große Strukturierungseinheiten Bis jetzt besteht also ein großes Projekt aus sehr vielen einzelnen Dateien mit JAVA-Klassen. Probleme: Finden von solchen Dateien Verbergen von solchen Dateien Zusammengehörigkeit von solchen Dateien Namenskonflikte
PKJ 2005/8 Stefan Dissmann Große Strukturierungseinheiten Bis jetzt besteht also ein großes Projekt aus sehr 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/9 Stefan Dissmann Pakete Paket in JAVA entspricht Verzeichnis im Betriebssystem
PKJ 2005/10 Stefan 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/11 Stefan Dissmann Pakete Pakete werden implizit geschaffen: Verzeichnis anlegen JAVA-Dateien im Verzeichnis ablegen JAVA-Dateien dem Paket zuordnen
PKJ 2005/12 Stefan 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/13 Stefan Dissmann Pakete - Anlegen Beispiel: Liste.java public class Liste { … }
PKJ 2005/14 Stefan Dissmann Pakete - Anlegen Beispiel: Liste.java public class Liste { … } speicher
PKJ 2005/15 Stefan Dissmann Pakete - Anlegen Beispiel: Liste.java package speicher; public class Liste { … } speicher
PKJ 2005/16 Stefan 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/17 Stefan 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/18 Stefan Dissmann Klassen aus fremden Paketen nutzen Zwei Möglichkeiten: Paket-Pfad vor Namen angeben: speicher.Liste Namensraum erweitern: import speicher.Liste;
PKJ 2005/19 Stefan 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/20 Stefan 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/21 Stefan Dissmann Pakete - Nutzen Liste.java package speicher; public class Liste { … } Menge.java package speicher; public class Menge { … } Map.java package speicher; public class Map { … } speicher Verwaltung.java package projekt; public class Verwaltung { … speicher.Liste l = new … … } projekt
PKJ 2005/22 Stefan Dissmann Pakete - Nutzen Liste.java package speicher; public class Liste { … } Menge.java package speicher; public class Menge { … } Map.java package speicher; public class Map { … } speicher Verwaltung.java package projekt; public class Verwaltung { … speicher.Liste l = new … … } projekt +
PKJ 2005/23 Stefan Dissmann Pakete - Nutzen Liste.java package speicher; public class Liste { … } Menge.java package speicher; public class Menge { … } Map.java package speicher; public class Map { … } speicher Verwaltung.java package projekt; import speicher.Liste; public class Verwaltung { … Liste l = new … … } projekt
PKJ 2005/24 Stefan Dissmann Pakete - Nutzen Liste.java package speicher; public class Liste { … } Menge.java package speicher; public class Menge { … } Map.java package speicher; public class Map { … } speicher Verwaltung.java package projekt; import speicher.Liste; public class Verwaltung { … Liste l = new … … } projekt +
PKJ 2005/25 Stefan Dissmann Pakete - Nutzen Liste.java package speicher; public class Liste { … } Menge.java package speicher; public class Menge { … } Map.java package speicher; public class Map { … } speicher Verwaltung.java package projekt; import speicher.*; public class Verwaltung { … Liste l = new … Menge m = new … … } projekt
PKJ 2005/26 Stefan Dissmann Pakete - Nutzen Liste.java package speicher; public class Liste { … } Menge.java package speicher; public class Menge { … } Map.java package speicher; public class Map { … } speicher Verwaltung.java package projekt; import speicher.*; public class Verwaltung { … Liste l = new … Menge m = new … … } projekt + +
PKJ 2005/27 Stefan Dissmann Unterpakete Anmerkung: Analog zu geschachtelten Verzeichnissen sind auch geschachtelte Pakete möglich: speicher
PKJ 2005/28 Stefan 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/29 Stefan 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/30 Stefan 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/31 Stefan 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/32 Stefan 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/33 Stefan Dissmann Sichtbarkeitshierarchie BezeichnungBereich private nur die Klasse selbst package alle Klassen im eigenen Paket protected alle Klassen im eigenen Paket und alle erbenden Klassen (in anderen Paketen) public alle Klassen
PKJ 2005/34 Stefan Dissmann Sichtbarkeitshierarchie b a x y
PKJ 2005/35 Stefan Dissmann Sichtbarkeitshierarchie b a x y private
PKJ 2005/36 Stefan Dissmann Sichtbarkeitshierarchie b a x y package
PKJ 2005/37 Stefan Dissmann Sichtbarkeitshierarchie b a x y protected
PKJ 2005/38 Stefan Dissmann Sichtbarkeitshierarchie b a x y public
PKJ 2005/39 Stefan Dissmann Beispiel (DAP 1, ) 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/40 Stefan Dissmann Beispiel (DAP 1, ) 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/41 Stefan Dissmann Beispiel (DAP 1, ) 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/42 Stefan Dissmann Beispiel (DAP 1, ) 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/43 Stefan Dissmann Beispiel (DAP 1, ) 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/44 Stefan Dissmann Beispiel (DAP 1, ) 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/45 Stefan Dissmann Beispiel (DAP 1, ) 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/46 Stefan Dissmann Beispiel (DAP 1, ) 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/47 Stefan Dissmann nicht-öffentliche Klassen In einer Datei sind mehr als eine Klasse möglich, aber nur als nicht-öffentliche Klassen: Die Sichtbarkeit bleibt auf das Paket beschränkt! Liste.java public class Liste { … } class Element { … }
PKJ 2005/48 Stefan 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/49 Stefan 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/50 Stefan Dissmann Ende!