Funktionale Programmiersprachen Gruppe Error 404 Matej Juric Michael

  • Slides: 79
Download presentation
Funktionale Programmiersprachen Gruppe: Error 404 Matej Juric, Michael Berneburg, Ibrahim Akkin, Lennart Reinke, Alexej

Funktionale Programmiersprachen Gruppe: Error 404 Matej Juric, Michael Berneburg, Ibrahim Akkin, Lennart Reinke, Alexej Geiger

Gliederung • Einleitung • Ursprung – Geschichte • Definition“ – Funktionale Programmiersprachen • Zuordnung

Gliederung • Einleitung • Ursprung – Geschichte • Definition“ – Funktionale Programmiersprachen • Zuordnung von Programmiersprachen • Programmier – Paradigmen • Konzepte des funktionalen Programmierens • • Wo funktionale Programmierung zum Einsatz kommt Vergleich – Funktional & Objekt-Orientiert Vor- und Nachteile des funktionalen Programmierens Fazit

Funktionale Programmierung „Die Programmierung mit mathematischen Funktionen“

Funktionale Programmierung „Die Programmierung mit mathematischen Funktionen“

Ursprung & Geschichte

Ursprung & Geschichte

Ursprung & Geschichte • Entspringt Mathematischen Grundlagenforschung • Alonzo Church – 1930 er Jahre

Ursprung & Geschichte • Entspringt Mathematischen Grundlagenforschung • Alonzo Church – 1930 er Jahre entwickelt Lambda-Kalkül • Regelwerk für die Definition von Funktionen und gebundener Parameter

Ursprung & Geschichte • John Mc. Carthy – 1958 erstellte erste bedeutende Software –

Ursprung & Geschichte • John Mc. Carthy – 1958 erstellte erste bedeutende Software – Eval • ist ein LISP – Interpreter, der Semantik von LISP in fünf einfache Funktionen darstellt

„Definition“ – funktionale Programmiersprachen

„Definition“ – funktionale Programmiersprachen

Defninition Kann man Programmiersprachen überhaupt als rein Funktionale bezeichnen?

Defninition Kann man Programmiersprachen überhaupt als rein Funktionale bezeichnen?

Definition • meiste Sprachen unterstützen mehrere Paradigmen • Wann kann man dann eine Sprache

Definition • meiste Sprachen unterstützen mehrere Paradigmen • Wann kann man dann eine Sprache als rein funktional bezeichnen? • allg. Definition: wenn sie keine Nebeneffekte zulassen • Welche Sprachen sind demnach Reine? • z. B. Haskell oder Erlang • Welche Sprachen sind Hybride? • Javascript, Python, Lisp und Dialekte uvm.

Programmier Paradigmen

Programmier Paradigmen

Paradigmen Das Imperative Paradigma

Paradigmen Das Imperative Paradigma

Paradigmen • Ältestes Programmierparadigma • Programm besteht aus Folge von Anweisungen • geben Reihenfolge

Paradigmen • Ältestes Programmierparadigma • Programm besteht aus Folge von Anweisungen • geben Reihenfolge der Bearbeitung an • Befehlsausführung durch Kontrollstrukturen • Schleifen, Sequenzen, Verzweigungen • Fokus auf dem „Wie? “ • Beispiele: Java, C, C++

Paradigmen Das Deklarative Paradigma

Paradigmen Das Deklarative Paradigma

Paradigmen • Problembeschreibung im Vordergrund • Lösungsweg wird nicht gegeben -> automatisch ermittelt •

Paradigmen • Problembeschreibung im Vordergrund • Lösungsweg wird nicht gegeben -> automatisch ermittelt • Fokus auf dem „Was? “ • Beispiele: SQL, Linda, Prolog

Konzepte der funktionalen Programmierung

Konzepte der funktionalen Programmierung

Konzepte Lazy Evaluation Closures Currying Funktionen höherer Ordnung Rekursion Charakteristiken funktionaler Programmierun g Immutability

