Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Ähnliche Dokumente
III.1 Prinzipien der funktionalen Programmierung - 1 -

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

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

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

Prof. Dr. Jürgen Giesl Lehr- und Forschungsgebiet Informatik 2. Proseminar - 1 -

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

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

Programmieren in Haskell Einführung

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Funktionale Programmiersprachen

Programmiersprachen. Organisation und Einführung. Berthold Hoffmann. Studiengang Informatik Universität Bremen

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

1.3 Geschichte der Programmiersprachen

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Programmiersprachen: Klassifizierung und Methoden. Programmier-Paradigmen. Grundlagen der Programmierung 2 (1.C) - 1 -

: Funktionen höherer Ordnung. III.6 Funktionale Programmiertechniken - 1 -

Ausblick: Entwurfsmuster (Design Pattern) 12.1 Entwurfsmuster (Design Pattern) 12.2 Programmierparadigmen und -sprachen und Veranstaltungen

Paradigmen zur Algorithmenbeschreibung

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

Inhalt. n Algorithmus. n Euklidscher Algorithmus. n Sortieren. n Programmiersprachen. n Entwicklungsschritte eines Programms.

1 Programmiersprachen 1.1 1

II.1.1. Erste Schritte - 1 -

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Einführung in die Funktionale Programmierung

II.1.1. Erste Schritte - 1 -

Programmieren in Haskell Einführung

I.1. Organisatorisches - 1 -

Funktionale Programmierung

Paradigmen zur Algorithmenbeschreibung

Software-Entwicklung

II.1.1. Erste Schritte - 1 -

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Programmieren I. Methoden-Spezial Heusch --- Ratz 6.1, Institut für Angewandte Informatik

Paradigmen zur Algorithmenbeschreibung

6. Funktionen, Parameterübergabe

Crashkurs: Haskell. Mentoring FU Berlin Felix Droop

Gliederung der Folien

Grundlagen der Modellierung und Programmierung, Übung

Praktische Informatik 3

II.3.1 Rekursive Algorithmen - 1 -

Programmieren I. Methoden-Special Heusch --- Ratz 6.1, Institut für Angewandte Informatik

ALP I Einführung in Haskell

Vorlesung Programmieren

Vorlesung Programmieren. Programmiersprachen-Paradigmen. Programmierparadigmen. Eine Programmiersprache dient dem Aufschreiben von Algorithmen

12. Rekursion Grundlagen der Programmierung 1 (Java)

Grundlegende Datentypen

Übung zur Vorlesung Wissenschaftliches Rechnen Wintersemester 2013/14 Auffrischung zur Programmierung in C++, 1. Teil

3.4 Struktur von Programmen

7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Vorlesung Programmierung

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

Intensivübung zu Algorithmen und Datenstrukturen

Praktische Informatik 1

Inhaltsverzeichnis. Kurseinheit 1. Kurseinheit 2

4.4 Imperative Algorithmen Prozeduren

Grundlagen der Programmierung 2 (1.A)

Konzepte der Programmiersprachen

Bru ckenkurs Programmieren

2. JAVA-Programmierung. Informatik II für Verkehrsingenieure

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

1 Funktionale vs. Imperative Programmierung

Einführung in die Programmierung mit Java

1. Einführung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Beispiele: Funktionsabstraktion (3) Funktionsdeklaration. Funktionsdeklaration (2) Funktionsdeklaration (3) 3. Abstraktion über Funktionsbezeichner:

Informatik I: Einführung in die Programmierung

Imperative vs. Funktionale Programmierung

Programmierung Paradigmen und Konzepte

WS 2011/2012. Georg Sauthoff November 2011

Workshop Einführung in die Sprache Haskell

Martin Unold INFORMATIK. Geoinformatik und Vermessung

10. Programmierungs-Phase: Objektorientierung Software Engineering

Funktionale Programmierung

Rechnungen, wo kein sinnvoller Wert rauskommt Bsp.: 1/0, *0, sqrt(-1.0) Beispiel: Quadratische Gleichungen

Parameterübergabemechanismen für den Methodenaufruf

Programmieren in Java

Objekt-Funktionale Programmierung. am Beispiel von SCALA. Thorsten Jolitz

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

2. Programmierung in C

Funktionale Programmierung (in Clojure)

Funktionale Programmierung mit Haskell. Jan Hermanns

Einführung in die Programmierung mit VBA

Inhalte des Moduls Programmieren 1

Algorithmen implementieren. Implementieren von Algorithmen

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

