Course organization
The course is organized into two modules:- Advanced Programming with C++, 12 lectures of 2 hours each, 3 credits
- Object Oriented Design methodologies, 12 lectures of 2 hours each, 3 credits
PhD students and Allievi Ordinari: both modules are open to PhD students and Allievi Ordinari of Scuola Superiore Sant'Anna. Frequency is not mandatory. At the end of each exam, an oral examination is required.
Graduate Program's student: students of the GPIST must followingboth modules. At the end the exam will consist of a project, plus an oral exam that will include arguments from the first semester (Java programming). The web-page for first semester is here.
Exams
The exam dates are:- 16 June 2011
- 1 July 2011
Reference Books
For the first module (Advanced programming with C++), the following books can be used as a reference:- Thinking in C++, volume 1 (Bruce Eckel), also freely available on-line, for example here (C++ language)
- B. Stroustrup, "The C++ Programming language" (C++ language)
- E. Gamma, R. Helm, R. Johnson, J. Vlissides, "Design Patterns, elements of reusable object-oriented software" (Design Patterns)
- A. Alexandrescu, "Modern C++ design" (Template metaprogramming, and Typelists)
- H. Sutter, "Exceptional C++" (various programming techniques with C++)
- M. Fowler "Refactoring, improving the design of existing code" (refactoring)
- D. Schmidt, M. Stal, H. Rohnert, F. Buschmann, "Pattern Oriented Software Architecture, volume 2, patterns for concurrent and networked objects" (distributed patterns)
- K. Beck, "Extreme Programming Explained" (the XP philosophy)
Slides
First module (Advanced Programming with C++):- C++ summary: here we summarise the main feauters of the C++ programming language. Many of these features are just quickly described here, but will be used later in the course (printable version). Examples:
- Very Quick and Dirty Overview of UML class diagrams (printable version)
- OO design principles: why object oriented programming, the five SOLID principles, a general overview of design patterns (printable version). Examples:
- Creational patterns: how to create objects in a flexible, extendible, independent manner (printable version)
- Structural patterns: the internal architecture of our objects, and their relationship. Inheritance vs. composition (printable version)
- Behavioural patterns: how to dynamically compose objects to achieve the desired behaviour (printable version)
- An example: Discrete Event Simulation
- Template metaprogramming (printable version)
- Example code (you have to install the loki library: in ubuntu, "apt-get install libloki"
- Class generation and functors (printable version)
- Generic Visitor and Generic Observer (no slides)
- Safety to exceptions (printable version)
- Concurrency (printable version)
- The boost library (printable version)
- Active Object (printable version)
- Test Driven Design (printable version)
Schedule
Here is the calendar for the course: the course lectures are marked with C++(GL) for the first module, and as OOD(GL) for the second module.
Variations will be announced in the "News" section.