185.A05 Fortgeschrittene funktionale Programmierung
Diese Lehrveranstaltung ist in allen zugeordneten Curricula Teil der STEOP.
Diese Lehrveranstaltung ist in mindestens einem zugeordneten Curriculum Teil der STEOP.

2024S, VU, 2.0h, 3.0EC, wird geblockt abgehalten
TUWEL

Merkmale

  • Semesterwochenstunden: 2.0
  • ECTS: 3.0
  • Typ: VU Vorlesung mit Übung
  • Format der Abhaltung: Präsenz

Lernergebnisse

Nach positiver Absolvierung der Lehrveranstaltung sind Studierende in der Lage (u.a.)

  • fortgeschrittene Prinzipien und Konzepte funktionaler Programmierung zu beschreiben und erläutern und in praktischen Anwendungen zu demonstrieren.
  • die theoretischen und praktischen Grundlagen funktionaler Programmierung zu erläutern und sie zur Verifikation und Validation der Korrektheit funktionaler Programme anzuwenden.
  • die Möglichkeiten und Grenzen eines (rein) funktionalen Programmierstils anzugeben, zu demonstrieren und bewerten.
  • Programmieraufgaben kleiner bis mittlerer Größe und Komplexität mithilfe grundlegender und fortgeschrittener Konzepte und Prinzipien funktionaler Programmierung sachlich und fachlich angemessen zu lösen.

Inhalt der Lehrveranstaltung

Die Lehrveranstaltung vermittelt in Theorie und Praxis
fortgeschrittene Konzepte und Prinzipien funktionaler Programmierung
und ihre Anwendung. Die Vorlesung spannt dabei den Bogen von
funktionalen Programmierprinzipien über Qualitätssicherung und
fortgeschrittene Sprachkonzepte bis hin zu Anwendungen. Regelmäßig
gestellte Aufgaben im Übungsteil zu Problemstellungen passender Art,
Größe und Schwierigkeit erlauben die vorgestellten Konzepte und
Prinzipien unmittelbar und kontinuierlich praktisch zu erproben und
anzuwenden und führen so zu einem profunden theoretischen und
praktischen Verständnis der vorgestellten Konzepte und Prinzipien.

 Teil I: Motivation

  • Warum funktionale Programmierung wichtig ist

Teil II: Programmierprinzipien

  • Programmieren mit Strömen
  • Programmieren mit Funktionen höherer Ordnung
  • Gleichungsbasiertes Rechnen mit Programmen
  • Funktionale Perlen

Teil III: Qualitätssicherung

  • Testen
  • Verifikation

Teil IV: Fortgeschrittene Sprachkonzepte

  • Abstrakte Datentypen
  • Funktionale Felder
  • Monoide
  • Funktoren
  • Applikative
  • Monaden
  • Pfeile

Teil V: Anwendungen

  • Parsing
  • Logische Programmierung funktional
  • Pretty Printing
  • Funktionale reaktive Programmierung

