Matthias Spohrer · TU München Modul „Ablaufmodellierung“ Präsenzveranstaltung – 13.03.2003 – TU Stammgelände Innensta Nachqualifizierungskurs für Informatiklehrkräfte
Matthias Spohrer · TU München
Modul „Ablaufmodellierung“
2. Präsenzveranstaltung – 13.03.2003 – TU Stammgelände Innenstadt
Nachqualifizierungskurs für Informatiklehrkräfte
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 2
Inhaltsübersicht
Informationen Überblick über Programmiersprachen Vergleich Imperativ - Funktional Wiederholung: Grundstrukturen Imperativer Programme Call-by-value / Call-by-reference Der Quicksort Einführung in die funktionale Programmierung: Haskell
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 3
Infos - Präsenztage
Donnerstag, 13.03.03
14-18 Uhr HS 0670
Funktionale Modellierung
Dienstag, 08.04.03 14-18 Uhr HS 1601
OOM
Mittwoch, 07.05.03 14-18 Uhr HS 1601
OOM
Montag, 02.06.03* 15(?)-18 Uhr*
HS 0220
Auf Wunsch, zur Klausur
Donnerstag, 26.06.03
10-12 Uhr HS 0220
Klausur
*ob und ab wann dieser Präsenztag stattfinden soll, werden wir jetzt gemeinsam ausmachen. •Außerdem eine Abschlussveranstaltung im Juli.
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 4
Sonstiges / Infos / Aussprache
Präsenztag nächstes Schuljahr: wie angekündigt DienstagDienstag
Fehlende Stammblätter / Einverständniserklärungen bitte umgehend abgeben!!!!!
Auffälligkeiten zu den Korrekturen
Anmerkungen / Wünsche / Fragen zum aktuellen Material...
Unterschied Felder – Verbund – Liste?
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 5
Kleine Aufwärmübung
Staatsexamen Herbst 2000, Thema II, Aufgabe 1Staatsexamen Herbst 2000, Thema II, Aufgabe 1Geben Sie Zustandsdiagramme für deterministische endliche Automaten für die folgenden Sprachen an.a) Die Menge der Wörter w{a,b}*,deren Länge |w| entweder durch 2 oder durch 3 teilbar ist.
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 6
Falls der Wert von a größer als 0 ist, erhöhe a um 1
Kontext: Datentyp von a
Syntax
Aufbau der (zulässigen) ProgrammtexteDefinition durch eine Grammatik
Semantik
Bedeutung der Syntax unter Berücksichtigung des Kontextes
Unterscheidung
Beispiel:
if (a > 0) a = a + 1;
Programmiersprachen
Einteilung der Programmiersprachen in
• niedere Programmiersprachen• höhere oder problemorientierte Programmiersprachen
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 7
Niedere Programmiersprachen
Maschinensprache:
Darstellung der Befehle durch Binärcode
Vorteil: direkte Ausführung durch den jeweiligen Prozessor, damit schnell
Nachteil: prozessorabhängigfür den Menschen nicht verständlich
Beispiel: 00101011 00000110 11010101
Assemblersprache:
Darstellung der Maschinenbefehle durch mnemonische Symbole
Vorteil: leichter verständlich
Nachteil: prozessorabhängig, Übersetzung in Maschinensprache notwendig
Beispiel: move 9 A ( A Akkumulator = spezieller Speicher)add 10 A
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 8
Höhere Programmiersprachen
Sprachen zur Formulierung einer Problemlösung
Man unterscheidet:
• imperative Programmiersprachen
• objektorientierte Programmiersprachen
• funktionale Programmiersprachen
• logische (prädikative) Programmiersprachen
• Anfragesprachen für Datenbanken, z.B. SQL
• Internetsprachen, z.B. HTML, XML
• Entwurfs- und Spezifikationssprachen, z.B. UML
„Klassische“ Einteilung, orientiert am vorliegenden Denkschema
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 9
Imperative Programmiersprachen
Grundprinzipien: + Anwendung bei algorithmischen Problemen (festgelegte Folge von Anweisungen)+ Variablenkonzept
Beispiele: Basic, Pascal, C
Programmbeispiel: Sortier-Algorithmen
„Grundlagen der Programmierung“ im Studienmaterial „betrachtet“
Java als imperative Programmiersprache
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 10
Funktionale Programmiersprachen
Grundprinzipien: + Programm = Funktion, die sich aus anderen Funktionen zusammensetzen kann
+ wichtigstes Konstruktionsprinzip: Rekursion
+ keine Variablen (= benannter Speicherplatz)
Beispiele: Gofer / Haskell, LISP / Scheme
Programmbeispiel: in Gofer / Haskell:
quadrat::Int -- > Intquadrat n = n * n
binom:: (Int, Int) --> Intbinom n m = quadrat(n) + 2 * n * m + quadrat(m)
Aufruf z.B. mit binom(2,3)
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 11
Logische Programmiersprachen
Grundprinzipien: Formulierung des eigenen Wissens in Form einer Menge von Regeln
Computer versucht mit Hilfe der Regeln, selbstständig eine Lösung zu finden
Beispiele: PROLOG
Programmbeispiel: in PROLOG
Heiratsbeziehung: verheiratet(Mann, Frau)
Regeln: verheiratet(Heinz, Klara). verheiratet(Klaus, Maria).
?verheiratet(Heinz, Klara)yes
?verheiratet(Klaus, Frau)
Frau = Maria
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 12
Objektorientierte Programmiersprachen
Grundprinzipien: Objekte mit Eigenschaften und Operationen
Klassenbildung
Vererbung
Polymorphie
Dynamische Bindung
Beispiele: C++, Java, Delphi (mit Einschränkungen)
Programmbeispiel: Kontenverwaltung bei einer Bank
-> OOM - Modul-> OOM - Modul
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 13
Zusammenfassung
Viele Sprachen benutzen auch Konzepte anderer Sprachgruppen.
Beispiel: Verwendung von Konzepten imperativer Sprachen in Java bei der Programmierung von Methoden.
Es gibt keine beste Programmiersprache
Die Wahl der Sprache ist abhängig vom zu lösenden Problem!
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 14
Imperative und funktionale Programmierspr.
Funktional Imperativ
Grundprinzip
Funktionales Programm = Term, in dem selbstdefinierte
Funktionen vorkommen können
Zustand A (= Speicherbelegung)
Zustand B (= „neue“ Speicherbel.)
Imperatives Programm = Folge von Zustandskombinationen der
betroffenen Variablen
Variablen als benannter Container zur Aufnahme eines Wertes (eines be-stimmten Typs )
Nein Ja
Problem: Seiteneffekt, verstanden als. „unerwünschte, nichtbeobach-tete“ Änderung einer Variablen ( Abschnitt „Felder“ im Material)
Bedingungsanweisung Ja Ja
Wiederholungsanweisung Nein, Steuerung über Rekursion Ja
Besondere Eignung für rekursive Datenstrukturen Algorithmen
Anweisung
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 15
Modellierung von Abläufen
Möglichkeiten, Abläufe zu beschreiben
Aktionsstrukturen
Zustandsmodell
Algorithmische Modelle
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 16
„Modellierung“ von Algorithmen
Verwendung von
Kontrollflussdiagrammen Aktivitätsdiagramme Struktogrammen
Lehrplan trifft bzgl. der Modellierungsmethode keine Festlegung! An den Schulen in der Regel Verwendung von Struktogramme
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 17
Algorithmisches Problemlösen
Diese Vorgehensweise wird oft
Strukturierte Programmentwicklung
oder
Top – Down – Entwicklung
oder
Prinzip der schrittweisen Verfeinerung genannt.
1. Zerlegung des vorgegebenen Problems in • Teilprobleme und • die Beziehungen zwischen diesen Teilproblemen ( Schnittstellen)
2. Wiederholung von Schritt 1, angewendet auf die Teilprobleme, bis man „kleinste“ Teilprobleme hat, die ohne weitere Zerlegung gelöst werden können. Zur Lösung dieser kleinsten Teilprobleme sind nur eine geringe Zahl unterschiedlicher Grundstrukturen nötig.
3. Zusammensetzung der Teilproblemlösungen führt zur Lösung des Ausgangsproblems
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 18
Algorithmisches Problemlösen
HAUPTPROGRAMM
Daten
Code
Prozedur 1
Daten
Code
Prozedur 2
Daten
Code
Prozedur 3
Daten 2
Daten 3
Daten 4
Daten 5
Daten 1
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 19
Grundstrukturen und Darstellung in Struktogrammen I
...Einfache Anweisung
...
...
...
Sequenz von Anweisungen
Bool. Ausdruckwahr falschEinseitige
Bedingungsanweisung
...Prozeduraufruf
IF Boolscher Ausdruck { ... }
Bool. Ausdruckwahr falschZweiseitige
Bedingungsanweisung
IF Boolscher Ausdruck { ... }ELSE { ... }
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 20
MehrseitigeBedingungsanweisung
Ausdruck
w1 w2 w3
SWITCH Ausdruck { case w1: .... case w2: .... case w3: ....}
Solange <boolscher Ausdruck>Wiederholung mitAnfangsbedingung
wdh.
WHILE (bool. Ausdruck) { ... }
bis <boolscher Ausdruck>
Wiederholung mitEndbedingung
wdh. DO { ... }WHILE (bool. Ausdruck)
Von ... bis ...Wiederholung mitZähler
wdh.
FOR (i = 1; i < 3, i = i+1) { ... }
Grundstrukturen und Darstellung in Struktogrammen II
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 21
Problem von Struktogrammen in der Schule
Bei Betrachtung von einfacheren Problemen wirken Struktogramme oft (vor allem) für Schüler überdimensioniert, in der Regel reicht hier meist Pseudocode.
Bei komplexen Problemen sind Struktogramme unübersichtlich, schwierig „wartbar. Man muss bereits am Anfang wissen, wie das ganze Struktogramm ausschaut.
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 22
Schwierigkeiten beim algorith. Problemlösen
Trotz Strukturierung muss der Problemlösende das Gesamtkonzept erkennen und bei jedem Teilalgorithmus die Zweckdienlichkeit für die Gesamtlösung bedenken
Nachträgliche Änderung der Daten erfordert eine aufwendige Überarbeitung aller darauf operierenden Teilalgorithmen
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 23
Compiler / Interpreter
Compiler: Ein Programm, das Programme aus einer Sprache A (Quellsprache) in
eine Sprache B (Zielsprache) übersetzt.(lexikalische, syntaktische, semantische Analyse)
Nach dieser Übersetzung kann das Programm ausgeführt werden.
Interpreter: Ein Programm, das ein Programm aus einer Sprache A Anweisung für Anweisung (nach der notwendigen lexikalischen und syntaktischen Analyse) sofort ausführt.
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 24
Compiler / Interpreter
Vorteil Interpreter: - sind einfacher zu konstruieren - schneller im Dialogbetrieb, beim Testen,
Nachteil Interpreter: - längere Rechenzeit bei der kompletten Ausführung (jeder Befehl, der mehrfach ausgeführt wird, muss mehrfach übersetzt werden; bei jeder Zuweisung müssen die Adressen der Variablen gesucht werden)
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 25
Kleine Zwischenübung
Versuchen Sie sich kurz an Aufgabe 6!
Programm dazu!Programm dazu!
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 26
Staatsexamen Frühjahr 1996, Aufgabe 5Staatsexamen Frühjahr 1996, Aufgabe 5
Erklären und vergleichen Sie die Aufrufprinzipien Call-by-value und Call-by-reference
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 27
Call-by-value
Call-by-value: WertparameterEs wird beim Prozeduraufruf nur der Wert des aktuellen Parameters als Kopie übergeben, nicht jedoch der Name („die ganze Schachtel“) oder die Speicheradresse
procedure cbv(x, y, z: integer);begin
x := x + 3;y := y + z;output(x,y,z);
end;
a := 1; b := 2
cbv(a, b, 7);
Es bleibt a=1, b=2;
1 2 7
// x = 1 + 3
// y = 2 +7
(4, 9, 7)
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 28
Call-by-value / Call-by-reference
Call-by-reference: ReferenzparameterDie Prozedur arbeitet unmittelbar mit den aktuellen Parametern und nicht nur auf Kopien der Werte
procedure cbr(var x, y, z: integer);begin
x := x + 3;y := y + z;
end;
a := 1; b := 2
cbr(a, b, 7);Zuerst ist a:=a+3, also a=4
Dann ist b:=b+7=9
Also ist a=4, b=9;
1 2 7
Test hier!Test hier!
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 29
Der Quicksort
Schnelles internes Sortierverfahren
1962 von C. Hoare vorgeschlagen
Divide-and-conquer-Verfahren („Teile und herrsche“)Divide-and-conquer-Verfahren („Teile und herrsche“)Divide: Das Problem wird in mehrere möglichst gleichgroße Teilprobleme gleicher Art aufgespalten, die unabhängig voneinander gelöst werdenConquer: Die Teillösungen werden zu einer Lösung des Gesamtproblems zusammengesetzt
Quicksort gilt als schnellstes internes Sortierverfahren mit durchschnittlicher Laufzeit von n*log(n) ( nächstes Jahr!)
Quicksort(a, links, rechts)Quicksort(a, links, rechts) soll eine Liste a von Elementen innerhalb der Grenzen links und rechts sortieren.
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 30
Quicksort(a, links, rechts)
3 1 4 28098 5
3 1 4 28098 5
Wähle „mittleres Element“z.B. x = a[(links+rechts) div 2]Oder x=4
x = 4 i = links, j = rechtswhile i <= j do
links=0 rechts=8
3 1 4 28098 5
i=0 j=8
while a[i] < x do inc(i)
i=2
3 1 4 28098 5 while a[j] > x do dec(j)
i=2
j=8
j=7
If i <= j then vertausche a[i] und a[j]inc(i), dec(j) fi3 1 4 88092 5
i=2 j=7
od
a:=
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 31
Quicksort(a, links, rechts)
3 1 4 28098 5
i = links, j = rechtswhile i <= j do
links=0 rechts=8
while a[i] < x do inc(i)
while a[j] > x do dec(j)
if i <= j then vertausche a[i] und a[j]inc(i), dec(j) fi3 1 4 88092 5
i=2 j=7
3 1 4 88092 5i=3 j=5
3 1 0 88492 5j=5i=3
3 1 0 88492 5i=4, j=4
od
Wähle „mittleres Element“z.B. x = a[(links+rechts) div 2]Oder x=4
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 32
Quicksort(a, links, rechts)
3 1 4 28098 5
i = links, j = rechtswhile i <= j do
links=0 rechts=8
while a[i] < x do inc(i)
while a[j] > x do dec(j)
if i <= j then vertausche a[i] und a[j]inc(i), dec(j) fi
3 1 0 88492 5j=3 i=4
3 1 0 88492 5i=4, j=4
od
3 1 0 88492 5
Quicksort(links, j) Quicksort(i, rechts)
Wähle „mittleres Element“z.B. x = a[(links+rechts) div 2]Oder x=4
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 33
Aufgabe
Setze den Algorithmus in java um!
MattsQuickSort.javaMattsQuickSort.java
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 34
Einführung in HASKELL – Über Haskell
Haskell ist eine rein funktionale Programmiersprache, ziemlich verschieden von anderen bekannten Programmiersprachen.
Die Sprache ist benannt nach Haskell Brooks Curry , dessen Arbeit in mathematischer Logik ein Grundbaustein für die funktionalen Programmiersprachen war.
Haskell basiert auf dem Lambda Kalkül deshalb wird das Lambda als Logo verwendet.
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 35
Einführung in HASKELL – funktionales Programmieren
Ein funktionales Programm besteht aus einem einzelnen Ausdruck, der ausgeführt wird indem er berechnet wird:
Bsp.: Tabellenkalkulation: man definiert den Inhalt einer Zelle in Abhängigkeit von den anderen Zellen. Im Mittelpunkt steht das, 'was' berechnet wird und nicht 'wie' es berechnet wird. Beispiele:
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 36
Einführung in HASKELL – funktionales Programmieren
Beachte:
• Reihenfolge, in welcher die Zellen berechnet werden sollen, wird nicht festgelegt Tabellenkalkulation soll die Zellen unter Berücksichtigung ihrer Abhängigkeiten berechnen
• Keine Vorgabe der Speicherzuteilung Tabellenkalkulation stellt eine unendliche Ebene von Zellen bereit und weist nur den gerade benutzten Zellen einen Speicherplatz zu
• Inhalt einer Zelle wird durch einen Ausdruck festgelegt (dessen Teile in beliebiger Reihenfolge berechnet werden können) und nicht durch eine Folge von Befehlen welche den Wert berechnen.
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 37
Einführung in HASKELL
Eine interessante Konsequenz aus der unbestimmten Reihenfolge der Berechnung in der Tabellenkalkulation ist, dass der Begriff Anweisung nicht mehr nützlich ist. Wenn man nicht weiß, wann genau die Anweisung ausgeführt wird, kann man keinen Nutzen daraus ziehen!
Dies steht im krassen Gegensatz zu Programmen in herkömmlichen Programmiersprachen wie C oder PASCAL, welche notwendigerweise aus einer sorgfältig festgelegten Folge von Anweisungen bestehen, oder Java, in welcher die Reihenfolge der Methodenaufrufe entscheidend für die Bedeutung des Programms ist.
Die Konzentration auf das 'was' (high-level, d.h. höherer Abstraktionsgrad), im Gegensatz zum 'wie' (low-level, d.h. niederer Abstraktionsgrad), ist das wesentliche Merkmal der funktionalen Programmiersprachen.
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 38
Einführung in HASKELL - SQL
Eine andere fast-funktionale Sprache ist SQL.
Eine SQL-Abfrage ist ein Ausdruck mit "projections, selections, joins".
Die Abfrage bestimmt, welche Relation berechnet werden soll ohne zu sagen wie. Tatsächlich kann die Abfrage in jeder passenden Reihenfolge ausgewertet werden.
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 39
Installation HASKELL
Wir verwenden einen Haskell-Interpreter namens „HugsHugs“.
Diesen müsst ihr euch im Internet besorgen (etwa 2,7MB groß), er ist für alle Plattformen verfügbar.
Ladet euch bitte unter http://cvs.haskell.org/Hugs/pages/downloading.htm die passenden Dateien herunter (für Windows wäre das hugs98-Nov2002.msi sowie falls gewünscht die beiden anderen msi-Dateien, entsprechende Dateien findet ihr dort auch für alle anderen Betriebssysteme. Ihr benötigt den MS Installer zum Ausführen, dieser ist jedoch in den neueren Windows-Systemen bereits integriert.
Ansonsten könnt ihr ihn „nachrüsten“ (link ebenfalls auf obiger homepage), oder auch folgende Alternative für ältere Windows-Systeme verwenden (diese habe ich jedoch nicht getestet!): http://www.cse.ogi.edu/PacSoft/projects/Hugs/downloads/Hugs98install.exe
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 40
Demonstration zur Arbeit mit HASKELL
Einfache Grundprozeduren
Steuerungsoptionen
Selbstdefinierte Funktionen
Quicksort in HASKELL
Starte HugsStarte Hugs
Nachqualifizierungskurs für Informatiklehrkräfte© 2003 Matthias Spohrer · TU München
Seite 41
Fragen
?