Programmiersprachen sind das grundlegendste Werkzeug von Programmierern. Dieser Kurs behandelt die Grundlagen der Theorie der Programmiersprachen, ihre Anwendungen auf heute weit verbreitete Sprachen und Trends auf diesem Gebiet, die wahrscheinlich dazu beitragen werden, die Programmiersprachen von morgen zu definieren. Nach diesem Kurs verfügen die Studierenden über ein Verständnis für ein breites Spektrum an Programmiersprachenkonzepten und sind in der Lage, sich schnell an neue Programmiersprachen anzupassen. Eine Mischung aus schriftlichen und praktischen Übungen hilft den Studierenden, verschiedene Programmierstile in mehreren Programmiersprachen zu verstehen.
Inhalt.
Verschiedene Programmierstile mit Schwerpunkt auf funktionaler Programmierung:
Datentypen und Mustervergleich
Funktionen höherer Ordnung
polymorphe Typen
Verschiedene Arten von Polymorphismus:
Subtypisierung (strukturell und nominal)
Generics
Überladung
Programmkorrektheit:
statische Verifizierungsmethoden
Testmethoden wie QuickCheck
Es gibt keine Abschlussprüfung. Die Bewertung basiert auf Quizzes, Midterms und mehreren kleineren Projekten, die während des Semesters durchgeführt werden.
Die Studierenden lernen, komplexe Algorithmen mit einer systemnahen prozeduralen oder objekt-orientierten Programmiersprache wie C oder C++ korrekt zu implementieren.
Sie optimieren diese Algorithmen hinsichtlich der Ausführungsgeschwindigkeit mit verschiedenen Paradigmen wie Hybridisierung oder Techniken zur Cache-Optimierung.
Die Teilnehmer der Veranstaltung messen die Ausführungszeiten und überprüfen empirisch die asymptotische Laufzeit der implementierten Verfahren. Dazu erstellen sie verschiedener Testszenarien, um die Algorithmen darauf basierend zu vergleichen und zu beurteilen.
Die Studierenden dokumentieren und diskutieren die Ergebnisse. Sie analysieren ihre Optimierungen und erklären die Resultate.
Die zu behandelnden Informatikprobleme variieren. Typische Inhalte sind:
Die Übungsaufgaben und Zusatzmaterialien werden elektronisch (HTML, PDF, Programmgerüste) zur Verfügung gestellt.
Vorkenntnisse:
Vertiefte praktische Kenntnisse einer prozeduralen oder objekt-orientierten Programmiersprache wie C, C++, C# oder Java. Implementierung und Testen grundlegender Algorithmen aus dem Bereich der Such-, Graphen- und Sortierprobleme.
Format: Praktische Arbeit, Übungen im Labor mit geringem Vorlesunganteil. Die Ergebnisse werden in den praktischen Übungen von den Studenten vorgestellt und mit dem Dozenten diskutiert. Die Ergebnisse sind von den Studenten in einem Bericht zu dokumentieren.
Betreuung:
Individuelle Betreuung durch den Dozenten während der Präsenzzeit im Rechnerlabor. Außerhalb der Präsenzzeit via E-Mail oder während der Sprechzeiten des Dozenten.
Programmiersprachen sind das grundlegendste Werkzeug von Programmierern. Dieser Kurs behandelt die Grundlagen der Theorie der Programmiersprachen, ihre Anwendungen auf heute weit verbreitete Sprachen und Trends auf diesem Gebiet, die wahrscheinlich dazu beitragen werden, die Programmiersprachen von morgen zu definieren. Nach diesem Kurs verfügen die Studierenden über ein Verständnis für ein breites Spektrum an Programmiersprachenkonzepten und sind in der Lage, sich schnell an neue Programmiersprachen anzupassen. Eine Mischung aus schriftlichen und praktischen Übungen hilft den Studierenden, verschiedene Programmierstile in mehreren Programmiersprachen zu verstehen.
Inhalt:
Verschiedene Programmierstile mit Schwerpunkt auf funktionaler Programmierung:
Verschiedene Arten von Polymorphismus:
Programmkorrektheit:
Es gibt keine Abschlussprüfung. Die Bewertung basiert auf Quizzes, Midterms und mehreren kleineren Projekten, die während des Semesters durchgeführt werden.
Seminaristischer Unterricht mit theoretischen und praktischen Übungen.