Ziele und Inhalt
Das Ziel der Vorlesung ist es ein allgemeines Grundwissen der
Informatik zu vermitteln. Vorauslaufend auf die Neugliederung die
ohnehin bald kommen wird im Rahmen des Batchelor/Mastersystems wird
diese Vorlesung wie zwei Vorlesungen in einem strukturiert: an einem
Vorlesungstag werden praktische am anderen theoretische Themen
behandelt.
Die Hoehrer die im Gymnasium schon Informatik auf einem anständigen
Niveau gehabt haben werden sich sicherlich mal ein bisschen langweilen.
Dies ist unvermeidlich, da in Prinzip die Vorlesung für jeden
zugänglich sein sollte der ausreichend intelligent und fleisig ist.
Vorwissen wird nirgendwo angenommen. Andererseits, ist es klar, dass
wenn man wirklich noch gar nichts auf diesem Gebiet weiß, man schon mal
ein Paar Stunden länger Arbeiten muss um sich alles anzueignen. Dies
gilt gerade auch für das Programmieren: Programmieren kann man als
Fähigkeit bezeichnen, etwas das man durch viel Üben lernt, wie
Schwimmen.
Lehrziele
Am Ende der Vorlesung sollten die Teilnehmer folgendes können:
-
Ahnen was Informatik ist
-
Verstehen was im Rechner abläuft
-
Strukturiert programmieren
-
Objekt-Orientiert programmieren
-
Gestalten eines Applets
-
Kennen verschiedene Programmierparadigmen
-
Verstehen einer Syntaxbeschreibung in BNF
-
Beweisen mit vollständiger und struktureller Induktion
-
Unterscheiden zwischen Syntax und Semantik
-
Geben eines formellen Korrektheisbeweises
-
Erkennen von Textmustern und Verarbeiten von Signalen
-
Abstrahieren mit Algebren
Die Ziele 1 bis 6 werden im praktischen Teil angestrebt, die Ziele 7
bis 12 im theoretischen Teil.
Leitsätze
-
Vom Konkreten zum Abstrakten
-
Vom Speziellen zum Allgemeinen
Lehrinhalten
Aus den Lehrziele ergeben sich gewisse Lehrinhalte, jedoch nicht die
genaue Ausarbeitung und vor allem koennte man die Gewichtung der
Themen unterschiedlich waehlen. Aus den Leitsaetze ergibt sich eine
Reihenfolge der Themen.
Praktische Themen: Programmierung und System
Zunaechst wird die Programmiersprache C
eingefuehrt. Diese bietet dann Anlass zu fragen wie "was passiert
eigentlich wenn ein Programm ausgefuehrt wird?" und "wie kann man
eine Programmiersprache eindeutig und knapp beschreiben?". Nachdem
diese Fragen einigermasse beantwortet sind wird die Programmiersprache
Java eingefuehrt. Beinahe alles was im Kontext von C gelernt ist, ist
auch relevant fuer Java, allerdings bleiben manche Konzepte bei Java
implizit. Java bietet Strukturierungsmoeglichkeiten, die diese Sprache
sehr geeignet machen fuer umfassendere Aufgaben, wo C vor allem
Anwendung findet in numerischen und anderen berechnungsintensiven
Kontexten. Java ist ausserdem die Sprache des Internets im Sinne, das
Applets, die animierten Teilen einer Webseite, sehr leicht aus einem
Java Programm mit graphischer Oberflaeche zu erhalten sind. Schließlich
wird noch betrachtet welche alternative Arten der Programmierung es
gibt.
Der Inhalt des praktischen Teils der Vorlesung ist entsprechend der
gegebenen Zielsetzung etwa wie folgt. Es wird auch angegeben wieviel
Stunden fuer jeden Teil etwa geplant sind. Der Inhalt wird in den
jeweiligen Kapitel des Skripts genauer ausgearbeitet.
-
Informatik (1 Stunde, Ziel 1)
-
Was verstehen wir darunter
-
Strukturierte Programmierung in C (8 Stunden, Ziel 3)
-
Einfachste Programme
-
Instruktionen
-
Einfache Programme
-
Datatypen
-
Weitere Programme
-
Prozeduren
-
Parameteruebergabe
-
Pointers
-
Adressarithmetik
-
Weitere Programme
-
** Typen
-
Allocation und Deallocation
-
Ausfuehrung eines Programms (6 Stunden, Ziel 2)
-
Globaler Rechneraufbau
-
Virtuelle Machineebenen
-
Assembler
-
Machine Code
-
Betriebssystem
-
Speicherorganisation
-
Hierarchy
-
Cache Management
-
Main Memory Management
-
Prozedurenaufrauf
-
was passiert
-
was ist ein stack
-
Interne Repräsentationen
-
Integers
-
Floats
-
Chars
-
Booleans?
-
Objekt-Orientierte Programmierung in Java (8 Stunden, Ziel 4)
-
Klassen, Objekte und Methoden
-
Vererbung, Polymorphie, Einkapslung
-
Schnittstellen
-
Appletprogrammierung (2 Stunden, Ziel 5)
-
Programmierparadigmen (4 Stunden, Ziel 6)
-
Logische Programmierung
-
Funktionelle Programmierung
Theoretische Themen: Korrektheit und Verständnis
Bei der Programmierung entstehen, auch bei erfahrenen Programmierern,
Fehler. Viele groessere Softwareprojekte scheitern deswegen (aber auch
wegen mangelnder Klarheit / sich aendernder Anforderungen). Es ist ein
alter Traum, Programme mit Korrektheitszertifikat abliefern zu koennen.
Fuer grosse Projekte ist dies sehr schwierig. Fuer einfache Probleme
jedoch, wie zB. die Berechnung des Maximums einer Menge von Elementen,
kann ganz formal bewiesen werden, dass ein Programm die Aufgabe
erfuellt. Dies ist ein Haupthema der Vorlesung. Danach wird betrachtet
wie man auf sehr einfacher Art bestimmen kann ob ein gewisses Muster
in einem Text vorkommt, oder wie man die Umrisse einer Figur bestimmen
kann. Als Abruendung werden mehrere bis dahin nebeneinander
existierenden Systeme mit Rechneregel unter dem gemeinsamen Begriff
"Algebra" zusammengefasst.
-
Grammatiken (8 Stunden, Ziel 7 und 8)
-
Definitionen
-
Rekursion
-
BNF
-
Parsing
-
Strukturelle Induktion
-
Korrektheit eines Programms (10 Stunden, Ziel 9 und 10)
-
Etwas beweisen
-
Semantik von Arithmetischen Ausdrucken
-
Boolsche Ausdrucke
-
Werten und Operatoren
-
Wahrheitstabellen
-
Equationelle Logik
-
Propositionele Logik
-
Syntax von Propositionen
-
Semantik von Propositionen
-
Argumentieren mit Invarianten
-
Automaten (8 Stunden, Ziel 11)
-
Muster Erkennung
-
Signal Verarbeitung
-
Deterministische Automaten
-
Nicht-deterministische Automaten
-
Eliminieren des nicht-determinismus
-
Typen von Automaten
-
Algebren (4 Stunden, Ziel 12)
-
Rechnen mit Zahlen
-
Rechnen mit Booleans
-
Reguliere Ausdrucke
-
Abstraktion