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.

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

Merkmale

  • Semesterwochenstunden: 2.0
  • ECTS: 3.0
  • Typ: VU Vorlesung mit Übung
  • Format der Abhaltung: Hybrid

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 22.
    • 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 (17.5h)
    • Vortrag: 7.0h (7 Einheiten * 1.0h)
    • Umgekehrtes Klassenzimmer: 3.5h (7 Einheiten * 0.5h)
    • Übungsgruppen: 7.0h (7 Einheiten * 1.0h)
  • Eigenständige Lernaktivitäten (56.5h)
    • 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: 24.0h (Richtwert: 4 Angaben * 3.0h, 1 Projekt * 15.5h)
    • Vorbereitung auf die Projektdemonstration und mündliche Prüfung: 1.0h
  • Projektdemonstration (aufgrund knapper Raumressource u.U. ausschließlich online, Videopräsenz): 0.5h
  • Mündliche Prüfung: 0.5h

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

Vortragende Personen

Institut

LVA Termine

TagZeitDatumOrtBeschreibung
Do.16:00 - 18:0002.03.2023 - 01.06.2023EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Mi.12:00 - 13:0019.04.2023Seminarraum FAV 01 B (Seminarraum 187/2) 185.A05 Fortgeschrittene funktionale Programmierung - Übung
Fr.11:00 - 12:0021.04.2023 - 09.06.2023Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Fortgeschrittene funktionale Programmierung - Einzeltermine
TagDatumZeitOrtBeschreibung
Do.02.03.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Do.09.03.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Do.16.03.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Do.23.03.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Do.30.03.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Mi.19.04.202312:00 - 13:00Seminarraum FAV 01 B (Seminarraum 187/2) 185.A05 Fortgeschrittene funktionale Programmierung - Übung
Do.20.04.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Fr.21.04.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.27.04.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Fr.28.04.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.04.05.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Fr.05.05.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.11.05.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Fr.12.05.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.25.05.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Fr.26.05.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Do.01.06.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Fortgeschrittene funktionale Programmierung
Fr.02.06.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A05 Fortgeschrittene funktionale Programmierung (Übung)
Fr.09.06.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/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
31.01.2023 01:00 10.03.2023 12:00 24.03.2023 12:00

Gruppen-Anmeldung

GruppeAnmeldung VonBis
FFP 102.03.2023 01:0010.03.2023 12:00
FFP 202.03.2023 01:0010.03.2023 12:00
FFP 302.03.2023 01:0010.03.2023 12:00
FFP 402.03.2023 01:0010.03.2023 12:00
FFP 502.03.2023 01:0010.03.2023 12:00
FFP 602.03.2023 01:0010.03.2023 12:00
FFP 702.03.2023 01:0010.03.2023 12:00
FFP 802.03.2023 01:0010.03.2023 12:00
FFP 902.03.2023 01:0010.03.2023 12:00
FFP 1002.03.2023 01:0010.03.2023 12:00
FFP 1102.03.2023 01:0010.03.2023 12:00
FFP 1202.03.2023 01:0010.03.2023 12:00
FFP 1302.03.2023 01:0010.03.2023 12:00
FFP 1402.03.2023 01:0010.03.2023 12:00
FFP 1502.03.2023 01:0010.03.2023 12:00
FFP 1602.03.2023 01:0010.03.2023 12:00
FFP 1702.03.2023 01:0010.03.2023 12:00
FFP 1802.03.2023 01:0010.03.2023 12:00
FFP 1902.03.2023 01:0010.03.2023 12:00
FFP 2002.03.2023 01:0010.03.2023 12:00
FFP 2102.03.2023 01:0010.03.2023 12:00
FFP 2202.03.2023 01:0010.03.2023 12:00
FFP 2302.03.2023 01:0010.03.2023 12:00
FFP 2402.03.2023 01:0010.03.2023 12:00
FFP 2502.03.2023 01:0010.03.2023 12:00
FFP 2602.03.2023 01:0010.03.2023 12:00
FFP 2702.03.2023 01:0010.03.2023 12:00
FFP 2802.03.2023 01:0010.03.2023 12:00
FFP 2902.03.2023 01:0010.03.2023 12:00
FFP 3002.03.2023 01:0010.03.2023 12:00
FFP 3102.03.2023 01:0010.03.2023 12:00
FFP 3202.03.2023 01:0010.03.2023 12:00
FFP 3302.03.2023 01:0010.03.2023 12:00
FFP 3402.03.2023 01:0010.03.2023 12:00
FFP 3502.03.2023 01:0010.03.2023 12:00
FFP 3602.03.2023 01:0010.03.2023 12:00
FFP 3702.03.2023 01:0010.03.2023 12:00
FFP 3802.03.2023 01:0010.03.2023 12:00
FFP 3902.03.2023 01:0010.03.2023 12:00
FFP 4002.03.2023 01:0010.03.2023 12:00
Tutorial Group 1 (Fri, 11-12am)27.03.2023 16:0005.04.2023 22:59
Tutorial Group 2 (Fri, 11-12am)27.03.2023 16:0005.04.2023 22: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