Konzepte Lazy Evaluation Closures Currying Funktionen höherer Ordnung Rekursion Charakteristiken funktionaler Programmierun g Immutability Pure Functions

Konzepte Funktionen höherer Ordnung

Konzepte Funktionen höherer Ordnung

Konzepte • Engl. Higher Order Functions • Funktionen welche Funktion als Argument erwartet Das

Konzepte • Engl. Higher Order Functions • Funktionen welche Funktion als Argument erwartet Das „Imutable“ • Funktion welche Funktion zurückgibt – Prinzip • Verknüpfung zum „First-class Citizen“ – Konzept: • Funktion kann überall stehen wo auch andere primitive Werte stehen • wie z. B. Zahlen oder Strings

Konzepte Reinheit – Pure Functions

Konzepte Reinheit – Pure Functions

Konzepte Das „Imutable“ – Prinzip • Seiteneffekte: Veränderung des Zustands der Maschine • Bsp.

Konzepte Das „Imutable“ – Prinzip • Seiteneffekte: Veränderung des Zustands der Maschine • Bsp. Werteneuzuweisung von Variablen

Konzepte Das „Immutable“ – Prinzip

Konzepte Das „Immutable“ – Prinzip

Konzepte • Datenstruktur die nach ihrer Erstellung nicht mehr verändert werden kann • Warum

Konzepte • Datenstruktur die nach ihrer Erstellung nicht mehr verändert werden kann • Warum ist das was Gutes? Das „Imutable“ – Prinzip • Benutzung erzeugt keine Nebeneffekte • sie sind immer Thread-Safe; sie verhindern NULL-Referenzen • generell einfacher zu erstellen, zu benutzen und testen • Nachteile? • es kann deutlich Perfomance-teurer werden • ein Array in dem ein Int verändert werden soll? - es muss ein neues Array mit den gleichen Werten bis auf den Veränderten erstellt und zurückgegeben werden

Konzepte Das „Imutable“ – Prinzip Beispiel dafür aus der Objekt Orientierten Programmierung? Strings

Konzepte Das „Imutable“ – Prinzip Beispiel dafür aus der Objekt Orientierten Programmierung? Strings

Konzepte Closures

Konzepte Closures

Konzepte Closures A closure is the combination of a function and the lexical environment

Konzepte Closures A closure is the combination of a function and the lexical environment within which that function was declared. – MDN

Konzepte • Funktionen, die innerhalb einer umschließenden Funktion definiert werden • alles umschließende gehört

Konzepte • Funktionen, die innerhalb einer umschließenden Funktion definiert werden • alles umschließende gehört zum Erstellungskontext Das „Imutable“ – Prinzip • Closures binden ihren Erstellungskontext an sich • können geschlossen hin und her gereicht werden • auf die Variablen im Erstellungskontext kann fortan nicht mehr zugegriffen werden

Konzepte Allgemeines Beispiel: Das „Imutable“ – Prinzip wofür ist das nützlich? für ähnliche Funktionen

Konzepte Allgemeines Beispiel: Das „Imutable“ – Prinzip wofür ist das nützlich? für ähnliche Funktionen Closure dient als Hersteller

Konzepte Spezifisches Beispiel: Das „Imutable“ – Prinzip Achtung: Currying!

Konzepte Spezifisches Beispiel: Das „Imutable“ – Prinzip Achtung: Currying!

Konzepte Currying Beim currying wird eine Funktion, die mehrere Argumente annimmt in mehrere Funktionen,

Konzepte Currying Beim currying wird eine Funktion, die mehrere Argumente annimmt in mehrere Funktionen, die jeweils ein Argument annehmen, verwandelt.

Konzepte Spezifisches Beispiel: Das „Imutable“ – Prinzip

Konzepte Spezifisches Beispiel: Das „Imutable“ – Prinzip

Konzepte Lazy Evaluation

