Size: 2149
Comment:
|
Size: 4868
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
= Die neue Vorlesung Programmierung in C++ = | = Programmierung in C++ = |
Line 3: | Line 3: |
== Inhalt == | '''[die neue Vorlesung im Sommersemester, u.a. Folgeveranstaltung von Info 1]''' |
Line 5: | Line 5: |
''Achtung: Die Reihenfolge hier ist *nicht* die Reihenfolge wie das in der Vorlesung drankommen soll, siehe dazu (II). Es ist einfach der zu vermittelden Stoff, nach Themen geordnet.'' | == Inhalt der Vorlesung == |
Line 7: | Line 7: |
''Achtung 1: Die Reihenfolge hier ist *nicht* die Reihenfolge wie das in der Vorlesung drankommen soll, siehe dazu (II). Es ist einfach der zu vermittelden Stoff, nach Themen geordnet.'' ''Achtung 2: Das hier ist ein erster Entwurf, das kann und wird sich noch ändern.'' |
|
Line 85: | Line 88: |
== Ablauf der Vorlesung == Ablauf der Vorlesung, was die requirements an die Studenten angeht: '''A. Klar spezifizierte einzelne Teile implementieren, andere Teile sind schon da.''' Das ist das, was sie in Info 1 gelernt haben sollten, übertragen auf die neue Sprache, mit allem was dazu gehört: Struktur, Stylesheet, Dokumentation, Makefile, etc. '''B. Das .h file ist vorgegeben, die Studenten müssen ein lauffähiges Programm dazu schreiben.''' Der Umfang erhöht sich, jetzt schon mehrere Methoden die miteinander interagieren. '''C. Wie B aber das .h muss selbst aus der Aufgabenstellung entwickelt werden.''' Ein großer Schritt. Hier müssen die Übungen in zwei Stufen erfolgen. Das .h file muss überprüft und überarbeitet werden, bis es in Ordnung ist. Dann erst die Implementierung im .cpp file. Betreuungsintensiv! '''D. Wie C aber mit unit tests und performance tests.''' Unit tests = einzelne Funktionen überprüfen ob sie das tun was sie tun sollen. Insbesondere border cases überprüfen. Dazu ein Standard C++ unit testing framework benutzen. Performance test = bei einem parser zum Beispiel messen wieviele MB / Sekunde er schafft, und das in eine Programm verpacken, das selbsterklärend ist und jederzeit später noch mal aufgerufen werden kann. '''Ziel am Ende des Kurses:''' selbstständiges Erstellen von state of the art C++ mit allem was dazu gehört (Struktur, Stylesheet, Dokumentation, Unit tests, Performance tests, Makefile) im Umfang von ca. 1000 Zeilen. == Ablauf der Übungen == A. Die Übungen können zu Hause gemacht werden, es gibt aber feste Zeiten und Räume wo mindestens ein Tutor anwesend ist und für Fragen jeder Art zur Verfügung steht. Die Zeiten und Räume sind: Do 9 - 11 Uhr in Geb 82 SR 28 + 29, Do 14 - 16 Uhr in Geb 82 SR 29, Do 16 - 18 Uhr in Geb 82 SR 29, Fr 9 - 11 Uhr in Geb 82 SR 29, Fr 16 - 18 Uhr in Geb 82 SR 28. B. Über die Aufgaben an sich darf gerne mit den Komilitonen diskutiert werden, aber das eigentlich Coding muss jeder für sich machen. Wer auch nur einmal abschreibt o.ä. fliegt raus und kriegt keine Punkte. Wir werden regelmäßig Stichproben machen, es ist nicht schwer Plagiate zu erkennen. C. Jede Übung wird von den Tutoren sorgfältig korrigiert, bewertet und kommentiert. Bei Unklarkeiten lässt sich der Tutor das Programm erklären. (Auch dabei kommt klar raus, wenn jemand ein Programm nicht selber geschrieben hat.) Bei Bedarf kann jeder Student das korrigierte Übungsblatt mit seinem Tutor besprechen. |
Programmierung in C++
[die neue Vorlesung im Sommersemester, u.a. Folgeveranstaltung von Info 1]
Inhalt der Vorlesung
Achtung 1: Die Reihenfolge hier ist *nicht* die Reihenfolge wie das in der Vorlesung drankommen soll, siehe dazu (II). Es ist einfach der zu vermittelden Stoff, nach Themen geordnet.
Achtung 2: Das hier ist ein erster Entwurf, das kann und wird sich noch ändern.
0. Hintergründe
0.1 Was bedeuten die einzelnen Sprachkonstrukte in Maschinensprache. (Ich finde es absurd nicht damit anzufangen. So funktioneren die Dinger nun einmal.)
0.2 C++ ist eine potentiell sehr maschinennahe Sprache, trotzdem high-level Konzepte
0.3 Unterschiede C, C++, Java
1. Drumherum
1.1 Editor, syntax highlighting
1.2 Coding Styleguide, strictly adhere to one
1.3 Makefile, grundlegende Idee, Syntax und Regeln
1.4 .h. und .cpp files, warum, was wohin, Konventionen, Linker + seine Fehlermeldungen verstehen
1.5 Dokumentation, Namensbennenung, Doxygen
1.6 Debugging, gdb + cp
1.7 Code reviews
2. Sprache
2.1 grundlegendeKonstrukte: Deklaration, for, while, if then else, Ausdrücke und Operatoren
2.2 Ein / Ausgabe, Konsole und Dateien
2.3 Command-line arguments processing
2.3 #include, #define, etc.
2.4 pointers (*) und references (&), passing by reference vs. passing by value
2.5 const (wichtig!)
3. Objektorientiert
3.1 Klassen, Objekte, private, public, members functions and variables, static, explicit, Konstruktoren, Destruktoren
3.2 Vererbung, Vererbung Konstruktoren und Destruktoren, abstract + virtual verstehen (tricky!)
4. Performanz
4.1 Timing
4.2 Asymptotische performance, O-Notation, vor allem: linear vs. quadratisch
4.3 Tatsächliche performance, Verständnis grundlegender Maßzahlen für Speicher- und Dateizugriff
4.3 profiling mit gprof + co
5. Basic Software Engineering
5.1 Allgemeines: möglichst kleine Schritte, zwischendurch immer Kompilieren und Ausprobieren, dabei ruhig Sachen machen die man dann wieder löscht.
5.2 Exceptions.
5.3 Unit tests.
6. Advanced stuff (optional)
6.1 Templates
6.2 Iteratoren
6.3 Libraries, static und dynamic
6.4 Packaging
Ablauf der Vorlesung
Ablauf der Vorlesung, was die requirements an die Studenten angeht:
A. Klar spezifizierte einzelne Teile implementieren, andere Teile sind schon da.
Das ist das, was sie in Info 1 gelernt haben sollten, übertragen auf die neue Sprache, mit allem was dazu gehört: Struktur, Stylesheet, Dokumentation, Makefile, etc.
B. Das .h file ist vorgegeben, die Studenten müssen ein lauffähiges Programm dazu schreiben.
Der Umfang erhöht sich, jetzt schon mehrere Methoden die miteinander interagieren.
C. Wie B aber das .h muss selbst aus der Aufgabenstellung entwickelt werden.
Ein großer Schritt. Hier müssen die Übungen in zwei Stufen erfolgen. Das .h file muss überprüft und überarbeitet werden, bis es in Ordnung ist. Dann erst die Implementierung im .cpp file. Betreuungsintensiv!
D. Wie C aber mit unit tests und performance tests.
Unit tests = einzelne Funktionen überprüfen ob sie das tun was sie tun sollen. Insbesondere border cases überprüfen. Dazu ein Standard C++ unit testing framework benutzen. Performance test = bei einem parser zum Beispiel messen wieviele MB / Sekunde er schafft, und das in eine Programm verpacken, das selbsterklärend ist und jederzeit später noch mal aufgerufen werden kann.
Ziel am Ende des Kurses: selbstständiges Erstellen von state of the art C++ mit allem was dazu gehört (Struktur, Stylesheet, Dokumentation, Unit tests, Performance tests, Makefile) im Umfang von ca. 1000 Zeilen.
Ablauf der Übungen
A. Die Übungen können zu Hause gemacht werden, es gibt aber feste Zeiten und Räume wo mindestens ein Tutor anwesend ist und für Fragen jeder Art zur Verfügung steht. Die Zeiten und Räume sind: Do 9 - 11 Uhr in Geb 82 SR 28 + 29, Do 14 - 16 Uhr in Geb 82 SR 29, Do 16 - 18 Uhr in Geb 82 SR 29, Fr 9 - 11 Uhr in Geb 82 SR 29, Fr 16 - 18 Uhr in Geb 82 SR 28.
B. Über die Aufgaben an sich darf gerne mit den Komilitonen diskutiert werden, aber das eigentlich Coding muss jeder für sich machen. Wer auch nur einmal abschreibt o.ä. fliegt raus und kriegt keine Punkte. Wir werden regelmäßig Stichproben machen, es ist nicht schwer Plagiate zu erkennen.
C. Jede Übung wird von den Tutoren sorgfältig korrigiert, bewertet und kommentiert. Bei Unklarkeiten lässt sich der Tutor das Programm erklären. (Auch dabei kommt klar raus, wenn jemand ein Programm nicht selber geschrieben hat.) Bei Bedarf kann jeder Student das korrigierte Übungsblatt mit seinem Tutor besprechen.