Matthias Spohrer · TU München Modul Ablaufmodellierung 2. Präsenzveranstaltung – 13.03.2003 –...

Post on 05-Apr-2015

103 views 0 download

Transcript of Matthias Spohrer · TU München Modul Ablaufmodellierung 2. Präsenzveranstaltung – 13.03.2003 –...

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

?