Praktische Informatik 2 im Sommersemester 2001


Das PI2-Team

Die Veranstaltung Praktische Informatik 2 wird von folgenden Personen durchgeführt:

Vorlesung: Prof. Dr. Jan Peleska, http://www.informatik.uni-bremen.de/~jp, EMail: jp@informatik.uni-bremen.de

Tutorien:

FAQ (Frequently Asked Questions)-Veranstaltung: Jan Peleska, EMail: jp@informatik.uni-bremen.de


Veranstaltungszeiten

Vorlesung:              Di. 13-15 Uhr, HS Großer Hörsaal

Übungen:                Mi.  8-10 Uhr, 
                        Mi. 10-12 Uhr,
                        Do.  8-10 Uhr,
                        Fr. 13-15 Uhr

Beginn:                 Vorlesung:  Di, 10.04.00
                        Übung:      Mi, 11.04.00

NEU:                    FAQ (Frequently Asked Questions)-Veranstaltung
                        Mo. 15-17 MZH 7220
                        erste FAQ-Veranstaltung am Montag, 28.05.2001 


Struktur der Veranstaltung

Die Veranstaltung wird dieses Semester in drei Bereiche gegliedert: Es gibt in diesem Semester kein explizites Programmierpraktikum! Ausserhalb der Besprechungen in den Tutorien seid Ihr bei der Lösung der Aufgaben im wesentlichen auf Euch alleine gestellt und auch die zeitliche Einteilung bleibt Euch überlassen (solange Ihr Euch an die Abgabefristen auf den Aufgabezetteln haltet ...).


Literatur


Veranstaltungsinhalte

Die folgende Liste von Lerninhalten wird im Laufe des Semesters entwickelt. Sie dient als Checkliste, mit welchen Themen und Begriffen die Veranstaltungsteilnehmer vertraut werden sollten. Eine "Session" entspricht einer zusammengehörigen Lerneinheit, sie muss nicht notwendigerweise in genau einer Vorlesung abgehandelt werden.

Session 1: Merkmale objekt-orientierter Programmiersprachen

Vorlesung: Objekte: Attribute, Operationen, Methoden, Schnittstellen, Nachrichten, Signatur, Geheimnisprinzip - Klassen: Konstruktoren, Instantiierung, konkrete/abstrakte Klassen - Vererbung: Einfach-/Mehrfachvererbung, Generalisierung, Spezialisierung - Überladen/Überschreiben/Redefinition von Operationenen - Polymorphismus - (spätes) Binden von Operationen an Methoden - Generische (d.h. typunabhängige) Methoden und Klassen, Templates (d.h. Typparametrisierung)

Literatur für Vorlesung und Tutorien: Balzert, Abschnitte 2.5, 2.14

Session 2: Ausprägung objekt-orientierter Programmierkonzepte in Java

Vorlesung: Eine Übersicht der wichtigsten Stichworte und Fakten zum Thema Objekt-orientierter Programmierkonzepte und Java ist hier angegeben. Dazu findet man Beispielquelltexte MyMain.java, MyFiniteStack.java, MyComparable.java, die alle gemeinsam in einem Verzeichnis mit javac *.java zu übersetzen sind.

Literatur für Vorlesung und Tutorien: Balzert, Abschnitte 2.5, 2.10, 2.11, 2.14, 2.16

Session 3: Algorithmen und Datenstrukturen

Vorlesung: Dieser Teil der Vorlesung wird begleitend zu allen anderen Sessions durchgeführt und dient dazu, weitere Datenstrukturen und darauf operierende Algorithmen einzuführen: Stapel (englisch: Stacks) - binäre Bäume, balancierte Bäume, AVL-Bäume - Transitionssysteme (Definition siehe unten)

Literatur für Vorlesung und Tutorien: Balzert, Abschnitte 2.19.6, 3.8

Session 4: Formale Verifikation sequenzieller Programme

Vorlesung: Beweisregeln für sequenzielle Programme: Konsequenzregel - Axiom für die leere Anweisung - Zuweisungsregel - Sequenzregel - if-Regel - while-Regel - Terminierungsbeweis für Schleifen.

Ein Verifikationsbeispiel findet man hier .

Literatur für Vorlesung und Tutorien: Balzert, Abschnitte 3.2.3 - 3.2.7


Beispiele, Zusatzinformationen und ähnliches

Hashing

Die Beispielimplementierungen zu Hashing-Verfahren, welche in der Vorlesung PI-I vorgestellt wurden, finden sich hier: MyHash.java sowie MyHashS.java. Zusätzlich eine Version, welche die einzutragenden Werte aus einem File names raweventsTL.t liest: MyHashFile.java. Eine Beispieldatei hierfür findet sich hier.

Syntax-Prüfung

Als Hilfe für die erste Aufgabenserie für PI-2 gibt es hier nochmal die Folien aus der letzten Vorlesung PI-1 als Postscript: SATZGram.ps, SATZJava.ps und als PDF: SATZGram.pdf, SATZJava.pdf.
Die Methoden auf diesen Folien sind so noch nicht ausführbar, da alle Methoden zum Umgang mit Tokens fehlen (also insbesondere getNextToken), entsprechend sind die Token-Vergleiche in den switch Anweisungen nicht ausführbar, solange keine (z.B. int) Konstanten zur Repräsentation der einzelnen Token festgelegt worden sind. Achtung: Die Darstellung der Grammatik folgt nicht streng den EBNF Regeln, sondern basiert nur auf ihnen. Nichtterminale sind komplett in Grossbuchstaben dargestellt, Terminale (=Token) sind unterstrichen, Regeln werden mit = statt mit ::= definiert. Diese Variante der Darstellung findet man ebenfalls sehr häufig in Büchern über Formale Sprachen oder auch in Syntaxbeschreibungen für Programmiersprachen.

Definition Transitionssystem

Für die Aufgabenserie 4 und als ein Bäume verallgemeinernder Abstrakter Datentyp wurden in der Vorlesung Transitionssysteme eingeführt:

Definition: Ein Transitionssystem (englisch Labelled Transition System) ist ein Quadrupel LTS = (S,S0,A,T) mit folgenden Eigenschaften:

Ein Transitionssystem heisst deterministisch, wenn folgende Bedingungen beide erfüllt sind: Eine Ausführung (englisch Execution) eines Transitionssystems LTS = (S,S0,A,T) ist eine Folge (z0,a0,z1,a1,z2,a2, ... ), so dass folgende Bedingungen erfüllt sind:

Beispiel zur Programmverifikation

Hier findet Ihr noch einmal das Verifikationsbeispiel aus der Vorlesung, diesmal vollständig (totale Korrektheit) und ausführlich dokumentiert (auch als PDF).


Aufgabenblätter

In diesem Abschnitt findet Ihr die Aufgabenblätter und gegebenenfalls Zusatzinformationen für die Lektürestunden zum Herunterladen und ausdrucken.

Die Lösungen zu den Aufgabenblättern müssen mit LaTeX gesetzt werden, dabei sollen die Vorgaben aus pi1-muster.tex und der Hilfsdatei defs.tex verwendet werden.

Die weiteren Aufgabenserien werden im Verlauf des Semesters nach und nach passend zu der Vorlesung hier zu finden sein. Die geplanten Termine für alle Aufgabenblätter könnt Ihr in der hier liegenden Tabelle nachsehen.


Jan Peleska - TZI - Bremen Institute of Safe Systems BISS / < jp@informatik.uni-bremen.de> / 27 MAY 2001