Object-oriented approach to software development prevails in all of its three phases: analysis, design and implementation. The aim of this course is to give the students a firm understanding of basic concepts and notions of object theory and sketch its formal foundations.
Basic knowledge of programming.
After completing this course, students will understand basic concepts and notions of object theory and will be able to apply them correctly in moderately difficult situations.
Introduction, motivation; objects and pointers, static and non-static methods; polymorphism, Liskov subsitution principle; composition, inheritance; encapsulation, state consistency; design patterns factory method, singleton, abstract factory, nonstatic context, state, strategy, observer, iterator, interpreter, visitor; Featherweight Java; typing, generic classes, covariance and contravariance; polymorphism vs. specialization; multiple inheritance; polymorphism vs. inheritance; representation exposure.
1. B. Eckel: Thinking in Java
2. Er. Gamma et al.: Design Patterns: Elements of Reusable Object-Oriented Software
3. Course webpage: https://cw.fel.cvut.cz/wiki/courses/ad7b36omo/start