C.3 Funktionen und Prozeduren

Grundlagen der Programmierung 2 (1.A)

Objektorientiertes Programmieren

Programmieren in Haskell Einstieg in Haskell

2 Eine einfache Programmiersprache

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Vorkurs Informatik WiSe 17/18

Inhaltsverzeichnis. Inhalt. Bemerkung... 9 Vorwort Programme und Programmiersprachen

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Programmieren in Haskell

Konzepte der Programmiersprachen

Transkript:

Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung l 2. Objekte, Klassen und Methoden l 3. Rekursion und dynamische Datenstrukturen l 4. Erweiterung von Klassen und fortgeschrittene Konzepte n Teil III: Funktionale Programmierung: Haskell n Teil IV: Logische Programmierung: Prolog III.1 Prinzipien der funktionalen Programmierung- 1 -

Populäre Programmiersprachen Quelle: www.tiobe.com, Oct. 2015 III.1 Prinzipien der funktionalen Programmierung- 2 -

Populäre Programmiersprachen 1. Java... 32. Prolog... 39. Haskell Quelle: www.tiobe.com, Jan. 2016 III.1 Prinzipien der funktionalen Programmierung- 3 -

Kenntnis verschiedener Sprachen n Eigene Ideen bei der Software-Entwicklung können besser ausgedrückt werden n Nötig, um in konkreten Projekten geeignete Sprache auszuwählen n Erleichtert das Erlernen weiterer Programmiersprachen n Nötig für den Entwurf neuer Programmiersprachen III.1 Prinzipien der funktionalen Programmierung- 4 -

Übersicht Imperative Sprachen Deklarative Sprachen l Folge von nacheinander ausgeführten Anweisungen l l Spezifikation dessen, was berechnet werden soll Compiler legt fest, wie Berechnung verläuft n Prozedurale Sprachen l Variablen, Zuweisungen, Kontrollstrukturen n Funktionale Sprachen l keine Seiteneffekte l Rekursion n Objektorientierte Sprachen l l Objekte und Klassen Abstrakte Datentypen und Vererbung n Logische Sprachen l Regeln zur Definition von Relationen III.1 Prinzipien der funktionalen Programmierung- 5 -

Wichtige Programmiersprachen 1950 1960 Fortran Cobol Algol 60 Lisp 1970 1980 1990 PL/1 Pascal Ada Algol 68 C Modula-3 Simula Smalltalk C++ Ada-95 Java Eiffel Python Scheme ML Miranda Haskell Prolog 2000 Scala prozedural objektorientiert funktional logisch I.2. Grundlagen von Programmiersprachen - 6 -

n 1. Prinzipien der funktionalen Programmierung n 2. Deklarationen n 3. Ausdrücke n 4. Muster (Patterns) n 5. Typen und Datenstrukturen n 6. Funktionale Programmiertechniken I.2. Grundlagen von Programmiersprachen - 7 -

