Skip to content Search
Search our website:

Software Design and Programming

Short name: SDP
SITS code: COIY062H7
Credits: 15
Level: 7
Module leader: Keith Mannock
Lecturer(s): Keith Mannock
Online material:

Module outline

This module provides students with the necessary skills for developing software using object-oriented and functional programming paradigms. This ranges from learning object-oriented concepts, designing object-oriented software using a proven methodology and tools, to learning how to program in an object-oriented and functional style. The module provides a detailed examination of Software Design Patterns and the emerging functional features of current day object-oriented programming languages.


The main aim of the module is to provide students with the necessary skills for developing software utlising the object-oriented and functional programming paradigms.

Learning Outcomes

After successfully completing this course, students will be able to:

  • Write programs in an object-oriented and functional language from start to end
  • Write unit tests
  • Utilize Object Oriented and Functional programming principles to create extendible and reusable software applications
  • Design medium-scale applications
  • Collaborate on team projects
  • Review and critique requirements
  • Review software designs and code

We will be using the Java programming language for the 2021-22 session.


A selection from the following topics:

  • The object model and how it is realised in various object-oriented languages (e.g., Kotlin, JavaScript, C#, Java, Scala, Swift, ...)
  • Further development of the ideas of inheritance, polymorphism, and abstraction
  • Language features nested classes, closures, higher-order functions, meta-objects, etc.
  • The functional paradigm. Abstract data types, polymorphic types, static typing and type inference. Recursion and induction. List processing. Higher-order functions. Eager and lazy evaluation. Imperative features. Signatures, structures, functors, type classes, monads
  • Test Driven Design (TDD) and Behavioural Driven Design (BDD)
  • The use of an Integrated Development Environment (IDE) for software development: e.g., editing, debugging, compilation, etc.
  • Modularity, versioning, packaging, and managing the build process
  • Design Patterns and Anti-Patterns and their application to software design
  • The SOLID (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion) approach to object-oriented programming and design
  • Code refactoring and analysis
  • Concurrency and agents/actors

Please note that the materials for this module are presented using a combination of blended learning techniques together with the inverse curriculum approach to teaching.



Indicative timetables can be found in the handbooks available on programme pages. Personalised teaching timetables for students are available via My Birkbeck.


A coursework "portfolio" consisting of individual, pair, and group assignments.


By 3-hour unseen written and practical examination and coursework portfolio; weighting 80% and 20% respectively.

Recommended reading

The module is supported by extensive notes, videos, slides, quizzes, and exercises.

Additional reading:

  • Head First Java by Kathy Sierra and Bert Bates, 3rd Edition, O'Reilly Media. 2021, 978-1-491-91077-1

  • Core Java® SE 9 for the Impatient by Cay Horstmann, 2nd Edition, Addison Wesley, 2018, 978-0-13-469472-6