1 Funktionale vs. Imperative Programmierung

Ähnliche Dokumente
Imperative vs. Funktionale Programmierung

Einführung in die Programmierung mit VBA

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Universität Konstanz FB Informatik und Informationswissenschaft. Deklarative Programmierung (Declarative Programming)

3 Exkurs: Der λ-kalkül

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

Optimierungen in einer formalen Semantik Konstantenfaltung und Konstantenpropagation

4.Grundsätzliche Programmentwicklungsmethoden

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

Informatik I Übung, Woche 41

C.3 Funktionen und Prozeduren

Programmieren als Grundkompetenz

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Algorithmierung und Programmierung - immer aktuell. Material, S.54ff.

4.4 Imperative Algorithmen Prozeduren

Crashkurs C++ - Teil 1

3. Grundanweisungen in Java

! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -

3. Anatomie eines imperativen Java- Programms

Syntax der Sprache PASCAL

Definition der Hilfsprädikate

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Einführung in die Informatik I (autip)

Informatik I Übung, Woche 40

public static void main(string[] args) {

Funktionale Programmierung Einführung

Informatik I Übung, Woche 41

4.2 Programmiersprache C

Anwendungsentwicklung 2. Teil

Einführung IMP-Syntax Reduktionssemantik Maschinen-Semantik. Teil IV. Semantik imperativer Sprachen

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Welche Informatik-Kenntnisse bringen Sie mit?

Kapitel 1: Informationsverarbeitung durch Programme

Verifizierende Testverfahren

Programmentwurf mittels strukturierter Programmierung. Programmentwurf. Nassi-Shneiderman-Diagramm [DIN ]

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15

Algorithmen und Datenstrukturen Korrektheit von Algorithmen

Visuelle Kryptographie. Anwendung von Zufallszahlen

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

6. Funktionen, Parameterübergabe

Algorithmen implementieren. Implementieren von Algorithmen

INFORMATIK FÜR BIOLOGEN

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung

5. Übung - Kanalkodierung/Programmierung

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog. IV.1 Grundkonzepte der logischen Programmierung - 1 -

Kurs 1612 Konzepte imperativer Programmierung Musterlösung zur Nachklausur am

Array-Zuweisungen. Array-Zuweisungen können über die Position, den Namen oder gemischt erfolgen.

Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Kapitel 3. Imperative Programmierung. Programmieren 1 G. Wittum, G-CSC, Universität Frankfurt

Algorithmen und ihre Programmierung

Abschnitt 6: Grundlagen der imperativen Programmierung

Algorithmen und Datenstrukturen II

Grundlagen der Informatik I (Studiengang Medieninformatik)

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Datentypen: integer, char, string, boolean

Kapitel 1: Informationsverarbeitung durch Programme

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

Javakurs für Anfänger

Werkzeuge zur Programmentwicklung

Abschnitt 11: Korrektheit von imperativen Programmen

Übersicht Formale Semantik. Übersicht Axiomatische Semantik. Inhaltsübersicht HPS WS 2003/04. Vorlesung Höhere Programmiersprachen,

Von der Chomsky-Hierarchie

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz

Multiparadigmen- Programmiersprachen

Grundlagen der Programmierung 2. Operationale Semantik

Einführung in die Informatik Algorithms

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

Einführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax

Programmierparadigmen

ALP I Turing-Maschine

Programmierkurs Python I

Vorlesung Datenstrukturen

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

4 Spezifikation und Verifikation

Algorithmus. Was ist ein Algorithmus? Ibn Musa Al-Chwarismi persischer Mathematikers 9. Jahrhundert Buch: Regeln der Wiedereinsetzung und Reduktion.

Programmiertechnik Kontrollstrukturen

Programmieren lernen mit Visual Basic

Einstieg in die Informatik mit Java

Algorithmen und Programmieren II Programmverifikation {V} P {N}

Programmieren I. Kapitel 5. Kontrollfluss

13. Funktionale Konzepte in Java

2. Programmierung in C

Funktionale Programmierung ALP I. µ-rekursive Funktionen WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Software Entwicklung 1

Programmiersprachen. Marco Block. Folieninhalte teilweise übernommen von Prof. Heinz Schweppe (ALP II, SoSe 2008) und Prof. Löhr (ALP II, SoSe 2004)

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Gliederung. Algorithmen und Datenstrukturen I. Eine wichtige Frage. Algorithmus. Materialien zur Vorlesung. Begriffsbestimmung EUKLID Primzahltest

Transkript:

1 Funktionale vs. Imperative Programmierung 1.1 Einführung Programme einer funktionalen Programmiersprache (functional programming language, FPL) bestehen ausschließlich aus Funktionsdefinitionen und Funktionsaufrufen. Die Bausteine der Funktionsdefinitionen sind dabei der Aufruf weiterer vom Programmierer definierter Funktionen und der Aufruf elementarer Funktionen (und Operatoren), die durch die FPL selbst definiert werden. Anwendung (application) einer Funktion f auf ein Argument e ist das zentrale Konzept in FPLs und wird daher standardmäßig einfach durch Nebeneinanderschreiben (Juxtaposition) notiert: Funktionale Programme werden ausschließlich durch Kompositionen von Funktionsanwendungen konstruiert. f e 2003 T. Grust Funktionale Programmierung: 1. Funktionale vs. Imperative Programmierung 7

Funktionale PL Programmkonstruktion: Applikation und Komposition Operational: Funktionsaufruf, Ersetzung von Ausdrücken Formale Semantik: λ-kalkül Imperative PL Programmkonstruktion: Sequenzen von Anweisungen Operational: Zustandsänderungen (Seiteneffekte) Formale Semantik: schwierig (denotationale Semantiken) FPLs bieten konsequenterweise folgende Konzepte nicht: Sequenzoperatoren für Anweisungen ( ; in Pascal oder C) (Programme werden durch Funktionskomposition zusammengesetzt, eine explizite Reihung von Anweisungen existiert nicht) Zustand (FPLs sind zustandslos und bieten daher keine änderbaren Variablen) Zuweisungen ( := in Pascal) (Berechnungen in FPLs geschehen allein durch Auswertung von Funktionen, nicht durch Manipulation des Maschinenzustandes bzw. -speichers) 2003 T. Grust Funktionale Programmierung: 1. Funktionale vs. Imperative Programmierung 8

Beispiel 1.1 Entwerfe eine Funktion, die testet, ob eine Zahl n eine Primzahl ist oder nicht. 1 Wenn n prim ist, ist die Menge der Teiler (factors) von n leer. 2 Die Menge der Teiler von n sind alle Zahlen x zwischen 2... n 1, die n ohne Rest teilen. Diese Beschreibung der Eigenschaften einer Primzahl läßt sich direkt in ein funktionales Programm (hier: Haskell) übersetzen: -- Ist n eine Primzahl? isprime :: Integer -> Bool isprime n = (factors n == []) -- 1 where factors n = [ x x <- [2..n-1], n mod x == 0 ] -- 2 Das Programm liest sich mehr wie die deklarative Spezifikation der Eigenschaften einer Primzahl als eine explizite Vorschrift, den Primzahltest auszuführen. Bspw. ist eine parallele Ausführung von factors nicht ausgeschlossen. 2003 T. Grust Funktionale Programmierung: 1. Funktionale vs. Imperative Programmierung 9

Imperative Programmiersprachen sind dagegen eng mit dem zugrundeliegenden von Neumann schen Maschinenmodell verknüpft, indem sie die Maschinenarchitektur sehr direkt abstrahieren: der Programmzähler (PC) der CPU arbeitet Anweisung nach Anweisung sequentiell ab (der Programmierer hat seine Anweisungen also explizit aufzureihen und Wiederholungen/Sprünge zu codieren) der Speicher der Maschine dient zur Zustandsprotokollierung (der Zustand eines Algorithmus muß durch Variablenzuweisung bzw. -auslesen explizit kontrolliert werden) Zusätzlich zur Lösung seines Problemes hat der Programmierer einer imperativen PL die Aufgabe, obige Punkte korrekt zu spezifizieren. Imperative Programme sind oft länger als ihre FPL-Äquivalente, (Zustandsupdates und -kontrollen sind explizit zu codieren) sind oft schwieriger zu verstehen, (eigentliche Problemlösung und Kontrolle der von Neumann-Maschine werden vermischt) sind nur mittels komplexer Methoden auf Korrektheit zu überprüfen. (Bedeutung jedes Programmteils immer von Zustand des gesamten Speichers und Änderungen auf diesem abhängig) 2003 T. Grust Funktionale Programmierung: 1. Funktionale vs. Imperative Programmierung 10

Beispiel 1.2 Primzahltest. Formulierung in PASCAL: program isprime (output); function isprime (n : integer) : boolean; var m : integer; found_factor : boolean; begin m := 2; found_factor := false; while (m <= n-1) and (not found_factor) do if (n mod m) = 0 then found_factor := true else m := m + 1; isprime := not found_factor end; { isprime } begin writeln (isprime(112)) end. 2003 T. Grust Funktionale Programmierung: 1. Funktionale vs. Imperative Programmierung 11

Das Programm kontrolliert die Maschine durch explizite Schleifenanweisungen (while, for), bedingte Anweisungen (if then else) und Sequenzierung ( ; ) von Anweisungen. Die Anweisungsfolge ist explizit festgelegt. Das ist das Hauptmerkmal des imperativen Stils. Die Berechnung erfolgt als Seiteneffekt auf den Zustandsvariablen (m, found_factor). Die Variablen dienen gleichzeitig zur Kontrolle der Maschine (m, found_factor) und zur Protokollierung des Ergebnisses des eigentlichen Problems (found_factor). Andere Konzepte imperativer PLs bieten noch weitergehenden direkten Zugriff auf die Maschine: Arrays und Indexzugriff (A[i]) (modelliert direkt den linearen Speicher der Maschine sowie indizierende Adressierungsmodi der CPU) Pointer und Dereferenzierung (modellieren 1:1 die indirekten Adressierungsmodi der CPU) explizite (De-)Allokation von Speicher (malloc, free, new) (der Speicher wird eigenverantwortlich als Resource verwaltet) Sprunganweisungen (goto)... (direkte Manipulation des PC) 2003 T. Grust Funktionale Programmierung: 1. Funktionale vs. Imperative Programmierung 12