Vorlesung
Allgemeines
Die Vorlesung (4V+2Ü) ist eine Stammvorlesung
im Bereich "Praktische Informatik", die
regelmäßig (in der Regel einmal pro Jahr) angeboten werden wird.
Sie richtet sich an Informatikstudenten nach dem Vordiplom.
Weitere Voraussetzungen gibt es nicht.
Leistungsnachweise werden in Form von Übungsscheinen
ausgestellt, die die erfolgreiche Bearbeitung eines gewissen
Prozentsatzes an Übungsaufgaben und aktive Teilnahme an den Übungen voraussetzen.
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, Smalltalk und
C(++).
Die begleitenden Übungen sind teils theoretisch,
aber zum größeren Teil praktisches Programmieren
in einigen der genannten Sprachen.
Lernziele
- Beherrschen von grundlegenden Techniken des Programmierens
in imperativen, funktionalen, logischen und objektorientierten
Programmiersprachen
- Multilinguales Programmieren
- Erwerben von Wissen über die Art und Weise, wie
einzelne Sprachkonzepte bei der Lösung gewisser
Softwareprobleme helfen oder auch nicht helfen
- Einblick in die wesentlichen Konzepte der operationalen Semantik
einiger Sprachen
- Erwerben von Verständnis für theoretische und praktische
Problemstellungen
bei der semantischen Erklärung oder bei der Implementierung von
Programmiersprachen
Stichworte zum Inhalt
- Funktionale Programmierung:
Termtypen, Typpolymorphismus und Typinferenz, parametrische
Module, Typklassen, Auswertungsstrategien (ML und Haskell)
- Logische Programmierung: Unifikation, Einbringen primitiver
Logiken über den Mechanismus der constraints, Ausführung
als Constraintsimplifikation,
nebenläufiges logisches Programmieren mit constraints
- Vererbung und objekt-orientierte Programmierung
(Smalltalk-80, C++)
- grundlegende Konzepte von Nebenläufigkeit und Kommunikation
in CSP ('Communicating Sequential Processes')
On to Übungsblätter Part of Programmiersprachen WS 95/96
Harald Ganzinger, Peter Barth, Hubert Baumeister
September 6, 1996
Imprint | Data Protection