University of Oxford Logo University of OxfordSoftware Engineering - Home
On Facebook
Follow us on twitter
Linked in
Linked in
Google plus
Google plus
Stumble Upon
Stumble Upon

Object-Oriented Programming

This module teaches the principles of object-oriented and type-driven programming. The language used in this module is TypeScript, but the majority of concepts covered will apply just as well to other object-oriented languages. For a detailed description of the topics that will be covered, please refer to the Contents section below.


This course normally runs three times a year.

Course dates

9th May 2022Oxford University Department of Computer Science 0 places remaining.
31st October 2022Oxford University Department of Computer Science10 places remaining.
16th January 2023Oxford University Department of Computer Science13 places remaining.
15th May 2023Oxford University Department of Computer Science15 places remaining.


On completion, students will be able to solve a range of standard object-oriented programming problems (using TypeScript). They will be able to make educated assessments of the benefits of object-orientation on practical programming tasks. They will be in command of the standard object-oriented mechanics of TypeScript, as detailed in the Contents section below.


Object-oriented models
High-level, comparative analysis of object-oriented models for some major programming languages: C++, Java, Python and JavaScript/TypeScript.
Basic Types
Elementary types (boolean, number, string, bigint). Array and Tuple types. Literal types. Function types. Object literal types and structural typing. Special types (undefined, null, void, any vs unknown, never). Type operations.
Classes and Interfaces
Interfaces vs object literal types. Indexable types. Function types. Iterators and generators. Constructor types. Classes. Property access control (private, protected, public, readonly).
Inheritance. Overloading vs overriding. Dynamic binding and issues. Generics. Variance and type inference.
Advanced types
Polymorphic this types. Type guards and advanced type operators (in, typeof, instanceof, keyof). Mapped types. Conditional types.
Mixins and decorators. Final classes. Discriminated unions. Throws clauses. Some common design patterns (factory, builder, companion, etc).

Try the online TypeScript Playground at:


Some familiarity with imperative programming as well as a basic knowledge of object-oriented concepts (such as classes, inheritance, and polymorphism) will be helpful. Students are asked to ensure that they have basic familiarity with JavaScript/TypeScript programming, though no knowledge of advanced concepts is assumed.