Softwareentwicklung 1 - SSW

Werbung
Softwareentwicklung 1
Dr. Herbert Prähofer
Institut für Systemsoftware
Johannes Kepler Universität Linz
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
1
Vortragender
Dr. Herbert Praehofer
Institute for System Software
Johannes Kepler University
Altenbergerstrasse 69
A-4040 Linz / Austria
Tel.: ++43 (732) 2468 7132
Fax.: ++43 (732) 2468 7138
EMail: [email protected]
http: www.ssw.uni-linz.ac.at
Raum: HF 306 (Hochschulfondgebäude 3. Stock)
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
2
Ziel und Inhalt
Ziel
Einführung des Programmieren in Java
Inhalte
ƒ Grundlagen der Programmierung
ƒ Programmieren in Java
ƒ Einfache Algorithmen
ƒ Grundlagen der Objektorientierung
ƒ Programmentwurf
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
3
Motivation programmieren zu lernen
ƒ
Software erstellen können
ƒ Grundlagen der Programmierung verstehen
ƒ Java kennen
ƒ komplexe Software entwerfen
ƒ sich neue Gebiete der Softwaretechnik erarbeiten können
ƒ
Software verstehen
ƒ wie arbeitet Software
ƒ was kann Software leisten
ƒ wie sind Programme aufgebaut
ƒ wie wird Software erstellt
ƒ
Kreativität erleben
ƒ Programmieren kann viel Spaß machen
ƒ Programmieren ist eine Herausforderung
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
4
Organisation der LVA Softwareentwicklung 1
ƒ
Vorlesung
ƒ Stoff wird theoretisch vorgetragen
ƒ Mit eingebauten Programmierbeispielen
ƒ
Übung
ƒ Stoff wird geübt
ƒ Programmieraufgaben sind wöchentlich zu programmieren
ƒ 2 Unterrichtsstunden für
ƒ Wiederholung
ƒ Praktische Beispiele
ƒ Besprechung der Programmieraufgaben
ƒ Übungsleiter: Hr. DI Peter Hamader
Programmieren ist eine Fähigkeit,
die nur mit viel Übung erlernt werden kann!!
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
5
Webpage der LVA
http://www.ssw.uni-linz.ac.at/Teaching/Lectures/UZR/SWE1/2007W/index.html
ƒ Alle wichtigen Infos wie
ƒ Termine
ƒ Unterlagen
ƒ Studienmaterial
findet man auf dieser Seite
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
6
Literatur
ƒ
P. Mössenböck, Sprechen Sie Java?, 2. Auflage, dpunkt.verlag, 2005
(Lehrbuch zur VL!)
ƒ
G. Krüger, GoTo Java 2, Addison-Wesley, 2000
On-Line Buch für Java Online Version hier Download (www.javabuch.de)
ƒ
M. Campione, K.Walrath: The Java Tutorial Online Edition
(www.javasoft.com/tutorial)
ƒ
Java-Einführungskurs (http://www.boku.ac.at/javaeinf/jein.html)
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
7
Einheit 1:
Grundlagen der Programmierung
Programmierung und Ausführung von Programmen
Algorithmen und Algorithmendarstellung
Programmiersprachen und Java
Das Java-Entwicklungssystem
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
8
Worum geht es?
Programmieren
Problem so exakt beschreiben, dass es ein Computer lösen kann
)
)
)
kreative Tätigkeit
Ingenieurtätigkeit
Nur wenige Leute können gut programmieren
Programm = Daten + Befehle
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
9
Variablen
Programme arbeiten mit Variablen.
Sind benannte Behälter für Werte.
x
y
99
3
Variablen können ihren Wert ändern
x
x←x+1
100
Charakterisiert durch
ƒ Name oder Bezeichner
Beispiel: byte x = 10
Adresse
Wert
99
ƒ Wert
100
ƒ Adresse (im Hauptspeicher)
101
10
x
(byte)
ƒ Datentyp
Datentyp
ƒ int, char, byte, float, ...
Name
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
15
Datentypen
Variablen haben einen Datentyp == Menge erlaubter Werte
Werte
Variablentyp
17
Zahl
Zeichen
'a'
54
'x'
...
...
Typ ≅ Form
- in eine Zahlenvariable passen nur Zahlen
- in eine Zeichenvariable passen nur Zeichen
Beispiele von Datentypen:
ƒ char (2 Byte)
[ a-z][A-Z][0-9][Sonderzeichen]
ƒ int (4 Byte)
~-2,147 Mrd. – ~+2,147 Mrd.
ƒ boolean
true, false
ƒ float
3.14159265259
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
16
Algorithmus
Ein Algorithmus ist ein endliches, schrittweises Verfahren zur
Berechnung gesuchter aus gegebenen Größen, in dem jeder
Schritt aus einer Anzahl eindeutig ausführbarer Operationen und
einer Angabe über den nächsten Schritt besteht.
ƒ Berechnungsvorschrift
ƒ schrittweise
ƒ endlich
ƒ ausführbare Operationen
ƒ Angabe der Reihenfolge der Schritte
(Der Name Algorithmus ist abgeleitet von Al Chwarizmi,
arabischer Mathematiker, ca. 800 n.Chr.)
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
17
Beispiel: Algorithmus „Sum“
Algorithmus „Sum“ zum Berechnen der Summe einer Zahlenfolge
Aufgabenstellung:
Gegeben: Eine Zahl n größer 0
Gesucht: Die Summe dieser Zahlen von 1 bis n
Algorithmus:
1. Addiere alle Zahlen von 1 bis n
2. Gib das Ergebnis aus
Diese Formulierung ist für einen Computer noch zu wenig genau!
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
18
Algorithmus „Sum“ als Verfahren in mehreren Schritten
Name
Parameter
Ergebnis
Folge von Schritten
Sum (↓n, ↑sum)
1. sum ← 0
2. zahl ← 1
3. Wiederhole, solange zahl ≤ n
3.1 sum ← sum + zahl
3.2 zahl ← zahl + 1
Diese Formulierung ist einem Computerprogramm
schon sehr nahe.
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
19
Anweisungen: Wertzuweisung und Sequenz
Wertzuweisung
x ← x+1
Variable
1. werte Ausdruck aus
2. weise seinen Wert der Variablen zu
Ausdruck
Anweisungsfolge (auch Sequenz)
"Ablaufdiagramm"
x←3
y←4
z←x+y
Assertion
x == 3, y == 4, z == 7
Assertion (Zusicherung)
Aussage über den Zustand des Algorithmus
an einer bestimmten Stelle
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
20
Anweisungen: Verzweigung
Auswahl (auch Verzweigung, Abfrage, Selektion)
j
min ← x
x<y?
n
x≥y
min ← y
min == Minimum von x und y
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
21
Anweisungen: Wiederholung
Wiederholung (auch Schleife, Iteration)
Alternative Darstellung
sum ← 0
zahl ← 1
sum ← 0
zahl ← 1
zahl <= n ? nein
ja
zahl <= n
sum ← sum + zahl
zahl ← zahl + 1
sum ← sum + zahl
zahl ← zahl + 1
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
22
Beispiel: Vertauschen zweier Variableninhalte
Swap (↨x, ↨y)
Schreibtischtest
x
3
2
h=x
x=y
y=h
y
2
3
h
3
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
24
Beispiel: Maximum dreier Zahlen bestimmen
1 2 3
Max (↓a, ↓ b, ↓ c, ↑max)
j
j
a>c?
max ← a
n
a>b?
n
j
c≥a>b
max ← c
b>c?
max ← b
a≤b
n
a≤b≤c
max ← c
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
25
Beispiel: Maximum dreier Zahlen bestimmen
3 2 1
Max (↓a, ↓ b, ↓ c, ↑max)
j
j
a>c?
max ← a
n
a>b?
c≥a>b
max ← c
n
j
b>c?
max ← b
a≤b
n
a≤b≤c
max ← c
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
26
Beispiel: Summe
ƒ
Summe von 1 bis n
Sum(↓n, ↑sum)
Schreibtischtest (n = 5)
sum ← 0
zahl ← 1
zahl <= n
sum ← sum + zahl
zahl ← zahl + 1
zahl
1
0
sum
0
1
1
2
2
3
3
3
4
5
6
10
15
4
5
6
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
27
Beispiel: Anzahl der Ziffern einer Dezimalzahl
ƒ
Zahl solange durch 10 dividieren, bis Zahl < 10
ƒ
Anzahl der Divisionen + 1 = Anzahl der Ziffern
Digits(↓n, ↑d)
Schreibtischtest
d←1
n>9
n ← n / 10
d←d+1
n
12345
d
1
1234
123
2
3
12
1
4
5
n < 10
d == Anzahl der Ziffer von n
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
28
Beispiel: Quadratwurzel von x berechnen
1.
Näherung:
Näherung:
-root
root←
←(a
x /+2root) / 2
-aa←
←xx//root
root
0
a1
√x
a2
root1
x
root2
SquareRoot (↓x, ↑root)
root ← x / 2
a ← x / root
Schreibtischtest
x
root
10
5
3.5
3.17857
3.16232
3.16228
a * root == x
a ≠ root
a * root == x
root ← (root + a) / 2
a ← x / root
a
2
2.85714
3.14607
3.16223
3.16228
a * root == x & a == root
⇒ root * root == x
Kommazahlen sind meist nicht exakt gleich, daher besser
|a - root| > 0.0000001
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
29
Beispiel: Euklidscher Algorithmus
Berechnet den größten gemeinsamen Teiler zweier Zahlen x und y
GGT (↓x, ↓ y, ↑ggt)
rest ← Rest von x / y
Beobachtung:
(ggt teilt x) & (ggt teilt y)
⇒ ggt teilt (x - y)
⇒ ggt teilt (x - q*y)
⇒ ggt teilt Rest von x/y (rest)
⇒ GGT(x, y) = GGT(y, rest)
rest ≠ 0
x←y
y ← rest
rest ← Rest von x / y
rest = 0
ggt ← y
Schreibtischtest
x
y
rest
28
20
8
20
8
4
8
4
0
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
30
Algorithmenschreibweisen
Ablaufdiagramm (schon bekannt)
3
Struktogramm
GGT (↓x, ↓ y, ↑ggt)
x<y?
ja
nein
x⇔y
rest ← Rest von x / y
+ erzwingen strukturiertes Programmieren
(ohne beliebige Sprünge)
- aufwendig zu zeichnen
schwer zu ändern
while rest ≠ 0
x←y
y ← rest
rest ← Rest von x / y
ggt ← y
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
31
Algorithmenschreibweisen: Stilisierte Prosa
Stilisierte Prosa
GGT (↓x, ↓ y, ↑ggt)
S1 Mache x ≥ y.
Wenn x < y ist, vertausche x und y
+ größtmögliche Freiheit in der
Formulierung
S2 Bilde Rest.
Dividiere x durch y und nenne den Rest rest
- schreibaufwendig
- unpräzise
- Ablaufstrukturen (Schleifen,
Verzweigungen) nicht sichtbar
S3 Ende?
Wenn rest null ist, gehe zu S5
S4 Ersetze.
Ersetze x durch y und y durch rest
Gehe nach S2
S5 Fertig.
Das Ergebnis ggt ist y
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
32
Algorithmenschreibweisen: Java
Java-Programm
- exakt, ohne Freiheitsgrade
- aufwendig zu schreiben
public class GGTProgram {
public static void main(String[] args) {
+ vom Computer lesbar und
verarbeitbar
+ eindeutig und präzise
+ von Menschen lesbar
static int GGTEuklid(int x, int y) {
int x;
int y;
int ggt;
int rest;
int ggt;
Out.print("Bitte x eingeben: ");
x = In.readInt();
Out.print("Bitte y eingeben: ");
y = In.readInt();
ggt = GGTEuklid(x, y);
Out.print("Der GGT von x und y ist: ");
Out.println(ggt);
// %-Operator bildet den Rest
rest = x % y;
while (rest != 0) {
x = y;
y = rest;
rest = x % y;
}
}
// rest == 0
ggt = y;
return ggt;
}
} // end GGTProgram
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
33
Algorithmenschreibweisen: Java + Prosa
Prosa + Java
ƒ Java-Kontrollstrukturen
ƒ mit Anweisungen in Prosa
int GGTEuklid(x, y) {
+ nahe einem Java-Programm
+ beliebige Freiheit bei der
Formulierung von Anweisungen
+ muss nicht syntaktisch korrekt
sondern nur verständlich sein
+ daraus kann schrittweise ein JavaProgramm entwickelt werden
rest = Rest von x/y
while (rest nicht 0 ist) ´
x=y
y = rest
rest = Rest von x/y
ggt = y
return ggt
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
34
Algorithmen und Programmierung
Programm
Ein für die Lösung einer bestimmten Aufgabe mit einer
Datenverarbeitungsanlage geeigneter Algorithmus
d.h.
ƒ Elementare Operationen sind die durch den Computer
ausführbaren Befehle
ƒ Programm muss in einer für den Computer lesbaren Form
definiert sein (==> Programmiersprache)
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
35
Höhere Programmiersprachen
ƒ
Höhere Programmiersprachen dienen der Formulierung von Programmen
ƒ
Sind für den Computer lesbar und verarbeitbar
ƒ können vom Computer gelesen werden
ƒ können vom Computer in ein ausführbares Programm übersetzt werden
(Compiler)
ƒ
für den Menschen wesentlich einfacher lesbar und schreibbar als
Maschinensprache
ƒ Programmieren wird wesentlich erleichtert
ƒ Programme können vom Experten gelesen und verstanden werden
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
36
Programmerstellung
Idee
Spezifikation
Aufgabenstellung
Algorithmus
Lösungsverfahren
Mensch
Programm
Codiertes Lösungsverfahren
Maschinenprogramm
Compiler
Lader
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
37
Geschichte der Programmiersprachen
Jahr
1957
1960
1962
1965
1968
1971
1972
1973
1980
1983
1987
1995
2000
Sprache
Fortran
Algol-60
Cobol
Basic
APL
Lisp
PL/I
Algol-68
Pascal
Prolog
C
Modula-2
Ada
Smalltalk
C++
Oberon
Java
C#
Bemerkung
technische Anwendungen
“Algol-Familie”
kaufmännische Anwendungen
Anfänger-Sprache
Vektoren und Matrizen
funktionale Sprache
Allzwecksprache
Nachfolger von Algol-60
Einfluß auf spätere Sprachen
Wissen und Schlußregeln
“Unix-Sprache”
Nachfolger von Pascal
Allzwecksprache; DoD
objektorientierte Sprache
objektorientierte Erweiterung von C
Weiterentwicklung von Modula-2
Weiterentwicklung von C++; WWW
Weiterentwicklung von Java durch Microsoft
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
38
Programmiersprache Java
ƒ
Java ist eine höhere, problemorientierte Programmiersprache, die laut Sun
durch folgende Eigenschaften charakterisiert ist:
ƒ Simple: einfacher als C++
ƒ Architecture-neutral: läuft auf Windows-Rechner als auch auf Unix/Linux, Mac
ƒ Object-oriented
ƒ Portable
ƒ Distributed
ƒ High-performance
ƒ Interpreted
ƒ Multithreaded
ƒ Robust
ƒ Secure
ƒ Dynamic
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
39
Java Virtual Machine
ƒ
Java-Programme werden nicht direkt auf dem Computer ausgeführt
sondern von einen speziellen Programm, nämlich der
Java Virtual Machine (JVM)
Vorteile:
ƒ
Java-Programme laufen „kontrolliert“ in der JVM ab
ƒ Erhöhte Sicherheit und Zuverlässigkeit
ƒ
Kann auf jede Plattformen portiert werden.
ƒ Vom Super Computer bis zu Handys
ƒ Von Unix bis Windows-CE
ƒ Selbes Programm läuft (mit Einschränkungen) auf alle diesen Plattformen ohne
nochmals übersetzt oder portiert zu werden, da sich die VM auf jeder Plattform
gleich verhält
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
40
Java Runtime Environment (JRE)
ƒ
Eine Plattform ist die Hard- und Softwareumgebung auf der ein Programm läuft.
ƒ
Die meisten Plattformen bestehen aus Hardware und Betriebssystem.
ƒ
Die Java-Plattform unterscheidet sich von den meisten anderen Plattformen dadurch,
das sie eine reine Software-Plattform ist, die für verschiedenste Hardware und
Betriebssysteme verfügbar ist.
ƒ
Die Java Runtime Environment besteht aus zwei Teilen:
• Die Java Virtual Machine (Java VM)
• Das Java Application Programming Interface (Java API)
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
42
Erstellen und Ausführen von Java-Programmen
Beispielprogramm HelloWorld
Erstellen von Java-Programm
mit Editor
Erstellen von Programm
HelloWorld mit Editor
Quellcode (Sourcecode) in Java
Datei HelloWorld.java mit Java-Source
Java Compiler (javac)
javac HelloWorld.java
Java Zwischencode (Byte Code)
Java Runtime (java)
Datei HelloWorld.class mit Byte-Code
java HelloWorld
Ausführung von Programm HelloWorld
Programmausführung
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
44
Programm schreiben (Wordpad)
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
45
Programm kompilieren (javac)
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
46
Programm starten (java)
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
47
Schritte des Algorithmenentwurfs und der Programmierung
ƒ Problem erfassen und beschreiben
ƒ Lösungsidee erarbeiten und niederschreiben
ƒ Lösungsidee in einen schrittweisen Ablauf überführen
(= Algorithmus)
ƒ Algorithmus so weit verfeinern und konkretisieren, dass Umsetzung
in Java direkt möglich ist
ƒ Programmierung in Java
ƒ Überlegen von Testfällen (dabei alle möglichen Sonderfälle,
Grenzfälle betrachten)
ƒ Testen und Verbessern
ƒ Dokumentieren der Ergebnisse
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Softwareentwicklung 1 (UZR)
© Systemsoftware, JKU Linz
56
Zugehörige Unterlagen
Herunterladen