2. Java Schnellkurs Advanced Programming Techniques Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Einordnung in den gesamten Kurs 1. Einführung 2. Java Schnellkurs 3. Code-Dokumentation 4. Unit Testing 5. Komponenten und Schnittstellen 6. Klassenbibliotheken 7. Design Patterns 8. Refactoring 9. Fehlerbehandlung 10. Debugging, Logging, Tracing 11. Performance-Optimierung 2 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Agenda Übersicht Übersicht Programmierkonstrukte Klassen und Interfaces JDK Literatur Übersicht 2000 Java im Kontext anderer Programmiersprachen Java 1990 C++ OO TurboPASCAL 1980 MODULA PROLOG Eiffel Ada SMALLTALK80 COMMON LISP INTER LISP C PASCAL 1970 1960 OBERON BCPL APL PL/1 PL360 ALGOL68 Basic SIMULA LISP COBOL ALGOL Fortran 1950 4 Assemblersprachen Maschinensprachen Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Übersicht Java Historie 1991 im Green-Projekt (Sun Microsystems) als Sprache Oak entwickelt. Ziel: einfache, objekt-orientierte, plattformunabhängige Sprache zur Programmierung von Micro-Computern in Geräten der Konsumelektronik 1995 von Sun Microsystems ersmals als Sprache Java vorgestellt 1995 Netscape lizenziert mit dem Navigator 2.0 erstmals Java-Technologie von Sun - JavaApplets können über das Netz von einem zentralen Server geladen werden. 1996 Freigabe des Java Developer Kit 1.0 – JDK 1.0 und JDK 1.1, das ab April 1997 offiziell als Java One auf dem Markt ist 1998 JDK 1.2 enthält als Erweiterung insbesondere die Java Foundation Classes mit dem Swing Toolset zur Gestaltung graphischer Oberflächen (GUI). Ab der Version 1.2 werden die JDK-Versionen 1.x als Java 2 SDK bezeichnet (SDK=Software Development Kit). 2000 - 2003 JDK 1.3, 1.4: Fehlerkorrekturen/Performance-Verbesserungen gegenüber Vorgängerversionen 2004 JDK 1.5 (Java 5): Umfangreiche Programmiersprachen-Erweiterungen, zum Beispiel Generics, Boxing / Unboxing Aktuelle Version: JDK 1.6 5 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Übersicht Das Konzept der Virtual Machine in Java class Appl ... ... übersetzt Bytecode Xxxxx.class Java-Programm Xxxxx.java Java-Compiler Aufruf: javac Xxxxx.java <Opcodes> iadd ... entspricht führt aus Java-Interpreter Aufruf: java Xxxxx Java Virtual Machine implementiert 6 1 5 1+5=6 Bei der Java Virtual Machine handelt es sich nicht um einen tatsächlich existierenden Prozessor, sondern nur um die Spezifikation eines solchen. Daher wird bei Java ein Programm gebraucht, das einen real existierenden Rechner in eine Java-Maschine verwandelt. Hierbei handelt es sich um den Java-Interpreter. Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Agenda Übersicht Programmierkonstrukte Programmierkonstrukte Klassen und Interfaces JDK Literatur Programmierkonstrukte Ein einfaches Java-Programm Objektorientiert: keine Methoden außerhalb von Klassen! Modifier main-Methode für Programmstart Klasse des JDK class Sample { public static void main (String[] arg) { System.out.println("Hello World!"); } } Punkt-Notation zum Zugriff auf Variablen 8 Klassenmethoden mit static Punkt-Notation zum Zugriff auf Methoden String Literal Separator Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Programmierkonstrukte Lexikalische Konventionen Variablennamen Kleinbuchstaben variable Methodennamen Kleinbuchstaben methode() Klassennamen Großbuchstaben Person symbolische Konstanten alle Buchstaben groß MAXIMUM Bei zusammengesetzten Namen werden ab dem 2. Wort jeweils der 1. Buchstabe des Wortes groß geschrieben, z.B. die Variable firstName, die Methode getFirstName() Stets sprechende Namen wählen! 9 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Programmierkonstrukte Datentypen in Java Datentyp Einfacher (elementarer, primitiver) Typ Wahrheitswerte - boolean Zeichen-Typ - char Integer-Typ - byte - short - int - long 10 Referenztyp numerischer Typ KlassenTyp ArrayTyp SchnittstellenTyp Gleitpunkt-Typ - float - double Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Agenda Übersicht Programmierkonstrukte Klassen Klassen undund Interfaces Interfaces JDK Literatur Klassen und Interfaces Referenzsemantik in Java: Was geschieht und warum? public class Kunde { private String name; … k1 = new Kunde (“Huber“); k2 = new Kunde (“Müller“); k2 = k1; k2.setName(“Schultz“); System.out.prinln( k1.getName()); … public Kunde(String name){ this.setName(name); } public void setName(String name){ this.name = name; } public String getName(){ return this.name; } 12 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Klassen und Interfaces Garbage Collection Klassen werden mit new instanziiert (Konstruktoraufruf) Speicherplatz muss nicht explizit allokiert werden geschieht implizit durch die virtuelle Maschine Destruktoren müssen nicht programmiert werden Garbage Collection erfolgt automatisch durch die virtuelle Maschine Wie kann das funktionieren? 13 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Klassen und Interfaces Vererbung class Article { int code; int price; boolean available() {...} void print() {...} Article(int c, int p) {...} } Oberklasse (Basisklasse) class Book extends Article { String author; String title; void print() {...} Book(int c, int p, String a, String t) {...} } Unterklasse Schlüsselwort extends zeigt Vererbung an Nur Einfachvererbung in Java! erbt: code, price, available, print ergänzt: author, title, Konstruktor überschreibt: print Article code price available() print() Article(c, p) Book author title print() Book(c, p, a, t) Wenn keine Oberklasse angegeben wird, ist sie Object (implizite Oberklasse aller Java-Klassen) 14 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Klassen und Interfaces Das Denken in Schnittstellen (Interfaces) ist eines der wichtigsten Konzepte der Programmierung Interface: cd Collections – beschreibt die Außensicht, das heißt die Sicht des Nutzers – ist einfach – ist vielseitig verwendbar Klasse: – enthält die Innensicht, das heißt die Sicht des Programmierers – ist komplex «interface» List + + + + add() : void get() : void contains() : void remove() : void «realize» «realize» – ist speziell ArrayList 15 LinkedList Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Klassen und Interfaces Java bietet Interfaces als Sprachkonstrukt an Deklaration eines Interface Interfaces definieren das Verhalten von Objekten Interfaces enthalten: – Instanzmethoden – Konstanten Interfaces haben keine Konstruktoren Interfaces enthalten keine Implementierung public interface List<E> { public void add(E element); public void remove(E element); … } 16 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Klassen und Interfaces Verwendung eines Interface Man sagt: Eine Klasse implementiert ein Interface, wenn sie jede einzelne Methode des Interfaces bereitstellt Eine Klasse kann beliebig viele Interfaces implementieren Ein Interface kann von beliebig vielen Klassen implementiert werden Eine Referenz auf ein Interface kann überall dort im Code eingesetzt werden, wo auch eine Referenz auf eine Klasse erlaubt ist public class ArrayList<E> implements List<E>{ E[] elements; public void add(Object o){ … } … } 17 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Klassen und Interfaces Übersicht über Collections, Maps und deren Interfaces Collection List Map Set SortedMap HashMap Hashtable ArrayList Vector HashSet SortedSet TreeMap LinkedList Interface Stack 18 TreeSet Class Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Agenda Übersicht Programmierkonstrukte Klassen und Interfaces JDK JDK Literatur JDK Java Development Kit (JDK) 20 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 JDK Java API Dokumentation (Application Programmers‘ interface) http://java.sun.com/javase/6/docs/api/ 21 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008 Agenda Übersicht Programmierkonstrukte Klassen und Interfaces JDK Literatur Literatur Literatur Literatur und Links Arnold K., Gosling J.: The Java Programming Language. Addison-Wesley. Krüger, Guido. Handbuch der JavaProgrammierung. Addison-Wesley, http://www.javabuch.de/ kostenlos im Download als HTML-Version (Nachfolger von "Go To Java 2") WWW: 23 – http://java.sun.com/ - Java-Seiten von Sun Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, SS 2008. 8.4.2008