This programming course emphasizes the methodology of programming from an object-oriented perspective and software engineering principles. It allows students to develop the ability to analyses programming problems and design and document suitable solutions and to implement reliable and robust software using contemporary program design methods. Topics to be dealt with are: classes: data abstraction, information hiding, overloading; inheritance; polymorphism; exceptions handling.