1. Einführung Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 27. September 2005 Agenda Agenda Übersicht Übersicht und undOrganisation Organisation Vom Problem zum Programm Algorithmen Programmiersprachen Java Literatur Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 2 Übersicht und Organisation Gemeinsames Kennenlernen Was ist Ihr persönlicher und beruflicher Hintergrund? Welche Computererfahrungen haben Sie? Welche Programmiersprachen kennen Sie? Haben Sie schon in Java programmiert? Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 3 Übersicht und Organisation Organisation Vorlesung: – Wöchentlich dienstags, 18:00 – 21:00, D14/004 Praktikum: – Zweiwöchentlich mittwochs, 18.00h -21.00h, D15/102. Start am 12.10.2005 – Ausgabe der Übungszettel in der Vorlesung – Unterstützung bei der Lösung der Aufgaben in der Übung durch Ansgar Berhorn und Bernhard Humm – Bearbeitung der Übungsaufgaben in 2er-Arbeitsgruppen – zusätzliches Üben ist zwingend notwendig! Keine Vorlesungen / Praktika während der Schulferien in Hessen: – Herbstferien: 17.-28.10.2005 – Weihnachtsferien: 21.12.2005 – 7.1.2006 – Osterferien: 10.-22.4.2006 Ende der Lehrveranstaltungen: 18.2.2006 Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 4 Übersicht und Organisation Organisation Leistungsüberprüfung: – Klausur am Semesterende (Termin: letzter Vorlesungstermin) – Benotete Praktikumsaufgaben am Semesterende Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 5 Übersicht und Organisation Ein Zitat zu Beginn… Vor der Wahl, ein theoretischer Physiker oder ein Programmierer zu werden, entschied ich mich für die intellektuell anspruchsvollere Aufgabe Edsger W. Dijkstra (1930–2002) auf der sd&m-Konferenz in Bonn, 2001 Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 6 Übersicht und Organisation Was ich gerne vermitteln möchte Grundlagen der Programmierung (Java) Konzepte Java Werkzeuge Systementwurf Syntax JDK 1.5 Programmiersprachen Semantik Eclipse Objekt-Orientierung Muster JUnit Algorithmen und DatenStrukturen Guter Programmierstil Checkstyle Berechenbarkeit, Korrektheit Jalopy Subversion Praktikum, Diskussionen, Ausblicke zum Weiterdenken Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 7 Übersicht und Organisation Überblick über die Vorlesung Grundlagen der Programmierung 1 (Java) 1. Einführung 10. Software-Qualität 2. Einfache Programme 11. Algorithmen und Datenstrukturen II 3. Kontrollstrukturen 12. Objektorientierung II 4. Objekt-Orientierung I 13. Komponenten 5. Algorithmen und Datenstrukturen I 14. Design 6. Interfaces 15. Die Java Klassenbibliothek I 7. Rekursion 16. Die Java Klassenbibliothek II 8. Pakete 17. Software-Kategorien 9. Fehler und Ausnahmen Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 8 Übersicht und Organisation Ausblick auf die Vorlesung Grundlagen der Programmierung 2 (Java) GUI-Programmierung (nativ und Web) Kommunikation Multithreading DB-Zugriff File I/0 Enterprise Java Reflection Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 9 Agenda Agenda Übersicht und Organisation Vom Problem Problemzum zumProgramm Programm Algorithmen Programmiersprachen Java Literatur Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 10 Vom Problem zum Programm Vom Problem zum Programm Problem • komplex • mehrdeutig Analyse Mensch Spezifikation • semi-formal • nicht vollständig Design / Algorithmus • semi-formal • nicht vollständig Design Programmierung Maschine Programm • präzise • meist normiert • unabhängig vom Prozessor Maschinenprogramm • primitiv • abhängig vom Prozessor Laufzeitumgebung • auf konkretem Prozessor Compilation Deployment Ausführung Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 11 Vom Problem zum Programm Programmieren ist … …ein Problem so exakt beschreiben, dass es ein Computer lösen kann kreative Tätigkeit Ingenieurtätigkeit Nur wenige Leute können gut programmieren Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 12 Agenda Agenda Übersicht und Organisation Vom Problem zum Programm Algorithmen Algorithmen Programmiersprachen Java Literatur Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 13 Algorithmen Algorithmus: schrittweises, präzises Verfahren zur Lösung eines Problems Name Parameter Summiere Zahlen von 1 bis n (↓n, ↑sum) 1. sum ← 0 2. zahl ← 1 3. Wiederhole, solange zahl ≤ n Variable 3.1 sum ← sum + zahl 3.2 zahl ← zahl + 1 Folge von Schritten Programm = Beschreibung eines Algorithmus in einer Programmiersprache Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 14 Algorithmen Mach den Schreibtischtest! ad Summiere Zahlen v on 1 bis n in: n n Sum zahl ↓3 0 1 3 1 2 3 3 3 3 ↑6 4 sum <- 0 zahl <- 1 false zahl <= n? out: sum true sum <- sum + zahl zahl <- zahl + 1 Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 15 Algorithmen Für jedes Problem existieren mehrere Algorithmen Summiere Zahlen von 1 bis n (↓n, ↑sum) 1. sum ← n * (n+1) / 2 • Welcher Algorithmus ist besser? • Welcher ist leichter verständlich? • Wie verhält sich die Laufzeit der beiden Algorithmen? Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 16 Algorithmen Variablen Sind benannte Behälter für Werte sum können ihren Wert ändern Haben einen Datentyp = Menge erlaubter Werte Typ entspricht Form: sum ← sum + 1 Zahl Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 4 4 Zeichen Datentyp – In eine Zahlenvariable passen nur Zahlen – In eine Zeichenvariable passen nur Zeichen n 3 Werte 1 ‘a‘ 2 ‘b‘ 3 ‘c‘ 27.9.2005, Seite 17 Algorithmen Anweisungen: Wertzuweisung, Anweisungsfolge Wertzuweisung: – 1. Werte den Ausdruck aus sum ← sum + 1 – 2. Weise das Ergebnis der Variablen zu Variable Ausduck ad Sw ap in: x, y Anweisungsfolge (Sequenz) – führe Anweisungen sequenziell aus h <- x x <- y y <- h out: y, x Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 18 Algorithmen Auswahl (auch Verzweigung, Abfrage, Selektion) Auswertung der Bedingung ad Ausw ahl in: x, y Ergebnis: Wahrheitswert (true, false) Abhängig vom Ergebnis: Ausführung weiterer Anweisungen [true] [false] x<y min <- x min <- y out: min Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 19 Algorithmen Wiederholung (auch Schleife, Iteration) ad Exponentialfunktion Anweisungen in der Schleife werden so lange ausgeführt, wie Bedingung wahr „While-Schleife“ in: n x <- n y <- 1 Andere Schleifentypen: – Repeat-Schleife – For-Schleife [false] x>0 out: y [true] y <- 2 * y x <- x - 1 Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 20 Algorithmen Warum funktioniert der Algorithmus? ad Exponentialfunktion Schleifeninvariante: y * 2x = 2n in: n Schreibtischtest: x <- n y <- 1 x 2x y ↓3 8 1 x=0 y = 2**n [false] x>0 2 4 2 1 2 4 out: y [true] y <- 2 * y y * 2**x = 2**n 0 1 ↑8 Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 x <- x - 1 27.9.2005, Seite 21 Algorithmen Beispiel: Euklid‘scher Algorithmus Warum funktioniert der Algorithmus? (ggt teilt x) & (ggt teilt y) ⇒ ggt teilt (x - y) ⇒ ggt teilt (x – q*y) ⇒ ggt teilt rest ⇒ GGT(x, y) = GGT(y, rest) ad Euklid'scher Algorithmus in: x, y rest <- x mod y [false] x y rest rest != 0 ggt <- y out: ggt [true] ↓28 ↓20 8 20 8 4 x <- y y <- rest rest <- x mod y 8 ↑4 0 Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 22 ad Exponentialfunktion Algorithmen in: n Algorithmenschreibweisen x <- n y <- 1 x=0 y = 2**n Grafische Notationen: [false] x>0 – UML Aktivitätsdiagramme (schon bekannt; ähnlich Ablaufdiagramme / Flussdiagramme) – Struktogramme (NassiShneiderman-Diagramme) Textuelle Notationen: – Pseudocode – Programmiersprachen Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 out: y [true] y <- 2 * y y * 2**x = 2**n x <- x - 1 Summiere Zahlen von 1 bis n (↓n, ↑sum) 1. sum ← 0 2. zahl ← 1 3. Wiederhole, solange zahl ≤ n 3.1 sum ← sum + zahl 3.2 zahl ← zahl + 1 27.9.2005, Seite 23 Agenda Agenda Übersicht und Organisation Vom Problem zum Programm Algorithmen Programmiersprachen Programmiersprachen Java Literatur Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 24 Programmiersprachen Beschreibung von Programmiersprachen Syntax – Regeln, nach denen Sätze gebaut werden dürfen – z.B.: Zuweisung = Variable "<-" Ausdruck. Semantik – Bedeutung der Sätze – z.B.: werte Ausdruck aus und weise ihn der Variablen Grammatik – Menge von Syntaxregeln – z.B. Grammatik der ganzen Zahlen – Ziffer = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9". – Zahl = Ziffer {Ziffer}. Ziffer Zahl 0 1 2 3 4 5 6 7 8 9 Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 Ziffer 27.9.2005, Seite 25 Programmiersprachen EBNF (Erweiterte Backus-Naur-Form) Metazeichen Bedeutung Beispiel beschreibt = trennt Regelseiten . schließt Regel ab | trennt Alternativen x|y x, y () klammert Alternativen (x | y) z xz, yz [] wahlweises Vorkommen [x] y xy, y {} 0..n-maliges Vorkommen {x} y y, xy, xxy, xxxy, ... z.B. Grammatik der Gleitkommazahlen Zahl = Ziffer {Ziffer}. Gleitkommazahl = Zahl "." Zahl ["E" ["+" | "-"] Zahl]. Grammatik der If-Anweisung IfAnweisung = "if" "(" Ausdruck ")" Anweisung ["else" Anweisung]. Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 26 Programmiersprachen Familien von Programmiersprachen ALGOL, AWK, BASIC, C, COBOL, FORTRAN, Pascal, PL/1, REXX, Cyclone 1 Prozedurale Sprachen je Prozessortyp 6 2 Assemblerund Maschinensprachen Funktionale Sprachen 5 visuelle Programmierumgebungen (z.B. VisualBasic, Delphi), Datenbanksprachen (zum Beispiel SQL, dBase, Clipper) Sonstige Sprachen und Umgebungen Programmiersprachen 4 Logische und regelbsierte Sprachen LISP, Logo, ML, Scheme, Haskell, OPAL, Miranda 3 Objektorientierte Sprachen Smalltalk, Eiffel, C++, Objective-C, Java, C#, Oberon, Python, Ruby Prolog OPS5, XSLT Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 27 Agenda Agenda Übersicht und Organisation Vom Problem zum Programm Algorithmen Programmiersprachen Java Literatur Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 28 Java 2000 Java im Kontext anderer Programmiersprachen Java 1990 C++ OO TurboPASCAL 1980 Eiffel COMMON LISP MODULA PROLOG Ada SMALLTALK80 INTER LISP C PASCAL 1970 1960 OBERON BCPL APL PL/1 PL360 ALGOL68 Basic SIMULA LISP COBOL ALGOL Fortran 1950 Assemblersprachen Maschinensprachen Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 29 Java 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 Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 30 Java Compiler main() { ... ... versus C-Programm Xxxxx.c Interpreter ... E ... ... APL-Anweisungen 1+5 } übersetzt prozessorabhängiger ... MaschinenCode Xxxxx.exe a.out ... führt aus C-Compiler übersetzt einzelne APL-Anweisungen während der Laufzeit in Maschinencode, der von der CPU ausgeführt wird APL-Interpreter CPU 1 5 1+5=6 Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 1 5 1+5=6 27.9.2005, Seite 31 Java 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 1 5 1+5=6 führt aus Java-Interpreter Aufruf: java Xxxxx Java Virtual Machine implementiert Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 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. 27.9.2005, Seite 32 Java Ein einfaches Java-Programm Der Programmtext muss in einer Datei namens Sample.java stehen class Sample { public static void main (String[] arg) { System.out.println("Virus detected!"); } } Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 33 Java JDK & Co. Übersetzen – C:\> cd MySamples wechselt ins Verzeichnis mit der Quelldatei – C:\MySamples> javac Sample.java erzeugt Datei Sample.class Ausführen – C:\MySamples> java Sample ruft main-Methode der Klasse Sample auf – „Virus detected!“ Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 34 Agenda Agenda Übersicht und Organisation Vom Problem zum Programm Algorithmen Programmiersprachen Java Literatur Literatur Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 35 Literatur Literatur Arnold K., Gosling J.: The Java Programming Language. Addison-Wesley, 1998. Krüger, Guido. Handbuch der Java-Programmierung. Addison-Wesley,2002, 3. Auflage oder http://www.javabuch.de/ kostenlos im Download als HTML-Version (Nachfolger von "Go To Java 2" und "Go To Java 2, 2. Auflage“) Mössenböck, H.: Sprechen Sie Java? Eine Einführung in das systematische Programmieren. 3. Auflage, dpunkt.verlag, 2005 Echtle K., Goedicke M.: Lehrbuch der Programmierung mit Java. dpunkt.verlag, 2000. Flanagan, David. Java in a Nutshell. Nutshell Handbooks. O'Reilly & Associates, Sebastopol, CA 1997. (Deutsche Ausgabe für 1.1 1998) Flanagan, David. Java Foundation Classes in a Nutshell. Nutshell Handbooks. O'Reilly & Associates, Sebastopol, CA 1999. WWW: – http://www.javasoft.com/ - Java-Seiten von Sun – "The Java Tutorial - A practical Guide for Programmers", http://java.sun.com/series/tutorial/ – http://www.gamelan.com/ - Sammlung von Java-Ressourcen – http://www.javaworld.com/ - Online Java-Zeitschrift Bernhard Humm: „Grundlagen der Programmierung I (Java)“. FH Darmstadt, WS 2005/2006 27.9.2005, Seite 36