Teil VI: Erweiterungen und Ausblick

  • Erweiterungen für Parallelität und `Real World'-Programmierung
  • Abschluss und Ausblick

Literaturverzeichnis

Anhang

  • Mathematische Grundlagen

Ausgewählte Leseempfehlungen

  • Grundlegend
    • Jens Knoop. Slides and companion material of the course `LVA 185.A03 Funktionale Programmierung.' Compilers and Languages Group, TU Wien, WS 23.
    • Simon Thompson. Haskell: The Craft of Functional Programming. Addison-Wesley/Pearson, 3. Auflage 2011.
    • Richard Bird. Thinking Functionally with Haskell. Cambridge University Press, 2015.
    • Greg Michaelson. An Introduction to Functional Programming through Lambda Calculus. Dover Publications, 2. Auflage, 2011.
    • Peter Pepper, Petra Hofstedt. Funktionale Programmierung: Sprachdesign und Programmiertechnik. Springer-V., 2006.
    • Simon Peyton Jones (Hrsg.). Haskell 98: Language and Libraries. The Revised Report. Cambridge University Press, 2003.
  • Fortgeschritten
    • Jeremy Gibbons, Oege de Moor (Hrsg.). The Fun of Programming. Palgrave Macmillan, 2003.
    • Bryan O'Sullivan, John Goerzen, Don Stewart. Real World Haskell. O'Reilly, 2008.
    • Tomas Petricek, Jon Skeet. Real World Functional Programming: With Examples in F# and C#. Manning Publications Co., 2009.
    • Chris Okasaki. Purely Functional Data Structures. Cambridge University Press, 1999.
    • Aaron Stump. Verified Functional Programming in Agda. ACM Books Series, No. 9, 2016.
    • Lectures on `Advanced Functional Programming.' International Summer Schools 1995, 1996, 1998, 2002; Springer-V., LNCS volumes 925, 1129, 1608, 2638.

Methoden

  1. Angeleitetes eigenständiges Erlernen und Einüben: Durch Vorträge und umgekehrtes Klassenzimmer angeleitetes eigenständiges Erlernen und Einüben der in den Lernergebnissen beschriebenen Fähigkeiten mithilfe bereit gestellter Lehr- und Lernunterlagen, Übungsaufgaben und weiterer nach Bedarf selbstgewählter Materialien aus ergänzend und vertiefend vorgeschlagenen Lehrbüchern, Tutorien und wissenschaftlichen Originalarbeiten.
  2. Vorbild- und rückmeldungsgeleitetes Lernen: Präsentieren, erläutern, begründen, vergleichen, wertend gegenüberstellen eigener und fremder Aufgabenlösungen aus sachlicher und fachlicher Sicht in tutorgeleiteten Übungsgruppen.
  3. Selbsteinschätzungstests: Tests zur regelmäßigen Selbsteinschätzung und Selbstreflexion des bisherigen eigenen Lernfortschritts und Lernerfolgs; zusätzliche Leit- und Kontrollfragen.

Prüfungsmodus

Prüfungsimmanent

Weitere Informationen

Die Lehrveranstaltung findet grundsätzlich in Präsenz statt.  Sollte dies im Lauf des Semesters aufgrund erneuter COVID-19 Beschränkungen nicht oder nicht länger möglich sein, werden die Veranstaltung und die zugehörigen Übungen online (Zoom) in Form von Echtzeitvideokonferenzen fortgeführt, damit auch im Fall einer solchen Umstellung die Vorteile der Unmittelbarkeit von Präsenzveranstaltungen möglichst umfassend erhalten bleiben.

Aufteilung der ECTS-Punkte:

Der Lehrveranstaltung sind 3.0 ECTS-Punkte zugeordnet. Diese
entsprechen einem durchschnittlichen Lernaufwand von 75
Stunden. Dieser durchschnittliche Lernaufwand verteilt sich in
folgender Weise auf die einzelnen Lernaktivitäten der Lehrveranstaltung
(die Angaben Teil I bis Teil VI beziehen sich auf die entsprechenden Teile
der Lehrveranstaltungsunterlagen):

  • Angeleitete Lernaktivitäten (15.75h)
    • Vortrag: 7.0h (7 Einheiten * 1.0h)
    • Umgekehrtes Klassenzimmer: 3.5h (7 Einheiten * 0.5h)
    • Übungsgruppen: 5.25h (7 Einheiten * 0.75h)
  • Eigenständige Lernaktivitäten (56.75h)
    • Selbstständiges Erarbeiten von Lernergebnissen: 28.0h (Richtwert: Teil I/1.0h, Teil II/6.0h, Teil III/6.0h, Teil IV/7.0h, Teil V/7.0h, Teil VI/1.0h)
    • Speziell: Lösen der Übungsaufgaben: 27.0h (Richtwert: 3 Angaben * 3.0h, 1 Projekt * 18.0h)
    • Vorbereitung auf die Projektdemonstration und mündliche Prüfung: 1.75h
  • Übungsaufgaben- (Verbesserung in Anwesenheit) und Projektdemonstration (4 * 0.5h):  2.0h
  • Mündliche Prüfung: 0.5h

Die Vorbesprechung und daran anschließend die erste Vorlesung finden statt am Donnerstag, den 07.03.2024, von 16:15 Uhr bis 17:45 Uhr, EI 4 Reithoffer HS.

Vortragende Personen

Institut

LVA Termine

TagZeitDatumOrtBeschreibung
Do.16:00 - 18:0007.03.2024 - 06.06.2024EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Di.13:00 - 14:0019.03.2024 - 18.06.2024Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Fortgeschrittene funktionale Programmierung - Einzeltermine
TagDatumZeitOrtBeschreibung
Do.07.03.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Do.14.03.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Di.19.03.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.21.03.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Di.09.04.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.11.04.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Di.16.04.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.18.04.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Di.23.04.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.25.04.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Di.30.04.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.02.05.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Di.07.05.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Di.14.05.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.16.05.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Do.23.05.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Di.28.05.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Di.04.06.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.06.06.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Di.11.06.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
LVA wird geblockt abgehalten

Leistungsnachweis

  • Vier beurteilte Abgaben (kleinerer) programmiertechnischer Übungsaufgaben.
  • Eine beurteilte Abgabe und Demonstration einer (größeren) programmiertechnischen Projektaufgabe.
  • Eine beurteilte 30-minütige mündliche Prüfung über Vorlesungs- und Übungsstoff.

Weitere beurteilte Leistungsnachweise gibt es nicht.

LVA-Anmeldung

Von Bis Abmeldung bis
30.01.2024 01:00 08.03.2024 12:00 22.03.2024 12:00

Gruppen-Anmeldung

GruppeAnmeldung VonBis
FFP 107.03.2024 01:0015.03.2024 12:00
FFP 207.03.2024 01:0015.03.2024 12:00
FFP 307.03.2024 01:0015.03.2024 12:00
FFP 407.03.2024 01:0015.03.2024 12:00
FFP 507.03.2024 01:0015.03.2024 12:00
FFP 607.03.2024 01:0015.03.2024 12:00
FFP 707.03.2024 01:0015.03.2024 12:00
FFP 807.03.2024 01:0015.03.2024 12:00
FFP 907.03.2024 01:0015.03.2024 12:00
FFP 1007.03.2024 01:0015.03.2024 12:00
FFP 1107.03.2024 01:0015.03.2024 12:00
FFP 1207.03.2024 01:0015.03.2024 12:00
FFP 1307.03.2024 01:0015.03.2024 12:00
FFP 1407.03.2024 01:0015.03.2024 12:00
FFP 1507.03.2024 01:0015.03.2024 12:00
FFP 1607.03.2024 01:0015.03.2024 12:00
FFP 1707.03.2024 01:0015.03.2024 12:00
FFP 1807.03.2024 01:0015.03.2024 12:00
FFP 1907.03.2024 01:0015.03.2024 12:00
FFP 2007.03.2024 01:0015.03.2024 12:00
FFP 2107.03.2024 01:0015.03.2024 12:00
FFP 2207.03.2024 01:0015.03.2024 12:00
FFP 2307.03.2024 01:0015.03.2024 12:00
FFP 2407.03.2024 01:0015.03.2024 12:00
FFP 2507.03.2024 01:0015.03.2024 12:00
FFP 2607.03.2024 01:0015.03.2024 12:00
FFP 2707.03.2024 01:0015.03.2024 12:00
FFP 2807.03.2024 01:0015.03.2024 12:00
FFP 2907.03.2024 01:0015.03.2024 12:00
FFP 3007.03.2024 01:0015.03.2024 12:00
FFP 3107.03.2024 01:0015.03.2024 12:00
FFP 3207.03.2024 01:0015.03.2024 12:00
FFP 3307.03.2024 01:0015.03.2024 12:00
FFP 3407.03.2024 01:0015.03.2024 12:00
FFP 3507.03.2024 01:0015.03.2024 12:00
FFP 3607.03.2024 01:0015.03.2024 12:00
FFP 3707.03.2024 01:0015.03.2024 12:00
FFP 3807.03.2024 01:0015.03.2024 12:00
FFP 3907.03.2024 01:0015.03.2024 12:00
FFP 4007.03.2024 01:0015.03.2024 12:00
Tutorial Group 1 (Fri, 11-12am)25.03.2024 16:0003.04.2024 23:59
Tutorial Group 2 (Fri, 11-12am)25.03.2024 16:0003.04.2024 23:59

Curricula

StudienkennzahlVerbindlichkeitSemesterAnm.Bed.Info
066 931 Logic and Computation Gebundenes Wahlfach
066 937 Software Engineering & Internet Computing Gebundenes Wahlfach

Literatur

Es wird kein Skriptum zur Lehrveranstaltung angeboten.

Vorkenntnisse

Grundlegende Kenntnisse des funktionalen Programmierparadigmas wie
etwa im Rahmen der Lehrveranstaltung LVA 185.A03 "Funkionale
Programmierung" vermittelt, werden vorausgesetzt.

Vorausgehende Lehrveranstaltungen

Begleitende Lehrveranstaltungen

Weitere Informationen

Sprache

bei Bedarf in Englisch