Deklarative Programmierung - Westsächsische Hochschule Zwickau

Werbung
Deklarative Programmierung
Prof. Dr. Sibylle Schwarz
Westsächsische Hochschule Zwickau
Dr. Friedrichs-Ring 2a, RII 263
http://www.fh-zwickau.de/~sibsc/
[email protected]
WS 2012/2013
1
Motivation
. . . there are two ways of constructing a software design:
One way is to make it so simple that there are obviously no
deficiencies and the other way is to make it so complicated that
there are no obvious deficiencies. The first method is far more
difficult.
Tony Hoare, 1980 ACM Turing Award Lecture
2
Programmierparadigmen
Abstraktionsstufen:
I
Programmierung = Maschinencode
I
menschenlesbare symbolische Darstellung (Assembler)
I
Programmablauf- und Datenstrukturen (Algorithmen)
(imperative und objektorientierte Sprachen)
I
deklarative Programmiersprachen
(Constraint-Programmierung, logische Programmierung,
funktionale Programmierung)
Unterschied besteht darin, wie detailliert das Programm den
Lösungsweg beschreiben muss.
3
Deklarative vs. imperative Programmierung
deklarativ (beschreibend)
Programm: Repräsentation eines Problems
Programmelemente: Ausdrücke (Terme) und
Gleichungen
Programmierung: Modellierung der Aufgabe
Ausführung: Lösung des beschriebenen Problems
durch Umformung von Ausdrücken
imperativ zustandsorientiert (von-Neumann-Typ)
Programm: Repräsentation eines Algorithmus
Programmelemente: Ausdrücke und Anweisungen
Programmierung: Modellierung eines Verfahrens
zur Lösung einer Aufgabe
Ausführung des Lösungsverfahrens durch
schrittweise Zustandsänderungen
(Speicherbelegung)
4
Deklarative Programmierung
Grundidee: Jedes Programm ist ein mathematisches Objekt mit einer
bekannten wohldefinierten Semantik
funktionale Programmierung (z.B. Haskell, ML, Lisp):
Programm: Menge von Funktions-Definitionen
(Gleichungen zwischen Termen)
Ausführung: Pattern matching, Reduktion (Termersetzung)
logische Programmierung (Prolog):
Programm: Menge logischer Formeln
(Horn-Klauseln)
Ausführung: Unifikation, SLD-Resolution
funktional-logische Programmierung (z.B. Mercury, Curry):
Kombination funktionaler und logischer Konzepte
Constraint-Programmierung:
Programm: Menge von Constraints
(z.B. Gleichungen, Ungleichungen, logische Formeln)
Ausführung: Constraint-Löser (abhängig vom Constraint-Bereich)
Beispiel:
Constraints:
Constraint-Löser:
Menge linearer Gleichungen
Gauß-Algorithmus
5
Einordnung in die Informatik
Informatik Lehre von Darstellung und Verarbeitung von
Information
Anteil der Teilgebiete der Informatik:
theoretische Informatik: Grundlagen
formale Sprachen, Prädikatenlogik,
Berechnungsmodell λ-Kalkül
technische Informatik:
praktische Informatik: Grundlagen und Anwendung
Programmierung, Softwareentwicklung,
Übersetzerbau,
rapid Prototyping, ausführbare Spezifikation,
Verifikation
deklarative Konzepte in Mainstream-Sprachen
angewandte Informatik: Anwendung
z.B. Finanzkalkulationen, sicherheitskritische
Anwendungen, KI, Audio-Programmierung
6
Organisation der Lehrveranstaltung
I
dienstags Vorlesung
I
14tägig (Z1) Übung / Praktikum
Beispiele und schriftliche Übungen
Prüfungsvorleistung: Testat
(regelmäßiges Lösen der praktischen Aufgaben in den
Übungen)
alternative Prüfungsleistung:
I
Programmierprojekt:
Kryptographische Verfahren, z.B. ElGamal, Diffie-Hellman
(neue autotool-Aufgaben)
I
Gruppen zu je drei Studenten
I
Präsentation / Vortrag
I
elektronische Einschreibung nicht vergessen
7
Literatur
online: http://www.haskell.org/
Informationen, Download, Dokumentation, Tutorials, . . .
Bücher:
I
Graham Hutton: Programming in Haskell, Cambridge 2007
I
Klassiker (englisch):
http://haskell.org/haskellwiki/Books
deutsch:
I
I
I
Peter Pepper und Petra Hofstedt:
Funktionale Programmierung. Sprachdesign und
Programmiertechnik Springer 2006
Manuel Chakravarty und Gabriele Keller:
Einführung in die Programmierung mit Haskell
Pearson 2004
8
Werkzeug und Stil
Die Grenzen meiner Sprache bedeuten die Grenzen meiner
Welt.
Ludwig Wittgenstein
speziell in der Informatik:
We are all shaped by the tools we use, in particular: the
formalisms we use shape our thinking habits, for better or for
worse, and that means that we have to be very careful in the
choice of what we learn and teach, for unlearning is not really
possible.
(Many years ago, if I could use a new assistant, one
prerequisite would be No prior exposure to FORTRAN", and at
high schools in Siberia, the teaching of BASIC was not
allowed.)
Edsger W. Dijkstra
aus E. W. Dijkstra Archive
http://www.cs.utexas.edu/~EWD/
9
Funktionale Programmierung
Idee: Programm besteht aus
I einer Menge von Funktionsdefinitionen
(Termgleichungen)
I einem Ausdruck
Vorteile: I deklarativ:
Jedes funktionale Programm beschreibt ein
Problem, nicht dessen Lösung
I Funktionen sind Daten,
können also selbst Argumente und
Ergebnisse von Funktionen sein
(Funktionen höherer Ordnung)
I Rein funktionale Programme sind zustandsund damit nebenwirkungsfrei, daher
I
I
I
I
Korrektheit einfach nachprüfbar (Verifikation)
einfache modulare Konstruktion
einfach parallelisierbar
Programm repräsentiert seine Semantik
(ausführbare Spezifikation, geeignet für rapid
10
Geschichte
ab ca. 1930
ab ca. 1950
ab ca. 1960
ab ca. 1970
ab 1987
Alonzo Church
John McCarthy
Peter Landin
John Backus
Robin Milner
David Turner
λ-Kalkül
LISP
ISWIM
FP
ML
Miranda
Haskell
11
Warum Haskell?
I
deklarativ, Nähe zum (mathematischen) Modell
I
keine Nebenwirkungen (klare Semantik)
I
Funktionen sind Daten (Funktionen höherer Ordnung)
I
starkes Typsystem
I
Typklassen
I
lazy evaluation (ermöglicht Rechnen mit unendlichen
Datenstrukturen)
I
kompakte Darstellung (kurze Programme)
I
Modulsystem
12
Entwicklung von Haskell-Programmen
Haskell-Interpreter: ghci, Hugs
Haskell-Compiler: ghc
Entwicklungsumgebungen:
I
http://leksah.org/
I
http://eclipsefp.sourceforge.net/
I
http://www.haskell.org/visualhaskell/
alles kostenlos und open source
Real Programmers (http://xkcd.com/378/)
13
Herunterladen