Software Design and Programming
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 utilising the Java programming language.
A selection from the following topics:
- The object model and how it is realised in various object-oriented languages (e.g., Java, Scala, Ruby, C++, ...)
- Further development the ideas of inheritance, polymorphism, and abstraction
- Language features: inner 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, typeclasses, monads
- An introduction to 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.
- Pass in the Principles of Programming modules (or Programming in Java).
Please note: Students who do not qualify via the above route will need to complete an additional (free) primer course prior to commencing this module and pass an entrance test. The short course must be attempted in the summer prior to taking this module and details are sent out at the end of the summer term; the test takes place in late-September.
All dates and timetables are listed in the programme handbooks of individual programmes.
A coursework "portfolio" consisting of graded exercises.
By 3-hour unseen written and practical examination and coursework exercises; weighting 80% and 20% respectively.
- Scala for the Impatient by Cay Horstmann, 2nd Edition, Addison-Wesley Professional, 2016. ISBN-10: 0-13-454063-8
- Scala Design Patterns, Patterns for Practical Reuse and Design by John Hunt, Springer International Publishing, 2013. ISBN-13: 978-3-319-02191-1
- Scala Design Patterns by Ivan Nikolov, Packt Publishing; 2016. ISBN-10: 1785882503