E. Vicario, "Fondamenti di programmazione. Linguaggio C, strutture dati, algoritmi elementari, C++", Editrice Esculapio
D.S. Malik, "Programmazione in C++", Apogeo
L.J. Aguilar, "Fondamenti di programmazione in C++", McGraw-Hill
B. Eckel, "Thinking in C++", freely available (HTML version) from: http://www.mindview.net/Books/DownloadSites
Gamma, Helm, Johnson, Vlissides, "Design patterns", Pearson Education
Additional material (course slides and additional links) available on the course website (http://www.micc.unifi.it/bertini/)
Learning Objectives
Learn the basics of object oriented programming and design patterns.
Students will be able to program OO software in C++, and will have a basic knowledge of OOA and OOD. Representative Design Patterns will be presented.
Prerequisites
Knowledge of C programming.
Teaching Methods
About 60% of lessons will be lectures in the classroom and 40% as programming exercises in labs.
Programming exercises will be assigned during the course, and corrections and evaluations will be delivered through a special web site.
Further information
All the course materials are provided through the e-learning site of the University of Florence.
The exam schedule is maintained on the web site (http://www.micc.unifi.it/bertini)
Type of Assessment
There are 2 types of examination:
1) Written and oral examination:
Written examination will consist of 3-4 questions about theoretical aspect of the course, and 2-4 short programming problems. Oral examination will consist of questions about the topics of the written exam and related arguments.
2) development of a C++ program:
The goal of the program has to be decided in accordance with the instructor. Every 10 days the student will meet the instructor to show the progress, discuss development problems and will be given feedback about his work.
Course program
C++ language:
-Classes and objects
-Data abstraction
-Methods
-Operator Overloading
-Class Inheritance and Multiple Inheritance
-Virtual functions and abstract base classes
-Polymorphism
-Generic programming and templates
-Exceptions handling
OOA, OOD and OOP
-encapsulation
-delegation
-inversion of responsibility
-substitution
-implementation and interface inheritance
-fragile base class
-resource allocation
-responsibility, cohesion, coupling
Introduction to design patterns and idioms
-RAII
Fundamental Design Patterns:
-Observer
-Factory and Singleton
-Adapter