Beschreibung
Die Vorlesung bespricht die grundlegenden
Konzepte heutiger Programmiersprachen
aus der Sicht der praktischen Anwendung
zur Lösung von Softwareproblemen.
Programmierung bedeutet nicht nur die Entwicklung
und das Testen (oder, besser, Verifizieren) irgendeines korrekten
und effizienten Programms zur
Lösung eines bestimmten Anwendungsproblems.
Es ist auch wichtig, daß das Programm gute Wartungseigenschaften
besitzt. Ein Programm soll daher möglichst viele,
in anderen Kontexten wiederverwendbare Teile besitzten,
es soll leicht modifizierbar sein, wenn sich das ursprünglich gestellte
Problem ändert, es soll von Leuten verstanden werden können,
die an seiner Entwicklung nicht beteiligt waren, und vieles mehr.
In der Vorlesung untersuchen wir
die Konzepte heutiger Sprachen hinsichtlich der Art und Weise, wie sie
diese Anforderungen an die Programmierung unterstützen.
Folgende Fragen werden deshalb typischerweise gestellt:
- Wie helfen Sprachkonzepte, bestimmte Programmier- und
Programmentwicklungstechniken
umzusetzen?
- Was sind die Programmiertechniken, für die die
Sprache gemacht ist?
- Welches Rechenmodell steht hinter einem Sprachkonzept?
- Wie unterstützen Sprachkonzepte die Verifikation von Programmen?
- Wie wird Abstraktion von der konkreten Problemstellung ermöglicht?
- Wie wird Abstraktion von
der konkreten Implementierungstechnik ermöglicht?
- Wie wird Strukturierung großer Programmsysteme unterstützt?
- Für welche Softwareprobleme bietet ein Konzept keine
Unterstützung?
- Ist ein Konzept leicht und/oder effizient implementierbar,
d.h. in Maschinensprache (welcher Maschinen?) übersetzbar?
Diese Fragen werden nicht theoretisch oder technisch detailiert behandelt, sondern anhand
ausgewählter, nichttrivialer Programmierbeispiele erläutert.
Verweise auf die theoretische oder technisch
detailiertere Behandlung, die man in
angrenzenden Vorlesungen (z.B. Übersetzerbau, Semantik von Programmiersprachen, Spezifikation und Verifikation, Logische Programmierung,
lambda-Kalkül und Typentheorie)
lernen kann, werden gegeben.
Die Vorlesung orientiert sich an sprachübergreifenden Konzepten
(Kontrollstrukturen, Datentypen, Berechnungsmodellen, Abstraktionsmechanismen), eine Sichtweise, die oft
parallel, aber manchmal auch orthogonal zu den großen
Programmierparadigmen (imperativ,
funktional, logisch, objektorientiert) liegt.
Die Vorlesung verwendet konkrete Programmiersprachen
als Anschaungsmaterial,
insbesondere ML, Haskell, Prolog und Java.
Die begleitenden Übungen sind teils theoretisch,
aber zum größeren Teil praktisches Programmieren
in einigen der genannten Sprachen.
On to Lernziele Part of Vorlesung
Andreas Podelski, Abdelwaheb Ayari, Hubert Baumeister
February 25, 1997
Imprint | Data Protection