2. Java Schnellkurs Advanced Programming Techniques Wintersemester 2009/10 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 14.10.2009
Einordnung in den gesamten Kurs 1. Einführung 2. Java Schnellkurs 3. Programmieren gegen Schnittstellen 4. Software-Kategorien 5. Komponenten 6. Regeln zum Design von Komponenten 7. Dokumentieren und Testen 8. Fehlerbehandlung 9. Konfigurationsmanagement 10.Debugging, Tracing, Logging 11. Refactoring 2 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 14.10.2009
Agenda Übersicht Programmierkonstrukte Klassen und Interfaces JDK Literatur
Übersicht 2000 Java im Kontext anderer Programmiersprachen Java 1990 1980 C++ OO Turbo- PASCAL OBERON MODULA Ada Eiffel SMALLTALK80 COMMON LISP PROLOG C INTER LISP 1970 1960 APL BCPL PL360 PL/1 COBOL PASCAL Basic ALGOL68 SIMULA LISP Fortran ALGOL 1950 Assemblersprachen Maschinensprachen 4 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 14.10.2009
Ü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 - Java- Applets 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 6 5 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 14.10.2009
Übersicht Das Konzept der Virtual Machine in Java class Appl - -...... Java-Programm Xxxxx.java Bytecode Xxxxx.class übersetzt <Opcodes> iadd... entspricht Java-Compiler Aufruf: javac Xxxxx.java Java Virtual Machine implementiert führt aus Java-Interpreter Aufruf: java Xxxxx 6 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 14.10.2009 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.
Agenda Übersicht Programmierkonstrukte Klassen und Interfaces JDK Literatur
Programmierkonstrukte Ein einfaches Java-Programm Objektorientiert: keine Methoden außerhalb von Klassen! Klassenmethoden mit static main-methode für Programmstart Klasse des JDK Modifier class Sample { public static void main (String[] arg) { System.out.println("Hello World!"); } } Punkt-Notation zum Zugriff auf Variablen Punkt-Notation zum Zugriff auf Methoden String Literal Separator 8 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 14.10.2009
Programmierkonstrukte Lexikalische Konventionen Variablennamen Methodennamen Kleinbuchstaben variable 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, WS 09/10. 14.10.2009
Programmierkonstrukte Datentypen in Java Datentyp Einfacher (elementarer, primitiver) Typ Referenztyp Wahrheitswerte -boolean Zeichen-Typ -char numerischer Typ Klassen- Typ Array- Typ Schnittstellen- Typ Integer-Typ -byte -short -int -long Gleitpunkt-Typ -float -double 10 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 14.10.2009
Agenda Übersicht Programmierkonstrukte Klassen und und 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, WS 09/10. 14.10.2009
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, WS 09/10. 14.10.2009
Klassen und Interfaces Vererbung class Article { int code; int price; boolean available() {...} void print() {...} Article(int c, int p) {...} } Oberklasse (Basisklasse) Schlüsselwort extends zeigt Vererbung an Nur Einfachvererbung in Java! Article code price available() print() Article(c, p) class Book extends Article { String author; String title; void print() {...} Book(int c, int p, String a, String t) {...} } Unterklasse erbt: code, price, available, print ergänzt: author, title, Konstruktor überschreibt: print 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, WS 09/10. 14.10.2009
Klassen und Interfaces Das Denken in Schnittstellen (Interfaces) ist eines der wichtigsten Konzepte der Programmierung Interface: 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 ist speziell cd Collections «interface» List + add() : void + get() : void + contains() : void + remove() : void «realize» ArrayList «realize» LinkedList 15 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 14.10.2009
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, WS 09/10. 14.10.2009
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, WS 09/10. 14.10.2009
Klassen und Interfaces Übersicht über Collections, Maps und deren Interfaces Collection Map List Set SortedMap HashMap Hashtable ArrayList Vector HashSet SortedSet TreeMap LinkedList Stack TreeSet Interface Class 18 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 14.10.2009
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, WS 09/10. 14.10.2009
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, WS 09/10. 14.10.2009
Agenda Übersicht Programmierkonstrukte Klassen und Interfaces JDK Literatur
Literatur Literatur und Links Arnold K., Gosling J.: The Java Programming Language. Addison- Wesley. Krüger, Guido. Handbuch der Java-Programmierung. Addison-Wesley, http://www.javabuch.de/ kostenlos im Download als HTML-Version (Nachfolger von "Go To Java 2") WWW: http://java.sun.com/ - Java-Seiten von Sun http://java.sun.com/docs/books/tutorial/index.html - Java tutorials http://java.sun.com/javase/6/docs/api/ - API Dokumentation 23 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Advanced Programming Techniques, WS 09/10. 14.10.2009