Object-Oriented Programming

The module further develops the core software engineering skills and knowledge following on from the Principles of Programming module.

This module discusses issues specifically related to developing programs for large programming projects and for modern computer hardware architectures.

Object-oriented programming, including the use of subclasses, modules, and library classes to create well-organised programs are covered.

Your understanding of making appropriate choices on the selection of algorithms, their implementation together with the required data structures (e.g. arrays, lists, trees, graphs, depth- and breadth-first search algorithms) will be enhanced.

You will be able to develop programs for modern multi-core architectures utilising functional programming constructs.

Main topics of the module include:

  • Transition to Object-Oriented, including types, encapsulation, inheritance, polymorphism, and message passing
  • Static typing and reference types
  • Further recursion and memorisation
  • Local I/O
  • Generics
  • Style rules
  • Concurrency
  • Further test-driven development through unit testing and JUnit
  • Lambdas and Streams
  • Programming in teams.

Learning outcomes

Upon successful completion of this module, you will be able to:

  • explain and exploit subclasses, inheritance and interfaces to produce modular, well-organised code.
  • demonstrate knowledge of basic concepts and principles of object-orientation such as objects and classes, encapsulation, object state, coupling, cohesion and modularity.
  • demonstrate an understanding of different code styles and approaches for organising and structuring object-orientated code.
  • reason using functional programming constructs.
  • comprehend code that exploits the networking facilities of a modern programming language.
  • apply and produce evidence of an understanding of functional programming constructs.


Two assessment components:

  • Online auto-graded test (25%)
  • End of term coursework (75%)