Objektorientierte Programmierung mit C++
Diese Vorlesung führt in die objekt-orientierte Programmierung mit C++14 ein. Hierbei stehen nach einer Einführung die Techniken im Vordergrund, die von anderen objekt-orientierten Programmiersprachen wie insbesondere Java nicht unterstützt werden. Dazu gehören insbesondere der statische Polymorphismus und die Meta-Programmierung, die viele Entscheidungen und Anpassungen in die Übersetzzeit verlagern. Zielsetzung ist die Erlernung objekt-orientierter Modellierungstechniken, die ein hohes Grad an Abstraktion, Flexibilität und Wiederanwendbarkeit ermöglichen, ohne dabei Kompromisse zu Lasten der Performance eingehen zu müssen. Die Vorlesung bietet daher eine Grundlage für die Anwendung von C++ im Bereich des High Performance Computing. Im SS 2017 gibt es im Anschluss die Vorlesung Parallele Programmierung mit C++.
Inhalt
- Einführung in OO-Design, UML und Design by Contract
- Einführung in C++
- Dynamischer Polymorphismus in C++
- Generische Module auf Basis von Templates
- Statischer Polymorphismus auf Basis von Templates
- Metaprogrammierung, Funktionsobjekte und λ-Ausdrücke
- STL-Bibliothek, iostreams-Bibliothek
- Potentiale und Auswirkungen optimierende Übersetzer bei C++
Termine
- Vorlesung: Dienstag 10–12 Uhr, Helmholtzstraße 22, Raum E.04
- Übungen: Donnerstag 16–18 Uhr, Helmholtzstraße 18, Raum E.20
Die Vorlesung am 10. Januar fällt krankheitsbedingt aus.
Voraussetzungen
Vorausgesetzt werden die Kenntnisse aus einer Grundvorlesung für Informatik. Insbesondere sollten elementare Algorithmen und Datenstrukturen bekannt sein und praktische Erfahrungen mit einer Programmiersprache bestehen (z.B. Java). In den Übungen wird auf der Kommandozeile unter UNIX bzw. Linux gearbeitet. Entsprechende Kenntnisse wären vorteilhaft.
Prüfungen
Die Vorlesung ist ein Wahlpflichtmodul im Modulhandbuch der Master-Studiengänge Informatik, Mathematik und Wirtschaftsmathematik. Die schriftlichen Prüfungstermine sind am Donnerstag, den 2. März 2017, 14:00 Uhr, im H12 und am Donnerstag, den 6. April, 14:00 Uhr, ebenfalls im H12. Die Prüfungszeit beträgt jeweils 120 Minuten. Hilfsmittel sind nicht zugelassen mit der Ausnahme von bis zu fünf handgeschriebenen Zetteln (bis zu ISO A4, beidseitige Beschriftung ist ok). Bitte melden Sie sich für die Prüfungen im Uniportal an.
Für die Vorbereitung auf die schriftliche Prüfung steht eine Probeklausur zur Verfügung, die in der Vorlesung am 14. Februar 2017 besprochen werden wird.
Vorlesungen
Begleitend zur Vorlesung werden hier die verwendeten Vorlesungsfolien und Beispiele veröffentlicht:
- 25. Oktober 2016: Folien (Syllabus, Einführung in OO-Techniken)
- 3. November 2016: Folien (Einführung in C++)
- 8. November 2016: Folien (Einführung in UML, design by contract)
- 15. November 2016: Folien (Einführung zu Klassen in C++, RAII)
- 22. November 2016: Folien (Dynamische Datenstrukturen, dynamischer Polymorphismus)
- 29. November 2016: Folien (Generische Deklarationen)
- 6. Dezember 2016: Folien (Statischer Polymorphismus I)
- 13. Dezember 2016: Folien (Statischer Polymorphismus II)
- 20. Dezember 2016: Folien (Ausnahmenbehandlungen)
- 17. Januar 2017: Folien (Intelligente Zeiger)
- 24. Januar 2017: Folien (Funktionsobjekte und λ-Ausdrücke)
- 31. Januar 2017: Folien (Einführung in die STL)
- 7. Februar 2017: Folien (Fortgeschrittene Template-Techniken)
- Alle Folien in einer PDF-Datei einschließlich einer Navigation (Stand: 7. Februar 2017)
Übungen
- Melden Sie sich bitte für die Teilnahme in den Übungen bei SLC an.
- Die Übungen sind zeitintensiv und integraler Teil einer praxisorientierten Vorlesung.
Übungsblätter:
Blatt | Ausgabe | Abgabe | Material | Lösung | |
---|---|---|---|---|---|
1 | 27. Oktober 2016 | 3. November 2016 | blatt01.pdf | ||
2 | 3. November 2016 | 10. November 2016 | blatt02.pdf | Nim | |
3 | 10. November 2016 | 17. November 2016 | blatt03.pdf | classdiag.pdf | |
4 | 17. November 2016 | 24. November 2016 | blatt04.pdf | Einfacher Stack: In C++ und im C-Stil | Stack |
5 | 24. November 2016 | 1. Dezember 2016 | blatt05.pdf | Dynfunctions und ein Mini-Beispiel | nim2player |
6 | 1. Dezember 2016 | 8. Dezember 2016 | blatt06.pdf | trie | |
7 | 8. Dezember 2016 | 15. Dezember 2016 | blatt07.pdf | trie2 (Aufgabe 8), trie3 (Aufgabe 9) | |
8 | 15. Dezember 2016 | 22. Dezember 2016 | blatt08.pdf | concatenated | |
9 | 22. Dezember 2016 | 12. Januar 2017 | blatt09.pdf | MemObj | |
10 | 12. Januar 2017 | 19. Januar 2017 | blatt10.pdf | Mandelbrot | |
11 | 19. Januar 2017 | 26. Januar 2017 | blatt11.pdf | trie4 | |
12 | 26. Januar 2017 | 2. Februar 2017 | blatt12.pdf | lambda.tar.gz | parser.cpp |
13 | 2. Februar 2017 | 9. Februar 2017 | blatt13.pdf | movies.latin1, movies.utf8 | movies.tar.gz |
14 | 9. Februar 2017 | 16. Februar 2017 | blatt14.pdf | nim.tar.gz | nim-loesung.tar.gz |
Kontakt
Dr. Andreas F. Borchert
Helmholtzstr. 20
Raum 1.22
Dr. Michael Lehn
Helmholtzstr. 20
Raum 1.07