Konzepte Lazy Evaluation

Konzepte • Gegenteil ist „strict Evaluation“ Beispi el: 5+3 „Sie ist eine gute Programmiererin!“

Konzepte • Gegenteil ist „strict Evaluation“ Beispi el: 5+3 „Sie ist eine gute Programmiererin!“ Das „Imutable“ – Prinzip • Nicht immer sinvoll • weniger effizient

Konzepte Beispi el:

Konzepte Beispi el:

Konzepte Beispi el:

Konzepte Beispi el:

Wo funktionale Programmiersprachen zum Einsatz kommen

Wo funktionale Programmiersprachen zum Einsatz kommen

Vergleich zwischen Funktional und Objektorientiert

Vergleich zwischen Funktional und Objektorientiert

Vergleich Aufbau und Eigenschaften

Vergleich Aufbau und Eigenschaften

Eigenschaften • Objektbasiert: • Gibt Objekte vor zum Kapseln von Funktionen und Daten •

Eigenschaften • Objektbasiert: • Gibt Objekte vor zum Kapseln von Funktionen und Daten • Objektorientiert: • Erweitern das Objektbasierte um Vexerbung und Polymorphie • Funktional • Bestehen aus Abfolge von Funktionsaufrufen • Alle Elemente können als Funktionen aufgefasst werden

Eigenschaften OOP • Man sagt dem Programm wie etwas getan werden soll FP •

Eigenschaften OOP • Man sagt dem Programm wie etwas getan werden soll FP • Man sagt dem Programm was getan werden soll

Eigenschaften

Eigenschaften

Eigenschaften

Eigenschaften

Eigenschaften

Eigenschaften

Eigenschaften

Eigenschaften

Eigenschaften OOP • Ist Imperativ • If Anweisungen, While und For Schleifen • Anweisungen

Eigenschaften OOP • Ist Imperativ • If Anweisungen, While und For Schleifen • Anweisungen werden nacheinander abgearbeitet • Änderungen an Werten während der Laufzeit möglich FP • • Ist Deklarativ Rekursion statt Schleifen Auf eine Eingabe wird eine Ausgabe geliefert Pur functional, keine imperativen Eigenschaften

Eigenschaften OOP • Variablen sind Platzhalter für Referenzen • Alter Wert wird bei Neuzuweisung

Eigenschaften OOP • Variablen sind Platzhalter für Referenzen • Alter Wert wird bei Neuzuweisung gelöscht • Lokale Variablen existieren nur in dem eigenen Scope • Typsicher • Primitive Typen: String, Interger • Referenz Typen: Lebewesen, Hund FP • Funktionen können als Parameter in anderen Funktionen verwendet werden • Funktionen sind ineinander verschachtelte Funktionsaufrufe • Nicht Typsicher • Typisierung findet dynamisch während der Laufzeit statt

Eigenschaften OOP • Klassen • Vererbung • Polymorphie • Kein direkter Zugriff auf das

Eigenschaften OOP • Klassen • Vererbung • Polymorphie • Kein direkter Zugriff auf das Innere einer Klasse • Schnittstellen werden angeboten FP • Lazy Evaluation • Closure • immutable • Anonyme Funktionen

Vergleich Code-Beispiele

Vergleich Code-Beispiele

Vergleich

Vergleich

Konzepte Beispiel in OOP (Java): Beispiel in FP (Python): Das „Imutable“ – Prinzip

Konzepte Beispiel in OOP (Java): Beispiel in FP (Python): Das „Imutable“ – Prinzip

Vergleich

Vergleich

Konzepte Beispiel in OOP (Java): Beispiel in FP (Python):

Konzepte Beispiel in OOP (Java): Beispiel in FP (Python):

Konzepte Beispiel in OOP (Java): Beispiel in FP (Python): Das „Imutable“ – Prinzip

Konzepte Beispiel in OOP (Java): Beispiel in FP (Python): Das „Imutable“ – Prinzip

