Visibility public: Sichtbar in allen Paketen protected: Sichtbar innerhalb des Pakets und in den Unterklassen (default, friendly): Sichtbar innerhalb des Pakets private: Sichtbar nur innerhalb der Klasse IT2 – WS 2005/2006 Nov 14, 2005 1 Pakete CompilationUnit ::= [ „package“ Identifier ] { ImportStatement } ClassDeclaration IT2 – WS 2005/2006 Nov 14, 2005 2 Java-Syntax Visibility ::= [ („public“ | „private“ | „protected“) ] ClassDeclaration ::= [ „public“ ] „class“ Identifier „{“ { AttributeDeclaration } { ConstructorDeclaration } { MethodDeclaration } „}“ AttributeDeclaration ::= Visibility [„static“ ] [„final“ ] VariableDeclaration ConstructorDeclaration ::= Visibility Classname „(“ [ ParameterList ] „)“ StatementBlock MethodDeclaration ::= [„abstract“ ] Visibility [„static“ ] ( „void“ | Type ) Identifier„(“ [ ParameterList ] „)“ StatementBlock IT2 – WS 2005/2006 Nov 14, 2005 3 Abstract classes ClassDeclaration ::= [ „public“ ] [ „abstract“ ] „class“ Identifier [ „extends“ Identifier ] „{“ { AttributeDeclaration } { ConstructorDeclaration } { MethodDeclaration } „}“ Von abstrakten Klassen können keine (unmittelbaren) Objekte erzeugt werden. Eine abstrakte Klasse gibt eine allgemeine Schnittstelle für ihre Unterklassen vor. Von den Unterklassen können Objekte erzeugt werden. Eine abstrakte Klasse kann auch einen Teil der Implementierung vorgeben. IT2 – WS 2005/2006 Nov 14, 2005 4 Interfaces InterfaceDeclaration ::= „interface“ Identifier „{“ { ConstantDefinition } { ConstructorDefinition } { MethodDefinition } „}“ Interfaces sind spezielle abstrakte Klassen, die keinerlei Implementierung enthalten. Sie definieren nur eine allgemeine Schnittstelle für ihre Unterklassen. Alle Definitionen in einem Interface sind automatisch public. IT2 – WS 2005/2006 Nov 14, 2005 5 Interfaces ConstantDefinition ::= Type Identifier „=“ Expression „;“ ConstructorDefinition ::= Classname „(“ [ ParameterList ] „);“ MethodDefinition ::= ( „void“ | Type ) Identifier „(“ [ ParameterList ] „);“ IT2 – WS 2005/2006 Nov 14, 2005 6 Interfaces Unterklassen von Interfaces werden nicht mit extends sondern mit implements gekennzeichnet. Eine Klasse kann Unterklasse • • von nur einer anderen Klasse, aber von beliebig vielen Interfaces sein. ClassDeclaration ::= [ „public“ ] [ „abstract“ ] „class“ Identifier [ „extends“ Identifier ] [ „implements“ Identifier { „,“ Identifier } ] „{“ { AttributeDeclaration } { ConstructorDeclaration } { MethodDeclaration } „}“ IT2 – WS 2005/2006 Nov 14, 2005 7 Gruppieren von Objekten in Sammlungen Viele Anwendungen enthalten Sammlungen von Objekten: • • • • Adressbücher Bibliothekskatalog Kalender … Auffinden von Elementen Die Anzahl der zu verwaltenden Elemente verändert sich über die Zeit. • Elemente hinzufügen. • Elemente löschen. IT2 – WS 2005/2006 Nov 14, 2005 8 Beispiel: Notizbuch Notizen können gespeichert werden. Einzelne Notizen können angezeigt werden. Notizen können gesucht werden. Notizen können gelöscht werden. Die Anzahl der Notizen ist nicht begrenzt. Die Anzahl der Notizen kann abgefragt werden. IT2 – WS 2005/2006 Nov 14, 2005 9 Verwenden Bibliotheksklassen Sammlungen von brauchbaren Klassen. Wir brauchen nicht alles aufs Neue zu entwickeln. Java nennt ihre Bibliotheken Pakete (packages). Objekte zu gruppieren ist immer wieder notwendig. • Das Paket java.util enthält Klassen, um dies zu tun: z.B. Collection IT2 – WS 2005/2006 Nov 14, 2005 10 Objektstrukturen mit Sammlungen IT2 – WS 2005/2006 Nov 14, 2005 11 Ein drittes Element einfügen IT2 – WS 2005/2006 Nov 14, 2005 12 Eigenschaften einer Sammlung Sie kann ihre Kapazität bei Bedarf vergrößern. Sie führt Buch über die aktuelle Anzahl der Elemente (size() accessor). Details, wie dieses implementiert ist, sind verborgen (hidden). • Es reicht uns, wenn wir die Klasse schlicht und einfach benutzen können. IT2 – WS 2005/2006 Nov 14, 2005 13 Eine Sammlung durchlaufen public void notizenAusgeben() { for(Notiz note : notizen) { note.print(); } } IT2 – WS 2005/2006 Nov 14, 2005 14 Bibliotheksklassen Benutzen von Bibliotheksklassen Dokumentation lesen Dokumentation schreiben IT2 – WS 2005/2006 Nov 14, 2005 15 1.0 Die Java-Bibliothek Besteht aus tausenden von Klassen Zehntausende Methoden Viele nützliche Klassen machen das Leben viel leichter Ein kompetenter Java-Programmierer muss mit Bibliotheken arbeiten können. IT2 – WS 2005/2006 Nov 14, 2005 16 Umgang mit der Bibliothek Sie sollen: einige der wichtigsten Klassen der Bibliothek namentlich kennen. wissen, wie Sie die anderen Klassen anlesen können. Wir müssen nur die Schnittstelle (interface) kennen, nicht die Implementierung. IT2 – WS 2005/2006 Nov 14, 2005 17 Klassendokumentation lesen Dokumentation der Java- Bibliothek in HTML format; Lesen in einem Web Browser Class API: Application Programmers’ Interface Schnittstellen-Beschreibung aller Bibliotheksklassen IT2 – WS 2005/2006 Nov 14, 2005 18 Schnittstellen vs Implementierungen Die Dokumentation enthält • die Schnittstelle (interface) der Klasse • den Namen der Klasse • eine allgemeine Beschreibung des Zwecks der Klasse • eine Liste der Konstruktoren und Methoden der Klasse • die Parameter und Ergebnistypen für jeden Konstruktor und jede Methode • eine Beschreibung des Zwecks jedes Konstruktors und jeder Methode IT2 – WS 2005/2006 Nov 14, 2005 19 Schnittstellen vs Implementierungen Die Dokumentation enthält nicht • private Datenfelder (die meisten Datenfelder sind private) • private Methoden • die Rümpfe (Quelltext) jeder Methode • d.h. die Implementierung der Klasse IT2 – WS 2005/2006 Nov 14, 2005 20 Benutzung von Bibliotheksklassen Klassen der Bibliothek müssen mittels einer import-Anweisung importiert werden. • (Ausnahme: Klassen von java.lang). Sie können wie Klassen vom aktuellen Projekt benutzt werden. IT2 – WS 2005/2006 Nov 14, 2005 21