Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog RSS Jörn Loviscach

Ausgewählte Kapitel der Informatik (Wahlpflichtfach):

Programmierung grafischer Oberflächen


Alle letzten Änderungen dieser Webseite sind durch rote Schrift gekennzeichnet!
letzte Änderung: 1. Juli 2001
 

Ziel

Diese Veranstaltung soll in Prinzipien und aktuelle Arbeitsweisen zur Entwicklung grafischer Oberflächen an Hand der Systeme Java Swing, Microsoft Foundation Classes (MFC) und KDE 2.x einführen. Zusätzliche Grundlagenanteile bestehen in einem Steilkurs in C++ und allgemeinen Überlegungen zur Mensch-Maschine-Schnittstelle (Human-Computer Interface, HCI).

Unterrichtsform

Die Vorlesung ist seminaristisch; ich werde also versuchen, den Stoff im Gespräch mit Ihnen zu erarbeiten. Wenn Sie nicht folgen können, bremsen Sie mich sofort, indem Sie nachfragen. Das ist eine strikte Anweisung an Sie, keine freundliche Empfehlung. Sie können davon ausgehen, dass andere Studenten dieselben Probleme haben -- das aber nicht kundtun. Um eine Frage zu stellen, müssen Sie sich nicht mit Handzeichen melden. Unterbrechen Sie mich einfach bei der nächstmöglichen Gelegenheit.

Skript

Meine Unterlagen scanne ich ein und stelle sie zum Download bereit. Ich hoffe, meine Schrift ist halbwegs lesbar; ansonsten melden Sie sich bitte zwecks Entzifferung. Die Seiten etwa mit pdfTeX und einem Grafikprogramm sauber aufzubereiten, würde mich mehrere Stunden pro Vorlesung kosten. Diese Zeit möchte ich lieber dazu benutzen, an der Didaktik zu arbeiten.

Eingeschobene Seiten sind nach dem Muster 10, 10a, 10b, 11 nummeriert. Ändere ich Skripte im Nachhinein z.B. wegen Fehlern, stelle ich zusätzlich eine kommentierende HTML-Datei namens changes.html in das jeweilige Verzeichnis.

Bücher und Links

Software

Prüfungsleistungen

Parallel zur Veranstaltung sollen Sie einen elektronischen Terminkalender entwerfen und für die drei besprochenen GUI-Klassenbiblitheken implementieren. Die drei aufeinander aufbauenden Aufgaben dazu bilden eine "praktische Entwicklungsarbeit" (PE) als Prüfungsleistung. Es ist sinnvoll, dass Sie die in Zweiergruppen bearbeiten. Einer"gruppen" lasse ich zwar zu; die Anforderungen bleiben aber die gleichen. Bei der dritten Aufgabe lasse ich Ihnen die Wahl zwischen einem Projekt in MFC oder einem für KDE 2.0. Gehen Sie beide Projektoptionen an, addiere ich die sich jeweils ergebenden Punktzahlen.

Die Abgabefristen für die Teilaufgaben sind in der Terminliste angegeben (Abgabe bis 16 h am jeweiligen Tag). Zusätzlich soll jede Gruppe in einem kleinen Kolloquium Ihre Lösung demonstrieren, erklären und weitergehende Fragen dazu beantworten (Termin pro Gruppe nach Absprache). Ich stehe Ihnen jederzeit für Fragen zur Verfügung (E-Mail bevorzugt), werde aber darauf achten, Ihnen nur Denkanstöße z.B. zur Fehlersuche zu geben, keinesfalls fertige Lösungen. Sie sollten keine fremden Programme abkupfern. Weil Sie diese nicht so gut verstehen wie selbstgeschriebene, bringt Ihnen das sowieso bei der Benotung Nachteile.

Für das Programm vergebe ich null bis drei Punkte, und zwar die kleinste Punktzahl aus den vier Kategorien folgender Tabelle. Die laut Prüfungsordnung geforderte Dokumentation ist Teil des Programms, wie sich aus der Tabelle ergibt.
 

Punktzahl Problemlösung Strukturierung/Klassen Wahl der Bezeichner Kommentierung
0 wesentlicher Teil fehlt konfus konfus praktisch nicht vorhanden
1 weitgehend, aber z.B. wichtige Ausnahmefälle/Fehler nicht behandelt, obwohl in Aufgabe gefordert teilweise logische Mängel teilweise verwirrend Das Programm ist seine eigene Dokumentation. Jede Klasse und jede Methode enthält eine Beschreibung des Algorithmus und wichtiger Variablen.
2 praktisch vollständig logisch verständlich Zusätzlich: Alle kritischen Stellen sind kommentiert
3 vollständig stark modular, leicht zu erweitern und anzupassen selbsterklärend Zusätzlich: Alle nicht auf den ersten Blick einleuchtenden Stellen sind kommentiert.

Ergeben sich in allen Kategorien drei Punkte, vergebe ich vier Punkte für das Programm, wenn es deutlich über die Aufgabenstellung hinausgeht. Das kann zum Beispiel dadurch geschehen, dass die vorgegebene Funktion stark, aber sinnvoll erweitert wird, oder dass ein eventuell vorgegebenes Objektmodell drastisch verbessert wird (Begründung nötig, z.B. als Kommentar).