Vergleich Wofür wird, was gebraucht?

Vergleich Wofür wird, was gebraucht?

Vergleich Meist genutzten Programmiersprachen (Umfrage von Stackoverflow)

Vergleich Meist genutzten Programmiersprachen (Umfrage von Stackoverflow)

Vergleich Top 15 Programmiersprachen im Jahre 2018 und 2019

Vergleich Top 15 Programmiersprachen im Jahre 2018 und 2019

Vergleich „Programming Language of the Year“ - Gewinner

Vergleich „Programming Language of the Year“ - Gewinner

Anwendungsbereiche

Anwendungsbereiche

Vergleich OOP • Mobile Anwendungen(i. OS, Android) • Web-Entwicklung – Frontend • Grafik/Raytracer •

Vergleich OOP • Mobile Anwendungen(i. OS, Android) • Web-Entwicklung – Frontend • Grafik/Raytracer • Datenbanksysteme FP • Simulationen • Web-Entwicklung Backend • Komplexe Mathematische Berechnungen • Artificial Intelligence • Compiler-Bau

Vor- und Nachteile von funktionaler Prgrammierung

Vor- und Nachteile von funktionaler Prgrammierung

Nachteile

Nachteile

Nachteile - Rekursion • Rekursion oft langsamer Das „Imutable“ – Prinzip • Unterprogramme kosten

Nachteile - Rekursion • Rekursion oft langsamer Das „Imutable“ – Prinzip • Unterprogramme kosten Zeit • meistens sind Lösungen als Schleifen weniger komplex und damit leichter verständlich

Nachteile - Immutability • Zustandsaktualisierung komplexer und speicherintensiver OOP (Java) Das „Imutable“ – Prinzip

Nachteile - Immutability • Zustandsaktualisierung komplexer und speicherintensiver OOP (Java) Das „Imutable“ – Prinzip FP(Scala) • Zustandsveränderung realitätsnäher • Bsp. : Tür-Objekt mit boolean-Attribut (offen/geschlossen)

Zustände und Nebeneffekte Java Codebeispiel

Zustände und Nebeneffekte Java Codebeispiel

Functions I/O (Daten, Datenbanken, Internet etc. ) • verstößt gegen eigenes Paradigma • im

Functions I/O (Daten, Datenbanken, Internet etc. ) • verstößt gegen eigenes Paradigma • im Außenkern stehen Funktion bereit, die dafür zuständig sind Das „Imutable“ – Prinzip Nebeneffekte sind auch nützlich • vereinfachen Lösungsansätze • näher an der Realität Vollständige Applikationen • einzelne Funktionen schreiben ist leicht – sie zu einem Gesamtkonstrukt zu kombinieren kann schwierig sein

Vorteile

Vorteile

Vorteile - Immutability Verständlichkeit • Code besser nachzuvollziehen, da zu jedem Zeitpunkt feststeht, in

Vorteile - Immutability Verständlichkeit • Code besser nachzuvollziehen, da zu jedem Zeitpunkt feststeht, in welchen Zustand sich Variablen befinden Das „Imutable“ – Prinzip Thread-safe • Synchronisierung ist kein Problem – Variablen immer den selben Zustand • einzelne Threads können Zustand nicht ändern

Vorteile – Pure Functions Memoisation • Input des Ergebnisses kann zwischengespeichert werden – bei

Vorteile – Pure Functions Memoisation • Input des Ergebnisses kann zwischengespeichert werden – bei erneutem Aufruf mit gleichem Input muss nur der Speicher gelesen werden Keine Nebeneffekte Das „Imutable“ – Prinzip • ändert keine Variablen oder Daten außerhalb der Funktion • nachvollziehbarer Code, leichter zu testen – schwerer Bugs einzubauen Aussagekräftige Signatur und oft wenig Zeilen • bessere Lesbarkeit und kürzerer Code Modularisierung • Funktionen in sich abgeschlossen und erfüllen immer eigene Aufgaben • Funktionen können dadurch nebenläufig abgearbeitet werden

