Software Design and Programming
Overview
- Credit value: 15 credits at Level 7
- Module convenor and tutor: Roman Kontchakov
- Prerequisites: Programming in Java and Fundamentals of Computing, or equivalent
- Assessment: a three-hour examination (80%) and coursework portfolio of programming assignments (20%)
Module description
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. The module provides a detailed examination of software design patterns and the emerging functional features of current day object-oriented programming languages (e.g. Java).
indicative module content
- 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
- 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
- Modularity, versioning, packaging and managing the build process
- Design patterns and anti-patterns and their application to software design
- The SOLID principles (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion) approach to object-oriented programming and design
- Code refactoring and analysis
- Leveraging concurrency and asynchronous processing
Learning objectives
By the end of this module, you will be able to:
- write programs in an object-oriented and functional language
- write appropriate unit tests and understand their place in the software development process
- utilise object oriented and functional programming principles to create extendible and reusable software applications
- design medium-scale applications
- collaborate on team projects
- review and critique software requirements
- review software designs and code.