Im Mini-Kolloquium stelle ich Fragen an jedes Gruppenmitglied, um festzustellen, inwieweit es das Programm verstanden hat. Auch das bewerte ich mit Punkten:

Von den beiden Punktwertungen pro Teilnehmer und Aufgabe verwende ich die jeweils kleinere und bilde daraus zum Schluss die Gesamtnote. Wer pro Aufgabe exakt einen Punkt erzielt, erhält die Note 4,0, wer überall vier Punkte erzielt, die Note 1,0.

Raum und Zeit

Mittwoch 1. und 2. Doppelstunde E407

Termine.

14..Mär Mi C++ für Java-Programmierer: main, Deklaration, Header, Präprozessor, Compiler und Linker
14. Mär Mi Geschichte der grafischen Oberflächen, Event/Message, Event Loop, Message Queue, Paint, Repaint/Invalidate, Beispiele für direkte Programmierung von Win32 und MacOS, Besonderheiten des X Window System
21. Mär Mi C++ für Java-Programmierer: Pointer, Arrays sind Pointer oder auch nicht, Parameterübergabe, Speicherverwaltung mit malloc und new, Referenzen, const
21. Mär Mi Überblick: Funktions-/Klassenbibliotheken für GUI-Programmierung, am Rande: HTML-Formulare, Tcl/Tk, Visual Basic
28. Mär Mi C++ für Java-Programmierer: (weiter: Speicherverwaltung, Referenzen, const), Konstruktor, Destruktor, einfache und mehrfache Vererbung, Attribut-Initialisierung, virtuelle Methoden, überladene und überschriebene Funktionen, Default-Argumente
28. Mär Mi C++ für Java-Programmierer: überladene Operatoren, Default-Methoden, Copy-Konstruktor
18. Apr Mi C++ für Java-Programmierer: (weiter: Copy-Konstruktor), Exceptions, Namespaces, Strings, Stream-I/O für Konsole und Dateien
18. Apr Mi C++ für Java-Programmierer: Typumwandlung, Templates, Standard-C-Library und -C++-Library (inkl. STL) im gröbsten Überblick
25. Apr Mi Metaphern, Design als Prozess, Prototypen, Usablity, Evaluation, "gutes" Design, "Intuitivität"
25. Apr Mi grafische Gestaltung, Icons, Interaktionsmodelle (Fitts, GOMS), Normen/Recht
02. Mai Mi Fenster, Dialoge, Standard-Widgets und ihre übliche Verwendung
02. Mai Mi GUI-Vermischtes: Drag & Drop, Zwischenablage, Undo, Fokus ...
09. Mai Mi Zehnjahresfeier Technische Informatik
09. Mai Mi Abgabe Entwicklungsaufgabe 1: C++-Klassensammlung
16. Mai Mi Swing: Überblick, Objektkommunikation, Multithreading
16. Mai Mi make; grafische Entwicklungsumgebungen, Debugger; assert; Besprechung der Lösungen von Entwicklungsaufgabe 1
28. Mai Mo Terminänderung, 1. Block, E404 Swing: Objektserialisierung, Layout-Manager
28. Mai Mo Terminänderung, 2. Block, E404 Swing: Menüs, Untermenüs, Popup-Menüs, Schaltflächen, Icons, Zeichenflächen
30. Mai Mi Swing: Dialogboxen (modal/nichtmodal), Checkboxen, Radiobuttons, Textfelder, Auswahlfelder, Listen, Scrollflächen, teilbare Flächen, Baumdarstellung
30. Mai Mi MFC: Überblick, Compilierung, Objektkommunikation, Message Map
06. Jun Mi MFC: Buttons, Checkboxen, Radiobuttons, Textfelder, Auswahlfelder, Listen und andere Standard-Controls
06. Jun Mi MFC: Umgang mit Visual C++; Ressourcen; Assistenten; Menüs und Dialoge grafisch entwickeln
13. Jun Mi MFC: Objektserialisierung, MFC-Listenklasse, Menüs, Kontextmenüs, Menü per Ressource
13. Jun Mi MFC: Anwendungs- und Klassenassistent von Microsoft Visual C++, Dialog per Ressource, Dialogbehandlung (modal/nichtmodal), DDX, DDV
13. Jun Mi Abgabe Entwicklungsaufgabe 2: Prototyp in Java Swing
20. Jun Mi KDE 2.0: Überblick, Compilierung (moc, make), Objektkommunikation (Events, Slots und Signals)
20. Jun Mi KDE 2.0: Actions, Menüs, Statuszeile
27. Jun Mi KDE 2.0: Layout-Manager, Dialogboxen (modal/nichtmodal), Schaltflächen, Checkboxen, Radiobuttons, Textfelder, Auswahlfelder, Listen
27. Jul Mi KDE 2.0: Session Management, Dateien, Ressourcen
04. Jul Mi KDE 2.0: Umgang mit KDevelop und Qt Designer
04. Jul Mi Mensch-Maschine-Kommunikation: Trends und Versuche
16. Jul Mo Abgabe Entwicklungsaufgabe 3: Ausführung in MFC
18. Jul Mi Abgabe Entwicklungsaufgabe 3a: Ausführung in KDE 2.0
.