Präsentation

Werbung
Mag. iur. Dr. techn. Michael Sonntag
Softwareentwicklung
Allgemeines und prozedurale Konstrukte
Institut für Informationsverarbeitung und
Mikroprozessortechnik (FIM)
Johannes Kepler Universität Linz, Österreich
E-Mail: [email protected]
http://www.fim.uni-linz.ac.at/staff/sonntag.htm
© Michael Sonntag 2004
?
?
?
Fragen?
?
Bitte gleich stellen!
?
© Michael Sonntag 2004
?
Grundlagen
Allgemeines
Michael Sonntag
Prozedurale Konstrukte
3
Algorithmen
z
Algorithmus = Verfahren zur Problemlösung
Æ
Schrittweise
» Einzelne Befehle oder Blöcke
Æ
Präzise
» Genaue Bedeutung, genaue Schreibweise (HAARGENAU!)
Æ
Statisch endlich
» Sie wollen irgendwann mit dem Programmieren fertig sein
Æ
Dynamisch endlich
» Sie wollen die Antwort noch erleben
z
Meist in natürlicher Sprache:
Æ
Æ
Michael Sonntag
Noch nicht ganz präzise niedergeschrieben (auch wenn so
gedacht)
Befehle/Blöcke sind für Maschinen unverständlich
Prozedurale Konstrukte
4
Programm
(1)
z
Programm = Realisierung eines Algorithmus in einer
Programmiersprache
Æ
Nun wirklich alles haargenau
» Sonst gibt es eine Fehlermeldung!
Æ
z
Befehle und Blöcke sind fest definiert:
Damit muss man auskommen!
Vollständigkeit:
Æ
Alle modernen Programmiersprachen sind vollständig
» D. h. alles was man als Algorithmus hinschreiben kann, kann man auch
programmieren
– Auch wenn es oft zu lange (statisch oder dynamisch) dauern würde!!!
» Jedes praktische Problem kann (zumindest theoretisch) damit gelöst
werden, da für alles ein Algorithmus existiert
– Was nicht gelöst werden kann: Siehe Gödel!
Michael Sonntag
Prozedurale Konstrukte
5
Programm
(2)
z
Praktische Probleme bei Programmen
Æ
Manche Probleme sind „NP vollständig“
» Man kann sie programmieren, aber außer bei Trivialbeispielen endet
das Universum bevor das Programm fertig ausgeführt ist
» Annäherungslösungen müssen gesucht werden
Æ
Manche Probleme sind „schwer“: Der Algorithmus ist nicht leicht zu
finden
» Kreativität, Nachdenken und Abschreiben (z. B. im Internet oder in
Literatur nach Lösungen suchen)
Æ
Manche Probleme sind aufwendig: Der Algorithmus ist da, aber er
ist sehr lang und sehr kompliziert
» Nachdenken und Arbeiten
Michael Sonntag
Prozedurale Konstrukte
6
Problem-Probleme
???
z
Praktische Probleme bei Problemen
Was ist eigentlich das Problem?
z
Viele Auftraggeber haben nur eine ungenaue Vorstellung dessen,
was sie eigentlich wollen:
» „Soll die Lohnabrechnung machen, aber man sollte vielleicht auch
gleich noch den Lagerbestand feststellen können; und überhaupt soll
auch die ganze Entwicklungsabteilung damit unterstützt werden“
z
Feststellen, was überhaupt genau gemacht werden soll,
ist der erste (und oft wichtigste) Schritt!
Æ
z
Dies wird hier nicht näher erläutert!
Der nächste Schritt ist die Reduktion des Problems
Æ
Michael Sonntag
Praktische Probleme sind so groß, daß ein Algorithmus für alles
auf einmal nicht mehr erstellt werden kann: Überforderung des
Gehirns (und der Papierfläche, die man noch ansehen kann!)
Prozedurale Konstrukte
7
Software Engineering
z
z
=Unterteilung des Problems in so kleine Teilprobleme,
daß diese komplett verstanden und dann
auf einmal und einheitlich
gelöst werden können
Auf einmal: Von einer Person kann ein Algorithmus entwickelt
werden
Einheitlich: Eine Person kann das zugehörige Programm
schreiben
Æ
z
Auch wenn es mit mehreren Personen ev. schneller geht
Siehe dazu Kapitel 15 (Schrittweise Verfeinerung) im Buch!
Æ
Dies ist eine Methode; es gibt noch andere
» Siehe dazu auch: SE Modelle, OO Design, AOE, ...
Michael Sonntag
Prozedurale Konstrukte
8
Softwareentwicklung
z
Wir gehen davon aus, dass das Problem genau bekannt ist und
wir auch eine genaue Beschreibung davon besitzen
Æ
z
Übungen: Fragen hierzu an den Übungsleiter/Vortragenden!
Umsetzung in einen Algorithmus ist eine kreative Tätigkeit
Æ
Æ
Wenig erforscht, kaum lehrbar
Aufgabe der Teilnehmer mit Hinweisen des Vortragenden
» Die meisten Probleme sind gar nichts so schwer…
» Im Grundsatz auch in der Praxis nicht!
– Die Details haben es meist in sich, sowie wenn später Änderungen oder
Erweiterungen gewünscht werden
z
Umsetzung des Algorithmus in ein Programm
Æ
Æ
Michael Sonntag
Hauptaugenmerk der LVA
Wir beschäftigen uns hier mit Java
Prozedurale Konstrukte
9
Einteilung der Programmiersprachen
z
Funktionale: Alles ist ein mathematischer Ausdruck
Æ
Auch das ist vollständig! Alles lässt sich damit lösen!
» Für Benutzerinterfaces oä schlecht geeignet
» Sehr gut für komplexe Berechnungen
Æ
z
Prozedurale: Schritt für Schritt ein Befehl an den Computer
Æ
Æ
Æ
z
Beispiel: Lisp
Direkte 1:1 Umsetzung des Algorithmus
Bei weitem die allergrößte Verbreitung
Beispiel: Java
Sonstige: Verschiedene Misch- oder Sonderformen
Æ
Æ
Michael Sonntag
Eher unbedeutend; am ehesten noch bei künstlicher Intelligenz
oder in bestimmten Sondergebieten/Spezialanwendungen
Beispiele: Prolog
Prozedurale Konstrukte
10
Grundlagen
Prozedurale Konstrukte
Michael Sonntag
Prozedurale Konstrukte
11
Daten, Befehle
z
Datum = Bestimmter Wert (Plural: Daten)
Æ
Æ
z
Befehle = Anweisungen zur Datenmanipulation
Æ
Æ
z
Beispiele: -2,“Java“, 3.14159, 14.3.2003, März 2003, ...
Computer verarbeiten Daten (=Datenverarbeitung; EDV)
Beispiele: Addieren, Multiplizieren, Ausgeben, Datei öffnen,
Webseite von Server abholen, ….
Befehle können sehr einfach bis extrem kompliziert sein
Praxis:
Æ
Æ
Æ
Michael Sonntag
Maschinensprache (=Hardware) = Sehr einfache Befehle
Programmiersprache = „Mittelschwere“ Befehle
Bibliotheken (=fertige Programme für Teilaufgaben) = Leicht bis
extrem kompliziert
Prozedurale Konstrukte
12
Daten, Befehle
z
Heute: Daten und Befehle konzeptuell streng getrennt
Æ
z
Daten =
Æ
Æ
z
Früher: Selbstmodifizierende Programme (=Programm sieht seine
Befehle als Daten an und verändert sie)
Variablen (veränderlich), oder
Konstanten (invariant)
Befehle (Anweisungen) =
Æ
Æ
Vorgegeben von der Programmiersprache
Meistens zwischen 50 und 100 gelegen
» Je nach Definition, was alles ein getrennter Befehl ist
Æ
Grundmuster sind jedoch noch viel weniger: Vier Stück
» Zuweisung, Sequenz, Verzweigung, Schleife
– Dies reicht für Vollständigkeit aus! Weniger genügt jedoch nicht!
Michael Sonntag
Prozedurale Konstrukte
13
Variablen
z
„Behälter“ für Daten mit einem Namen
Æ
z
Besitzen eine bestimmte Form, nur diese Art von Dingen passt
hinein (entspricht einem Wertebereich)
Æ
z
z
Name ist meist frei wählbar (in bestimmten Grenzen)
Moderne Programmiersprachen: Jede Variable ist typisiert, d. h.
sie besitzt einen Typ und NUR das kann hinein!
Kann jederzeit beliebig verändert werden
Besitzt immer einen bestimmten Wert
Æ
Æ
Achtung: Bei Java kann dieser ev. nicht abgefragt werden!
Realisierung: Jede Variable besitzt einen Platz im Speicher; darin
steht immer irgendetwas, das entsprechend dem Typ der Variable
interpretiert wird
» Beispiel: 48 kann als Zahl 48 aufgefasst werden (Typ: Ganze Zahl),
aber auch als Zahl 0 (Eigentlicher Typ: Zeichen, also „0“)!
Michael Sonntag
Prozedurale Konstrukte
14
Zuweisung
z
Zuweisung eines neuen Wertes an eine Variable
Æ
z
Meist: Berechnung eines Wertes. Beispiele:
Æ
Æ
Æ
Æ
Æ
z
z
Dies kann auch eine temporäre Variable ohne Namen sein
i=1 („i“: Name der Variablen „=“: Zuweisung; „1“: neuer Wert)
i=1+1 (Berechnung eines neuen Wertes)
c=„Lehrgang“ (Zuweisung von Text)
c=c+„ akademischen Characters“ („Berechnung“ neuen Wertes)
x=y+z
Zuweisungen sind nur möglich auf „Dinge“, die eine
Speicherstelle repräsentieren (=„L-Value“; left-value)
Unmöglich ist daher:
Æ
Æ
Michael Sonntag
1=i (1 ist ein Wert; i repräsentiert eine Speicherstelle)
y+z=x (x, y, z sind Speicherstellen; y+z aber nicht, dies ist ein
Wert!)
Prozedurale Konstrukte
15
Sequenz
z
z
z
Die Hintereinander-Ausführung von mehreren einzelnen
Anweisungen
Werden der Reihe nach ausgeführt
Jede Anweisung wird komplett beendet bevor die nächste
begonnen wird
Æ
z
Keine Verzahnung (nächster Befehl beginnt, bevor der vorige
komplett beendet wurde)!
Reihenfolge wird durch die statische Schreibung festgelegt
Æ
Michael Sonntag
Was weiter oben steht, wird zuerst ausgeführt!
Prozedurale Konstrukte
16
Sequenz
EBNF
z
z
z
x=3
y=4
z=x*y
x=3
Michael Sonntag
y=4
z=x*y
Prozedurale Konstrukte
17
Sequenz
Nassi-Shneiderman-Diagramm
z
z
z
x=3
y=4
z=x*y
x=3
y=4
z=x*y
Michael Sonntag
Prozedurale Konstrukte
18
Verzweigung
z
Entscheidung zwischen zwei Alternativen
Æ
Æ
z
Es wird IMMER nur EINE davon ausgeführt, NIE beide!
Auch: Selektion, Auswahl
Entscheidung erfolgt nach einem Ausdruck
Æ
Michael Sonntag
Dieser muss einen logischen Wert (Wahr oder Falsch) ergeben
Prozedurale Konstrukte
19
Verzweigung
EBNF
z
Wenn x<y, dann min=x, sonst min=y.
min=x
min=y
z
Es fehlt die Bedingung (x<y)!
Æ
Michael Sonntag
EBNF kann nicht alles ausdrücken, was wir programmieren
können!
Prozedurale Konstrukte
20
Verzweigung
Nassi-Shneiderman-Diagramm
z
Wenn x<y, dann min=x, sonst min=y.
J
x<y?
min=x
Michael Sonntag
N
min=y
Prozedurale Konstrukte
21
Schleife
z
Wiederholte Ausführung einer Anweisung
Æ
z
Jede Schleife besitzt eine Bedingung die spezifiziert, wie oft sie
ausgeführt wird
Æ
Æ
z
Auch genannt: Iteration, Wiederholung
Abbruchbedingung
Dadurch unterscheiden sich die verschiedenen Arten
Drei/vier grobe Hauptarten von Schleifen:
Æ
Æ
Æ
Æ
Prüfung der Bedingung am Anfang vor jedem Durchlauf (=While)
Prüfung der Bedingung am Ende nach jedem Durchlauf (=Repeat)
Prüfung vor der ersten Ausführung; feste Anzahl (=For)
Gar keine Prüfung: Endlosschleife (=Loop)
» Nicht verwenden!
Michael Sonntag
Prozedurale Konstrukte
22
Schleifen
EBNF
z
i=1, bis i=10 erhöhe i um 1 und gibt „*“ aus
i=1
z
z
i=i+1
ausgeben “*”
Auch hier fehlt wieder die Bedingung!
Außerdem könnten wir das auch anders zeichnen:
i=1
ausgeben “*”
z
i=i+1
Grund: Text ist nicht genau genug!
Michael Sonntag
Prozedurale Konstrukte
23
Schleifen
Nassi-Shneiderman-Diagramm
z
i=1, bis i=10 erhöhe i um 1 und gibt „*“ aus
Als While-Schleife:
i=1
while i<=10
i=i+1
ausgeben “*”
Michael Sonntag
AlsRepeat-Schleife:
i=1
i=i+1
ausgeben “*”
until i>10
Prozedurale Konstrukte
24
Wann welche Schleife?
Die Auswahl-Frage!
z
Wir wissen von Anfang an genau, wie oft die Schleife
durchgeführt werden soll
Æ
Æ
z
Schleife muss immer mindestens ein Mal durchlaufen werden
Æ
z
Oder nur in ganz seltenen Ausnahmefällen einmal anders
FOR Schleife verwenden!
REPEAT (do-while) Schleife verwenden!
Sonst oder wenn unsicher, was besser geeignet is
Æ
Æ
Æ
Michael Sonntag
Schleife wird ev. gar nicht durchlaufen
Aussage schwer, wann genau wie oft
WHILE Schleife verwenden!
Prozedurale Konstrukte
25
Kombinationen
z
Zuweisung, Sequenz, Verzweigung, Schleife
Æ
Dies ist ALLES was sie hier lernen werden
» Zumindest im Grundsatz… Details folgen noch!
z
Diese Elemente können beliebig kombiniert werden:
Æ
Æ
Æ
Æ
Michael Sonntag
Schleife in Verzweigung
Verzweigung in Schleife
Sequenz von Zuweisungen
….
Prozedurale Konstrukte
26
Kombinationen
Nassi-Shneiderman-Diagramm
z
Summe der geraden Zahlen von 1 bis 20 berechnen
N
Summe=0
Zähler=1
Zähler gerade?
J
Summe=
Summe+Zähler
Zähler=Zähler+1
Until Zähler>20
Summe anzeigen
Michael Sonntag
Prozedurale Konstrukte
27
Herunterladen