In diesem Modul werden grundlegende Prinzipien heutiger
Programmiersprachen vorgestellt. Dabei steht neben Methoden
zur Beschreibung von Sprachkonzepten die praktische
Anwendung von Sprachkonzepten zur Lösung von
Softwareproblemen im Vordergrund.
In diesem Modul werden die Studierenden mit den
grundlegenden Prinzipien und Konstrukten heutiger
Programmiersprachen vertraut gemacht.
Dadurch werden sie in die Lage versetzt, sich selbstständig
und effektiv in konkrete Programmiersprachen verschiedener
Programmierparadigmen einzuarbeiten.
Sie erwerben die Fähigkeit,
verschiedene Sprachen und Sprachkonzepte bezüglich ihrer
Eignung für ein Softwareproblem kritisch zu beurteilen
und entsprechend auszuwählen.
Außerdem erlernen sie den praktischen Umgang mit formalen
Beschreibungsmethoden, um mit diesen selbstständig
sprachliche Aspekte komplexer Softwaresysteme zu spezifizieren.
In diesem Modul werden grundlegende Prinzipien und Konstruktionen
heutiger Programmiersprachen vorgestellt, wobei die konkrete
Ausprägung am Beispiel verschiedener konkreter Programmiersprachen
gezeigt wird.
Dabei wird auf eine exakte und methodische adäquate Beschreibung
der Sprachkonzepte mittels verschiedener formaler Systeme
Wert gelegt, die die Studierenden in die Lage versetzt,
sprachliche Aspekte komplexer Softwaresysteme geeignet
zu spezifizieren.
- Grundlagen
- Elemente und Aspekte von Programmiersprachen
- Methoden der Syntaxbeschreibung
- Methoden der Semantikbeschreibung: Inferenzsysteme,
strukturierte operationale Semantik, natürliche Semantik
- Ausdrücke und ihre Interpretation
- abstrakte Datentypen
- Deklarationen, Bindungen, Blockstruktur
- Imperative Sprachen
- Operationales Modell (Zuweisung, L-/R-Werte)
- Variablen, Datentypen
- Kontrollabstraktion,
- Prozeduren, Parameterübergabemechanismen
- Modelle zur Ausnahmebehandlung
- Sprachmechanismen zur Programmierung im Großen
- Module und Schnittstellen
- Klassen und Objekte
- Vererbung, Polymorphie
- Generizität
- Funktionale Programmiersprachen
- Referentielle Transparenz, musterorientierte Programmierung
- Operationales Modell, Auswertungsstrategien
- Natürliche Semantik der faulen Auswertung
- Funktionen höherer Ordnung
- Typsysteme, parametrischer Polymorphismus
- Logische Programmiersprachen
- Modell der Logikprogrammierung, Resolution, Unifikation
- Formalisierung von Auswertungsstrategien
- Erweiterungen: Negation, Nebenläufigkeit, Parallelität,
Constraints
- Sprachkonzepte zur nebenläufigen und verteilten Programmierung
- Nebenläufige, verteilte und parallele Systeme und deren Probleme
- Semaphore, Monitore, Rendezvous, Nachrichtenaustausch
- Tupelräume, CCP
- Nebenläufige funktionale Programmierung
Mündliche Prüfung am Ende der Vorlesung
- Mitchell: Concepts in Programming Languages.
Cambridge University Press, 2003
- Appleby/VandeKopple: Programming Languages:
Paradigm and Practice. McGraw-Hill, 1997
- Sethi: Programming Languages: Concepts and Constructs.
Addison-Wesley, 2nd ed., 1996
- Sebesta: Concepts of Programming Languages.
Addison-Wesley, 5th ed., 2002
- Ghezzi/Jazayeri: Programming Language Concepts 2/E.
John Wiley \& Sons, 1987
- Arnold/Gosling: The Java Programming Language.
Addison-Wesley, 1996
- Flanagan: Java in Nutshell. O'Reilly, 1999
- Meyer: Object-oriented Software Construction.
Prentice Hall, 1997
- Bird: Introduction to Functional Programming using Haskell.
Prentice Hall, 1998
- Hinze: Einführung in die praktische Programmierung mit Miranda.
Teubner, 1992
- Thompson: Haskell - The Craft of Functional Programming.
Addison-Wesley, 1996
- Sterling/Shapiro: The Art of Prolog.
MIT Press, 1991
- Hanus: Problemlösen mit Prolog.
Teubner, 1987
- Lloyd: Foundations of Logic Programming, 2nd Ed., Springer 1987
- Armstrong et al: Concurrent Programming in Erlang,
Prentice Hall, 1996