1 Die Vorlesung

Allgemeines

Die Vorlesung (4V+2Ü) ist eine neue Stammvorlesung im Bereich “Praktische Informatik”, die ab diesem Semester (WS 94/95) 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 voraussetzen.

Zeit und Ort: Di + Do 14–16, Geb. 27, HS II; Übungen nach Vereinbarung

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 Programmentwicklungstechniken umzusetzen?

• 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, λ-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 Modula, C(++), Smalltalk, ML, Haskell und Prolog. 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

• Erwerben von Verständnis für theoretische und praktische Problemstellungen bei der semantischen Erklärung oder bei der Implementierung von Programmiersprachen

Stichworte zum Inhalt

Wir gehen davon aus, daß aus dem Grundstudium bekannt ist:

1. Imperatives Programmieren (Pascal, C): Kontrollstrukturen und Verifikationstechniken (Zusicherungen, Invarianten)

2. Prozeduren, Module, abstrakte Datentypen, Zusammenhang zwischen Abstraktion und Implementierung (C++, Modula 2)

Wir konzentrieren uns daher auf:

1. Funktionale Programmierung: Termtypen, Typpolymorphismus und Typinferenz, parametrische Module, Typklassen, Auswertungsstrategien (ML und Haskell)

2. Logische Programmierung: relationales Programmieren, Deduktion durch Resolution (Prolog), Constraints

3. Vererbung und objekt-orientierte Programmierung (Smalltalk-80, C++)

4. Programmierung verteilter kommunizierender Prozesse: Occam, Nebenläufiges logisches Programmieren mit Constraints

Literatur

Lehrbücher:

1. R. Sethi: Programming languages: concepts and constructs, Addison-Wesley 1989.

2. D.A. Watt: Programming Language Concepts and Paradigms, Prentice-Hall 1989.

3. C. Ghezzi, M. Jazayeri: Programming Language Concepts, Wiley 1987.

Spezialliteratur: wird in der Vorlesung angegeben.