Imperative Programmierung (Java) Eingabe: Eine Liste x Ausgabe: Länge der Liste x Algorithmus: 1. Setze n = 0. 2. Falls x nicht die leere Liste ist, dann: 2a. Lösche das erste Element von x. 2b. Erhöhe n um 1. 2c. Gehe zu Schritt 2. 3. Liefere n zurück. class Element { Vergleichbar wert; Element next;... } public class Liste { Element kopf;... static int len (Liste x) { int n = 0; while (x.kopf!= null) { x.kopf = x.kopf.next; n = n + 1; } return n; } III.1 Prinzipien der funktionalen Programmierung- 8 -

Kennzeichen imperativer Programmierung n Programm besteht aus einzelnen Anweisungen, die nacheinander abgearbeitet werden. n Verschiedene Kontrollstrukturen, um Programmablauf zu steuern. n Abarbeitung einer Anweisung ändert Werte der Variablen. n Seiteneffekte n Programmierer muss Speicherorganisation bedenken III.1 Prinzipien der funktionalen Programmierung- 9 -

Funktionale Programmierung (Haskell) A. Falls die Liste x leer ist, so ist len(x) = 0. B. Falls die Liste x nicht leer ist und "rest" die Liste x ohne ihr erstes Element ist, so ist len(x) = 1 + len(rest). Programm in Haskell: len [] = 0 len (kopf : rest) = 1 + len rest III.1 Prinzipien der funktionalen Programmierung- 10 -

Ausführung funktionaler Programme len [] = 0 len (kopf : rest) = 1 + len rest len [15, 70, 36] = 1 + len [70, 36] = 1 + 1 + len [36] = 1 + 1 + 1 + len [] = 1 + 1 + 1 + 0 = 3 III.1 Prinzipien der funktionalen Programmierung- 11 -

Kennzeichen funktionaler Programme n Rekursion statt Schleifen n Keine Seiteneffekte (referentielle Transparenz) n Funktionen als gleichberechtigte Datenobjekte (Funktionen höherer Ordnung) n Verwendung von einer Funktions-Implementierung für verschiedene Typen (Polymorphismus) n Programme sind kürzer, klarer, besser zu warten, zuverlässiger, schneller zu erstellen III.1 Prinzipien der funktionalen Programmierung- 12 -

Seiteneffekte n Seiteneffekt: Veränderung des (Speicher-)Zustands n Fehlende Seiteffekte in Funktionalen Programmiersprachen: l l Verzicht auf Variablen und Wertzuweisungen Ausschließlich Verwendung von Ausdrücken n Referenzielle Transparenz: l Wert eines Ausdrucks hängt nicht vom Zeitpunkt oder der Reihenfolge der Auswertung ab. III.1 Prinzipien der funktionalen Programmierung- 13 -

Funktionale Programmierung (Haskell) n Interaktiver Modus des Glasgow Haskell Compilers (GHCi) l Eingabe: Auszuwertender Ausdruck l Ausgabe: Ergebnis des ausgewerteten Ausdrucks n Bsp: l Eingabe: len [15, 36, 70] l Ausgabe: 3 n Interpreter l führen jede Zeile des Programms nacheinander aus. l Vorteil: Keine vorherige Übersetzung nötig, gut zur Programmentwicklung geeignet. l Nachteil: Ineffizienter als Compiler. III.1 Prinzipien der funktionalen Programmierung- 14 -

n 1. Prinzipien der funktionalen Programmierung n 2. Deklarationen n 3. Ausdrücke n 4. Muster (Patterns) n 5. Typen und Datenstrukturen n 6. Funktionale Programmiertechniken III.1 Prinzipien der funktionalen Programmierung- 15 -

Deklarationen len :: [Int] -> Int len [] = 0 len (kopf : rest) = 1 + len rest square :: Int -> Int square x = x * x Funktionsdeklarationen Typdeklarationen Programm in Haskell: Folge von linksbündig untereinander stehenden Deklarationen III.1 Prinzipien der funktionalen Programmierung- 16 -

Deklarationen len :: [Int] -> Int len [] = 0 len (kopf : rest) = 1 + len rest square :: Int -> Int square x = x * x var :: type, decl var pat = exp III.1 Prinzipien der funktionalen Programmierung- 17 -

Auswertungsstrategie square :: Int -> Int square x = x * x square (12-1) (12-1) * (12-1) square 11 11 * (12-1) (12-1) * 11 11 * 11 121 strikte Auswertung (call-by-value), innen links nicht-strikte Auswertg. (call-by-name), außen links III.1 Prinzipien der funktionalen Programmierung- 18 -

Bedingte definierende Gleichungen maxi :: (Int, Int) -> Int maxi (x, y) x >= y = x otherwise = y var :: type, decl var pat = exp exp = exp III.1 Prinzipien der funktionalen Programmierung- 19 -

Currying plus :: (Int, Int) -> Int plus (x, y) = x + y plus :: Int -> Int -> Int plus x y = x + y Currying var :: type, decl var pat = exp exp = exp III.1 Prinzipien der funktionalen Programmierung- 20 -

Pattern Matching und :: Bool -> Bool -> Bool und True y= y und False y = False x var, :: type decl var pat = exp exp = exp III.1 Prinzipien der funktionalen Programmierung- 21 -

Pattern Matching und :: Bool -> Bool -> Bool und True y= y und y = False x Bool = "True" "False" len :: [Int] -> Int len [] = 0 len (x : xs) = 1 + len xs Liste = "[]" Element ":" Liste III.1 Prinzipien der funktionalen Programmierung- 22 -

Lokale Deklarationen roots :: Float -> Float -> Float -> (Float, Float) roots a b c = ((-b - d)/e, (-b + d)/e) where {d = sqrt (b*b - 4*a*c); e = 2*a} where d = sqrt b*b - 4*a*c e = 2*a locdecls { var decl :: type }, ; decl var pat = exp exp = exp where locdecls III.1 Prinzipien der funktionalen Programmierung- 23 -