Inhalt

Die beiden Module "Einführung in die Informatik" führen die Studierenden zu Beginn des Studiums an die Konzepte und Methodik der Softwareentwicklung heran.

Ein kurzer Abriss über Entstehung und Organisation des Fachs vermittelt wesentliche Grundbegriffe wie digitale Information, Algorithmen und deren Korrektheit, Syntax und Semantik sowie Modellbildung. Als Basis für das Verständnis der Syntax und Semantik von Programmiersprachen werden verschiedene Ersetzungssysteme eingeführt: zuerst Markov-Algorithmen, kontextfreie Grammatiken und Termersetzungssysteme, später Lambda-Kalkül und operationale Semantik. Anhand der funktionalen Anteile einer modernen Programmiersprache (Scala) werden die Studierenden an Konzepte und Methodik der Programmentwicklung herangeführt. Die Studierenden lernen Rekursion als Grundkonzept zur Strukturierung von Abläufen und Datenmengen kennen, Induktion als komplementäres Hilfsmittel zum Korrektheitsnachweis. Den Datentypen als weiterem Grundkonzept begegnen sie laufend. Fortgeschrittene Programmiertechniken wie die Verwendung von Funktionalen werden an Fallstudien demonstriert.

Die Studierenden lernen eine Reihe verschiedener Techniken (schrittweise Verfeinerung, von Zusicherungen geleitete Entwicklung, Verwendung von Mustern wie Bisektion, Backtracking und Dynamische Programmierung), mit denen man systematisch effiziente Problemlösungen findet. Die Anwendung dieser Techniken wird an vielen bekannten Algorithmen (u.a. Quicksort, Warshall, Damenproblem) illustriert. Ihre programmiertechnischen Möglichkeiten erweitern sie in der imperativen Programmierung um Pakete, Zeiger und generische Parametrisierung: Pakete fassen zusammengehörige Programmbausteine zu Einheiten zusammen, die als Ganzes importiert werden und zur Modularisierung größerer Programme beitragen. Mit Zeigern lassen sich nicht nur rekursiv definierte, hierarchische Datenstrukturen effizient implementieren, sondern auch beliebig komplexe Geflechtstrukturen. Generische Parameter erhöhen die Anpassbarkeit von Programmteilen an neue Aufgabenstellungen und erleichtern damit deren Wiederverwendung.

Den Studierenden werden verschiedene Abstraktionsmechanismen vorgestellt: die Anhebung des sprachlichen Niveaus bei der Einführung höherer Programmiersprachen, Abstraktion durch Parametrisierung und Abstraktion bei Spezifikationen; schließlich prozedurale Abstraktion und Datenabstraktion.

Mit den Streuspeichertabellen sowie den AVL- und B-Bäumen lernen die Studierenden exemplarisch Datenstrukturen zur hocheffizienten Speicherung großer Datenmengen kennen. Auf solchen Datenstrukturen beruhen nicht nur wesentliche Teile der Klassenbibliotheken objektorientierter Programmiersprachen, sondern auch die Implementierung moderner Datenbanksysteme. Verschiedene Effizienzbegriffe werden kurz vorgestellt und durch einfache "worst-case"-Abschätzungen von Laufzeit und Speicherplatz nachgewiesen.

In den Übungen wenden die Studierenden die vorgestellten Methoden auf kleinere Probleme an, wobei sie von den Betreuern schrittweise an eine selbständige Arbeitsweise herangeführt werden. Sie erlernen dabei auch den praktischen Umgang mit geeigneten Programmierwerkzeugen.

Hinweise

Die beiden Lehrveranstaltung werden für die Bachelorstudiengänge INF, ME und WIN angeboten. Die Details dazu entnehmen Sie bitte dem Modulhandbuch für Ihren Studien- und Jahrgang sowie der Lehrveranstaltungsplanung der Fakultät für Informatik.

Sie finden üblicherweise im Herbst- und Wintertrimester statt. Die Unterlagen werden über ILIAS bereitgestellt.