Software Design and Programming

This module will provide you with the necessary skills to design software in an object-oriented way according to high quality standards.

This module provides you 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.

You will also learn a detailed examination of software design patterns and the emerging functional features of current day object-oriented programming languages.

Main topics of the module include:

  • The object model and how it is realised in various object-oriented languages
  • Further development of the ideas of inheritance, polymorphism, and abstraction
  • Language features nested classes, closures, higher-order functions, meta-objects, etc
  • The functional paradigm
  • An introduction to Test Driven Design (TDD) and Behavioural Driven Design (BDD)
  • The use of an Integrated Development Environment (IDE) for software development
  • 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.

Learning outcomes

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

  • demonstrate an understanding of basic elements of software development.
  • understand language features, including nested classes, closures, higher-order functions, meta-objects.
  • design patterns and anti-patterns and their application to software design.
  • understand the specification of a problem and realise this in terms of a computer programme.
  • demonstrate an awareness of modularity, versioning, packaging and managing the build process of a computer program.
  • compare and contrast design patterns and anti-patterns and their application to software design applied to specific tasks.

Assessment

Two assessment components:

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