Entwurfsmuster für funktionale Programmierung (EFP)
6/7. Semester
5 ECTS | 4 SWS
Continuous Assessment (CA)
Software mit funktionalen Methoden entwerfen: Du erfährst, wie Programme im funktionalen Programmierstil aufgebaut werden und wie sich bekannte Entwurfsmuster verändern oder durch neue Ansätze ersetzt werden. Im Fokus steht das strukturierte Entwickeln von Software in einer funktionalen Programmiersprache. Zusätzlich entwickelst du in einem Projekt eine verteilte Anwendung mit typischen Entwurfsmustern.
Inhalte
- Viele eingeführte Entwurfsmuster, die im Wesentlichen aus einem objektorientierten Ansatz heraus entwickelt worden waren, müssen im Kontext der funktionalen Programmierung neu bewertet werden. Es zeigt sich, dass sie im Rahmen der Anwendung einer konkreten funktionalen Programmiersprache teilweise nicht mehr nützlich sind oder in der Implementierung grundsätzlich abweichen. Zudem wurden im Zusammenhang mit der Programmierung in funktionalen Sprachen weitere Entwurfsmuster sowohl auf der Ebene des Systemarchitektur als auch auf der eher idiomatischen Ebene der Programmierung neue Muster identifiziert.
- Diese Lehrveranstaltung gliedert sich in drei Teile: ein einführender Programmierkurs, der vertiefende Teil und ein Projekt.
- Im Programmierkurs (ca. 20% des Umfangs im Präsenzstudium) wird am Beispiel einer konkreten funktionalen Programmiersprache, die für die praktische Anwendung relevant ist (z.B. Clojure, Scala oder Elixir), die Grundlagen der funktionalen Programmierung und der idiomatische Gebrauch der verwendeten Programmiersprache anhand von kleinen Beispielen vermittelt. Dieser Teil ist sehr kurz und steht nicht im Vordergrund dieser Lehrveranstaltung.
- Im vertiefenden Teil (ca. 30% des Umfangs im Präsenzstudium) wird eine Reihe gebräuchlicher Entwurfsmuster auf die Anwendbarkeit im funktionalen Paradigma untersucht. Das geschieht anhand von Referaten der Teilnehmer. Abhängig von der Anzahl der Teilnehmer auch durch den Dozenten. Außerdem werden Entwurfsmuster, die speziell im Kontext der funktionalen Programmierung entstanden sind, analysiert.
- Im Projektteil (ca. 50% des Umfangs im Präsenzstudium) werden passende Entwurfsmuster auf ein komplexeres Problem angewendet. Im Projekt wird eine verteilte Anwendung mit funktionalen Mitteln programmiert. Das System, das im Projekt in Kleingruppen entwickelt wird, soll web-basierte Schnittstellen haben und eine im Rahmen der Lehrveranstaltung zu konkretisierende Anwendung umsetzen.
- Objekt-orientierte Entwurfsmuster und idiomatische Konstrukte, die bei funktionaler Programmierung ersetzt werden müssen (beispielhafte Auswahl): Functional Interface, State Carrying Functional Interface, Command, Builder For Immutable Object, Iterator, Template Method, Strategy, Null Object, Decorator, Visitor, Dependency Injection
- Entwurfsmuster und idiomatische Verwendung von Konstrukten bei funktionaler Programmierung (beispielhafte Auswahl): Tail Recursion, Mutual Recursion, Filter-Map-Reduce, Chain of Operations, Function Builder, Memoization, Lazy Sequence, Focused Mutability, Customized Control Flow, Domain-Specific Language, Railway Oriented Programming (Monaden für Error Handling)
Lernziele/Kompetenzen
Die Studierenden sind in der Lage,
- Entwurfsmuster für Softwarearchitekturen, die im objektorientierten und funktionalen Paradigma umgesetzt werden sollen, zu beschreiben und zu erläutern.
- die funktionale Programmiersprache, die im Rahmen der Lehrveranstaltung benutzt wird, professionell einzusetzen und komplexe Softwareprojekte unter Anwendung von spezifischen Entwurfsmustern, die im Umfeld der funktionalen Programmierung entstanden sind, umzusetzen.
- Entwurfsmuster auf ihre Anwendbarkeit im Rahmen des Software Engineerings im funktionalen Programmierparadigma zu analysieren und auf ihre Anwendbarkeit hin beurteilen.
Literatur
- Allen, J. (2013). Effective Akka. Sebastopol: O Reilly.
- Backus, J. (1978). Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs. Communications of the ACM 21, (8) 613-641. DOI: 10.1145/359576.359579.
- Bevilacqua-Linn, M. (2013). Functional Programming Patterns in Scala and Clojure. Write Lean Programs for the JVM. Dallas: The Pragmatic Programmers.
- Butcher, P. (2014). Seven Concurrency Models in Seven Weeks. When Threads Unravel. Dallas: The Pragmatic Programmers.
- Emerick, C., Carper, B., & Grand, C. (2012). Clojure Programming. Sebastopol: O Reilly.
- Ford, N. (2014). Functional Thinking. Paradigm Over Syntax. Sebastopol: O Reilly.
- Fowler, M. (2003). Patterns für Enterprise Application-Architekturen. Bonn: mitp-Verlag.
- Hinze, R. (1992). Einführung in die funktionale Programmierung mit Miranda. Stuttgart: Teubner.
- Meier, C. (2015). Living Clojure. Sebastopol: O Reilly.
- Vernon, V. (2016). Reactive Messaging Patterns with the Actor Model. Applications and Integration in Scala and Akka. New York: Addison-Wesley.
Dozentinnen / Dozenten
- Prof. Dr.-Ing. Sandro Leuchter
Empfohlene Vorkenntnisse
Daten zum Modul
| Semester |
6/7 |
| Unterrichtssprache |
Deutsch |
|
Häufigkeit
|
Unregelmäßig
|
| Kreditpunkte |
5 |
| Modulverantwortlich |
Prof. Dr.-Ing. Sandro Leuchter |
| Dauer |
1 Semester |
| Studienleistung |
Keine |
| Prüfungsvorleistung |
Keine |
| Prüfungsleistung |
Continuous Assessment (CA) |
Semesterwochenstunden
| Vorlesung |
1 SWS |
| Übung |
3 SWS |
| Summe |
4 SWS |
Arbeitsaufwand (work load)
| Vorlesung |
15 h |
| Labor |
45 h |
| Selbststudium |
45 h |
| Projekt |
45 h |
| Summe |
150 h |