Fazit

Fazit

Fazit – Technischer Hintergrund

Fazit – Technischer Hintergrund

Fazit – Technischer Hintergrund

Fazit – Technischer Hintergrund

Fazit – Technischer Hintergrund

Fazit – Technischer Hintergrund

Fazit – Recap • Thread-safe durch Immutability • Nebenläufigkeit durch modulare Funktionen • Nebenläufigkeit

Fazit – Recap • Thread-safe durch Immutability • Nebenläufigkeit durch modulare Funktionen • Nebenläufigkeit „per Default“ – einfacher einzurichten – nicht so Das „Imutable“ – Prinzip komplex wie OOP • Software muss mit den größer werdenden Datenmengen und der technischen Entwicklung mitgehen – FP hilft dabei

Programmiersprachen der neue Standard? • Trend in Richtung funktionale Programmierung Das „Imutable“ – Prinzip–

Programmiersprachen der neue Standard? • Trend in Richtung funktionale Programmierung Das „Imutable“ – Prinzip– nicht funktionale Sprachen • Vermutung: Beliebtheits-Trends von Programmiersprachen bleiben ähnlichen, aber: • Stärkere Vermischung von OOP und FP

Quellen • https: //funktionale-programmierung. de/2013/08/23/was-ist-funktionale-programmierung. html • http: //www. cse. chalmers. se/~rjmh/Papers/whyfp. html •

Quellen • https: //funktionale-programmierung. de/2013/08/23/was-ist-funktionale-programmierung. html • http: //www. cse. chalmers. se/~rjmh/Papers/whyfp. html • https: //docs. python. org/3. 1/howto/functional. html • http: //book. realworldhaskell. org/read/ • https: //www. heise. de/select/ix/2017/6/1495900368728612 • https: //softwareengineering. stackexchange. com/questions/25056/purest-functional-programming-languages • https: //en. wikipedia. org/wiki/Programming_languages_used_in_most_popular_websites • https: //www. quora. com/Is-LISP-a-pure-functional-language-Why • https: //wiki. haskell. org/Learn_Haskell_in_10_minutes • http: //www. gm. fh-koeln. de/ehses/paradigmen/folien/functional. pdf • https: //de. wikipedia. org/wiki/Closure_(Funktion) • https: //jug-saxony-day. org/wp-content/uploads/JSD 2018 -Mauky-Immutable-Data-mit-Java. pdf • https: //www. yegor 256. com/2014/06/09/objects-should-be-immutable. html • https: //hackernoon. com/how-immutable-data-structures-e-g-immutable-js-are-optimized-using-structural-sharing-e 4424 a 866 d 56 • https: //cs. stackexchange. com/questions/37558/does-immutability-in-functional-programming-really-exist

Quellen • http: //intern. fh-wedel. de/~si/seminare/ss 02/Ausarbeitung/3. lazy/lazy. pdf • https: //medium. com/background-thread/what-is-lazy-evaluation-programming-word-of-the-day-8 a

Quellen • http: //intern. fh-wedel. de/~si/seminare/ss 02/Ausarbeitung/3. lazy/lazy. pdf • https: //medium. com/background-thread/what-is-lazy-evaluation-programming-word-of-the-day-8 a 6 f 4410053 f • https: //medium. com/@dis_is_patrick/practical-uses-for-closures-c 65640 ae 7304 • https: //de. wikipedia. org/wiki/Datei: Python-logo-notext. svg • https: //devstickers. com/lisp • https: //www. verywellmind. com/can-artificial-intelligence-help-depression-4158330 • https: //turingchurch. net/from-elon-musk-to-joseph-smith-a-material-simulation-hypothesis-aa 4758950577 • https: //www. nytimes. com/2011/10/26/science/26 mccarthy. html • https: //de. wikipedia. org/wiki/Datei: F_icon. svg • https: //de. wikipedia. org/wiki/Whats. App#/media/File: Whats. App. svg • https: //de. wikipedia. org/wiki/Twitter#/media/File: Twitter_bird_logo_2012. svg • https: //de. wikipedia. org/wiki/EBay#/media/File: EBay_logo. svg

