Software Design and Programming
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.
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:
- 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.
- Pass in the Principles of Programming II module and Fundamentals of Computing module, or equivalent.
- You must be conversant with the materials covered in the following LinkedIn Learning courses:
- You will be tested on the above materials.
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.
The module is supported by extensive notes, videos, slides, quizzes, and exercises.
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