Object Oriented Programming
Foundations
- Genealogy of object oriented languages: structured programming, modular programming, abstract data types, encapsulation, typed and untyped languages, coupling and cohesion.
Concepts
- Objects and Classes. Object creation. Objects vs variables. Memory management, garbage collection. Class variables and instance variables. Object initialisation. Constructors and destructors. Methods and messages. Method signatures. Method and operator overloading.
- Single and multiple inheritance. Subclasses and superclasses. Overriding. Invocation of superclass methods and constructors. The relationship between types and classes. Polymorphism. Abstract classes. Inheritance hierarchies. Software reuse.
- Encapsulation: public, private and protected variables and methods.
- Delegation. Collection classes.
Design
- Unified Modelling Language (UML). Use case diagrams: actors, system boundary, <<uses>> and <<extends>>. Scenarios. Class diagrams: associations, aggregation, dependency, and inheritance. Object interaction diagrams, object state transition diagrams. Object constraint language (OCL): invariants, preconditions, postconditions.
- Design patterns. Pattern documentation: motivation, prerequisites, structure, participants and consequences. Examples of patterns: Adapter, Decorator, Iterator, Observer, Singleton.
Practice
- Iterative and incremental development styles.
- Design of class hierarchies, refactoring.
- Implementation of designs in an object-oriented programming language.
- Testing object-oriented code. Class testing, constructing class tests from OCL or state transition diagrams, test driver construction. Testing interactions and class hierarchies.