Quellen • • • • • • https: //commons. wikimedia. org/wiki/File: Raytracing_reflection. png https:

Quellen • • • • • • https: //commons. wikimedia. org/wiki/File: Raytracing_reflection. png https: //blog. storagecraft. com/4 -areas-multi-core-processing-really-matters/ http: //cabol. github. io/posts/2013/11/24/programming-languages-and-multicore-crisis/# https: //www. deadcoderising. com/2017 -06 -13 -why-pure-functions-4 -benefits-to-embrace-2/ https: //alvinalexander. com/scala/fp-book/benefits-of-functional-programming https: //itnext. io/pros-and-cons-of-functional-programming-32 cdf 527 e 1 c 2 https: //docs. microsoft. com/de-de/dotnet/csharp/programming-guide/concepts/linq/functional-programming-vs-imperative-programming https: //de. wikipedia. org/wiki/Funktionale_Programmierung https: //www. geeksforgeeks. org/functional-programming-paradigm/ https: //insights. stackoverflow. com/survey/2018#most-popular-technologies https: //pythonconquerstheuniverse. wordpress. com/2009/10/03/python-java-a-side-by-side-comparison/ https: //www. domainssaubillig. de/blog-artikel/items/objektorientierte-vs-funktionale-programmierung-im-web. html https: //www. heise. de/select/ix/2017/6/1495900368728612 https: //www. grimm-jaud. de/index. php/blog/objektorientierte-generische-funktionale-programmierung https: //www. tiobe. com/tiobe-index/ https: //medium. com/@sho. miyata. 1/the-object-oriented-programming-vs-functional-programming-debate-in-a-beginner-friendly-nutshell-24 fb 6 f 8625 cc https: //www. codenewbie. org/blogs/object-oriented-programming-vs-functional-programming https: //wiki. selfhtml. org/wiki/Programmiertechnik/Programmierparadigma https: //www. informatik-verstehen. de/programmiersprachen/programmierparadigmen/ http: //www. enzyklopaedie-der-wirtschaftsinformatik. de/lexikon/technologien-methoden/Sprache/Programmiersprache/Paradigma http: //www. weiterbildung-programmierer. de/programmieren/paradigmen. php

Quellen • • • • https: //www. buildinformed. com/einekurzegeschichte/ https: //www. grimm-jaud. de/index. php/blog/funktionale-programmierung-die-definition

Quellen • • • • https: //www. buildinformed. com/einekurzegeschichte/ https: //www. grimm-jaud. de/index. php/blog/funktionale-programmierung-die-definition https: //www. grimm-jaud. de/index. php/blog/reine-funktionen https: //de. wikipedia. org/wiki/Funktionale_Programmierung https: //de. wikipedia. org/wiki/Lambda-Kalk%C 3%BCl http: //webkrauts. de/artikel/2015/grundlagen-funktionaler-programmierung https: //www. it-talents. de/blog/it-talents/was-ist-funktionale-programmierung-wann-setze-ich-sie-ein https: //funktionale-programmierung. de/2013/08/23/was-ist-funktionale-programmierung. html http: //sun 45. informatik. uni-bremen. de/wordpress/wp-content/uploads/fp 2 k. script. pdf https: //de. wikipedia. org/wiki/First-Class-Funktion https: //ijoshsmith. com/2015/12/09/higher-order-functions-in-swift/ https: //de. wikipedia. org/wiki/Deklarative_Programmierung https: //de. wikipedia. org/wiki/Funktionale_Programmierung https: //de. wikipedia. org/wiki/Imperative_Programmierung