(Microsoft PowerPoint - 01 Einf\374hrung.ppt)

Werbung
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
Herunterladen